From 0c1756ba4347bbcde13082efb6f1e85c43175340 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Sun, 10 May 2026 17:41:54 -0400 Subject: [PATCH 01/18] core: add v2 provider model API --- AGENTS.md | 23 + bun.lock | 32 ++ packages/core/package.json | 28 +- packages/core/src/aisdk.ts | 172 +++++++ .../{opencode/src/v2 => core/src}/auth.ts | 48 +- packages/core/src/catalog.ts | 258 ++++++++++ packages/core/src/model.ts | 116 +++++ packages/core/src/plugin.ts | 146 ++++++ packages/core/src/plugin/auth.ts | 27 + packages/core/src/plugin/env.ts | 18 + packages/core/src/plugin/provider.ts | 1 + packages/core/src/plugin/provider/alibaba.ts | 15 + .../src/plugin/provider/amazon-bedrock.ts | 94 ++++ .../core/src/plugin/provider/anthropic.ts | 21 + packages/core/src/plugin/provider/azure.ts | 67 +++ packages/core/src/plugin/provider/cerebras.ts | 20 + .../plugin/provider/cloudflare-ai-gateway.ts | 81 +++ .../plugin/provider/cloudflare-workers-ai.ts | 69 +++ packages/core/src/plugin/provider/cohere.ts | 15 + .../core/src/plugin/provider/deepinfra.ts | 15 + packages/core/src/plugin/provider/dynamic.ts | 31 ++ packages/core/src/plugin/provider/gateway.ts | 15 + packages/core/src/plugin/provider/gitlab.ts | 64 +++ .../core/src/plugin/provider/google-vertex.ts | 124 +++++ packages/core/src/plugin/provider/google.ts | 15 + packages/core/src/plugin/provider/groq.ts | 15 + packages/core/src/plugin/provider/index.ts | 65 +++ packages/core/src/plugin/provider/kilo.ts | 16 + .../core/src/plugin/provider/llmgateway.ts | 18 + packages/core/src/plugin/provider/mistral.ts | 15 + packages/core/src/plugin/provider/nvidia.ts | 16 + .../src/plugin/provider/openai-compatible.ts | 17 + packages/core/src/plugin/provider/openai.ts | 27 + packages/core/src/plugin/provider/opencode.ts | 27 + .../core/src/plugin/provider/openrouter.ts | 29 ++ .../core/src/plugin/provider/perplexity.ts | 15 + .../core/src/plugin/provider/sap-ai-core.ts | 40 ++ .../core/src/plugin/provider/togetherai.ts | 15 + packages/core/src/plugin/provider/venice.ts | 15 + packages/core/src/plugin/provider/vercel.ts | 21 + packages/core/src/plugin/provider/xai.ts | 20 + packages/core/src/plugin/provider/zenmux.ts | 16 + packages/core/src/provider.ts | 120 +++++ .../src/v2 => core/src}/session-prompt.ts | 0 .../src/v2 => core/src}/tool-output.ts | 0 .../v2/schema.ts => core/src/v2-schema.ts} | 2 +- .../util => core/test}/effect-zod.test.ts | 0 packages/core/test/v2/catalog.test.ts | 199 ++++++++ .../v2/plugin/fixtures/provider-factory.ts | 9 + .../test/v2/plugin/provider-alibaba.test.ts | 67 +++ .../v2/plugin/provider-amazon-bedrock.test.ts | 464 ++++++++++++++++++ .../test/v2/plugin/provider-anthropic.test.ts | 91 ++++ .../provider-azure-cognitive-services.test.ts | 127 +++++ .../test/v2/plugin/provider-azure.test.ts | 245 +++++++++ .../test/v2/plugin/provider-cerebras.test.ts | 102 ++++ .../provider-cloudflare-ai-gateway.test.ts | 384 +++++++++++++++ .../provider-cloudflare-workers-ai.test.ts | 267 ++++++++++ .../test/v2/plugin/provider-cohere.test.ts | 86 ++++ .../test/v2/plugin/provider-deepinfra.test.ts | 129 +++++ .../test/v2/plugin/provider-dynamic.test.ts | 172 +++++++ .../test/v2/plugin/provider-gitlab.test.ts | 346 +++++++++++++ .../provider-google-vertex-anthropic.test.ts | 147 ++++++ .../v2/plugin/provider-google-vertex.test.ts | 300 +++++++++++ .../test/v2/plugin/provider-google.test.ts | 70 +++ .../core/test/v2/plugin/provider-groq.test.ts | 101 ++++ .../core/test/v2/plugin/provider-helper.ts | 100 ++++ .../core/test/v2/plugin/provider-kilo.test.ts | 90 ++++ .../v2/plugin/provider-llmgateway.test.ts | 63 +++ .../test/v2/plugin/provider-mistral.test.ts | 106 ++++ .../test/v2/plugin/provider-nvidia.test.ts | 41 ++ .../plugin/provider-openai-compatible.test.ts | 101 ++++ .../test/v2/plugin/provider-openai.test.ts | 100 ++++ .../test/v2/plugin/provider-opencode.test.ts | 195 ++++++++ .../v2/plugin/provider-openrouter.test.ts | 105 ++++ .../v2/plugin/provider-perplexity.test.ts | 107 ++++ .../v2/plugin/provider-sap-ai-core.test.ts | 127 +++++ .../v2/plugin/provider-togetherai.test.ts | 97 ++++ .../test/v2/plugin/provider-venice.test.ts | 86 ++++ .../test/v2/plugin/provider-vercel.test.ts | 62 +++ .../core/test/v2/plugin/provider-xai.test.ts | 115 +++++ .../test/v2/plugin/provider-zenmux.test.ts | 103 ++++ packages/opencode/src/cli/cmd/debug/index.ts | 2 + packages/opencode/src/cli/cmd/debug/v2.ts | 40 ++ .../src/cli/cmd/tui/routes/session/index.tsx | 33 +- packages/opencode/src/provider/provider.ts | 23 +- .../routes/instance/httpapi/groups/v2.ts | 4 + .../instance/httpapi/groups/v2/model.ts | 24 + .../instance/httpapi/groups/v2/provider.ts | 38 ++ .../instance/httpapi/groups/v2/session.ts | 2 +- .../routes/instance/httpapi/handlers/v2.ts | 10 +- .../instance/httpapi/handlers/v2/model.ts | 12 + .../instance/httpapi/handlers/v2/provider.ts | 22 + packages/opencode/src/session/llm.ts | 1 - packages/opencode/src/session/processor.ts | 9 +- packages/opencode/src/session/prompt.ts | 11 +- packages/opencode/src/session/status.ts | 1 - packages/opencode/src/v2/model.ts | 193 -------- packages/opencode/src/v2/plugin-boot.ts | 50 ++ packages/opencode/src/v2/plugin/models-dev.ts | 108 ++++ .../src/v2/plugin/provider/github-copilot.ts | 44 ++ .../opencode/src/v2/plugin/provider/index.ts | 7 + .../src/v2/provider-parity-checklist.md | 95 ++++ packages/opencode/src/v2/session-event.ts | 12 +- packages/opencode/src/v2/session-message.ts | 10 +- packages/opencode/src/v2/session.ts | 35 +- .../opencode/test/provider/provider.test.ts | 81 +++ .../test/server/httpapi-session.test.ts | 9 +- .../test/v2/plugin/provider-gateway.test.ts | 95 ++++ .../v2/plugin/provider-github-copilot.test.ts | 188 +++++++ .../v2/plugin/provider-sdk-matching.test.ts | 98 ++++ .../test/v2/session-message-updater.test.ts | 21 +- packages/sdk/js/src/v2/gen/sdk.gen.ts | 38 ++ packages/sdk/js/src/v2/gen/types.gen.ts | 91 ++++ specs/v2/provider-model.md | 329 +++++++++++++ 114 files changed, 8367 insertions(+), 297 deletions(-) create mode 100644 packages/core/src/aisdk.ts rename packages/{opencode/src/v2 => core/src}/auth.ts (86%) create mode 100644 packages/core/src/catalog.ts create mode 100644 packages/core/src/model.ts create mode 100644 packages/core/src/plugin.ts create mode 100644 packages/core/src/plugin/auth.ts create mode 100644 packages/core/src/plugin/env.ts create mode 100644 packages/core/src/plugin/provider.ts create mode 100644 packages/core/src/plugin/provider/alibaba.ts create mode 100644 packages/core/src/plugin/provider/amazon-bedrock.ts create mode 100644 packages/core/src/plugin/provider/anthropic.ts create mode 100644 packages/core/src/plugin/provider/azure.ts create mode 100644 packages/core/src/plugin/provider/cerebras.ts create mode 100644 packages/core/src/plugin/provider/cloudflare-ai-gateway.ts create mode 100644 packages/core/src/plugin/provider/cloudflare-workers-ai.ts create mode 100644 packages/core/src/plugin/provider/cohere.ts create mode 100644 packages/core/src/plugin/provider/deepinfra.ts create mode 100644 packages/core/src/plugin/provider/dynamic.ts create mode 100644 packages/core/src/plugin/provider/gateway.ts create mode 100644 packages/core/src/plugin/provider/gitlab.ts create mode 100644 packages/core/src/plugin/provider/google-vertex.ts create mode 100644 packages/core/src/plugin/provider/google.ts create mode 100644 packages/core/src/plugin/provider/groq.ts create mode 100644 packages/core/src/plugin/provider/index.ts create mode 100644 packages/core/src/plugin/provider/kilo.ts create mode 100644 packages/core/src/plugin/provider/llmgateway.ts create mode 100644 packages/core/src/plugin/provider/mistral.ts create mode 100644 packages/core/src/plugin/provider/nvidia.ts create mode 100644 packages/core/src/plugin/provider/openai-compatible.ts create mode 100644 packages/core/src/plugin/provider/openai.ts create mode 100644 packages/core/src/plugin/provider/opencode.ts create mode 100644 packages/core/src/plugin/provider/openrouter.ts create mode 100644 packages/core/src/plugin/provider/perplexity.ts create mode 100644 packages/core/src/plugin/provider/sap-ai-core.ts create mode 100644 packages/core/src/plugin/provider/togetherai.ts create mode 100644 packages/core/src/plugin/provider/venice.ts create mode 100644 packages/core/src/plugin/provider/vercel.ts create mode 100644 packages/core/src/plugin/provider/xai.ts create mode 100644 packages/core/src/plugin/provider/zenmux.ts create mode 100644 packages/core/src/provider.ts rename packages/{opencode/src/v2 => core/src}/session-prompt.ts (100%) rename packages/{opencode/src/v2 => core/src}/tool-output.ts (100%) rename packages/{opencode/src/v2/schema.ts => core/src/v2-schema.ts} (88%) rename packages/{opencode/test/util => core/test}/effect-zod.test.ts (100%) create mode 100644 packages/core/test/v2/catalog.test.ts create mode 100644 packages/core/test/v2/plugin/fixtures/provider-factory.ts create mode 100644 packages/core/test/v2/plugin/provider-alibaba.test.ts create mode 100644 packages/core/test/v2/plugin/provider-amazon-bedrock.test.ts create mode 100644 packages/core/test/v2/plugin/provider-anthropic.test.ts create mode 100644 packages/core/test/v2/plugin/provider-azure-cognitive-services.test.ts create mode 100644 packages/core/test/v2/plugin/provider-azure.test.ts create mode 100644 packages/core/test/v2/plugin/provider-cerebras.test.ts create mode 100644 packages/core/test/v2/plugin/provider-cloudflare-ai-gateway.test.ts create mode 100644 packages/core/test/v2/plugin/provider-cloudflare-workers-ai.test.ts create mode 100644 packages/core/test/v2/plugin/provider-cohere.test.ts create mode 100644 packages/core/test/v2/plugin/provider-deepinfra.test.ts create mode 100644 packages/core/test/v2/plugin/provider-dynamic.test.ts create mode 100644 packages/core/test/v2/plugin/provider-gitlab.test.ts create mode 100644 packages/core/test/v2/plugin/provider-google-vertex-anthropic.test.ts create mode 100644 packages/core/test/v2/plugin/provider-google-vertex.test.ts create mode 100644 packages/core/test/v2/plugin/provider-google.test.ts create mode 100644 packages/core/test/v2/plugin/provider-groq.test.ts create mode 100644 packages/core/test/v2/plugin/provider-helper.ts create mode 100644 packages/core/test/v2/plugin/provider-kilo.test.ts create mode 100644 packages/core/test/v2/plugin/provider-llmgateway.test.ts create mode 100644 packages/core/test/v2/plugin/provider-mistral.test.ts create mode 100644 packages/core/test/v2/plugin/provider-nvidia.test.ts create mode 100644 packages/core/test/v2/plugin/provider-openai-compatible.test.ts create mode 100644 packages/core/test/v2/plugin/provider-openai.test.ts create mode 100644 packages/core/test/v2/plugin/provider-opencode.test.ts create mode 100644 packages/core/test/v2/plugin/provider-openrouter.test.ts create mode 100644 packages/core/test/v2/plugin/provider-perplexity.test.ts create mode 100644 packages/core/test/v2/plugin/provider-sap-ai-core.test.ts create mode 100644 packages/core/test/v2/plugin/provider-togetherai.test.ts create mode 100644 packages/core/test/v2/plugin/provider-venice.test.ts create mode 100644 packages/core/test/v2/plugin/provider-vercel.test.ts create mode 100644 packages/core/test/v2/plugin/provider-xai.test.ts create mode 100644 packages/core/test/v2/plugin/provider-zenmux.test.ts create mode 100644 packages/opencode/src/cli/cmd/debug/v2.ts create mode 100644 packages/opencode/src/server/routes/instance/httpapi/groups/v2/model.ts create mode 100644 packages/opencode/src/server/routes/instance/httpapi/groups/v2/provider.ts create mode 100644 packages/opencode/src/server/routes/instance/httpapi/handlers/v2/model.ts create mode 100644 packages/opencode/src/server/routes/instance/httpapi/handlers/v2/provider.ts delete mode 100644 packages/opencode/src/v2/model.ts create mode 100644 packages/opencode/src/v2/plugin-boot.ts create mode 100644 packages/opencode/src/v2/plugin/models-dev.ts create mode 100644 packages/opencode/src/v2/plugin/provider/github-copilot.ts create mode 100644 packages/opencode/src/v2/plugin/provider/index.ts create mode 100644 packages/opencode/src/v2/provider-parity-checklist.md create mode 100644 packages/opencode/test/v2/plugin/provider-gateway.test.ts create mode 100644 packages/opencode/test/v2/plugin/provider-github-copilot.test.ts create mode 100644 packages/opencode/test/v2/plugin/provider-sdk-matching.test.ts create mode 100644 specs/v2/provider-model.md diff --git a/AGENTS.md b/AGENTS.md index 7913ddabd28e..0b1998ec5012 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -73,6 +73,29 @@ function foo() { } ``` +### Complex Logic + +When a function has several validation branches or supporting details, make the main function read as the happy path and move supporting details into small helpers below it. + +```ts +// Good +export function loadThing(input: unknown) { + const config = requireConfig(input) + const metadata = readMetadata(input) + return createThing({ config, metadata }) +} + +function requireConfig(input: unknown) { + ... +} +``` + +- Keep helpers close to the code they support, below the main export when that improves readability. +- Do not over-abstract simple expressions into many single-use helpers; extract only when it names a real concept like `requireConfig` or `readMetadata`. +- Do not return `Effect` from helpers unless they actually perform effectful work. Synchronous parsing, validation, and option building should stay synchronous. +- Prefer Effect schema helpers such as `Schema.UnknownFromJsonString` and `Schema.decodeUnknownOption` over manual `JSON.parse` wrapped in `Effect.try` when parsing untrusted JSON strings. +- Add comments for non-obvious constraints and surprising behavior, not for obvious assignments or control flow. + ### Schema Definitions (Drizzle) Use snake_case for field names so column names don't need to be redefined as strings. diff --git a/bun.lock b/bun.lock index c3758e2326f2..467ffed5410a 100644 --- a/bun.lock +++ b/bun.lock @@ -200,21 +200,47 @@ "opencode": "./bin/opencode", }, "dependencies": { + "@ai-sdk/alibaba": "1.0.17", + "@ai-sdk/amazon-bedrock": "4.0.96", + "@ai-sdk/anthropic": "3.0.71", + "@ai-sdk/azure": "3.0.49", + "@ai-sdk/cerebras": "2.0.41", + "@ai-sdk/cohere": "3.0.27", + "@ai-sdk/deepinfra": "2.0.41", + "@ai-sdk/gateway": "3.0.104", + "@ai-sdk/google": "3.0.63", + "@ai-sdk/google-vertex": "4.0.112", + "@ai-sdk/groq": "3.0.31", + "@ai-sdk/mistral": "3.0.27", + "@ai-sdk/openai": "3.0.53", + "@ai-sdk/openai-compatible": "2.0.41", + "@ai-sdk/perplexity": "3.0.26", + "@ai-sdk/provider": "3.0.8", + "@ai-sdk/togetherai": "2.0.41", + "@ai-sdk/vercel": "2.0.39", + "@ai-sdk/xai": "3.0.82", + "@aws-sdk/credential-providers": "3.993.0", "@effect/opentelemetry": "catalog:", "@effect/platform-node": "catalog:", "@npmcli/arborist": "9.4.0", "@npmcli/config": "10.8.1", + "@openrouter/ai-sdk-provider": "2.8.1", "@opentelemetry/api": "1.9.0", "@opentelemetry/context-async-hooks": "2.6.1", "@opentelemetry/exporter-trace-otlp-http": "0.214.0", "@opentelemetry/sdk-trace-base": "2.6.1", + "ai-gateway-provider": "3.1.2", "cross-spawn": "catalog:", "effect": "catalog:", + "gitlab-ai-provider": "6.6.0", "glob": "13.0.5", + "google-auth-library": "10.5.0", + "immer": "11.1.4", "mime-types": "3.0.2", "minimatch": "10.2.5", "npm-package-arg": "13.0.2", "semver": "^7.6.3", + "venice-ai-sdk-provider": "2.0.1", "xdg-basedir": "5.1.0", "zod": "catalog:", }, @@ -5591,6 +5617,12 @@ "@openauthjs/openauth/jose": ["jose@5.9.6", "", {}, "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ=="], + "@opencode-ai/core/@ai-sdk/anthropic": ["@ai-sdk/anthropic@3.0.71", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-bUWOzrzR0gJKJO/PLGMR4uH2dqEgqGhrsCV+sSpk4KtOEnUQlfjZI/F7BFlqSvVpFbjdgYRRLysAeEZpJ6S1lg=="], + + "@opencode-ai/core/@ai-sdk/openai": ["@ai-sdk/openai@3.0.53", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-Wld+Rbc05KaUn08uBt06eEuwcgalcIFtIl32Yp+GxuZXUQwOb6YeAuq+C6da4ch6BurFoqEaLemJVwjBb7x+PQ=="], + + "@opencode-ai/core/@ai-sdk/openai-compatible": ["@ai-sdk/openai-compatible@2.0.41", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-kNAGINk71AlOXx10Dq/PXw4t/9XjdK8uxfpVElRwtSFMdeSiLVt58p9TPx4/FJD+hxZuVhvxYj9r42osxWq79g=="], + "@opencode-ai/desktop/@actions/artifact": ["@actions/artifact@4.0.0", "", { "dependencies": { "@actions/core": "^1.10.0", "@actions/github": "^6.0.1", "@actions/http-client": "^2.1.0", "@azure/core-http": "^3.0.5", "@azure/storage-blob": "^12.15.0", "@octokit/core": "^5.2.1", "@octokit/plugin-request-log": "^1.0.4", "@octokit/plugin-retry": "^3.0.9", "@octokit/request": "^8.4.1", "@octokit/request-error": "^5.1.1", "@protobuf-ts/plugin": "^2.2.3-alpha.1", "archiver": "^7.0.1", "jwt-decode": "^3.1.2", "unzip-stream": "^0.3.1" } }, "sha512-HCc2jMJRAfviGFAh0FsOR/jNfWhirxl7W6z8zDtttt0GltwxBLdEIjLiweOPFl9WbyJRW1VWnPUSAixJqcWUMQ=="], "@opencode-ai/desktop/marked": ["marked@15.0.12", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA=="], diff --git a/packages/core/package.json b/packages/core/package.json index e2ffa31d8d73..1c56d88c2d49 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -26,6 +26,26 @@ "@types/semver": "catalog:" }, "dependencies": { + "@ai-sdk/alibaba": "1.0.17", + "@ai-sdk/amazon-bedrock": "4.0.96", + "@ai-sdk/anthropic": "3.0.71", + "@ai-sdk/azure": "3.0.49", + "@ai-sdk/cerebras": "2.0.41", + "@ai-sdk/cohere": "3.0.27", + "@ai-sdk/deepinfra": "2.0.41", + "@ai-sdk/gateway": "3.0.104", + "@ai-sdk/google": "3.0.63", + "@ai-sdk/google-vertex": "4.0.112", + "@ai-sdk/groq": "3.0.31", + "@ai-sdk/mistral": "3.0.27", + "@ai-sdk/openai": "3.0.53", + "@ai-sdk/openai-compatible": "2.0.41", + "@ai-sdk/perplexity": "3.0.26", + "@ai-sdk/provider": "3.0.8", + "@ai-sdk/togetherai": "2.0.41", + "@ai-sdk/vercel": "2.0.39", + "@ai-sdk/xai": "3.0.82", + "@aws-sdk/credential-providers": "3.993.0", "@effect/opentelemetry": "catalog:", "@effect/platform-node": "catalog:", "@npmcli/arborist": "9.4.0", @@ -34,13 +54,19 @@ "@opentelemetry/context-async-hooks": "2.6.1", "@opentelemetry/exporter-trace-otlp-http": "0.214.0", "@opentelemetry/sdk-trace-base": "2.6.1", - "effect": "catalog:", + "@openrouter/ai-sdk-provider": "2.8.1", + "ai-gateway-provider": "3.1.2", "cross-spawn": "catalog:", + "effect": "catalog:", + "gitlab-ai-provider": "6.6.0", "glob": "13.0.5", + "google-auth-library": "10.5.0", + "immer": "11.1.4", "mime-types": "3.0.2", "minimatch": "10.2.5", "npm-package-arg": "13.0.2", "semver": "^7.6.3", + "venice-ai-sdk-provider": "2.0.1", "xdg-basedir": "5.1.0", "zod": "catalog:" }, diff --git a/packages/core/src/aisdk.ts b/packages/core/src/aisdk.ts new file mode 100644 index 000000000000..5fa2294309c7 --- /dev/null +++ b/packages/core/src/aisdk.ts @@ -0,0 +1,172 @@ +export * as AISDK from "./aisdk" + +import type { LanguageModelV3 } from "@ai-sdk/provider" +import { Cause, Context, Effect, Layer, Schema } from "effect" +import { ModelV2 } from "./model" +import { PluginV2 } from "./plugin" +import { ProviderV2 } from "./provider" + +type SDK = any + +function wrapSSE(res: Response, ms: number, ctl: AbortController) { + if (typeof ms !== "number" || ms <= 0) return res + if (!res.body) return res + if (!res.headers.get("content-type")?.includes("text/event-stream")) return res + + const reader = res.body.getReader() + const body = new ReadableStream({ + async pull(ctrl) { + const part = await new Promise>>((resolve, reject) => { + const id = setTimeout(() => { + const err = new Error("SSE read timed out") + ctl.abort(err) + void reader.cancel(err) + reject(err) + }, ms) + + reader.read().then( + (part) => { + clearTimeout(id) + resolve(part) + }, + (err) => { + clearTimeout(id) + reject(err) + }, + ) + }) + + if (part.done) { + ctrl.close() + return + } + + ctrl.enqueue(part.value) + }, + async cancel(reason) { + ctl.abort(reason) + await reader.cancel(reason) + }, + }) + + return new Response(body, { + headers: new Headers(res.headers), + status: res.status, + statusText: res.statusText, + }) +} + +function prepareOptions(model: ModelV2.Info, pkg: string) { + const options: Record = { name: model.providerID, ...model.options.aisdk.provider } + if (model.endpoint.type === "aisdk" && model.endpoint.url) options.baseURL = model.endpoint.url + + const customFetch = options.fetch + const chunkTimeout = options.chunkTimeout + delete options.chunkTimeout + options.fetch = async (input: Parameters[0], init?: RequestInit) => { + const opts = { ...(init ?? {}) } + const signals = [ + opts.signal, + typeof chunkTimeout === "number" && chunkTimeout > 0 ? new AbortController() : undefined, + options.timeout !== undefined && options.timeout !== null && options.timeout !== false + ? AbortSignal.timeout(options.timeout) + : undefined, + ].filter((item): item is AbortSignal | AbortController => Boolean(item)) + const chunkAbortCtl = signals.find((item): item is AbortController => item instanceof AbortController) + const abortSignals = signals.map((item) => (item instanceof AbortController ? item.signal : item)) + if (abortSignals.length === 1) opts.signal = abortSignals[0] + if (abortSignals.length > 1) opts.signal = AbortSignal.any(abortSignals) + + if ((pkg === "@ai-sdk/openai" || pkg === "@ai-sdk/azure") && opts.body && opts.method === "POST") { + const body = JSON.parse(opts.body as string) + if (body.store !== true && Array.isArray(body.input)) { + for (const item of body.input) { + if ("id" in item) delete item.id + } + opts.body = JSON.stringify(body) + } + } + + const res = await (typeof customFetch === "function" ? customFetch : fetch)(input, { + ...opts, + timeout: false, + }) + if (!chunkAbortCtl || typeof chunkTimeout !== "number") return res + return wrapSSE(res, chunkTimeout, chunkAbortCtl) + } + + return options +} + +export class InitError extends Schema.TaggedErrorClass()("AISDK.InitError", { + providerID: ProviderV2.ID, + cause: Schema.Defect, +}) {} + +function initError(providerID: ProviderV2.ID) { + return Effect.catchCause((cause) => Effect.fail(new InitError({ providerID, cause: Cause.squash(cause) }))) +} + +export interface Interface { + readonly language: (model: ModelV2.Info) => Effect.Effect +} + +export class Service extends Context.Service()("@opencode/v2/AISDK") {} + +export const layer = Layer.effect( + Service, + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const languages = new Map() + const sdks = new Map() + + return Service.of({ + language: Effect.fn("AISDK.language")(function* (model) { + const key = `${model.providerID}/${model.id}/${model.options.variant ?? "default"}` + const existing = languages.get(key) + if (existing) return existing + if (model.endpoint.type !== "aisdk") + return yield* new InitError({ + providerID: model.providerID, + cause: new Error(`Unsupported endpoint ${model.endpoint.type}`), + }) + + const options = prepareOptions(model, model.endpoint.package) + const sdkKey = JSON.stringify({ + providerID: model.providerID, + endpoint: model.endpoint, + options, + }) + const sdk = + sdks.get(sdkKey) ?? + (yield* plugin + .trigger("aisdk.sdk", { model, package: model.endpoint.package, options }, {}) + .pipe(initError(model.providerID))).sdk + if (!sdk) + return yield* new InitError({ + providerID: model.providerID, + cause: new Error("No AISDK provider plugin returned an SDK"), + }) + sdks.set(sdkKey, sdk) + const result = yield* plugin + .trigger( + "aisdk.language", + { + model, + sdk, + options, + }, + {}, + ) + .pipe(initError(model.providerID)) + const language = yield* Effect.sync(() => result.language ?? sdk.languageModel(model.apiID)).pipe( + initError(model.providerID), + ) + languages.set(key, language) + return language + }), + }) + }), +) + +export const defaultLayer = layer.pipe(Layer.provide(PluginV2.defaultLayer)) diff --git a/packages/opencode/src/v2/auth.ts b/packages/core/src/auth.ts similarity index 86% rename from packages/opencode/src/v2/auth.ts rename to packages/core/src/auth.ts index 0ac6223a66b3..843c9504b40e 100644 --- a/packages/opencode/src/v2/auth.ts +++ b/packages/core/src/auth.ts @@ -1,9 +1,9 @@ import path from "path" import { Effect, Layer, Option, Schema, Context, SynchronizedRef } from "effect" -import { Identifier } from "@opencode-ai/core/util/identifier" -import { NonNegativeInt, withStatics } from "@opencode-ai/core/schema" -import { Global } from "@opencode-ai/core/global" -import { AppFileSystem } from "@opencode-ai/core/filesystem" +import { Identifier } from "./util/identifier" +import { NonNegativeInt, withStatics } from "./schema" +import { Global } from "./global" +import { AppFileSystem } from "./filesystem" export const OAUTH_DUMMY_KEY = "opencode-oauth-dummy-key" @@ -106,25 +106,43 @@ export const layer = Layer.effect( const fsys = yield* AppFileSystem.Service const global = yield* Global.Service const file = path.join(global.data, "auth-v2.json") + const legacyFile = path.join(global.data, "auth.json") + + const writeMigrated = Effect.fnUntraced(function* (raw: Record) { + const migrated = migrate(raw) + yield* fsys + .writeJson(file, migrated, 0o600) + .pipe(Effect.mapError((cause) => new AuthFileWriteError({ operation: "migrate", cause }))) + return migrated + }) + + const parseAuthContent = () => { + try { + return JSON.parse(process.env.OPENCODE_AUTH_CONTENT ?? "") + } catch {} + } const load: () => Effect.Effect = Effect.fnUntraced(function* () { if (process.env.OPENCODE_AUTH_CONTENT) { - try { - return JSON.parse(process.env.OPENCODE_AUTH_CONTENT) - } catch {} + const raw = parseAuthContent() + if (raw && typeof raw === "object") { + if ("version" in raw && raw.version === 2) return raw as Writable + return yield* writeMigrated(raw as Record) + } + return { version: 2, accounts: {}, active: {} } } - const raw = yield* fsys.readJson(file).pipe(Effect.orElseSucceed(() => null)) + const legacy = yield* fsys.readJson(legacyFile).pipe(Effect.orElseSucceed(() => null)) + if (legacy && typeof legacy === "object") return yield* writeMigrated(legacy as Record) - if (!raw || typeof raw !== "object") return { version: 2, accounts: {}, active: {} } + const raw = yield* fsys.readJson(file).pipe(Effect.orElseSucceed(() => null)) - if ("version" in raw && raw.version === 2) return raw as Writable + if (raw && typeof raw === "object") { + if ("version" in raw && raw.version === 2) return raw as Writable + return yield* writeMigrated(raw as Record) + } - const migrated = migrate(raw as Record) - yield* fsys - .writeJson(file, migrated, 0o600) - .pipe(Effect.mapError((cause) => new AuthFileWriteError({ operation: "migrate", cause }))) - return migrated + return { version: 2, accounts: {}, active: {} } }) const write = (data: Writable) => diff --git a/packages/core/src/catalog.ts b/packages/core/src/catalog.ts new file mode 100644 index 000000000000..3aa591542032 --- /dev/null +++ b/packages/core/src/catalog.ts @@ -0,0 +1,258 @@ +export * as Catalog from "./catalog" + +import { Context, Effect, HashMap, Layer, Option, Order, pipe, Schema, Array } from "effect" +import { produce, type Draft } from "immer" +import { ModelV2 } from "./model" +import { PluginV2 } from "./plugin" +import { ProviderV2 } from "./provider" + +type ProviderRecord = { + provider: ProviderV2.Info + models: HashMap.HashMap +} + +export class ProviderNotFoundError extends Schema.TaggedErrorClass()( + "CatalogV2.ProviderNotFound", + { + providerID: ProviderV2.ID, + }, +) {} + +export class ModelNotFoundError extends Schema.TaggedErrorClass()("CatalogV2.ModelNotFound", { + providerID: ProviderV2.ID, + modelID: ModelV2.ID, +}) {} + +export interface Interface { + readonly provider: { + readonly get: (providerID: ProviderV2.ID) => Effect.Effect + readonly update: (providerID: ProviderV2.ID, fn: (provider: Draft) => void) => Effect.Effect + readonly all: () => Effect.Effect + readonly available: () => Effect.Effect + } + readonly model: { + readonly get: ( + providerID: ProviderV2.ID, + modelID: ModelV2.ID, + ) => Effect.Effect + readonly update: ( + providerID: ProviderV2.ID, + modelID: ModelV2.ID, + fn: (model: Draft) => void, + ) => Effect.Effect + readonly all: () => Effect.Effect + readonly available: () => Effect.Effect + readonly default: () => Effect.Effect> + readonly setDefault: ( + providerID: ProviderV2.ID, + modelID: ModelV2.ID, + ) => Effect.Effect + readonly small: (providerID: ProviderV2.ID) => Effect.Effect> + } +} + +export class Service extends Context.Service()("@opencode/v2/Catalog") {} + +export const layer = Layer.effect( + Service, + Effect.gen(function* () { + let records = HashMap.empty() + let defaultModel: { providerID: ProviderV2.ID; modelID: ModelV2.ID } | undefined + const plugin = yield* PluginV2.Service + + const resolve = (model: ModelV2.Info) => { + const provider = Option.getOrThrow(HashMap.get(records, model.providerID)).provider + const endpoint = + model.endpoint.type === "unknown" + ? provider.endpoint + : model.endpoint.type === "aisdk" && provider.endpoint.type === "aisdk" && !model.endpoint.url + ? { ...model.endpoint, url: provider.endpoint.url } + : model.endpoint + const options = { + headers: { + ...provider.options.headers, + ...model.options.headers, + }, + body: { + ...provider.options.body, + ...model.options.body, + }, + aisdk: { + provider: { + ...provider.options.aisdk.provider, + ...model.options.aisdk.provider, + }, + request: model.options.aisdk.request, + }, + variant: model.options.variant, + } + return new ModelV2.Info({ + ...model, + endpoint, + options, + }) + } + + function* getRecord(providerID: ProviderV2.ID) { + const match = HashMap.get(records, providerID) + if (!match.valueOrUndefined) return yield* new ProviderNotFoundError({ providerID }) + return match.value + } + + const result: Interface = { + provider: { + get: Effect.fn("CatalogV2.provider.get")(function* (providerID) { + const record = yield* getRecord(providerID) + return record.provider + }), + + update: Effect.fnUntraced(function* (providerID, fn) { + const current = Option.getOrUndefined(HashMap.get(records, providerID)) + const provider = produce(current?.provider ?? ProviderV2.Info.empty(providerID), (draft) => { + fn(draft) + if (draft.endpoint.type === "aisdk" && typeof draft.options.aisdk.provider.baseURL === "string") { + draft.endpoint.url = draft.options.aisdk.provider.baseURL + delete draft.options.aisdk.provider.baseURL + } + }) + const updated = yield* plugin.trigger("provider.update", {}, { provider, cancel: false }) + records = HashMap.set(records, providerID, { + provider: updated.provider, + models: current?.models ?? HashMap.empty(), + }) + }), + + all: Effect.fn("CatalogV2.provider.all")(function* () { + return globalThis.Array.from(HashMap.values(records)).map((record) => record.provider) + }), + + available: Effect.fn("CatalogV2.provider.available")(function* () { + return globalThis.Array.from(HashMap.values(records)) + .map((record) => record.provider) + .filter((provider) => provider.enabled) + }), + }, + + model: { + get: Effect.fn("CatalogV2.model.get")(function* (providerID, modelID) { + const record = yield* getRecord(providerID) + const model = Option.getOrUndefined(HashMap.get(record.models, modelID)) + if (!model) return yield* new ModelNotFoundError({ providerID, modelID }) + return resolve(model) + }), + + update: Effect.fnUntraced(function* (providerID, modelID, fn) { + const record = yield* getRecord(providerID) + const model = produce( + HashMap.get(record.models, modelID).pipe(Option.getOrElse(() => ModelV2.Info.empty(providerID, modelID))), + (draft) => { + fn(draft) + if (draft.endpoint.type === "aisdk" && typeof draft.options.aisdk.provider.baseURL === "string") { + draft.endpoint.url = draft.options.aisdk.provider.baseURL + delete draft.options.aisdk.provider.baseURL + } + }, + ) + const updated = yield* plugin.trigger("model.update", {}, { model, cancel: false }) + if (updated.cancel) return + records = HashMap.set(records, providerID, { + provider: record.provider, + models: HashMap.set( + record.models, + modelID, + new ModelV2.Info({ ...updated.model, id: modelID, providerID }), + ), + }) + return + }), + + all: Effect.fn("CatalogV2.model.all")(function* () { + return pipe( + records, + HashMap.toValues, + Array.flatMap((record) => HashMap.toValues(record.models)), + Array.map(resolve), + Array.sortWith((item) => item.time.released.epochMilliseconds, Order.flip(Order.Number)), + ) + }), + + available: Effect.fn("CatalogV2.model.available")(function* () { + return (yield* result.model.all()).filter((model) => { + const record = Option.getOrUndefined(HashMap.get(records, model.providerID)) + return record?.provider.enabled !== false && model.enabled + }) + }), + + default: Effect.fn("CatalogV2.model.default")(function* () { + if (defaultModel) { + const model = yield* result.model.get(defaultModel.providerID, defaultModel.modelID).pipe(Effect.option) + if (Option.isSome(model) && model.value.enabled) return model + } + + return pipe( + yield* result.model.available(), + Array.sortWith((item) => item.time.released.epochMilliseconds, Order.flip(Order.Number)), + Array.head, + ) + }), + + setDefault: Effect.fn("CatalogV2.model.setDefault")(function* (providerID, modelID) { + yield* result.model.get(providerID, modelID) + defaultModel = { providerID, modelID } + }), + + small: Effect.fn("CatalogV2.model.small")(function* (providerID) { + const record = Option.getOrUndefined(HashMap.get(records, providerID)) + if (!record) return Option.none() + + if (providerID === ProviderV2.ID.opencode) { + const gpt5Nano = Option.getOrUndefined(HashMap.get(record.models, ModelV2.ID.make("gpt-5-nano"))) + if (gpt5Nano?.enabled && gpt5Nano.status === "active") return Option.some(resolve(gpt5Nano)) + } + + const candidates = pipe( + HashMap.toValues(record.models), + Array.filter( + (model) => + model.providerID === providerID && + model.enabled && + model.status === "active" && + model.capabilities.input.some((item) => item.startsWith("text")) && + model.capabilities.output.some((item) => item.startsWith("text")), + ), + Array.map((model) => ({ + model, + cost: model.cost[0] ? model.cost[0].input + model.cost[0].output : 999, + age: (Date.now() - model.time.released.epochMilliseconds) / (1000 * 60 * 60 * 24 * 30), + small: SMALL_MODEL_RE.test(`${model.id} ${model.family ?? ""} ${model.name}`.toLowerCase()), + })), + Array.filter((item) => item.cost > 0 && item.age <= 18), + ) + + const pick = (items: typeof candidates) => { + const maxCost = Math.max(...items.map((item) => item.cost), 0.01) + const maxAge = Math.max(...items.map((item) => item.age), 0.01) + return pipe( + items, + Array.sortWith((item) => (item.cost / maxCost) * 0.8 + (item.age / maxAge) * 0.2, Order.Number), + Array.map((item) => resolve(item.model)), + Array.head, + ) + } + + return pipe( + candidates, + Array.filter((item) => item.small), + (items) => (items.length > 0 ? pick(items) : pick(candidates)), + ) + }), + }, + } + + return Service.of(result) + }), +) + +const SMALL_MODEL_RE = /\b(nano|flash|lite|mini|haiku|small|fast)\b/ + +export const defaultLayer = layer.pipe(Layer.provide(PluginV2.defaultLayer)) diff --git a/packages/core/src/model.ts b/packages/core/src/model.ts new file mode 100644 index 000000000000..77b8c60ebe77 --- /dev/null +++ b/packages/core/src/model.ts @@ -0,0 +1,116 @@ +import { DateTime, Schema } from "effect" +import { DateTimeUtcFromMillis } from "effect/Schema" +import { ProviderV2 } from "./provider" + +export const ID = Schema.String.pipe(Schema.brand("ModelV2.ID")) +export type ID = typeof ID.Type + +export const VariantID = Schema.String.pipe(Schema.brand("VariantID")) +export type VariantID = typeof VariantID.Type + +// Grouping of models, eg claude opus, claude sonnet +export const Family = Schema.String.pipe(Schema.brand("Family")) +export type Family = typeof Family.Type + +export const Capabilities = Schema.Struct({ + tools: Schema.Boolean, + // mime patterns, image, audio, video/*, text/* + input: Schema.String.pipe(Schema.Array), + output: Schema.String.pipe(Schema.Array), +}) +export type Capabilities = typeof Capabilities.Type + +export const Cost = Schema.Struct({ + tier: Schema.Struct({ + type: Schema.Literal("context"), + size: Schema.Int, + }).pipe(Schema.optional), + input: Schema.Finite, + output: Schema.Finite, + cache: Schema.Struct({ + read: Schema.Finite, + write: Schema.Finite, + }), +}) + +export const Ref = Schema.Struct({ + id: ID, + providerID: ProviderV2.ID, + variant: VariantID, +}) +export type Ref = typeof Ref.Type + +export class Info extends Schema.Class("ModelV2.Info")({ + id: ID, + apiID: ID, + providerID: ProviderV2.ID, + family: Family.pipe(Schema.optional), + name: Schema.String, + endpoint: ProviderV2.Endpoint, + capabilities: Capabilities, + options: Schema.Struct({ + ...ProviderV2.Options.fields, + variant: Schema.String.pipe(Schema.optional), + }), + variants: Schema.Struct({ + id: VariantID, + ...ProviderV2.Options.fields, + }).pipe(Schema.Array), + time: Schema.Struct({ + released: DateTimeUtcFromMillis, + }), + cost: Cost.pipe(Schema.Array), + status: Schema.Literals(["alpha", "beta", "deprecated", "active"]), + enabled: Schema.Boolean, + limit: Schema.Struct({ + context: Schema.Int, + input: Schema.Int.pipe(Schema.optional), + output: Schema.Int, + }), +}) { + static empty(providerID: ProviderV2.ID, modelID: ID) { + return new Info({ + id: modelID, + apiID: modelID, + providerID, + name: modelID, + endpoint: { + type: "unknown", + }, + capabilities: { + tools: false, + input: [], + output: [], + }, + options: { + headers: {}, + body: {}, + aisdk: { + provider: {}, + request: {}, + }, + }, + variants: [], + time: { + released: DateTime.makeUnsafe(0), + }, + cost: [], + status: "active", + enabled: true, + limit: { + context: 0, + output: 0, + }, + }) + } +} + +export function parse(input: string): { providerID: ProviderV2.ID; modelID: ID } { + const [providerID, ...modelID] = input.split("/") + return { + providerID: ProviderV2.ID.make(providerID), + modelID: ID.make(modelID.join("/")), + } +} + +export * as ModelV2 from "./model" diff --git a/packages/core/src/plugin.ts b/packages/core/src/plugin.ts new file mode 100644 index 000000000000..dfcae9468596 --- /dev/null +++ b/packages/core/src/plugin.ts @@ -0,0 +1,146 @@ +export * as PluginV2 from "./plugin" + +import { createDraft, finishDraft, type Draft } from "immer" +import type { LanguageModelV3 } from "@ai-sdk/provider" +import { type ProviderV2 } from "./provider" +import { Context, Effect, Layer, Schema } from "effect" +import type { ModelV2 } from "./model" + +export const ID = Schema.String.pipe(Schema.brand("Plugin.ID")) +export type ID = typeof ID.Type + +type HookSpec = { + "provider.update": { + input: {} + output: { + provider: ProviderV2.Info + cancel: boolean + } + } + "model.update": { + input: {} + output: { + model: ModelV2.Info + cancel: boolean + } + } + "aisdk.language": { + input: { + model: ModelV2.Info + sdk: any + options: Record + } + output: { + language?: LanguageModelV3 + } + } + "aisdk.sdk": { + input: { + model: ModelV2.Info + package: string + options: Record + } + output: { + sdk?: any + } + } +} + +export type Hooks = { + [Name in keyof HookSpec]: Readonly & { + -readonly [Field in keyof HookSpec[Name]["output"]]: HookSpec[Name]["output"][Field] extends object + ? Draft + : HookSpec[Name]["output"][Field] + } +} + +export type HookFunctions = { + [key in keyof Hooks]?: (input: Hooks[key]) => Effect.Effect +} + +export type HookInput = HookSpec[Name]["input"] +export type HookOutput = HookSpec[Name]["output"] + +export type Effect = Effect.Effect + +export function define(input: { id: ID; effect: Effect.Effect }) { + return input +} + +export interface Interface { + readonly add: (input: { id: ID; effect: Effect }) => Effect.Effect + readonly remove: (id: ID) => Effect.Effect + readonly trigger: ( + name: Name, + input: HookInput, + output: HookOutput, + ) => Effect.Effect & HookOutput> +} + +export class Service extends Context.Service()("@opencode/v2/Plugin") {} + +export const layer = Layer.effect( + Service, + Effect.gen(function* () { + let hooks: { + id: ID + hooks: HookFunctions + }[] = [] + + const svc = Service.of({ + add: Effect.fn("Plugin.add")(function* (input) { + const result = yield* input.effect + if (!result) return + hooks = [ + ...hooks.filter((item) => item.id !== input.id), + { + id: input.id, + hooks: result, + }, + ] + }), + trigger: Effect.fn("Plugin.trigger")(function* (name, input, output) { + const draftEntries = new Map>() + const event = { + ...input, + ...output, + } as Record + + for (const [field, value] of Object.entries(output)) { + if (value && typeof value === "object") { + draftEntries.set(field, createDraft(value)) + event[field] = draftEntries.get(field) + } + } + + for (const item of hooks) { + const match = item.hooks[name] + if (!match) continue + yield* match(event as any).pipe( + Effect.withSpan(`Plugin.hook.${name}`, { + attributes: { + plugin: item.id, + hook: name, + }, + }), + ) + } + + for (const [field, draft] of draftEntries) { + event[field] = finishDraft(draft) + } + + return event as any + }), + remove: Effect.fn("Plugin.remove")(function* (id) { + hooks = hooks.filter((item) => item.id !== id) + }), + }) + return svc + }), +) + +export const defaultLayer = layer + +// opencode +// sdcok diff --git a/packages/core/src/plugin/auth.ts b/packages/core/src/plugin/auth.ts new file mode 100644 index 000000000000..81cbfbe3f7ad --- /dev/null +++ b/packages/core/src/plugin/auth.ts @@ -0,0 +1,27 @@ +import { Effect } from "effect" +import { AuthV2 } from "../auth" +import { PluginV2 } from "../plugin" + +export const AuthPlugin = PluginV2.define({ + id: PluginV2.ID.make("auth"), + effect: Effect.gen(function* () { + const auth = yield* AuthV2.Service + return { + "provider.update": Effect.fn(function* (evt) { + const account = yield* auth.active(AuthV2.ServiceID.make(evt.provider.id)).pipe(Effect.orDie) + if (!account) return + evt.provider.enabled = { + via: "auth", + service: account.serviceID, + } + if (account.credential.type === "api") { + evt.provider.options.aisdk.provider.apiKey = account.credential.key + Object.assign(evt.provider.options.aisdk.provider, account.credential.metadata ?? {}) + } + if (account.credential.type === "oauth") { + evt.provider.options.aisdk.provider.apiKey = account.credential.access + } + }), + } + }), +}) diff --git a/packages/core/src/plugin/env.ts b/packages/core/src/plugin/env.ts new file mode 100644 index 000000000000..d63936fa13d4 --- /dev/null +++ b/packages/core/src/plugin/env.ts @@ -0,0 +1,18 @@ +import { Effect } from "effect" +import { PluginV2 } from "../plugin" + +export const EnvPlugin = PluginV2.define({ + id: PluginV2.ID.make("env"), + effect: Effect.gen(function* () { + return { + "provider.update": Effect.fn(function* (evt) { + const key = evt.provider.env.find((item) => process.env[item]) + if (!key) return + evt.provider.enabled = { + via: "env", + name: key, + } + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider.ts b/packages/core/src/plugin/provider.ts new file mode 100644 index 000000000000..1880787495fd --- /dev/null +++ b/packages/core/src/plugin/provider.ts @@ -0,0 +1 @@ +export { ProviderPlugins } from "./provider/index" diff --git a/packages/core/src/plugin/provider/alibaba.ts b/packages/core/src/plugin/provider/alibaba.ts new file mode 100644 index 000000000000..fa5c0a91cfb6 --- /dev/null +++ b/packages/core/src/plugin/provider/alibaba.ts @@ -0,0 +1,15 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" + +export const AlibabaPlugin = PluginV2.define({ + id: PluginV2.ID.make("alibaba"), + effect: Effect.gen(function* () { + return { + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.package !== "@ai-sdk/alibaba") return + const mod = yield* Effect.promise(() => import("@ai-sdk/alibaba")) + evt.sdk = mod.createAlibaba(evt.options) + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/amazon-bedrock.ts b/packages/core/src/plugin/provider/amazon-bedrock.ts new file mode 100644 index 000000000000..366548a0a32c --- /dev/null +++ b/packages/core/src/plugin/provider/amazon-bedrock.ts @@ -0,0 +1,94 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" +import { ProviderV2 } from "../../provider" + +// Bedrock cross-region inference profiles require regional prefixes only for +// specific model/region combinations. Keep the mapping narrow and avoid +// double-prefixing model IDs that models.dev already marks as global/us/eu/etc. +function resolveModelID(modelID: string, region: string | undefined) { + const crossRegionPrefixes = ["global.", "us.", "eu.", "jp.", "apac.", "au."] + if (crossRegionPrefixes.some((prefix) => modelID.startsWith(prefix))) return modelID + + const resolvedRegion = region ?? "us-east-1" + const regionPrefix = resolvedRegion.split("-")[0] + if (regionPrefix === "us") { + const requiresPrefix = ["nova-micro", "nova-lite", "nova-pro", "nova-premier", "nova-2", "claude", "deepseek"].some( + (item) => modelID.includes(item), + ) + if (requiresPrefix && !resolvedRegion.startsWith("us-gov")) return `${regionPrefix}.${modelID}` + return modelID + } + if (regionPrefix === "eu") { + const regionRequiresPrefix = [ + "eu-west-1", + "eu-west-2", + "eu-west-3", + "eu-north-1", + "eu-central-1", + "eu-south-1", + "eu-south-2", + ].some((item) => resolvedRegion.includes(item)) + const modelRequiresPrefix = ["claude", "nova-lite", "nova-micro", "llama3", "pixtral"].some((item) => + modelID.includes(item), + ) + return regionRequiresPrefix && modelRequiresPrefix ? `${regionPrefix}.${modelID}` : modelID + } + if (regionPrefix !== "ap") return modelID + + const australia = ["ap-southeast-2", "ap-southeast-4"].includes(resolvedRegion) + if (australia && ["anthropic.claude-sonnet-4-5", "anthropic.claude-haiku"].some((item) => modelID.includes(item))) { + return `au.${modelID}` + } + + const prefix = resolvedRegion === "ap-northeast-1" ? "jp" : "apac" + return ["claude", "nova-lite", "nova-micro", "nova-pro"].some((item) => modelID.includes(item)) + ? `${prefix}.${modelID}` + : modelID +} + +export const AmazonBedrockPlugin = PluginV2.define({ + id: PluginV2.ID.make("amazon-bedrock"), + effect: Effect.gen(function* () { + return { + "provider.update": Effect.fn(function* (evt) { + if (evt.provider.id !== ProviderV2.ID.amazonBedrock) return + if (evt.provider.endpoint.type !== "aisdk") return + if (typeof evt.provider.options.aisdk.provider.endpoint !== "string") return + // The AI SDK expects a base URL, but users configure Bedrock private/VPC + // endpoints as `endpoint`; move it into the catalog endpoint URL once. + evt.provider.endpoint.url = evt.provider.options.aisdk.provider.endpoint + delete evt.provider.options.aisdk.provider.endpoint + }), + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.package !== "@ai-sdk/amazon-bedrock") return + const options = { ...evt.options } + const profile = typeof options.profile === "string" ? options.profile : process.env.AWS_PROFILE + const region = typeof options.region === "string" ? options.region : (process.env.AWS_REGION ?? "us-east-1") + const bearerToken = + process.env.AWS_BEARER_TOKEN_BEDROCK ?? + (typeof options.bearerToken === "string" ? options.bearerToken : undefined) + if (bearerToken && !process.env.AWS_BEARER_TOKEN_BEDROCK) process.env.AWS_BEARER_TOKEN_BEDROCK = bearerToken + const containerCreds = Boolean( + process.env.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI || process.env.AWS_CONTAINER_CREDENTIALS_FULL_URI, + ) + + options.region = region + if (typeof options.endpoint === "string") options.baseURL = options.endpoint + if (!bearerToken && options.credentialProvider === undefined) { + // Do not gate SDK creation on explicit AWS env vars. The default chain + // also handles ~/.aws/credentials, SSO, process creds, and instance roles. + const { fromNodeProviderChain } = yield* Effect.promise(() => import("@aws-sdk/credential-providers")) + options.credentialProvider = fromNodeProviderChain(profile ? { profile } : {}) + } + + const mod = yield* Effect.promise(() => import("@ai-sdk/amazon-bedrock")) + evt.sdk = mod.createAmazonBedrock(options) + }), + "aisdk.language": Effect.fn(function* (evt) { + if (evt.model.providerID !== ProviderV2.ID.amazonBedrock) return + const region = typeof evt.options.region === "string" ? evt.options.region : process.env.AWS_REGION + evt.language = evt.sdk.languageModel(resolveModelID(evt.model.apiID, region)) + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/anthropic.ts b/packages/core/src/plugin/provider/anthropic.ts new file mode 100644 index 000000000000..14851c4a3193 --- /dev/null +++ b/packages/core/src/plugin/provider/anthropic.ts @@ -0,0 +1,21 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" +import { ProviderV2 } from "../../provider" + +export const AnthropicPlugin = PluginV2.define({ + id: PluginV2.ID.make("anthropic"), + effect: Effect.gen(function* () { + return { + "provider.update": Effect.fn(function* (evt) { + if (evt.provider.id !== ProviderV2.ID.anthropic) return + evt.provider.options.headers["anthropic-beta"] = + "interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14" + }), + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.package !== "@ai-sdk/anthropic") return + const mod = yield* Effect.promise(() => import("@ai-sdk/anthropic")) + evt.sdk = mod.createAnthropic(evt.options) + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/azure.ts b/packages/core/src/plugin/provider/azure.ts new file mode 100644 index 000000000000..86c3eb924918 --- /dev/null +++ b/packages/core/src/plugin/provider/azure.ts @@ -0,0 +1,67 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" +import { ProviderV2 } from "../../provider" + +function selectLanguage(sdk: any, modelID: string, useChat: boolean) { + if (useChat && sdk.chat) return sdk.chat(modelID) + if (sdk.responses) return sdk.responses(modelID) + if (sdk.messages) return sdk.messages(modelID) + if (sdk.chat) return sdk.chat(modelID) + return sdk.languageModel(modelID) +} + +export const AzurePlugin = PluginV2.define({ + id: PluginV2.ID.make("azure"), + effect: Effect.gen(function* () { + return { + "provider.update": Effect.fn(function* (evt) { + if (evt.provider.id !== ProviderV2.ID.azure) return + const configured = evt.provider.options.aisdk.provider.resourceName + const resourceName = + typeof configured === "string" && configured.trim() !== "" ? configured : process.env.AZURE_RESOURCE_NAME + if (resourceName) evt.provider.options.aisdk.provider.resourceName = resourceName + }), + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.package !== "@ai-sdk/azure") return + if (evt.model.providerID === ProviderV2.ID.azure) { + if (!evt.options.resourceName && !evt.options.baseURL && (evt.model.endpoint.type !== "aisdk" || !evt.model.endpoint.url)) { + throw new Error( + "AZURE_RESOURCE_NAME is missing, set it using env var or reconnecting the azure provider and setting it", + ) + } + } + const mod = yield* Effect.promise(() => import("@ai-sdk/azure")) + evt.sdk = mod.createAzure(evt.options) + }), + "aisdk.language": Effect.fn(function* (evt) { + if (evt.model.providerID !== ProviderV2.ID.azure) return + evt.language = selectLanguage( + evt.sdk, + evt.model.apiID, + Boolean(evt.options.useCompletionUrls), + ) + }), + } + }), +}) + +export const AzureCognitiveServicesPlugin = PluginV2.define({ + id: PluginV2.ID.make("azure-cognitive-services"), + effect: Effect.gen(function* () { + return { + "provider.update": Effect.fn(function* (evt) { + if (evt.provider.id !== ProviderV2.ID.make("azure-cognitive-services")) return + const resourceName = process.env.AZURE_COGNITIVE_SERVICES_RESOURCE_NAME + if (resourceName) evt.provider.options.aisdk.provider.baseURL = `https://${resourceName}.cognitiveservices.azure.com/openai` + }), + "aisdk.language": Effect.fn(function* (evt) { + if (evt.model.providerID !== ProviderV2.ID.make("azure-cognitive-services")) return + evt.language = selectLanguage( + evt.sdk, + evt.model.apiID, + Boolean(evt.options.useCompletionUrls), + ) + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/cerebras.ts b/packages/core/src/plugin/provider/cerebras.ts new file mode 100644 index 000000000000..b2fadd8bf114 --- /dev/null +++ b/packages/core/src/plugin/provider/cerebras.ts @@ -0,0 +1,20 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" +import { ProviderV2 } from "../../provider" + +export const CerebrasPlugin = PluginV2.define({ + id: PluginV2.ID.make("cerebras"), + effect: Effect.gen(function* () { + return { + "provider.update": Effect.fn(function* (evt) { + if (evt.provider.id !== ProviderV2.ID.make("cerebras")) return + evt.provider.options.headers["X-Cerebras-3rd-Party-Integration"] = "opencode" + }), + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.package !== "@ai-sdk/cerebras") return + const mod = yield* Effect.promise(() => import("@ai-sdk/cerebras")) + evt.sdk = mod.createCerebras(evt.options) + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/cloudflare-ai-gateway.ts b/packages/core/src/plugin/provider/cloudflare-ai-gateway.ts new file mode 100644 index 000000000000..ffcd4adcf46c --- /dev/null +++ b/packages/core/src/plugin/provider/cloudflare-ai-gateway.ts @@ -0,0 +1,81 @@ +import os from "os" +import { InstallationVersion } from "../../installation/version" +import { Effect, Option, Schema } from "effect" +import { PluginV2 } from "../../plugin" + +export const CloudflareAIGatewayPlugin = PluginV2.define({ + id: PluginV2.ID.make("cloudflare-ai-gateway"), + effect: Effect.gen(function* () { + return { + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.package !== "ai-gateway-provider") return + if (evt.options.baseURL) return + + const config = gatewayConfig(evt.options) + if (!config) return + const metadata = gatewayMetadata(evt.options) + const { createAiGateway } = yield* Effect.promise(() => import("ai-gateway-provider")).pipe(Effect.orDie) + const { createUnified } = yield* Effect.promise(() => import("ai-gateway-provider/providers/unified")).pipe( + Effect.orDie, + ) + const gateway = createAiGateway({ + accountId: config.accountId, + gateway: config.gatewayId, + apiKey: config.apiKey, + options: gatewayOptions(evt.options, metadata), + } as any) + const unified = createUnified() + evt.sdk = { + languageModel(modelID: string) { + return gateway(unified(modelID)) + }, + } + }), + } + }), +}) + +type GatewayConfig = { + accountId: string + gatewayId: string + apiKey: string +} + +const decodeJson = Schema.decodeUnknownOption(Schema.UnknownFromJsonString) + +function gatewayConfig(options: Record): GatewayConfig | undefined { + const accountId = process.env.CLOUDFLARE_ACCOUNT_ID ?? stringOption(options, "accountId") + // AuthPlugin copies CLI prompt metadata into options. The prompt stores the + // gateway as gatewayId, while older config examples may use gateway. + const gatewayId = + process.env.CLOUDFLARE_GATEWAY_ID ?? stringOption(options, "gatewayId") ?? stringOption(options, "gateway") + const apiKey = process.env.CLOUDFLARE_API_TOKEN ?? process.env.CF_AIG_TOKEN ?? stringOption(options, "apiKey") + if (!accountId || !gatewayId || !apiKey) return undefined + + return { accountId, gatewayId, apiKey } +} + +function gatewayMetadata(options: Record) { + // Preserve the legacy cf-aig-metadata header escape hatch for gateway logging + // metadata, but prefer the typed metadata option when present. + if (options.metadata !== undefined) return options.metadata + const raw = (options.headers as Record | undefined)?.["cf-aig-metadata"] + return raw ? Option.getOrUndefined(decodeJson(raw)) : undefined +} + +function gatewayOptions(options: Record, metadata: unknown) { + return { + metadata, + cacheTtl: options.cacheTtl, + cacheKey: options.cacheKey, + skipCache: options.skipCache, + collectLog: options.collectLog, + headers: { + "User-Agent": `opencode/${InstallationVersion} cloudflare-ai-gateway (${os.platform()} ${os.release()}; ${os.arch()})`, + }, + } +} + +function stringOption(options: Record, key: string) { + return typeof options[key] === "string" ? options[key] : undefined +} diff --git a/packages/core/src/plugin/provider/cloudflare-workers-ai.ts b/packages/core/src/plugin/provider/cloudflare-workers-ai.ts new file mode 100644 index 000000000000..f39869b57d7d --- /dev/null +++ b/packages/core/src/plugin/provider/cloudflare-workers-ai.ts @@ -0,0 +1,69 @@ +import os from "os" +import { InstallationVersion } from "../../installation/version" +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" +import { ProviderV2 } from "../../provider" + +const providerID = ProviderV2.ID.make("cloudflare-workers-ai") + +export const CloudflareWorkersAIPlugin = PluginV2.define({ + id: PluginV2.ID.make("cloudflare-workers-ai"), + effect: Effect.gen(function* () { + return { + "provider.update": Effect.fn(function* (evt) { + if (evt.provider.id !== providerID) return + if (evt.provider.endpoint.type !== "aisdk") return + if (evt.provider.endpoint.url) return + + const accountId = resolveAccountId(evt.provider.options.aisdk.provider) + if (accountId) evt.provider.endpoint.url = workersEndpoint(accountId) + }), + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.model.providerID !== providerID) return + if (evt.package !== "@ai-sdk/openai-compatible") return + + if (!hasWorkersEndpoint(evt.model.endpoint)) return + const mod = yield* Effect.promise(() => import("@ai-sdk/openai-compatible")) + evt.sdk = mod.createOpenAICompatible(sdkOptions(evt.options) as any) + }), + "aisdk.language": Effect.fn(function* (evt) { + if (evt.model.providerID !== providerID) return + evt.language = evt.sdk.languageModel(evt.model.apiID) + }), + } + }), +}) + +function resolveAccountId(options: Record) { + return process.env.CLOUDFLARE_ACCOUNT_ID ?? stringOption(options, "accountId") +} + +function workersEndpoint(accountId: string) { + return `https://api.cloudflare.com/client/v4/accounts/${accountId}/ai/v1` +} + +function hasWorkersEndpoint(endpoint: ProviderV2.Endpoint) { + return endpoint.type === "aisdk" && Boolean(endpoint.url) +} + +function sdkOptions(options: Record) { + return { + ...options, + baseURL: expandAccountId(options.baseURL), + apiKey: process.env.CLOUDFLARE_API_KEY ?? options.apiKey, + headers: { + "User-Agent": `opencode/${InstallationVersion} cloudflare-workers-ai (${os.platform()} ${os.release()}; ${os.arch()})`, + ...options.headers, + }, + name: providerID, + } +} + +function expandAccountId(baseURL: unknown) { + if (typeof baseURL !== "string") return baseURL + return baseURL.replaceAll("${CLOUDFLARE_ACCOUNT_ID}", process.env.CLOUDFLARE_ACCOUNT_ID ?? "${CLOUDFLARE_ACCOUNT_ID}") +} + +function stringOption(options: Record, key: string) { + return typeof options[key] === "string" ? options[key] : undefined +} diff --git a/packages/core/src/plugin/provider/cohere.ts b/packages/core/src/plugin/provider/cohere.ts new file mode 100644 index 000000000000..991c370d1751 --- /dev/null +++ b/packages/core/src/plugin/provider/cohere.ts @@ -0,0 +1,15 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" + +export const CoherePlugin = PluginV2.define({ + id: PluginV2.ID.make("cohere"), + effect: Effect.gen(function* () { + return { + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.package !== "@ai-sdk/cohere") return + const mod = yield* Effect.promise(() => import("@ai-sdk/cohere")) + evt.sdk = mod.createCohere(evt.options) + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/deepinfra.ts b/packages/core/src/plugin/provider/deepinfra.ts new file mode 100644 index 000000000000..bbd42f6e283b --- /dev/null +++ b/packages/core/src/plugin/provider/deepinfra.ts @@ -0,0 +1,15 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" + +export const DeepInfraPlugin = PluginV2.define({ + id: PluginV2.ID.make("deepinfra"), + effect: Effect.gen(function* () { + return { + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.package !== "@ai-sdk/deepinfra") return + const mod = yield* Effect.promise(() => import("@ai-sdk/deepinfra")) + evt.sdk = mod.createDeepInfra(evt.options) + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/dynamic.ts b/packages/core/src/plugin/provider/dynamic.ts new file mode 100644 index 000000000000..e5abc7009e30 --- /dev/null +++ b/packages/core/src/plugin/provider/dynamic.ts @@ -0,0 +1,31 @@ +import { Npm } from "../../npm" +import { Effect, Option } from "effect" +import { pathToFileURL } from "url" +import { PluginV2 } from "../../plugin" + +export const DynamicProviderPlugin = PluginV2.define({ + id: PluginV2.ID.make("dynamic-provider"), + effect: Effect.gen(function* () { + const npm = yield* Npm.Service + return { + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.sdk) return + + const installedPath = evt.package.startsWith("file://") + ? evt.package + : Option.getOrUndefined((yield* npm.add(evt.package).pipe(Effect.orDie)).entrypoint) + if (!installedPath) throw new Error(`Package ${evt.package} has no import entrypoint`) + + const mod = yield* Effect.promise(async () => { + return (await import( + installedPath.startsWith("file://") ? installedPath : pathToFileURL(installedPath).href + )) as Record any> + }).pipe(Effect.orDie) + const match = Object.keys(mod).find((name) => name.startsWith("create")) + if (!match) throw new Error(`Package ${evt.package} has no provider factory export`) + + evt.sdk = mod[match](evt.options) + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/gateway.ts b/packages/core/src/plugin/provider/gateway.ts new file mode 100644 index 000000000000..5b08ad9ef5e2 --- /dev/null +++ b/packages/core/src/plugin/provider/gateway.ts @@ -0,0 +1,15 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" + +export const GatewayPlugin = PluginV2.define({ + id: PluginV2.ID.make("gateway"), + effect: Effect.gen(function* () { + return { + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.package !== "@ai-sdk/gateway") return + const mod = yield* Effect.promise(() => import("@ai-sdk/gateway")) + evt.sdk = mod.createGateway(evt.options) + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/gitlab.ts b/packages/core/src/plugin/provider/gitlab.ts new file mode 100644 index 000000000000..be923e7cbf4e --- /dev/null +++ b/packages/core/src/plugin/provider/gitlab.ts @@ -0,0 +1,64 @@ +import os from "os" +import { InstallationVersion } from "../../installation/version" +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" +import { ProviderV2 } from "../../provider" + +export const GitLabPlugin = PluginV2.define({ + id: PluginV2.ID.make("gitlab"), + effect: Effect.gen(function* () { + return { + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.package !== "gitlab-ai-provider") return + const mod = yield* Effect.promise(() => import("gitlab-ai-provider")) + evt.sdk = mod.createGitLab({ + ...evt.options, + instanceUrl: + typeof evt.options.instanceUrl === "string" + ? evt.options.instanceUrl + : (process.env.GITLAB_INSTANCE_URL ?? "https://gitlab.com"), + apiKey: typeof evt.options.apiKey === "string" ? evt.options.apiKey : process.env.GITLAB_TOKEN, + aiGatewayHeaders: { + "User-Agent": `opencode/${InstallationVersion} gitlab-ai-provider/${mod.VERSION} (${os.platform()} ${os.release()}; ${os.arch()})`, + "anthropic-beta": "context-1m-2025-08-07", + ...evt.options.aiGatewayHeaders, + }, + featureFlags: { + duo_agent_platform_agentic_chat: true, + duo_agent_platform: true, + ...evt.options.featureFlags, + }, + }) + }), + "aisdk.language": Effect.fn(function* (evt) { + if (evt.model.providerID !== ProviderV2.ID.gitlab) return + const featureFlags = typeof evt.options.featureFlags === "object" && evt.options.featureFlags ? evt.options.featureFlags : {} + if (evt.model.apiID.startsWith("duo-workflow-")) { + const gitlab = yield* Effect.promise(() => import("gitlab-ai-provider")).pipe(Effect.orDie) + const workflowRef = + typeof evt.model.options.aisdk.request.workflowRef === "string" + ? evt.model.options.aisdk.request.workflowRef + : undefined + const workflowDefinition = + typeof evt.model.options.aisdk.request.workflowDefinition === "string" + ? evt.model.options.aisdk.request.workflowDefinition + : undefined + const language = evt.sdk.workflowChat( + gitlab.isWorkflowModel(evt.model.apiID) ? evt.model.apiID : "duo-workflow", + { + featureFlags, + workflowDefinition, + }, + ) + if (workflowRef) language.selectedModelRef = workflowRef + evt.language = language + return + } + evt.language = evt.sdk.agenticChat(evt.model.apiID, { + aiGatewayHeaders: evt.options.aiGatewayHeaders, + featureFlags, + }) + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/google-vertex.ts b/packages/core/src/plugin/provider/google-vertex.ts new file mode 100644 index 000000000000..f22f79f45ed8 --- /dev/null +++ b/packages/core/src/plugin/provider/google-vertex.ts @@ -0,0 +1,124 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" +import { ProviderV2 } from "../../provider" + +function resolveProject(options: Record) { + // models.dev advertises GOOGLE_VERTEX_PROJECT for Vertex, while Google SDKs + // and ADC examples commonly use the broader Google Cloud project aliases. + return ( + options.project ?? + process.env.GOOGLE_VERTEX_PROJECT ?? + process.env.GOOGLE_CLOUD_PROJECT ?? + process.env.GCP_PROJECT ?? + process.env.GCLOUD_PROJECT + ) +} + +function resolveLocation(options: Record) { + return options.location ?? process.env.GOOGLE_VERTEX_LOCATION ?? process.env.GOOGLE_CLOUD_LOCATION ?? process.env.VERTEX_LOCATION ?? "us-central1" +} + +function vertexEndpoint(location: string) { + return location === "global" ? "aiplatform.googleapis.com" : `${location}-aiplatform.googleapis.com` +} + +function replaceVertexVars(value: string, project: string | undefined, location: string) { + // Vertex OpenAI-compatible endpoints are stored as templates in the catalog; + // expand them after provider config/env project and location have been resolved. + return value + .replaceAll("${GOOGLE_VERTEX_PROJECT}", project ?? "${GOOGLE_VERTEX_PROJECT}") + .replaceAll("${GOOGLE_VERTEX_LOCATION}", location) + .replaceAll("${GOOGLE_VERTEX_ENDPOINT}", vertexEndpoint(location)) +} + +function authFetch(fetchWithRuntimeOptions?: unknown) { + // Native Vertex SDKs handle ADC internally. OpenAI-compatible Vertex endpoints + // do not, so inject a Google access token into their fetch path. + return async (input: Parameters[0], init?: RequestInit) => { + const { GoogleAuth } = await import("google-auth-library") + const auth = new GoogleAuth() + const client = await auth.getApplicationDefault() + const token = await client.credential.getAccessToken() + const headers = new Headers(init?.headers) + headers.set("Authorization", `Bearer ${token.token}`) + return typeof fetchWithRuntimeOptions === "function" + ? fetchWithRuntimeOptions(input, { ...init, headers }) + : fetch(input, { ...init, headers }) + } +} + +export const GoogleVertexPlugin = PluginV2.define({ + id: PluginV2.ID.make("google-vertex"), + effect: Effect.gen(function* () { + return { + "provider.update": Effect.fn(function* (evt) { + if (evt.provider.id !== ProviderV2.ID.googleVertex) return + const project = resolveProject(evt.provider.options.aisdk.provider) + const location = String(resolveLocation(evt.provider.options.aisdk.provider)) + if (project) evt.provider.options.aisdk.provider.project = project + evt.provider.options.aisdk.provider.location = location + if (evt.provider.endpoint.type === "aisdk" && evt.provider.endpoint.url) { + evt.provider.endpoint.url = replaceVertexVars(evt.provider.endpoint.url, project, location) + } + if (evt.provider.endpoint.type === "aisdk" && evt.provider.endpoint.package.includes("@ai-sdk/openai-compatible")) { + evt.provider.options.aisdk.provider.fetch = authFetch(evt.provider.options.aisdk.provider.fetch) + } + }), + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.model.providerID === ProviderV2.ID.googleVertex && evt.package.includes("@ai-sdk/openai-compatible")) { + evt.options.fetch = authFetch(evt.options.fetch) + return + } + if (evt.package !== "@ai-sdk/google-vertex") return + const mod = yield* Effect.promise(() => import("@ai-sdk/google-vertex")) + const project = resolveProject(evt.options) + const location = resolveLocation(evt.options) + const options = { ...evt.options } + delete options.fetch + evt.sdk = mod.createVertex({ + ...options, + project, + location, + }) + }), + "aisdk.language": Effect.fn(function* (evt) { + if (evt.model.providerID !== ProviderV2.ID.googleVertex) return + evt.language = evt.sdk.languageModel(String(evt.model.apiID).trim()) + }), + } + }), +}) + +export const GoogleVertexAnthropicPlugin = PluginV2.define({ + id: PluginV2.ID.make("google-vertex-anthropic"), + effect: Effect.gen(function* () { + return { + "provider.update": Effect.fn(function* (evt) { + if (evt.provider.id !== ProviderV2.ID.make("google-vertex-anthropic")) return + const project = evt.provider.options.aisdk.provider.project ?? process.env.GOOGLE_CLOUD_PROJECT ?? process.env.GCP_PROJECT ?? process.env.GCLOUD_PROJECT + const location = evt.provider.options.aisdk.provider.location ?? process.env.GOOGLE_CLOUD_LOCATION ?? process.env.VERTEX_LOCATION ?? "global" + if (project) evt.provider.options.aisdk.provider.project = project + evt.provider.options.aisdk.provider.location = location + }), + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.package !== "@ai-sdk/google-vertex/anthropic") return + const mod = yield* Effect.promise(() => import("@ai-sdk/google-vertex/anthropic")) + evt.sdk = mod.createVertexAnthropic({ + ...evt.options, + project: + typeof evt.options.project === "string" + ? evt.options.project + : (process.env.GOOGLE_CLOUD_PROJECT ?? process.env.GCP_PROJECT ?? process.env.GCLOUD_PROJECT), + location: + typeof evt.options.location === "string" + ? evt.options.location + : (process.env.GOOGLE_CLOUD_LOCATION ?? process.env.VERTEX_LOCATION ?? "global"), + }) + }), + "aisdk.language": Effect.fn(function* (evt) { + if (evt.model.providerID !== ProviderV2.ID.make("google-vertex-anthropic")) return + evt.language = evt.sdk.languageModel(String(evt.model.apiID).trim()) + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/google.ts b/packages/core/src/plugin/provider/google.ts new file mode 100644 index 000000000000..47e29c6b5d54 --- /dev/null +++ b/packages/core/src/plugin/provider/google.ts @@ -0,0 +1,15 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" + +export const GooglePlugin = PluginV2.define({ + id: PluginV2.ID.make("google"), + effect: Effect.gen(function* () { + return { + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.package !== "@ai-sdk/google") return + const mod = yield* Effect.promise(() => import("@ai-sdk/google")) + evt.sdk = mod.createGoogleGenerativeAI(evt.options) + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/groq.ts b/packages/core/src/plugin/provider/groq.ts new file mode 100644 index 000000000000..f2052afd1a86 --- /dev/null +++ b/packages/core/src/plugin/provider/groq.ts @@ -0,0 +1,15 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" + +export const GroqPlugin = PluginV2.define({ + id: PluginV2.ID.make("groq"), + effect: Effect.gen(function* () { + return { + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.package !== "@ai-sdk/groq") return + const mod = yield* Effect.promise(() => import("@ai-sdk/groq")) + evt.sdk = mod.createGroq(evt.options) + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/index.ts b/packages/core/src/plugin/provider/index.ts new file mode 100644 index 000000000000..5f0905fabfe8 --- /dev/null +++ b/packages/core/src/plugin/provider/index.ts @@ -0,0 +1,65 @@ +import { AlibabaPlugin } from "./alibaba" +import { AmazonBedrockPlugin } from "./amazon-bedrock" +import { AnthropicPlugin } from "./anthropic" +import { AzureCognitiveServicesPlugin, AzurePlugin } from "./azure" +import { CerebrasPlugin } from "./cerebras" +import { CloudflareAIGatewayPlugin } from "./cloudflare-ai-gateway" +import { CloudflareWorkersAIPlugin } from "./cloudflare-workers-ai" +import { CoherePlugin } from "./cohere" +import { DeepInfraPlugin } from "./deepinfra" +import { DynamicProviderPlugin } from "./dynamic" +import { GatewayPlugin } from "./gateway" +import { GitLabPlugin } from "./gitlab" +import { GooglePlugin } from "./google" +import { GoogleVertexAnthropicPlugin, GoogleVertexPlugin } from "./google-vertex" +import { GroqPlugin } from "./groq" +import { KiloPlugin } from "./kilo" +import { LLMGatewayPlugin } from "./llmgateway" +import { MistralPlugin } from "./mistral" +import { NvidiaPlugin } from "./nvidia" +import { OpenAIPlugin } from "./openai" +import { OpenAICompatiblePlugin } from "./openai-compatible" +import { OpencodePlugin } from "./opencode" +import { OpenRouterPlugin } from "./openrouter" +import { PerplexityPlugin } from "./perplexity" +import { SapAICorePlugin } from "./sap-ai-core" +import { TogetherAIPlugin } from "./togetherai" +import { VercelPlugin } from "./vercel" +import { VenicePlugin } from "./venice" +import { XAIPlugin } from "./xai" +import { ZenmuxPlugin } from "./zenmux" + +export const ProviderPlugins = [ + AlibabaPlugin, + AmazonBedrockPlugin, + AnthropicPlugin, + AzureCognitiveServicesPlugin, + AzurePlugin, + CerebrasPlugin, + CloudflareAIGatewayPlugin, + CloudflareWorkersAIPlugin, + CoherePlugin, + DeepInfraPlugin, + GatewayPlugin, + GitLabPlugin, + GooglePlugin, + GoogleVertexAnthropicPlugin, + GoogleVertexPlugin, + GroqPlugin, + KiloPlugin, + LLMGatewayPlugin, + MistralPlugin, + NvidiaPlugin, + OpencodePlugin, + OpenAICompatiblePlugin, + OpenAIPlugin, + OpenRouterPlugin, + PerplexityPlugin, + SapAICorePlugin, + TogetherAIPlugin, + VercelPlugin, + VenicePlugin, + XAIPlugin, + ZenmuxPlugin, + DynamicProviderPlugin, +] diff --git a/packages/core/src/plugin/provider/kilo.ts b/packages/core/src/plugin/provider/kilo.ts new file mode 100644 index 000000000000..47b8ec99cd92 --- /dev/null +++ b/packages/core/src/plugin/provider/kilo.ts @@ -0,0 +1,16 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" +import { ProviderV2 } from "../../provider" + +export const KiloPlugin = PluginV2.define({ + id: PluginV2.ID.make("kilo"), + effect: Effect.gen(function* () { + return { + "provider.update": Effect.fn(function* (evt) { + if (evt.provider.id !== ProviderV2.ID.make("kilo")) return + evt.provider.options.headers["HTTP-Referer"] = "https://opencode.ai/" + evt.provider.options.headers["X-Title"] = "opencode" + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/llmgateway.ts b/packages/core/src/plugin/provider/llmgateway.ts new file mode 100644 index 000000000000..da1ab282bdab --- /dev/null +++ b/packages/core/src/plugin/provider/llmgateway.ts @@ -0,0 +1,18 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" +import { ProviderV2 } from "../../provider" + +export const LLMGatewayPlugin = PluginV2.define({ + id: PluginV2.ID.make("llmgateway"), + effect: Effect.gen(function* () { + return { + "provider.update": Effect.fn(function* (evt) { + if (evt.provider.id !== ProviderV2.ID.make("llmgateway")) return + if (evt.provider.enabled === false) return + evt.provider.options.headers["HTTP-Referer"] = "https://opencode.ai/" + evt.provider.options.headers["X-Title"] = "opencode" + evt.provider.options.headers["X-Source"] = "opencode" + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/mistral.ts b/packages/core/src/plugin/provider/mistral.ts new file mode 100644 index 000000000000..e7f0decb79ee --- /dev/null +++ b/packages/core/src/plugin/provider/mistral.ts @@ -0,0 +1,15 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" + +export const MistralPlugin = PluginV2.define({ + id: PluginV2.ID.make("mistral"), + effect: Effect.gen(function* () { + return { + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.package !== "@ai-sdk/mistral") return + const mod = yield* Effect.promise(() => import("@ai-sdk/mistral")) + evt.sdk = mod.createMistral(evt.options) + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/nvidia.ts b/packages/core/src/plugin/provider/nvidia.ts new file mode 100644 index 000000000000..b227e5cef3ac --- /dev/null +++ b/packages/core/src/plugin/provider/nvidia.ts @@ -0,0 +1,16 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" +import { ProviderV2 } from "../../provider" + +export const NvidiaPlugin = PluginV2.define({ + id: PluginV2.ID.make("nvidia"), + effect: Effect.gen(function* () { + return { + "provider.update": Effect.fn(function* (evt) { + if (evt.provider.id !== ProviderV2.ID.make("nvidia")) return + evt.provider.options.headers["HTTP-Referer"] = "https://opencode.ai/" + evt.provider.options.headers["X-Title"] = "opencode" + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/openai-compatible.ts b/packages/core/src/plugin/provider/openai-compatible.ts new file mode 100644 index 000000000000..76c33737066f --- /dev/null +++ b/packages/core/src/plugin/provider/openai-compatible.ts @@ -0,0 +1,17 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" + +export const OpenAICompatiblePlugin = PluginV2.define({ + id: PluginV2.ID.make("openai-compatible"), + effect: Effect.gen(function* () { + return { + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.sdk) return + if (!evt.package.includes("@ai-sdk/openai-compatible")) return + if (evt.options.includeUsage !== false) evt.options.includeUsage = true + const mod = yield* Effect.promise(() => import("@ai-sdk/openai-compatible")) + evt.sdk = mod.createOpenAICompatible(evt.options as any) + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/openai.ts b/packages/core/src/plugin/provider/openai.ts new file mode 100644 index 000000000000..a81455f1985e --- /dev/null +++ b/packages/core/src/plugin/provider/openai.ts @@ -0,0 +1,27 @@ +import { Effect } from "effect" +import { ModelV2 } from "../../model" +import { PluginV2 } from "../../plugin" +import { ProviderV2 } from "../../provider" + +export const OpenAIPlugin = PluginV2.define({ + id: PluginV2.ID.make("openai"), + effect: Effect.gen(function* () { + return { + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.package !== "@ai-sdk/openai") return + const mod = yield* Effect.promise(() => import("@ai-sdk/openai")) + evt.sdk = mod.createOpenAI(evt.options) + }), + "aisdk.language": Effect.fn(function* (evt) { + if (evt.model.providerID !== ProviderV2.ID.openai) return + evt.language = evt.sdk.responses(evt.model.apiID) + }), + "model.update": Effect.fn(function* (evt) { + if (evt.model.providerID !== ProviderV2.ID.openai) return + // OpenAIPlugin sends OpenAI models through Responses; this alias is a + // chat-completions-only model, so remove it only from OpenAI's catalog. + if (evt.model.id === ModelV2.ID.make("gpt-5-chat-latest")) evt.cancel = true + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/opencode.ts b/packages/core/src/plugin/provider/opencode.ts new file mode 100644 index 000000000000..44c904aec5b8 --- /dev/null +++ b/packages/core/src/plugin/provider/opencode.ts @@ -0,0 +1,27 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" +import { ProviderV2 } from "../../provider" + +export const OpencodePlugin = PluginV2.define({ + id: PluginV2.ID.make("opencode"), + effect: Effect.gen(function* () { + let hasKey = false + return { + "provider.update": Effect.fn(function* (evt) { + if (evt.provider.id !== ProviderV2.ID.opencode) return + hasKey = Boolean( + process.env.OPENCODE_API_KEY || + evt.provider.env.some((item) => process.env[item]) || + evt.provider.options.aisdk.provider.apiKey || + (evt.provider.enabled && evt.provider.enabled.via === "auth"), + ) + if (!hasKey) evt.provider.options.aisdk.provider.apiKey = "public" + }), + "model.update": Effect.fn(function* (evt) { + if (evt.model.providerID !== ProviderV2.ID.opencode) return + if (hasKey) return + if (evt.model.cost.some((item) => item.input > 0)) evt.cancel = true + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/openrouter.ts b/packages/core/src/plugin/provider/openrouter.ts new file mode 100644 index 000000000000..976eea8c057b --- /dev/null +++ b/packages/core/src/plugin/provider/openrouter.ts @@ -0,0 +1,29 @@ +import { Effect } from "effect" +import { ModelV2 } from "../../model" +import { PluginV2 } from "../../plugin" +import { ProviderV2 } from "../../provider" + +export const OpenRouterPlugin = PluginV2.define({ + id: PluginV2.ID.make("openrouter"), + effect: Effect.gen(function* () { + return { + "provider.update": Effect.fn(function* (evt) { + if (evt.provider.id !== ProviderV2.ID.openrouter) return + evt.provider.options.headers["HTTP-Referer"] = "https://opencode.ai/" + evt.provider.options.headers["X-Title"] = "opencode" + }), + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.package !== "@openrouter/ai-sdk-provider") return + const mod = yield* Effect.promise(() => import("@openrouter/ai-sdk-provider")) + evt.sdk = mod.createOpenRouter(evt.options) + }), + "model.update": Effect.fn(function* (evt) { + if (evt.model.providerID !== ProviderV2.ID.openrouter) return + // These are OpenRouter-specific OpenAI chat aliases that do not work on + // the generic path. Keep custom providers with matching IDs untouched. + if (evt.model.id === ModelV2.ID.make("gpt-5-chat-latest")) evt.cancel = true + if (evt.model.id === ModelV2.ID.make("openai/gpt-5-chat")) evt.cancel = true + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/perplexity.ts b/packages/core/src/plugin/provider/perplexity.ts new file mode 100644 index 000000000000..2415ab7c1a22 --- /dev/null +++ b/packages/core/src/plugin/provider/perplexity.ts @@ -0,0 +1,15 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" + +export const PerplexityPlugin = PluginV2.define({ + id: PluginV2.ID.make("perplexity"), + effect: Effect.gen(function* () { + return { + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.package !== "@ai-sdk/perplexity") return + const mod = yield* Effect.promise(() => import("@ai-sdk/perplexity")) + evt.sdk = mod.createPerplexity(evt.options) + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/sap-ai-core.ts b/packages/core/src/plugin/provider/sap-ai-core.ts new file mode 100644 index 000000000000..619f01eb3950 --- /dev/null +++ b/packages/core/src/plugin/provider/sap-ai-core.ts @@ -0,0 +1,40 @@ +import { Npm } from "../../npm" +import { Effect, Option } from "effect" +import { pathToFileURL } from "url" +import { PluginV2 } from "../../plugin" +import { ProviderV2 } from "../../provider" + +export const SapAICorePlugin = PluginV2.define({ + id: PluginV2.ID.make("sap-ai-core"), + effect: Effect.gen(function* () { + const npm = yield* Npm.Service + return { + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.model.providerID !== ProviderV2.ID.make("sap-ai-core")) return + const serviceKey = + process.env.AICORE_SERVICE_KEY ?? + (typeof evt.options.serviceKey === "string" ? evt.options.serviceKey : undefined) + if (serviceKey && !process.env.AICORE_SERVICE_KEY) process.env.AICORE_SERVICE_KEY = serviceKey + + const installedPath = evt.package.startsWith("file://") + ? evt.package + : Option.getOrUndefined((yield* npm.add(evt.package).pipe(Effect.orDie)).entrypoint) + if (!installedPath) throw new Error(`Package ${evt.package} has no import entrypoint`) + + const mod = yield* Effect.promise(async () => { + return (await import( + installedPath.startsWith("file://") ? installedPath : pathToFileURL(installedPath).href + )) as Record any> + }).pipe(Effect.orDie) + const match = Object.keys(mod).find((name) => name.startsWith("create")) + if (!match) throw new Error(`Package ${evt.package} has no provider factory export`) + + evt.sdk = mod[match](serviceKey ? { deploymentId: process.env.AICORE_DEPLOYMENT_ID, resourceGroup: process.env.AICORE_RESOURCE_GROUP } : {}) + }), + "aisdk.language": Effect.fn(function* (evt) { + if (evt.model.providerID !== ProviderV2.ID.make("sap-ai-core")) return + evt.language = evt.sdk(evt.model.apiID) + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/togetherai.ts b/packages/core/src/plugin/provider/togetherai.ts new file mode 100644 index 000000000000..b1870f266253 --- /dev/null +++ b/packages/core/src/plugin/provider/togetherai.ts @@ -0,0 +1,15 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" + +export const TogetherAIPlugin = PluginV2.define({ + id: PluginV2.ID.make("togetherai"), + effect: Effect.gen(function* () { + return { + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.package !== "@ai-sdk/togetherai") return + const mod = yield* Effect.promise(() => import("@ai-sdk/togetherai")) + evt.sdk = mod.createTogetherAI(evt.options) + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/venice.ts b/packages/core/src/plugin/provider/venice.ts new file mode 100644 index 000000000000..8a3b950245c6 --- /dev/null +++ b/packages/core/src/plugin/provider/venice.ts @@ -0,0 +1,15 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" + +export const VenicePlugin = PluginV2.define({ + id: PluginV2.ID.make("venice"), + effect: Effect.gen(function* () { + return { + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.package !== "venice-ai-sdk-provider") return + const mod = yield* Effect.promise(() => import("venice-ai-sdk-provider")) + evt.sdk = mod.createVenice(evt.options) + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/vercel.ts b/packages/core/src/plugin/provider/vercel.ts new file mode 100644 index 000000000000..2108542b1655 --- /dev/null +++ b/packages/core/src/plugin/provider/vercel.ts @@ -0,0 +1,21 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" +import { ProviderV2 } from "../../provider" + +export const VercelPlugin = PluginV2.define({ + id: PluginV2.ID.make("vercel"), + effect: Effect.gen(function* () { + return { + "provider.update": Effect.fn(function* (evt) { + if (evt.provider.id !== ProviderV2.ID.make("vercel")) return + evt.provider.options.headers["http-referer"] = "https://opencode.ai/" + evt.provider.options.headers["x-title"] = "opencode" + }), + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.package !== "@ai-sdk/vercel") return + const mod = yield* Effect.promise(() => import("@ai-sdk/vercel")) + evt.sdk = mod.createVercel(evt.options) + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/xai.ts b/packages/core/src/plugin/provider/xai.ts new file mode 100644 index 000000000000..b54aa7374c67 --- /dev/null +++ b/packages/core/src/plugin/provider/xai.ts @@ -0,0 +1,20 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" +import { ProviderV2 } from "../../provider" + +export const XAIPlugin = PluginV2.define({ + id: PluginV2.ID.make("xai"), + effect: Effect.gen(function* () { + return { + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.package !== "@ai-sdk/xai") return + const mod = yield* Effect.promise(() => import("@ai-sdk/xai")) + evt.sdk = mod.createXai(evt.options) + }), + "aisdk.language": Effect.fn(function* (evt) { + if (evt.model.providerID !== ProviderV2.ID.make("xai")) return + evt.language = evt.sdk.responses(evt.model.apiID) + }), + } + }), +}) diff --git a/packages/core/src/plugin/provider/zenmux.ts b/packages/core/src/plugin/provider/zenmux.ts new file mode 100644 index 000000000000..6bdd42601009 --- /dev/null +++ b/packages/core/src/plugin/provider/zenmux.ts @@ -0,0 +1,16 @@ +import { Effect } from "effect" +import { PluginV2 } from "../../plugin" +import { ProviderV2 } from "../../provider" + +export const ZenmuxPlugin = PluginV2.define({ + id: PluginV2.ID.make("zenmux"), + effect: Effect.gen(function* () { + return { + "provider.update": Effect.fn(function* (evt) { + if (evt.provider.id !== ProviderV2.ID.make("zenmux")) return + evt.provider.options.headers["HTTP-Referer"] ??= "https://opencode.ai/" + evt.provider.options.headers["X-Title"] ??= "opencode" + }), + } + }), +}) diff --git a/packages/core/src/provider.ts b/packages/core/src/provider.ts new file mode 100644 index 000000000000..7c1c9666542e --- /dev/null +++ b/packages/core/src/provider.ts @@ -0,0 +1,120 @@ +export * as ProviderV2 from "./provider" + +import { withStatics } from "./schema" +import { Schema } from "effect" + +export const ID = Schema.String.pipe( + Schema.brand("ProviderV2.ID"), + withStatics((schema) => ({ + // Well-known providers + opencode: schema.make("opencode"), + anthropic: schema.make("anthropic"), + openai: schema.make("openai"), + google: schema.make("google"), + googleVertex: schema.make("google-vertex"), + githubCopilot: schema.make("github-copilot"), + amazonBedrock: schema.make("amazon-bedrock"), + azure: schema.make("azure"), + openrouter: schema.make("openrouter"), + mistral: schema.make("mistral"), + gitlab: schema.make("gitlab"), + })), +) +export type ID = typeof ID.Type + +const OpenAIResponses = Schema.Struct({ + type: Schema.Literal("openai/responses"), + url: Schema.String, + websocket: Schema.optional(Schema.Boolean), +}) + +const OpenAICompletions = Schema.Struct({ + type: Schema.Literal("openai/completions"), + url: Schema.String, + reasoning: Schema.Union([ + Schema.Struct({ + type: Schema.Literal("reasoning_content"), + }), + Schema.Struct({ + type: Schema.Literal("reasoning_details"), + }), + ]).pipe(Schema.optional), +}) +export type OpenAICompletions = typeof OpenAICompletions.Type + +const AISDK = Schema.Struct({ + type: Schema.Literal("aisdk"), + package: Schema.String, + url: Schema.String.pipe(Schema.optional), +}) + +const AnthropicMessages = Schema.Struct({ + type: Schema.Literal("anthropic/messages"), + url: Schema.String, +}) + +const UnknownEndpoint = Schema.Struct({ + type: Schema.Literal("unknown"), +}) + +export const Endpoint = Schema.Union([ + UnknownEndpoint, + OpenAIResponses, + OpenAICompletions, + AnthropicMessages, + AISDK, +]).pipe(Schema.toTaggedUnion("type")) +export type Endpoint = typeof Endpoint.Type + +export const Options = Schema.Struct({ + headers: Schema.Record(Schema.String, Schema.String), + body: Schema.Record(Schema.String, Schema.Any), + aisdk: Schema.Struct({ + provider: Schema.Record(Schema.String, Schema.Any), + request: Schema.Record(Schema.String, Schema.Any), + }), +}) +export type Options = typeof Options.Type + +export class Info extends Schema.Class("ProviderV2.Info")({ + id: ID, + name: Schema.String, + enabled: Schema.Union([ + Schema.Literal(false), + Schema.Struct({ + via: Schema.Literal("env"), + name: Schema.String, + }), + Schema.Struct({ + via: Schema.Literal("auth"), + service: Schema.String, + }), + Schema.Struct({ + via: Schema.Literal("custom"), + data: Schema.Record(Schema.String, Schema.Any), + }), + ]), + env: Schema.String.pipe(Schema.Array), + endpoint: Endpoint, + options: Options, +}) { + static empty(providerID: ID) { + return new Info({ + id: providerID, + name: providerID, + enabled: false, + env: [], + endpoint: { + type: "unknown", + }, + options: { + headers: {}, + body: {}, + aisdk: { + provider: {}, + request: {}, + }, + }, + }) + } +} diff --git a/packages/opencode/src/v2/session-prompt.ts b/packages/core/src/session-prompt.ts similarity index 100% rename from packages/opencode/src/v2/session-prompt.ts rename to packages/core/src/session-prompt.ts diff --git a/packages/opencode/src/v2/tool-output.ts b/packages/core/src/tool-output.ts similarity index 100% rename from packages/opencode/src/v2/tool-output.ts rename to packages/core/src/tool-output.ts diff --git a/packages/opencode/src/v2/schema.ts b/packages/core/src/v2-schema.ts similarity index 88% rename from packages/opencode/src/v2/schema.ts rename to packages/core/src/v2-schema.ts index 44587b838a43..a34b0b151690 100644 --- a/packages/opencode/src/v2/schema.ts +++ b/packages/core/src/v2-schema.ts @@ -7,4 +7,4 @@ export const DateTimeUtcFromMillis = Schema.Finite.pipe( }), ) -export * as V2Schema from "./schema" +export * as V2Schema from "./v2-schema" diff --git a/packages/opencode/test/util/effect-zod.test.ts b/packages/core/test/effect-zod.test.ts similarity index 100% rename from packages/opencode/test/util/effect-zod.test.ts rename to packages/core/test/effect-zod.test.ts diff --git a/packages/core/test/v2/catalog.test.ts b/packages/core/test/v2/catalog.test.ts new file mode 100644 index 000000000000..cba3405bce5a --- /dev/null +++ b/packages/core/test/v2/catalog.test.ts @@ -0,0 +1,199 @@ +import { describe, expect } from "bun:test" +import { DateTime, Effect, Layer, Option } from "effect" +import { Catalog } from "@opencode-ai/core/catalog" +import { ModelV2 } from "@opencode-ai/core/model" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { ProviderV2 } from "@opencode-ai/core/provider" +import { testEffect } from "../lib/effect" + +const it = testEffect(Catalog.layer.pipe(Layer.provideMerge(PluginV2.defaultLayer))) + +describe("CatalogV2", () => { + it.effect("normalizes provider baseURL into endpoint url", () => + Effect.gen(function* () { + const catalog = yield* Catalog.Service + const providerID = ProviderV2.ID.make("test") + + yield* catalog.provider.update(providerID, (provider) => { + provider.endpoint = { + type: "aisdk", + package: "@ai-sdk/openai-compatible", + url: "https://default.example.com", + } + provider.options.aisdk.provider.baseURL = "https://override.example.com" + }) + + const provider = yield* catalog.provider.get(providerID) + + expect(provider.endpoint).toEqual({ + type: "aisdk", + package: "@ai-sdk/openai-compatible", + url: "https://override.example.com", + }) + expect(provider.options.aisdk.provider.baseURL).toBeUndefined() + }), + ) + + it.effect("normalizes model baseURL into endpoint url", () => + Effect.gen(function* () { + const catalog = yield* Catalog.Service + const providerID = ProviderV2.ID.make("test") + const modelID = ModelV2.ID.make("model") + + yield* catalog.provider.update(providerID, (provider) => { + provider.endpoint = { + type: "aisdk", + package: "@ai-sdk/openai-compatible", + url: "https://provider.example.com", + } + }) + yield* catalog.model.update(providerID, modelID, (model) => { + model.endpoint = { + type: "aisdk", + package: "@ai-sdk/openai-compatible", + url: "https://model.example.com", + } + model.options.aisdk.provider.baseURL = "https://override.example.com" + }) + + const model = yield* catalog.model.get(providerID, modelID) + + expect(model.endpoint).toEqual({ + type: "aisdk", + package: "@ai-sdk/openai-compatible", + url: "https://override.example.com", + }) + expect(model.options.aisdk.provider.baseURL).toBeUndefined() + }), + ) + + it.effect("resolves unknown model endpoint from provider endpoint", () => + Effect.gen(function* () { + const catalog = yield* Catalog.Service + const providerID = ProviderV2.ID.make("test") + const modelID = ModelV2.ID.make("model") + + yield* catalog.provider.update(providerID, (provider) => { + provider.endpoint = { + type: "aisdk", + package: "@ai-sdk/openai-compatible", + url: "https://provider.example.com", + } + }) + yield* catalog.model.update(providerID, modelID, () => {}) + + const model = yield* catalog.model.get(providerID, modelID) + + expect(model.endpoint).toEqual({ + type: "aisdk", + package: "@ai-sdk/openai-compatible", + url: "https://provider.example.com", + }) + }), + ) + + it.effect("runs provider hooks after baseURL is normalized", () => + Effect.gen(function* () { + const catalog = yield* Catalog.Service + const plugin = yield* PluginV2.Service + const providerID = ProviderV2.ID.make("test") + const seen: unknown[] = [] + + yield* plugin.add({ + id: PluginV2.ID.make("test"), + effect: Effect.succeed({ + "provider.update": (evt) => + Effect.sync(() => { + seen.push(evt.provider.endpoint.type) + if (evt.provider.endpoint.type === "aisdk") seen.push(evt.provider.endpoint.url) + seen.push(evt.provider.options.aisdk.provider.baseURL) + }), + }), + }) + yield* catalog.provider.update(providerID, (provider) => { + provider.endpoint = { + type: "aisdk", + package: "@ai-sdk/openai-compatible", + } + provider.options.aisdk.provider.baseURL = "https://provider.example.com" + }) + + expect(seen).toEqual(["aisdk", "https://provider.example.com", undefined]) + }), + ) + + it.effect("resolves provider and model option merges", () => + Effect.gen(function* () { + const catalog = yield* Catalog.Service + const providerID = ProviderV2.ID.make("test") + const modelID = ModelV2.ID.make("model") + + yield* catalog.provider.update(providerID, (provider) => { + provider.options.headers.provider = "provider" + provider.options.headers.shared = "provider" + provider.options.body.provider = true + provider.options.aisdk.provider.provider = true + }) + yield* catalog.model.update(providerID, modelID, (model) => { + model.options.headers.model = "model" + model.options.headers.shared = "model" + model.options.body.model = true + model.options.aisdk.provider.model = true + model.options.aisdk.request.request = true + }) + + const model = yield* catalog.model.get(providerID, modelID) + + expect(model.options.headers).toEqual({ provider: "provider", shared: "model", model: "model" }) + expect(model.options.body).toEqual({ provider: true, model: true }) + expect(model.options.aisdk.provider).toEqual({ provider: true, model: true }) + expect(model.options.aisdk.request).toEqual({ request: true }) + }), + ) + + it.effect("falls back to newest available model when no default is configured", () => + Effect.gen(function* () { + const catalog = yield* Catalog.Service + const providerID = ProviderV2.ID.make("test") + + yield* catalog.provider.update(providerID, (provider) => { + provider.enabled = { via: "custom", data: {} } + }) + yield* catalog.model.update(providerID, ModelV2.ID.make("old"), (model) => { + model.time.released = DateTime.makeUnsafe(1000) + }) + yield* catalog.model.update(providerID, ModelV2.ID.make("new"), (model) => { + model.time.released = DateTime.makeUnsafe(2000) + }) + + const model = yield* catalog.model.default() + + expect(Option.getOrUndefined(model)?.id).toMatch("new") + }), + ) + + it.effect("small model prefers small keyword candidates before cost scoring", () => + Effect.gen(function* () { + const catalog = yield* Catalog.Service + const providerID = ProviderV2.ID.make("test") + + yield* catalog.provider.update(providerID, () => {}) + yield* catalog.model.update(providerID, ModelV2.ID.make("cheap-large"), (model) => { + model.capabilities.input = ["text"] + model.capabilities.output = ["text"] + model.cost = [{ input: 1, output: 1, cache: { read: 0, write: 0 } }] + model.time.released = DateTime.makeUnsafe(Date.now()) + }) + yield* catalog.model.update(providerID, ModelV2.ID.make("expensive-mini"), (model) => { + model.capabilities.input = ["text"] + model.capabilities.output = ["text"] + model.cost = [{ input: 10, output: 10, cache: { read: 0, write: 0 } }] + model.time.released = DateTime.makeUnsafe(Date.now()) + }) + + const model = yield* catalog.model.small(providerID) + + expect(Option.getOrUndefined(model)?.id).toMatch("expensive-mini") + }), + ) +}) diff --git a/packages/core/test/v2/plugin/fixtures/provider-factory.ts b/packages/core/test/v2/plugin/fixtures/provider-factory.ts new file mode 100644 index 000000000000..7278c231dd54 --- /dev/null +++ b/packages/core/test/v2/plugin/fixtures/provider-factory.ts @@ -0,0 +1,9 @@ +export function createFixtureProvider(options: Record) { + const captured = Object.fromEntries(Object.entries(options)) + return Object.assign((modelID: string) => ({ modelID, options: captured }), { + options: captured, + languageModel(modelID: string) { + return { modelID, options: captured } + }, + }) +} diff --git a/packages/core/test/v2/plugin/provider-alibaba.test.ts b/packages/core/test/v2/plugin/provider-alibaba.test.ts new file mode 100644 index 000000000000..06e6f969fdc6 --- /dev/null +++ b/packages/core/test/v2/plugin/provider-alibaba.test.ts @@ -0,0 +1,67 @@ +import { describe, expect } from "bun:test" +import { createAlibaba } from "@ai-sdk/alibaba" +import { Effect } from "effect" +import { ModelV2 } from "@opencode-ai/core/model" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { AlibabaPlugin } from "@opencode-ai/core/plugin/provider/alibaba" +import { it, model } from "./provider-helper" + +describe("AlibabaPlugin", () => { + it.effect("creates an Alibaba SDK for @ai-sdk/alibaba", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(AlibabaPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { model: model("alibaba", "qwen"), package: "@ai-sdk/alibaba", options: { name: "alibaba" } }, + {}, + ) + expect(result.sdk).toBeDefined() + }), + ) + + it.effect("ignores non-Alibaba SDK packages", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(AlibabaPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { model: model("alibaba", "qwen"), package: "@ai-sdk/openai-compatible", options: { name: "alibaba" } }, + {}, + ) + expect(result.sdk).toBeUndefined() + }), + ) + + it.effect("matches the old bundled Alibaba SDK provider naming", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(AlibabaPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("custom-alibaba", "qwen"), + package: "@ai-sdk/alibaba", + options: { name: "custom-alibaba", apiKey: "test" }, + }, + {}, + ) + const expected = createAlibaba({ apiKey: "test", ...{ name: "custom-alibaba" } }).languageModel("qwen") + const actual = result.sdk?.languageModel("qwen") + expect(actual?.provider).toBe(expected.provider) + expect(actual?.modelId).toBe(expected.modelId) + }), + ) + + it.effect("uses the old default languageModel(apiID) behavior", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(AlibabaPlugin) + const item = model("alibaba", "alias", { apiID: ModelV2.ID.make("qwen-plus") }) + const result = yield* plugin.trigger("aisdk.sdk", { model: item, package: "@ai-sdk/alibaba", options: {} }, {}) + const language = result.sdk?.languageModel(item.apiID) + expect(language?.modelId).toBe("qwen-plus") + expect(language?.provider).toBe("alibaba.chat") + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-amazon-bedrock.test.ts b/packages/core/test/v2/plugin/provider-amazon-bedrock.test.ts new file mode 100644 index 000000000000..e7e53cb8d8ea --- /dev/null +++ b/packages/core/test/v2/plugin/provider-amazon-bedrock.test.ts @@ -0,0 +1,464 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { AmazonBedrockPlugin } from "@opencode-ai/core/plugin/provider/amazon-bedrock" +import { fakeSelectorSdk, it, model, provider, withEnv } from "./provider-helper" + +function bedrockBaseURL(sdk: unknown, modelID = "anthropic.claude-sonnet-4-5") { + const language = (sdk as { languageModel: (id: string) => unknown }).languageModel(modelID) + return (language as { config: { baseUrl: () => string } }).config.baseUrl() +} + +function bedrockFetch(sdk: unknown, modelID = "anthropic.claude-sonnet-4-5") { + const language = (sdk as { languageModel: (id: string) => unknown }).languageModel(modelID) + return (language as { config: { fetch: (input: Parameters[0], init?: RequestInit) => Promise } }).config + .fetch +} + +describe("AmazonBedrockPlugin", () => { + it.effect("moves endpoint option to endpoint URL", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(AmazonBedrockPlugin) + const result = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("amazon-bedrock", { + options: { + headers: {}, + body: {}, + aisdk: { provider: { endpoint: "https://bedrock.example" }, request: {} }, + }, + }), + cancel: false, + }, + ) + expect(result.provider.endpoint).toEqual({ + type: "aisdk", + package: "test-provider", + url: "https://bedrock.example", + }) + expect(result.provider.options.aisdk.provider.endpoint).toBeUndefined() + }), + ) + + it.effect("prefers endpoint over baseURL for SDK base URL", () => + withEnv({ AWS_BEARER_TOKEN_BEDROCK: undefined, AWS_PROFILE: undefined, AWS_ACCESS_KEY_ID: undefined }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(AmazonBedrockPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("amazon-bedrock", "anthropic.claude-sonnet-4-5"), + package: "@ai-sdk/amazon-bedrock", + options: { + name: "amazon-bedrock", + bearerToken: "token", + baseURL: "https://base.example", + endpoint: "https://endpoint.example", + region: "us-east-1", + }, + }, + {}, + ) + expect(bedrockBaseURL(result.sdk)).toBe("https://endpoint.example") + }), + ), + ) + + it.effect("uses baseURL as SDK base URL", () => + withEnv({ AWS_BEARER_TOKEN_BEDROCK: undefined, AWS_PROFILE: undefined, AWS_ACCESS_KEY_ID: undefined }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(AmazonBedrockPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("amazon-bedrock", "anthropic.claude-sonnet-4-5"), + package: "@ai-sdk/amazon-bedrock", + options: { + name: "amazon-bedrock", + bearerToken: "token", + baseURL: "https://base.example", + region: "us-east-1", + }, + }, + {}, + ) + expect(bedrockBaseURL(result.sdk)).toBe("https://base.example") + }), + ), + ) + + it.effect("creates SDK without explicit credential env so the default AWS chain can resolve credentials", () => + withEnv( + { + AWS_ACCESS_KEY_ID: undefined, + AWS_BEARER_TOKEN_BEDROCK: undefined, + AWS_CONTAINER_CREDENTIALS_FULL_URI: undefined, + AWS_CONTAINER_CREDENTIALS_RELATIVE_URI: undefined, + AWS_PROFILE: undefined, + AWS_REGION: undefined, + AWS_WEB_IDENTITY_TOKEN_FILE: undefined, + }, + () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(AmazonBedrockPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("amazon-bedrock", "anthropic.claude-sonnet-4-5"), + package: "@ai-sdk/amazon-bedrock", + options: { name: "amazon-bedrock" }, + }, + {}, + ) + expect(result.sdk).toBeDefined() + expect(bedrockBaseURL(result.sdk)).toBe("https://bedrock-runtime.us-east-1.amazonaws.com") + }), + ), + ) + + it.effect("uses config region over AWS_REGION for SDK base URL", () => + withEnv({ AWS_BEARER_TOKEN_BEDROCK: "token", AWS_REGION: "us-east-1" }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(AmazonBedrockPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("amazon-bedrock", "anthropic.claude-sonnet-4-5"), + package: "@ai-sdk/amazon-bedrock", + options: { name: "amazon-bedrock", region: "eu-west-1" }, + }, + {}, + ) + expect(bedrockBaseURL(result.sdk)).toBe("https://bedrock-runtime.eu-west-1.amazonaws.com") + }), + ), + ) + + it.effect("uses AWS_REGION for SDK base URL when config region is absent", () => + withEnv({ AWS_BEARER_TOKEN_BEDROCK: "token", AWS_REGION: "eu-west-1" }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(AmazonBedrockPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("amazon-bedrock", "anthropic.claude-sonnet-4-5"), + package: "@ai-sdk/amazon-bedrock", + options: { name: "amazon-bedrock" }, + }, + {}, + ) + expect(bedrockBaseURL(result.sdk)).toBe("https://bedrock-runtime.eu-west-1.amazonaws.com") + }), + ), + ) + + it.effect("defaults SDK region to us-east-1", () => + withEnv({ AWS_BEARER_TOKEN_BEDROCK: "token", AWS_REGION: undefined }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(AmazonBedrockPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("amazon-bedrock", "anthropic.claude-sonnet-4-5"), + package: "@ai-sdk/amazon-bedrock", + options: { name: "amazon-bedrock" }, + }, + {}, + ) + expect(bedrockBaseURL(result.sdk)).toBe("https://bedrock-runtime.us-east-1.amazonaws.com") + }), + ), + ) + + it.effect("loads bearer token option into env and uses bearer auth", () => + withEnv({ AWS_ACCESS_KEY_ID: undefined, AWS_BEARER_TOKEN_BEDROCK: undefined, AWS_PROFILE: undefined }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const headers: Array = [] + yield* plugin.add(AmazonBedrockPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("amazon-bedrock", "anthropic.claude-sonnet-4-5"), + package: "@ai-sdk/amazon-bedrock", + options: { + name: "amazon-bedrock", + bearerToken: "option-token", + fetch: async (_input: Parameters[0], init?: RequestInit) => { + headers.push(new Headers(init?.headers).get("Authorization")) + return new Response("{}") + }, + }, + }, + {}, + ) + yield* Effect.promise(() => bedrockFetch(result.sdk)("https://bedrock.example", { method: "POST" })) + expect(process.env.AWS_BEARER_TOKEN_BEDROCK).toBe("option-token") + expect(headers).toEqual(["Bearer option-token"]) + }), + ), + ) + + it.effect("prefers bearer token env over bearer token option", () => + withEnv({ AWS_BEARER_TOKEN_BEDROCK: "env-token" }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const headers: Array = [] + yield* plugin.add(AmazonBedrockPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("amazon-bedrock", "anthropic.claude-sonnet-4-5"), + package: "@ai-sdk/amazon-bedrock", + options: { + name: "amazon-bedrock", + bearerToken: "option-token", + fetch: async (_input: Parameters[0], init?: RequestInit) => { + headers.push(new Headers(init?.headers).get("Authorization")) + return new Response("{}") + }, + }, + }, + {}, + ) + yield* Effect.promise(() => bedrockFetch(result.sdk)("https://bedrock.example", { method: "POST" })) + expect(process.env.AWS_BEARER_TOKEN_BEDROCK).toBe("env-token") + expect(headers).toEqual(["Bearer env-token"]) + }), + ), + ) + + it.effect("uses SigV4 credential env when bearer token is absent", () => + withEnv( + { + AWS_ACCESS_KEY_ID: "test-access-key", + AWS_BEARER_TOKEN_BEDROCK: undefined, + AWS_REGION: "us-east-1", + AWS_SECRET_ACCESS_KEY: "test-secret-key", + AWS_SESSION_TOKEN: "test-session-token", + }, + () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const headers: Array = [] + yield* plugin.add(AmazonBedrockPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("amazon-bedrock", "anthropic.claude-sonnet-4-5"), + package: "@ai-sdk/amazon-bedrock", + options: { + name: "amazon-bedrock", + fetch: async (_input: Parameters[0], init?: RequestInit) => { + headers.push(new Headers(init?.headers).get("Authorization")) + return new Response("{}") + }, + }, + }, + {}, + ) + yield* Effect.promise(() => + bedrockFetch(result.sdk)("https://bedrock-runtime.us-east-1.amazonaws.com/model/test/invoke", { + body: "{}", + method: "POST", + }), + ) + expect(headers[0]?.startsWith("AWS4-HMAC-SHA256 ")).toBe(true) + }), + ), + ) + + it.effect("applies legacy cross-region inference prefixes", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(AmazonBedrockPlugin) + yield* plugin.trigger( + "aisdk.language", + { + model: model("amazon-bedrock", "anthropic.claude-sonnet-4-5"), + sdk: { languageModel: fakeSelectorSdk(calls).languageModel }, + options: {}, + }, + {}, + ) + yield* plugin.trigger( + "aisdk.language", + { + model: model("amazon-bedrock", "anthropic.claude-sonnet-4-5"), + sdk: { languageModel: fakeSelectorSdk(calls).languageModel }, + options: { region: "eu-west-1" }, + }, + {}, + ) + yield* plugin.trigger( + "aisdk.language", + { + model: model("amazon-bedrock", "global.anthropic.claude-sonnet-4-5"), + sdk: { languageModel: fakeSelectorSdk(calls).languageModel }, + options: { region: "eu-west-1" }, + }, + {}, + ) + yield* plugin.trigger( + "aisdk.language", + { + model: model("amazon-bedrock", "anthropic.claude-sonnet-4-5"), + sdk: { languageModel: fakeSelectorSdk(calls).languageModel }, + options: { region: "ap-northeast-1" }, + }, + {}, + ) + yield* plugin.trigger( + "aisdk.language", + { + model: model("amazon-bedrock", "anthropic.claude-sonnet-4-5"), + sdk: { languageModel: fakeSelectorSdk(calls).languageModel }, + options: { region: "ap-southeast-2" }, + }, + {}, + ) + expect(calls).toEqual([ + "languageModel:us.anthropic.claude-sonnet-4-5", + "languageModel:eu.anthropic.claude-sonnet-4-5", + "languageModel:global.anthropic.claude-sonnet-4-5", + "languageModel:jp.anthropic.claude-sonnet-4-5", + "languageModel:au.anthropic.claude-sonnet-4-5", + ]) + }), + ) + + it.effect("uses AWS_REGION for language prefixes when region option is absent", () => + withEnv({ AWS_REGION: "eu-west-1" }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(AmazonBedrockPlugin) + yield* plugin.trigger( + "aisdk.language", + { + model: model("amazon-bedrock", "anthropic.claude-sonnet-4-5"), + sdk: { languageModel: fakeSelectorSdk(calls).languageModel }, + options: {}, + }, + {}, + ) + expect(calls).toEqual(["languageModel:eu.anthropic.claude-sonnet-4-5"]) + }), + ), + ) + + it.effect("applies the full legacy cross-region prefix matrix", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + const cases = [ + { region: "us-east-1", modelID: "amazon.nova-micro-v1:0", expected: "us.amazon.nova-micro-v1:0" }, + { region: "us-east-1", modelID: "amazon.nova-lite-v1:0", expected: "us.amazon.nova-lite-v1:0" }, + { region: "us-east-1", modelID: "amazon.nova-pro-v1:0", expected: "us.amazon.nova-pro-v1:0" }, + { region: "us-east-1", modelID: "amazon.nova-premier-v1:0", expected: "us.amazon.nova-premier-v1:0" }, + { region: "us-east-1", modelID: "amazon.nova-2-lite-v1:0", expected: "us.amazon.nova-2-lite-v1:0" }, + { region: "us-east-1", modelID: "anthropic.claude-sonnet-4-5", expected: "us.anthropic.claude-sonnet-4-5" }, + { region: "us-east-1", modelID: "deepseek.r1-v1:0", expected: "us.deepseek.r1-v1:0" }, + { region: "us-gov-west-1", modelID: "anthropic.claude-sonnet-4-5", expected: "anthropic.claude-sonnet-4-5" }, + { region: "us-east-1", modelID: "cohere.command-r-plus-v1:0", expected: "cohere.command-r-plus-v1:0" }, + { region: "eu-west-1", modelID: "anthropic.claude-sonnet-4-5", expected: "eu.anthropic.claude-sonnet-4-5" }, + { region: "eu-west-2", modelID: "amazon.nova-lite-v1:0", expected: "eu.amazon.nova-lite-v1:0" }, + { region: "eu-west-3", modelID: "amazon.nova-micro-v1:0", expected: "eu.amazon.nova-micro-v1:0" }, + { + region: "eu-north-1", + modelID: "meta.llama3-70b-instruct-v1:0", + expected: "eu.meta.llama3-70b-instruct-v1:0", + }, + { region: "eu-central-1", modelID: "mistral.pixtral-large-v1:0", expected: "eu.mistral.pixtral-large-v1:0" }, + { region: "eu-south-1", modelID: "anthropic.claude-sonnet-4-5", expected: "eu.anthropic.claude-sonnet-4-5" }, + { region: "eu-south-2", modelID: "anthropic.claude-sonnet-4-5", expected: "eu.anthropic.claude-sonnet-4-5" }, + { region: "eu-central-2", modelID: "anthropic.claude-sonnet-4-5", expected: "anthropic.claude-sonnet-4-5" }, + { region: "eu-west-1", modelID: "cohere.command-r-plus-v1:0", expected: "cohere.command-r-plus-v1:0" }, + { + region: "ap-southeast-2", + modelID: "anthropic.claude-sonnet-4-5", + expected: "au.anthropic.claude-sonnet-4-5", + }, + { + region: "ap-southeast-4", + modelID: "anthropic.claude-haiku-v1:0", + expected: "au.anthropic.claude-haiku-v1:0", + }, + { region: "ap-southeast-2", modelID: "anthropic.claude-opus-4", expected: "apac.anthropic.claude-opus-4" }, + { + region: "ap-northeast-1", + modelID: "anthropic.claude-sonnet-4-5", + expected: "jp.anthropic.claude-sonnet-4-5", + }, + { region: "ap-northeast-1", modelID: "amazon.nova-pro-v1:0", expected: "jp.amazon.nova-pro-v1:0" }, + { region: "ap-south-1", modelID: "anthropic.claude-sonnet-4-5", expected: "apac.anthropic.claude-sonnet-4-5" }, + { region: "ap-south-1", modelID: "amazon.nova-lite-v1:0", expected: "apac.amazon.nova-lite-v1:0" }, + { region: "ca-central-1", modelID: "anthropic.claude-sonnet-4-5", expected: "anthropic.claude-sonnet-4-5" }, + { + region: "us-east-1", + modelID: "global.anthropic.claude-sonnet-4-5", + expected: "global.anthropic.claude-sonnet-4-5", + }, + { region: "us-east-1", modelID: "us.anthropic.claude-sonnet-4-5", expected: "us.anthropic.claude-sonnet-4-5" }, + { region: "eu-west-1", modelID: "eu.anthropic.claude-sonnet-4-5", expected: "eu.anthropic.claude-sonnet-4-5" }, + { + region: "ap-northeast-1", + modelID: "jp.anthropic.claude-sonnet-4-5", + expected: "jp.anthropic.claude-sonnet-4-5", + }, + { + region: "ap-south-1", + modelID: "apac.anthropic.claude-sonnet-4-5", + expected: "apac.anthropic.claude-sonnet-4-5", + }, + { + region: "ap-southeast-2", + modelID: "au.anthropic.claude-sonnet-4-5", + expected: "au.anthropic.claude-sonnet-4-5", + }, + ] + yield* plugin.add(AmazonBedrockPlugin) + for (const item of cases) { + yield* plugin.trigger( + "aisdk.language", + { + model: model("amazon-bedrock", item.modelID), + sdk: { languageModel: fakeSelectorSdk(calls).languageModel }, + options: { region: item.region }, + }, + {}, + ) + } + expect(calls).toEqual(cases.map((item) => `languageModel:${item.expected}`)) + }), + ) + + it.effect("ignores non-Bedrock providers for language selection", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(AmazonBedrockPlugin) + const result = yield* plugin.trigger( + "aisdk.language", + { + model: model("openai", "anthropic.claude-sonnet-4-5"), + sdk: { languageModel: fakeSelectorSdk(calls).languageModel }, + options: { region: "eu-west-1" }, + }, + {}, + ) + expect(calls).toEqual([]) + expect(result.language).toBeUndefined() + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-anthropic.test.ts b/packages/core/test/v2/plugin/provider-anthropic.test.ts new file mode 100644 index 000000000000..bbea4a372151 --- /dev/null +++ b/packages/core/test/v2/plugin/provider-anthropic.test.ts @@ -0,0 +1,91 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { AnthropicPlugin } from "@opencode-ai/core/plugin/provider/anthropic" +import { it, model, provider } from "./provider-helper" + +describe("AnthropicPlugin", () => { + it.effect("applies legacy beta headers", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(AnthropicPlugin) + const result = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("anthropic", { + options: { headers: { Existing: "1" }, body: {}, aisdk: { provider: {}, request: {} } }, + }), + cancel: false, + }, + ) + expect(result.provider.options.headers["anthropic-beta"]).toBe( + "interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14", + ) + expect(result.provider.options.headers.Existing).toBe("1") + }), + ) + + it.effect("ignores non-Anthropic providers", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(AnthropicPlugin) + const result = yield* plugin.trigger("provider.update", {}, { provider: provider("openai"), cancel: false }) + expect(result.provider.options.headers["anthropic-beta"]).toBeUndefined() + }), + ) + + it.effect("creates Anthropic SDKs with the model provider ID as the SDK name", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const providers: string[] = [] + yield* plugin.add(AnthropicPlugin) + yield* plugin.add({ + id: PluginV2.ID.make("anthropic-sdk-inspector"), + effect: Effect.succeed({ + "aisdk.sdk": (evt) => + Effect.sync(() => { + providers.push(evt.sdk.languageModel("claude-sonnet-4-5").provider) + }), + }), + }) + yield* plugin.trigger( + "aisdk.sdk", + { + model: model("custom-anthropic", "claude-sonnet-4-5"), + package: "@ai-sdk/anthropic", + options: { name: "custom-anthropic", apiKey: "test" }, + }, + {}, + ) + expect(providers).toEqual(["custom-anthropic"]) + }), + ) + + it.effect("uses the Anthropic provider ID as the SDK name for the bundled Anthropic provider", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const providers: string[] = [] + yield* plugin.add(AnthropicPlugin) + yield* plugin.add({ + id: PluginV2.ID.make("anthropic-sdk-inspector"), + effect: Effect.succeed({ + "aisdk.sdk": (evt) => + Effect.sync(() => { + providers.push(evt.sdk.languageModel("claude-sonnet-4-5").provider) + }), + }), + }) + yield* plugin.trigger( + "aisdk.sdk", + { + model: model("anthropic", "claude-sonnet-4-5"), + package: "@ai-sdk/anthropic", + options: { name: "anthropic", apiKey: "test" }, + }, + {}, + ) + expect(providers).toEqual(["anthropic"]) + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-azure-cognitive-services.test.ts b/packages/core/test/v2/plugin/provider-azure-cognitive-services.test.ts new file mode 100644 index 000000000000..b835cbeeff09 --- /dev/null +++ b/packages/core/test/v2/plugin/provider-azure-cognitive-services.test.ts @@ -0,0 +1,127 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { AzureCognitiveServicesPlugin } from "@opencode-ai/core/plugin/provider/azure" +import { fakeSelectorSdk, it, model, provider, withEnv } from "./provider-helper" + +describe("AzureCognitiveServicesPlugin", () => { + it.effect("maps the resource env var to the Azure SDK baseURL", () => + withEnv({ AZURE_COGNITIVE_SERVICES_RESOURCE_NAME: "cognitive" }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(AzureCognitiveServicesPlugin) + const result = yield* plugin.trigger( + "provider.update", + {}, + { provider: provider("azure-cognitive-services"), cancel: false }, + ) + expect(result.provider.endpoint).toEqual({ + type: "aisdk", + package: "test-provider", + }) + expect(result.provider.options.aisdk.provider.baseURL).toBe( + "https://cognitive.cognitiveservices.azure.com/openai", + ) + expect(result.provider.options.aisdk.provider.resourceName).toBeUndefined() + }), + ), + ) + + it.effect("leaves baseURL unset without resource env and ignores other providers", () => + withEnv({ AZURE_COGNITIVE_SERVICES_RESOURCE_NAME: undefined }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(AzureCognitiveServicesPlugin) + const azure = yield* plugin.trigger( + "provider.update", + {}, + { provider: provider("azure-cognitive-services"), cancel: false }, + ) + const other = yield* plugin.trigger("provider.update", {}, { provider: provider("openai"), cancel: false }) + expect(azure.provider.options.aisdk.provider.baseURL).toBeUndefined() + expect(azure.provider.endpoint).toEqual({ type: "aisdk", package: "test-provider" }) + expect(other.provider.options.aisdk.provider.baseURL).toBeUndefined() + expect(other.provider.endpoint).toEqual({ type: "aisdk", package: "test-provider" }) + }), + ), + ) + + it.effect("selects chat only for completion URLs", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(AzureCognitiveServicesPlugin) + yield* plugin.trigger( + "aisdk.language", + { + model: model("azure-cognitive-services", "deployment"), + sdk: fakeSelectorSdk(calls), + options: { useCompletionUrls: true }, + }, + {}, + ) + expect(calls).toEqual(["chat:deployment"]) + }), + ) + + it.effect("uses the legacy Azure selector order and provider guard", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(AzureCognitiveServicesPlugin) + yield* plugin.trigger( + "aisdk.language", + { model: model("azure-cognitive-services", "deployment"), sdk: fakeSelectorSdk(calls), options: {} }, + {}, + ) + const ignored = yield* plugin.trigger( + "aisdk.language", + { model: model("openai", "deployment"), sdk: fakeSelectorSdk(calls), options: {} }, + {}, + ) + expect(calls).toEqual(["responses:deployment"]) + expect(ignored.language).toBeUndefined() + }), + ) + + it.effect("falls back from responses to messages, chat, then languageModel", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + const sdk = fakeSelectorSdk(calls) + yield* plugin.add(AzureCognitiveServicesPlugin) + yield* plugin.trigger( + "aisdk.language", + { + model: model("azure-cognitive-services", "messages-deployment"), + sdk: { messages: sdk.messages, chat: sdk.chat, languageModel: sdk.languageModel }, + options: {}, + }, + {}, + ) + yield* plugin.trigger( + "aisdk.language", + { + model: model("azure-cognitive-services", "chat-deployment"), + sdk: { chat: sdk.chat, languageModel: sdk.languageModel }, + options: {}, + }, + {}, + ) + yield* plugin.trigger( + "aisdk.language", + { + model: model("azure-cognitive-services", "language-deployment"), + sdk: { languageModel: sdk.languageModel }, + options: {}, + }, + {}, + ) + expect(calls).toEqual([ + "messages:messages-deployment", + "chat:chat-deployment", + "languageModel:language-deployment", + ]) + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-azure.test.ts b/packages/core/test/v2/plugin/provider-azure.test.ts new file mode 100644 index 000000000000..12d8363e733e --- /dev/null +++ b/packages/core/test/v2/plugin/provider-azure.test.ts @@ -0,0 +1,245 @@ +import { describe, expect } from "bun:test" +import { Effect, Layer } from "effect" +import { AuthV2 } from "@opencode-ai/core/auth" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { AuthPlugin } from "@opencode-ai/core/plugin/auth" +import { AzurePlugin } from "@opencode-ai/core/plugin/provider/azure" +import { testEffect } from "../../lib/effect" +import { fakeSelectorSdk, it, model, npmLayer, provider, withEnv } from "./provider-helper" + +const itWithAuth = testEffect(Layer.mergeAll(PluginV2.defaultLayer, AuthV2.defaultLayer, npmLayer)) + +describe("AzurePlugin", () => { + it.effect("resolves resourceName from env", () => + withEnv({ AZURE_RESOURCE_NAME: "from-env" }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(AzurePlugin) + const result = yield* plugin.trigger("provider.update", {}, { provider: provider("azure"), cancel: false }) + expect(result.provider.options.aisdk.provider.resourceName).toBe("from-env") + }), + ), + ) + + it.effect("keeps explicit resourceName over env and ignores other providers", () => + withEnv({ AZURE_RESOURCE_NAME: "from-env" }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(AzurePlugin) + const azure = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("azure", { + options: { headers: {}, body: {}, aisdk: { provider: { resourceName: "from-config" }, request: {} } }, + }), + cancel: false, + }, + ) + const other = yield* plugin.trigger("provider.update", {}, { provider: provider("openai"), cancel: false }) + expect(azure.provider.options.aisdk.provider.resourceName).toBe("from-config") + expect(other.provider.options.aisdk.provider.resourceName).toBeUndefined() + }), + ), + ) + + itWithAuth.effect("prefers auth resourceName over env", () => + withEnv( + { + AZURE_RESOURCE_NAME: "from-env", + }, + () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const auth = yield* AuthV2.Service + yield* auth.create({ + serviceID: AuthV2.ServiceID.make("azure"), + credential: new AuthV2.ApiKeyCredential({ + type: "api", + key: "key", + metadata: { resourceName: "from-auth" }, + }), + active: true, + }) + yield* plugin.add({ + ...AuthPlugin, + effect: AuthPlugin.effect.pipe(Effect.provideService(AuthV2.Service, auth)), + }) + yield* plugin.add(AzurePlugin) + const result = yield* plugin.trigger("provider.update", {}, { provider: provider("azure"), cancel: false }) + expect(result.provider.options.aisdk.provider.resourceName).toBe("from-auth") + }), + ), + ) + + it.effect("falls back to env when configured resourceName is blank", () => + withEnv({ AZURE_RESOURCE_NAME: "from-env" }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(AzurePlugin) + const result = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("azure", { + options: { headers: {}, body: {}, aisdk: { provider: { resourceName: "" }, request: {} } }, + }), + cancel: false, + }, + ) + expect(result.provider.options.aisdk.provider.resourceName).toBe("from-env") + }), + ), + ) + + it.effect("falls back to env when configured resourceName is whitespace", () => + withEnv({ AZURE_RESOURCE_NAME: "from-env" }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(AzurePlugin) + const result = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("azure", { + options: { headers: {}, body: {}, aisdk: { provider: { resourceName: " " }, request: {} } }, + }), + cancel: false, + }, + ) + expect(result.provider.options.aisdk.provider.resourceName).toBe("from-env") + }), + ), + ) + + it.effect("allows configured baseURL without resourceName", () => + withEnv({ AZURE_RESOURCE_NAME: undefined }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(AzurePlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("azure", "deployment"), + package: "@ai-sdk/azure", + options: { name: "azure", baseURL: "https://proxy.example.com/openai" }, + }, + {}, + ) + expect(result.sdk).toBeDefined() + }), + ), + ) + + it.effect("rejects missing resourceName when baseURL is not configured", () => + withEnv({ AZURE_RESOURCE_NAME: undefined }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(AzurePlugin) + const exit = yield* plugin + .trigger( + "aisdk.sdk", + { model: model("azure", "deployment"), package: "@ai-sdk/azure", options: { name: "azure" } }, + {}, + ) + .pipe(Effect.exit) + expect(exit._tag).toBe("Failure") + }), + ), + ) + + it.effect("selects chat only for completion URLs", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(AzurePlugin) + yield* plugin.trigger( + "aisdk.language", + { model: model("azure", "deployment"), sdk: fakeSelectorSdk(calls), options: { useCompletionUrls: true } }, + {}, + ) + expect(calls).toEqual(["chat:deployment"]) + }), + ) + + it.effect("selects chat from per-call useCompletionUrls", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(AzurePlugin) + yield* plugin.trigger( + "aisdk.language", + { model: model("azure", "deployment"), sdk: fakeSelectorSdk(calls), options: { useCompletionUrls: true } }, + {}, + ) + expect(calls).toEqual(["chat:deployment"]) + }), + ) + + it.effect("ignores model useCompletionUrls when per-call option is unset", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(AzurePlugin) + yield* plugin.trigger( + "aisdk.language", + { + model: model("azure", "deployment", { + options: { headers: {}, body: {}, aisdk: { provider: {}, request: { useCompletionUrls: true } } }, + }), + sdk: fakeSelectorSdk(calls), + options: {}, + }, + {}, + ) + expect(calls).toEqual(["responses:deployment"]) + }), + ) + + it.effect("uses the legacy Azure selector order and provider guard", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(AzurePlugin) + yield* plugin.trigger( + "aisdk.language", + { model: model("azure", "deployment"), sdk: fakeSelectorSdk(calls), options: {} }, + {}, + ) + const ignored = yield* plugin.trigger( + "aisdk.language", + { model: model("openai", "deployment"), sdk: fakeSelectorSdk(calls), options: {} }, + {}, + ) + expect(calls).toEqual(["responses:deployment"]) + expect(ignored.language).toBeUndefined() + }), + ) + + it.effect("falls back through the legacy Azure selector order", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + const make = (method: string) => (id: string) => { + calls.push(`${method}:${id}`) + return { modelId: id, provider: method, specificationVersion: "v3" } + } + yield* plugin.add(AzurePlugin) + yield* plugin.trigger( + "aisdk.language", + { + model: model("azure", "messages-deployment"), + sdk: { messages: make("messages"), chat: make("chat"), languageModel: make("languageModel") }, + options: {}, + }, + {}, + ) + yield* plugin.trigger( + "aisdk.language", + { model: model("azure", "language-deployment"), sdk: { languageModel: make("languageModel") }, options: {} }, + {}, + ) + expect(calls).toEqual(["messages:messages-deployment", "languageModel:language-deployment"]) + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-cerebras.test.ts b/packages/core/test/v2/plugin/provider-cerebras.test.ts new file mode 100644 index 000000000000..7270d5367ae2 --- /dev/null +++ b/packages/core/test/v2/plugin/provider-cerebras.test.ts @@ -0,0 +1,102 @@ +import { describe, expect, mock } from "bun:test" +import { Effect } from "effect" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { CerebrasPlugin } from "@opencode-ai/core/plugin/provider/cerebras" +import { it, model, provider } from "./provider-helper" + +const cerebrasOptions: Record[] = [] + +void mock.module("@ai-sdk/cerebras", () => ({ + createCerebras: (options: Record) => { + const snapshot = { ...options } + cerebrasOptions.push(snapshot) + return { + languageModel: (modelID: string) => ({ modelID, provider: snapshot.name, specificationVersion: "v3" }), + } + }, +})) + +describe("CerebrasPlugin", () => { + it.effect("applies the legacy integration header", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(CerebrasPlugin) + const result = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("cerebras", { + options: { headers: { Existing: "1" }, body: {}, aisdk: { provider: {}, request: {} } }, + }), + cancel: false, + }, + ) + expect(result.provider.options.headers).toEqual({ Existing: "1", "X-Cerebras-3rd-Party-Integration": "opencode" }) + }), + ) + + it.effect("ignores non-Cerebras providers", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(CerebrasPlugin) + const result = yield* plugin.trigger("provider.update", {}, { provider: provider("groq"), cancel: false }) + expect(result.provider.options.headers).toEqual({}) + }), + ) + + it.effect("creates a bundled Cerebras SDK with the model provider ID as the SDK name", () => + Effect.gen(function* () { + cerebrasOptions.length = 0 + const plugin = yield* PluginV2.Service + yield* plugin.add(CerebrasPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("custom-cerebras", "llama-4-scout-17b-16e-instruct"), + package: "@ai-sdk/cerebras", + options: { name: "custom-cerebras", apiKey: "test" }, + }, + {}, + ) + expect(cerebrasOptions).toEqual([{ name: "custom-cerebras", apiKey: "test" }]) + expect(result.sdk.languageModel("llama-4-scout-17b-16e-instruct").provider).toBe("custom-cerebras") + }), + ) + + it.effect("preserves an explicit bundled Cerebras SDK name option", () => + Effect.gen(function* () { + cerebrasOptions.length = 0 + const plugin = yield* PluginV2.Service + yield* plugin.add(CerebrasPlugin) + yield* plugin.trigger( + "aisdk.sdk", + { + model: model("custom-cerebras", "llama-4-scout-17b-16e-instruct"), + package: "@ai-sdk/cerebras", + options: { name: "configured-cerebras", apiKey: "test" }, + }, + {}, + ) + expect(cerebrasOptions).toEqual([{ name: "configured-cerebras", apiKey: "test" }]) + }), + ) + + it.effect("ignores non-Cerebras SDK packages", () => + Effect.gen(function* () { + cerebrasOptions.length = 0 + const plugin = yield* PluginV2.Service + yield* plugin.add(CerebrasPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("custom-cerebras", "llama-4-scout-17b-16e-instruct"), + package: "@ai-sdk/groq", + options: { name: "custom-cerebras", apiKey: "test" }, + }, + {}, + ) + expect(cerebrasOptions).toEqual([]) + expect(result.sdk).toBeUndefined() + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-cloudflare-ai-gateway.test.ts b/packages/core/test/v2/plugin/provider-cloudflare-ai-gateway.test.ts new file mode 100644 index 000000000000..72ad5da33f1a --- /dev/null +++ b/packages/core/test/v2/plugin/provider-cloudflare-ai-gateway.test.ts @@ -0,0 +1,384 @@ +import { describe, expect, mock } from "bun:test" +import { Effect } from "effect" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { CloudflareAIGatewayPlugin } from "@opencode-ai/core/plugin/provider/cloudflare-ai-gateway" +import { it, model, withEnv } from "./provider-helper" + +const aiGatewayCalls: Record[] = [] +const unifiedCalls: string[] = [] +const gatewayModelCalls: unknown[] = [] + +function captureAiGatewayOptions(options: Record) { + const nested = + options.options && typeof options.options === "object" ? (options.options as Record) : undefined + return { + ...options, + ...(nested + ? { + options: { + ...nested, + headers: + nested.headers && typeof nested.headers === "object" + ? { ...(nested.headers as Record) } + : nested.headers, + }, + } + : {}), + } +} + +function resetCalls() { + aiGatewayCalls.length = 0 + unifiedCalls.length = 0 + gatewayModelCalls.length = 0 +} + +function cloudflareEnv(overrides: Record = {}) { + return { + CLOUDFLARE_ACCOUNT_ID: "env-account", + CLOUDFLARE_GATEWAY_ID: "env-gateway", + CLOUDFLARE_API_TOKEN: "env-token", + CF_AIG_TOKEN: undefined, + ...overrides, + } +} + +mock.module("ai-gateway-provider", () => ({ + createAiGateway(options: Record) { + aiGatewayCalls.push(captureAiGatewayOptions(options)) + return (input: unknown) => { + gatewayModelCalls.push(input) + return { + modelId: input, + provider: "cloudflare-ai-gateway", + specificationVersion: "v3", + } + } + }, +})) + +mock.module("ai-gateway-provider/providers/unified", () => ({ + createUnified() { + return (modelID: string) => { + unifiedCalls.push(modelID) + return { unifiedModelID: modelID } + } + }, +})) + +describe("CloudflareAIGatewayPlugin", () => { + it.effect("requires account, gateway, and token before creating the unified SDK", () => + withEnv( + { + CLOUDFLARE_ACCOUNT_ID: "acct", + CLOUDFLARE_GATEWAY_ID: "gateway", + CLOUDFLARE_API_TOKEN: "token", + CF_AIG_TOKEN: undefined, + }, + () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(CloudflareAIGatewayPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("cloudflare-ai-gateway", "openai/gpt-5"), + package: "ai-gateway-provider", + options: { name: "cloudflare-ai-gateway" }, + }, + {}, + ) + expect(result.sdk.languageModel("openai/gpt-5")).toBeDefined() + }), + ), + ) + + it.effect("passes legacy metadata, cache, log, and User-Agent values under the AI Gateway options key", () => + withEnv(cloudflareEnv(), () => + Effect.gen(function* () { + resetCalls() + const plugin = yield* PluginV2.Service + yield* plugin.add(CloudflareAIGatewayPlugin) + + yield* plugin.trigger( + "aisdk.sdk", + { + model: model("cloudflare-ai-gateway", "openai/gpt-5"), + package: "ai-gateway-provider", + options: { + name: "cloudflare-ai-gateway", + metadata: { invoked_by: "test", project: "opencode" }, + cacheTtl: 300, + cacheKey: "cache-key", + skipCache: true, + collectLog: false, + }, + }, + {}, + ) + + expect(aiGatewayCalls).toHaveLength(1) + expect(aiGatewayCalls[0]).toEqual({ + accountId: "env-account", + gateway: "env-gateway", + apiKey: "env-token", + options: { + metadata: { invoked_by: "test", project: "opencode" }, + cacheTtl: 300, + cacheKey: "cache-key", + skipCache: true, + collectLog: false, + headers: { + "User-Agent": expect.stringContaining("opencode/"), + }, + }, + }) + }), + ), + ) + + it.effect("parses legacy cf-aig-metadata header when metadata option is absent", () => + withEnv(cloudflareEnv(), () => + Effect.gen(function* () { + resetCalls() + const plugin = yield* PluginV2.Service + yield* plugin.add(CloudflareAIGatewayPlugin) + + yield* plugin.trigger( + "aisdk.sdk", + { + model: model("cloudflare-ai-gateway", "openai/gpt-5"), + package: "ai-gateway-provider", + options: { + name: "cloudflare-ai-gateway", + headers: { + "cf-aig-metadata": JSON.stringify({ invoked_by: "header", project: "opencode" }), + }, + }, + }, + {}, + ) + + expect(aiGatewayCalls[0]?.options).toMatchObject({ + metadata: { invoked_by: "header", project: "opencode" }, + }) + }), + ), + ) + + it.effect("prefers Cloudflare env values over auth/config-derived options", () => + withEnv(cloudflareEnv(), () => + Effect.gen(function* () { + resetCalls() + const plugin = yield* PluginV2.Service + yield* plugin.add(CloudflareAIGatewayPlugin) + + yield* plugin.trigger( + "aisdk.sdk", + { + model: model("cloudflare-ai-gateway", "openai/gpt-5"), + package: "ai-gateway-provider", + options: { + name: "cloudflare-ai-gateway", + accountId: "auth-account", + gateway: "auth-gateway", + apiKey: "auth-token", + }, + }, + {}, + ) + + expect(aiGatewayCalls[0]).toMatchObject({ + accountId: "env-account", + gateway: "env-gateway", + apiKey: "env-token", + }) + }), + ), + ) + + it.effect("accepts gatewayId metadata copied from auth into provider options", () => + withEnv( + cloudflareEnv({ + CLOUDFLARE_ACCOUNT_ID: undefined, + CLOUDFLARE_GATEWAY_ID: undefined, + CLOUDFLARE_API_TOKEN: undefined, + }), + () => + Effect.gen(function* () { + resetCalls() + const plugin = yield* PluginV2.Service + yield* plugin.add(CloudflareAIGatewayPlugin) + + yield* plugin.trigger( + "aisdk.sdk", + { + model: model("cloudflare-ai-gateway", "openai/gpt-5"), + package: "ai-gateway-provider", + options: { + name: "cloudflare-ai-gateway", + accountId: "auth-account", + gatewayId: "auth-gateway", + apiKey: "auth-token", + }, + }, + {}, + ) + + expect(aiGatewayCalls[0]).toMatchObject({ + accountId: "auth-account", + gateway: "auth-gateway", + apiKey: "auth-token", + }) + }), + ), + ) + + it.effect("falls back to CF_AIG_TOKEN when CLOUDFLARE_API_TOKEN is unset", () => + withEnv(cloudflareEnv({ CLOUDFLARE_API_TOKEN: undefined, CF_AIG_TOKEN: "cf-aig-token" }), () => + Effect.gen(function* () { + resetCalls() + const plugin = yield* PluginV2.Service + yield* plugin.add(CloudflareAIGatewayPlugin) + + yield* plugin.trigger( + "aisdk.sdk", + { + model: model("cloudflare-ai-gateway", "openai/gpt-5"), + package: "ai-gateway-provider", + options: { name: "cloudflare-ai-gateway" }, + }, + {}, + ) + + expect(aiGatewayCalls[0]).toMatchObject({ apiKey: "cf-aig-token" }) + }), + ), + ) + + it.effect("does not create an SDK when account and gateway IDs are missing", () => + withEnv(cloudflareEnv({ CLOUDFLARE_ACCOUNT_ID: undefined, CLOUDFLARE_GATEWAY_ID: undefined }), () => + Effect.gen(function* () { + resetCalls() + const plugin = yield* PluginV2.Service + yield* plugin.add(CloudflareAIGatewayPlugin) + + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("cloudflare-ai-gateway", "openai/gpt-5"), + package: "ai-gateway-provider", + options: { name: "cloudflare-ai-gateway" }, + }, + {}, + ) + + expect(result.sdk).toBeUndefined() + expect(aiGatewayCalls).toHaveLength(0) + }), + ), + ) + + it.effect("does not create an SDK when the token is missing", () => + withEnv(cloudflareEnv({ CLOUDFLARE_API_TOKEN: undefined, CF_AIG_TOKEN: undefined }), () => + Effect.gen(function* () { + resetCalls() + const plugin = yield* PluginV2.Service + yield* plugin.add(CloudflareAIGatewayPlugin) + + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("cloudflare-ai-gateway", "openai/gpt-5"), + package: "ai-gateway-provider", + options: { name: "cloudflare-ai-gateway" }, + }, + {}, + ) + + expect(result.sdk).toBeUndefined() + expect(aiGatewayCalls).toHaveLength(0) + }), + ), + ) + + it.effect("does not replace a configured baseURL with the Cloudflare AI Gateway SDK", () => + withEnv( + cloudflareEnv({ + CLOUDFLARE_ACCOUNT_ID: undefined, + CLOUDFLARE_GATEWAY_ID: undefined, + CLOUDFLARE_API_TOKEN: undefined, + }), + () => + Effect.gen(function* () { + resetCalls() + const plugin = yield* PluginV2.Service + yield* plugin.add(CloudflareAIGatewayPlugin) + + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("cloudflare-ai-gateway", "openai/gpt-5"), + package: "ai-gateway-provider", + options: { name: "cloudflare-ai-gateway", baseURL: "https://proxy.example/v1" }, + }, + {}, + ) + + expect(result.sdk).toBeUndefined() + expect(aiGatewayCalls).toHaveLength(0) + }), + ), + ) + + it.effect("maps provider/model IDs through the unified Cloudflare provider unchanged", () => + withEnv(cloudflareEnv(), () => + Effect.gen(function* () { + resetCalls() + const plugin = yield* PluginV2.Service + yield* plugin.add(CloudflareAIGatewayPlugin) + + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("cloudflare-ai-gateway", "anthropic/claude-sonnet-4-5"), + package: "ai-gateway-provider", + options: { name: "cloudflare-ai-gateway" }, + }, + {}, + ) + + expect(result.sdk.languageModel("anthropic/claude-sonnet-4-5")).toEqual({ + modelId: { unifiedModelID: "anthropic/claude-sonnet-4-5" }, + provider: "cloudflare-ai-gateway", + specificationVersion: "v3", + }) + expect(unifiedCalls).toEqual(["anthropic/claude-sonnet-4-5"]) + expect(gatewayModelCalls).toEqual([{ unifiedModelID: "anthropic/claude-sonnet-4-5" }]) + }), + ), + ) + + it.effect("ignores non Cloudflare AI Gateway packages", () => + withEnv(cloudflareEnv(), () => + Effect.gen(function* () { + resetCalls() + const plugin = yield* PluginV2.Service + yield* plugin.add(CloudflareAIGatewayPlugin) + + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("cloudflare-ai-gateway", "openai/gpt-5"), + package: "@ai-sdk/openai-compatible", + options: { name: "cloudflare-ai-gateway" }, + }, + {}, + ) + + expect(result.sdk).toBeUndefined() + expect(aiGatewayCalls).toHaveLength(0) + }), + ), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-cloudflare-workers-ai.test.ts b/packages/core/test/v2/plugin/provider-cloudflare-workers-ai.test.ts new file mode 100644 index 000000000000..3aed2a17b8bf --- /dev/null +++ b/packages/core/test/v2/plugin/provider-cloudflare-workers-ai.test.ts @@ -0,0 +1,267 @@ +import { describe, expect } from "bun:test" +import { Effect, Layer } from "effect" +import { AuthV2 } from "@opencode-ai/core/auth" +import { ModelV2 } from "@opencode-ai/core/model" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { AuthPlugin } from "@opencode-ai/core/plugin/auth" +import { CloudflareWorkersAIPlugin } from "@opencode-ai/core/plugin/provider/cloudflare-workers-ai" +import { testEffect } from "../../lib/effect" +import { fakeSelectorSdk, it, model, npmLayer, provider, withEnv } from "./provider-helper" + +const itWithAuth = testEffect(Layer.mergeAll(PluginV2.defaultLayer, AuthV2.defaultLayer, npmLayer)) + +function cloudflareLanguage(sdk: unknown, modelID = "@cf/model") { + return (sdk as { languageModel: (id: string) => { config: CloudflareConfig; provider: string } }).languageModel( + modelID, + ) +} + +type CloudflareConfig = { + url: (input: { path: string; modelId: string }) => string + headers: () => Record | Promise> +} + +function cloudflareURL(sdk: unknown, modelID = "@cf/model") { + return cloudflareLanguage(sdk, modelID).config.url({ path: "/chat/completions", modelId: modelID }) +} + +function cloudflareHeaders(sdk: unknown, modelID = "@cf/model") { + return cloudflareLanguage(sdk, modelID).config.headers() +} + +describe("CloudflareWorkersAIPlugin", () => { + it.effect("maps account ID to endpoint URL and creates an OpenAI-compatible SDK", () => + withEnv({ CLOUDFLARE_ACCOUNT_ID: "acct", CLOUDFLARE_API_KEY: "key" }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(CloudflareWorkersAIPlugin) + const updated = yield* plugin.trigger( + "provider.update", + {}, + { provider: provider("cloudflare-workers-ai"), cancel: false }, + ) + const sdk = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("cloudflare-workers-ai", "@cf/model", { endpoint: updated.provider.endpoint }), + package: "@ai-sdk/openai-compatible", + options: { name: "cloudflare-workers-ai", headers: { custom: "header" } }, + }, + {}, + ) + expect(updated.provider.endpoint).toEqual({ + type: "aisdk", + package: "test-provider", + url: "https://api.cloudflare.com/client/v4/accounts/acct/ai/v1", + }) + expect(sdk.sdk).toBeDefined() + }), + ), + ) + + it.effect("preserves a configured endpoint URL instead of deriving one from account ID", () => + withEnv({ CLOUDFLARE_ACCOUNT_ID: "acct" }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(CloudflareWorkersAIPlugin) + const result = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("cloudflare-workers-ai", { + endpoint: { type: "aisdk", package: "test-provider", url: "https://proxy.example/v1" }, + }), + cancel: false, + }, + ) + expect(result.provider.endpoint).toEqual({ + type: "aisdk", + package: "test-provider", + url: "https://proxy.example/v1", + }) + }), + ), + ) + + it.effect("allows a configured baseURL without account ID", () => + withEnv({ CLOUDFLARE_ACCOUNT_ID: undefined, CLOUDFLARE_API_KEY: "key" }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(CloudflareWorkersAIPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("cloudflare-workers-ai", "@cf/model", { + endpoint: { type: "aisdk", package: "@ai-sdk/openai-compatible", url: "https://proxy.example/v1" }, + }), + package: "@ai-sdk/openai-compatible", + options: { name: "cloudflare-workers-ai", baseURL: "https://proxy.example/v1" }, + }, + {}, + ) + expect(cloudflareURL(result.sdk)).toBe("https://proxy.example/v1/chat/completions") + }), + ), + ) + + itWithAuth.effect("falls back to auth account metadata when account env is absent", () => + withEnv( + { + CLOUDFLARE_ACCOUNT_ID: undefined, + CLOUDFLARE_API_KEY: undefined, + }, + () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const auth = yield* AuthV2.Service + yield* auth.create({ + serviceID: AuthV2.ServiceID.make("cloudflare-workers-ai"), + credential: new AuthV2.ApiKeyCredential({ + type: "api", + key: "auth-key", + metadata: { accountId: "auth-acct" }, + }), + active: true, + }) + yield* plugin.add({ + ...AuthPlugin, + effect: AuthPlugin.effect.pipe(Effect.provideService(AuthV2.Service, auth)), + }) + yield* plugin.add(CloudflareWorkersAIPlugin) + const updated = yield* plugin.trigger( + "provider.update", + {}, + { provider: provider("cloudflare-workers-ai"), cancel: false }, + ) + expect(updated.provider.endpoint).toEqual({ + type: "aisdk", + package: "test-provider", + url: "https://api.cloudflare.com/client/v4/accounts/auth-acct/ai/v1", + }) + }), + ), + ) + + it.effect("uses env account ID over configured account ID", () => + withEnv({ CLOUDFLARE_ACCOUNT_ID: "env-acct" }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(CloudflareWorkersAIPlugin) + const result = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("cloudflare-workers-ai", { + options: { headers: {}, body: {}, aisdk: { provider: { accountId: "configured-acct" }, request: {} } }, + }), + cancel: false, + }, + ) + expect(result.provider.endpoint).toEqual({ + type: "aisdk", + package: "test-provider", + url: "https://api.cloudflare.com/client/v4/accounts/env-acct/ai/v1", + }) + }), + ), + ) + + it.effect("uses env API key over auth or configured API key and keeps the Cloudflare User-Agent", () => + withEnv({ CLOUDFLARE_ACCOUNT_ID: "acct", CLOUDFLARE_API_KEY: "env-key" }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(CloudflareWorkersAIPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("cloudflare-workers-ai", "@cf/model", { + endpoint: { type: "aisdk", package: "@ai-sdk/openai-compatible", url: "https://proxy.example/v1" }, + }), + package: "@ai-sdk/openai-compatible", + options: { + name: "cloudflare-workers-ai", + apiKey: "auth-key", + baseURL: "https://proxy.example/v1", + headers: { custom: "header" }, + }, + }, + {}, + ) + const headers = yield* Effect.promise(() => Promise.resolve(cloudflareHeaders(result.sdk))) + expect(headers.authorization).toBe("Bearer env-key") + expect(headers.custom).toBe("header") + expect(headers["user-agent"]).toMatch(/^opencode\/.* cloudflare-workers-ai \(.+\) ai-sdk\/openai-compatible\//) + }), + ), + ) + + it.effect("expands account ID vars in endpoint URLs", () => + withEnv({ CLOUDFLARE_ACCOUNT_ID: "acct", CLOUDFLARE_API_KEY: "key" }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(CloudflareWorkersAIPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("cloudflare-workers-ai", "@cf/model", { + endpoint: { + type: "aisdk", + package: "@ai-sdk/openai-compatible", + url: "https://api.cloudflare.com/client/v4/accounts/${CLOUDFLARE_ACCOUNT_ID}/ai/v1", + }, + }), + package: "@ai-sdk/openai-compatible", + options: { + name: "cloudflare-workers-ai", + baseURL: "https://api.cloudflare.com/client/v4/accounts/${CLOUDFLARE_ACCOUNT_ID}/ai/v1", + }, + }, + {}, + ) + expect(cloudflareURL(result.sdk)).toBe( + "https://api.cloudflare.com/client/v4/accounts/acct/ai/v1/chat/completions", + ) + }), + ), + ) + + it.effect("selects languageModel with the API model ID", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(CloudflareWorkersAIPlugin) + const result = yield* plugin.trigger( + "aisdk.language", + { + model: model("cloudflare-workers-ai", "alias", { apiID: ModelV2.ID.make("@cf/api-model") }), + sdk: fakeSelectorSdk(calls), + options: {}, + }, + {}, + ) + expect(result.language).toBeDefined() + expect(calls).toEqual(["languageModel:@cf/api-model"]) + }), + ) + + it.effect("does not create an SDK for non OpenAI-compatible packages", () => + withEnv({ CLOUDFLARE_ACCOUNT_ID: "acct", CLOUDFLARE_API_KEY: "key" }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(CloudflareWorkersAIPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("cloudflare-workers-ai", "@cf/model", { + endpoint: { type: "aisdk", package: "@ai-sdk/anthropic", url: "https://proxy.example/v1" }, + }), + package: "@ai-sdk/anthropic", + options: { name: "cloudflare-workers-ai" }, + }, + {}, + ) + expect(result.sdk).toBeUndefined() + }), + ), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-cohere.test.ts b/packages/core/test/v2/plugin/provider-cohere.test.ts new file mode 100644 index 000000000000..54bec2cec45d --- /dev/null +++ b/packages/core/test/v2/plugin/provider-cohere.test.ts @@ -0,0 +1,86 @@ +import { describe, expect, mock } from "bun:test" +import { Effect } from "effect" +import { ModelV2 } from "@opencode-ai/core/model" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { CoherePlugin } from "@opencode-ai/core/plugin/provider/cohere" +import { fakeSelectorSdk, it, model } from "./provider-helper" + +const cohereOptions: Record[] = [] + +void mock.module("@ai-sdk/cohere", () => ({ + createCohere: (options: Record) => { + cohereOptions.push({ ...options }) + return { + languageModel: (modelID: string) => ({ + modelID, + provider: `${options.name ?? "cohere"}.chat`, + specificationVersion: "v3", + }), + } + }, +})) + +describe("CoherePlugin", () => { + it.effect("creates a Cohere SDK only for @ai-sdk/cohere", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(CoherePlugin) + + const ignored = yield* plugin.trigger( + "aisdk.sdk", + { model: model("cohere", "command"), package: "@ai-sdk/openai-compatible", options: { name: "cohere" } }, + {}, + ) + expect(ignored.sdk).toBeUndefined() + + const result = yield* plugin.trigger( + "aisdk.sdk", + { model: model("cohere", "command"), package: "@ai-sdk/cohere", options: { name: "cohere" } }, + {}, + ) + expect(result.sdk).toBeDefined() + }), + ) + + it.effect("uses the model provider ID as the bundled SDK name", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(CoherePlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("custom-cohere", "command-r-plus"), + package: "@ai-sdk/cohere", + options: { name: "custom-cohere", apiKey: "test", baseURL: "https://cohere.example" }, + }, + {}, + ) + + expect(cohereOptions.at(-1)).toEqual({ + name: "custom-cohere", + apiKey: "test", + baseURL: "https://cohere.example", + }) + expect(result.sdk?.languageModel("command-r-plus").provider).toBe("custom-cohere.chat") + }), + ) + + it.effect("leaves language selection to the default languageModel fallback", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + const sdk = fakeSelectorSdk(calls) + yield* plugin.add(CoherePlugin) + const result = yield* plugin.trigger( + "aisdk.language", + { model: model("cohere", "alias", { apiID: ModelV2.ID.make("command-r-plus") }), sdk, options: {} }, + {}, + ) + + expect(result.language).toBeUndefined() + expect(calls).toEqual([]) + expect(result.language ?? sdk.languageModel("command-r-plus")).toBeDefined() + expect(calls).toEqual(["languageModel:command-r-plus"]) + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-deepinfra.test.ts b/packages/core/test/v2/plugin/provider-deepinfra.test.ts new file mode 100644 index 000000000000..1195b8c1842e --- /dev/null +++ b/packages/core/test/v2/plugin/provider-deepinfra.test.ts @@ -0,0 +1,129 @@ +import { describe, expect, mock } from "bun:test" +import { Effect, Layer } from "effect" +import { AISDK } from "@opencode-ai/core/aisdk" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { DeepInfraPlugin } from "@opencode-ai/core/plugin/provider/deepinfra" +import { testEffect } from "../../lib/effect" +import { it, model } from "./provider-helper" + +const itAISDK = testEffect(Layer.provideMerge(AISDK.layer, PluginV2.defaultLayer)) +const deepinfraOptions: Record[] = [] +const deepinfraLanguageModels: string[] = [] + +void mock.module("@ai-sdk/deepinfra", () => ({ + createDeepInfra: (options: Record) => { + const captured = { ...options } + deepinfraOptions.push(captured) + return { + languageModel: (modelID: string) => { + deepinfraLanguageModels.push(modelID) + return { modelID, provider: `${captured.name ?? "deepinfra"}.chat`, specificationVersion: "v3" } + }, + } + }, +})) + +function resetDeepInfraMock() { + deepinfraOptions.length = 0 + deepinfraLanguageModels.length = 0 +} + +describe("DeepInfraPlugin", () => { + it.effect("creates a DeepInfra SDK for @ai-sdk/deepinfra", () => + Effect.gen(function* () { + resetDeepInfraMock() + const plugin = yield* PluginV2.Service + yield* plugin.add(DeepInfraPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { model: model("deepinfra", "model"), package: "@ai-sdk/deepinfra", options: { name: "deepinfra" } }, + {}, + ) + expect(result.sdk).toBeDefined() + }), + ) + + it.effect("passes the model provider ID as the bundled DeepInfra SDK name", () => + Effect.gen(function* () { + resetDeepInfraMock() + const plugin = yield* PluginV2.Service + yield* plugin.add(DeepInfraPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("custom-deepinfra", "model"), + package: "@ai-sdk/deepinfra", + options: { name: "custom-deepinfra", apiKey: "test" }, + }, + {}, + ) + expect(result.sdk.languageModel("model").provider).toBe("custom-deepinfra.chat") + expect(deepinfraOptions).toEqual([{ name: "custom-deepinfra", apiKey: "test" }]) + }), + ) + + it.effect("uses the canonical provider ID as the bundled DeepInfra SDK name", () => + Effect.gen(function* () { + resetDeepInfraMock() + const plugin = yield* PluginV2.Service + yield* plugin.add(DeepInfraPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("deepinfra", "model"), + package: "@ai-sdk/deepinfra", + options: { name: "deepinfra", apiKey: "test" }, + }, + {}, + ) + expect(result.sdk.languageModel("model").provider).toBe("deepinfra.chat") + expect(deepinfraOptions).toEqual([{ name: "deepinfra", apiKey: "test" }]) + }), + ) + + it.effect("matches only the exact bundled DeepInfra package", () => + Effect.gen(function* () { + resetDeepInfraMock() + const plugin = yield* PluginV2.Service + yield* plugin.add(DeepInfraPlugin) + const packages = [ + "unmatched-package", + "@ai-sdk/deepinfra-compatible", + "file:///tmp/@ai-sdk/deepinfra-provider.js", + ] + yield* Effect.forEach(packages, (item) => + Effect.gen(function* () { + const ignored = yield* plugin.trigger( + "aisdk.sdk", + { model: model("deepinfra", "model"), package: item, options: { name: "deepinfra" } }, + {}, + ) + expect(ignored.sdk).toBeUndefined() + }), + ) + const result = yield* plugin.trigger( + "aisdk.sdk", + { model: model("deepinfra", "model"), package: "@ai-sdk/deepinfra", options: { name: "deepinfra" } }, + {}, + ) + expect(result.sdk).toBeDefined() + expect(deepinfraOptions).toEqual([{ name: "deepinfra" }]) + }), + ) + + itAISDK.effect("uses the default languageModel selection for DeepInfra models", () => + Effect.gen(function* () { + resetDeepInfraMock() + const plugin = yield* PluginV2.Service + const aisdk = yield* AISDK.Service + yield* plugin.add(DeepInfraPlugin) + const language = yield* aisdk.language( + model("deepinfra", "meta-llama/Llama-3.3-70B-Instruct", { + endpoint: { type: "aisdk", package: "@ai-sdk/deepinfra" }, + }), + ) + expect(language.provider).toBe("deepinfra.chat") + expect(deepinfraLanguageModels).toEqual(["meta-llama/Llama-3.3-70B-Instruct"]) + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-dynamic.test.ts b/packages/core/test/v2/plugin/provider-dynamic.test.ts new file mode 100644 index 000000000000..cca331b11061 --- /dev/null +++ b/packages/core/test/v2/plugin/provider-dynamic.test.ts @@ -0,0 +1,172 @@ +import { Npm } from "@opencode-ai/core/npm" +import { describe, expect } from "bun:test" +import { Cause, Effect, Layer, Option } from "effect" +import fs from "fs/promises" +import os from "os" +import path from "path" +import { fileURLToPath } from "url" +import { AISDK } from "@opencode-ai/core/aisdk" +import { ModelV2 } from "@opencode-ai/core/model" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { DynamicProviderPlugin } from "@opencode-ai/core/plugin/provider/dynamic" +import { testEffect } from "../../lib/effect" +import { fixtureProvider, it, model, npmLayer } from "./provider-helper" + +const fixtureProviderPath = fileURLToPath(fixtureProvider) +const itWithAISDK = testEffect(AISDK.layer.pipe(Layer.provideMerge(PluginV2.defaultLayer))) + +function npmEntrypointLayer(entrypoint: Option.Option) { + return Layer.succeed( + Npm.Service, + Npm.Service.of({ + add: () => Effect.succeed({ directory: "", entrypoint }), + install: () => Effect.void, + which: () => Effect.succeed(Option.none()), + }), + ) +} + +function dynamicPlugin(layer = npmLayer) { + return { id: DynamicProviderPlugin.id, effect: DynamicProviderPlugin.effect.pipe(Effect.provide(layer)) } +} + +function tempEntrypoint(source: string) { + return Effect.acquireRelease( + Effect.promise(async () => { + const directory = await fs.mkdtemp(path.join(os.tmpdir(), "opencode-provider-dynamic-")) + const entrypoint = path.join(directory, "provider.mjs") + await Bun.write(entrypoint, source) + return { directory, entrypoint } + }), + (tmp) => Effect.promise(() => fs.rm(tmp.directory, { recursive: true, force: true })), + ) +} + +describe("DynamicProviderPlugin", () => { + it.effect("creates an SDK from a provider factory export", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(dynamicPlugin()) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("custom", "test-model"), + package: fixtureProvider, + options: { name: "custom", marker: "dynamic" }, + }, + {}, + ) + expect(result.sdk.options).toEqual({ marker: "dynamic", name: "custom" }) + expect(result.sdk.languageModel("x")).toEqual({ modelID: "x", options: { marker: "dynamic", name: "custom" } }) + }), + ) + + it.effect("does not override an SDK already supplied by an earlier plugin", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const sdk = { marker: "existing" } + yield* plugin.add(dynamicPlugin()) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("custom", "test-model"), + package: fixtureProvider, + options: { name: "custom", marker: "dynamic" }, + }, + { sdk }, + ) + expect(result.sdk).toBe(sdk) + }), + ) + + it.effect("injects the provider ID as the SDK factory name", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(dynamicPlugin()) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("custom-provider", "test-model"), + package: fixtureProvider, + options: { name: "custom-provider", marker: "dynamic" }, + }, + {}, + ) + expect(result.sdk.options).toEqual({ marker: "dynamic", name: "custom-provider" }) + }), + ) + + it.effect("loads npm packages through their resolved import entrypoint", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(dynamicPlugin(npmEntrypointLayer(Option.some(fixtureProviderPath)))) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("npm-provider", "test-model"), + package: "fixture-provider", + options: { name: "npm-provider", marker: "npm" }, + }, + {}, + ) + expect(result.sdk.languageModel("x")).toEqual({ modelID: "x", options: { marker: "npm", name: "npm-provider" } }) + }), + ) + + itWithAISDK.effect("wraps missing npm entrypoint failures as AISDK init errors", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const aisdk = yield* AISDK.Service + yield* plugin.add(dynamicPlugin(npmEntrypointLayer(Option.none()))) + const exit = yield* aisdk + .language(model("missing-entrypoint", "alias", { endpoint: { type: "aisdk", package: "fixture-provider" } })) + .pipe(Effect.exit) + expect(exit._tag).toBe("Failure") + if (exit._tag === "Failure") expect(Cause.prettyErrors(exit.cause).join("\n")).toContain("AISDK.InitError") + }), + ) + + itWithAISDK.effect("wraps dynamic import failures as AISDK init errors", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const aisdk = yield* AISDK.Service + yield* plugin.add(dynamicPlugin()) + const exit = yield* aisdk + .language( + model("bad-import", "alias", { endpoint: { type: "aisdk", package: "file:///missing/provider-factory.js" } }), + ) + .pipe(Effect.exit) + expect(exit._tag).toBe("Failure") + if (exit._tag === "Failure") expect(Cause.prettyErrors(exit.cause).join("\n")).toContain("AISDK.InitError") + }), + ) + + itWithAISDK.live("wraps missing provider factory exports as AISDK init errors", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const aisdk = yield* AISDK.Service + const tmp = yield* tempEntrypoint("export const notAProviderFactory = true\n") + yield* plugin.add(dynamicPlugin(npmEntrypointLayer(Option.some(tmp.entrypoint)))) + const exit = yield* aisdk + .language(model("missing-factory", "alias", { endpoint: { type: "aisdk", package: "fixture-provider" } })) + .pipe(Effect.exit) + expect(exit._tag).toBe("Failure") + if (exit._tag === "Failure") expect(Cause.prettyErrors(exit.cause).join("\n")).toContain("AISDK.InitError") + }), + ) + + itWithAISDK.effect("uses the model apiID for the default language model", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const aisdk = yield* AISDK.Service + yield* plugin.add(dynamicPlugin()) + const language = yield* aisdk.language( + model("custom", "alias", { + apiID: ModelV2.ID.make("test-model-api"), + endpoint: { type: "aisdk", package: fixtureProvider }, + }), + ) + expect(language).toMatchObject({ modelID: "test-model-api", options: { name: "custom" } }) + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-gitlab.test.ts b/packages/core/test/v2/plugin/provider-gitlab.test.ts new file mode 100644 index 000000000000..0b71310e0fb7 --- /dev/null +++ b/packages/core/test/v2/plugin/provider-gitlab.test.ts @@ -0,0 +1,346 @@ +import { describe, expect, mock } from "bun:test" +import { Effect, Layer } from "effect" +import { AuthV2 } from "@opencode-ai/core/auth" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { AuthPlugin } from "@opencode-ai/core/plugin/auth" +import { GitLabPlugin } from "@opencode-ai/core/plugin/provider/gitlab" +import { testEffect } from "../../lib/effect" +import { it, model, npmLayer, provider, withEnv } from "./provider-helper" + +const gitlabSDKOptions: Record[] = [] + +void mock.module("gitlab-ai-provider", () => ({ + VERSION: "test-version", + createGitLab: (options: Record) => { + gitlabSDKOptions.push(options) + return { + agenticChat: (id: string, options: unknown) => ({ id, options, type: "agentic" }), + workflowChat: (id: string, options: unknown) => ({ id, options, type: "workflow" }), + } + }, + discoverWorkflowModels: async () => ({ models: [], project: undefined }), + isWorkflowModel: (id: string) => id === "duo-workflow" || id === "duo-workflow-exact", +})) + +const itWithAuth = testEffect(Layer.mergeAll(PluginV2.defaultLayer, AuthV2.defaultLayer, npmLayer)) + +describe("GitLabPlugin", () => { + it.effect("creates SDKs with legacy default instance URL, token env, headers, and feature flags", () => + withEnv( + { + GITLAB_INSTANCE_URL: undefined, + GITLAB_TOKEN: "env-token", + }, + () => + Effect.gen(function* () { + gitlabSDKOptions.length = 0 + const plugin = yield* PluginV2.Service + yield* plugin.add(GitLabPlugin) + yield* plugin.trigger( + "aisdk.sdk", + { model: model("gitlab", "claude"), package: "gitlab-ai-provider", options: { name: "gitlab" } }, + {}, + ) + expect(gitlabSDKOptions).toHaveLength(1) + expect(gitlabSDKOptions[0].instanceUrl).toBe("https://gitlab.com") + expect(gitlabSDKOptions[0].apiKey).toBe("env-token") + expect(gitlabSDKOptions[0].aiGatewayHeaders).toMatchObject({ + "anthropic-beta": "context-1m-2025-08-07", + }) + expect(String((gitlabSDKOptions[0].aiGatewayHeaders as Record)["User-Agent"])).toContain( + "gitlab-ai-provider/test-version", + ) + expect(gitlabSDKOptions[0].featureFlags).toEqual({ + duo_agent_platform_agentic_chat: true, + duo_agent_platform: true, + }) + }), + ), + ) + + it.effect("uses GITLAB_INSTANCE_URL when instanceUrl is not configured", () => + withEnv( + { + GITLAB_INSTANCE_URL: "https://env.gitlab.example", + GITLAB_TOKEN: undefined, + }, + () => + Effect.gen(function* () { + gitlabSDKOptions.length = 0 + const plugin = yield* PluginV2.Service + yield* plugin.add(GitLabPlugin) + yield* plugin.trigger( + "aisdk.sdk", + { model: model("gitlab", "claude"), package: "gitlab-ai-provider", options: { name: "gitlab" } }, + {}, + ) + expect(gitlabSDKOptions[0].instanceUrl).toBe("https://env.gitlab.example") + }), + ), + ) + + it.effect("keeps configured instance URL, apiKey, aiGatewayHeaders, and featureFlags over env/defaults", () => + withEnv( + { + GITLAB_INSTANCE_URL: "https://env.gitlab.example", + GITLAB_TOKEN: "env-token", + }, + () => + Effect.gen(function* () { + gitlabSDKOptions.length = 0 + const plugin = yield* PluginV2.Service + yield* plugin.add(GitLabPlugin) + yield* plugin.trigger( + "aisdk.sdk", + { + model: model("gitlab", "claude"), + package: "gitlab-ai-provider", + options: { + name: "gitlab", + instanceUrl: "https://configured.gitlab.example", + apiKey: "configured-token", + aiGatewayHeaders: { + "anthropic-beta": "configured-beta", + "x-gitlab-test": "1", + }, + featureFlags: { + duo_agent_platform: false, + custom_flag: true, + }, + }, + }, + {}, + ) + expect(gitlabSDKOptions[0].instanceUrl).toBe("https://configured.gitlab.example") + expect(gitlabSDKOptions[0].apiKey).toBe("configured-token") + expect(gitlabSDKOptions[0].aiGatewayHeaders).toMatchObject({ + "anthropic-beta": "configured-beta", + "x-gitlab-test": "1", + }) + expect(gitlabSDKOptions[0].featureFlags).toEqual({ + duo_agent_platform_agentic_chat: true, + duo_agent_platform: false, + custom_flag: true, + }) + }), + ), + ) + + it.effect("ignores non-GitLab SDK packages", () => + Effect.gen(function* () { + gitlabSDKOptions.length = 0 + const plugin = yield* PluginV2.Service + yield* plugin.add(GitLabPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { model: model("gitlab", "claude"), package: "@ai-sdk/openai", options: { name: "gitlab" } }, + {}, + ) + expect(result.sdk).toBeUndefined() + expect(gitlabSDKOptions).toHaveLength(0) + }), + ) + + itWithAuth.effect("uses active API auth token over GITLAB_TOKEN", () => + withEnv( + { + GITLAB_TOKEN: "env-token", + }, + () => + Effect.gen(function* () { + gitlabSDKOptions.length = 0 + const plugin = yield* PluginV2.Service + const auth = yield* AuthV2.Service + yield* auth.create({ + serviceID: AuthV2.ServiceID.make("gitlab"), + credential: new AuthV2.ApiKeyCredential({ type: "api", key: "auth-token" }), + active: true, + }) + yield* plugin.add({ + ...AuthPlugin, + effect: AuthPlugin.effect.pipe(Effect.provideService(AuthV2.Service, auth)), + }) + yield* plugin.add(GitLabPlugin) + const updated = yield* plugin.trigger("provider.update", {}, { provider: provider("gitlab"), cancel: false }) + yield* plugin.trigger( + "aisdk.sdk", + { + model: model("gitlab", "claude"), + package: "gitlab-ai-provider", + options: updated.provider.options.aisdk.provider, + }, + {}, + ) + expect(gitlabSDKOptions[0].apiKey).toBe("auth-token") + }), + ), + ) + + itWithAuth.effect("uses active OAuth access token when no API auth exists", () => + withEnv( + { + GITLAB_TOKEN: undefined, + }, + () => + Effect.gen(function* () { + gitlabSDKOptions.length = 0 + const plugin = yield* PluginV2.Service + const auth = yield* AuthV2.Service + yield* auth.create({ + serviceID: AuthV2.ServiceID.make("gitlab"), + credential: new AuthV2.OAuthCredential({ + type: "oauth", + refresh: "refresh-token", + access: "oauth-token", + expires: 9999999999999, + }), + active: true, + }) + yield* plugin.add({ + ...AuthPlugin, + effect: AuthPlugin.effect.pipe(Effect.provideService(AuthV2.Service, auth)), + }) + yield* plugin.add(GitLabPlugin) + const updated = yield* plugin.trigger("provider.update", {}, { provider: provider("gitlab"), cancel: false }) + yield* plugin.trigger( + "aisdk.sdk", + { + model: model("gitlab", "claude"), + package: "gitlab-ai-provider", + options: updated.provider.options.aisdk.provider, + }, + {}, + ) + expect(gitlabSDKOptions[0].apiKey).toBe("oauth-token") + }), + ), + ) + + it.effect("uses workflowChat for duo workflow models and preserves selectedModelRef", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: [string, unknown][] = [] + yield* plugin.add(GitLabPlugin) + const result = yield* plugin.trigger( + "aisdk.language", + { + model: model("gitlab", "duo-workflow-custom", { + options: { + headers: {}, + body: {}, + aisdk: { provider: {}, request: { workflowRef: "ref", workflowDefinition: "definition" } }, + }, + }), + sdk: { + workflowChat: (id: string, options: unknown) => { + calls.push([id, options]) + return { id, options } + }, + agenticChat: () => undefined, + }, + options: { featureFlags: { configured: true } }, + }, + {}, + ) + expect(calls).toEqual([ + ["duo-workflow", { featureFlags: { configured: true }, workflowDefinition: "definition" }], + ]) + expect(result.language as unknown).toEqual({ + id: "duo-workflow", + options: calls[0]?.[1], + selectedModelRef: "ref", + }) + }), + ) + + it.effect("uses exact static workflow model ids when the provider recognizes them", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: [string, unknown][] = [] + yield* plugin.add(GitLabPlugin) + const result = yield* plugin.trigger( + "aisdk.language", + { + model: model("gitlab", "duo-workflow-exact"), + sdk: { + workflowChat: (id: string, options: unknown) => { + calls.push([id, options]) + return { id, options } + }, + agenticChat: () => undefined, + }, + options: { featureFlags: { configured: true } }, + }, + {}, + ) + expect(calls).toEqual([ + ["duo-workflow-exact", { featureFlags: { configured: true }, workflowDefinition: undefined }], + ]) + expect(result.language as unknown).toEqual({ id: "duo-workflow-exact", options: calls[0]?.[1] }) + }), + ) + + it.effect("uses provider feature flags instead of request feature flags", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: [string, unknown][] = [] + yield* plugin.add(GitLabPlugin) + yield* plugin.trigger( + "aisdk.language", + { + model: model("gitlab", "duo-workflow-custom", { + options: { + headers: {}, + body: {}, + aisdk: { provider: {}, request: { featureFlags: { request_flag: true } } }, + }, + }), + sdk: { + workflowChat: (id: string, options: unknown) => { + calls.push([id, options]) + return { id, options } + }, + agenticChat: () => undefined, + }, + options: { featureFlags: { configured: true } }, + }, + {}, + ) + expect(calls).toEqual([["duo-workflow", { featureFlags: { configured: true }, workflowDefinition: undefined }]]) + }), + ) + + it.effect("uses agenticChat with provider aiGatewayHeaders and feature flags for normal models", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: [string, unknown][] = [] + yield* plugin.add(GitLabPlugin) + yield* plugin.trigger( + "aisdk.language", + { + model: model("gitlab", "claude", { + options: { headers: { h: "v" }, body: {}, aisdk: { provider: {}, request: {} } }, + }), + sdk: { + workflowChat: () => undefined, + agenticChat: (id: string, options: unknown) => { + const selected = options as { + aiGatewayHeaders?: Record + featureFlags?: Record + } + calls.push([ + id, + { aiGatewayHeaders: { ...selected.aiGatewayHeaders }, featureFlags: { ...selected.featureFlags } }, + ]) + }, + }, + options: { aiGatewayHeaders: { fallback: "header" }, featureFlags: { duo_agent_platform: true } }, + }, + {}, + ) + expect(calls).toEqual([ + ["claude", { aiGatewayHeaders: { fallback: "header" }, featureFlags: { duo_agent_platform: true } }], + ]) + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-google-vertex-anthropic.test.ts b/packages/core/test/v2/plugin/provider-google-vertex-anthropic.test.ts new file mode 100644 index 000000000000..6bcece53c959 --- /dev/null +++ b/packages/core/test/v2/plugin/provider-google-vertex-anthropic.test.ts @@ -0,0 +1,147 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { GoogleVertexAnthropicPlugin } from "@opencode-ai/core/plugin/provider/google-vertex" +import { fakeSelectorSdk, it, model, provider, withEnv } from "./provider-helper" + +describe("GoogleVertexAnthropicPlugin", () => { + it.effect("resolves legacy project and location env on provider update", () => + withEnv( + { + GOOGLE_CLOUD_PROJECT: "cloud-project", + GCP_PROJECT: "gcp-project", + GCLOUD_PROJECT: "gcloud-project", + GOOGLE_CLOUD_LOCATION: "cloud-location", + VERTEX_LOCATION: "vertex-location", + GOOGLE_VERTEX_LOCATION: "google-vertex-location", + }, + () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(GoogleVertexAnthropicPlugin) + const result = yield* plugin.trigger( + "provider.update", + {}, + { provider: provider("google-vertex-anthropic"), cancel: false }, + ) + expect(result.provider.options.aisdk.provider.project).toBe("cloud-project") + expect(result.provider.options.aisdk.provider.location).toBe("cloud-location") + }), + ), + ) + + it.effect("keeps configured project and location over env fallback", () => + withEnv({ GOOGLE_CLOUD_PROJECT: "env-project", GOOGLE_CLOUD_LOCATION: "env-location" }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(GoogleVertexAnthropicPlugin) + const result = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("google-vertex-anthropic", { + options: { + headers: {}, + body: {}, + aisdk: { provider: { project: "configured-project", location: "configured-location" }, request: {} }, + }, + }), + cancel: false, + }, + ) + expect(result.provider.options.aisdk.provider.project).toBe("configured-project") + expect(result.provider.options.aisdk.provider.location).toBe("configured-location") + }), + ), + ) + + it.effect("creates SDKs from legacy env fallback and default location", () => + withEnv( + { + GOOGLE_CLOUD_PROJECT: undefined, + GCP_PROJECT: "gcp-project", + GCLOUD_PROJECT: "gcloud-project", + GOOGLE_CLOUD_LOCATION: undefined, + VERTEX_LOCATION: undefined, + GOOGLE_VERTEX_LOCATION: "ignored-location", + }, + () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(GoogleVertexAnthropicPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("google-vertex-anthropic", "claude-sonnet-4-5"), + package: "@ai-sdk/google-vertex/anthropic", + options: { name: "google-vertex-anthropic" }, + }, + {}, + ) + expect(result.sdk.languageModel("claude-sonnet-4-5").config.baseURL).toBe( + "https://aiplatform.googleapis.com/v1/projects/gcp-project/locations/global/publishers/anthropic/models", + ) + }), + ), + ) + + it.effect("uses GOOGLE_CLOUD_LOCATION before VERTEX_LOCATION when creating SDKs", () => + withEnv( + { GOOGLE_CLOUD_PROJECT: "project", GOOGLE_CLOUD_LOCATION: "cloud-location", VERTEX_LOCATION: "vertex-location" }, + () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(GoogleVertexAnthropicPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("google-vertex-anthropic", "claude-sonnet-4-5"), + package: "@ai-sdk/google-vertex/anthropic", + options: { name: "google-vertex-anthropic" }, + }, + {}, + ) + expect(result.sdk.languageModel("claude-sonnet-4-5").config.baseURL).toBe( + "https://cloud-location-aiplatform.googleapis.com/v1/projects/project/locations/cloud-location/publishers/anthropic/models", + ) + }), + ), + ) + + it.effect("trims model IDs before selecting language models", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(GoogleVertexAnthropicPlugin) + yield* plugin.trigger( + "aisdk.language", + { + model: model("google-vertex-anthropic", " claude-sonnet-4-5 "), + sdk: { languageModel: fakeSelectorSdk(calls).languageModel }, + options: {}, + }, + {}, + ) + expect(calls).toEqual(["languageModel:claude-sonnet-4-5"]) + }), + ) + + it.effect("ignores non Vertex Anthropic providers for language selection", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(GoogleVertexAnthropicPlugin) + const result = yield* plugin.trigger( + "aisdk.language", + { + model: model("google-vertex", "claude-sonnet-4-5"), + sdk: { languageModel: fakeSelectorSdk(calls).languageModel }, + options: {}, + }, + {}, + ) + expect(calls).toEqual([]) + expect(result.language).toBeUndefined() + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-google-vertex.test.ts b/packages/core/test/v2/plugin/provider-google-vertex.test.ts new file mode 100644 index 000000000000..3bd60fd72119 --- /dev/null +++ b/packages/core/test/v2/plugin/provider-google-vertex.test.ts @@ -0,0 +1,300 @@ +import { describe, expect, mock } from "bun:test" +import { Effect } from "effect" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { GoogleVertexPlugin } from "@opencode-ai/core/plugin/provider/google-vertex" +import { fakeSelectorSdk, it, model, provider, withEnv } from "./provider-helper" + +const vertexOptions: Record[] = [] + +void mock.module("@ai-sdk/google-vertex", () => ({ + createVertex: (options: Record) => { + vertexOptions.push(options) + return { + languageModel: (modelID: string) => ({ modelID, provider: "google-vertex", specificationVersion: "v3" }), + } + }, +})) + +void mock.module("google-auth-library", () => ({ + GoogleAuth: class { + async getApplicationDefault() { + return { + credential: { + async getAccessToken() { + return { token: "vertex-token" } + }, + }, + } + } + }, +})) + +describe("GoogleVertexPlugin", () => { + it.effect("resolves project and location from env using legacy precedence", () => + withEnv( + { + GOOGLE_CLOUD_PROJECT: "google-cloud-project", + GCP_PROJECT: "gcp-project", + GCLOUD_PROJECT: "gcloud-project", + GOOGLE_VERTEX_LOCATION: "google-vertex-location", + GOOGLE_CLOUD_LOCATION: "google-cloud-location", + VERTEX_LOCATION: "vertex-location", + }, + () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(GoogleVertexPlugin) + const result = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("google-vertex", { + endpoint: { + type: "aisdk", + package: "@ai-sdk/openai-compatible", + url: "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}", + }, + }), + cancel: false, + }, + ) + expect(result.provider.options.aisdk.provider.project).toBe("google-cloud-project") + expect(result.provider.options.aisdk.provider.location).toBe("google-vertex-location") + expect(result.provider.endpoint).toEqual({ + type: "aisdk", + package: "@ai-sdk/openai-compatible", + url: "https://google-vertex-location-aiplatform.googleapis.com/v1/projects/google-cloud-project/locations/google-vertex-location", + }) + }), + ), + ) + + it.effect("resolves the advertised GOOGLE_VERTEX_PROJECT env for provider updates and SDKs", () => + withEnv( + { + GOOGLE_VERTEX_PROJECT: "vertex-project", + GOOGLE_CLOUD_PROJECT: undefined, + GCP_PROJECT: undefined, + GCLOUD_PROJECT: undefined, + GOOGLE_VERTEX_LOCATION: "europe-west4", + GOOGLE_CLOUD_LOCATION: undefined, + VERTEX_LOCATION: undefined, + }, + () => + Effect.gen(function* () { + vertexOptions.length = 0 + const plugin = yield* PluginV2.Service + yield* plugin.add(GoogleVertexPlugin) + const updated = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("google-vertex", { + endpoint: { + type: "aisdk", + package: "@ai-sdk/openai-compatible", + url: "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}", + }, + }), + cancel: false, + }, + ) + yield* plugin.trigger( + "aisdk.sdk", + { + model: model("google-vertex", "gemini", { + endpoint: { type: "aisdk", package: "@ai-sdk/google-vertex" }, + }), + package: "@ai-sdk/google-vertex", + options: { name: "google-vertex" }, + }, + {}, + ) + + expect(updated.provider.options.aisdk.provider.project).toBe("vertex-project") + expect(updated.provider.endpoint).toEqual({ + type: "aisdk", + package: "@ai-sdk/openai-compatible", + url: "https://europe-west4-aiplatform.googleapis.com/v1/projects/vertex-project/locations/europe-west4", + }) + expect(vertexOptions[0].project).toBe("vertex-project") + expect(vertexOptions[0].location).toBe("europe-west4") + }), + ), + ) + + it.effect("keeps configured project and location over env and uses global endpoint", () => + withEnv( + { + GOOGLE_CLOUD_PROJECT: "env-project", + GCP_PROJECT: "env-gcp-project", + GCLOUD_PROJECT: "env-gcloud-project", + GOOGLE_VERTEX_LOCATION: "env-location", + GOOGLE_CLOUD_LOCATION: "env-google-cloud-location", + VERTEX_LOCATION: "env-vertex-location", + }, + () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(GoogleVertexPlugin) + const result = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("google-vertex", { + endpoint: { + type: "aisdk", + package: "@ai-sdk/openai-compatible", + url: "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}", + }, + options: { + headers: {}, + body: {}, + aisdk: { provider: { project: "config-project", location: "global" }, request: {} }, + }, + }), + cancel: false, + }, + ) + expect(result.provider.options.aisdk.provider.project).toBe("config-project") + expect(result.provider.options.aisdk.provider.location).toBe("global") + expect(result.provider.endpoint).toEqual({ + type: "aisdk", + package: "@ai-sdk/openai-compatible", + url: "https://aiplatform.googleapis.com/v1/projects/config-project/locations/global", + }) + }), + ), + ) + + it.effect("defaults location to us-central1 when only project is configured", () => + withEnv( + { + GOOGLE_CLOUD_PROJECT: undefined, + GCP_PROJECT: undefined, + GCLOUD_PROJECT: undefined, + GOOGLE_VERTEX_LOCATION: undefined, + GOOGLE_CLOUD_LOCATION: undefined, + VERTEX_LOCATION: undefined, + }, + () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(GoogleVertexPlugin) + const result = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("google-vertex", { + options: { headers: {}, body: {}, aisdk: { provider: { project: "config-project" }, request: {} } }, + }), + cancel: false, + }, + ) + expect(result.provider.options.aisdk.provider.project).toBe("config-project") + expect(result.provider.options.aisdk.provider.location).toBe("us-central1") + }), + ), + ) + + it.effect("does not pass Google auth fetch to the native Vertex SDK", () => + withEnv( + { + GOOGLE_CLOUD_PROJECT: "env-project", + GOOGLE_VERTEX_LOCATION: "env-location", + }, + () => + Effect.gen(function* () { + vertexOptions.length = 0 + const plugin = yield* PluginV2.Service + yield* plugin.add(GoogleVertexPlugin) + yield* plugin.trigger( + "aisdk.sdk", + { + model: model("google-vertex", "gemini", { + endpoint: { type: "aisdk", package: "@ai-sdk/google-vertex" }, + }), + package: "@ai-sdk/google-vertex", + options: { name: "google-vertex" }, + }, + {}, + ) + expect(vertexOptions).toHaveLength(1) + expect(vertexOptions[0].project).toBe("env-project") + expect(vertexOptions[0].location).toBe("env-location") + expect(vertexOptions[0].fetch).toBeUndefined() + }), + ), + ) + + it.effect("keeps Google auth fetch for OpenAI-compatible Vertex endpoints", () => + Effect.gen(function* () { + const fetchCalls: { input: Parameters[0]; init?: RequestInit }[] = [] + const plugin = yield* PluginV2.Service + yield* plugin.add(GoogleVertexPlugin) + yield* plugin.add({ + id: PluginV2.ID.make("capture-openai-compatible"), + effect: Effect.succeed({ + "aisdk.sdk": (evt) => + Effect.promise(async () => { + if (evt.model.providerID !== "google-vertex") return + if (evt.package !== "@ai-sdk/openai-compatible") return + expect(typeof evt.options.fetch).toBe("function") + await evt.options.fetch("https://vertex.example", { + headers: { "x-test": "1" }, + }) + }), + }), + }) + const originalFetch = fetch + ;(globalThis as typeof globalThis & { fetch: typeof fetch }).fetch = (async ( + input: Parameters[0], + init?: RequestInit, + ) => { + fetchCalls.push({ input, init }) + return new Response("ok") + }) as typeof fetch + yield* Effect.acquireUseRelease( + Effect.void, + () => + plugin.trigger( + "aisdk.sdk", + { + model: model("google-vertex", "gemini", { + endpoint: { type: "aisdk", package: "@ai-sdk/openai-compatible" }, + }), + package: "@ai-sdk/openai-compatible", + options: { name: "google-vertex" }, + }, + {}, + ), + () => + Effect.sync(() => { + ;(globalThis as typeof globalThis & { fetch: typeof fetch }).fetch = originalFetch + }), + ) + expect(fetchCalls).toHaveLength(1) + expect(fetchCalls[0].input).toBe("https://vertex.example") + expect(new Headers(fetchCalls[0].init?.headers).get("authorization")).toBe("Bearer vertex-token") + expect(new Headers(fetchCalls[0].init?.headers).get("x-test")).toBe("1") + }), + ) + + it.effect("trims model IDs before selecting language models", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(GoogleVertexPlugin) + yield* plugin.trigger( + "aisdk.language", + { + model: model("google-vertex", " gemini-2.5-pro "), + sdk: { languageModel: fakeSelectorSdk(calls).languageModel }, + options: {}, + }, + {}, + ) + expect(calls).toEqual(["languageModel:gemini-2.5-pro"]) + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-google.test.ts b/packages/core/test/v2/plugin/provider-google.test.ts new file mode 100644 index 000000000000..ee33b980b830 --- /dev/null +++ b/packages/core/test/v2/plugin/provider-google.test.ts @@ -0,0 +1,70 @@ +import { describe, expect } from "bun:test" +import { Effect, Layer } from "effect" +import { AISDK } from "@opencode-ai/core/aisdk" +import { ModelV2 } from "@opencode-ai/core/model" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { GooglePlugin } from "@opencode-ai/core/plugin/provider/google" +import { testEffect } from "../../lib/effect" +import { it, model } from "./provider-helper" + +const itWithAISDK = testEffect(AISDK.layer.pipe(Layer.provideMerge(PluginV2.defaultLayer))) + +describe("GooglePlugin", () => { + it.effect("creates a Google Generative AI SDK for @ai-sdk/google using the provider ID as SDK name", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(GooglePlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("custom-google", "gemini"), + package: "@ai-sdk/google", + options: { name: "custom-google", apiKey: "test" }, + }, + {}, + ) + expect(result.sdk).toBeDefined() + expect(result.sdk?.languageModel("gemini").provider).toBe("custom-google") + }), + ) + + it.effect("ignores non-Google SDK packages", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(GooglePlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { model: model("google", "gemini"), package: "@ai-sdk/google-vertex", options: { name: "google" } }, + {}, + ) + expect(result.sdk).toBeUndefined() + }), + ) + + itWithAISDK.effect("uses default languageModel loading with provider ID parity", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const aisdk = yield* AISDK.Service + yield* plugin.add(GooglePlugin) + const language = yield* aisdk.language( + model("custom-google", "alias", { + apiID: ModelV2.ID.make("gemini-api"), + endpoint: { + type: "aisdk", + package: "@ai-sdk/google", + }, + options: { + headers: {}, + body: {}, + aisdk: { + provider: { apiKey: "test" }, + request: {}, + }, + }, + }), + ) + expect(language.modelId).toBe("gemini-api") + expect(language.provider).toBe("custom-google") + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-groq.test.ts b/packages/core/test/v2/plugin/provider-groq.test.ts new file mode 100644 index 000000000000..14c10b65139f --- /dev/null +++ b/packages/core/test/v2/plugin/provider-groq.test.ts @@ -0,0 +1,101 @@ +import { describe, expect } from "bun:test" +import { createGroq } from "@ai-sdk/groq" +import { Effect, Layer } from "effect" +import { AISDK } from "@opencode-ai/core/aisdk" +import { ModelV2 } from "@opencode-ai/core/model" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { GroqPlugin } from "@opencode-ai/core/plugin/provider/groq" +import { it, model } from "./provider-helper" +import { testEffect } from "../../lib/effect" + +const aisdkIt = testEffect(AISDK.layer.pipe(Layer.provideMerge(PluginV2.defaultLayer))) + +describe("GroqPlugin", () => { + it.effect("creates a Groq SDK for @ai-sdk/groq", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(GroqPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { model: model("groq", "llama"), package: "@ai-sdk/groq", options: { name: "groq" } }, + {}, + ) + expect(result.sdk).toBeDefined() + }), + ) + + it.effect("ignores non-Groq SDK packages", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(GroqPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { model: model("groq", "llama"), package: "@ai-sdk/openai-compatible", options: { name: "groq" } }, + {}, + ) + expect(result.sdk).toBeUndefined() + }), + ) + + it.effect("only matches the bundled @ai-sdk/groq package exactly", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(GroqPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { model: model("groq", "llama"), package: "@ai-sdk/groq/compat", options: { name: "groq" } }, + {}, + ) + expect(result.sdk).toBeUndefined() + }), + ) + + it.effect("matches the old bundled Groq SDK provider naming", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(GroqPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("custom-groq", "llama"), + package: "@ai-sdk/groq", + options: { name: "custom-groq", apiKey: "test" }, + }, + {}, + ) + const expected = createGroq({ name: "custom-groq", apiKey: "test" } as Parameters[0] & { + name: string + }).languageModel("llama") + const actual = result.sdk?.languageModel("llama") + expect(actual?.provider).toBe(expected.provider) + expect(actual?.modelId).toBe(expected.modelId) + }), + ) + + aisdkIt.effect("uses the default languageModel(apiID) behavior", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const aisdk = yield* AISDK.Service + yield* plugin.add(GroqPlugin) + const result = yield* aisdk.language( + model("groq", "alias", { + apiID: ModelV2.ID.make("llama-api"), + endpoint: { + type: "aisdk", + package: "@ai-sdk/groq", + }, + options: { + headers: {}, + body: {}, + aisdk: { + provider: { apiKey: "test" }, + request: {}, + }, + }, + }), + ) + expect(result.modelId).toBe("llama-api") + expect(result.provider).toBe("groq.chat") + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-helper.ts b/packages/core/test/v2/plugin/provider-helper.ts new file mode 100644 index 000000000000..84a3044bfb4d --- /dev/null +++ b/packages/core/test/v2/plugin/provider-helper.ts @@ -0,0 +1,100 @@ +import { Npm } from "@opencode-ai/core/npm" +import type { LanguageModelV3 } from "@ai-sdk/provider" +import { expect } from "bun:test" +import { Effect, Layer, Option } from "effect" +import { ModelV2 } from "@opencode-ai/core/model" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { ProviderV2 } from "@opencode-ai/core/provider" +import { testEffect } from "../../lib/effect" + +export const fixtureProvider = new URL("./fixtures/provider-factory.ts", import.meta.url).href + +export const npmLayer = Layer.succeed( + Npm.Service, + Npm.Service.of({ + add: () => Effect.succeed({ directory: "", entrypoint: Option.none() }), + install: () => Effect.void, + which: () => Effect.succeed(Option.none()), + }), +) + +export const it = testEffect(Layer.mergeAll(PluginV2.defaultLayer, npmLayer)) + +export function provider(providerID: string, options?: Partial) { + return new ProviderV2.Info({ + ...ProviderV2.Info.empty(ProviderV2.ID.make(providerID)), + endpoint: { + type: "aisdk", + package: "test-provider", + }, + ...options, + options: { + headers: {}, + body: {}, + aisdk: { + provider: {}, + request: {}, + }, + ...options?.options, + }, + }) +} + +export function model(providerID: string, modelID: string, options?: Partial) { + return new ModelV2.Info({ + ...ModelV2.Info.empty(ProviderV2.ID.make(providerID), ModelV2.ID.make(modelID)), + apiID: ModelV2.ID.make(modelID), + endpoint: { + type: "aisdk", + package: "test-provider", + }, + ...options, + options: { + headers: {}, + body: {}, + aisdk: { + provider: {}, + request: {}, + }, + ...options?.options, + }, + }) +} + +export function withEnv(vars: Record, fx: () => Effect.Effect) { + return Effect.acquireUseRelease( + Effect.sync(() => { + const previous = Object.fromEntries(Object.keys(vars).map((key) => [key, process.env[key]])) + for (const [key, value] of Object.entries(vars)) { + if (value === undefined) delete process.env[key] + else process.env[key] = value + } + return previous + }), + () => fx(), + (previous) => + Effect.sync(() => { + for (const [key, value] of Object.entries(previous)) { + if (value === undefined) delete process.env[key] + else process.env[key] = value + } + }), + ) +} + +export function fakeSelectorSdk(calls: string[]) { + const make = (method: string) => (id: string) => { + calls.push(`${method}:${id}`) + return { modelId: id, provider: method, specificationVersion: "v3" } as unknown as LanguageModelV3 + } + return { + responses: make("responses"), + messages: make("messages"), + chat: make("chat"), + languageModel: make("languageModel"), + } +} + +export function expectPluginRegistered(ids: string[], id: string) { + expect(ids).toContain(PluginV2.ID.make(id)) +} diff --git a/packages/core/test/v2/plugin/provider-kilo.test.ts b/packages/core/test/v2/plugin/provider-kilo.test.ts new file mode 100644 index 000000000000..4261ae1328f6 --- /dev/null +++ b/packages/core/test/v2/plugin/provider-kilo.test.ts @@ -0,0 +1,90 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { ProviderPlugins } from "@opencode-ai/core/plugin/provider" +import { KiloPlugin } from "@opencode-ai/core/plugin/provider/kilo" +import { expectPluginRegistered, it, provider } from "./provider-helper" + +describe("KiloPlugin", () => { + it.effect("is registered so legacy referer headers can be applied", () => + Effect.sync(() => + expectPluginRegistered( + ProviderPlugins.map((item) => item.id), + "kilo", + ), + ), + ) + + it.effect("applies legacy referer headers only to kilo", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(KiloPlugin) + const result = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("kilo", { + options: { headers: { Existing: "value" }, body: {}, aisdk: { provider: {}, request: {} } }, + }), + cancel: false, + }, + ) + const ignored = yield* plugin.trigger("provider.update", {}, { provider: provider("openrouter"), cancel: false }) + expect(result.provider.options.headers).toEqual({ + Existing: "value", + "HTTP-Referer": "https://opencode.ai/", + "X-Title": "opencode", + }) + expect(ignored.provider.options.headers).toEqual({}) + }), + ) + + it.effect("uses the exact legacy Kilo header casing and set", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(KiloPlugin) + const result = yield* plugin.trigger("provider.update", {}, { provider: provider("kilo"), cancel: false }) + + expect(result.provider.options.headers).toEqual({ + "HTTP-Referer": "https://opencode.ai/", + "X-Title": "opencode", + }) + expect(result.provider.options.headers).not.toHaveProperty("http-referer") + expect(result.provider.options.headers).not.toHaveProperty("x-title") + expect(result.provider.options.headers).not.toHaveProperty("X-Source") + }), + ) + + it.effect("uses the legacy provider-id guard instead of endpoint package matching", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(KiloPlugin) + const matchingID = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("kilo", { + endpoint: { type: "aisdk", package: "not-kilo" }, + }), + cancel: false, + }, + ) + const matchingPackage = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("custom-kilo", { + endpoint: { type: "aisdk", package: "kilo" }, + }), + cancel: false, + }, + ) + + expect(matchingID.provider.options.headers).toEqual({ + "HTTP-Referer": "https://opencode.ai/", + "X-Title": "opencode", + }) + expect(matchingPackage.provider.options.headers).toEqual({}) + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-llmgateway.test.ts b/packages/core/test/v2/plugin/provider-llmgateway.test.ts new file mode 100644 index 000000000000..1ffea96bcbd0 --- /dev/null +++ b/packages/core/test/v2/plugin/provider-llmgateway.test.ts @@ -0,0 +1,63 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { ProviderPlugins } from "@opencode-ai/core/plugin/provider" +import { LLMGatewayPlugin } from "@opencode-ai/core/plugin/provider/llmgateway" +import { expectPluginRegistered, it, provider } from "./provider-helper" + +describe("LLMGatewayPlugin", () => { + it.effect("is registered so legacy referer headers can be applied", () => + Effect.sync(() => + expectPluginRegistered( + ProviderPlugins.map((item) => item.id), + "llmgateway", + ), + ), + ) + + it.effect("applies legacy referer headers only to enabled llmgateway", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(LLMGatewayPlugin) + const result = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("llmgateway", { + enabled: { via: "env", name: "LLMGATEWAY_API_KEY" }, + options: { headers: { Existing: "value" }, body: {}, aisdk: { provider: {}, request: {} } }, + }), + cancel: false, + }, + ) + const ignored = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("openrouter", { + enabled: { via: "env", name: "OPENROUTER_API_KEY" }, + }), + cancel: false, + }, + ) + expect(result.provider.options.headers).toEqual({ + Existing: "value", + "HTTP-Referer": "https://opencode.ai/", + "X-Title": "opencode", + "X-Source": "opencode", + }) + expect(ignored.provider.options.headers).toEqual({}) + }), + ) + + it.effect("does not apply legacy headers to a disabled llmgateway provider", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(LLMGatewayPlugin) + const result = yield* plugin.trigger("provider.update", {}, { provider: provider("llmgateway"), cancel: false }) + + expect(result.provider.enabled).toBe(false) + expect(result.provider.options.headers).toEqual({}) + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-mistral.test.ts b/packages/core/test/v2/plugin/provider-mistral.test.ts new file mode 100644 index 000000000000..f24ff53e5be2 --- /dev/null +++ b/packages/core/test/v2/plugin/provider-mistral.test.ts @@ -0,0 +1,106 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { ModelV2 } from "@opencode-ai/core/model" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { MistralPlugin } from "@opencode-ai/core/plugin/provider/mistral" +import { fakeSelectorSdk, it, model } from "./provider-helper" + +describe("MistralPlugin", () => { + it.effect("creates a Mistral SDK for @ai-sdk/mistral", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(MistralPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { model: model("mistral", "mistral-large"), package: "@ai-sdk/mistral", options: { name: "mistral" } }, + {}, + ) + expect(result.sdk).toBeDefined() + }), + ) + + it.effect("ignores non-Mistral SDK packages", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(MistralPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("mistral", "mistral-large"), + package: "@ai-sdk/openai-compatible", + options: { name: "mistral" }, + }, + {}, + ) + expect(result.sdk).toBeUndefined() + }), + ) + + it.effect("matches the old bundled Mistral SDK provider name for the bundled provider ID", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const providers: string[] = [] + yield* plugin.add(MistralPlugin) + yield* plugin.add({ + id: PluginV2.ID.make("mistral-sdk-inspector"), + effect: Effect.succeed({ + "aisdk.sdk": (evt) => + Effect.sync(() => { + providers.push(evt.sdk.languageModel("mistral-large").provider) + }), + }), + }) + const result = yield* plugin.trigger( + "aisdk.sdk", + { model: model("mistral", "mistral-large"), package: "@ai-sdk/mistral", options: { name: "mistral" } }, + {}, + ) + expect(result.sdk).toBeDefined() + expect(providers).toEqual(["mistral.chat"]) + }), + ) + + it.effect("matches the old bundled Mistral SDK provider name for custom provider IDs", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const providers: string[] = [] + yield* plugin.add(MistralPlugin) + yield* plugin.add({ + id: PluginV2.ID.make("mistral-sdk-inspector"), + effect: Effect.succeed({ + "aisdk.sdk": (evt) => + Effect.sync(() => { + providers.push(evt.sdk.languageModel("mistral-large").provider) + }), + }), + }) + yield* plugin.trigger( + "aisdk.sdk", + { + model: model("custom-mistral", "mistral-large"), + package: "@ai-sdk/mistral", + options: { name: "custom-mistral" }, + }, + {}, + ) + expect(providers).toEqual(["mistral.chat"]) + }), + ) + + it.effect("leaves Mistral language selection on the default sdk.languageModel(apiID) path", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + const sdk = fakeSelectorSdk(calls) + yield* plugin.add(MistralPlugin) + const result = yield* plugin.trigger( + "aisdk.language", + { model: model("mistral", "alias", { apiID: ModelV2.ID.make("mistral-large") }), sdk, options: {} }, + {}, + ) + const language = result.language ?? sdk.languageModel(result.model.apiID) + expect(calls).toEqual(["languageModel:mistral-large"]) + expect(language).toBeDefined() + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-nvidia.test.ts b/packages/core/test/v2/plugin/provider-nvidia.test.ts new file mode 100644 index 000000000000..0e06356cd54f --- /dev/null +++ b/packages/core/test/v2/plugin/provider-nvidia.test.ts @@ -0,0 +1,41 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { ProviderPlugins } from "@opencode-ai/core/plugin/provider" +import { NvidiaPlugin } from "@opencode-ai/core/plugin/provider/nvidia" +import { expectPluginRegistered, it, provider } from "./provider-helper" + +describe("NvidiaPlugin", () => { + it.effect("is registered so legacy referer headers can be applied", () => + Effect.sync(() => + expectPluginRegistered( + ProviderPlugins.map((item) => item.id), + "nvidia", + ), + ), + ) + + it.effect("applies legacy referer headers only to nvidia", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(NvidiaPlugin) + const result = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("nvidia", { + options: { headers: { Existing: "value" }, body: {}, aisdk: { provider: {}, request: {} } }, + }), + cancel: false, + }, + ) + const ignored = yield* plugin.trigger("provider.update", {}, { provider: provider("openrouter"), cancel: false }) + expect(result.provider.options.headers).toEqual({ + Existing: "value", + "HTTP-Referer": "https://opencode.ai/", + "X-Title": "opencode", + }) + expect(ignored.provider.options.headers).toEqual({}) + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-openai-compatible.test.ts b/packages/core/test/v2/plugin/provider-openai-compatible.test.ts new file mode 100644 index 000000000000..e8bf1f7575fc --- /dev/null +++ b/packages/core/test/v2/plugin/provider-openai-compatible.test.ts @@ -0,0 +1,101 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { OpenAICompatiblePlugin } from "@opencode-ai/core/plugin/provider/openai-compatible" +import { it, model } from "./provider-helper" + +describe("OpenAICompatiblePlugin", () => { + it.effect("preserves explicit includeUsage false and defaults it to true", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(OpenAICompatiblePlugin) + const defaulted = yield* plugin.trigger( + "aisdk.sdk", + { model: model("custom", "model"), package: "@ai-sdk/openai-compatible", options: { name: "custom" } }, + {}, + ) + const disabled = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("custom", "model"), + package: "@ai-sdk/openai-compatible", + options: { name: "custom", includeUsage: false }, + }, + {}, + ) + expect(defaulted.options.includeUsage).toBe(true) + expect(disabled.options.includeUsage).toBe(false) + }), + ) + + it.effect("defaults includeUsage for OpenAI-compatible package matches", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(OpenAICompatiblePlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("custom", "model"), + package: "file:///tmp/@ai-sdk/openai-compatible-provider.js", + options: { name: "custom" }, + }, + {}, + ) + expect(result.options.includeUsage).toBe(true) + }), + ) + + it.effect("uses the provider ID as the OpenAI-compatible provider name", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const observed: string[] = [] + yield* plugin.add(OpenAICompatiblePlugin) + yield* plugin.add({ + id: PluginV2.ID.make("inspector"), + effect: Effect.succeed({ + "aisdk.sdk": (evt) => + Effect.sync(() => { + observed.push(evt.sdk.languageModel("model").provider) + }), + }), + }) + yield* plugin.trigger( + "aisdk.sdk", + { + model: model("custom-provider", "model"), + package: "@ai-sdk/openai-compatible", + options: { name: "custom-provider", baseURL: "https://example.com/v1" }, + }, + {}, + ) + expect(observed).toEqual(["custom-provider.chat"]) + }), + ) + + it.effect("does not overwrite an SDK created by an earlier provider-specific plugin", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const sentinel = { languageModel: (modelID: string) => ({ modelID }) } + yield* plugin.add({ + id: PluginV2.ID.make("sentinel"), + effect: Effect.succeed({ + "aisdk.sdk": (evt) => + Effect.sync(() => { + evt.sdk = sentinel + }), + }), + }) + yield* plugin.add(OpenAICompatiblePlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("cloudflare-workers-ai", "model"), + package: "@ai-sdk/openai-compatible", + options: { name: "cloudflare-workers-ai" }, + }, + {}, + ) + expect(result.sdk).toBe(sentinel) + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-openai.test.ts b/packages/core/test/v2/plugin/provider-openai.test.ts new file mode 100644 index 000000000000..31d6dd0b6d11 --- /dev/null +++ b/packages/core/test/v2/plugin/provider-openai.test.ts @@ -0,0 +1,100 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { ModelV2 } from "@opencode-ai/core/model" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { OpenAIPlugin } from "@opencode-ai/core/plugin/provider/openai" +import { fakeSelectorSdk, it, model } from "./provider-helper" + +describe("OpenAIPlugin", () => { + it.effect("creates an OpenAI SDK for @ai-sdk/openai using the provider ID as SDK name", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(OpenAIPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("custom-openai", "gpt-5"), + package: "@ai-sdk/openai", + options: { name: "custom-openai", apiKey: "test" }, + }, + {}, + ) + expect(result.sdk?.responses("gpt-5").provider).toBe("custom-openai.responses") + }), + ) + + it.effect("ignores non-OpenAI SDK packages", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(OpenAIPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { model: model("openai", "gpt-5"), package: "@ai-sdk/openai-compatible", options: { name: "openai" } }, + {}, + ) + expect(result.sdk).toBeUndefined() + }), + ) + + it.effect("uses the Responses API for language models", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(OpenAIPlugin) + const result = yield* plugin.trigger( + "aisdk.language", + { + model: model("openai", "alias", { apiID: ModelV2.ID.make("gpt-5") }), + sdk: fakeSelectorSdk(calls), + options: {}, + }, + {}, + ) + expect(calls).toEqual(["responses:gpt-5"]) + expect(result.language).toBeDefined() + }), + ) + + it.effect("ignores non-OpenAI providers", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(OpenAIPlugin) + const result = yield* plugin.trigger( + "aisdk.language", + { model: model("anthropic", "gpt-5"), sdk: fakeSelectorSdk(calls), options: {} }, + {}, + ) + expect(calls).toEqual([]) + expect(result.language).toBeUndefined() + }), + ) + + it.effect("cancels gpt-5-chat-latest during model updates", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(OpenAIPlugin) + const normal = yield* plugin.trigger("model.update", {}, { model: model("openai", "gpt-5"), cancel: false }) + const filtered = yield* plugin.trigger( + "model.update", + {}, + { model: model("openai", "gpt-5-chat-latest"), cancel: false }, + ) + expect(normal.cancel).toBe(false) + expect(filtered.cancel).toBe(true) + }), + ) + + it.effect("does not cancel gpt-5-chat-latest for non-OpenAI providers", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(OpenAIPlugin) + const result = yield* plugin.trigger( + "model.update", + {}, + { model: model("custom-openai", "gpt-5-chat-latest"), cancel: false }, + ) + expect(result.cancel).toBe(false) + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-opencode.test.ts b/packages/core/test/v2/plugin/provider-opencode.test.ts new file mode 100644 index 000000000000..f080776d4023 --- /dev/null +++ b/packages/core/test/v2/plugin/provider-opencode.test.ts @@ -0,0 +1,195 @@ +import { describe, expect } from "bun:test" +import { DateTime, Effect, Option } from "effect" +import { Catalog } from "@opencode-ai/core/catalog" +import { ModelV2 } from "@opencode-ai/core/model" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { OpencodePlugin } from "@opencode-ai/core/plugin/provider/opencode" +import { ProviderV2 } from "@opencode-ai/core/provider" +import { it, model, provider, withEnv } from "./provider-helper" + +const cost = (input: number, output = 0) => [{ input, output, cache: { read: 0, write: 0 } }] + +describe("OpencodePlugin", () => { + it.effect("uses a public key and cancels paid models without credentials", () => + withEnv({ OPENCODE_API_KEY: undefined }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(OpencodePlugin) + const updated = yield* plugin.trigger("provider.update", {}, { provider: provider("opencode"), cancel: false }) + const paid = yield* plugin.trigger( + "model.update", + {}, + { model: model("opencode", "paid", { cost: cost(1) }), cancel: false }, + ) + expect(updated.provider.options.aisdk.provider.apiKey).toBe("public") + expect(paid.cancel).toBe(true) + }), + ), + ) + + it.effect("keeps free models without credentials", () => + withEnv({ OPENCODE_API_KEY: undefined }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(OpencodePlugin) + yield* plugin.trigger("provider.update", {}, { provider: provider("opencode"), cancel: false }) + const free = yield* plugin.trigger( + "model.update", + {}, + { model: model("opencode", "free", { cost: cost(0) }), cancel: false }, + ) + expect(free.cancel).toBe(false) + }), + ), + ) + + it.effect("treats output-only cost as free without credentials", () => + withEnv({ OPENCODE_API_KEY: undefined }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(OpencodePlugin) + yield* plugin.trigger("provider.update", {}, { provider: provider("opencode"), cancel: false }) + const outputOnly = yield* plugin.trigger( + "model.update", + {}, + { model: model("opencode", "output-only", { cost: cost(0, 1) }), cancel: false }, + ) + expect(outputOnly.cancel).toBe(false) + }), + ), + ) + + it.effect("uses OPENCODE_API_KEY as credentials", () => + withEnv({ OPENCODE_API_KEY: "secret" }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(OpencodePlugin) + const updated = yield* plugin.trigger("provider.update", {}, { provider: provider("opencode"), cancel: false }) + const paid = yield* plugin.trigger( + "model.update", + {}, + { model: model("opencode", "paid", { cost: cost(1) }), cancel: false }, + ) + expect(updated.provider.options.aisdk.provider.apiKey).toBeUndefined() + expect(paid.cancel).toBe(false) + }), + ), + ) + + it.effect("uses configured provider env vars as credentials", () => + withEnv({ OPENCODE_API_KEY: undefined, CUSTOM_OPENCODE_API_KEY: "secret" }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(OpencodePlugin) + const updated = yield* plugin.trigger( + "provider.update", + {}, + { provider: provider("opencode", { env: ["CUSTOM_OPENCODE_API_KEY"] }), cancel: false }, + ) + const paid = yield* plugin.trigger( + "model.update", + {}, + { model: model("opencode", "paid", { cost: cost(1) }), cancel: false }, + ) + expect(updated.provider.options.aisdk.provider.apiKey).toBeUndefined() + expect(paid.cancel).toBe(false) + }), + ), + ) + + it.effect("uses configured apiKey as credentials", () => + withEnv({ OPENCODE_API_KEY: undefined }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(OpencodePlugin) + const updated = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("opencode", { + options: { + headers: {}, + body: {}, + aisdk: { + provider: { apiKey: "configured" }, + request: {}, + }, + }, + }), + cancel: false, + }, + ) + const paid = yield* plugin.trigger( + "model.update", + {}, + { model: model("opencode", "paid", { cost: cost(1) }), cancel: false }, + ) + expect(updated.provider.options.aisdk.provider.apiKey).toBe("configured") + expect(paid.cancel).toBe(false) + }), + ), + ) + + it.effect("uses auth-enabled providers as credentials", () => + withEnv({ OPENCODE_API_KEY: undefined }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(OpencodePlugin) + const updated = yield* plugin.trigger( + "provider.update", + {}, + { provider: provider("opencode", { enabled: { via: "auth", service: "opencode" } }), cancel: false }, + ) + const paid = yield* plugin.trigger( + "model.update", + {}, + { model: model("opencode", "paid", { cost: cost(1) }), cancel: false }, + ) + expect(updated.provider.options.aisdk.provider.apiKey).toBeUndefined() + expect(paid.cancel).toBe(false) + }), + ), + ) + + it.effect("ignores non-opencode providers and models", () => + withEnv({ OPENCODE_API_KEY: undefined }, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(OpencodePlugin) + const updated = yield* plugin.trigger("provider.update", {}, { provider: provider("openai"), cancel: false }) + const paid = yield* plugin.trigger( + "model.update", + {}, + { model: model("openai", "paid", { cost: cost(1) }), cancel: false }, + ) + expect(updated.provider.options.aisdk.provider.apiKey).toBeUndefined() + expect(paid.cancel).toBe(false) + }), + ), + ) + + it.effect("prefers gpt-5-nano as the opencode small model", () => + Effect.gen(function* () { + const catalog = yield* Catalog.Service + const providerID = ProviderV2.ID.opencode + + yield* catalog.provider.update(providerID, () => {}) + yield* catalog.model.update(providerID, ModelV2.ID.make("cheap-mini"), (model) => { + model.capabilities.input = ["text"] + model.capabilities.output = ["text"] + model.cost = cost(1, 1) + model.time.released = DateTime.makeUnsafe(Date.now()) + }) + yield* catalog.model.update(providerID, ModelV2.ID.make("gpt-5-nano"), (model) => { + model.capabilities.input = ["text"] + model.capabilities.output = ["text"] + model.cost = cost(10, 10) + model.time.released = DateTime.makeUnsafe(Date.now()) + }) + + const selected = yield* catalog.model.small(providerID) + + expect(Option.getOrUndefined(selected)?.id).toBe(ModelV2.ID.make("gpt-5-nano")) + }).pipe(Effect.provide(Catalog.defaultLayer)), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-openrouter.test.ts b/packages/core/test/v2/plugin/provider-openrouter.test.ts new file mode 100644 index 000000000000..3d143ac7f2bc --- /dev/null +++ b/packages/core/test/v2/plugin/provider-openrouter.test.ts @@ -0,0 +1,105 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { ProviderPlugins } from "@opencode-ai/core/plugin/provider" +import { OpenRouterPlugin } from "@opencode-ai/core/plugin/provider/openrouter" +import { expectPluginRegistered, it, model, provider } from "./provider-helper" + +describe("OpenRouterPlugin", () => { + it.effect("is registered so legacy OpenRouter behavior can be applied", () => + Effect.sync(() => + expectPluginRegistered( + ProviderPlugins.map((item) => item.id), + "openrouter", + ), + ), + ) + + it.effect("applies legacy referer headers only to openrouter", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(OpenRouterPlugin) + const result = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("openrouter", { + options: { headers: { Existing: "value" }, body: {}, aisdk: { provider: {}, request: {} } }, + }), + cancel: false, + }, + ) + const ignored = yield* plugin.trigger("provider.update", {}, { provider: provider("nvidia"), cancel: false }) + expect(result.provider.options.headers).toEqual({ + Existing: "value", + "HTTP-Referer": "https://opencode.ai/", + "X-Title": "opencode", + }) + expect(ignored.provider.options.headers).toEqual({}) + }), + ) + + it.effect("creates an SDK only for the OpenRouter package", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(OpenRouterPlugin) + + const ignored = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("openrouter", "openai/gpt-5"), + package: "@ai-sdk/openai-compatible", + options: { name: "openrouter" }, + }, + {}, + ) + expect(ignored.sdk).toBeUndefined() + + const result = yield* plugin.trigger( + "aisdk.sdk", + { model: model("custom", "openai/gpt-5"), package: "@openrouter/ai-sdk-provider", options: { name: "custom" } }, + {}, + ) + expect(result.sdk).toBeDefined() + }), + ) + + it.effect("filters OpenRouter's gpt-5 chat alias", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(OpenRouterPlugin) + const result = yield* plugin.trigger( + "model.update", + {}, + { model: model("openrouter", "openai/gpt-5-chat"), cancel: false }, + ) + const regular = yield* plugin.trigger( + "model.update", + {}, + { model: model("openrouter", "openai/gpt-5"), cancel: false }, + ) + const ignored = yield* plugin.trigger( + "model.update", + {}, + { model: model("openai", "openai/gpt-5-chat"), cancel: false }, + ) + + expect(result.cancel).toBe(true) + expect(regular.cancel).toBe(false) + expect(ignored.cancel).toBe(false) + }), + ) + + it.effect("does not filter gpt-5-chat-latest for non-OpenRouter providers", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(OpenRouterPlugin) + const result = yield* plugin.trigger( + "model.update", + {}, + { model: model("custom-openrouter", "gpt-5-chat-latest"), cancel: false }, + ) + expect(result.cancel).toBe(false) + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-perplexity.test.ts b/packages/core/test/v2/plugin/provider-perplexity.test.ts new file mode 100644 index 000000000000..d03f583375d9 --- /dev/null +++ b/packages/core/test/v2/plugin/provider-perplexity.test.ts @@ -0,0 +1,107 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { ModelV2 } from "@opencode-ai/core/model" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { PerplexityPlugin } from "@opencode-ai/core/plugin/provider/perplexity" +import { fakeSelectorSdk, it, model } from "./provider-helper" + +describe("PerplexityPlugin", () => { + it.effect("creates a Perplexity SDK for the exact @ai-sdk/perplexity package", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(PerplexityPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { model: model("perplexity", "sonar"), package: "@ai-sdk/perplexity", options: { name: "perplexity" } }, + {}, + ) + expect(result.sdk).toBeDefined() + }), + ) + + it.effect("ignores packages that are not the bundled Perplexity package", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(PerplexityPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("perplexity", "sonar"), + package: "@ai-sdk/perplexity-compatible", + options: { name: "perplexity" }, + }, + {}, + ) + expect(result.sdk).toBeUndefined() + }), + ) + + it.effect("uses the Perplexity provider ID as the SDK name for the bundled provider", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const providers: string[] = [] + yield* plugin.add(PerplexityPlugin) + yield* plugin.add({ + id: PluginV2.ID.make("perplexity-sdk-inspector"), + effect: Effect.succeed({ + "aisdk.sdk": (evt) => + Effect.sync(() => { + providers.push(evt.sdk.languageModel("sonar").provider) + }), + }), + }) + yield* plugin.trigger( + "aisdk.sdk", + { model: model("perplexity", "sonar"), package: "@ai-sdk/perplexity", options: { name: "perplexity" } }, + {}, + ) + expect(providers).toEqual(["perplexity"]) + }), + ) + + it.effect("creates bundled Perplexity SDKs for custom provider IDs", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const providers: string[] = [] + yield* plugin.add(PerplexityPlugin) + yield* plugin.add({ + id: PluginV2.ID.make("custom-perplexity-sdk-inspector"), + effect: Effect.succeed({ + "aisdk.sdk": (evt) => + Effect.sync(() => { + providers.push(evt.sdk.languageModel("sonar").provider) + }), + }), + }) + yield* plugin.trigger( + "aisdk.sdk", + { + model: model("custom-perplexity", "sonar"), + package: "@ai-sdk/perplexity", + options: { name: "custom-perplexity" }, + }, + {}, + ) + expect(providers).toEqual(["perplexity"]) + }), + ) + + it.effect("leaves Perplexity language selection to the default languageModel fallback", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(PerplexityPlugin) + const result = yield* plugin.trigger( + "aisdk.language", + { + model: model("perplexity", "alias", { apiID: ModelV2.ID.make("sonar") }), + sdk: fakeSelectorSdk(calls), + options: {}, + }, + {}, + ) + expect(calls).toEqual([]) + expect(result.language).toBeUndefined() + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-sap-ai-core.test.ts b/packages/core/test/v2/plugin/provider-sap-ai-core.test.ts new file mode 100644 index 000000000000..565b9280ab95 --- /dev/null +++ b/packages/core/test/v2/plugin/provider-sap-ai-core.test.ts @@ -0,0 +1,127 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { SapAICorePlugin } from "@opencode-ai/core/plugin/provider/sap-ai-core" +import { fixtureProvider, it, model, npmLayer, withEnv } from "./provider-helper" + +const pluginWithNpm = { id: SapAICorePlugin.id, effect: SapAICorePlugin.effect.pipe(Effect.provide(npmLayer)) } + +describe("SapAICorePlugin", () => { + it.effect("copies serviceKey option into AICORE_SERVICE_KEY but keeps SDK options to deployment metadata", () => + withEnv( + { AICORE_SERVICE_KEY: undefined, AICORE_DEPLOYMENT_ID: "deployment", AICORE_RESOURCE_GROUP: "resource-group" }, + () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(pluginWithNpm) + const sdk = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("sap-ai-core", "sap-model"), + package: fixtureProvider, + options: { name: "sap-ai-core", serviceKey: "service-key" }, + }, + {}, + ) + expect(process.env.AICORE_SERVICE_KEY).toBe("service-key") + expect(sdk.sdk.options).toEqual({ deploymentId: "deployment", resourceGroup: "resource-group" }) + }), + ), + ) + + it.effect("preserves existing AICORE_SERVICE_KEY over serviceKey option", () => + withEnv( + { + AICORE_SERVICE_KEY: "env-service-key", + AICORE_DEPLOYMENT_ID: "deployment", + AICORE_RESOURCE_GROUP: "resource-group", + }, + () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(pluginWithNpm) + const sdk = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("sap-ai-core", "sap-model"), + package: fixtureProvider, + options: { name: "sap-ai-core", serviceKey: "option-service-key" }, + }, + {}, + ) + expect(process.env.AICORE_SERVICE_KEY).toBe("env-service-key") + expect(sdk.sdk.options).toEqual({ deploymentId: "deployment", resourceGroup: "resource-group" }) + }), + ), + ) + + it.effect("omits deployment and resourceGroup SDK options when no service key is available", () => + withEnv( + { AICORE_SERVICE_KEY: undefined, AICORE_DEPLOYMENT_ID: "deployment", AICORE_RESOURCE_GROUP: "resource-group" }, + () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(pluginWithNpm) + const sdk = yield* plugin.trigger( + "aisdk.sdk", + { model: model("sap-ai-core", "sap-model"), package: fixtureProvider, options: { name: "sap-ai-core" } }, + {}, + ) + expect(process.env.AICORE_SERVICE_KEY).toBeUndefined() + expect(sdk.sdk.options).toEqual({}) + }), + ), + ) + + it.effect("uses the callable SDK for language selection", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(pluginWithNpm) + const sdk = Object.assign((modelID: string) => ({ modelID, provider: "callable" }), { + languageModel() { + throw new Error("SAP AI Core should call the SDK directly") + }, + }) + const language = yield* plugin.trigger( + "aisdk.language", + { model: model("sap-ai-core", "sap-model"), sdk, options: {} }, + {}, + ) + expect(language.language as unknown).toEqual({ modelID: "sap-model", provider: "callable" }) + }), + ) + + it.effect("ignores non-SAP AI Core providers", () => + withEnv( + { AICORE_SERVICE_KEY: undefined, AICORE_DEPLOYMENT_ID: "deployment", AICORE_RESOURCE_GROUP: "resource-group" }, + () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(pluginWithNpm) + const sdk = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("openai", "sap-model"), + package: fixtureProvider, + options: { name: "openai", serviceKey: "service-key" }, + }, + {}, + ) + const language = yield* plugin.trigger( + "aisdk.language", + { + model: model("openai", "sap-model"), + sdk: () => { + throw new Error("SAP AI Core should ignore other providers") + }, + options: {}, + }, + {}, + ) + expect(process.env.AICORE_SERVICE_KEY).toBeUndefined() + expect(sdk.sdk).toBeUndefined() + expect(language.language).toBeUndefined() + }), + ), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-togetherai.test.ts b/packages/core/test/v2/plugin/provider-togetherai.test.ts new file mode 100644 index 000000000000..65090037bef4 --- /dev/null +++ b/packages/core/test/v2/plugin/provider-togetherai.test.ts @@ -0,0 +1,97 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { TogetherAIPlugin } from "@opencode-ai/core/plugin/provider/togetherai" +import { fakeSelectorSdk, it, model } from "./provider-helper" + +describe("TogetherAIPlugin", () => { + it.effect("creates a TogetherAI SDK for @ai-sdk/togetherai", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(TogetherAIPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { model: model("togetherai", "model"), package: "@ai-sdk/togetherai", options: { name: "togetherai" } }, + {}, + ) + expect(result.sdk).toBeDefined() + }), + ) + + it.effect("matches the old bundled provider package exactly", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(TogetherAIPlugin) + + const ignored = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("togetherai", "model"), + package: "file:///tmp/@ai-sdk/togetherai-provider.js", + options: { name: "togetherai" }, + }, + {}, + ) + expect(ignored.sdk).toBeUndefined() + + const result = yield* plugin.trigger( + "aisdk.sdk", + { model: model("togetherai", "model"), package: "@ai-sdk/togetherai", options: { name: "togetherai" } }, + {}, + ) + expect(result.sdk).toBeDefined() + }), + ) + + it.effect("creates bundled TogetherAI SDKs for custom provider IDs", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const observed: string[] = [] + yield* plugin.add(TogetherAIPlugin) + yield* plugin.add({ + id: PluginV2.ID.make("inspector"), + effect: Effect.succeed({ + "aisdk.sdk": (evt) => + Effect.sync(() => { + observed.push(evt.sdk.languageModel("model").provider) + }), + }), + }) + + yield* plugin.trigger( + "aisdk.sdk", + { + model: model("custom-togetherai", "model"), + package: "@ai-sdk/togetherai", + options: { name: "custom-togetherai" }, + }, + {}, + ) + + expect(observed).toEqual(["togetherai.chat"]) + }), + ) + + it.effect("defaults language selection to sdk.languageModel with the model API ID", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(TogetherAIPlugin) + + const result = yield* plugin.trigger( + "aisdk.language", + { + model: model("togetherai", "meta-llama/Llama-3.3-70B-Instruct-Turbo"), + sdk: { languageModel: fakeSelectorSdk(calls).languageModel }, + options: {}, + }, + {}, + ) + + expect(result.language).toBeUndefined() + expect(calls).toEqual([]) + expect(result.language ?? fakeSelectorSdk(calls).languageModel(result.model.apiID)).toBeDefined() + expect(calls).toEqual(["languageModel:meta-llama/Llama-3.3-70B-Instruct-Turbo"]) + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-venice.test.ts b/packages/core/test/v2/plugin/provider-venice.test.ts new file mode 100644 index 000000000000..ff4a922ab1e1 --- /dev/null +++ b/packages/core/test/v2/plugin/provider-venice.test.ts @@ -0,0 +1,86 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { VenicePlugin } from "@opencode-ai/core/plugin/provider/venice" +import { fakeSelectorSdk, it, model } from "./provider-helper" + +describe("VenicePlugin", () => { + it.effect("creates a Venice SDK for venice-ai-sdk-provider", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(VenicePlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { model: model("venice", "model"), package: "venice-ai-sdk-provider", options: { name: "venice" } }, + {}, + ) + expect(result.sdk).toBeDefined() + }), + ) + + it.effect("uses the model provider ID as the bundled Venice SDK name", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const observed: string[] = [] + yield* plugin.add(VenicePlugin) + yield* plugin.add({ + id: PluginV2.ID.make("inspector"), + effect: Effect.succeed({ + "aisdk.sdk": (evt) => + Effect.sync(() => { + observed.push(evt.sdk.languageModel("model").provider) + }), + }), + }) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("custom-venice", "model"), + package: "venice-ai-sdk-provider", + options: { name: "custom-venice", apiKey: "test" }, + }, + {}, + ) + expect(result.sdk).toBeDefined() + expect(observed).toEqual(["custom-venice.chat"]) + }), + ) + + it.effect("only handles the bundled venice-ai-sdk-provider package", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(VenicePlugin) + const similar = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("venice", "model"), + package: "file:///tmp/venice-ai-sdk-provider.js", + options: { name: "venice" }, + }, + {}, + ) + const other = yield* plugin.trigger( + "aisdk.sdk", + { model: model("venice", "model"), package: "@ai-sdk/openai-compatible", options: { name: "venice" } }, + {}, + ) + expect(similar.sdk).toBeUndefined() + expect(other.sdk).toBeUndefined() + }), + ) + + it.effect("leaves Venice language selection to the default languageModel fallback", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(VenicePlugin) + const result = yield* plugin.trigger( + "aisdk.language", + { model: model("venice", "alias"), sdk: fakeSelectorSdk(calls), options: {} }, + {}, + ) + expect(calls).toEqual([]) + expect(result.language).toBeUndefined() + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-vercel.test.ts b/packages/core/test/v2/plugin/provider-vercel.test.ts new file mode 100644 index 000000000000..3134a7b83c58 --- /dev/null +++ b/packages/core/test/v2/plugin/provider-vercel.test.ts @@ -0,0 +1,62 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { VercelPlugin } from "@opencode-ai/core/plugin/provider/vercel" +import { it, model, provider } from "./provider-helper" + +describe("VercelPlugin", () => { + it.effect("applies legacy lower-case referer headers", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(VercelPlugin) + const result = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("vercel", { + options: { headers: { Existing: "1" }, body: {}, aisdk: { provider: {}, request: {} } }, + }), + cancel: false, + }, + ) + expect(result.provider.options.headers).toEqual({ + Existing: "1", + "http-referer": "https://opencode.ai/", + "x-title": "opencode", + }) + }), + ) + + it.effect("does not add legacy upper-case referer headers", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(VercelPlugin) + const result = yield* plugin.trigger("provider.update", {}, { provider: provider("vercel"), cancel: false }) + expect(result.provider.options.headers).not.toHaveProperty("HTTP-Referer") + expect(result.provider.options.headers).not.toHaveProperty("X-Title") + }), + ) + + it.effect("creates @ai-sdk/vercel SDKs for custom provider IDs", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(VercelPlugin) + const event = yield* plugin.trigger( + "aisdk.sdk", + { model: model("custom-vercel", "v0-1.0-md"), package: "@ai-sdk/vercel", options: { name: "custom-vercel" } }, + {}, + ) + expect(event.sdk).toBeDefined() + expect(event.sdk.languageModel("v0-1.0-md").provider).toBe("vercel.chat") + }), + ) + + it.effect("ignores non-Vercel providers", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(VercelPlugin) + const result = yield* plugin.trigger("provider.update", {}, { provider: provider("gateway"), cancel: false }) + expect(result.provider.options.headers).toEqual({}) + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-xai.test.ts b/packages/core/test/v2/plugin/provider-xai.test.ts new file mode 100644 index 000000000000..bb2828ff4dfd --- /dev/null +++ b/packages/core/test/v2/plugin/provider-xai.test.ts @@ -0,0 +1,115 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { ModelV2 } from "@opencode-ai/core/model" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { XAIPlugin } from "@opencode-ai/core/plugin/provider/xai" +import { ProviderV2 } from "@opencode-ai/core/provider" +import { testEffect } from "../../lib/effect" +import { fakeSelectorSdk } from "./provider-helper" + +const it = testEffect(PluginV2.defaultLayer) + +const model = new ModelV2.Info({ + ...ModelV2.Info.empty(ProviderV2.ID.make("xai"), ModelV2.ID.make("grok-4")), + apiID: ModelV2.ID.make("grok-4"), + endpoint: { + type: "aisdk", + package: "@ai-sdk/xai", + }, +}) + +describe("XAIPlugin", () => { + it.effect("creates an xAI SDK only for @ai-sdk/xai", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(XAIPlugin) + + const ignored = yield* plugin.trigger( + "aisdk.sdk", + { model, package: "@ai-sdk/openai-compatible", options: {} }, + {}, + ) + + const result = yield* plugin.trigger("aisdk.sdk", { model, package: "@ai-sdk/xai", options: {} }, {}) + + expect(ignored.sdk).toBeUndefined() + expect(typeof result.sdk?.responses).toBe("function") + }), + ) + + it.effect("creates xAI SDKs for custom provider IDs", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const providers: string[] = [] + + yield* plugin.add(XAIPlugin) + yield* plugin.add( + PluginV2.define({ + id: PluginV2.ID.make("xai-sdk-name-observer"), + effect: Effect.gen(function* () { + return { + "aisdk.sdk": Effect.fn(function* (evt) { + if (!evt.sdk) return + providers.push(evt.sdk.responses("grok-4").provider) + }), + } + }), + }), + ) + + yield* plugin.trigger( + "aisdk.sdk", + { + model: new ModelV2.Info({ ...model, providerID: ProviderV2.ID.make("custom-xai") }), + package: "@ai-sdk/xai", + options: {}, + }, + {}, + ) + + expect(providers).toEqual(["xai.responses"]) + }), + ) + + it.effect("uses responses with the model apiID for xAI language models", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + + yield* plugin.add(XAIPlugin) + const result = yield* plugin.trigger( + "aisdk.language", + { + model: new ModelV2.Info({ ...model, id: ModelV2.ID.make("alias"), apiID: ModelV2.ID.make("grok-4") }), + sdk: fakeSelectorSdk(calls), + options: {}, + }, + {}, + ) + + expect(calls).toEqual(["responses:grok-4"]) + expect(result.language).toBeDefined() + }), + ) + + it.effect("ignores non-xAI providers", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + + yield* plugin.add(XAIPlugin) + const result = yield* plugin.trigger( + "aisdk.language", + { + model: new ModelV2.Info({ ...model, providerID: ProviderV2.ID.openai }), + sdk: fakeSelectorSdk(calls), + options: {}, + }, + {}, + ) + + expect(calls).toEqual([]) + expect(result.language).toBeUndefined() + }), + ) +}) diff --git a/packages/core/test/v2/plugin/provider-zenmux.test.ts b/packages/core/test/v2/plugin/provider-zenmux.test.ts new file mode 100644 index 000000000000..2b7730e6c752 --- /dev/null +++ b/packages/core/test/v2/plugin/provider-zenmux.test.ts @@ -0,0 +1,103 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { ProviderPlugins } from "@opencode-ai/core/plugin/provider" +import { ZenmuxPlugin } from "@opencode-ai/core/plugin/provider/zenmux" +import { expectPluginRegistered, it, provider } from "./provider-helper" + +describe("ZenmuxPlugin", () => { + it.effect("is registered so legacy referer headers can be applied", () => + Effect.sync(() => + expectPluginRegistered( + ProviderPlugins.map((item) => item.id), + "zenmux", + ), + ), + ) + + it.effect("applies the exact legacy Zenmux headers", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(ZenmuxPlugin) + const result = yield* plugin.trigger("provider.update", {}, { provider: provider("zenmux"), cancel: false }) + expect(result.provider.options.headers).toEqual({ "HTTP-Referer": "https://opencode.ai/", "X-Title": "opencode" }) + expect(Object.keys(result.provider.options.headers).sort()).toEqual(["HTTP-Referer", "X-Title"]) + expect(result.cancel).toBe(false) + }), + ) + + it.effect("merges legacy Zenmux headers with existing headers", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(ZenmuxPlugin) + const result = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("zenmux", { + options: { headers: { Existing: "value" }, body: {}, aisdk: { provider: {}, request: {} } }, + }), + cancel: false, + }, + ) + + expect(result.provider.options.headers).toEqual({ + Existing: "value", + "HTTP-Referer": "https://opencode.ai/", + "X-Title": "opencode", + }) + }), + ) + + it.effect("lets configured Zenmux legacy headers override defaults", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(ZenmuxPlugin) + const result = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("zenmux", { + options: { + headers: { "HTTP-Referer": "https://example.com/", "X-Title": "custom-title" }, + body: {}, + aisdk: { provider: {}, request: {} }, + }, + }), + cancel: false, + }, + ) + + expect(result.provider.options.headers).toEqual({ + "HTTP-Referer": "https://example.com/", + "X-Title": "custom-title", + }) + }), + ) + + it.effect("guards legacy Zenmux headers to the exact zenmux provider id", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(ZenmuxPlugin) + const ignored = yield* plugin.trigger( + "provider.update", + {}, + { + provider: provider("openrouter", { + options: { + headers: { "HTTP-Referer": "https://example.com/", "X-Title": "custom-title" }, + body: {}, + aisdk: { provider: {}, request: {} }, + }, + }), + cancel: false, + }, + ) + + expect(ignored.provider.options.headers).toEqual({ + "HTTP-Referer": "https://example.com/", + "X-Title": "custom-title", + }) + }), + ) +}) diff --git a/packages/opencode/src/cli/cmd/debug/index.ts b/packages/opencode/src/cli/cmd/debug/index.ts index 6e2643f68896..67ea51af6d9b 100644 --- a/packages/opencode/src/cli/cmd/debug/index.ts +++ b/packages/opencode/src/cli/cmd/debug/index.ts @@ -16,6 +16,7 @@ import { SkillCommand } from "./skill" import { SnapshotCommand } from "./snapshot" import { AgentCommand } from "./agent" import { StartupCommand } from "./startup" +import { V2Command } from "./v2" export const DebugCommand = cmd({ command: "debug", @@ -31,6 +32,7 @@ export const DebugCommand = cmd({ .command(SnapshotCommand) .command(StartupCommand) .command(AgentCommand) + .command(V2Command) .command(InfoCommand) .command(PathsCommand) .command(WaitCommand) diff --git a/packages/opencode/src/cli/cmd/debug/v2.ts b/packages/opencode/src/cli/cmd/debug/v2.ts new file mode 100644 index 000000000000..a4e69cc494b8 --- /dev/null +++ b/packages/opencode/src/cli/cmd/debug/v2.ts @@ -0,0 +1,40 @@ +import { EOL } from "os" +import { Effect, Layer, Option } from "effect" +import { Catalog } from "@opencode-ai/core/catalog" +import { effectCmd } from "../../effect-cmd" +import { PluginBoot } from "@/v2/plugin-boot" + +const layer = Catalog.defaultLayer.pipe(Layer.provide(PluginBoot.defaultLayer)) + +export const V2Command = effectCmd({ + command: "v2", + describe: "debug v2 catalog and built-in plugins", + instance: false, + handler: Effect.fn("Cli.debug.v2")(function* () { + const result = yield* Effect.gen(function* () { + const catalog = yield* Catalog.Service + + const providers = (yield* catalog.provider.available()).sort((a, b) => a.id.localeCompare(b.id)) + const all = (yield* catalog.provider.all()).sort((a, b) => a.id.localeCompare(b.id)) + return { + providers, + default: catalog.model + .default() + .pipe(Effect.map(Option.map((item) => item.id)), Effect.map(Option.getOrUndefined)), + small: Object.fromEntries( + yield* Effect.all( + all.map((provider) => + Effect.map( + catalog.model.small(provider.id), + (model) => [provider.id, Option.getOrUndefined(Option.map(model, (item) => item.id))] as const, + ), + ), + { concurrency: "unbounded" }, + ), + ), + } + }).pipe(Effect.provide(layer), Effect.orDie) + + process.stdout.write(JSON.stringify(result, null, 2) + EOL) + }), +}) diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx index b2ee3af622bc..37b9bd3bcef5 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -63,7 +63,6 @@ import { DialogForkFromTimeline } from "./dialog-fork-from-timeline" import { DialogSessionRename } from "../../component/dialog-session-rename" import { Sidebar } from "./sidebar" import { SubagentFooter } from "./subagent-footer.tsx" -import { Flag } from "@opencode-ai/core/flag/flag" import { LANGUAGE_EXTENSIONS } from "@/lsp/language" import parsers from "../../../../../../parsers-config.ts" import * as Clipboard from "../../util/clipboard" @@ -1528,29 +1527,15 @@ function TextPart(props: { last: boolean; part: TextPart; message: AssistantMess return ( - - - - - - - - + ) diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index c27b69b6a208..38ab35908ef8 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -25,7 +25,6 @@ import { InstanceState } from "@/effect/instance-state" import { AppFileSystem } from "@opencode-ai/core/filesystem" import { isRecord } from "@/util/record" import { optionalOmitUndefined, withStatics } from "@opencode-ai/core/schema" - import * as ProviderTransform from "./transform" import { ModelID, ProviderID } from "./schema" import { ModelStatus } from "./model-status" @@ -450,8 +449,14 @@ function custom(dep: CustomDep): Record { }), "google-vertex": Effect.fnUntraced(function* (provider: Info) { const env = yield* dep.env() + // models.dev advertises GOOGLE_VERTEX_PROJECT for Vertex; keep the wider + // Google Cloud project env names as fallbacks for existing ADC setups. const project = - provider.options?.project ?? env["GOOGLE_CLOUD_PROJECT"] ?? env["GCP_PROJECT"] ?? env["GCLOUD_PROJECT"] + provider.options?.project ?? + env["GOOGLE_VERTEX_PROJECT"] ?? + env["GOOGLE_CLOUD_PROJECT"] ?? + env["GCP_PROJECT"] ?? + env["GCLOUD_PROJECT"] const location = String( provider.options?.location ?? @@ -740,6 +745,7 @@ function custom(dep: CustomDep): Record { const auth = yield* dep.auth(input.id) const env = yield* dep.env() const accountId = env["CLOUDFLARE_ACCOUNT_ID"] || (auth?.type === "api" ? auth.metadata?.accountId : undefined) + // The Cloudflare auth prompt stores this value as gatewayId metadata. const gateway = env["CLOUDFLARE_GATEWAY_ID"] || (auth?.type === "api" ? auth.metadata?.gatewayId : undefined) if (!accountId || !gateway) { @@ -1080,11 +1086,7 @@ export function fromModelsDevProvider(provider: ModelsDev.Provider): Info { } } -const layer: Layer.Layer< - Service, - never, - Config.Service | Auth.Service | Plugin.Service | AppFileSystem.Service | Env.Service | ModelsDev.Service -> = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const fs = yield* AppFileSystem.Service @@ -1375,7 +1377,12 @@ const layer: Layer.Layer< for (const [modelID, model] of Object.entries(provider.models)) { model.api.id = model.api.id ?? model.id ?? modelID if ( - modelID === "gpt-5-chat-latest" || + // These chat aliases are invalid for the special handling in the + // built-in providers below, but custom providers may support them. + (modelID === "gpt-5-chat-latest" && + (providerID === ProviderID.openai || + providerID === ProviderID.githubCopilot || + providerID === ProviderID.openrouter)) || (providerID === ProviderID.openrouter && modelID === "openai/gpt-5-chat") ) delete provider.models[modelID] diff --git a/packages/opencode/src/server/routes/instance/httpapi/groups/v2.ts b/packages/opencode/src/server/routes/instance/httpapi/groups/v2.ts index 05da5b720de2..532ccce51d80 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/groups/v2.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/groups/v2.ts @@ -1,10 +1,14 @@ import { HttpApi, OpenApi } from "effect/unstable/httpapi" import { MessageGroup } from "./v2/message" +import { ModelGroup } from "./v2/model" +import { ProviderGroup } from "./v2/provider" import { SessionGroup } from "./v2/session" export const V2Api = HttpApi.make("v2") .add(SessionGroup) .add(MessageGroup) + .add(ModelGroup) + .add(ProviderGroup) .annotateMerge( OpenApi.annotations({ title: "opencode experimental HttpApi", diff --git a/packages/opencode/src/server/routes/instance/httpapi/groups/v2/model.ts b/packages/opencode/src/server/routes/instance/httpapi/groups/v2/model.ts new file mode 100644 index 000000000000..35e7aeb850b3 --- /dev/null +++ b/packages/opencode/src/server/routes/instance/httpapi/groups/v2/model.ts @@ -0,0 +1,24 @@ +import { ModelV2 } from "@opencode-ai/core/model" +import { Schema } from "effect" +import { HttpApiEndpoint, HttpApiGroup, OpenApi } from "effect/unstable/httpapi" +import { Authorization } from "../../middleware/authorization" + +export const ModelGroup = HttpApiGroup.make("v2.model") + .add( + HttpApiEndpoint.get("models", "/api/model", { + success: Schema.Array(ModelV2.Info), + }).annotateMerge( + OpenApi.annotations({ + identifier: "v2.model.list", + summary: "List v2 models", + description: "Retrieve available v2 models ordered by release date.", + }), + ), + ) + .annotateMerge( + OpenApi.annotations({ + title: "v2 models", + description: "Experimental v2 model routes.", + }), + ) + .middleware(Authorization) diff --git a/packages/opencode/src/server/routes/instance/httpapi/groups/v2/provider.ts b/packages/opencode/src/server/routes/instance/httpapi/groups/v2/provider.ts new file mode 100644 index 000000000000..6d9210088662 --- /dev/null +++ b/packages/opencode/src/server/routes/instance/httpapi/groups/v2/provider.ts @@ -0,0 +1,38 @@ +import { ProviderV2 } from "@opencode-ai/core/provider" +import { Schema } from "effect" +import { HttpApiEndpoint, HttpApiGroup, OpenApi } from "effect/unstable/httpapi" +import { ApiNotFoundError } from "../../errors" +import { Authorization } from "../../middleware/authorization" + +export const ProviderGroup = HttpApiGroup.make("v2.provider") + .add( + HttpApiEndpoint.get("providers", "/api/provider", { + success: Schema.Array(ProviderV2.Info), + }).annotateMerge( + OpenApi.annotations({ + identifier: "v2.provider.list", + summary: "List v2 providers", + description: "Retrieve active v2 AI providers so clients can show provider availability and configuration.", + }), + ), + ) + .add( + HttpApiEndpoint.get("provider", "/api/provider/:providerID", { + params: { providerID: ProviderV2.ID }, + success: ProviderV2.Info, + error: ApiNotFoundError, + }).annotateMerge( + OpenApi.annotations({ + identifier: "v2.provider.get", + summary: "Get v2 provider", + description: "Retrieve a single v2 AI provider so clients can inspect its availability and endpoint settings.", + }), + ), + ) + .annotateMerge( + OpenApi.annotations({ + title: "v2 providers", + description: "Experimental v2 provider routes.", + }), + ) + .middleware(Authorization) diff --git a/packages/opencode/src/server/routes/instance/httpapi/groups/v2/session.ts b/packages/opencode/src/server/routes/instance/httpapi/groups/v2/session.ts index 231f1915bb32..3776f5c72a36 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/groups/v2/session.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/groups/v2/session.ts @@ -1,6 +1,6 @@ import { SessionID } from "@/session/schema" import { SessionMessage } from "@/v2/session-message" -import { Prompt } from "@/v2/session-prompt" +import { Prompt } from "@opencode-ai/core/session-prompt" import { SessionV2 } from "@/v2/session" import { Schema } from "effect" import { HttpApiEndpoint, HttpApiError, HttpApiGroup, HttpApiSchema, OpenApi } from "effect/unstable/httpapi" diff --git a/packages/opencode/src/server/routes/instance/httpapi/handlers/v2.ts b/packages/opencode/src/server/routes/instance/httpapi/handlers/v2.ts index 55cb53458172..ca1d397d5915 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/handlers/v2.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/handlers/v2.ts @@ -1,6 +1,14 @@ +import { Catalog } from "@opencode-ai/core/catalog" +import { PluginBoot } from "@/v2/plugin-boot" import { SessionV2 } from "@/v2/session" import { Layer } from "effect" import { messageHandlers } from "./v2/message" +import { modelHandlers } from "./v2/model" +import { providerHandlers } from "./v2/provider" import { sessionHandlers } from "./v2/session" -export const v2Handlers = Layer.mergeAll(sessionHandlers, messageHandlers).pipe(Layer.provide(SessionV2.defaultLayer)) +export const v2Handlers = Layer.mergeAll(sessionHandlers, messageHandlers, modelHandlers, providerHandlers).pipe( + Layer.provide(Catalog.defaultLayer), + Layer.provide(SessionV2.defaultLayer), + Layer.provide(PluginBoot.defaultLayer), +) diff --git a/packages/opencode/src/server/routes/instance/httpapi/handlers/v2/model.ts b/packages/opencode/src/server/routes/instance/httpapi/handlers/v2/model.ts new file mode 100644 index 000000000000..7eb1b310b319 --- /dev/null +++ b/packages/opencode/src/server/routes/instance/httpapi/handlers/v2/model.ts @@ -0,0 +1,12 @@ +import { Catalog } from "@opencode-ai/core/catalog" +import { Effect } from "effect" +import { HttpApiBuilder } from "effect/unstable/httpapi" +import { InstanceHttpApi } from "../../api" + +export const modelHandlers = HttpApiBuilder.group(InstanceHttpApi, "v2.model", (handlers) => + Effect.gen(function* () { + const catalog = yield* Catalog.Service + + return handlers.handle("models", () => catalog.model.available()) + }), +) diff --git a/packages/opencode/src/server/routes/instance/httpapi/handlers/v2/provider.ts b/packages/opencode/src/server/routes/instance/httpapi/handlers/v2/provider.ts new file mode 100644 index 000000000000..c19213f5bc4b --- /dev/null +++ b/packages/opencode/src/server/routes/instance/httpapi/handlers/v2/provider.ts @@ -0,0 +1,22 @@ +import { Catalog } from "@opencode-ai/core/catalog" +import { Effect } from "effect" +import { HttpApiBuilder } from "effect/unstable/httpapi" +import { InstanceHttpApi } from "../../api" +import { notFound } from "../../errors" + +export const providerHandlers = HttpApiBuilder.group(InstanceHttpApi, "v2.provider", (handlers) => + Effect.gen(function* () { + const catalog = yield* Catalog.Service + + return handlers + .handle("providers", () => catalog.provider.available()) + .handle( + "provider", + Effect.fn(function* (ctx) { + return yield* catalog.provider + .get(ctx.params.providerID) + .pipe(Effect.catchTag("CatalogV2.ProviderNotFound", () => Effect.fail(notFound("Provider not found")))) + }), + ) + }), +) diff --git a/packages/opencode/src/session/llm.ts b/packages/opencode/src/session/llm.ts index c7990d1b3539..c31545a3d690 100644 --- a/packages/opencode/src/session/llm.ts +++ b/packages/opencode/src/session/llm.ts @@ -19,7 +19,6 @@ import { Bus } from "@/bus" import { Wildcard } from "@/util/wildcard" import { SessionID } from "@/session/schema" import { Auth } from "@/auth" -import { Installation } from "@/installation" import { InstallationVersion } from "@opencode-ai/core/installation/version" import { EffectBridge } from "@/effect/bridge" import * as Option from "effect/Option" diff --git a/packages/opencode/src/session/processor.ts b/packages/opencode/src/session/processor.ts index 579c4cc42c54..e8016312484e 100644 --- a/packages/opencode/src/session/processor.ts +++ b/packages/opencode/src/session/processor.ts @@ -23,7 +23,8 @@ import * as Log from "@opencode-ai/core/util/log" import { isRecord } from "@/util/record" import { SyncEvent } from "@/sync" import { SessionEvent } from "@/v2/session-event" -import { Modelv2 } from "@/v2/model" +import { ModelV2 } from "@opencode-ai/core/model" +import { ProviderV2 } from "@opencode-ai/core/provider" import * as DateTime from "effect/DateTime" import { Flag } from "@opencode-ai/core/flag/flag" @@ -478,9 +479,9 @@ export const layer: Layer.Layer< sessionID: ctx.sessionID, agent: input.assistantMessage.agent, model: { - id: Modelv2.ID.make(ctx.model.id), - providerID: Modelv2.ProviderID.make(ctx.model.providerID), - variant: Modelv2.VariantID.make(input.assistantMessage.variant ?? "default"), + id: ModelV2.ID.make(ctx.model.id), + providerID: ProviderV2.ID.make(ctx.model.providerID), + variant: ModelV2.VariantID.make(input.assistantMessage.variant ?? "default"), }, snapshot: ctx.snapshot, timestamp: DateTime.makeUnsafe(Date.now()), diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 7f4f60855662..a34f2a00ad52 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -55,8 +55,9 @@ import { SessionRunState } from "./run-state" import { EffectBridge } from "@/effect/bridge" import { SyncEvent } from "@/sync" import { SessionEvent } from "@/v2/session-event" -import { Modelv2 } from "@/v2/model" -import { AgentAttachment, FileAttachment, Source } from "@/v2/session-prompt" +import { ModelV2 } from "@opencode-ai/core/model" +import { ProviderV2 } from "@opencode-ai/core/provider" +import { AgentAttachment, FileAttachment, Source } from "@opencode-ai/core/session-prompt" import * as DateTime from "effect/DateTime" import { eq } from "@/storage/db" import * as Database from "@/storage/db" @@ -996,9 +997,9 @@ NOTE: At any point in time through this workflow you should feel free to ask the sessionID: input.sessionID, timestamp: DateTime.makeUnsafe(info.time.created), model: { - id: Modelv2.ID.make(info.model.modelID), - providerID: Modelv2.ProviderID.make(info.model.providerID), - variant: Modelv2.VariantID.make(info.model.variant ?? "default"), + id: ModelV2.ID.make(info.model.modelID), + providerID: ProviderV2.ID.make(info.model.providerID), + variant: ModelV2.VariantID.make(info.model.variant ?? "default"), }, }) } diff --git a/packages/opencode/src/session/status.ts b/packages/opencode/src/session/status.ts index 1dd36ec53a94..a75f65f02717 100644 --- a/packages/opencode/src/session/status.ts +++ b/packages/opencode/src/session/status.ts @@ -5,7 +5,6 @@ import { SessionID } from "./schema" import { zod } from "@opencode-ai/core/effect-zod" import { NonNegativeInt, withStatics } from "@opencode-ai/core/schema" import { Effect, Layer, Context, Schema } from "effect" -import z from "zod" export const Info = Schema.Union([ Schema.Struct({ diff --git a/packages/opencode/src/v2/model.ts b/packages/opencode/src/v2/model.ts deleted file mode 100644 index 56357ab4006f..000000000000 --- a/packages/opencode/src/v2/model.ts +++ /dev/null @@ -1,193 +0,0 @@ -import { withStatics } from "@opencode-ai/core/schema" -import { ModelStatus } from "@/provider/model-status" -import { Array, Context, Effect, HashMap, Layer, Option, Order, pipe, Schema } from "effect" -import { DateTimeUtcFromMillis } from "effect/Schema" - -export const ID = Schema.String.pipe(Schema.brand("Model.ID")) -export type ID = typeof ID.Type - -export const ProviderID = Schema.String.pipe( - Schema.brand("Model.ProviderID"), - withStatics((schema) => ({ - // Well-known providers - opencode: schema.make("opencode"), - anthropic: schema.make("anthropic"), - openai: schema.make("openai"), - google: schema.make("google"), - googleVertex: schema.make("google-vertex"), - githubCopilot: schema.make("github-copilot"), - amazonBedrock: schema.make("amazon-bedrock"), - azure: schema.make("azure"), - openrouter: schema.make("openrouter"), - mistral: schema.make("mistral"), - gitlab: schema.make("gitlab"), - })), -) -export type ProviderID = typeof ProviderID.Type - -export const VariantID = Schema.String.pipe(Schema.brand("VariantID")) -export type VariantID = typeof VariantID.Type - -// Grouping of models, eg claude opus, claude sonnet -export const Family = Schema.String.pipe(Schema.brand("Family")) -export type Family = typeof Family.Type - -const OpenAIResponses = Schema.Struct({ - type: Schema.Literal("openai/responses"), - url: Schema.String, - websocket: Schema.optional(Schema.Boolean), -}) - -const OpenAICompletions = Schema.Struct({ - type: Schema.Literal("openai/completions"), - url: Schema.String, - reasoning: Schema.Union([ - Schema.Struct({ - type: Schema.Literal("reasoning_content"), - }), - Schema.Struct({ - type: Schema.Literal("reasoning_details"), - }), - ]).pipe(Schema.optional), -}) -export type OpenAICompletions = typeof OpenAICompletions.Type - -const AnthropicMessages = Schema.Struct({ - type: Schema.Literal("anthropic/messages"), - url: Schema.String, -}) - -export const Endpoint = Schema.Union([OpenAIResponses, OpenAICompletions, AnthropicMessages]).pipe( - Schema.toTaggedUnion("type"), -) -export type Endpoint = typeof Endpoint.Type - -export const Capabilities = Schema.Struct({ - tools: Schema.Boolean, - // mime patterns, image, audio, video/*, text/* - input: Schema.String.pipe(Schema.Array), - output: Schema.String.pipe(Schema.Array), -}) -export type Capabilities = typeof Capabilities.Type - -export const Options = Schema.Struct({ - headers: Schema.Record(Schema.String, Schema.String), - body: Schema.Record(Schema.String, Schema.Any), -}) -export type Options = typeof Options.Type - -export const Cost = Schema.Struct({ - tier: Schema.Struct({ - type: Schema.Literal("context"), - size: Schema.Int, - }).pipe(Schema.optional), - input: Schema.Finite, - output: Schema.Finite, - cache: Schema.Struct({ - read: Schema.Finite, - write: Schema.Finite, - }), -}) - -export const Ref = Schema.Struct({ - id: ID, - providerID: ProviderID, - variant: VariantID, -}) -export type Ref = typeof Ref.Type - -export class Info extends Schema.Class("Model.Info")({ - id: ID, - providerID: ProviderID, - family: Family.pipe(Schema.optional), - name: Schema.String, - endpoint: Endpoint, - capabilities: Capabilities, - options: Schema.Struct({ - ...Options.fields, - variant: Schema.String.pipe(Schema.optional), - }), - variants: Schema.Struct({ - id: VariantID, - ...Options.fields, - }).pipe(Schema.Array), - time: Schema.Struct({ - released: DateTimeUtcFromMillis, - }), - cost: Cost.pipe(Schema.Array), - status: ModelStatus, - limit: Schema.Struct({ - context: Schema.Int, - input: Schema.Int.pipe(Schema.optional), - output: Schema.Int, - }), -}) {} - -export function parse(input: string): { providerID: ProviderID; modelID: ID } { - const [providerID, ...modelID] = input.split("/") - return { - providerID: ProviderID.make(providerID), - modelID: ID.make(modelID.join("/")), - } -} - -export interface Interface { - readonly get: (providerID: ProviderID, modelID: ID) => Effect.Effect> - readonly add: (model: Info) => Effect.Effect - readonly remove: (providerID: ProviderID, modelID: ID) => Effect.Effect - readonly all: () => Effect.Effect - readonly default: () => Effect.Effect> - readonly small: (provider: ProviderID) => Effect.Effect> -} - -export class Service extends Context.Service()("@opencode/v2/Model") {} - -export const layer = Layer.effect( - Service, - Effect.gen(function* () { - let models = HashMap.empty() - - function key(providerID: ProviderID, modelID: ID) { - return `${providerID}/${modelID}` - } - - const result: Interface = { - get: Effect.fn("V2Model.get")(function* (providerID, modelID) { - return HashMap.get(models, key(providerID, modelID)) - }), - - add: Effect.fn("V2Model.add")(function* (model) { - models = HashMap.set(models, key(model.providerID, model.id), model) - }), - - remove: Effect.fn("V2Model.remove")(function* (providerID, modelID) { - models = HashMap.remove(models, key(providerID, modelID)) - }), - - all: Effect.fn("V2Model.all")(function* () { - return pipe( - models, - HashMap.toValues, - Array.sortWith((item) => item.time.released.epochMilliseconds, Order.flip(Order.Number)), - ) - }), - - default: Effect.fn("V2Model.default")(function* () { - const all = yield* result.all() - return Option.fromUndefinedOr(all[0]) - }), - - small: Effect.fn("V2Model.small")(function* (providerID) { - const all = yield* result.all() - const match = all.find((model) => model.providerID === providerID && model.id.toLowerCase().includes("small")) - return Option.fromUndefinedOr(match) - }), - } - - return Service.of(result) - }), -) - -export const defaultLayer = layer - -export * as Modelv2 from "./model" diff --git a/packages/opencode/src/v2/plugin-boot.ts b/packages/opencode/src/v2/plugin-boot.ts new file mode 100644 index 000000000000..9e9e3685e4bd --- /dev/null +++ b/packages/opencode/src/v2/plugin-boot.ts @@ -0,0 +1,50 @@ +export * as PluginBoot from "./plugin-boot" + +import { Npm } from "@opencode-ai/core/npm" +import { Effect, Layer } from "effect" +import { AuthV2 } from "@opencode-ai/core/auth" +import { Catalog } from "@opencode-ai/core/catalog" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { AuthPlugin } from "@opencode-ai/core/plugin/auth" +import { EnvPlugin } from "@opencode-ai/core/plugin/env" +import { ModelsDevPlugin } from "./plugin/models-dev" +import { ProviderPlugins } from "./plugin/provider" + +type Plugin = { + id: PluginV2.ID + effect: Effect.Effect +} + +export const layer = Layer.effectDiscard( + Effect.gen(function* () { + const catalog = yield* Catalog.Service + const plugin = yield* PluginV2.Service + const auth = yield* AuthV2.Service + const npm = yield* Npm.Service + + const add = Effect.fn("PluginBoot.add")(function* (input: Plugin) { + yield* plugin.add({ + id: input.id, + effect: input.effect.pipe( + Effect.provideService(Catalog.Service, catalog), + Effect.provideService(AuthV2.Service, auth), + Effect.provideService(Npm.Service, npm), + ), + }) + }) + + yield* add(EnvPlugin) + yield* add(AuthPlugin) + for (const item of ProviderPlugins) { + yield* add(item) + } + yield* add(ModelsDevPlugin) + }), +) + +export const defaultLayer = layer.pipe( + Layer.provide(Catalog.defaultLayer), + Layer.provide(PluginV2.defaultLayer), + Layer.provide(Layer.orDie(AuthV2.defaultLayer)), + Layer.provide(Npm.defaultLayer), +) diff --git a/packages/opencode/src/v2/plugin/models-dev.ts b/packages/opencode/src/v2/plugin/models-dev.ts new file mode 100644 index 000000000000..7c0e902c79a8 --- /dev/null +++ b/packages/opencode/src/v2/plugin/models-dev.ts @@ -0,0 +1,108 @@ +import { DateTime, Effect } from "effect" +import { Catalog } from "@opencode-ai/core/catalog" +import { ModelV2 } from "@opencode-ai/core/model" +import { ProviderV2 } from "@opencode-ai/core/provider" +import { ModelsDev } from "@/provider/models" +import { PluginV2 } from "@opencode-ai/core/plugin" + +function released(date: string) { + const time = Date.parse(date) + return DateTime.makeUnsafe(Number.isFinite(time) ? time : 0) +} + +function cost(input: ModelsDev.Model["cost"]) { + const base = { + input: input?.input ?? 0, + output: input?.output ?? 0, + cache: { + read: input?.cache_read ?? 0, + write: input?.cache_write ?? 0, + }, + } + if (!input?.context_over_200k) return [base] + return [ + base, + { + tier: { + type: "context" as const, + size: 200_000, + }, + input: input.context_over_200k.input, + output: input.context_over_200k.output, + cache: { + read: input.context_over_200k.cache_read ?? 0, + write: input.context_over_200k.cache_write ?? 0, + }, + }, + ] +} + +function variants(model: ModelsDev.Model) { + return Object.entries(model.experimental?.modes ?? {}).map(([id, item]) => ({ + id: ModelV2.VariantID.make(id), + headers: { ...(item.provider?.headers ?? {}) }, + body: { ...(item.provider?.body ?? {}) }, + aisdk: { + provider: {}, + request: {}, + }, + })) +} + +export const ModelsDevPlugin = PluginV2.define({ + id: PluginV2.ID.make("models-dev"), + effect: Effect.gen(function* () { + const catalog = yield* Catalog.Service + const modelsDev = yield* ModelsDev.Service + for (const item of Object.values(yield* modelsDev.get())) { + const providerID = ProviderV2.ID.make(item.id) + yield* catalog.provider.update(providerID, (provider) => { + provider.name = item.name + provider.env = [...item.env] + provider.endpoint = item.npm + ? { + type: "aisdk", + package: item.npm, + url: item.api, + } + : { + type: "unknown", + } + }) + + for (const model of Object.values(item.models)) { + const modelID = ModelV2.ID.make(model.id) + yield* catalog.model + .update(providerID, modelID, (draft) => { + draft.name = model.name + draft.family = model.family ? ModelV2.Family.make(model.family) : undefined + draft.endpoint = model.provider?.npm + ? { + type: "aisdk", + package: model.provider?.npm, + url: model.provider.api, + } + : { + type: "unknown", + } + draft.capabilities = { + tools: model.tool_call, + input: [...(model.modalities?.input ?? [])], + output: [...(model.modalities?.output ?? [])], + } + draft.variants = variants(model) + draft.time.released = released(model.release_date) + draft.cost = cost(model.cost) + draft.status = model.status ?? "active" + draft.enabled = true + draft.limit = { + context: model.limit.context, + input: model.limit.input, + output: model.limit.output, + } + }) + .pipe(Effect.orDie) + } + } + }).pipe(Effect.provide(ModelsDev.defaultLayer)), +}) diff --git a/packages/opencode/src/v2/plugin/provider/github-copilot.ts b/packages/opencode/src/v2/plugin/provider/github-copilot.ts new file mode 100644 index 000000000000..beb30392f8a4 --- /dev/null +++ b/packages/opencode/src/v2/plugin/provider/github-copilot.ts @@ -0,0 +1,44 @@ +import { Effect } from "effect" +import { ModelV2 } from "@opencode-ai/core/model" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { ProviderV2 } from "@opencode-ai/core/provider" + +function shouldUseResponses(modelID: string) { + // Copilot supports Responses for GPT-5 class models, except mini variants + // which still need the chat-completions endpoint. + const match = /^gpt-(\d+)/.exec(modelID) + if (!match) return false + return Number(match[1]) >= 5 && !modelID.startsWith("gpt-5-mini") +} + +export const GithubCopilotPlugin = PluginV2.define({ + id: PluginV2.ID.make("github-copilot"), + effect: Effect.gen(function* () { + return { + "provider.update": Effect.fn(function* (evt) { + if (evt.provider.id !== ProviderV2.ID.githubCopilot) return + }), + "aisdk.sdk": Effect.fn(function* (evt) { + if (evt.package !== "@ai-sdk/github-copilot") return + const mod = yield* Effect.promise(() => import("../../../provider/sdk/copilot/copilot-provider")) + evt.sdk = mod.createOpenaiCompatible(evt.options) + }), + "aisdk.language": Effect.fn(function* (evt) { + if (evt.model.providerID !== ProviderV2.ID.githubCopilot) return + if (evt.sdk.responses === undefined && evt.sdk.chat === undefined) { + evt.language = evt.sdk.languageModel(evt.model.apiID) + return + } + evt.language = shouldUseResponses(evt.model.apiID) + ? evt.sdk.responses(evt.model.apiID) + : evt.sdk.chat(evt.model.apiID) + }), + "model.update": Effect.fn(function* (evt) { + if (evt.model.providerID !== ProviderV2.ID.githubCopilot) return + // This chat-only alias conflicts with the Copilot GPT-5 Responses route, + // so hide it only for Copilot rather than for every provider catalog. + if (evt.model.id === ModelV2.ID.make("gpt-5-chat-latest")) evt.cancel = true + }), + } + }), +}) diff --git a/packages/opencode/src/v2/plugin/provider/index.ts b/packages/opencode/src/v2/plugin/provider/index.ts new file mode 100644 index 000000000000..312702db8304 --- /dev/null +++ b/packages/opencode/src/v2/plugin/provider/index.ts @@ -0,0 +1,7 @@ +import { ProviderPlugins as CoreProviderPlugins } from "@opencode-ai/core/plugin/provider" +import { GithubCopilotPlugin } from "./github-copilot" + +export const ProviderPlugins = [ + ...CoreProviderPlugins, + GithubCopilotPlugin, +] diff --git a/packages/opencode/src/v2/provider-parity-checklist.md b/packages/opencode/src/v2/provider-parity-checklist.md new file mode 100644 index 000000000000..e3a599d8ec3b --- /dev/null +++ b/packages/opencode/src/v2/provider-parity-checklist.md @@ -0,0 +1,95 @@ +# Unported Provider Logic Checklist + +This tracks legacy provider behavior from `packages/opencode/src/provider/provider.ts` that still needs to be ported into the v2 provider plugins under `packages/opencode/src/v2/plugin/provider/`. Keep entries checked only when v2 has equivalent behavior or when the item is intentionally skipped. + +## Provider Setup + +- [x] Cloudflare AI Gateway custom SDK construction with `createAiGateway` / `createUnified`. +- [x] Google Vertex authenticated `fetch` injection. +- [x] Amazon Bedrock AWS credential chain setup. +- [x] Amazon Bedrock bearer token setup. +- [x] SAP AI Core service key setup. + +## Provider Options + +- [x] Azure resource name resolution. +- [x] Azure missing-resource error. +- [x] Azure Cognitive Services baseURL resolution. +- [x] Cloudflare Workers AI account ID validation. +- [x] Cloudflare Workers AI account ID vars. +- [x] Cloudflare AI Gateway account ID validation. +- [x] Cloudflare AI Gateway gateway ID validation. +- [x] Cloudflare AI Gateway token validation. +- [x] Amazon Bedrock region precedence. +- [x] Amazon Bedrock profile precedence. +- [x] Amazon Bedrock endpoint precedence. +- [x] Google Vertex project resolution. +- [x] Google Vertex location resolution. +- [x] GitLab instance URL resolution. +- [x] GitLab token resolution. +- [x] GitLab AI gateway headers. +- [x] GitLab feature flags. +- [x] Opencode unauthenticated paid-model filtering. +- [x] Opencode public API key fallback. + +## Request Behavior + +- [x] Request timeout handling. +- [x] Chunk timeout handling. +- [x] SSE timeout wrapping. +- [x] OpenAI response item ID stripping. +- [x] Azure response item ID stripping. +- [x] OpenAI-compatible `includeUsage` defaulting. + +## Dynamic Models + +- [ ] GitLab workflow model discovery. + +## Model Filtering + +- [ ] Experimental alpha model filtering. +- [ ] Deprecated model filtering. +- [ ] Config whitelist filtering. +- [ ] Config blacklist filtering. +- [ ] `gpt-5-chat-latest` filtering. +- [ ] OpenRouter `openai/gpt-5-chat` filtering. + +## Default Models + +- [x] Configured default model selection. Replaced by explicit `Catalog.model.setDefault`. +- [SKIP] Recent-history default model selection — not porting to server-side v2 catalog. +- [x] Default model fallback sorting. Uses newest available model, not legacy hard-coded priority. + +## Small Models + +- [SKIP] Configured `small_model` selection — not porting config-driven selection to server-side v2 catalog. +- [x] Provider-specific small model priority. Replaced by cheapest output cost selection. +- [x] Opencode small model priority. Replaced by cheapest output cost selection. +- [x] GitHub Copilot small model priority. Replaced by cheapest output cost selection. +- [x] Amazon Bedrock region-aware small model selection. Replaced by cheapest output cost selection. + +## URL And Env Vars + +- [SKIP] BaseURL `${VAR}` interpolation — not porting generic URL templating; provider plugins should construct concrete URLs. +- [x] Azure `AZURE_RESOURCE_NAME` vars. Handled by Azure provider plugins. +- [x] Google Vertex vars. Handled by Google Vertex provider plugins. +- [x] Cloudflare Workers AI vars. Handled by Cloudflare Workers AI provider plugin. + +## Auth + +- [ ] Auth-derived provider API keys. +- [ ] OpenAI OAuth/API auth distinction. +- [ ] GitLab OAuth token selection. +- [ ] GitLab API token selection. +- [ ] Azure auth metadata resource name. +- [ ] Cloudflare auth metadata account ID. +- [ ] Cloudflare auth metadata gateway ID. + +## Config And Plugin Parity + +- [ ] Legacy plugin auth loader behavior. +- [ ] Config provider merge behavior. +- [ ] Config model merge behavior. +- [ ] Variant generation from model metadata. +- [ ] Config variant merge behavior. +- [ ] Config variant disable behavior. diff --git a/packages/opencode/src/v2/session-event.ts b/packages/opencode/src/v2/session-event.ts index fa211bd8c4ed..1fd0f909d5a8 100644 --- a/packages/opencode/src/v2/session-event.ts +++ b/packages/opencode/src/v2/session-event.ts @@ -1,12 +1,12 @@ import { SessionID } from "@/session/schema" import { NonNegativeInt } from "@opencode-ai/core/schema" import { EventV2 } from "./event" -import { FileAttachment, Prompt } from "./session-prompt" +import { FileAttachment, Prompt } from "@opencode-ai/core/session-prompt" import { Schema } from "effect" export { FileAttachment } -import { ToolOutput } from "./tool-output" -import { V2Schema } from "./schema" -import { Modelv2 } from "./model" +import { ToolOutput } from "@opencode-ai/core/tool-output" +import { V2Schema } from "@opencode-ai/core/v2-schema" +import { ModelV2 } from "@opencode-ai/core/model" export const Source = Schema.Struct({ start: NonNegativeInt, @@ -47,7 +47,7 @@ export const ModelSwitched = EventV2.define({ version: 1, schema: { ...Base, - model: Modelv2.Ref, + model: ModelV2.Ref, }, }) export type ModelSwitched = Schema.Schema.Type @@ -104,7 +104,7 @@ export namespace Step { schema: { ...Base, agent: Schema.String, - model: Modelv2.Ref, + model: ModelV2.Ref, snapshot: Schema.String.pipe(Schema.optional), }, }) diff --git a/packages/opencode/src/v2/session-message.ts b/packages/opencode/src/v2/session-message.ts index 024e28c45041..f8e7615b64d6 100644 --- a/packages/opencode/src/v2/session-message.ts +++ b/packages/opencode/src/v2/session-message.ts @@ -1,10 +1,10 @@ import { Schema } from "effect" -import { Prompt } from "./session-prompt" +import { Prompt } from "@opencode-ai/core/session-prompt" import { SessionEvent } from "./session-event" import { EventV2 } from "./event" -import { ToolOutput } from "./tool-output" -import { V2Schema } from "./schema" -import { Modelv2 } from "./model" +import { ToolOutput } from "@opencode-ai/core/tool-output" +import { V2Schema } from "@opencode-ai/core/v2-schema" +import { ModelV2 } from "@opencode-ai/core/model" export const ID = EventV2.ID export type ID = Schema.Schema.Type @@ -26,7 +26,7 @@ export class AgentSwitched extends Schema.Class("Session.Message. export class ModelSwitched extends Schema.Class("Session.Message.ModelSwitched")({ ...Base, type: Schema.Literal("model-switched"), - model: Modelv2.Ref, + model: ModelV2.Ref, }) {} export class User extends Schema.Class("Session.Message.User")({ diff --git a/packages/opencode/src/v2/session.ts b/packages/opencode/src/v2/session.ts index 3b0b61dcbc61..8a2d6ca17375 100644 --- a/packages/opencode/src/v2/session.ts +++ b/packages/opencode/src/v2/session.ts @@ -5,14 +5,15 @@ import { and, asc, desc, eq, gt, gte, isNull, like, lt, or, type SQL } from "@/s import * as Database from "@/storage/db" import { Context, DateTime, Effect, Layer, Option, Schema } from "effect" import { SessionMessage } from "./session-message" -import type { Prompt } from "./session-prompt" +import type { Prompt } from "@opencode-ai/core/session-prompt" import { EventV2 } from "./event" import { ProjectID } from "@/project/schema" import { SessionEvent } from "./session-event" -import { V2Schema } from "./schema" +import { V2Schema } from "@opencode-ai/core/v2-schema" import { optionalOmitUndefined } from "@opencode-ai/core/schema" -import { Modelv2 } from "./model" import { SyncEvent } from "@/sync" +import { ModelV2 } from "@opencode-ai/core/model" +import { ProviderV2 } from "@opencode-ai/core/provider" export const Delivery = Schema.Literals(["immediate", "deferred"]).annotate({ identifier: "Session.Delivery", @@ -28,7 +29,7 @@ export class Info extends Schema.Class("Session.Info")({ workspaceID: optionalOmitUndefined(WorkspaceID), path: optionalOmitUndefined(Schema.String), agent: optionalOmitUndefined(Schema.String), - model: Modelv2.Ref.pipe(optionalOmitUndefined), + model: ModelV2.Ref.pipe(optionalOmitUndefined), time: Schema.Struct({ created: V2Schema.DateTimeUtcFromMillis, updated: V2Schema.DateTimeUtcFromMillis, @@ -57,7 +58,7 @@ export class NotFoundError extends Schema.TaggedErrorClass()("Ses export interface Interface { readonly create: (input?: { agent?: string - model?: Modelv2.Ref + model?: ModelV2.Ref parentID?: SessionID workspaceID?: WorkspaceID }) => Effect.Effect @@ -101,10 +102,10 @@ export interface Interface { parentID: SessionID prompt: Prompt agent: string - model?: Modelv2.Ref + model?: ModelV2.Ref }) => Effect.Effect readonly switchAgent: (input: { sessionID: SessionID; agent: string }) => Effect.Effect - readonly switchModel: (input: { sessionID: SessionID; model: Modelv2.Ref }) => Effect.Effect + readonly switchModel: (input: { sessionID: SessionID; model: ModelV2.Ref }) => Effect.Effect readonly compact: (sessionID: SessionID) => Effect.Effect readonly wait: (sessionID: SessionID) => Effect.Effect } @@ -131,9 +132,9 @@ export const layer = Layer.effect( agent: row.agent ?? undefined, model: row.model ? { - id: Modelv2.ID.make(row.model.id), - providerID: Modelv2.ProviderID.make(row.model.providerID), - variant: Modelv2.VariantID.make(row.model.variant ?? "default"), + id: ModelV2.ID.make(row.model.id), + providerID: ProviderV2.ID.make(row.model.providerID), + variant: ModelV2.VariantID.make(row.model.variant ?? "default"), } : undefined, time: { @@ -144,7 +145,7 @@ export const layer = Layer.effect( }) } - const result: Interface = { + const result = Service.of({ create: Effect.fn("V2Session.create")(function* (_input) { return {} as any }), @@ -286,7 +287,7 @@ export const layer = Layer.effect( }), subagent: Effect.fn("V2Session.subagent")(function* (input) { const parent = yield* result.get(input.parentID) - const session = yield* result.create({ + const child = yield* result.create({ agent: input.agent, model: input.model, parentID: input.parentID, @@ -294,11 +295,11 @@ export const layer = Layer.effect( }) yield* result.prompt({ prompt: input.prompt, - sessionID: session.id, + sessionID: child.id, }) yield* Effect.gen(function* () { - yield* result.wait(session.id) - const messages = yield* result.messages({ sessionID: session.id, order: "desc" }) + yield* result.wait(child.id) + const messages = yield* result.messages({ sessionID: child.id, order: "desc" }) const assistant = messages.find((msg) => msg.type === "assistant") if (!assistant) return const text = assistant.content.findLast((part) => part.type === "text") @@ -307,9 +308,9 @@ export const layer = Layer.effect( }), compact: Effect.fn("V2Session.compact")(function* (_sessionID) {}), wait: Effect.fn("V2Session.wait")(function* (_sessionID) {}), - } + }) - return Service.of(result) + return result }), ) diff --git a/packages/opencode/test/provider/provider.test.ts b/packages/opencode/test/provider/provider.test.ts index cdb9d2057245..1e6bdab496ac 100644 --- a/packages/opencode/test/provider/provider.test.ts +++ b/packages/opencode/test/provider/provider.test.ts @@ -18,6 +18,7 @@ import { makeRuntime } from "../../src/effect/run-service" const env = makeRuntime(Env.Service, Env.defaultLayer) const set = (k: string, v: string) => env.runSync((svc) => svc.set(k, v)) +const remove = (k: string) => env.runSync((svc) => svc.remove(k)) async function run(fn: (provider: Provider.Interface) => Effect.Effect) { return AppRuntime.runPromise( @@ -225,6 +226,43 @@ test("model blacklist excludes specific models", async () => { }) }) +test("custom provider keeps gpt-5-chat-latest model IDs", async () => { + await using tmp = await tmpdir({ + init: async (dir) => { + await Bun.write( + path.join(dir, "opencode.json"), + JSON.stringify({ + $schema: "https://opencode.ai/config.json", + provider: { + "custom-chat": { + name: "Custom Chat", + npm: "@ai-sdk/openai-compatible", + api: "https://example.com/v1", + options: { apiKey: "test-key" }, + models: { + "gpt-5-chat-latest": { + name: "GPT-5 Chat Latest", + tool_call: true, + limit: { context: 128000, output: 16000 }, + }, + }, + }, + }, + }), + ) + }, + }) + await WithInstance.provide({ + directory: tmp.path, + fn: async () => { + const providers = await list() + const provider = providers[ProviderID.make("custom-chat")] + expect(provider).toBeDefined() + expect(provider.models["gpt-5-chat-latest"]).toBeDefined() + }, + }) +}) + test("custom model alias via config", async () => { await using tmp = await tmpdir({ init: async (dir) => { @@ -2353,6 +2391,49 @@ test("Google Vertex: supports OpenAI compatible models", async () => { }) }) +test("Google Vertex: resolves GOOGLE_VERTEX_PROJECT env into provider options", async () => { + await using tmp = await tmpdir({ + init: async (dir) => { + await Bun.write( + path.join(dir, "opencode.json"), + JSON.stringify({ + $schema: "https://opencode.ai/config.json", + provider: { + "google-vertex": { + name: "Vertex", + npm: "@ai-sdk/google-vertex", + env: ["GOOGLE_VERTEX_PROJECT", "GOOGLE_VERTEX_LOCATION"], + models: { + "gemini-pro": { + name: "Gemini Pro", + tool_call: true, + limit: { context: 128000, output: 16000 }, + }, + }, + }, + }, + }), + ) + }, + }) + + await WithInstance.provide({ + directory: tmp.path, + fn: async () => { + remove("GOOGLE_CLOUD_PROJECT") + remove("GCP_PROJECT") + remove("GCLOUD_PROJECT") + set("GOOGLE_VERTEX_PROJECT", "vertex-project") + set("GOOGLE_VERTEX_LOCATION", "europe-west4") + const providers = await list() + const provider = providers[ProviderID.googleVertex] + expect(provider).toBeDefined() + expect(provider.options.project).toBe("vertex-project") + expect(provider.options.location).toBe("europe-west4") + }, + }) +}) + test("cloudflare-ai-gateway loads with env variables", async () => { await using tmp = await tmpdir({ init: async (dir) => { diff --git a/packages/opencode/test/server/httpapi-session.test.ts b/packages/opencode/test/server/httpapi-session.test.ts index 24c845183de7..dd6d32271d66 100644 --- a/packages/opencode/test/server/httpapi-session.test.ts +++ b/packages/opencode/test/server/httpapi-session.test.ts @@ -20,7 +20,8 @@ import { MessageV2 } from "../../src/session/message-v2" import { Database } from "@/storage/db" import { SessionMessageTable, SessionTable } from "@/session/session.sql" import { SessionMessage } from "../../src/v2/session-message" -import { Modelv2 } from "../../src/v2/model" +import { ModelV2 } from "@opencode-ai/core/model" +import { ProviderV2 } from "@opencode-ai/core/provider" import * as DateTime from "effect/DateTime" import * as Log from "@opencode-ai/core/util/log" import { eq } from "drizzle-orm" @@ -259,9 +260,9 @@ describe("session HttpApi", () => { type: "assistant", agent: "build", model: { - id: Modelv2.ID.make("model"), - providerID: Modelv2.ProviderID.make("provider"), - variant: Modelv2.VariantID.make("default"), + id: ModelV2.ID.make("model"), + providerID: ProviderV2.ID.make("provider"), + variant: ModelV2.VariantID.make("default"), }, time: { created: DateTime.makeUnsafe(1) }, content: [], diff --git a/packages/opencode/test/v2/plugin/provider-gateway.test.ts b/packages/opencode/test/v2/plugin/provider-gateway.test.ts new file mode 100644 index 000000000000..2272710eedac --- /dev/null +++ b/packages/opencode/test/v2/plugin/provider-gateway.test.ts @@ -0,0 +1,95 @@ +import { describe, expect, mock } from "bun:test" +import { Effect } from "effect" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { GatewayPlugin } from "@opencode-ai/core/plugin/provider/gateway" +import { snapshot } from "../../../src/provider/models-snapshot.js" +import { it, model } from "../../../../core/test/v2/plugin/provider-helper" + +const gatewayCalls: Record[] = [] +const vercel = snapshot.vercel as { + npm?: string + models: Record +} + +mock.module("@ai-sdk/gateway", () => ({ + createGateway(options: Record) { + gatewayCalls.push({ ...options }) + return { + languageModel(modelID: string) { + return { + modelId: modelID, + provider: options.name, + specificationVersion: "v3", + } + }, + } + }, +})) + +describe("GatewayPlugin", () => { + it.effect("creates a Gateway SDK for @ai-sdk/gateway", () => + Effect.gen(function* () { + gatewayCalls.length = 0 + const plugin = yield* PluginV2.Service + yield* plugin.add(GatewayPlugin) + const result = yield* plugin.trigger( + "aisdk.sdk", + { model: model("gateway", "model"), package: "@ai-sdk/gateway", options: { name: "gateway" } }, + {}, + ) + expect(result.sdk).toBeDefined() + expect(gatewayCalls).toHaveLength(1) + }), + ) + + it.effect("passes the model providerID as the Gateway SDK name", () => + Effect.gen(function* () { + gatewayCalls.length = 0 + const plugin = yield* PluginV2.Service + yield* plugin.add(GatewayPlugin) + + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("vercel", "anthropic/claude-sonnet-4"), + package: "@ai-sdk/gateway", + options: { name: "vercel", apiKey: "test-key" }, + }, + {}, + ) + + expect(gatewayCalls).toEqual([{ name: "vercel", apiKey: "test-key" }]) + expect(result.sdk.languageModel("anthropic/claude-sonnet-4").provider).toBe("vercel") + }), + ) + + it.effect("matches real Vercel AI Gateway models by their inherited @ai-sdk/gateway package", () => + Effect.gen(function* () { + gatewayCalls.length = 0 + const plugin = yield* PluginV2.Service + yield* plugin.add(GatewayPlugin) + + for (const modelID of ["anthropic/claude-sonnet-4", "openai/gpt-5", "google/gemini-2.5-pro"]) { + const realModel = vercel.models[modelID] + const packageName = realModel.provider?.npm ?? vercel.npm ?? "" + expect(packageName).toBe("@ai-sdk/gateway") + + const ignored = yield* plugin.trigger( + "aisdk.sdk", + { model: model("vercel", modelID), package: "@ai-sdk/vercel", options: { name: "vercel" } }, + {}, + ) + expect(ignored.sdk).toBeUndefined() + + const result = yield* plugin.trigger( + "aisdk.sdk", + { model: model("vercel", modelID), package: packageName, options: { name: "vercel" } }, + {}, + ) + expect(result.sdk).toBeDefined() + } + + expect(gatewayCalls).toHaveLength(3) + }), + ) +}) diff --git a/packages/opencode/test/v2/plugin/provider-github-copilot.test.ts b/packages/opencode/test/v2/plugin/provider-github-copilot.test.ts new file mode 100644 index 000000000000..c31ec2190f7b --- /dev/null +++ b/packages/opencode/test/v2/plugin/provider-github-copilot.test.ts @@ -0,0 +1,188 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { ModelV2 } from "@opencode-ai/core/model" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { GithubCopilotPlugin } from "../../../src/v2/plugin/provider/github-copilot" +import { fakeSelectorSdk, it, model } from "../../../../core/test/v2/plugin/provider-helper" + +describe("GithubCopilotPlugin", () => { + it.effect("creates the bundled Copilot SDK for the GitHub Copilot package", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(GithubCopilotPlugin) + const ignored = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("github-copilot", "gpt-5"), + package: "@ai-sdk/openai-compatible", + options: { name: "github-copilot" }, + }, + {}, + ) + const result = yield* plugin.trigger( + "aisdk.sdk", + { + model: model("github-copilot", "gpt-5"), + package: "@ai-sdk/github-copilot", + options: { name: "github-copilot" }, + }, + {}, + ) + expect(ignored.sdk).toBeUndefined() + expect(result.sdk).toBeDefined() + }), + ) + + it.effect("selects languageModel when responses and chat are absent", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(GithubCopilotPlugin) + yield* plugin.trigger( + "aisdk.language", + { + model: model("github-copilot", "claude-sonnet-4"), + sdk: { languageModel: fakeSelectorSdk(calls).languageModel }, + options: {}, + }, + {}, + ) + expect(calls).toEqual(["languageModel:claude-sonnet-4"]) + }), + ) + + it.effect("selects languageModel with the API model ID when responses and chat are absent", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(GithubCopilotPlugin) + yield* plugin.trigger( + "aisdk.language", + { + model: model("github-copilot", "alias", { apiID: ModelV2.ID.make("claude-sonnet-4") }), + sdk: { languageModel: fakeSelectorSdk(calls).languageModel }, + options: {}, + }, + {}, + ) + expect(calls).toEqual(["languageModel:claude-sonnet-4"]) + }), + ) + + it.effect("uses responses for gpt-5 models except gpt-5-mini", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(GithubCopilotPlugin) + yield* plugin.trigger( + "aisdk.language", + { model: model("github-copilot", "gpt-5"), sdk: fakeSelectorSdk(calls), options: {} }, + {}, + ) + yield* plugin.trigger( + "aisdk.language", + { model: model("github-copilot", "gpt-5.1-codex"), sdk: fakeSelectorSdk(calls), options: {} }, + {}, + ) + yield* plugin.trigger( + "aisdk.language", + { model: model("github-copilot", "gpt-4o"), sdk: fakeSelectorSdk(calls), options: {} }, + {}, + ) + yield* plugin.trigger( + "aisdk.language", + { model: model("github-copilot", "gpt-5-mini"), sdk: fakeSelectorSdk(calls), options: {} }, + {}, + ) + yield* plugin.trigger( + "aisdk.language", + { model: model("github-copilot", "gpt-5-mini-2025-08-07"), sdk: fakeSelectorSdk(calls), options: {} }, + {}, + ) + expect(calls).toEqual([ + "responses:gpt-5", + "responses:gpt-5.1-codex", + "chat:gpt-4o", + "chat:gpt-5-mini", + "chat:gpt-5-mini-2025-08-07", + ]) + }), + ) + + it.effect("uses the API model ID when selecting responses or chat", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(GithubCopilotPlugin) + yield* plugin.trigger( + "aisdk.language", + { + model: model("github-copilot", "default", { apiID: ModelV2.ID.make("gpt-5") }), + sdk: fakeSelectorSdk(calls), + options: {}, + }, + {}, + ) + yield* plugin.trigger( + "aisdk.language", + { + model: model("github-copilot", "small", { apiID: ModelV2.ID.make("gpt-5-mini") }), + sdk: fakeSelectorSdk(calls), + options: {}, + }, + {}, + ) + yield* plugin.trigger( + "aisdk.language", + { + model: model("github-copilot", "sonnet", { apiID: ModelV2.ID.make("claude-sonnet-4") }), + sdk: fakeSelectorSdk(calls), + options: {}, + }, + {}, + ) + expect(calls).toEqual(["responses:gpt-5", "chat:gpt-5-mini", "chat:claude-sonnet-4"]) + }), + ) + + it.effect("filters gpt-5-chat-latest before Copilot language selection", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(GithubCopilotPlugin) + const result = yield* plugin.trigger( + "model.update", + {}, + { model: model("github-copilot", "gpt-5-chat-latest"), cancel: false }, + ) + expect(result.cancel).toBe(true) + }), + ) + + it.effect("does not filter gpt-5-chat-latest for non-Copilot providers", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(GithubCopilotPlugin) + const result = yield* plugin.trigger( + "model.update", + {}, + { model: model("custom-copilot", "gpt-5-chat-latest"), cancel: false }, + ) + expect(result.cancel).toBe(false) + }), + ) + + it.effect("ignores non-Copilot providers", () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + const calls: string[] = [] + yield* plugin.add(GithubCopilotPlugin) + const result = yield* plugin.trigger( + "aisdk.language", + { model: model("openai", "gpt-5"), sdk: fakeSelectorSdk(calls), options: {} }, + {}, + ) + expect(calls).toEqual([]) + expect(result.language).toBeUndefined() + }), + ) +}) diff --git a/packages/opencode/test/v2/plugin/provider-sdk-matching.test.ts b/packages/opencode/test/v2/plugin/provider-sdk-matching.test.ts new file mode 100644 index 000000000000..411ca8c6845b --- /dev/null +++ b/packages/opencode/test/v2/plugin/provider-sdk-matching.test.ts @@ -0,0 +1,98 @@ +import { describe, expect } from "bun:test" +import { Effect } from "effect" +import { AlibabaPlugin } from "@opencode-ai/core/plugin/provider/alibaba" +import { AmazonBedrockPlugin } from "@opencode-ai/core/plugin/provider/amazon-bedrock" +import { AnthropicPlugin } from "@opencode-ai/core/plugin/provider/anthropic" +import { AzurePlugin } from "@opencode-ai/core/plugin/provider/azure" +import { CerebrasPlugin } from "@opencode-ai/core/plugin/provider/cerebras" +import { CoherePlugin } from "@opencode-ai/core/plugin/provider/cohere" +import { DeepInfraPlugin } from "@opencode-ai/core/plugin/provider/deepinfra" +import { GatewayPlugin } from "@opencode-ai/core/plugin/provider/gateway" +import { GithubCopilotPlugin } from "../../../src/v2/plugin/provider/github-copilot" +import { GooglePlugin } from "@opencode-ai/core/plugin/provider/google" +import { GoogleVertexAnthropicPlugin, GoogleVertexPlugin } from "@opencode-ai/core/plugin/provider/google-vertex" +import { GroqPlugin } from "@opencode-ai/core/plugin/provider/groq" +import { MistralPlugin } from "@opencode-ai/core/plugin/provider/mistral" +import { OpenAIPlugin } from "@opencode-ai/core/plugin/provider/openai" +import { OpenAICompatiblePlugin } from "@opencode-ai/core/plugin/provider/openai-compatible" +import { OpenRouterPlugin } from "@opencode-ai/core/plugin/provider/openrouter" +import { PerplexityPlugin } from "@opencode-ai/core/plugin/provider/perplexity" +import { TogetherAIPlugin } from "@opencode-ai/core/plugin/provider/togetherai" +import { VercelPlugin } from "@opencode-ai/core/plugin/provider/vercel" +import { VenicePlugin } from "@opencode-ai/core/plugin/provider/venice" +import { XAIPlugin } from "@opencode-ai/core/plugin/provider/xai" +import { PluginV2 } from "@opencode-ai/core/plugin" +import { it, model } from "../../../../core/test/v2/plugin/provider-helper" + +const cases = [ + { name: "AlibabaPlugin", plugin: AlibabaPlugin, providerID: "custom", package: "@ai-sdk/alibaba" }, + { + name: "AmazonBedrockPlugin", + plugin: AmazonBedrockPlugin, + providerID: "custom", + package: "@ai-sdk/amazon-bedrock", + options: { bearerToken: "token" }, + }, + { name: "AnthropicPlugin", plugin: AnthropicPlugin, providerID: "custom", package: "@ai-sdk/anthropic" }, + { name: "AzurePlugin", plugin: AzurePlugin, providerID: "custom", package: "@ai-sdk/azure" }, + { name: "CerebrasPlugin", plugin: CerebrasPlugin, providerID: "custom", package: "@ai-sdk/cerebras" }, + { name: "CoherePlugin", plugin: CoherePlugin, providerID: "custom", package: "@ai-sdk/cohere" }, + { name: "DeepInfraPlugin", plugin: DeepInfraPlugin, providerID: "custom", package: "@ai-sdk/deepinfra" }, + { name: "GatewayPlugin", plugin: GatewayPlugin, providerID: "vercel", package: "@ai-sdk/gateway" }, + { name: "GithubCopilotPlugin", plugin: GithubCopilotPlugin, providerID: "custom", package: "@ai-sdk/github-copilot" }, + { name: "GooglePlugin", plugin: GooglePlugin, providerID: "custom", package: "@ai-sdk/google" }, + { + name: "GoogleVertexPlugin", + plugin: GoogleVertexPlugin, + providerID: "custom", + package: "@ai-sdk/google-vertex", + options: { project: "project" }, + }, + { + name: "GoogleVertexAnthropicPlugin", + plugin: GoogleVertexAnthropicPlugin, + providerID: "custom", + package: "@ai-sdk/google-vertex/anthropic", + options: { project: "project" }, + }, + { name: "GroqPlugin", plugin: GroqPlugin, providerID: "custom", package: "@ai-sdk/groq" }, + { name: "MistralPlugin", plugin: MistralPlugin, providerID: "custom", package: "@ai-sdk/mistral" }, + { name: "OpenAIPlugin", plugin: OpenAIPlugin, providerID: "custom", package: "@ai-sdk/openai" }, + { + name: "OpenAICompatiblePlugin", + plugin: OpenAICompatiblePlugin, + providerID: "custom", + package: "@ai-sdk/openai-compatible", + }, + { name: "OpenRouterPlugin", plugin: OpenRouterPlugin, providerID: "custom", package: "@openrouter/ai-sdk-provider" }, + { name: "PerplexityPlugin", plugin: PerplexityPlugin, providerID: "custom", package: "@ai-sdk/perplexity" }, + { name: "TogetherAIPlugin", plugin: TogetherAIPlugin, providerID: "custom", package: "@ai-sdk/togetherai" }, + { name: "VercelPlugin", plugin: VercelPlugin, providerID: "custom", package: "@ai-sdk/vercel" }, + { name: "VenicePlugin", plugin: VenicePlugin, providerID: "custom", package: "venice-ai-sdk-provider" }, + { name: "XAIPlugin", plugin: XAIPlugin, providerID: "custom", package: "@ai-sdk/xai" }, +] + +describe("provider SDK package matching", () => { + for (const item of cases) { + it.effect(`${item.name} creates an SDK only for its package`, () => + Effect.gen(function* () { + const plugin = yield* PluginV2.Service + yield* plugin.add(item.plugin) + + const ignored = yield* plugin.trigger( + "aisdk.sdk", + { model: model(item.providerID, "model"), package: "unmatched-package", options: item.options ?? {} }, + {}, + ) + expect(ignored.sdk).toBeUndefined() + + const result = yield* plugin.trigger( + "aisdk.sdk", + { model: model(item.providerID, "model"), package: item.package, options: item.options ?? {} }, + {}, + ) + expect(result.sdk).toBeDefined() + }), + ) + } +}) diff --git a/packages/opencode/test/v2/session-message-updater.test.ts b/packages/opencode/test/v2/session-message-updater.test.ts index 44ac031edab5..180483937c54 100644 --- a/packages/opencode/test/v2/session-message-updater.test.ts +++ b/packages/opencode/test/v2/session-message-updater.test.ts @@ -2,7 +2,8 @@ import { expect, test } from "bun:test" import * as DateTime from "effect/DateTime" import { SessionID } from "../../src/session/schema" import { EventV2 } from "../../src/v2/event" -import { Modelv2 } from "../../src/v2/model" +import { ModelV2 } from "@opencode-ai/core/model" +import { ProviderV2 } from "@opencode-ai/core/provider" import { SessionEvent } from "../../src/v2/session-event" import { SessionMessageUpdater } from "../../src/v2/session-message-updater" @@ -18,9 +19,9 @@ test("step snapshots carry over to assistant messages", () => { timestamp: DateTime.makeUnsafe(1), agent: "build", model: { - id: Modelv2.ID.make("model"), - providerID: Modelv2.ProviderID.make("provider"), - variant: Modelv2.VariantID.make("default"), + id: ModelV2.ID.make("model"), + providerID: ProviderV2.ID.make("provider"), + variant: ModelV2.VariantID.make("default"), }, snapshot: "before", }, @@ -62,9 +63,9 @@ test("text ended populates assistant text content", () => { timestamp: DateTime.makeUnsafe(1), agent: "build", model: { - id: Modelv2.ID.make("model"), - providerID: Modelv2.ProviderID.make("provider"), - variant: Modelv2.VariantID.make("default"), + id: ModelV2.ID.make("model"), + providerID: ProviderV2.ID.make("provider"), + variant: ModelV2.VariantID.make("default"), }, }, } satisfies SessionEvent.Event) @@ -106,9 +107,9 @@ test("tool completion stores completed timestamp", () => { timestamp: DateTime.makeUnsafe(1), agent: "build", model: { - id: Modelv2.ID.make("model"), - providerID: Modelv2.ProviderID.make("provider"), - variant: Modelv2.VariantID.make("default"), + id: ModelV2.ID.make("model"), + providerID: ProviderV2.ID.make("provider"), + variant: ModelV2.VariantID.make("default"), }, }, } satisfies SessionEvent.Event) diff --git a/packages/sdk/js/src/v2/gen/sdk.gen.ts b/packages/sdk/js/src/v2/gen/sdk.gen.ts index bf3201a5c081..33ee61c9287c 100644 --- a/packages/sdk/js/src/v2/gen/sdk.gen.ts +++ b/packages/sdk/js/src/v2/gen/sdk.gen.ts @@ -197,6 +197,7 @@ import type { TuiSelectSessionResponses, TuiShowToastResponses, TuiSubmitPromptResponses, + V2ModelListResponses, V2SessionCompactResponses, V2SessionContextResponses, V2SessionListErrors, @@ -4374,11 +4375,48 @@ export class Session3 extends HeyApiClient { } } +export class Model extends HeyApiClient { + /** + * List v2 models + * + * Retrieve available v2 models ordered by release date. + */ + public list( + parameters?: { + directory?: string + workspace?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "query", key: "workspace" }, + ], + }, + ], + ) + return (options?.client ?? this.client).get({ + url: "/api/model", + ...options, + ...params, + }) + } +} + export class V2 extends HeyApiClient { private _session?: Session3 get session(): Session3 { return (this._session ??= new Session3({ client: this.client })) } + + private _model?: Model + get model(): Model { + return (this._model ??= new Model({ client: this.client })) + } } export class Control extends HeyApiClient { diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts index 6b0f4c6f8805..255bcf8571f8 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -3284,6 +3284,78 @@ export type SessionMessage = | SessionMessageAssistant | SessionMessageCompaction +export type ModelV2Info = { + id: string + providerID: string + family?: string + name: string + endpoint: + | { + type: "openai/responses" + url: string + websocket?: boolean + } + | { + type: "openai/completions" + url: string + reasoning?: + | { + type: "reasoning_content" + } + | { + type: "reasoning_details" + } + } + | { + type: "anthropic/messages" + url: string + } + capabilities: { + tools: boolean + input: Array + output: Array + } + options: { + headers: { + [key: string]: string + } + body: { + [key: string]: unknown + } + variant?: string + } + variants: Array<{ + id: string + headers: { + [key: string]: string + } + body: { + [key: string]: unknown + } + }> + time: { + released: number | "NaN" | "Infinity" | "-Infinity" | "Infinity" | "-Infinity" | "NaN" + } + cost: Array<{ + tier?: { + type: "context" + size: number + } + input: number + output: number + cache: { + read: number + write: number + } + }> + status: "alpha" | "beta" | "deprecated" | "active" + limit: { + context: number + input?: number + output: number + } +} + export type EventTuiToastShow1 = { id: string type: "tui.toast.show" @@ -6402,6 +6474,25 @@ export type V2SessionMessagesResponses = { export type V2SessionMessagesResponse2 = V2SessionMessagesResponses[keyof V2SessionMessagesResponses] +export type V2ModelListData = { + body?: never + path?: never + query?: { + directory?: string + workspace?: string + } + url: "/api/model" +} + +export type V2ModelListResponses = { + /** + * Success + */ + 200: Array +} + +export type V2ModelListResponse = V2ModelListResponses[keyof V2ModelListResponses] + export type TuiAppendPromptData = { body?: { text: string diff --git a/specs/v2/provider-model.md b/specs/v2/provider-model.md new file mode 100644 index 000000000000..fe5a98bdd2a1 --- /dev/null +++ b/specs/v2/provider-model.md @@ -0,0 +1,329 @@ +# Provider and Model Catalog + +## Provider Schema + +```ts +export const ID = Schema.String.pipe( + Schema.brand("ProviderV2.ID"), + withStatics((schema) => ({ + opencode: schema.make("opencode"), + anthropic: schema.make("anthropic"), + openai: schema.make("openai"), + google: schema.make("google"), + googleVertex: schema.make("google-vertex"), + githubCopilot: schema.make("github-copilot"), + amazonBedrock: schema.make("amazon-bedrock"), + azure: schema.make("azure"), + openrouter: schema.make("openrouter"), + mistral: schema.make("mistral"), + gitlab: schema.make("gitlab"), + })), +) +export type ID = typeof ID.Type + +const OpenAIResponses = Schema.Struct({ + type: Schema.Literal("openai/responses"), + url: Schema.String, + websocket: Schema.optional(Schema.Boolean), +}) + +const OpenAICompletions = Schema.Struct({ + type: Schema.Literal("openai/completions"), + url: Schema.String, + reasoning: Schema.Union([ + Schema.Struct({ + type: Schema.Literal("reasoning_content"), + }), + Schema.Struct({ + type: Schema.Literal("reasoning_details"), + }), + ]).pipe(Schema.optional), +}) +export type OpenAICompletions = typeof OpenAICompletions.Type + +const AISDK = Schema.Struct({ + type: Schema.Literal("aisdk"), + package: Schema.String, +}) + +const AnthropicMessages = Schema.Struct({ + type: Schema.Literal("anthropic/messages"), + url: Schema.String, +}) + +const UnknownEndpoint = Schema.Struct({ + type: Schema.Literal("unknown"), +}) + +export const Endpoint = Schema.Union([UnknownEndpoint, OpenAIResponses, OpenAICompletions, AnthropicMessages, AISDK]).pipe( + Schema.toTaggedUnion("type"), +) +export type Endpoint = typeof Endpoint.Type + +export const Options = Schema.Struct({ + headers: Schema.Record(Schema.String, Schema.String), + body: Schema.Record(Schema.String, Schema.Any), +}) +export type Options = typeof Options.Type + +export class Info extends Schema.Class("ProviderV2.Info")({ + id: ID, + name: Schema.String, + enabled: Schema.Boolean, + env: Schema.String.pipe(Schema.Array), + endpoint: Endpoint, + options: Options, +}) { + static empty(providerID: ID) { + return new Info({ + id: providerID, + name: providerID, + enabled: false, + env: [], + endpoint: { + type: "unknown", + }, + options: { + headers: {}, + body: {}, + }, + }) + } +} + +export class NotFound extends Schema.TaggedErrorClass("ProviderV2.NotFound")("ProviderV2.NotFound", { + providerID: ID, +}) {} +``` + +## Model Schema + +```ts +export const ID = Schema.String.pipe(Schema.brand("ModelV2.ID")) +export type ID = typeof ID.Type + +export const VariantID = Schema.String.pipe(Schema.brand("VariantID")) +export type VariantID = typeof VariantID.Type + +export const Family = Schema.String.pipe(Schema.brand("Family")) +export type Family = typeof Family.Type + +export const Capabilities = Schema.Struct({ + tools: Schema.Boolean, + input: Schema.String.pipe(Schema.Array), + output: Schema.String.pipe(Schema.Array), +}) +export type Capabilities = typeof Capabilities.Type + +export const Variant = Schema.Struct({ + id: VariantID, + ...ProviderV2.Options.fields, +}) +export type Variant = typeof Variant.Type + +export const Cost = Schema.Struct({ + tier: Schema.Struct({ + type: Schema.Literal("context"), + size: Schema.Int, + }).pipe(Schema.optional), + input: Schema.Finite, + output: Schema.Finite, + cache: Schema.Struct({ + read: Schema.Finite, + write: Schema.Finite, + }), +}) +export type Cost = typeof Cost.Type + +export const Limit = Schema.Struct({ + context: Schema.Int, + input: Schema.Int.pipe(Schema.optional), + output: Schema.Int, +}) +export type Limit = typeof Limit.Type + +export const Ref = Schema.Struct({ + id: ID, + providerID: ProviderV2.ID, + variant: VariantID, +}) +export type Ref = typeof Ref.Type + +export class Info extends Schema.Class("ModelV2.Info")({ + id: ID, + providerID: ProviderV2.ID, + family: Family.pipe(Schema.optional), + name: Schema.String, + endpoint: ProviderV2.Endpoint, + options: Schema.Struct({ + ...ProviderV2.Options.fields, + variant: Schema.String.pipe(Schema.optional), + }), + capabilities: Capabilities, + variants: Variant.pipe(Schema.Array), + time: Schema.Struct({ + released: DateTimeUtcFromMillis, + }), + cost: Cost.pipe(Schema.Array), + status: Schema.Literals(["alpha", "beta", "deprecated", "active"]), + limit: Limit, +}) { + static empty(providerID: ProviderV2.ID, modelID: ID) { + return new Info({ + id: modelID, + providerID, + name: modelID, + endpoint: { + type: "unknown", + }, + capabilities: { + tools: false, + input: [], + output: [], + }, + options: { + headers: {}, + body: {}, + }, + variants: [], + time: { + released: DateTime.makeUnsafe(0), + }, + cost: [], + status: "active", + limit: { + context: 0, + output: 0, + }, + }) + } +} + +``` + +## Catalog Interface + +```ts +export interface Interface { + readonly provider: { + readonly get: (providerID: ProviderV2.ID) => Effect.Effect> + readonly update: (providerID: ProviderV2.ID, fn: (provider: Draft) => void) => Effect.Effect + readonly remove: (providerID: ProviderV2.ID) => Effect.Effect + readonly all: () => Effect.Effect + readonly available: () => Effect.Effect + } + + readonly model: { + readonly get: (providerID: ProviderV2.ID, modelID: ModelV2.ID) => Effect.Effect> + readonly update: ( + providerID: ProviderV2.ID, + modelID: ModelV2.ID, + fn: (model: Draft) => void, + ) => Effect.Effect + readonly remove: (providerID: ProviderV2.ID, modelID: ModelV2.ID) => Effect.Effect + readonly all: () => Effect.Effect + readonly available: () => Effect.Effect + readonly default: () => Effect.Effect> + readonly small: (providerID: ProviderV2.ID) => Effect.Effect> + } +} +``` + +`ProviderV2.Info.enabled` is stored provider state. Provider plugins set this field after checking env, auth, config, or provider-specific availability. + +`ProviderV2.Endpoint` includes `{ type: "unknown" }`. `CatalogV2.model.get()` and `CatalogV2.model.all()` resolve `unknown` endpoints from the provider before returning models. + +Model storage is nested by provider because model ids are only unique within a provider. + +```ts +type ProviderRecord = { + provider: ProviderV2.Info + models: HashMap.HashMap +} + +let records = HashMap.empty() +``` + +`ModelV2.Info` does not have an `enabled` field. Model availability is derived by `CatalogV2.model.available()` from provider state and model status. + +```ts +const available = provider.enabled && model.status !== "deprecated" +``` + +## Plugin Interface + +```ts +export type Definition = Effect.Effect<{ + readonly order: number + readonly hooks: HookFunctions +}, never, R> + +export interface Interface { + readonly add: (input: { + id: ID + definition: Definition + }) => Effect.Effect + + readonly remove: (id: ID) => Effect.Effect + + readonly trigger: ( + name: Name, + input: HookInput, + ) => Effect.Effect> +} +``` + +## Plugin Order + +```ts +export const Order = { + modelsDev: 0, + env: 10, + auth: 20, + provider: 30, + config: 40, + discovery: 50, +} as const +``` + +## Built-In Plugins + +```ts +export const ModelsDevPlugin: PluginV2.Definition + +export const EnvPlugin: PluginV2.Definition + +export const AuthPlugin: PluginV2.Definition + +export const ConfigPlugin: PluginV2.Definition + +export const AnthropicPlugin: PluginV2.Definition + +export const OpenRouterPlugin: PluginV2.Definition + +export const AmazonBedrockPlugin: PluginV2.Definition + +export const GoogleVertexPlugin: PluginV2.Definition + +export const GitLabPlugin: PluginV2.Definition + +export const GitLabDiscoveryPlugin: PluginV2.Definition +``` + +## Plugin Hooks + +```ts +export type Hooks = { + init: {} + + "provider.update": { + provider: Draft + cancel: boolean + } + + "model.update": { + model: Draft + cancel: boolean + } +} +``` From 3c0f72ded235817dd742b4945557298dc2d5e02a Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Sat, 9 May 2026 19:55:46 -0400 Subject: [PATCH 02/18] sync --- bun.lock | 2 +- packages/core/package.json | 1 + .../sdk/copilot => core/src/github-copilot}/README.md | 0 .../chat/convert-to-openai-compatible-chat-messages.ts | 0 .../src/github-copilot}/chat/get-response-metadata.ts | 0 .../chat/map-openai-compatible-finish-reason.ts | 0 .../github-copilot}/chat/openai-compatible-api-types.ts | 0 .../chat/openai-compatible-chat-language-model.ts | 0 .../chat/openai-compatible-chat-options.ts | 0 .../chat/openai-compatible-metadata-extractor.ts | 0 .../chat/openai-compatible-prepare-tools.ts | 0 .../src/github-copilot}/copilot-provider.ts | 0 .../src/github-copilot}/openai-compatible-error.ts | 0 .../responses/convert-to-openai-responses-input.ts | 0 .../responses/map-openai-responses-finish-reason.ts | 0 .../src/github-copilot}/responses/openai-config.ts | 0 .../src/github-copilot}/responses/openai-error.ts | 0 .../responses/openai-responses-api-types.ts | 0 .../responses/openai-responses-language-model.ts | 0 .../responses/openai-responses-prepare-tools.ts | 0 .../responses/openai-responses-settings.ts | 0 .../github-copilot}/responses/tool/code-interpreter.ts | 0 .../src/github-copilot}/responses/tool/file-search.ts | 0 .../github-copilot}/responses/tool/image-generation.ts | 0 .../src/github-copilot}/responses/tool/local-shell.ts | 0 .../github-copilot}/responses/tool/web-search-preview.ts | 0 .../src/github-copilot}/responses/tool/web-search.ts | 0 .../src/v2 => core/src}/plugin/provider/github-copilot.ts | 8 ++++---- packages/core/src/plugin/provider/index.ts | 2 ++ .../github-copilot}/convert-to-copilot-messages.test.ts | 2 +- .../test/github-copilot}/copilot-chat-model.test.ts | 2 +- .../test}/plugin/provider-github-copilot.test.ts | 4 ++-- packages/opencode/package.json | 1 - packages/opencode/src/provider/provider.ts | 3 ++- packages/opencode/src/v2/plugin-boot.ts | 2 +- packages/opencode/src/v2/plugin/provider/index.ts | 7 ------- .../opencode/test/v2/plugin/provider-sdk-matching.test.ts | 2 +- 37 files changed, 16 insertions(+), 20 deletions(-) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/README.md (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/chat/convert-to-openai-compatible-chat-messages.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/chat/get-response-metadata.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/chat/map-openai-compatible-finish-reason.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/chat/openai-compatible-api-types.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/chat/openai-compatible-chat-language-model.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/chat/openai-compatible-chat-options.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/chat/openai-compatible-metadata-extractor.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/chat/openai-compatible-prepare-tools.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/copilot-provider.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/openai-compatible-error.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/responses/convert-to-openai-responses-input.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/responses/map-openai-responses-finish-reason.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/responses/openai-config.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/responses/openai-error.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/responses/openai-responses-api-types.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/responses/openai-responses-language-model.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/responses/openai-responses-prepare-tools.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/responses/openai-responses-settings.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/responses/tool/code-interpreter.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/responses/tool/file-search.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/responses/tool/image-generation.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/responses/tool/local-shell.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/responses/tool/web-search-preview.ts (100%) rename packages/{opencode/src/provider/sdk/copilot => core/src/github-copilot}/responses/tool/web-search.ts (100%) rename packages/{opencode/src/v2 => core/src}/plugin/provider/github-copilot.ts (86%) rename packages/{opencode/test/provider/copilot => core/test/github-copilot}/convert-to-copilot-messages.test.ts (99%) rename packages/{opencode/test/provider/copilot => core/test/github-copilot}/copilot-chat-model.test.ts (99%) rename packages/{opencode/test/v2 => core/test}/plugin/provider-github-copilot.test.ts (97%) delete mode 100644 packages/opencode/src/v2/plugin/provider/index.ts diff --git a/bun.lock b/bun.lock index 467ffed5410a..2f6401c5b485 100644 --- a/bun.lock +++ b/bun.lock @@ -216,6 +216,7 @@ "@ai-sdk/openai-compatible": "2.0.41", "@ai-sdk/perplexity": "3.0.26", "@ai-sdk/provider": "3.0.8", + "@ai-sdk/provider-utils": "4.0.23", "@ai-sdk/togetherai": "2.0.41", "@ai-sdk/vercel": "2.0.39", "@ai-sdk/xai": "3.0.82", @@ -410,7 +411,6 @@ "@ai-sdk/openai-compatible": "2.0.41", "@ai-sdk/perplexity": "3.0.26", "@ai-sdk/provider": "3.0.8", - "@ai-sdk/provider-utils": "4.0.23", "@ai-sdk/togetherai": "2.0.41", "@ai-sdk/vercel": "2.0.39", "@ai-sdk/xai": "3.0.82", diff --git a/packages/core/package.json b/packages/core/package.json index 1c56d88c2d49..4c47fea8b916 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -42,6 +42,7 @@ "@ai-sdk/openai-compatible": "2.0.41", "@ai-sdk/perplexity": "3.0.26", "@ai-sdk/provider": "3.0.8", + "@ai-sdk/provider-utils": "4.0.23", "@ai-sdk/togetherai": "2.0.41", "@ai-sdk/vercel": "2.0.39", "@ai-sdk/xai": "3.0.82", diff --git a/packages/opencode/src/provider/sdk/copilot/README.md b/packages/core/src/github-copilot/README.md similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/README.md rename to packages/core/src/github-copilot/README.md diff --git a/packages/opencode/src/provider/sdk/copilot/chat/convert-to-openai-compatible-chat-messages.ts b/packages/core/src/github-copilot/chat/convert-to-openai-compatible-chat-messages.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/chat/convert-to-openai-compatible-chat-messages.ts rename to packages/core/src/github-copilot/chat/convert-to-openai-compatible-chat-messages.ts diff --git a/packages/opencode/src/provider/sdk/copilot/chat/get-response-metadata.ts b/packages/core/src/github-copilot/chat/get-response-metadata.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/chat/get-response-metadata.ts rename to packages/core/src/github-copilot/chat/get-response-metadata.ts diff --git a/packages/opencode/src/provider/sdk/copilot/chat/map-openai-compatible-finish-reason.ts b/packages/core/src/github-copilot/chat/map-openai-compatible-finish-reason.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/chat/map-openai-compatible-finish-reason.ts rename to packages/core/src/github-copilot/chat/map-openai-compatible-finish-reason.ts diff --git a/packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-api-types.ts b/packages/core/src/github-copilot/chat/openai-compatible-api-types.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-api-types.ts rename to packages/core/src/github-copilot/chat/openai-compatible-api-types.ts diff --git a/packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-chat-language-model.ts b/packages/core/src/github-copilot/chat/openai-compatible-chat-language-model.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-chat-language-model.ts rename to packages/core/src/github-copilot/chat/openai-compatible-chat-language-model.ts diff --git a/packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-chat-options.ts b/packages/core/src/github-copilot/chat/openai-compatible-chat-options.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-chat-options.ts rename to packages/core/src/github-copilot/chat/openai-compatible-chat-options.ts diff --git a/packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-metadata-extractor.ts b/packages/core/src/github-copilot/chat/openai-compatible-metadata-extractor.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-metadata-extractor.ts rename to packages/core/src/github-copilot/chat/openai-compatible-metadata-extractor.ts diff --git a/packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-prepare-tools.ts b/packages/core/src/github-copilot/chat/openai-compatible-prepare-tools.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-prepare-tools.ts rename to packages/core/src/github-copilot/chat/openai-compatible-prepare-tools.ts diff --git a/packages/opencode/src/provider/sdk/copilot/copilot-provider.ts b/packages/core/src/github-copilot/copilot-provider.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/copilot-provider.ts rename to packages/core/src/github-copilot/copilot-provider.ts diff --git a/packages/opencode/src/provider/sdk/copilot/openai-compatible-error.ts b/packages/core/src/github-copilot/openai-compatible-error.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/openai-compatible-error.ts rename to packages/core/src/github-copilot/openai-compatible-error.ts diff --git a/packages/opencode/src/provider/sdk/copilot/responses/convert-to-openai-responses-input.ts b/packages/core/src/github-copilot/responses/convert-to-openai-responses-input.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/responses/convert-to-openai-responses-input.ts rename to packages/core/src/github-copilot/responses/convert-to-openai-responses-input.ts diff --git a/packages/opencode/src/provider/sdk/copilot/responses/map-openai-responses-finish-reason.ts b/packages/core/src/github-copilot/responses/map-openai-responses-finish-reason.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/responses/map-openai-responses-finish-reason.ts rename to packages/core/src/github-copilot/responses/map-openai-responses-finish-reason.ts diff --git a/packages/opencode/src/provider/sdk/copilot/responses/openai-config.ts b/packages/core/src/github-copilot/responses/openai-config.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/responses/openai-config.ts rename to packages/core/src/github-copilot/responses/openai-config.ts diff --git a/packages/opencode/src/provider/sdk/copilot/responses/openai-error.ts b/packages/core/src/github-copilot/responses/openai-error.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/responses/openai-error.ts rename to packages/core/src/github-copilot/responses/openai-error.ts diff --git a/packages/opencode/src/provider/sdk/copilot/responses/openai-responses-api-types.ts b/packages/core/src/github-copilot/responses/openai-responses-api-types.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/responses/openai-responses-api-types.ts rename to packages/core/src/github-copilot/responses/openai-responses-api-types.ts diff --git a/packages/opencode/src/provider/sdk/copilot/responses/openai-responses-language-model.ts b/packages/core/src/github-copilot/responses/openai-responses-language-model.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/responses/openai-responses-language-model.ts rename to packages/core/src/github-copilot/responses/openai-responses-language-model.ts diff --git a/packages/opencode/src/provider/sdk/copilot/responses/openai-responses-prepare-tools.ts b/packages/core/src/github-copilot/responses/openai-responses-prepare-tools.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/responses/openai-responses-prepare-tools.ts rename to packages/core/src/github-copilot/responses/openai-responses-prepare-tools.ts diff --git a/packages/opencode/src/provider/sdk/copilot/responses/openai-responses-settings.ts b/packages/core/src/github-copilot/responses/openai-responses-settings.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/responses/openai-responses-settings.ts rename to packages/core/src/github-copilot/responses/openai-responses-settings.ts diff --git a/packages/opencode/src/provider/sdk/copilot/responses/tool/code-interpreter.ts b/packages/core/src/github-copilot/responses/tool/code-interpreter.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/responses/tool/code-interpreter.ts rename to packages/core/src/github-copilot/responses/tool/code-interpreter.ts diff --git a/packages/opencode/src/provider/sdk/copilot/responses/tool/file-search.ts b/packages/core/src/github-copilot/responses/tool/file-search.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/responses/tool/file-search.ts rename to packages/core/src/github-copilot/responses/tool/file-search.ts diff --git a/packages/opencode/src/provider/sdk/copilot/responses/tool/image-generation.ts b/packages/core/src/github-copilot/responses/tool/image-generation.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/responses/tool/image-generation.ts rename to packages/core/src/github-copilot/responses/tool/image-generation.ts diff --git a/packages/opencode/src/provider/sdk/copilot/responses/tool/local-shell.ts b/packages/core/src/github-copilot/responses/tool/local-shell.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/responses/tool/local-shell.ts rename to packages/core/src/github-copilot/responses/tool/local-shell.ts diff --git a/packages/opencode/src/provider/sdk/copilot/responses/tool/web-search-preview.ts b/packages/core/src/github-copilot/responses/tool/web-search-preview.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/responses/tool/web-search-preview.ts rename to packages/core/src/github-copilot/responses/tool/web-search-preview.ts diff --git a/packages/opencode/src/provider/sdk/copilot/responses/tool/web-search.ts b/packages/core/src/github-copilot/responses/tool/web-search.ts similarity index 100% rename from packages/opencode/src/provider/sdk/copilot/responses/tool/web-search.ts rename to packages/core/src/github-copilot/responses/tool/web-search.ts diff --git a/packages/opencode/src/v2/plugin/provider/github-copilot.ts b/packages/core/src/plugin/provider/github-copilot.ts similarity index 86% rename from packages/opencode/src/v2/plugin/provider/github-copilot.ts rename to packages/core/src/plugin/provider/github-copilot.ts index beb30392f8a4..31e57ba12ab6 100644 --- a/packages/opencode/src/v2/plugin/provider/github-copilot.ts +++ b/packages/core/src/plugin/provider/github-copilot.ts @@ -1,7 +1,7 @@ import { Effect } from "effect" -import { ModelV2 } from "@opencode-ai/core/model" -import { PluginV2 } from "@opencode-ai/core/plugin" -import { ProviderV2 } from "@opencode-ai/core/provider" +import { ModelV2 } from "../../model" +import { PluginV2 } from "../../plugin" +import { ProviderV2 } from "../../provider" function shouldUseResponses(modelID: string) { // Copilot supports Responses for GPT-5 class models, except mini variants @@ -20,7 +20,7 @@ export const GithubCopilotPlugin = PluginV2.define({ }), "aisdk.sdk": Effect.fn(function* (evt) { if (evt.package !== "@ai-sdk/github-copilot") return - const mod = yield* Effect.promise(() => import("../../../provider/sdk/copilot/copilot-provider")) + const mod = yield* Effect.promise(() => import("../../github-copilot/copilot-provider")) evt.sdk = mod.createOpenaiCompatible(evt.options) }), "aisdk.language": Effect.fn(function* (evt) { diff --git a/packages/core/src/plugin/provider/index.ts b/packages/core/src/plugin/provider/index.ts index 5f0905fabfe8..fd02d322a1f9 100644 --- a/packages/core/src/plugin/provider/index.ts +++ b/packages/core/src/plugin/provider/index.ts @@ -9,6 +9,7 @@ import { CoherePlugin } from "./cohere" import { DeepInfraPlugin } from "./deepinfra" import { DynamicProviderPlugin } from "./dynamic" import { GatewayPlugin } from "./gateway" +import { GithubCopilotPlugin } from "./github-copilot" import { GitLabPlugin } from "./gitlab" import { GooglePlugin } from "./google" import { GoogleVertexAnthropicPlugin, GoogleVertexPlugin } from "./google-vertex" @@ -41,6 +42,7 @@ export const ProviderPlugins = [ CoherePlugin, DeepInfraPlugin, GatewayPlugin, + GithubCopilotPlugin, GitLabPlugin, GooglePlugin, GoogleVertexAnthropicPlugin, diff --git a/packages/opencode/test/provider/copilot/convert-to-copilot-messages.test.ts b/packages/core/test/github-copilot/convert-to-copilot-messages.test.ts similarity index 99% rename from packages/opencode/test/provider/copilot/convert-to-copilot-messages.test.ts rename to packages/core/test/github-copilot/convert-to-copilot-messages.test.ts index 6f874db6d2e9..65f4b6a5369c 100644 --- a/packages/opencode/test/provider/copilot/convert-to-copilot-messages.test.ts +++ b/packages/core/test/github-copilot/convert-to-copilot-messages.test.ts @@ -1,4 +1,4 @@ -import { convertToOpenAICompatibleChatMessages as convertToCopilotMessages } from "@/provider/sdk/copilot/chat/convert-to-openai-compatible-chat-messages" +import { convertToOpenAICompatibleChatMessages as convertToCopilotMessages } from "@opencode-ai/core/github-copilot/chat/convert-to-openai-compatible-chat-messages" import { describe, test, expect } from "bun:test" describe("system messages", () => { diff --git a/packages/opencode/test/provider/copilot/copilot-chat-model.test.ts b/packages/core/test/github-copilot/copilot-chat-model.test.ts similarity index 99% rename from packages/opencode/test/provider/copilot/copilot-chat-model.test.ts rename to packages/core/test/github-copilot/copilot-chat-model.test.ts index 389a72bb377b..bc1e2ecd956e 100644 --- a/packages/opencode/test/provider/copilot/copilot-chat-model.test.ts +++ b/packages/core/test/github-copilot/copilot-chat-model.test.ts @@ -1,4 +1,4 @@ -import { OpenAICompatibleChatLanguageModel } from "@/provider/sdk/copilot/chat/openai-compatible-chat-language-model" +import { OpenAICompatibleChatLanguageModel } from "@opencode-ai/core/github-copilot/chat/openai-compatible-chat-language-model" import { describe, test, expect, mock } from "bun:test" import type { LanguageModelV3Prompt } from "@ai-sdk/provider" diff --git a/packages/opencode/test/v2/plugin/provider-github-copilot.test.ts b/packages/core/test/plugin/provider-github-copilot.test.ts similarity index 97% rename from packages/opencode/test/v2/plugin/provider-github-copilot.test.ts rename to packages/core/test/plugin/provider-github-copilot.test.ts index c31ec2190f7b..c825f7b8ec1e 100644 --- a/packages/opencode/test/v2/plugin/provider-github-copilot.test.ts +++ b/packages/core/test/plugin/provider-github-copilot.test.ts @@ -2,8 +2,8 @@ import { describe, expect } from "bun:test" import { Effect } from "effect" import { ModelV2 } from "@opencode-ai/core/model" import { PluginV2 } from "@opencode-ai/core/plugin" -import { GithubCopilotPlugin } from "../../../src/v2/plugin/provider/github-copilot" -import { fakeSelectorSdk, it, model } from "../../../../core/test/v2/plugin/provider-helper" +import { GithubCopilotPlugin } from "@opencode-ai/core/plugin/provider/github-copilot" +import { fakeSelectorSdk, it, model } from "../v2/plugin/provider-helper" describe("GithubCopilotPlugin", () => { it.effect("creates the bundled Copilot SDK for the GitHub Copilot package", () => diff --git a/packages/opencode/package.json b/packages/opencode/package.json index e9b811fc5e1d..e9e2089aeb70 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -91,7 +91,6 @@ "@ai-sdk/openai-compatible": "2.0.41", "@ai-sdk/perplexity": "3.0.26", "@ai-sdk/provider": "3.0.8", - "@ai-sdk/provider-utils": "4.0.23", "@ai-sdk/togetherai": "2.0.41", "@ai-sdk/vercel": "2.0.39", "@ai-sdk/xai": "3.0.82", diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index 38ab35908ef8..82cd8c24c796 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -112,7 +112,8 @@ const BUNDLED_PROVIDERS: Record Promise<(opts: any) => BundledSDK> "@ai-sdk/vercel": () => import("@ai-sdk/vercel").then((m) => m.createVercel), "@ai-sdk/alibaba": () => import("@ai-sdk/alibaba").then((m) => m.createAlibaba), "gitlab-ai-provider": () => import("gitlab-ai-provider").then((m) => m.createGitLab), - "@ai-sdk/github-copilot": () => import("./sdk/copilot/copilot-provider").then((m) => m.createOpenaiCompatible), + "@ai-sdk/github-copilot": () => + import("@opencode-ai/core/github-copilot/copilot-provider").then((m) => m.createOpenaiCompatible), "venice-ai-sdk-provider": () => import("venice-ai-sdk-provider").then((m) => m.createVenice), } diff --git a/packages/opencode/src/v2/plugin-boot.ts b/packages/opencode/src/v2/plugin-boot.ts index 9e9e3685e4bd..d19872f2d24f 100644 --- a/packages/opencode/src/v2/plugin-boot.ts +++ b/packages/opencode/src/v2/plugin-boot.ts @@ -7,8 +7,8 @@ import { Catalog } from "@opencode-ai/core/catalog" import { PluginV2 } from "@opencode-ai/core/plugin" import { AuthPlugin } from "@opencode-ai/core/plugin/auth" import { EnvPlugin } from "@opencode-ai/core/plugin/env" +import { ProviderPlugins } from "@opencode-ai/core/plugin/provider" import { ModelsDevPlugin } from "./plugin/models-dev" -import { ProviderPlugins } from "./plugin/provider" type Plugin = { id: PluginV2.ID diff --git a/packages/opencode/src/v2/plugin/provider/index.ts b/packages/opencode/src/v2/plugin/provider/index.ts deleted file mode 100644 index 312702db8304..000000000000 --- a/packages/opencode/src/v2/plugin/provider/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { ProviderPlugins as CoreProviderPlugins } from "@opencode-ai/core/plugin/provider" -import { GithubCopilotPlugin } from "./github-copilot" - -export const ProviderPlugins = [ - ...CoreProviderPlugins, - GithubCopilotPlugin, -] diff --git a/packages/opencode/test/v2/plugin/provider-sdk-matching.test.ts b/packages/opencode/test/v2/plugin/provider-sdk-matching.test.ts index 411ca8c6845b..8cd362d284a5 100644 --- a/packages/opencode/test/v2/plugin/provider-sdk-matching.test.ts +++ b/packages/opencode/test/v2/plugin/provider-sdk-matching.test.ts @@ -8,7 +8,7 @@ import { CerebrasPlugin } from "@opencode-ai/core/plugin/provider/cerebras" import { CoherePlugin } from "@opencode-ai/core/plugin/provider/cohere" import { DeepInfraPlugin } from "@opencode-ai/core/plugin/provider/deepinfra" import { GatewayPlugin } from "@opencode-ai/core/plugin/provider/gateway" -import { GithubCopilotPlugin } from "../../../src/v2/plugin/provider/github-copilot" +import { GithubCopilotPlugin } from "@opencode-ai/core/plugin/provider/github-copilot" import { GooglePlugin } from "@opencode-ai/core/plugin/provider/google" import { GoogleVertexAnthropicPlugin, GoogleVertexPlugin } from "@opencode-ai/core/plugin/provider/google-vertex" import { GroqPlugin } from "@opencode-ai/core/plugin/provider/groq" From 4b56dae0a9a42d2834090dd8bfdfa098a9ec6975 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Sun, 10 May 2026 18:59:46 -0400 Subject: [PATCH 03/18] core: move gateway provider test --- .../test/v2/plugin/provider-gateway.test.ts | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) rename packages/{opencode => core}/test/v2/plugin/provider-gateway.test.ts (76%) diff --git a/packages/opencode/test/v2/plugin/provider-gateway.test.ts b/packages/core/test/v2/plugin/provider-gateway.test.ts similarity index 76% rename from packages/opencode/test/v2/plugin/provider-gateway.test.ts rename to packages/core/test/v2/plugin/provider-gateway.test.ts index 2272710eedac..8ee69b7dd49a 100644 --- a/packages/opencode/test/v2/plugin/provider-gateway.test.ts +++ b/packages/core/test/v2/plugin/provider-gateway.test.ts @@ -2,14 +2,10 @@ import { describe, expect, mock } from "bun:test" import { Effect } from "effect" import { PluginV2 } from "@opencode-ai/core/plugin" import { GatewayPlugin } from "@opencode-ai/core/plugin/provider/gateway" -import { snapshot } from "../../../src/provider/models-snapshot.js" -import { it, model } from "../../../../core/test/v2/plugin/provider-helper" +import { it, model } from "./provider-helper" const gatewayCalls: Record[] = [] -const vercel = snapshot.vercel as { - npm?: string - models: Record -} +const vercelGatewayModels = ["anthropic/claude-sonnet-4", "openai/gpt-5", "google/gemini-2.5-pro"] mock.module("@ai-sdk/gateway", () => ({ createGateway(options: Record) { @@ -63,17 +59,13 @@ describe("GatewayPlugin", () => { }), ) - it.effect("matches real Vercel AI Gateway models by their inherited @ai-sdk/gateway package", () => + it.effect("matches Vercel AI Gateway models by their @ai-sdk/gateway package", () => Effect.gen(function* () { gatewayCalls.length = 0 const plugin = yield* PluginV2.Service yield* plugin.add(GatewayPlugin) - for (const modelID of ["anthropic/claude-sonnet-4", "openai/gpt-5", "google/gemini-2.5-pro"]) { - const realModel = vercel.models[modelID] - const packageName = realModel.provider?.npm ?? vercel.npm ?? "" - expect(packageName).toBe("@ai-sdk/gateway") - + for (const modelID of vercelGatewayModels) { const ignored = yield* plugin.trigger( "aisdk.sdk", { model: model("vercel", modelID), package: "@ai-sdk/vercel", options: { name: "vercel" } }, @@ -83,7 +75,7 @@ describe("GatewayPlugin", () => { const result = yield* plugin.trigger( "aisdk.sdk", - { model: model("vercel", modelID), package: packageName, options: { name: "vercel" } }, + { model: model("vercel", modelID), package: "@ai-sdk/gateway", options: { name: "vercel" } }, {}, ) expect(result.sdk).toBeDefined() From 3648626179cec581efd5d5fb7b4b34a91aceb821 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Tue, 12 May 2026 00:31:45 -0400 Subject: [PATCH 04/18] fix: preserve instance context for event stream --- .../server/routes/instance/httpapi/event.ts | 63 ++++++++++++------- 1 file changed, 39 insertions(+), 24 deletions(-) diff --git a/packages/opencode/src/server/routes/instance/httpapi/event.ts b/packages/opencode/src/server/routes/instance/httpapi/event.ts index 8113c76f51dc..bc29f2d6db9c 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/event.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/event.ts @@ -1,6 +1,6 @@ import { Bus } from "@/bus" import * as Log from "@opencode-ai/core/util/log" -import { Effect, Schema } from "effect" +import { Effect, Queue, Schema } from "effect" import * as Stream from "effect/Stream" import { HttpServerResponse } from "effect/unstable/http" import { HttpApi, HttpApiBuilder, HttpApiEndpoint, HttpApiGroup, HttpApiSchema, OpenApi } from "effect/unstable/httpapi" @@ -9,6 +9,12 @@ import { WorkspaceRoutingQuery } from "./middleware/workspace-routing" const log = Log.create({ service: "server" }) +type EventPayload = { + id: string + type: string + properties: Record +} + export const EventPaths = { event: "/event", } as const @@ -40,30 +46,39 @@ function eventData(data: unknown): Sse.Event { } function eventResponse(bus: Bus.Interface) { - const events = bus.subscribeAll().pipe(Stream.takeUntil((event) => event.type === Bus.InstanceDisposed.type)) - const heartbeat = Stream.tick("10 seconds").pipe( - Stream.drop(1), - Stream.map(() => ({ id: Bus.createID(), type: "server.heartbeat", properties: {} })), - ) + return Effect.gen(function* () { + const queue = yield* Queue.unbounded() + const unsubscribe = yield* bus.subscribeAllCallback((event) => Queue.offerUnsafe(queue, event)) + const events = Stream.fromQueue(queue).pipe(Stream.takeUntil((event) => event.type === Bus.InstanceDisposed.type)) + const heartbeat = Stream.tick("10 seconds").pipe( + Stream.drop(1), + Stream.map(() => ({ id: Bus.createID(), type: "server.heartbeat", properties: {} })), + ) - log.info("event connected") - return HttpServerResponse.stream( - Stream.make({ id: Bus.createID(), type: "server.connected", properties: {} }).pipe( - Stream.concat(events.pipe(Stream.merge(heartbeat, { haltStrategy: "left" }))), - Stream.map(eventData), - Stream.pipeThroughChannel(Sse.encode()), - Stream.encodeText, - Stream.ensuring(Effect.sync(() => log.info("event disconnected"))), - ), - { - contentType: "text/event-stream", - headers: { - "Cache-Control": "no-cache, no-transform", - "X-Accel-Buffering": "no", - "X-Content-Type-Options": "nosniff", + log.info("event connected") + return HttpServerResponse.stream( + Stream.make({ id: Bus.createID(), type: "server.connected", properties: {} }).pipe( + Stream.concat(events.pipe(Stream.merge(heartbeat, { haltStrategy: "left" }))), + Stream.map(eventData), + Stream.pipeThroughChannel(Sse.encode()), + Stream.encodeText, + Stream.ensuring( + Effect.sync(unsubscribe).pipe( + Effect.andThen(Queue.shutdown(queue)), + Effect.andThen(Effect.sync(() => log.info("event disconnected"))), + ), + ), + ), + { + contentType: "text/event-stream", + headers: { + "Cache-Control": "no-cache, no-transform", + "X-Accel-Buffering": "no", + "X-Content-Type-Options": "nosniff", + }, }, - }, - ) + ) + }) } export const eventHandlers = HttpApiBuilder.group(EventApi, "event", (handlers) => @@ -72,7 +87,7 @@ export const eventHandlers = HttpApiBuilder.group(EventApi, "event", (handlers) return handlers.handleRaw( "subscribe", Effect.fn("EventHttpApi.subscribe")(function* () { - return eventResponse(bus) + return yield* eventResponse(bus) }), ) }), From e5812aa770f8926c04e372ad37c546d106f27faa Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Tue, 12 May 2026 00:54:39 -0400 Subject: [PATCH 05/18] test: relax queued prompt timeout --- .../server/routes/instance/httpapi/event.ts | 63 +++++++------------ packages/opencode/test/session/prompt.test.ts | 2 +- 2 files changed, 25 insertions(+), 40 deletions(-) diff --git a/packages/opencode/src/server/routes/instance/httpapi/event.ts b/packages/opencode/src/server/routes/instance/httpapi/event.ts index bc29f2d6db9c..8113c76f51dc 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/event.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/event.ts @@ -1,6 +1,6 @@ import { Bus } from "@/bus" import * as Log from "@opencode-ai/core/util/log" -import { Effect, Queue, Schema } from "effect" +import { Effect, Schema } from "effect" import * as Stream from "effect/Stream" import { HttpServerResponse } from "effect/unstable/http" import { HttpApi, HttpApiBuilder, HttpApiEndpoint, HttpApiGroup, HttpApiSchema, OpenApi } from "effect/unstable/httpapi" @@ -9,12 +9,6 @@ import { WorkspaceRoutingQuery } from "./middleware/workspace-routing" const log = Log.create({ service: "server" }) -type EventPayload = { - id: string - type: string - properties: Record -} - export const EventPaths = { event: "/event", } as const @@ -46,39 +40,30 @@ function eventData(data: unknown): Sse.Event { } function eventResponse(bus: Bus.Interface) { - return Effect.gen(function* () { - const queue = yield* Queue.unbounded() - const unsubscribe = yield* bus.subscribeAllCallback((event) => Queue.offerUnsafe(queue, event)) - const events = Stream.fromQueue(queue).pipe(Stream.takeUntil((event) => event.type === Bus.InstanceDisposed.type)) - const heartbeat = Stream.tick("10 seconds").pipe( - Stream.drop(1), - Stream.map(() => ({ id: Bus.createID(), type: "server.heartbeat", properties: {} })), - ) + const events = bus.subscribeAll().pipe(Stream.takeUntil((event) => event.type === Bus.InstanceDisposed.type)) + const heartbeat = Stream.tick("10 seconds").pipe( + Stream.drop(1), + Stream.map(() => ({ id: Bus.createID(), type: "server.heartbeat", properties: {} })), + ) - log.info("event connected") - return HttpServerResponse.stream( - Stream.make({ id: Bus.createID(), type: "server.connected", properties: {} }).pipe( - Stream.concat(events.pipe(Stream.merge(heartbeat, { haltStrategy: "left" }))), - Stream.map(eventData), - Stream.pipeThroughChannel(Sse.encode()), - Stream.encodeText, - Stream.ensuring( - Effect.sync(unsubscribe).pipe( - Effect.andThen(Queue.shutdown(queue)), - Effect.andThen(Effect.sync(() => log.info("event disconnected"))), - ), - ), - ), - { - contentType: "text/event-stream", - headers: { - "Cache-Control": "no-cache, no-transform", - "X-Accel-Buffering": "no", - "X-Content-Type-Options": "nosniff", - }, + log.info("event connected") + return HttpServerResponse.stream( + Stream.make({ id: Bus.createID(), type: "server.connected", properties: {} }).pipe( + Stream.concat(events.pipe(Stream.merge(heartbeat, { haltStrategy: "left" }))), + Stream.map(eventData), + Stream.pipeThroughChannel(Sse.encode()), + Stream.encodeText, + Stream.ensuring(Effect.sync(() => log.info("event disconnected"))), + ), + { + contentType: "text/event-stream", + headers: { + "Cache-Control": "no-cache, no-transform", + "X-Accel-Buffering": "no", + "X-Content-Type-Options": "nosniff", }, - ) - }) + }, + ) } export const eventHandlers = HttpApiBuilder.group(EventApi, "event", (handlers) => @@ -87,7 +72,7 @@ export const eventHandlers = HttpApiBuilder.group(EventApi, "event", (handlers) return handlers.handleRaw( "subscribe", Effect.fn("EventHttpApi.subscribe")(function* () { - return yield* eventResponse(bus) + return eventResponse(bus) }), ) }), diff --git a/packages/opencode/test/session/prompt.test.ts b/packages/opencode/test/session/prompt.test.ts index 3821954945f5..b0a2bc3a4fbf 100644 --- a/packages/opencode/test/session/prompt.test.ts +++ b/packages/opencode/test/session/prompt.test.ts @@ -1048,7 +1048,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 3_000, + 10_000, ) it.live( From d960d4ac86dfd263b795a0988c7bbac83ffdcabb Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Tue, 12 May 2026 01:29:27 -0400 Subject: [PATCH 06/18] fix: preserve context for SDK event stream --- .../server/routes/instance/httpapi/event.ts | 63 ++++++++++++------- 1 file changed, 39 insertions(+), 24 deletions(-) diff --git a/packages/opencode/src/server/routes/instance/httpapi/event.ts b/packages/opencode/src/server/routes/instance/httpapi/event.ts index 8113c76f51dc..bc29f2d6db9c 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/event.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/event.ts @@ -1,6 +1,6 @@ import { Bus } from "@/bus" import * as Log from "@opencode-ai/core/util/log" -import { Effect, Schema } from "effect" +import { Effect, Queue, Schema } from "effect" import * as Stream from "effect/Stream" import { HttpServerResponse } from "effect/unstable/http" import { HttpApi, HttpApiBuilder, HttpApiEndpoint, HttpApiGroup, HttpApiSchema, OpenApi } from "effect/unstable/httpapi" @@ -9,6 +9,12 @@ import { WorkspaceRoutingQuery } from "./middleware/workspace-routing" const log = Log.create({ service: "server" }) +type EventPayload = { + id: string + type: string + properties: Record +} + export const EventPaths = { event: "/event", } as const @@ -40,30 +46,39 @@ function eventData(data: unknown): Sse.Event { } function eventResponse(bus: Bus.Interface) { - const events = bus.subscribeAll().pipe(Stream.takeUntil((event) => event.type === Bus.InstanceDisposed.type)) - const heartbeat = Stream.tick("10 seconds").pipe( - Stream.drop(1), - Stream.map(() => ({ id: Bus.createID(), type: "server.heartbeat", properties: {} })), - ) + return Effect.gen(function* () { + const queue = yield* Queue.unbounded() + const unsubscribe = yield* bus.subscribeAllCallback((event) => Queue.offerUnsafe(queue, event)) + const events = Stream.fromQueue(queue).pipe(Stream.takeUntil((event) => event.type === Bus.InstanceDisposed.type)) + const heartbeat = Stream.tick("10 seconds").pipe( + Stream.drop(1), + Stream.map(() => ({ id: Bus.createID(), type: "server.heartbeat", properties: {} })), + ) - log.info("event connected") - return HttpServerResponse.stream( - Stream.make({ id: Bus.createID(), type: "server.connected", properties: {} }).pipe( - Stream.concat(events.pipe(Stream.merge(heartbeat, { haltStrategy: "left" }))), - Stream.map(eventData), - Stream.pipeThroughChannel(Sse.encode()), - Stream.encodeText, - Stream.ensuring(Effect.sync(() => log.info("event disconnected"))), - ), - { - contentType: "text/event-stream", - headers: { - "Cache-Control": "no-cache, no-transform", - "X-Accel-Buffering": "no", - "X-Content-Type-Options": "nosniff", + log.info("event connected") + return HttpServerResponse.stream( + Stream.make({ id: Bus.createID(), type: "server.connected", properties: {} }).pipe( + Stream.concat(events.pipe(Stream.merge(heartbeat, { haltStrategy: "left" }))), + Stream.map(eventData), + Stream.pipeThroughChannel(Sse.encode()), + Stream.encodeText, + Stream.ensuring( + Effect.sync(unsubscribe).pipe( + Effect.andThen(Queue.shutdown(queue)), + Effect.andThen(Effect.sync(() => log.info("event disconnected"))), + ), + ), + ), + { + contentType: "text/event-stream", + headers: { + "Cache-Control": "no-cache, no-transform", + "X-Accel-Buffering": "no", + "X-Content-Type-Options": "nosniff", + }, }, - }, - ) + ) + }) } export const eventHandlers = HttpApiBuilder.group(EventApi, "event", (handlers) => @@ -72,7 +87,7 @@ export const eventHandlers = HttpApiBuilder.group(EventApi, "event", (handlers) return handlers.handleRaw( "subscribe", Effect.fn("EventHttpApi.subscribe")(function* () { - return eventResponse(bus) + return yield* eventResponse(bus) }), ) }), From 6e8f113ccb1be4d1484fd80138c1fed42a7e39ff Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Tue, 12 May 2026 01:47:59 -0400 Subject: [PATCH 07/18] test: stabilize linux timing assertions --- .../opencode/test/session/compaction.test.ts | 4 ++-- packages/opencode/test/session/prompt.test.ts | 16 +++++++++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/opencode/test/session/compaction.test.ts b/packages/opencode/test/session/compaction.test.ts index c7f349d5cea0..57110402dc2d 100644 --- a/packages/opencode/test/session/compaction.test.ts +++ b/packages/opencode/test/session/compaction.test.ts @@ -1240,12 +1240,12 @@ describe("session.compaction.process", () => { yield* Deferred.await(ready).pipe(Effect.timeout("1 second")) const start = Date.now() yield* Fiber.interrupt(fiber) - const exit = yield* Fiber.await(fiber).pipe(Effect.timeout("250 millis")) + const exit = yield* Fiber.await(fiber).pipe(Effect.timeout("1 second")) expect(Exit.isFailure(exit)).toBe(true) if (Exit.isFailure(exit)) { expect(Cause.hasInterrupts(exit.cause)).toBe(true) - expect(Date.now() - start).toBeLessThan(250) + expect(Date.now() - start).toBeLessThan(1_000) } }).pipe(withCompaction({ llm: stub.layer })) }, diff --git a/packages/opencode/test/session/prompt.test.ts b/packages/opencode/test/session/prompt.test.ts index b0a2bc3a4fbf..b7d820ad3c1d 100644 --- a/packages/opencode/test/session/prompt.test.ts +++ b/packages/opencode/test/session/prompt.test.ts @@ -1343,7 +1343,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 3_000, + 10_000, ) it.live( @@ -1524,7 +1524,17 @@ unix( const run = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) yield* llm.wait(1) - yield* Effect.sleep(150) + yield* Effect.promise(async () => { + const end = Date.now() + 5_000 + while (Date.now() < end) { + const msgs = await MessageV2.filterCompacted(MessageV2.stream(chat.id)) + const assistant = msgs.find((item) => item.info.role === "assistant") + const tool = assistant ? toolPart(assistant.parts) : undefined + if (tool?.state.status === "running" && String(tool.state.metadata?.output ?? "").length > 2_000) return + await new Promise((done) => setTimeout(done, 20)) + } + throw new Error("timed out waiting for bash output before cancellation") + }) yield* prompt.cancel(chat.id) const exit = yield* Fiber.await(run) @@ -1540,7 +1550,7 @@ unix( expect(tool.state.output).toMatch(/Full output saved to:\s+\S+/) expect(tool.state.output).not.toContain("Tool execution aborted") }), - { git: true, config: providerCfg }, + { git: true, config: (url) => ({ ...providerCfg(url), tool_output: { max_bytes: 1_024 } }) }, ), 30_000, ) From 284d0da8b98ca2aa31181afc8a29541e25f503c0 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Tue, 12 May 2026 02:29:30 -0400 Subject: [PATCH 08/18] test: cover v2 provider model routes --- packages/opencode/test/server/httpapi-exercise/backend.ts | 2 +- packages/opencode/test/server/httpapi-exercise/index.ts | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/opencode/test/server/httpapi-exercise/backend.ts b/packages/opencode/test/server/httpapi-exercise/backend.ts index b306401ccd7b..8b89a187886c 100644 --- a/packages/opencode/test/server/httpapi-exercise/backend.ts +++ b/packages/opencode/test/server/httpapi-exercise/backend.ts @@ -26,7 +26,7 @@ export function callAuthProbe(scenario: ActiveScenario, credentials: "missing" | toAuthProbeRequest(scenario, credentials, controller.signal), ), ).then((response) => capture(response, scenario.capture)), - Bun.sleep(1_000).then(() => { + Bun.sleep(5_000).then(() => { controller.abort("auth probe timed out") return { status: 0, diff --git a/packages/opencode/test/server/httpapi-exercise/index.ts b/packages/opencode/test/server/httpapi-exercise/index.ts index 0d6bec2dfed0..896aad32f5a1 100644 --- a/packages/opencode/test/server/httpapi-exercise/index.ts +++ b/packages/opencode/test/server/httpapi-exercise/index.ts @@ -593,6 +593,12 @@ const scenarios: Scenario[] = [ check(auth.test === undefined, "auth remove should delete provider from isolated auth file") }), ), + http.protected.get("/api/model", "v2.model.list").json(200, array, "none"), + http.protected.get("/api/provider", "v2.provider.list").json(200, array, "none"), + http.protected + .get("/api/provider/{providerID}", "v2.provider.get") + .at((ctx) => ({ path: route("/api/provider/{providerID}", { providerID: "opencode" }), headers: ctx.headers() })) + .json(200, object, "none"), http.protected .get("/api/session", "v2.session.list") .at((ctx) => ({ path: "/api/session?roots=true", headers: ctx.headers() })) From 5bca8db666e12a057064cfdb3f15863dc8316a9f Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Tue, 12 May 2026 02:44:08 -0400 Subject: [PATCH 09/18] test: relax remaining linux timing checks --- packages/opencode/test/session/compaction.test.ts | 4 ++-- packages/opencode/test/session/prompt.test.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/opencode/test/session/compaction.test.ts b/packages/opencode/test/session/compaction.test.ts index 57110402dc2d..6ac4fee6e991 100644 --- a/packages/opencode/test/session/compaction.test.ts +++ b/packages/opencode/test/session/compaction.test.ts @@ -1240,12 +1240,12 @@ describe("session.compaction.process", () => { yield* Deferred.await(ready).pipe(Effect.timeout("1 second")) const start = Date.now() yield* Fiber.interrupt(fiber) - const exit = yield* Fiber.await(fiber).pipe(Effect.timeout("1 second")) + const exit = yield* Fiber.await(fiber).pipe(Effect.timeout("5 seconds")) expect(Exit.isFailure(exit)).toBe(true) if (Exit.isFailure(exit)) { expect(Cause.hasInterrupts(exit.cause)).toBe(true) - expect(Date.now() - start).toBeLessThan(1_000) + expect(Date.now() - start).toBeLessThan(5_000) } }).pipe(withCompaction({ llm: stub.layer })) }, diff --git a/packages/opencode/test/session/prompt.test.ts b/packages/opencode/test/session/prompt.test.ts index b7d820ad3c1d..df37f0679b5c 100644 --- a/packages/opencode/test/session/prompt.test.ts +++ b/packages/opencode/test/session/prompt.test.ts @@ -762,7 +762,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 3_000, + 10_000, ) // Cancel semantics @@ -792,7 +792,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 3_000, + 10_000, ) it.live( From 796219afb181d17e312e371a39398f3a67b2f8a4 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Tue, 12 May 2026 03:07:16 -0400 Subject: [PATCH 10/18] test: relax remaining linux timeouts --- .../opencode/test/server/worktree-endpoint-repro.test.ts | 3 ++- packages/opencode/test/session/prompt.test.ts | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/opencode/test/server/worktree-endpoint-repro.test.ts b/packages/opencode/test/server/worktree-endpoint-repro.test.ts index e95d706d5468..177593d75346 100644 --- a/packages/opencode/test/server/worktree-endpoint-repro.test.ts +++ b/packages/opencode/test/server/worktree-endpoint-repro.test.ts @@ -80,6 +80,7 @@ describe("worktree endpoint reproduction", () => { body: JSON.stringify({}), }), "direct worktree create", + 15_000, ) expect(response.status).toBe(200) @@ -102,7 +103,7 @@ describe("worktree endpoint reproduction", () => { body: JSON.stringify({ type: "worktree", branch: null }), }), "workspace worktree create", - 8_000, + 15_000, ) expect(response.status).toBe(200) diff --git a/packages/opencode/test/session/prompt.test.ts b/packages/opencode/test/session/prompt.test.ts index df37f0679b5c..4d6dac45a081 100644 --- a/packages/opencode/test/session/prompt.test.ts +++ b/packages/opencode/test/session/prompt.test.ts @@ -736,7 +736,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 10_000, + 3_000, ) it.live( @@ -762,7 +762,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 10_000, + 3_000, ) // Cancel semantics @@ -906,7 +906,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 10_000, + 3_000, ) it.live( @@ -979,7 +979,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 3_000, + 10_000, ) it.live( From 4c88d806323a162ac33cf22515b1e053947d4942 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Tue, 12 May 2026 20:20:32 -0400 Subject: [PATCH 11/18] test: stabilize prompt shell timing --- packages/opencode/test/session/prompt.test.ts | 44 ++++++++++++------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/packages/opencode/test/session/prompt.test.ts b/packages/opencode/test/session/prompt.test.ts index 4d6dac45a081..ed28785f8fa9 100644 --- a/packages/opencode/test/session/prompt.test.ts +++ b/packages/opencode/test/session/prompt.test.ts @@ -95,6 +95,18 @@ function withSh(fx: () => Effect.Effect) { ) } +function waitForSessionStatus(sessionID: SessionID, type: "busy" | "idle") { + return Effect.gen(function* () { + const status = yield* SessionStatus.Service + const end = Date.now() + 5_000 + while (Date.now() < end) { + if ((yield* status.get(sessionID)).type === type) return + yield* Effect.sleep(20) + } + throw new Error(`timed out waiting for session ${sessionID} to become ${type}`) + }) +} + function toolPart(parts: MessageV2.Part[]) { return parts.find((part): part is MessageV2.ToolPart => part.type === "tool") } @@ -736,7 +748,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 3_000, + 10_000, ) it.live( @@ -762,7 +774,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 3_000, + 10_000, ) // Cancel semantics @@ -820,7 +832,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 3_000, + 10_000, ) it.live( @@ -906,7 +918,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 3_000, + 10_000, ) it.live( @@ -935,7 +947,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 3_000, + 10_000, ) // Queue semantics @@ -1078,7 +1090,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 3_000, + 10_000, ) it.live("assertNotBusy succeeds when idle", () => @@ -1123,7 +1135,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 3_000, + 10_000, ) unix("shell captures stdout and stderr in completed tool output", () => @@ -1221,7 +1233,7 @@ unix("shell commands can change directory after startup", () => expect(tool.state.metadata.output).toContain(parent) yield* run.assertNotBusy(chat.id) }), - { git: true, config: cfg }, + { git: true, config: { ...cfg, shell: "sh" } }, ), ) @@ -1324,7 +1336,7 @@ it.live( const sh = yield* prompt .shell({ sessionID: chat.id, agent: "build", command: "sleep 0.2" }) .pipe(Effect.forkChild) - yield* Effect.sleep(50) + yield* waitForSessionStatus(chat.id, "busy") const loop = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) yield* Effect.sleep(50) @@ -1362,7 +1374,7 @@ it.live( const sh = yield* prompt .shell({ sessionID: chat.id, agent: "build", command: "sleep 0.2" }) .pipe(Effect.forkChild) - yield* Effect.sleep(50) + yield* waitForSessionStatus(chat.id, "busy") const a = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) const b = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) @@ -1383,7 +1395,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 3_000, + 10_000, ) unix( @@ -1437,7 +1449,7 @@ unix( const sh = yield* prompt .shell({ sessionID: chat.id, agent: "build", command: "sleep 30" }) .pipe(Effect.forkChild) - yield* Effect.sleep(50) + yield* waitForSessionStatus(chat.id, "busy") yield* prompt.cancel(chat.id) @@ -1474,7 +1486,7 @@ unix( const sh = yield* prompt .shell({ sessionID: chat.id, agent: "build", command: "trap '' TERM; sleep 30" }) .pipe(Effect.forkChild) - yield* Effect.sleep(50) + yield* waitForSessionStatus(chat.id, "busy") yield* prompt.cancel(chat.id) @@ -1566,7 +1578,7 @@ unix( const sh = yield* prompt .shell({ sessionID: chat.id, agent: "build", command: "sleep 30" }) .pipe(Effect.forkChild) - yield* Effect.sleep(50) + yield* waitForSessionStatus(chat.id, "busy") const loop = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) yield* Effect.sleep(50) @@ -1599,7 +1611,7 @@ unix( const a = yield* prompt .shell({ sessionID: chat.id, agent: "build", command: "sleep 30" }) .pipe(Effect.forkChild) - yield* Effect.sleep(50) + yield* waitForSessionStatus(chat.id, "busy") const exit = yield* prompt .shell({ sessionID: chat.id, agent: "build", command: "echo hi" }) @@ -2070,7 +2082,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 3_000, + 10_000, ) // Agent variant From e9a5186c76cdca5c1f20f2f270a72021aa4ac301 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Tue, 12 May 2026 21:01:24 -0400 Subject: [PATCH 12/18] fix: dispose worktree instance before removal --- packages/opencode/src/project/instance-store.ts | 12 ++++++++++++ packages/opencode/src/worktree/index.ts | 3 +++ 2 files changed, 15 insertions(+) diff --git a/packages/opencode/src/project/instance-store.ts b/packages/opencode/src/project/instance-store.ts index faa56668a793..82c707eadf11 100644 --- a/packages/opencode/src/project/instance-store.ts +++ b/packages/opencode/src/project/instance-store.ts @@ -18,6 +18,7 @@ export interface Interface { readonly load: (input: LoadInput) => Effect.Effect readonly reload: (input: LoadInput) => Effect.Effect readonly dispose: (ctx: InstanceContext) => Effect.Effect + readonly disposeDirectory: (directory: string) => Effect.Effect readonly disposeAll: () => Effect.Effect readonly provide: (input: LoadInput, effect: Effect.Effect) => Effect.Effect } @@ -148,6 +149,16 @@ export const layer: Layer.Layer Date: Tue, 12 May 2026 21:08:38 -0400 Subject: [PATCH 13/18] revert unrelated event and worktree changes --- .../opencode/src/project/instance-store.ts | 12 ---- .../server/routes/instance/httpapi/event.ts | 63 +++++++------------ packages/opencode/src/worktree/index.ts | 3 - 3 files changed, 24 insertions(+), 54 deletions(-) diff --git a/packages/opencode/src/project/instance-store.ts b/packages/opencode/src/project/instance-store.ts index 82c707eadf11..faa56668a793 100644 --- a/packages/opencode/src/project/instance-store.ts +++ b/packages/opencode/src/project/instance-store.ts @@ -18,7 +18,6 @@ export interface Interface { readonly load: (input: LoadInput) => Effect.Effect readonly reload: (input: LoadInput) => Effect.Effect readonly dispose: (ctx: InstanceContext) => Effect.Effect - readonly disposeDirectory: (directory: string) => Effect.Effect readonly disposeAll: () => Effect.Effect readonly provide: (input: LoadInput, effect: Effect.Effect) => Effect.Effect } @@ -149,16 +148,6 @@ export const layer: Layer.Layer -} - export const EventPaths = { event: "/event", } as const @@ -46,39 +40,30 @@ function eventData(data: unknown): Sse.Event { } function eventResponse(bus: Bus.Interface) { - return Effect.gen(function* () { - const queue = yield* Queue.unbounded() - const unsubscribe = yield* bus.subscribeAllCallback((event) => Queue.offerUnsafe(queue, event)) - const events = Stream.fromQueue(queue).pipe(Stream.takeUntil((event) => event.type === Bus.InstanceDisposed.type)) - const heartbeat = Stream.tick("10 seconds").pipe( - Stream.drop(1), - Stream.map(() => ({ id: Bus.createID(), type: "server.heartbeat", properties: {} })), - ) + const events = bus.subscribeAll().pipe(Stream.takeUntil((event) => event.type === Bus.InstanceDisposed.type)) + const heartbeat = Stream.tick("10 seconds").pipe( + Stream.drop(1), + Stream.map(() => ({ id: Bus.createID(), type: "server.heartbeat", properties: {} })), + ) - log.info("event connected") - return HttpServerResponse.stream( - Stream.make({ id: Bus.createID(), type: "server.connected", properties: {} }).pipe( - Stream.concat(events.pipe(Stream.merge(heartbeat, { haltStrategy: "left" }))), - Stream.map(eventData), - Stream.pipeThroughChannel(Sse.encode()), - Stream.encodeText, - Stream.ensuring( - Effect.sync(unsubscribe).pipe( - Effect.andThen(Queue.shutdown(queue)), - Effect.andThen(Effect.sync(() => log.info("event disconnected"))), - ), - ), - ), - { - contentType: "text/event-stream", - headers: { - "Cache-Control": "no-cache, no-transform", - "X-Accel-Buffering": "no", - "X-Content-Type-Options": "nosniff", - }, + log.info("event connected") + return HttpServerResponse.stream( + Stream.make({ id: Bus.createID(), type: "server.connected", properties: {} }).pipe( + Stream.concat(events.pipe(Stream.merge(heartbeat, { haltStrategy: "left" }))), + Stream.map(eventData), + Stream.pipeThroughChannel(Sse.encode()), + Stream.encodeText, + Stream.ensuring(Effect.sync(() => log.info("event disconnected"))), + ), + { + contentType: "text/event-stream", + headers: { + "Cache-Control": "no-cache, no-transform", + "X-Accel-Buffering": "no", + "X-Content-Type-Options": "nosniff", }, - ) - }) + }, + ) } export const eventHandlers = HttpApiBuilder.group(EventApi, "event", (handlers) => @@ -87,7 +72,7 @@ export const eventHandlers = HttpApiBuilder.group(EventApi, "event", (handlers) return handlers.handleRaw( "subscribe", Effect.fn("EventHttpApi.subscribe")(function* () { - return yield* eventResponse(bus) + return eventResponse(bus) }), ) }), diff --git a/packages/opencode/src/worktree/index.ts b/packages/opencode/src/worktree/index.ts index 4653bfdcc293..7d0218926111 100644 --- a/packages/opencode/src/worktree/index.ts +++ b/packages/opencode/src/worktree/index.ts @@ -380,7 +380,6 @@ export const layer: Layer.Layer< throw new NotGitError({ message: "Worktrees are only supported for git projects" }) } - yield* store.disposeDirectory(input.directory).pipe(Effect.ignore) const directory = yield* canonical(input.directory) const list = yield* git(["worktree", "list", "--porcelain"], { cwd: ctx.worktree }) @@ -394,14 +393,12 @@ export const layer: Layer.Layer< if (!entry?.path) { const directoryExists = yield* fs.exists(directory).pipe(Effect.orDie) if (directoryExists) { - yield* store.disposeDirectory(directory).pipe(Effect.ignore) yield* stopFsmonitor(directory) yield* cleanDirectory(directory) } return true } - yield* store.disposeDirectory(entry.path).pipe(Effect.ignore) yield* stopFsmonitor(entry.path) const removed = yield* git(["worktree", "remove", "--force", entry.path], { cwd: ctx.worktree }) if (removed.code !== 0) { From c609b48dc875ad6869d8fc2e2100a4c111638913 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Tue, 12 May 2026 21:10:13 -0400 Subject: [PATCH 14/18] revert unrelated test changes --- .../test/server/httpapi-exercise/backend.ts | 2 +- .../server/worktree-endpoint-repro.test.ts | 3 +- .../opencode/test/session/compaction.test.ts | 4 +- packages/opencode/test/session/prompt.test.ts | 62 ++++++------------- 4 files changed, 24 insertions(+), 47 deletions(-) diff --git a/packages/opencode/test/server/httpapi-exercise/backend.ts b/packages/opencode/test/server/httpapi-exercise/backend.ts index 8b89a187886c..b306401ccd7b 100644 --- a/packages/opencode/test/server/httpapi-exercise/backend.ts +++ b/packages/opencode/test/server/httpapi-exercise/backend.ts @@ -26,7 +26,7 @@ export function callAuthProbe(scenario: ActiveScenario, credentials: "missing" | toAuthProbeRequest(scenario, credentials, controller.signal), ), ).then((response) => capture(response, scenario.capture)), - Bun.sleep(5_000).then(() => { + Bun.sleep(1_000).then(() => { controller.abort("auth probe timed out") return { status: 0, diff --git a/packages/opencode/test/server/worktree-endpoint-repro.test.ts b/packages/opencode/test/server/worktree-endpoint-repro.test.ts index 177593d75346..e95d706d5468 100644 --- a/packages/opencode/test/server/worktree-endpoint-repro.test.ts +++ b/packages/opencode/test/server/worktree-endpoint-repro.test.ts @@ -80,7 +80,6 @@ describe("worktree endpoint reproduction", () => { body: JSON.stringify({}), }), "direct worktree create", - 15_000, ) expect(response.status).toBe(200) @@ -103,7 +102,7 @@ describe("worktree endpoint reproduction", () => { body: JSON.stringify({ type: "worktree", branch: null }), }), "workspace worktree create", - 15_000, + 8_000, ) expect(response.status).toBe(200) diff --git a/packages/opencode/test/session/compaction.test.ts b/packages/opencode/test/session/compaction.test.ts index 556bcbba256d..1d329699f69b 100644 --- a/packages/opencode/test/session/compaction.test.ts +++ b/packages/opencode/test/session/compaction.test.ts @@ -1239,12 +1239,12 @@ describe("session.compaction.process", () => { yield* Deferred.await(ready).pipe(Effect.timeout("1 second")) const start = Date.now() yield* Fiber.interrupt(fiber) - const exit = yield* Fiber.await(fiber).pipe(Effect.timeout("5 seconds")) + const exit = yield* Fiber.await(fiber).pipe(Effect.timeout("250 millis")) expect(Exit.isFailure(exit)).toBe(true) if (Exit.isFailure(exit)) { expect(Cause.hasInterrupts(exit.cause)).toBe(true) - expect(Date.now() - start).toBeLessThan(5_000) + expect(Date.now() - start).toBeLessThan(250) } }).pipe(withCompaction({ llm: stub.layer })) }, diff --git a/packages/opencode/test/session/prompt.test.ts b/packages/opencode/test/session/prompt.test.ts index ed28785f8fa9..3821954945f5 100644 --- a/packages/opencode/test/session/prompt.test.ts +++ b/packages/opencode/test/session/prompt.test.ts @@ -95,18 +95,6 @@ function withSh(fx: () => Effect.Effect) { ) } -function waitForSessionStatus(sessionID: SessionID, type: "busy" | "idle") { - return Effect.gen(function* () { - const status = yield* SessionStatus.Service - const end = Date.now() + 5_000 - while (Date.now() < end) { - if ((yield* status.get(sessionID)).type === type) return - yield* Effect.sleep(20) - } - throw new Error(`timed out waiting for session ${sessionID} to become ${type}`) - }) -} - function toolPart(parts: MessageV2.Part[]) { return parts.find((part): part is MessageV2.ToolPart => part.type === "tool") } @@ -774,7 +762,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 10_000, + 3_000, ) // Cancel semantics @@ -804,7 +792,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 10_000, + 3_000, ) it.live( @@ -832,7 +820,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 10_000, + 3_000, ) it.live( @@ -947,7 +935,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 10_000, + 3_000, ) // Queue semantics @@ -991,7 +979,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 10_000, + 3_000, ) it.live( @@ -1060,7 +1048,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 10_000, + 3_000, ) it.live( @@ -1090,7 +1078,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 10_000, + 3_000, ) it.live("assertNotBusy succeeds when idle", () => @@ -1135,7 +1123,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 10_000, + 3_000, ) unix("shell captures stdout and stderr in completed tool output", () => @@ -1233,7 +1221,7 @@ unix("shell commands can change directory after startup", () => expect(tool.state.metadata.output).toContain(parent) yield* run.assertNotBusy(chat.id) }), - { git: true, config: { ...cfg, shell: "sh" } }, + { git: true, config: cfg }, ), ) @@ -1336,7 +1324,7 @@ it.live( const sh = yield* prompt .shell({ sessionID: chat.id, agent: "build", command: "sleep 0.2" }) .pipe(Effect.forkChild) - yield* waitForSessionStatus(chat.id, "busy") + yield* Effect.sleep(50) const loop = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) yield* Effect.sleep(50) @@ -1355,7 +1343,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 10_000, + 3_000, ) it.live( @@ -1374,7 +1362,7 @@ it.live( const sh = yield* prompt .shell({ sessionID: chat.id, agent: "build", command: "sleep 0.2" }) .pipe(Effect.forkChild) - yield* waitForSessionStatus(chat.id, "busy") + yield* Effect.sleep(50) const a = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) const b = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) @@ -1395,7 +1383,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 10_000, + 3_000, ) unix( @@ -1449,7 +1437,7 @@ unix( const sh = yield* prompt .shell({ sessionID: chat.id, agent: "build", command: "sleep 30" }) .pipe(Effect.forkChild) - yield* waitForSessionStatus(chat.id, "busy") + yield* Effect.sleep(50) yield* prompt.cancel(chat.id) @@ -1486,7 +1474,7 @@ unix( const sh = yield* prompt .shell({ sessionID: chat.id, agent: "build", command: "trap '' TERM; sleep 30" }) .pipe(Effect.forkChild) - yield* waitForSessionStatus(chat.id, "busy") + yield* Effect.sleep(50) yield* prompt.cancel(chat.id) @@ -1536,17 +1524,7 @@ unix( const run = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) yield* llm.wait(1) - yield* Effect.promise(async () => { - const end = Date.now() + 5_000 - while (Date.now() < end) { - const msgs = await MessageV2.filterCompacted(MessageV2.stream(chat.id)) - const assistant = msgs.find((item) => item.info.role === "assistant") - const tool = assistant ? toolPart(assistant.parts) : undefined - if (tool?.state.status === "running" && String(tool.state.metadata?.output ?? "").length > 2_000) return - await new Promise((done) => setTimeout(done, 20)) - } - throw new Error("timed out waiting for bash output before cancellation") - }) + yield* Effect.sleep(150) yield* prompt.cancel(chat.id) const exit = yield* Fiber.await(run) @@ -1562,7 +1540,7 @@ unix( expect(tool.state.output).toMatch(/Full output saved to:\s+\S+/) expect(tool.state.output).not.toContain("Tool execution aborted") }), - { git: true, config: (url) => ({ ...providerCfg(url), tool_output: { max_bytes: 1_024 } }) }, + { git: true, config: providerCfg }, ), 30_000, ) @@ -1578,7 +1556,7 @@ unix( const sh = yield* prompt .shell({ sessionID: chat.id, agent: "build", command: "sleep 30" }) .pipe(Effect.forkChild) - yield* waitForSessionStatus(chat.id, "busy") + yield* Effect.sleep(50) const loop = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) yield* Effect.sleep(50) @@ -1611,7 +1589,7 @@ unix( const a = yield* prompt .shell({ sessionID: chat.id, agent: "build", command: "sleep 30" }) .pipe(Effect.forkChild) - yield* waitForSessionStatus(chat.id, "busy") + yield* Effect.sleep(50) const exit = yield* prompt .shell({ sessionID: chat.id, agent: "build", command: "echo hi" }) @@ -2082,7 +2060,7 @@ it.live( }), { git: true, config: providerCfg }, ), - 10_000, + 3_000, ) // Agent variant From 919f13ee1ac187e01156eecc31fbc3e7ea3db6a6 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Tue, 12 May 2026 23:19:38 -0400 Subject: [PATCH 15/18] test: reset opencode tests to dev --- .../opencode/test/EFFECT_TEST_MIGRATION.md | 262 +- .../agent/plan-mode-subagent-bypass.test.ts | 87 + .../agent/plugin-agent-regression.test.ts | 7 +- .../test/cli/cmd/tui/attention.test.ts | 484 + .../test/cli/cmd/tui/notifications.test.ts | 267 + .../test/cli/run/runtime.boot.test.ts | 75 +- .../test/cli/tui/plugin-loader.test.ts | 80 + packages/opencode/test/config/tui.test.ts | 1537 +- .../test/effect/runtime-flags.test.ts | 74 + packages/opencode/test/fixture/tui-plugin.ts | 19 +- packages/opencode/test/fixture/tui-runtime.ts | 12 +- packages/opencode/test/mcp/headers.test.ts | 147 +- packages/opencode/test/mcp/lifecycle.test.ts | 752 +- .../test/memory/abort-leak-webfetch.ts | 49 - .../opencode/test/memory/abort-leak.test.ts | 127 - .../opencode/test/permission/next.test.ts | 524 +- .../test/plugin/auth-override.test.ts | 2 + .../test/plugin/loader-shared.test.ts | 44 +- packages/opencode/test/plugin/trigger.test.ts | 7 +- .../test/plugin/workspace-adapter.test.ts | 7 +- packages/opencode/test/preload.ts | 1 - .../opencode/test/project/instance.test.ts | 106 +- .../opencode/test/project/worktree.test.ts | 109 +- .../convert-to-copilot-messages.test.ts | 523 + .../copilot/copilot-chat-model.test.ts | 592 + .../test/provider/digitalocean.test.ts | 228 +- .../opencode/test/provider/provider.test.ts | 81 - .../opencode/test/pty/pty-session.test.ts | 171 +- packages/opencode/test/server/global-bus.ts | 3 - .../test/server/global-session-list.test.ts | 188 +- .../test/server/httpapi-config.test.ts | 126 +- .../test/server/httpapi-exercise/index.ts | 6 - .../test/server/httpapi-experimental.test.ts | 394 +- .../opencode/test/server/httpapi-mcp.test.ts | 215 +- .../test/server/httpapi-provider.test.ts | 186 +- .../opencode/test/server/httpapi-sdk.test.ts | 205 +- .../test/server/httpapi-session.test.ts | 386 +- .../opencode/test/server/httpapi-ui.test.ts | 429 +- .../test/server/project-init-git.test.ts | 165 +- .../server/session-diff-missing-patch.test.ts | 87 +- .../test/server/session-messages.test.ts | 316 +- .../test/server/session-select.test.ts | 142 +- .../server/worktree-endpoint-repro.test.ts | 162 +- .../opencode/test/session/compaction.test.ts | 95 + packages/opencode/test/session/llm.test.ts | 25 +- packages/opencode/test/session/prompt.test.ts | 2679 +- .../test/session/snapshot-tool-race.test.ts | 2 + .../test/tool/fixtures/models-api.json | 150270 ++++++++++----- packages/opencode/test/tool/registry.test.ts | 55 +- .../v2/plugin/provider-sdk-matching.test.ts | 98 - .../test/v2/session-message-updater.test.ts | 21 +- 51 files changed, 108430 insertions(+), 54199 deletions(-) create mode 100644 packages/opencode/test/cli/cmd/tui/attention.test.ts create mode 100644 packages/opencode/test/cli/cmd/tui/notifications.test.ts create mode 100644 packages/opencode/test/effect/runtime-flags.test.ts delete mode 100644 packages/opencode/test/memory/abort-leak-webfetch.ts delete mode 100644 packages/opencode/test/memory/abort-leak.test.ts create mode 100644 packages/opencode/test/provider/copilot/convert-to-copilot-messages.test.ts create mode 100644 packages/opencode/test/provider/copilot/copilot-chat-model.test.ts delete mode 100644 packages/opencode/test/v2/plugin/provider-sdk-matching.test.ts diff --git a/packages/opencode/test/EFFECT_TEST_MIGRATION.md b/packages/opencode/test/EFFECT_TEST_MIGRATION.md index 2c160b993dcc..73acea91489d 100644 --- a/packages/opencode/test/EFFECT_TEST_MIGRATION.md +++ b/packages/opencode/test/EFFECT_TEST_MIGRATION.md @@ -1,16 +1,21 @@ -# Effect Test Migration Plan +# Effect Test Migration -This document describes how to move opencode tests out of Promise-land and into the shared `testEffect` pattern. +Move tests that exercise Effect services out of Promise-land and into the +shared `testEffect` pattern. + +This file is guidance, not a live inventory. Before claiming a migration, +search current `dev` for the exact anti-pattern and update any PR notes +with what you actually changed. ## Target Pattern -Every test file that exercises Effect services should have one local runner near the top: +Every Effect service test should have one local runner near the top: ```ts const it = testEffect(layer) ``` -Then each test should use one of the runner methods: +Use the runner method that matches the behavior: ```ts it.effect("pure service behavior", () => @@ -23,7 +28,7 @@ it.effect("pure service behavior", () => it.instance("instance-local behavior", () => Effect.gen(function* () { const test = yield* TestInstance - // test.directory is a scoped temp opencode instance + expect(test.directory).toContain("opencode-test-") }), ) @@ -35,40 +40,22 @@ it.live("live filesystem or process behavior", () => ) ``` -Use `it.effect` for pure Effect code that should run with `TestClock` and `TestConsole`. -Use `it.instance` when the test needs one scoped opencode instance. -Use `it.live` when the test depends on real time, filesystem mtimes, git, child processes, servers, file watchers, or OS behavior. - -## Anti-Patterns To Remove - -Avoid these in tests that already target Effect services: +## Choosing The Runner -- `test(..., async () => Effect.runPromise(...))` -- local `run(...)`, `load(...)`, `svc(...)`, or `runtime.runPromise(...)` wrappers that only provide a layer -- `tmpdir()` plus `WithInstance.provide(...)` in Promise test bodies -- custom `ManagedRuntime.make(...)` in test files -- Promise `try/catch` around Effect failures -- `Promise.withResolvers`, `Bun.sleep`, or `setTimeout` for synchronization when `Deferred`, `Fiber`, or `Effect.sleep` can express the same behavior +- `it.effect(...)` — pure Effect behavior with `TestClock` and + `TestConsole`. +- `it.instance(...)` — service behavior that needs one scoped opencode + instance. +- `it.live(...)` — real time, filesystem mtimes, child processes, git, + locks, servers, watchers, or OS behavior. -Promise helpers are acceptable at the boundary for non-Effect APIs, but they should be yielded from an Effect body with `Effect.promise(...)` rather than becoming the test harness. +Most integration-style tests use `it.live(...)` or `it.instance(...)`. ## Layer Rules -Compose tests from open service layers, not closed `defaultLayer` graphs when a dependency needs replacing. - -Good: - -```ts -const layer = Config.layer.pipe( - Layer.provide(AppFileSystem.defaultLayer), - Layer.provide(Env.defaultLayer), - Layer.provide(AuthTest.empty), - Layer.provide(AccountTest.empty), - Layer.provide(NpmTest.noop), -) -``` - -Avoid using a fully closed layer and hoping to override an inner dependency later. Once `Agent.defaultLayer` has already provided `Config.defaultLayer`, tests cannot cleanly swap the `Npm.Service` used by that config layer. +Compose tests from open service layers when a dependency needs replacing. +Do not use a closed `defaultLayer` and then try to override an inner +dependency after it has already been provided. Prefer small reusable fake boundary layers in `test/fake/*`: @@ -80,146 +67,103 @@ SkillTest.empty ProviderTest.fake().layer ``` -Do not add generic test-layer builders until repeated local compositions prove the need. Shared fake boundary services are the first reusable unit. Pre-composed subtrees such as `AgentTest.withPlugins` should come later, only after the same graph appears in multiple files. +Use `Layer.mock` for partial service stubs. Missing methods should fail +loudly if the test accidentally calls them. + +Do not add generic test-layer builders until repeated local compositions +prove the need. ## Fixture Rules Use Effect-aware fixtures from `test/fixture/fixture.ts`: -- `TestInstance` inside `it.instance(...)` for the current temp instance path -- `tmpdirScoped(...)` inside `Effect.gen` for additional temp directories -- `provideInstance(dir)(effect)` when one test needs to switch instance context -- `provideTmpdirInstance((dir) => effect, options)` when a live test needs custom instance setup or multiple instance scopes -- `disposeAllInstances()` in `afterEach` only for integration tests that intentionally touch shared instance registries +- `TestInstance` inside `it.instance(...)` for the current temp instance. +- `tmpdirScoped(...)` inside `Effect.gen` for extra temp directories. +- `provideInstance(dir)(effect)` when one test needs to switch instance + context. +- `provideTmpdirInstance((dir) => effect, options)` when a live test needs + custom instance setup or multiple instance scopes. +- `disposeAllInstances()` in `afterEach` only for integration tests that + intentionally touch shared instance registries. -Use finalizers only as a temporary bridge for existing global mutations: +Avoid mutable global setup. If a global mutation is unavoidable during a +migration, scope it with acquire/release and treat it as temporary. -```ts -yield * - Effect.acquireUseRelease( - Effect.sync(() => { - const previous = process.env.MY_FLAG - process.env.MY_FLAG = "1" - return previous - }), - () => testBody, - (previous) => - Effect.sync(() => { - if (previous === undefined) delete process.env.MY_FLAG - else process.env.MY_FLAG = previous - }), - ) -``` +Long term, tests should not toggle `process.env`, `Global.Path`, or +mutable flags when behavior can be modeled with services. Prefer layers +such as `RuntimeFlags.layer(...)` or focused fake services. -TODO: eliminate this pattern over time. Tests should not toggle process-global flags or env vars when the behavior can be modeled with services. Prefer moving flag/env reads behind injectable services such as `Config.Service`, `Env.Service`, or focused test layers, then provide the desired test value through the layer graph instead of mutating `process.env` or `Global.Path`. +## Anti-Patterns To Remove -## Conversion Recipe +- `test(..., async () => Effect.runPromise(...))` +- local `run(...)`, `load(...)`, `svc(...)`, or `runtime.runPromise(...)` + wrappers that only provide a layer +- `tmpdir()` plus legacy instance provision in Promise test bodies +- custom `ManagedRuntime.make(...)` in test files +- Promise `try/catch` around Effect failures +- `Promise.withResolvers`, `Bun.sleep`, or `setTimeout` for synchronization + when events, `Deferred`, fibers, or deterministic state checks fit +- mutable env/global/flag changes after layers are built -1. Identify the real service under test and its open `*.layer`. -2. Build one top-level `layer` with real dependencies where they are relevant and `test/fake/*` layers at slow or external boundaries. -3. Replace local Promise wrappers with Effect helpers: +Promise helpers are acceptable at non-Effect boundaries, but yield them from +inside an Effect body with `Effect.promise(...)` rather than making them the +test harness. -```ts -const run = Effect.fn("MyTest.run")(function* (input: Input) { - const service = yield* MyService.Service - return yield* service.run(input) -}) -``` +## Conversion Recipe -4. Convert `test(..., async () => { ... })` to `it.effect`, `it.instance`, or `it.live`. +1. Identify the real service under test and whether its open `layer` or + closed `defaultLayer` is appropriate. +2. Build one top-level `layer` with real dependencies where relevant and + fake layers at slow or external boundaries. +3. Replace local Promise wrappers with Effect helpers. +4. Convert `test(..., async () => { ... })` to `it.effect`, `it.instance`, + or `it.live`. 5. Move `await` calls inside `Effect.gen` as `yield*` calls. -6. Replace `await using tmp = await tmpdir(...)` with `yield* tmpdirScoped(...)` when the temp directory is inside an Effect test. -7. Replace `WithInstance.provide({ directory, fn })` with `it.instance(...)`, `provideInstance(directory)(effect)`, or `provideTmpdirInstance(...)`. -8. Replace Promise failure assertions with Effect assertions: +6. Replace `await using tmp = await tmpdir(...)` with + `yield* tmpdirScoped(...)` when the temp directory lives inside the + Effect test. +7. Replace Promise failure assertions with `Effect.exit`, `Effect.flip`, or + focused assertion helpers. +8. Preserve concurrency with fibers, `Deferred`, and + `Effect.all(..., { concurrency: "unbounded" })`; do not accidentally + serialize formerly parallel behavior. +9. Run the focused test file and `bun typecheck` from `packages/opencode`. -```ts -const exit = yield * run(input).pipe(Effect.exit) -expect(Exit.isFailure(exit)).toBe(true) -``` +## Good Examples -This is correct but still verbose. Track repeated assertion shapes during migration so we can add small test assertion helpers later instead of copying low-level `Exit` plumbing everywhere. +Use current examples as patterns, but re-check them before copying because +test migrations are active: -9. Keep concurrency concurrent by using `Effect.forkScoped`, `Fiber.join`, `Deferred`, or `Effect.all(..., { concurrency: "unbounded" })` instead of serializing formerly parallel Promise work. -10. Run the focused test file and `bun typecheck` from `packages/opencode`. +- `test/effect/instance-state.test.ts` — scoped directories, instance + switching, disposal, and concurrency. +- `test/bus/bus-effect.test.ts` — `Deferred`, streams, scoped fibers. +- `test/agent/plugin-agent-regression.test.ts` — real service layers plus + fake boundary layers. +- `test/account/service.test.ts` — service-level live tests, typed errors, + fake HTTP clients. -## Good Examples +## Migration Queue Policy + +Do not maintain a long file checklist here. It goes stale quickly. + +When looking for the next target, search for current anti-patterns: + +```bash +git grep -n "Effect.runPromise\|ManagedRuntime\|Promise.withResolvers\|Bun.sleep\|WithInstance" -- packages/opencode/test +``` -Use these files as models: - -- `test/tool/write.test.ts`: strong `it.instance` tests, top-level `testEffect(...)`, and Effect-native test helpers. -- `test/effect/instance-state.test.ts`: good `it.live` use for scoped directories, instance switching, reload/disposal, and concurrency. -- `test/bus/bus-effect.test.ts`: good `Deferred`, streams, and scoped fibers. -- `test/tool/truncation.test.ts`: good configured runners and concise live service tests. -- `test/tool/repo_clone.test.ts`: good live git integration while staying inside Effect fixtures. -- `test/server/httpapi-instance.test.ts`: good scoped integration layer setup and live HTTP assertions. -- `test/account/service.test.ts`: good service-level live tests, `Effect.flip`, typed errors, and fake HTTP clients. -- `test/agent/plugin-agent-regression.test.ts`: good example of open real service layers plus reusable fake boundary layers. - -## Current Promise-Land Hotspots - -Start with files that already exercise Effect services but still manually run Promises: - -- `test/config/config.test.ts`: many `Effect.runPromise`, `tmpdir()`, and `WithInstance.provide(...)` patterns despite already having `const it = testEffect(layer)`. -- `test/tool/shell.test.ts`: custom `ManagedRuntime`, Promise test helpers, and instance setup around shell execution. -- `test/tool/edit.test.ts`: manual runtime helpers and Promise concurrency patterns that should become fibers/deferreds. -- `test/session/messages-pagination.test.ts`: local Promise service facade over `Session.defaultLayer`. -- `test/snapshot/snapshot.test.ts`: Promise helper with `provideInstance` around snapshot operations. -- `test/file/index.test.ts`: Promise wrappers for `File.Service` plus repeated temp instance setup. -- `test/provider/provider.test.ts`: `AppRuntime.runPromise` helpers and mutable env/config setup. -- `test/project/vcs.test.ts`: Promise event waiting and `AppRuntime.runPromise` around VCS service calls. - -## Migration Order - -1. Convert one small file with straightforward service calls and no race behavior. -2. Convert `config.test.ts` incrementally by cluster, not in one PR. -3. Extract additional `test/fake/*` boundary layers only when a second test needs the same fake. -4. Convert files with concurrency or watchers after the simple files, preserving timing semantics with `Deferred` and fibers. -5. Leave pure non-Effect utility tests alone unless converting the underlying code to Effect. - -## Claimable Checklist - -Use this as a migration queue. Each checkbox should be safe for one agent or one PR unless the notes say otherwise. Agents should claim one item, convert only that file or cluster, run the focused test file, run `bun typecheck`, and update this checklist in the PR description or follow-up note. - -- [ ] `test/file/index.test.ts`: straightforward service wrapper cleanup. Replace local Promise helpers with Effect helpers and use `it.instance` / `it.live` around existing temp instance cases. -- [ ] `test/session/messages-pagination.test.ts`: convert the local `run(...)` / `svc(...)` facade to `testEffect(Session.defaultLayer...)` and direct service yields. Good early target. -- [ ] `test/snapshot/snapshot.test.ts`: convert snapshot operations to `it.live` with `tmpdirScoped` / `provideInstance`. Keep git/filesystem behavior live. -- [ ] `test/project/vcs.test.ts`: convert `AppRuntime.runPromise` service calls first. Leave event/watcher timing intact until the first Effect version is stable. -- [ ] `test/provider/provider.test.ts` cluster 1: convert provider service tests that only read config/env and do not mutate global state heavily. -- [ ] `test/provider/provider.test.ts` cluster 2: convert tests with env/config mutation after introducing or reusing service-backed test seams. -- [ ] `test/tool/shell.test.ts`: replace custom `ManagedRuntime` with `testEffect`, keep as `it.live`, and preserve process behavior. -- [ ] `test/tool/edit.test.ts` cluster 1: convert straightforward edit/read/write cases and remove manual runtime helpers. -- [ ] `test/tool/edit.test.ts` cluster 2: convert concurrency/race tests using `Deferred`, fibers, and `Effect.all` without serializing behavior. -- [ ] `test/config/config.test.ts` setup pass: replace inline fake layers with shared `test/fake/*` layers where possible and turn Promise helpers into Effect helpers. -- [ ] `test/config/config.test.ts` cluster 1: convert simple config load/merge tests that only need one instance. -- [ ] `test/config/config.test.ts` cluster 2: convert managed/global config tests that mutate `Global.Path` or managed config directories. Prefer service seams; use finalizers only as a bridge. -- [ ] `test/config/config.test.ts` cluster 3: convert plugin/dependency tests after ensuring `NpmTest.noop` or explicit fake NPM layers are used. -- [ ] `test/config/config.test.ts` cluster 4: convert remote/account/provider config tests after isolating auth/account/env dependencies through layers. -- [ ] Audit remaining `Effect.runPromise` in `packages/opencode/test/**/*.ts` and create follow-up checklist entries for any missed files. -- [ ] Audit remaining `WithInstance.provide` in `packages/opencode/test/**/*.ts` and convert cases that can use `it.instance` or `provideInstance` inside Effect. -- [ ] Audit repeated `Exit` / `Cause` assertion shapes and propose `test/lib/effect-assert.ts` helpers if at least three files repeat the same pattern. - -Parallelization notes: - -- The first four items are mostly independent and good for separate worktrees. -- `provider.test.ts`, `tool/edit.test.ts`, and `config.test.ts` should be split by cluster so agents do not edit the same file concurrently. -- Any new fake boundary layer under `test/fake/*` should be small and independently useful. Do not add a fake just for one assertion unless it removes a real external dependency. -- Do not combine assertion-helper design with file migrations. First collect repeated shapes, then add helpers in a separate pass. - -Orchestration rules: - -- Prefer supervised foreground agents for implementation. Background agents are acceptable for research-only surveys, but code migrations need a returned diff, focused test output, and local commit before moving on. -- Create one worktree per claim and verify the branch/worktree path before edits. A status check should include `git status --short --branch` from the claimed worktree. -- After an agent reports completion, the coordinator must independently inspect `git status`, run the focused test, run `bun typecheck`, and review the diff before pushing. -- If an agent edits the wrong worktree, move the patch deliberately with `git diff` / `git apply`, then clean the accidental worktree before opening a PR. -- Keep dependency setup boring. Prefer reusing existing installed dependencies via worktrees or symlinks over running a fresh `bun install` in a temporary path unless the native build path is known to work. -- Do not delete worktrees with unpushed commits or uncommitted changes. Once a migration PR branch is pushed and clean, the local worktree can be removed while leaving the branch on the fork. - -## Effectified Test Rough Edges - -Track patterns that are technically Effect-native but still too noisy. These should become a second cleanup pass after the Promise-land migration is underway. - -- Failure assertions against `Exit` / `Cause` are often verbose. Consider helpers such as `expectEffectFailure(effect)`, `expectTaggedError(effect, Tag)`, or custom Bun matchers if the same shapes repeat. -- Some tests still need `Effect.promise(...)` around Node/Bun filesystem helpers. Prefer Effect platform services when the surrounding code already uses them, but do not block migrations on perfect filesystem abstraction. -- Scoped global mutation with `process.env`, `Global.Path`, or flags should disappear behind injectable services over time. -- Layer composition can be noisy when a test needs a real service subtree plus fake boundaries. Keep extracting small `test/fake/*` boundary layers before inventing larger builders. -- Concurrency tests can become harder to read after replacing Promise resolvers with `Deferred` and fibers. Look for repeated patterns that deserve named helpers. +Then choose one file or one small cluster, keep the PR focused, and mention +the focused verification in the PR body. + +## Rough Edges To Watch + +- Failure assertions against `Exit` / `Cause` can get verbose. Add helpers + only after the same shape repeats across multiple files. +- Some tests still need `Effect.promise(...)` around Node/Bun APIs. Prefer + Effect platform services when the surrounding code already uses them, but + do not block useful migrations on perfect abstraction. +- Layer composition can be noisy when a test needs real service subtrees plus + fake boundaries. Extract small `test/fake/*` layers before inventing + larger builders. +- Concurrency tests can get harder to read after replacing Promise + resolvers. Look for repeated patterns that deserve named helpers. diff --git a/packages/opencode/test/agent/plan-mode-subagent-bypass.test.ts b/packages/opencode/test/agent/plan-mode-subagent-bypass.test.ts index 255aea12eeeb..641a929aeb2c 100644 --- a/packages/opencode/test/agent/plan-mode-subagent-bypass.test.ts +++ b/packages/opencode/test/agent/plan-mode-subagent-bypass.test.ts @@ -27,6 +27,19 @@ import { testEffect } from "../lib/effect" const it = testEffect(Agent.defaultLayer) +function testAgent(input: { + name: string + mode: Agent.Info["mode"] + permission: Parameters[0] +}) { + return { + name: input.name, + mode: input.mode, + permission: Permission.fromConfig(input.permission), + options: {}, + } satisfies Agent.Info +} + // `deriveSubagentSessionPermission` is imported from production. The test // exercises the actual helper that task.ts uses to build the subagent's // session permission, so any regression in that helper trips this test. @@ -123,3 +136,77 @@ it.instance( }, }, ) + +it.effect("[#26700] controller self-restrictions do not erase executor permissions", () => + Effect.sync(() => { + const controller = testAgent({ + name: "controller", + mode: "primary", + permission: { + "*": "deny", + read: "deny", + bash: "deny", + task: { + "*": "deny", + executor: "allow", + }, + edit: "deny", + write: "deny", + }, + }) + const executor = testAgent({ + name: "executor", + mode: "subagent", + permission: { + "*": "deny", + read: "allow", + bash: "allow", + task: { + "*": "deny", + worker: "allow", + }, + edit: "deny", + write: "deny", + }, + }) + + const effective = Permission.merge( + executor.permission, + deriveSubagentSessionPermission({ + parentSessionPermission: [], + parentAgent: controller, + subagent: executor, + }), + ) + + expect(Permission.evaluate("read", "README.md", effective).action).toBe("allow") + expect(Permission.evaluate("bash", "git status", effective).action).toBe("allow") + expect(Permission.evaluate("task", "worker", effective).action).toBe("allow") + expect(Permission.evaluate("task", "other", effective).action).toBe("deny") + expect(Permission.disabled(["edit", "write", "apply_patch"], effective)).toEqual( + new Set(["edit", "write", "apply_patch"]), + ) + }), +) + +it.effect("subagent inherits parent session deny rules as hard runtime ceilings", () => + Effect.sync(() => { + const executor = testAgent({ + name: "executor", + mode: "subagent", + permission: { + bash: "allow", + }, + }) + const effective = Permission.merge( + executor.permission, + deriveSubagentSessionPermission({ + parentSessionPermission: Permission.fromConfig({ bash: "deny" }), + parentAgent: undefined, + subagent: executor, + }), + ) + + expect(Permission.evaluate("bash", "git status", effective).action).toBe("deny") + }), +) diff --git a/packages/opencode/test/agent/plugin-agent-regression.test.ts b/packages/opencode/test/agent/plugin-agent-regression.test.ts index e2dd8a5f7c89..60d59ee907d0 100644 --- a/packages/opencode/test/agent/plugin-agent-regression.test.ts +++ b/packages/opencode/test/agent/plugin-agent-regression.test.ts @@ -7,6 +7,7 @@ import { Agent } from "../../src/agent/agent" import { Bus } from "../../src/bus" import { Config } from "../../src/config/config" import { Env } from "../../src/env" +import { RuntimeFlags } from "../../src/effect/runtime-flags" import { Plugin } from "../../src/plugin" import { AccountTest } from "../fake/account" import { AuthTest } from "../fake/auth" @@ -29,7 +30,11 @@ const configLayer = Config.layer.pipe( Layer.provide(AccountTest.empty), Layer.provide(NpmTest.noop), ) -const pluginLayer = Plugin.layer.pipe(Layer.provide(Bus.layer), Layer.provide(configLayer)) +const pluginLayer = Plugin.layer.pipe( + Layer.provide(Bus.layer), + Layer.provide(configLayer), + Layer.provide(RuntimeFlags.layer({ disableDefaultPlugins: true })), +) const agentLayer = Agent.layer.pipe( Layer.provide(configLayer), Layer.provide(AuthTest.empty), diff --git a/packages/opencode/test/cli/cmd/tui/attention.test.ts b/packages/opencode/test/cli/cmd/tui/attention.test.ts new file mode 100644 index 000000000000..071aabdd793d --- /dev/null +++ b/packages/opencode/test/cli/cmd/tui/attention.test.ts @@ -0,0 +1,484 @@ +import { describe, expect, test } from "bun:test" +import type { AudioPlayOptions, AudioSound } from "@opentui/core" +import { createTuiAttention } from "@/cli/cmd/tui/attention" +import type { TuiConfig } from "@/cli/cmd/tui/config/tui" + +type FocusEvent = "focus" | "blur" + +type AttentionConfig = Pick + +class FakeRenderer { + isDestroyed = false + notificationResult = true + notificationThrows = false + notifications: { message: string; title: string | undefined }[] = [] + listeners: Record void>> = { + focus: new Set(), + blur: new Set(), + } + + on(event: FocusEvent, listener: () => void) { + this.listeners[event].add(listener) + return this + } + + off(event: FocusEvent, listener: () => void) { + this.listeners[event].delete(listener) + return this + } + + emit(event: FocusEvent) { + for (const listener of this.listeners[event]) listener() + } + + listenerCount(event: FocusEvent) { + return this.listeners[event].size + } + + triggerNotification(message: string, title?: string) { + if (this.notificationThrows) throw new Error("notification failed") + this.notifications.push({ message, title }) + return this.notificationResult + } +} + +class FakeAudioEngine { + loadResult: AudioSound | null = 1 + playResult: number | null = 1 + loadCalls = 0 + playCalls = 0 + volumes: (number | undefined)[] = [] + loadPaths: string[] = [] + rejectLoad = false + rejectPaths = new Set() + + async loadSoundFile(path: string) { + this.loadCalls += 1 + this.loadPaths.push(path) + if (this.rejectLoad || this.rejectPaths.has(path)) throw new Error("decode failed") + return this.loadResult + } + + play(_sound: AudioSound, options?: AudioPlayOptions) { + this.playCalls += 1 + this.volumes.push(options?.volume) + return this.playResult + } +} + +class FakeKV { + store: Record = {} + + get ready() { + return true + } + + get(key: string, fallback?: Value) { + return (this.store[key] ?? fallback) as Value + } + + set(key: string, value: unknown) { + this.store[key] = value + } +} + +function config(attention: Partial = {}): AttentionConfig { + return { + attention: { + enabled: true, + notifications: true, + sound: true, + volume: 0.4, + sound_pack: "opencode.default", + sounds: {}, + ...attention, + }, + } +} + +describe("createTuiAttention", () => { + test("defaults to sound always and notification blurred", async () => { + const renderer = new FakeRenderer() + const audio = new FakeAudioEngine() + const attention = createTuiAttention({ renderer, config: config(), audio }) + + expect(await attention.notify({ message: "hello" })).toEqual({ + ok: true, + notification: false, + sound: true, + }) + expect(renderer.notifications).toHaveLength(0) + expect(audio.playCalls).toBe(1) + }) + + test("supports blurred-only requests", async () => { + const renderer = new FakeRenderer() + const audio = new FakeAudioEngine() + const attention = createTuiAttention({ renderer, config: config(), audio }) + + expect(await attention.notify({ message: "unknown", sound: { when: "blurred" } })).toEqual({ + ok: false, + notification: false, + sound: false, + skipped: "focus_unknown", + }) + renderer.emit("focus") + expect(await attention.notify({ message: "focused", sound: { when: "blurred" } })).toEqual({ + ok: false, + notification: false, + sound: false, + skipped: "focused", + }) + renderer.emit("blur") + expect(await attention.notify({ message: "blurred", sound: { when: "blurred" } })).toEqual({ + ok: true, + notification: true, + sound: true, + }) + expect(audio.playCalls).toBe(1) + }) + + test("supports focused-only requests", async () => { + const renderer = new FakeRenderer() + const attention = createTuiAttention({ renderer, config: config(), audio: new FakeAudioEngine() }) + + expect(await attention.notify({ message: "unknown", notification: { when: "focused" }, sound: false })).toEqual({ + ok: false, + notification: false, + sound: false, + skipped: "focus_unknown", + }) + renderer.emit("blur") + expect(await attention.notify({ message: "blurred", notification: { when: "focused" }, sound: false })).toEqual({ + ok: false, + notification: false, + sound: false, + skipped: "blurred", + }) + renderer.emit("focus") + expect(await attention.notify({ message: "focused", notification: { when: "focused" }, sound: false })).toEqual({ + ok: true, + notification: true, + sound: false, + }) + expect(renderer.notifications).toEqual([{ title: "opencode", message: "focused" }]) + }) + + test("notification can deliver while focused when requested", async () => { + const renderer = new FakeRenderer() + const audio = new FakeAudioEngine() + const attention = createTuiAttention({ renderer, config: config(), audio }) + renderer.emit("focus") + + expect(await attention.notify({ message: "hello", notification: { when: "always" } })).toEqual({ + ok: true, + notification: true, + sound: true, + }) + expect(audio.playCalls).toBe(1) + expect(renderer.notifications).toEqual([{ title: "opencode", message: "hello" }]) + }) + + test("notifies while blurred", async () => { + const renderer = new FakeRenderer() + const attention = createTuiAttention({ renderer, config: config(), audio: new FakeAudioEngine() }) + renderer.emit("blur") + + expect(await attention.notify({ title: "opencode", message: "hello", sound: false })).toEqual({ + ok: true, + notification: true, + sound: false, + }) + expect(renderer.notifications).toEqual([{ title: "opencode", message: "hello" }]) + }) + + test("when requested, blurred-only calls do not notify or play sound while focused", async () => { + const renderer = new FakeRenderer() + const audio = new FakeAudioEngine() + const attention = createTuiAttention({ renderer, config: config(), audio }) + renderer.emit("focus") + + expect(await attention.notify({ message: "hello", sound: { when: "blurred" } })).toEqual({ + ok: false, + notification: false, + sound: false, + skipped: "focused", + }) + expect(renderer.notifications).toHaveLength(0) + expect(audio.loadCalls).toBe(0) + }) + + test("can play sound always while notification is blurred-only", async () => { + const renderer = new FakeRenderer() + const audio = new FakeAudioEngine() + const attention = createTuiAttention({ renderer, config: config(), audio }) + renderer.emit("focus") + + expect( + await attention.notify({ + message: "hello", + sound: { name: "question" }, + }), + ).toEqual({ + ok: true, + notification: false, + sound: true, + }) + expect(renderer.notifications).toHaveLength(0) + expect(audio.playCalls).toBe(1) + + renderer.emit("blur") + expect( + await attention.notify({ + message: "hello again", + sound: { name: "question" }, + }), + ).toEqual({ + ok: true, + notification: true, + sound: true, + }) + expect(renderer.notifications).toEqual([{ title: "opencode", message: "hello again" }]) + }) + + test("can disable notification per call while still playing sound", async () => { + const renderer = new FakeRenderer() + const audio = new FakeAudioEngine() + const attention = createTuiAttention({ renderer, config: config(), audio }) + + expect(await attention.notify({ message: "hello", notification: false })).toEqual({ + ok: true, + notification: false, + sound: true, + }) + expect(renderer.notifications).toHaveLength(0) + expect(audio.playCalls).toBe(1) + }) + + test("skips empty messages and disabled attention", async () => { + const empty = new FakeRenderer() + empty.emit("blur") + const disabled = new FakeRenderer() + disabled.emit("blur") + + expect(await createTuiAttention({ renderer: empty, config: config() }).notify({ message: " \n " })).toEqual({ + ok: false, + notification: false, + sound: false, + skipped: "empty_message", + }) + expect( + await createTuiAttention({ renderer: disabled, config: config({ enabled: false }) }).notify({ message: "hello" }), + ).toEqual({ + ok: false, + notification: false, + sound: false, + skipped: "attention_disabled", + }) + }) + + test("respects notification and sound config independently", async () => { + const renderer = new FakeRenderer() + const audio = new FakeAudioEngine() + const attention = createTuiAttention({ renderer, config: config({ notifications: false }), audio }) + renderer.emit("blur") + + expect(await attention.notify({ message: "hello", sound: true })).toEqual({ + ok: true, + notification: false, + sound: true, + }) + expect(renderer.notifications).toHaveLength(0) + expect(audio.playCalls).toBe(1) + + const soundDisabledRenderer = new FakeRenderer() + const soundDisabledAudio = new FakeAudioEngine() + const soundDisabled = createTuiAttention({ + renderer: soundDisabledRenderer, + config: config({ sound: false }), + audio: soundDisabledAudio, + }) + soundDisabledRenderer.emit("blur") + + expect(await soundDisabled.notify({ message: "hello", sound: true })).toEqual({ + ok: true, + notification: true, + sound: false, + }) + expect(soundDisabledAudio.loadCalls).toBe(0) + }) + + test("loads audio lazily only for eligible sound requests", async () => { + const renderer = new FakeRenderer() + const audio = new FakeAudioEngine() + const attention = createTuiAttention({ renderer, config: config(), audio }) + + await attention.notify({ message: "unknown", sound: { when: "blurred" } }) + expect(audio.loadCalls).toBe(0) + + renderer.emit("blur") + expect(await attention.notify({ message: "blurred", sound: { volume: 2 } })).toEqual({ + ok: true, + notification: true, + sound: true, + }) + expect(audio.loadCalls).toBe(1) + expect(audio.volumes).toEqual([1]) + }) + + test("handles unavailable playback and delegates sound loading", async () => { + const unavailableRenderer = new FakeRenderer() + const unavailableAudio = new FakeAudioEngine() + unavailableAudio.playResult = null + const unavailable = createTuiAttention({ renderer: unavailableRenderer, config: config(), audio: unavailableAudio }) + unavailableRenderer.emit("blur") + + expect(await unavailable.notify({ message: "hello", sound: true })).toEqual({ + ok: true, + notification: true, + sound: false, + }) + expect(unavailableAudio.loadCalls).toBe(1) + expect(unavailableAudio.playCalls).toBe(1) + + const repeatedRenderer = new FakeRenderer() + const repeatedAudio = new FakeAudioEngine() + const repeated = createTuiAttention({ renderer: repeatedRenderer, config: config(), audio: repeatedAudio }) + repeatedRenderer.emit("blur") + + await repeated.notify({ message: "one", sound: true }) + await repeated.notify({ message: "two", sound: true }) + expect(repeatedAudio.loadCalls).toBe(2) + expect(repeatedAudio.playCalls).toBe(2) + }) + + test("plays named sounds from the active sound pack", async () => { + const renderer = new FakeRenderer() + const audio = new FakeAudioEngine() + const attention = createTuiAttention({ renderer, config: config(), audio }) + renderer.emit("blur") + + const dispose = attention.soundboard.registerPack({ + id: "acme.soft", + name: "Soft Alerts", + sounds: { + question: "/tmp/question.mp3", + }, + }) + + expect(attention.soundboard.activate("acme.soft")).toBe(true) + expect(attention.soundboard.current()).toBe("acme.soft") + expect(attention.soundboard.list()).toContainEqual({ + id: "acme.soft", + name: "Soft Alerts", + active: true, + builtin: false, + }) + + expect(await attention.notify({ message: "question", sound: { name: "question" } })).toEqual({ + ok: true, + notification: true, + sound: true, + }) + expect(audio.loadPaths).toEqual(["/tmp/question.mp3"]) + + dispose() + expect(attention.soundboard.current()).toBe("opencode.default") + }) + + test("uses config sound overrides before active pack sounds and falls back on load failure", async () => { + const renderer = new FakeRenderer() + const audio = new FakeAudioEngine() + audio.rejectPaths.add("/tmp/bad-question.mp3") + const attention = createTuiAttention({ + renderer, + config: config({ sounds: { question: "/tmp/bad-question.mp3" } }), + audio, + }) + renderer.emit("blur") + + attention.soundboard.registerPack({ + id: "acme.soft", + sounds: { + question: "/tmp/good-question.mp3", + }, + }) + attention.soundboard.activate("acme.soft") + + expect(await attention.notify({ message: "question", sound: { name: "question" } })).toEqual({ + ok: true, + notification: true, + sound: true, + }) + expect(audio.loadPaths).toEqual(["/tmp/bad-question.mp3", "/tmp/good-question.mp3"]) + }) + + test("persists activated sound pack in KV", () => { + const kv = new FakeKV() + const renderer = new FakeRenderer() + const attention = createTuiAttention({ renderer, config: config(), kv }) + + attention.soundboard.registerPack({ id: "acme.soft", sounds: { done: "/tmp/done.mp3" } }) + + expect(attention.soundboard.activate("missing", { persist: true })).toBe(false) + expect(kv.store.attention_sound_pack).toBeUndefined() + expect(attention.soundboard.activate("acme.soft", { persist: true })).toBe(true) + expect(kv.store.attention_sound_pack).toBe("acme.soft") + + const next = createTuiAttention({ renderer: new FakeRenderer(), config: config(), kv }) + next.soundboard.registerPack({ id: "acme.soft", sounds: { done: "/tmp/done.mp3" } }) + expect(next.soundboard.current()).toBe("acme.soft") + }) + + test("does not throw for notification or sound failures", async () => { + const renderer = new FakeRenderer() + const audio = new FakeAudioEngine() + renderer.notificationThrows = true + audio.rejectLoad = true + const attention = createTuiAttention({ renderer, config: config(), audio }) + renderer.emit("blur") + + expect(await attention.notify({ message: "hello", sound: true })).toEqual({ + ok: false, + notification: false, + sound: false, + }) + }) + + test("strips unsafe notification text", async () => { + const renderer = new FakeRenderer() + const attention = createTuiAttention({ renderer, config: config(), audio: new FakeAudioEngine() }) + renderer.emit("blur") + + await attention.notify({ + title: "\u001b[31m danger\n title\u0007", + message: "\u001b[32m hello\n world\u0000", + }) + + expect(renderer.notifications).toEqual([{ title: "danger title", message: "hello world" }]) + }) + + test("disposes renderer listeners", async () => { + const renderer = new FakeRenderer() + const audio = new FakeAudioEngine() + const attention = createTuiAttention({ renderer, config: config(), audio }) + renderer.emit("blur") + await attention.notify({ message: "hello", sound: true }) + + expect(renderer.listenerCount("focus")).toBe(1) + expect(renderer.listenerCount("blur")).toBe(1) + + attention.dispose() + renderer.isDestroyed = true + + expect(renderer.listenerCount("focus")).toBe(0) + expect(renderer.listenerCount("blur")).toBe(0) + expect(audio.loadCalls).toBe(1) + expect(await attention.notify({ message: "hello" })).toEqual({ + ok: false, + notification: false, + sound: false, + skipped: "renderer_destroyed", + }) + }) +}) diff --git a/packages/opencode/test/cli/cmd/tui/notifications.test.ts b/packages/opencode/test/cli/cmd/tui/notifications.test.ts new file mode 100644 index 000000000000..17ed54bafd03 --- /dev/null +++ b/packages/opencode/test/cli/cmd/tui/notifications.test.ts @@ -0,0 +1,267 @@ +import { describe, expect, test } from "bun:test" +import Notifications from "@/cli/cmd/tui/feature-plugins/system/notifications" +import type { Event, PermissionRequest, QuestionRequest, Session } from "@opencode-ai/sdk/v2" +import type { TuiAttentionNotifyInput } from "@opencode-ai/plugin/tui" +import { createTuiPluginApi } from "../../../fixture/tui-plugin" + +async function setup() { + const notifications: TuiAttentionNotifyInput[] = [] + const handlers = new Map void)[]>() + const session = (id: string, title: string, parentID?: string): Session => ({ + id, + title, + slug: id, + projectID: "project", + directory: "/workspace", + ...(parentID && { parentID }), + version: "0.0.0-test", + time: { created: 0, updated: 0 }, + }) + const sessions: Record = { + session: session("session", "Demo session"), + subagent: session("subagent", "Subagent session", "session"), + abort: session("abort", "Abort session"), + timeout: session("timeout", "Timeout session"), + } + + await Notifications.tui( + createTuiPluginApi({ + attention: { + async notify(input) { + notifications.push(input) + return { ok: true, notification: true, sound: true } + }, + }, + event: { + on: (type: Type, handler: (event: Extract) => void) => { + const list = handlers.get(type) ?? [] + const wrapped = handler as (event: Event) => void + list.push(wrapped) + handlers.set(type, list) + return () => { + handlers.set( + type, + (handlers.get(type) ?? []).filter((item) => item !== wrapped), + ) + } + }, + }, + state: { + session: { + get: (sessionID: string) => sessions[sessionID], + }, + }, + }), + undefined, + {} as never, + ) + + return { + notifications, + emit(event: Event) { + for (const handler of handlers.get(event.type) ?? []) handler(event) + }, + } +} + +function question(id: string, sessionID = "session"): QuestionRequest { + return { + id, + sessionID, + questions: [], + } +} + +function permission(id: string, sessionID = "session"): PermissionRequest { + return { + id, + sessionID, + permission: "edit", + patterns: [], + metadata: {}, + always: [], + } +} + +const questionNotification: TuiAttentionNotifyInput = { + title: "Demo session", + message: "Question needs input", + notification: { when: "blurred" }, + sound: { name: "question", when: "always" }, +} + +const permissionNotification: TuiAttentionNotifyInput = { + title: "Demo session", + message: "Permission needs input", + notification: { when: "blurred" }, + sound: { name: "permission", when: "always" }, +} + +describe("internal notifications TUI plugin", () => { + test("notifies for question and permission requests with blurred notifications and always-on sounds", async () => { + const harness = await setup() + + harness.emit({ id: "event-1", type: "question.asked", properties: question("question-1") }) + harness.emit({ id: "event-2", type: "permission.asked", properties: permission("permission-1") }) + + expect(harness.notifications).toEqual([questionNotification, permissionNotification]) + }) + + test("dedupes pending questions and permissions until they are resolved", async () => { + const harness = await setup() + + harness.emit({ id: "event-1", type: "question.asked", properties: question("question-1") }) + harness.emit({ id: "event-2", type: "question.asked", properties: question("question-1") }) + harness.emit({ + id: "event-3", + type: "question.replied", + properties: { sessionID: "session", requestID: "question-1", answers: [] }, + }) + harness.emit({ id: "event-4", type: "question.asked", properties: question("question-1") }) + + harness.emit({ id: "event-5", type: "permission.asked", properties: permission("permission-1") }) + harness.emit({ id: "event-6", type: "permission.asked", properties: permission("permission-1") }) + harness.emit({ + id: "event-7", + type: "permission.replied", + properties: { sessionID: "session", requestID: "permission-1", reply: "once" }, + }) + harness.emit({ id: "event-8", type: "permission.asked", properties: permission("permission-1") }) + + expect(harness.notifications).toEqual([ + questionNotification, + questionNotification, + permissionNotification, + permissionNotification, + ]) + }) + + test("notifies when an active session becomes idle and suppresses no-op idle", async () => { + const harness = await setup() + + harness.emit({ + id: "event-1", + type: "session.status", + properties: { sessionID: "session", status: { type: "idle" } }, + }) + harness.emit({ + id: "event-2", + type: "session.status", + properties: { sessionID: "session", status: { type: "busy" } }, + }) + harness.emit({ + id: "event-3", + type: "session.status", + properties: { sessionID: "session", status: { type: "idle" } }, + }) + + expect(harness.notifications).toEqual([ + { + title: "Demo session", + message: "Session done", + notification: { when: "blurred" }, + sound: { name: "done", when: "always" }, + }, + ]) + }) + + test("uses sound-only notifications and subagent_done sound for subagent sessions", async () => { + const harness = await setup() + + harness.emit({ id: "event-1", type: "question.asked", properties: question("question-1", "subagent") }) + harness.emit({ + id: "event-2", + type: "session.status", + properties: { sessionID: "subagent", status: { type: "busy" } }, + }) + harness.emit({ + id: "event-3", + type: "session.status", + properties: { sessionID: "subagent", status: { type: "idle" } }, + }) + + expect(harness.notifications).toEqual([ + { + title: "Subagent session", + message: "Question needs input", + notification: false, + sound: { name: "question", when: "always" }, + }, + { + title: "Subagent session", + message: "Session done", + notification: false, + sound: { name: "subagent_done", when: "always" }, + }, + ]) + }) + + test("notifies session errors once and suppresses the following idle done notification", async () => { + const harness = await setup() + + harness.emit({ + id: "event-1", + type: "session.status", + properties: { sessionID: "session", status: { type: "busy" } }, + }) + harness.emit({ + id: "event-2", + type: "session.error", + properties: { sessionID: "session", error: { name: "UnknownError", data: { message: "boom" } } }, + }) + harness.emit({ + id: "event-3", + type: "session.status", + properties: { sessionID: "session", status: { type: "idle" } }, + }) + + expect(harness.notifications).toEqual([ + { + title: "Demo session", + message: "Session error", + notification: { when: "blurred" }, + sound: { name: "error", when: "always" }, + }, + ]) + }) + + test("special-cases aborts and model response timeouts", async () => { + const harness = await setup() + + harness.emit({ + id: "event-1", + type: "session.status", + properties: { sessionID: "abort", status: { type: "busy" } }, + }) + harness.emit({ + id: "event-2", + type: "session.error", + properties: { sessionID: "abort", error: { name: "MessageAbortedError", data: { message: "Aborted" } } }, + }) + harness.emit({ + id: "event-3", + type: "session.status", + properties: { sessionID: "timeout", status: { type: "busy" } }, + }) + harness.emit({ + id: "event-4", + type: "session.error", + properties: { sessionID: "timeout", error: { name: "UnknownError", data: { message: "SSE read timed out" } } }, + }) + + expect(harness.notifications).toEqual([ + { + title: "Abort session", + message: "Session aborted", + notification: { when: "blurred" }, + sound: { name: "error", when: "always" }, + }, + { + title: "Timeout session", + message: "Model stopped responding", + notification: { when: "blurred" }, + sound: { name: "error", when: "always" }, + }, + ]) + }) +}) diff --git a/packages/opencode/test/cli/run/runtime.boot.test.ts b/packages/opencode/test/cli/run/runtime.boot.test.ts index e2569b0ac6bf..8dd978553248 100644 --- a/packages/opencode/test/cli/run/runtime.boot.test.ts +++ b/packages/opencode/test/cli/run/runtime.boot.test.ts @@ -1,14 +1,9 @@ import { afterEach, describe, expect, mock, spyOn, test } from "bun:test" -import type { KeyEvent, Renderable } from "@opentui/core" -import type { Binding } from "@opentui/keymap" -import { createBindingLookup } from "@opentui/keymap/extras" import { OpencodeClient, type Provider } from "@opencode-ai/sdk/v2" import { TuiConfig, type Resolved } from "@/cli/cmd/tui/config/tui" import { formatBindings } from "@/cli/cmd/run/keymap.shared" -import { TuiKeybind } from "@/cli/cmd/tui/config/keybind" import { resolveDiffStyle, resolveFooterKeybinds, resolveModelInfo } from "@/cli/cmd/run/runtime.boot" - -type RunBinding = Binding +import { createTuiResolvedConfig } from "../../fixture/tui-runtime" function model(id: string, providerID: string, context: number, variants?: Record>) { return { @@ -61,45 +56,37 @@ function model(id: string, providerID: string, context: number, variants?: Recor } } -function bindings(...keys: string[]) { - return keys.map((key) => ({ key })) -} - function config(input?: { leader?: string leaderTimeout?: number diff_style?: "auto" | "stacked" bindings?: Partial<{ - commandList: RunBinding[] - variantCycle: RunBinding[] - interrupt: RunBinding[] - historyPrevious: RunBinding[] - historyNext: RunBinding[] - inputClear: RunBinding[] - inputSubmit: RunBinding[] - inputNewline: RunBinding[] + commandList: string[] + variantCycle: string[] + interrupt: string[] + historyPrevious: string[] + historyNext: string[] + inputClear: string[] + inputSubmit: string[] + inputNewline: string[] }> }): Resolved { const bind = input?.bindings - const keybinds = TuiKeybind.Keybinds.parse({ - ...(input?.leader && { leader: input.leader }), - ...(bind?.commandList && { command_list: bind.commandList }), - ...(bind?.variantCycle && { variant_cycle: bind.variantCycle }), - ...(bind?.interrupt && { session_interrupt: bind.interrupt }), - ...(bind?.historyPrevious && { history_previous: bind.historyPrevious }), - ...(bind?.historyNext && { history_next: bind.historyNext }), - ...(bind?.inputClear && { input_clear: bind.inputClear }), - ...(bind?.inputSubmit && { input_submit: bind.inputSubmit }), - ...(bind?.inputNewline && { input_newline: bind.inputNewline }), - }) - return { + return createTuiResolvedConfig({ diff_style: input?.diff_style, - keybinds: createBindingLookup(TuiKeybind.toBindingConfig(keybinds), { - commandMap: TuiKeybind.CommandMap, - bindingDefaults: TuiKeybind.bindingDefaults(), - }), - leader_timeout: input?.leaderTimeout ?? 2000, - } + leader_timeout: input?.leaderTimeout, + keybinds: { + ...(input?.leader && { leader: input.leader }), + ...(bind?.commandList && { command_list: bind.commandList }), + ...(bind?.variantCycle && { variant_cycle: bind.variantCycle }), + ...(bind?.interrupt && { session_interrupt: bind.interrupt }), + ...(bind?.historyPrevious && { history_previous: bind.historyPrevious }), + ...(bind?.historyNext && { history_next: bind.historyNext }), + ...(bind?.inputClear && { input_clear: bind.inputClear }), + ...(bind?.inputSubmit && { input_submit: bind.inputSubmit }), + ...(bind?.inputNewline && { input_newline: bind.inputNewline }), + }, + }) } describe("run runtime boot", () => { @@ -112,14 +99,14 @@ describe("run runtime boot", () => { config({ leader: "ctrl+g", bindings: { - commandList: bindings("ctrl+p"), - variantCycle: bindings("ctrl+t", "alt+t"), - interrupt: bindings("ctrl+c"), - historyPrevious: bindings("k"), - historyNext: bindings("j"), - inputClear: bindings("ctrl+l"), - inputSubmit: bindings("ctrl+s"), - inputNewline: bindings("alt+return"), + commandList: ["ctrl+p"], + variantCycle: ["ctrl+t", "alt+t"], + interrupt: ["ctrl+c"], + historyPrevious: ["k"], + historyNext: ["j"], + inputClear: ["ctrl+l"], + inputSubmit: ["ctrl+s"], + inputNewline: ["alt+return"], }, }), ) diff --git a/packages/opencode/test/cli/tui/plugin-loader.test.ts b/packages/opencode/test/cli/tui/plugin-loader.test.ts index 493520fc0049..ce62550e12a0 100644 --- a/packages/opencode/test/cli/tui/plugin-loader.test.ts +++ b/packages/opencode/test/cli/tui/plugin-loader.test.ts @@ -3,6 +3,7 @@ import fs from "fs/promises" import path from "path" import { pathToFileURL } from "url" import { createTestKeymap } from "@opentui/keymap/testing" +import type { TuiAttentionSoundPack } from "@opencode-ai/plugin/tui" import { tmpdir } from "../../fixture/fixture" import { createTuiPluginApi } from "../../fixture/tui-plugin" import { createTuiResolvedConfig, mockTuiRuntime } from "../../fixture/tui-runtime" @@ -854,6 +855,85 @@ test("plugin keymap proxy preserves real keymap receiver", async () => { } }) +test("auto-disposes plugin attention sound packs and resolves sound paths", async () => { + await using tmp = await tmpdir({ + init: async (dir) => { + const file = path.join(dir, "attention-soundpack-plugin.ts") + const spec = pathToFileURL(file).href + const absolute = path.join(dir, "sounds", "default.mp3") + const url = pathToFileURL(path.join(dir, "sounds", "error.mp3")).href + + await Bun.write( + file, + `export default { + id: "demo.attention.soundpack", + tui: async (api) => { + api.attention.soundboard.registerPack({ + id: "demo.pack", + sounds: { + default: ${JSON.stringify(absolute)}, + question: "sounds/question.mp3", + done: " sounds/done.mp3 ", + subagent_done: "sounds/subagent-done.mp3", + error: ${JSON.stringify(url)}, + nope: "sounds/nope.mp3", + permission: "", + }, + }) + }, +} +`, + ) + + return { spec } + }, + }) + + const packs: TuiAttentionSoundPack[] = [] + let dropped = 0 + const attention = { + soundboard: { + registerPack(pack: TuiAttentionSoundPack) { + packs.push(pack) + return () => { + dropped += 1 + } + }, + }, + } + const wait = spyOn(TuiConfig, "waitForDependencies").mockResolvedValue() + const cwd = spyOn(process, "cwd").mockImplementation(() => tmp.path) + + try { + await TuiPluginRuntime.init({ + api: createTuiPluginApi({ attention }), + config: createTuiResolvedConfig({ + plugin: [tmp.extra.spec], + plugin_origins: [{ spec: tmp.extra.spec, scope: "local", source: path.join(tmp.path, "tui.json") }], + }), + }) + + expect(packs).toEqual([ + { + id: "demo.pack", + sounds: { + default: path.join(tmp.path, "sounds", "default.mp3"), + question: path.join(tmp.path, "sounds", "question.mp3"), + done: path.join(tmp.path, "sounds", "done.mp3"), + subagent_done: path.join(tmp.path, "sounds", "subagent-done.mp3"), + error: path.join(tmp.path, "sounds", "error.mp3"), + }, + }, + ]) + expect(dropped).toBe(0) + } finally { + await TuiPluginRuntime.dispose() + expect(dropped).toBe(1) + cwd.mockRestore() + wait.mockRestore() + } +}) + test("auto-disposes plugin keymap transformers", async () => { await using tmp = await tmpdir({ init: async (dir) => { diff --git a/packages/opencode/test/config/tui.test.ts b/packages/opencode/test/config/tui.test.ts index db045685733e..30c5a65fbd11 100644 --- a/packages/opencode/test/config/tui.test.ts +++ b/packages/opencode/test/config/tui.test.ts @@ -1,113 +1,100 @@ -import { afterEach, beforeEach, expect, test } from "bun:test" +import { expect } from "bun:test" import path from "path" -import fs from "fs/promises" -import { provideTestInstance, tmpdir } from "../fixture/fixture" -import { InstanceRuntime } from "@/project/instance-runtime" -import { TuiConfig } from "../../src/cli/cmd/tui/config/tui" -import { Config } from "@/config/config" -import { Global } from "@opencode-ai/core/global" -import { Filesystem } from "@/util/filesystem" -import { AppRuntime } from "../../src/effect/app-runtime" +import { pathToFileURL } from "url" import { Effect, Layer } from "effect" -import { CurrentWorkingDirectory } from "@/cli/cmd/tui/config/cwd" +import { AppFileSystem } from "@opencode-ai/core/filesystem" +import { Global } from "@opencode-ai/core/global" +import { Config } from "@/config/config" import { ConfigPlugin } from "@/config/plugin" +import { CurrentWorkingDirectory } from "@/cli/cmd/tui/config/cwd" +import { TuiConfig } from "../../src/cli/cmd/tui/config/tui" +import { TestInstance } from "../fixture/fixture" +import { testEffect } from "../lib/effect" -const wintest = process.platform === "win32" ? test : test.skip -const clear = async (wait = false) => { - await AppRuntime.runPromise(Config.Service.use((svc) => svc.invalidate())) - if (wait) await InstanceRuntime.disposeAllInstances() -} -const load = () => AppRuntime.runPromise(Config.Service.use((svc) => svc.get())) - -beforeEach(async () => { - await clear(true) -}) +const it = testEffect(Layer.mergeAll(Config.defaultLayer, AppFileSystem.defaultLayer)) +const winIt = process.platform === "win32" ? it.instance : it.instance.skip -const getTuiConfig = async (directory: string) => - Effect.runPromise( - TuiConfig.Service.use((svc) => svc.get()).pipe( - Effect.provide(TuiConfig.defaultLayer.pipe(Layer.provide(Layer.succeed(CurrentWorkingDirectory, directory)))), - ), - ) +const globalConfigFiles = ["opencode.json", "opencode.jsonc", "tui.json", "tui.jsonc"].map((file) => + path.join(Global.Path.config, file), +) -async function withPlatform(platform: typeof process.platform, fn: () => Promise) { - const original = Object.getOwnPropertyDescriptor(process, "platform") - Object.defineProperty(process, "platform", { - ...original, - value: platform, - }) - try { - return await fn() - } finally { - if (original) Object.defineProperty(process, "platform", original) - } -} - -afterEach(async () => { +const cleanState = Effect.gen(function* () { + const fs = yield* AppFileSystem.Service delete process.env.OPENCODE_CONFIG delete process.env.OPENCODE_TUI_CONFIG - await fs.rm(path.join(Global.Path.config, "opencode.json"), { force: true }).catch(() => {}) - await fs.rm(path.join(Global.Path.config, "opencode.jsonc"), { force: true }).catch(() => {}) - await fs.rm(path.join(Global.Path.config, "tui.json"), { force: true }).catch(() => {}) - await fs.rm(path.join(Global.Path.config, "tui.jsonc"), { force: true }).catch(() => {}) - await clear(true) + yield* Effect.forEach(globalConfigFiles, (file) => fs.remove(file, { force: true }).pipe(Effect.ignore), { + discard: true, + }) }) -test("keeps server and tui plugin merge semantics aligned", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - const local = path.join(dir, ".opencode") - await fs.mkdir(local, { recursive: true }) - - await Bun.write( - path.join(Global.Path.config, "opencode.json"), - JSON.stringify( - { - plugin: [["shared-plugin@1.0.0", { source: "global" }], "global-only@1.0.0"], - }, - null, - 2, - ), - ) - await Bun.write( - path.join(Global.Path.config, "tui.json"), - JSON.stringify( - { - plugin: [["shared-plugin@1.0.0", { source: "global" }], "global-only@1.0.0"], - }, - null, - 2, - ), - ) +const withCleanState = (self: Effect.Effect) => + Effect.acquireUseRelease( + cleanState, + () => self, + () => cleanState, + ) - await Bun.write( - path.join(local, "opencode.json"), - JSON.stringify( - { - plugin: [["shared-plugin@2.0.0", { source: "local" }], "local-only@1.0.0"], - }, - null, - 2, - ), - ) - await Bun.write( - path.join(local, "tui.json"), - JSON.stringify( - { - plugin: [["shared-plugin@2.0.0", { source: "local" }], "local-only@1.0.0"], - }, - null, - 2, - ), - ) - }, - }) +const withEnv = (name: string, value: string | undefined, self: Effect.Effect) => + Effect.acquireUseRelease( + Effect.sync(() => { + const previous = process.env[name] + if (value === undefined) delete process.env[name] + else process.env[name] = value + return previous + }), + () => self, + (previous) => + Effect.sync(() => { + if (previous === undefined) delete process.env[name] + else process.env[name] = previous + }), + ) + +const withPlatform = (platform: typeof process.platform, self: Effect.Effect) => + Effect.acquireUseRelease( + Effect.sync(() => { + const original = Object.getOwnPropertyDescriptor(process, "platform") + Object.defineProperty(process, "platform", { + ...original, + value: platform, + }) + return original + }), + () => self, + (original) => + Effect.sync(() => { + if (original) Object.defineProperty(process, "platform", original) + }), + ) + +const getTuiConfig = (directory: string) => + TuiConfig.Service.use((svc) => svc.get()).pipe( + Effect.provide(TuiConfig.defaultLayer.pipe(Layer.provide(Layer.succeed(CurrentWorkingDirectory, directory)))), + ) - await provideTestInstance({ - directory: tmp.path, - fn: async () => { - const server = await load() - const tui = await getTuiConfig(tmp.path) +it.instance("keeps server and tui plugin merge semantics aligned", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + const local = path.join(test.directory, ".opencode") + yield* fs.makeDirectory(local, { recursive: true }) + + yield* fs.writeJson(path.join(Global.Path.config, "opencode.json"), { + plugin: [["shared-plugin@1.0.0", { source: "global" }], "global-only@1.0.0"], + }) + yield* fs.writeJson(path.join(Global.Path.config, "tui.json"), { + plugin: [["shared-plugin@1.0.0", { source: "global" }], "global-only@1.0.0"], + }) + yield* fs.writeJson(path.join(local, "opencode.json"), { + plugin: [["shared-plugin@2.0.0", { source: "local" }], "local-only@1.0.0"], + }) + yield* fs.writeJson(path.join(local, "tui.json"), { + plugin: [["shared-plugin@2.0.0", { source: "local" }], "local-only@1.0.0"], + }) + + const server = yield* Config.Service.use((svc) => svc.get()) + const tui = yield* getTuiConfig(test.directory) const serverPlugins = (server.plugin ?? []).map((item) => ConfigPlugin.pluginSpecifier(item)) const tuiPlugins = (tui.plugin ?? []).map((item) => ConfigPlugin.pluginSpecifier(item)) @@ -120,186 +107,228 @@ test("keeps server and tui plugin merge semantics aligned", async () => { expect(serverOrigins.map((item) => ConfigPlugin.pluginSpecifier(item.spec))).toEqual(serverPlugins) expect(tuiOrigins.map((item) => ConfigPlugin.pluginSpecifier(item.spec))).toEqual(tuiPlugins) expect(serverOrigins.map((item) => item.scope)).toEqual(tuiOrigins.map((item) => item.scope)) - }, - }) -}) - -test("loads tui config with the same precedence order as server config paths", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write(path.join(Global.Path.config, "tui.json"), JSON.stringify({ theme: "global" }, null, 2)) - await Bun.write(path.join(dir, "tui.json"), JSON.stringify({ theme: "project" }, null, 2)) - await fs.mkdir(path.join(dir, ".opencode"), { recursive: true }) - await Bun.write( - path.join(dir, ".opencode", "tui.json"), + }), + ), +) + +it.instance("loads tui config with the same precedence order as server config paths", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeJson(path.join(Global.Path.config, "tui.json"), { theme: "global" }) + yield* fs.writeJson(path.join(test.directory, "tui.json"), { theme: "project" }) + yield* fs.writeWithDirs( + path.join(test.directory, ".opencode", "tui.json"), JSON.stringify({ theme: "local", diff_style: "stacked" }, null, 2), ) - }, - }) - - const config = await getTuiConfig(tmp.path) - expect(config.theme).toBe("local") - expect(config.diff_style).toBe("stacked") -}) - -test("migrates tui-specific keys from opencode.json when tui.json does not exist", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write( - path.join(dir, "opencode.json"), - JSON.stringify( - { - theme: "migrated-theme", - tui: { scroll_speed: 5 }, - keybinds: { app_exit: "ctrl+q" }, - }, - null, - 2, - ), - ) - }, - }) - - const config = await getTuiConfig(tmp.path) - expect(config.theme).toBe("migrated-theme") - expect(config.scroll_speed).toBe(5) - expect(config.keybinds.get("app.exit")?.[0]?.key).toBe("ctrl+q") - const text = await Filesystem.readText(path.join(tmp.path, "tui.json")) - expect(JSON.parse(text)).toMatchObject({ - theme: "migrated-theme", - scroll_speed: 5, - }) - const server = JSON.parse(await Filesystem.readText(path.join(tmp.path, "opencode.json"))) - expect(server.theme).toBeUndefined() - expect(server.keybinds).toBeUndefined() - expect(server.tui).toBeUndefined() - expect(await Filesystem.exists(path.join(tmp.path, "opencode.json.tui-migration.bak"))).toBe(true) - expect(await Filesystem.exists(path.join(tmp.path, "tui.json"))).toBe(true) -}) -test("migrates project legacy tui keys even when global tui.json already exists", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write(path.join(Global.Path.config, "tui.json"), JSON.stringify({ theme: "global" }, null, 2)) - await Bun.write( - path.join(dir, "opencode.json"), - JSON.stringify( - { - theme: "project-migrated", - tui: { scroll_speed: 2 }, + const config = yield* getTuiConfig(test.directory) + expect(config.theme).toBe("local") + expect(config.diff_style).toBe("stacked") + }), + ), +) + +it.instance("resolves attention config defaults and overrides", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + + expect((yield* getTuiConfig(test.directory)).attention).toEqual({ + enabled: false, + notifications: true, + sound: true, + volume: 0.4, + sound_pack: "opencode.default", + sounds: {}, + }) + + yield* fs.writeJson(path.join(test.directory, "tui.json"), { + attention: { + enabled: false, + notifications: false, + sound: false, + volume: 0.7, + sound_pack: "acme.soft", + sounds: { + default: path.join(test.directory, "default.mp3"), + question: pathToFileURL(path.join(test.directory, "question.mp3")).href, + error: "./error.mp3", + subagent_done: "./subagent-done.mp3", }, - null, - 2, - ), - ) - }, - }) - - const config = await getTuiConfig(tmp.path) - expect(config.theme).toBe("project-migrated") - expect(config.scroll_speed).toBe(2) - expect(await Filesystem.exists(path.join(tmp.path, "tui.json"))).toBe(true) - - const server = JSON.parse(await Filesystem.readText(path.join(tmp.path, "opencode.json"))) - expect(server.theme).toBeUndefined() - expect(server.tui).toBeUndefined() -}) - -test("drops unknown legacy tui keys during migration", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write( - path.join(dir, "opencode.json"), - JSON.stringify( - { - theme: "migrated-theme", - tui: { scroll_speed: 2, foo: 1 }, - }, - null, - 2, - ), - ) - }, - }) - - const config = await getTuiConfig(tmp.path) - expect(config.theme).toBe("migrated-theme") - expect(config.scroll_speed).toBe(2) - - const text = await Filesystem.readText(path.join(tmp.path, "tui.json")) - const migrated = JSON.parse(text) - expect(migrated.scroll_speed).toBe(2) - expect(migrated.foo).toBeUndefined() -}) - -test("skips migration when opencode.jsonc is syntactically invalid", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write( - path.join(dir, "opencode.jsonc"), + }, + }) + + expect((yield* getTuiConfig(test.directory)).attention).toEqual({ + enabled: false, + notifications: false, + sound: false, + volume: 0.7, + sound_pack: "acme.soft", + sounds: { + default: path.join(test.directory, "default.mp3"), + question: path.join(test.directory, "question.mp3"), + error: path.join(test.directory, "error.mp3"), + subagent_done: path.join(test.directory, "subagent-done.mp3"), + }, + }) + }), + ), +) + +it.instance("migrates tui-specific keys from opencode.json when tui.json does not exist", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + const source = path.join(test.directory, "opencode.json") + yield* fs.writeJson(source, { + theme: "migrated-theme", + tui: { scroll_speed: 5 }, + keybinds: { app_exit: "ctrl+q" }, + }) + + const config = yield* getTuiConfig(test.directory) + expect(config.theme).toBe("migrated-theme") + expect(config.scroll_speed).toBe(5) + expect(config.keybinds.get("app.exit")?.[0]?.key).toBe("ctrl+q") + expect(JSON.parse(yield* fs.readFileString(path.join(test.directory, "tui.json")))).toMatchObject({ + theme: "migrated-theme", + scroll_speed: 5, + }) + const server = JSON.parse(yield* fs.readFileString(source)) + expect(server.theme).toBeUndefined() + expect(server.keybinds).toBeUndefined() + expect(server.tui).toBeUndefined() + expect(yield* fs.existsSafe(path.join(test.directory, "opencode.json.tui-migration.bak"))).toBe(true) + expect(yield* fs.existsSafe(path.join(test.directory, "tui.json"))).toBe(true) + }), + ), +) + +it.instance("migrates project legacy tui keys even when global tui.json already exists", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeJson(path.join(Global.Path.config, "tui.json"), { theme: "global" }) + yield* fs.writeJson(path.join(test.directory, "opencode.json"), { + theme: "project-migrated", + tui: { scroll_speed: 2 }, + }) + + const config = yield* getTuiConfig(test.directory) + expect(config.theme).toBe("project-migrated") + expect(config.scroll_speed).toBe(2) + expect(yield* fs.existsSafe(path.join(test.directory, "tui.json"))).toBe(true) + + const server = JSON.parse(yield* fs.readFileString(path.join(test.directory, "opencode.json"))) + expect(server.theme).toBeUndefined() + expect(server.tui).toBeUndefined() + }), + ), +) + +it.instance("drops unknown legacy tui keys during migration", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeJson(path.join(test.directory, "opencode.json"), { + theme: "migrated-theme", + tui: { scroll_speed: 2, foo: 1 }, + }) + + const config = yield* getTuiConfig(test.directory) + expect(config.theme).toBe("migrated-theme") + expect(config.scroll_speed).toBe(2) + + const migrated = JSON.parse(yield* fs.readFileString(path.join(test.directory, "tui.json"))) + expect(migrated.scroll_speed).toBe(2) + expect(migrated.foo).toBeUndefined() + }), + ), +) + +it.instance("skips migration when opencode.jsonc is syntactically invalid", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeFileString( + path.join(test.directory, "opencode.jsonc"), `{ "theme": "broken-theme", "tui": { "scroll_speed": 2 } "username": "still-broken" }`, ) - }, - }) - - const config = await getTuiConfig(tmp.path) - expect(config.theme).toBeUndefined() - expect(config.scroll_speed).toBeUndefined() - expect(await Filesystem.exists(path.join(tmp.path, "tui.json"))).toBe(false) - expect(await Filesystem.exists(path.join(tmp.path, "opencode.jsonc.tui-migration.bak"))).toBe(false) - const source = await Filesystem.readText(path.join(tmp.path, "opencode.jsonc")) - expect(source).toContain('"theme": "broken-theme"') - expect(source).toContain('"tui": { "scroll_speed": 2 }') -}) - -test("skips migration when tui.json already exists", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write(path.join(dir, "opencode.json"), JSON.stringify({ theme: "legacy" }, null, 2)) - await Bun.write(path.join(dir, "tui.json"), JSON.stringify({ diff_style: "stacked" }, null, 2)) - }, - }) - - const config = await getTuiConfig(tmp.path) - expect(config.diff_style).toBe("stacked") - expect(config.theme).toBeUndefined() - - const server = JSON.parse(await Filesystem.readText(path.join(tmp.path, "opencode.json"))) - expect(server.theme).toBe("legacy") - expect(await Filesystem.exists(path.join(tmp.path, "opencode.json.tui-migration.bak"))).toBe(false) -}) - -test("continues loading tui config when legacy source cannot be stripped", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write(path.join(dir, "opencode.json"), JSON.stringify({ theme: "readonly-theme" }, null, 2)) - }, - }) - const source = path.join(tmp.path, "opencode.json") - await fs.chmod(source, 0o444) - - try { - const config = await getTuiConfig(tmp.path) - expect(config.theme).toBe("readonly-theme") - expect(await Filesystem.exists(path.join(tmp.path, "tui.json"))).toBe(true) - - const server = JSON.parse(await Filesystem.readText(source)) - expect(server.theme).toBe("readonly-theme") - } finally { - await fs.chmod(source, 0o644) - } -}) - -test("migration backup preserves JSONC comments", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write( - path.join(dir, "opencode.jsonc"), + const config = yield* getTuiConfig(test.directory) + expect(config.theme).toBeUndefined() + expect(config.scroll_speed).toBeUndefined() + expect(yield* fs.existsSafe(path.join(test.directory, "tui.json"))).toBe(false) + expect(yield* fs.existsSafe(path.join(test.directory, "opencode.jsonc.tui-migration.bak"))).toBe(false) + const source = yield* fs.readFileString(path.join(test.directory, "opencode.jsonc")) + expect(source).toContain('"theme": "broken-theme"') + expect(source).toContain('"tui": { "scroll_speed": 2 }') + }), + ), +) + +it.instance("skips migration when tui.json already exists", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeJson(path.join(test.directory, "opencode.json"), { theme: "legacy" }) + yield* fs.writeJson(path.join(test.directory, "tui.json"), { diff_style: "stacked" }) + + const config = yield* getTuiConfig(test.directory) + expect(config.diff_style).toBe("stacked") + expect(config.theme).toBeUndefined() + + const server = JSON.parse(yield* fs.readFileString(path.join(test.directory, "opencode.json"))) + expect(server.theme).toBe("legacy") + expect(yield* fs.existsSafe(path.join(test.directory, "opencode.json.tui-migration.bak"))).toBe(false) + }), + ), +) + +it.instance("continues loading tui config when legacy source cannot be stripped", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + const source = path.join(test.directory, "opencode.json") + yield* fs.writeJson(source, { theme: "readonly-theme" }) + + yield* Effect.acquireUseRelease( + fs.chmod(source, 0o444), + () => + Effect.gen(function* () { + const config = yield* getTuiConfig(test.directory) + expect(config.theme).toBe("readonly-theme") + expect(yield* fs.existsSafe(path.join(test.directory, "tui.json"))).toBe(true) + + const server = JSON.parse(yield* fs.readFileString(source)) + expect(server.theme).toBe("readonly-theme") + }), + () => fs.chmod(source, 0o644).pipe(Effect.ignore), + ) + }), + ), +) + +it.instance("migration backup preserves JSONC comments", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeFileString( + path.join(test.directory, "opencode.jsonc"), `{ // top-level comment "theme": "jsonc-theme", @@ -309,498 +338,520 @@ test("migration backup preserves JSONC comments", async () => { } }`, ) - }, - }) - - await getTuiConfig(tmp.path) - const backup = await Filesystem.readText(path.join(tmp.path, "opencode.jsonc.tui-migration.bak")) - expect(backup).toContain("// top-level comment") - expect(backup).toContain("// nested comment") - expect(backup).toContain('"theme": "jsonc-theme"') - expect(backup).toContain('"scroll_speed": 1.5') -}) - -test("migrates legacy tui keys across multiple opencode.json levels", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - const nested = path.join(dir, "apps", "client") - await fs.mkdir(nested, { recursive: true }) - await Bun.write(path.join(dir, "opencode.json"), JSON.stringify({ theme: "root-theme" }, null, 2)) - await Bun.write(path.join(nested, "opencode.json"), JSON.stringify({ theme: "nested-theme" }, null, 2)) - }, - }) - const config = await getTuiConfig(path.join(tmp.path, "apps", "client")) - expect(config.theme).toBe("nested-theme") - expect(await Filesystem.exists(path.join(tmp.path, "tui.json"))).toBe(true) - expect(await Filesystem.exists(path.join(tmp.path, "apps", "client", "tui.json"))).toBe(true) -}) -test("flattens nested tui key inside tui.json", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write( - path.join(dir, "tui.json"), - JSON.stringify({ - theme: "outer", - tui: { scroll_speed: 3, diff_style: "stacked" }, + yield* getTuiConfig(test.directory) + const backup = yield* fs.readFileString(path.join(test.directory, "opencode.jsonc.tui-migration.bak")) + expect(backup).toContain("// top-level comment") + expect(backup).toContain("// nested comment") + expect(backup).toContain('"theme": "jsonc-theme"') + expect(backup).toContain('"scroll_speed": 1.5') + }), + ), +) + +it.instance("migrates legacy tui keys across multiple opencode.json levels", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + const nested = path.join(test.directory, "apps", "client") + yield* fs.makeDirectory(nested, { recursive: true }) + yield* fs.writeJson(path.join(test.directory, "opencode.json"), { theme: "root-theme" }) + yield* fs.writeJson(path.join(nested, "opencode.json"), { theme: "nested-theme" }) + + const config = yield* getTuiConfig(nested) + expect(config.theme).toBe("nested-theme") + expect(yield* fs.existsSafe(path.join(test.directory, "tui.json"))).toBe(true) + expect(yield* fs.existsSafe(path.join(nested, "tui.json"))).toBe(true) + }), + ), +) + +it.instance("flattens nested tui key inside tui.json", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeJson(path.join(test.directory, "tui.json"), { + theme: "outer", + tui: { scroll_speed: 3, diff_style: "stacked" }, + }) + + const config = yield* getTuiConfig(test.directory) + expect(config.scroll_speed).toBe(3) + expect(config.diff_style).toBe("stacked") + expect(config.theme).toBe("outer") + }), + ), +) + +it.instance("top-level keys in tui.json take precedence over nested tui key", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeJson(path.join(test.directory, "tui.json"), { + diff_style: "auto", + tui: { diff_style: "stacked", scroll_speed: 2 }, + }) + + const config = yield* getTuiConfig(test.directory) + expect(config.diff_style).toBe("auto") + expect(config.scroll_speed).toBe(2) + }), + ), +) + +it.instance("project config takes precedence over OPENCODE_TUI_CONFIG (matches OPENCODE_CONFIG)", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + const custom = path.join(test.directory, "custom-tui.json") + yield* fs.writeJson(path.join(test.directory, "tui.json"), { theme: "project", diff_style: "auto" }) + yield* fs.writeJson(custom, { theme: "custom", diff_style: "stacked" }) + + yield* withEnv( + "OPENCODE_TUI_CONFIG", + custom, + Effect.gen(function* () { + const config = yield* getTuiConfig(test.directory) + expect(config.theme).toBe("project") + expect(config.diff_style).toBe("auto") }), ) - }, - }) - - const config = await getTuiConfig(tmp.path) - expect(config.scroll_speed).toBe(3) - expect(config.diff_style).toBe("stacked") - // top-level keys take precedence over nested tui keys - expect(config.theme).toBe("outer") -}) - -test("top-level keys in tui.json take precedence over nested tui key", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write( - path.join(dir, "tui.json"), - JSON.stringify({ - diff_style: "auto", - tui: { diff_style: "stacked", scroll_speed: 2 }, - }), + }), + ), +) + +it.instance("merges keybind overrides across precedence layers", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeJson(path.join(Global.Path.config, "tui.json"), { keybinds: { app_exit: "ctrl+q" } }) + yield* fs.writeJson(path.join(test.directory, "tui.json"), { keybinds: { theme_list: "ctrl+k" } }) + + const config = yield* getTuiConfig(test.directory) + expect(config.keybinds.get("app.exit")?.[0]?.key).toBe("ctrl+q") + expect(config.keybinds.get("theme.switch")?.[0]?.key).toBe("ctrl+k") + }), + ), +) + +it.instance("resolves keybind lookup from canonical keybinds", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeJson(path.join(test.directory, "tui.json"), { + keybinds: { + leader: { key: { name: "g", ctrl: true } }, + command_list: "alt+p", + which_key_toggle: "alt+k", + editor_open: "ctrl+e", + "prompt.autocomplete.next": "ctrl+j", + "dialog.mcp.toggle": "ctrl+t", + model_favorite_toggle: "ctrl+f", + "dialog.plugins.install": "shift+i", + }, + leader_timeout: 1234, + }) + + const config = yield* getTuiConfig(test.directory) + expect(config.keybinds.get("leader")?.[0]?.key).toEqual({ name: "g", ctrl: true }) + expect(config.leader_timeout).toBe(1234) + expect(config.keybinds.get("command.palette.show")?.[0]?.key).toBe("alt+p") + expect(config.keybinds.get("session.new")?.[0]?.key).toBe("n") + expect(config.keybinds.get("which-key.toggle")?.[0]?.key).toBe("alt+k") + expect(config.keybinds.get("which-key.layout.toggle")?.[0]?.key).toBe("ctrl+alt+shift+k") + expect(config.keybinds.get("which-key.pending.toggle")?.[0]?.key).toBe("ctrl+alt+shift+p") + expect(config.keybinds.get("which-key.group.next")?.[0]?.key).toBe("ctrl+alt+right,ctrl+alt+]") + expect((config.keybinds.get("which-key.toggle")?.[0] as { desc?: unknown } | undefined)?.desc).toBe( + "Toggle which-key panel", ) - }, - }) - - const config = await getTuiConfig(tmp.path) - expect(config.diff_style).toBe("auto") - expect(config.scroll_speed).toBe(2) -}) - -test("project config takes precedence over OPENCODE_TUI_CONFIG (matches OPENCODE_CONFIG)", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write(path.join(dir, "tui.json"), JSON.stringify({ theme: "project", diff_style: "auto" })) - const custom = path.join(dir, "custom-tui.json") - await Bun.write(custom, JSON.stringify({ theme: "custom", diff_style: "stacked" })) - process.env.OPENCODE_TUI_CONFIG = custom - }, - }) - - const config = await getTuiConfig(tmp.path) - // project tui.json overrides the custom path, same as server config precedence - expect(config.theme).toBe("project") - // project also set diff_style, so that wins - expect(config.diff_style).toBe("auto") -}) - -test("merges keybind overrides across precedence layers", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write(path.join(Global.Path.config, "tui.json"), JSON.stringify({ keybinds: { app_exit: "ctrl+q" } })) - await Bun.write(path.join(dir, "tui.json"), JSON.stringify({ keybinds: { theme_list: "ctrl+k" } })) - }, - }) - const config = await getTuiConfig(tmp.path) - expect(config.keybinds.get("app.exit")?.[0]?.key).toBe("ctrl+q") - expect(config.keybinds.get("theme.switch")?.[0]?.key).toBe("ctrl+k") -}) - -test("resolves keybind lookup from canonical keybinds", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write( - path.join(dir, "tui.json"), - JSON.stringify({ + expect(config.keybinds.get("prompt.editor")?.[0]?.key).toBe("ctrl+e") + expect(config.keybinds.get("prompt.autocomplete.next")?.[0]?.key).toBe("ctrl+j") + expect(config.keybinds.get("dialog.mcp.toggle")?.[0]?.key).toBe("ctrl+t") + expect(config.keybinds.get("model.dialog.favorite")?.[0]?.key).toBe("ctrl+f") + expect(config.keybinds.get("dialog.plugins.install")?.[0]?.key).toBe("shift+i") + expect( + config.keybinds.gather("plugins.dialog", ["dialog.plugins.install"]).map((binding) => binding.cmd), + ).toEqual(["dialog.plugins.install"]) + }), + ), +) + +it.instance("keybinds accept OpenTUI binding specs", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeJson(path.join(test.directory, "tui.json"), { + keybinds: { + command_list: [{ key: "alt+p", preventDefault: false }], + editor_open: { key: { name: "e", ctrl: true }, group: "Explicit" }, + "prompt.autocomplete.next": false, + plugin_manager: "ctrl+shift+p", + }, + }) + + const config = yield* getTuiConfig(test.directory) + expect(config.keybinds.get("command.palette.show")).toEqual([ + { key: "alt+p", cmd: "command.palette.show", preventDefault: false, desc: "List available commands" }, + ]) + expect(config.keybinds.get("prompt.editor")?.[0]).toMatchObject({ + key: { name: "e", ctrl: true }, + cmd: "prompt.editor", + group: "Explicit", + }) + expect(config.keybinds.get("prompt.autocomplete.next")).toEqual([]) + expect(config.keybinds.get("plugins.list")?.[0]?.key).toBe("ctrl+shift+p") + }), + ), +) + +winIt("defaults Ctrl+Z to input undo on Windows", () => + withCleanState( + Effect.gen(function* () { + const test = yield* TestInstance + const config = yield* getTuiConfig(test.directory) + expect(config.keybinds.get("terminal.suspend")).toEqual([]) + expect(config.keybinds.get("input.undo")?.[0]?.key).toBe("ctrl+z,ctrl+-,super+z") + }), + ), +) + +winIt("keeps explicit input undo overrides on Windows", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeJson(path.join(test.directory, "tui.json"), { keybinds: { input_undo: "ctrl+y" } }) + + const config = yield* getTuiConfig(test.directory) + expect(config.keybinds.get("terminal.suspend")).toEqual([]) + expect(config.keybinds.get("input.undo")?.[0]?.key).toBe("ctrl+y") + }), + ), +) + +winIt("ignores terminal suspend bindings on Windows", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeJson(path.join(test.directory, "tui.json"), { keybinds: { terminal_suspend: "alt+z" } }) + + const config = yield* getTuiConfig(test.directory) + expect(config.keybinds.get("terminal.suspend")).toEqual([]) + expect(config.keybinds.get("input.undo")?.[0]?.key).toBe("ctrl+z,ctrl+-,super+z") + }), + ), +) + +it.instance("applies Windows keybind defaults", () => + withCleanState( + withPlatform( + "win32", + Effect.gen(function* () { + const test = yield* TestInstance + const config = yield* getTuiConfig(test.directory) + expect(config.keybinds.get("terminal.suspend")).toEqual([]) + expect(config.keybinds.get("input.undo")?.[0]?.key).toBe("ctrl+z,ctrl+-,super+z") + }), + ), + ), +) + +it.instance("ignores explicit keybind terminal suspend binding on Windows", () => + withCleanState( + withPlatform( + "win32", + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeJson(path.join(test.directory, "tui.json"), { keybinds: { - leader: { key: { name: "g", ctrl: true } }, - command_list: "alt+p", - which_key_toggle: "alt+k", - editor_open: "ctrl+e", - "prompt.autocomplete.next": "ctrl+j", - "dialog.mcp.toggle": "ctrl+t", - model_favorite_toggle: "ctrl+f", - "dialog.plugins.install": "shift+i", + terminal_suspend: "alt+z", }, - leader_timeout: 1234, - }), - ) - }, - }) - - const config = await getTuiConfig(tmp.path) - expect(config.keybinds.get("leader")?.[0]?.key).toEqual({ name: "g", ctrl: true }) - expect(config.leader_timeout).toBe(1234) - expect(config.keybinds.get("command.palette.show")?.[0]?.key).toBe("alt+p") - expect(config.keybinds.get("session.new")?.[0]?.key).toBe("n") - expect(config.keybinds.get("which-key.toggle")?.[0]?.key).toBe("alt+k") - expect(config.keybinds.get("which-key.layout.toggle")?.[0]?.key).toBe("ctrl+alt+shift+k") - expect(config.keybinds.get("which-key.pending.toggle")?.[0]?.key).toBe("ctrl+alt+shift+p") - expect(config.keybinds.get("which-key.group.next")?.[0]?.key).toBe("ctrl+alt+right,ctrl+alt+]") - expect((config.keybinds.get("which-key.toggle")?.[0] as { desc?: unknown } | undefined)?.desc).toBe( - "Toggle which-key panel", - ) - expect(config.keybinds.get("prompt.editor")?.[0]?.key).toBe("ctrl+e") - expect(config.keybinds.get("prompt.autocomplete.next")?.[0]?.key).toBe("ctrl+j") - expect(config.keybinds.get("dialog.mcp.toggle")?.[0]?.key).toBe("ctrl+t") - expect(config.keybinds.get("model.dialog.favorite")?.[0]?.key).toBe("ctrl+f") - expect(config.keybinds.get("dialog.plugins.install")?.[0]?.key).toBe("shift+i") - expect(config.keybinds.gather("plugins.dialog", ["dialog.plugins.install"]).map((binding) => binding.cmd)).toEqual([ - "dialog.plugins.install", - ]) -}) + }) -test("keybinds accept OpenTUI binding specs", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write( - path.join(dir, "tui.json"), - JSON.stringify({ + const config = yield* getTuiConfig(test.directory) + expect(config.keybinds.get("terminal.suspend")).toEqual([]) + }), + ), + ), +) + +it.instance("keeps explicit configured keybind input undo on Windows", () => + withCleanState( + withPlatform( + "win32", + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeJson(path.join(test.directory, "tui.json"), { keybinds: { - command_list: [{ key: "alt+p", preventDefault: false }], - editor_open: { key: { name: "e", ctrl: true }, group: "Explicit" }, - "prompt.autocomplete.next": false, - plugin_manager: "ctrl+shift+p", + input_undo: "ctrl+y", }, + }) + + const config = yield* getTuiConfig(test.directory) + expect(config.keybinds.get("input.undo")?.[0]?.key).toBe("ctrl+y") + }), + ), + ), +) + +it.instance("OPENCODE_TUI_CONFIG provides settings when no project config exists", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + const custom = path.join(test.directory, "custom-tui.json") + yield* fs.writeJson(custom, { theme: "from-env", diff_style: "stacked" }) + + yield* withEnv( + "OPENCODE_TUI_CONFIG", + custom, + Effect.gen(function* () { + const config = yield* getTuiConfig(test.directory) + expect(config.theme).toBe("from-env") + expect(config.diff_style).toBe("stacked") }), ) - }, - }) - - const config = await getTuiConfig(tmp.path) - expect(config.keybinds.get("command.palette.show")).toEqual([ - { key: "alt+p", cmd: "command.palette.show", preventDefault: false, desc: "List available commands" }, - ]) - expect(config.keybinds.get("prompt.editor")?.[0]).toMatchObject({ - key: { name: "e", ctrl: true }, - cmd: "prompt.editor", - group: "Explicit", - }) - expect(config.keybinds.get("prompt.autocomplete.next")).toEqual([]) - expect(config.keybinds.get("plugins.list")?.[0]?.key).toBe("ctrl+shift+p") -}) - -wintest("defaults Ctrl+Z to input undo on Windows", async () => { - await using tmp = await tmpdir() - const config = await getTuiConfig(tmp.path) - expect(config.keybinds.get("terminal.suspend")).toEqual([]) - expect(config.keybinds.get("input.undo")?.[0]?.key).toBe("ctrl+z,ctrl+-,super+z") -}) - -wintest("keeps explicit input undo overrides on Windows", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write(path.join(dir, "tui.json"), JSON.stringify({ keybinds: { input_undo: "ctrl+y" } })) - }, - }) - const config = await getTuiConfig(tmp.path) - expect(config.keybinds.get("terminal.suspend")).toEqual([]) - expect(config.keybinds.get("input.undo")?.[0]?.key).toBe("ctrl+y") -}) - -wintest("ignores terminal suspend bindings on Windows", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write(path.join(dir, "tui.json"), JSON.stringify({ keybinds: { terminal_suspend: "alt+z" } })) - }, - }) - - const config = await getTuiConfig(tmp.path) - expect(config.keybinds.get("terminal.suspend")).toEqual([]) - expect(config.keybinds.get("input.undo")?.[0]?.key).toBe("ctrl+z,ctrl+-,super+z") -}) - -test("applies Windows keybind defaults", async () => { - await withPlatform("win32", async () => { - await using tmp = await tmpdir() - - const config = await getTuiConfig(tmp.path) - expect(config.keybinds.get("terminal.suspend")).toEqual([]) - expect(config.keybinds.get("input.undo")?.[0]?.key).toBe("ctrl+z,ctrl+-,super+z") - }) -}) - -test("ignores explicit keybind terminal suspend binding on Windows", async () => { - await withPlatform("win32", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write( - path.join(dir, "tui.json"), - JSON.stringify({ - keybinds: { - terminal_suspend: "alt+z", - }, - }), - ) - }, - }) - - const config = await getTuiConfig(tmp.path) - expect(config.keybinds.get("terminal.suspend")).toEqual([]) - }) -}) - -test("keeps explicit configured keybind input undo on Windows", async () => { - await withPlatform("win32", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write( - path.join(dir, "tui.json"), - JSON.stringify({ - keybinds: { - input_undo: "ctrl+y", - }, - }), - ) - }, - }) - - const config = await getTuiConfig(tmp.path) - expect(config.keybinds.get("input.undo")?.[0]?.key).toBe("ctrl+y") - }) -}) - -test("OPENCODE_TUI_CONFIG provides settings when no project config exists", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - const custom = path.join(dir, "custom-tui.json") - await Bun.write(custom, JSON.stringify({ theme: "from-env", diff_style: "stacked" })) - process.env.OPENCODE_TUI_CONFIG = custom - }, - }) - const config = await getTuiConfig(tmp.path) - expect(config.theme).toBe("from-env") - expect(config.diff_style).toBe("stacked") -}) - -test("does not derive tui path from OPENCODE_CONFIG", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - const customDir = path.join(dir, "custom") - await fs.mkdir(customDir, { recursive: true }) - await Bun.write(path.join(customDir, "opencode.json"), JSON.stringify({ model: "test/model" })) - await Bun.write(path.join(customDir, "tui.json"), JSON.stringify({ theme: "should-not-load" })) - process.env.OPENCODE_CONFIG = path.join(customDir, "opencode.json") - }, - }) - const config = await getTuiConfig(tmp.path) - expect(config.theme).toBeUndefined() -}) - -test("applies env and file substitutions in tui.json", async () => { - const original = process.env.TUI_THEME_TEST - process.env.TUI_THEME_TEST = "env-theme" - try { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write(path.join(dir, "keybind.txt"), "ctrl+q") - await Bun.write( - path.join(dir, "tui.json"), - JSON.stringify({ - theme: "{env:TUI_THEME_TEST}", - keybinds: { app_exit: "{file:keybind.txt}" }, - }), - ) - }, - }) - const config = await getTuiConfig(tmp.path) - expect(config.theme).toBe("env-theme") - expect(config.keybinds.get("app.exit")?.[0]?.key).toBe("ctrl+q") - } finally { - if (original === undefined) delete process.env.TUI_THEME_TEST - else process.env.TUI_THEME_TEST = original - } -}) - -test("applies file substitutions when first identical token is in a commented line", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write(path.join(dir, "theme.txt"), "resolved-theme") - await Bun.write( - path.join(dir, "tui.jsonc"), + }), + ), +) + +it.instance("does not derive tui path from OPENCODE_CONFIG", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + const customDir = path.join(test.directory, "custom") + yield* fs.makeDirectory(customDir, { recursive: true }) + yield* fs.writeJson(path.join(customDir, "opencode.json"), { model: "test/model" }) + yield* fs.writeJson(path.join(customDir, "tui.json"), { theme: "should-not-load" }) + + yield* withEnv( + "OPENCODE_CONFIG", + path.join(customDir, "opencode.json"), + Effect.gen(function* () { + const config = yield* getTuiConfig(test.directory) + expect(config.theme).toBeUndefined() + }), + ) + }), + ), +) + +it.instance("applies env and file substitutions in tui.json", () => + withCleanState( + withEnv( + "TUI_THEME_TEST", + "env-theme", + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeFileString(path.join(test.directory, "keybind.txt"), "ctrl+q") + yield* fs.writeJson(path.join(test.directory, "tui.json"), { + theme: "{env:TUI_THEME_TEST}", + keybinds: { app_exit: "{file:keybind.txt}" }, + }) + + const config = yield* getTuiConfig(test.directory) + expect(config.theme).toBe("env-theme") + expect(config.keybinds.get("app.exit")?.[0]?.key).toBe("ctrl+q") + }), + ), + ), +) + +it.instance("applies file substitutions when first identical token is in a commented line", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeFileString(path.join(test.directory, "theme.txt"), "resolved-theme") + yield* fs.writeFileString( + path.join(test.directory, "tui.jsonc"), `{ // "theme": "{file:theme.txt}", "theme": "{file:theme.txt}" }`, ) - }, - }) - const config = await getTuiConfig(tmp.path) - expect(config.theme).toBe("resolved-theme") -}) - -test("loads .opencode/tui.json", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await fs.mkdir(path.join(dir, ".opencode"), { recursive: true }) - await Bun.write(path.join(dir, ".opencode", "tui.json"), JSON.stringify({ diff_style: "stacked" }, null, 2)) - }, - }) - const config = await getTuiConfig(tmp.path) - expect(config.diff_style).toBe("stacked") -}) - -test("supports tuple plugin specs with options in tui.json", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write( - path.join(dir, "tui.json"), - JSON.stringify({ - plugin: [["acme-plugin@1.2.3", { enabled: true, label: "demo" }]], - }), - ) - }, - }) - - const config = await getTuiConfig(tmp.path) - expect(config.plugin).toEqual([["acme-plugin@1.2.3", { enabled: true, label: "demo" }]]) - expect(config.plugin_origins).toEqual([ - { - spec: ["acme-plugin@1.2.3", { enabled: true, label: "demo" }], - scope: "local", - source: path.join(tmp.path, "tui.json"), - }, - ]) -}) - -test("deduplicates tuple plugin specs by name with higher precedence winning", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write( - path.join(Global.Path.config, "tui.json"), - JSON.stringify({ - plugin: [["acme-plugin@1.0.0", { source: "global" }]], - }), - ) - await Bun.write( - path.join(dir, "tui.json"), - JSON.stringify({ - plugin: [ - ["acme-plugin@2.0.0", { source: "project" }], - ["second-plugin@3.0.0", { source: "project" }], - ], - }), - ) - }, - }) - - const config = await getTuiConfig(tmp.path) - expect(config.plugin).toEqual([ - ["acme-plugin@2.0.0", { source: "project" }], - ["second-plugin@3.0.0", { source: "project" }], - ]) - expect(config.plugin_origins).toEqual([ - { - spec: ["acme-plugin@2.0.0", { source: "project" }], - scope: "local", - source: path.join(tmp.path, "tui.json"), - }, - { - spec: ["second-plugin@3.0.0", { source: "project" }], - scope: "local", - source: path.join(tmp.path, "tui.json"), - }, - ]) -}) - -test("tracks global and local plugin metadata in merged tui config", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write( - path.join(Global.Path.config, "tui.json"), - JSON.stringify({ - plugin: ["global-plugin@1.0.0"], - }), - ) - await Bun.write( - path.join(dir, "tui.json"), - JSON.stringify({ - plugin: ["local-plugin@2.0.0"], - }), - ) - }, - }) - const config = await getTuiConfig(tmp.path) - expect(config.plugin).toEqual(["global-plugin@1.0.0", "local-plugin@2.0.0"]) - expect(config.plugin_origins).toEqual([ - { - spec: "global-plugin@1.0.0", - scope: "global", - source: path.join(Global.Path.config, "tui.json"), - }, - { - spec: "local-plugin@2.0.0", - scope: "local", - source: path.join(tmp.path, "tui.json"), - }, - ]) -}) - -test("merges plugin_enabled flags across config layers", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write( - path.join(Global.Path.config, "tui.json"), - JSON.stringify({ - plugin_enabled: { - "internal:sidebar-context": false, - "demo.plugin": true, - }, - }), - ) - await Bun.write( - path.join(dir, "tui.json"), - JSON.stringify({ - plugin_enabled: { - "demo.plugin": false, - "local.plugin": true, - }, - }), + const config = yield* getTuiConfig(test.directory) + expect(config.theme).toBe("resolved-theme") + }), + ), +) + +it.instance("loads .opencode/tui.json", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeWithDirs( + path.join(test.directory, ".opencode", "tui.json"), + JSON.stringify({ diff_style: "stacked" }, null, 2), ) - }, - }) - - const config = await getTuiConfig(tmp.path) - expect(config.plugin_enabled).toEqual({ - "internal:sidebar-context": false, - "demo.plugin": false, - "local.plugin": true, - }) -}) - -test("silently skips malformed tui.json — load failures degrade to {}", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write(path.join(dir, "tui.json"), '{ "theme": "broken",') - await Bun.write(path.join(dir, ".opencode", "tui.json"), JSON.stringify({ theme: "fallback" })) - }, - }) - - const config = await getTuiConfig(tmp.path) - // Project tui.json is malformed → silently skipped (logs a warning) - // .opencode/tui.json (lower precedence in this path) still loads - expect(config.theme).toBe("fallback") -}) -test("silently skips non-ENOENT read failures (e.g. tui.json is a directory) — fallback layer still loads", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - // tui.json exists as a DIRECTORY rather than a file → readFileString fails - // with EISDIR (PlatformError reason ≠ NotFound). The fix in this PR routes - // that through catchCause → log + skip, so a fallback layer should still load. - await fs.mkdir(path.join(dir, "tui.json"), { recursive: true }) - await Bun.write(path.join(dir, ".opencode", "tui.json"), JSON.stringify({ theme: "fallback" })) - }, - }) - - const config = await getTuiConfig(tmp.path) - // Did NOT crash; .opencode/tui.json (lower precedence) still loads. - expect(config.theme).toBe("fallback") -}) - -test("missing tui.json — silently treated as empty (ENOENT path)", async () => { - await using tmp = await tmpdir({}) - - // No tui.json anywhere. Should not throw. - const config = await getTuiConfig(tmp.path) - expect(config).toBeDefined() - // No theme set anywhere. - expect(config.theme).toBeUndefined() -}) + const config = yield* getTuiConfig(test.directory) + expect(config.diff_style).toBe("stacked") + }), + ), +) + +it.instance("supports tuple plugin specs with options in tui.json", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeJson(path.join(test.directory, "tui.json"), { + plugin: [["acme-plugin@1.2.3", { enabled: true, label: "demo" }]], + }) + + const config = yield* getTuiConfig(test.directory) + expect(config.plugin).toEqual([["acme-plugin@1.2.3", { enabled: true, label: "demo" }]]) + expect(config.plugin_origins).toEqual([ + { + spec: ["acme-plugin@1.2.3", { enabled: true, label: "demo" }], + scope: "local", + source: path.join(test.directory, "tui.json"), + }, + ]) + }), + ), +) + +it.instance("deduplicates tuple plugin specs by name with higher precedence winning", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeJson(path.join(Global.Path.config, "tui.json"), { + plugin: [["acme-plugin@1.0.0", { source: "global" }]], + }) + yield* fs.writeJson(path.join(test.directory, "tui.json"), { + plugin: [ + ["acme-plugin@2.0.0", { source: "project" }], + ["second-plugin@3.0.0", { source: "project" }], + ], + }) + + const config = yield* getTuiConfig(test.directory) + expect(config.plugin).toEqual([ + ["acme-plugin@2.0.0", { source: "project" }], + ["second-plugin@3.0.0", { source: "project" }], + ]) + expect(config.plugin_origins).toEqual([ + { + spec: ["acme-plugin@2.0.0", { source: "project" }], + scope: "local", + source: path.join(test.directory, "tui.json"), + }, + { + spec: ["second-plugin@3.0.0", { source: "project" }], + scope: "local", + source: path.join(test.directory, "tui.json"), + }, + ]) + }), + ), +) + +it.instance("tracks global and local plugin metadata in merged tui config", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeJson(path.join(Global.Path.config, "tui.json"), { plugin: ["global-plugin@1.0.0"] }) + yield* fs.writeJson(path.join(test.directory, "tui.json"), { plugin: ["local-plugin@2.0.0"] }) + + const config = yield* getTuiConfig(test.directory) + expect(config.plugin).toEqual(["global-plugin@1.0.0", "local-plugin@2.0.0"]) + expect(config.plugin_origins).toEqual([ + { + spec: "global-plugin@1.0.0", + scope: "global", + source: path.join(Global.Path.config, "tui.json"), + }, + { + spec: "local-plugin@2.0.0", + scope: "local", + source: path.join(test.directory, "tui.json"), + }, + ]) + }), + ), +) + +it.instance("merges plugin_enabled flags across config layers", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeJson(path.join(Global.Path.config, "tui.json"), { + plugin_enabled: { + "internal:sidebar-context": false, + "demo.plugin": true, + }, + }) + yield* fs.writeJson(path.join(test.directory, "tui.json"), { + plugin_enabled: { + "demo.plugin": false, + "local.plugin": true, + }, + }) + + const config = yield* getTuiConfig(test.directory) + expect(config.plugin_enabled).toEqual({ + "internal:sidebar-context": false, + "demo.plugin": false, + "local.plugin": true, + }) + }), + ), +) + +it.instance("silently skips malformed tui.json - load failures degrade to {}", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.writeFileString(path.join(test.directory, "tui.json"), '{ "theme": "broken",') + yield* fs.writeWithDirs(path.join(test.directory, ".opencode", "tui.json"), JSON.stringify({ theme: "fallback" })) + + const config = yield* getTuiConfig(test.directory) + expect(config.theme).toBe("fallback") + }), + ), +) + +it.instance("silently skips non-ENOENT read failures (e.g. tui.json is a directory) - fallback layer still loads", () => + withCleanState( + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service + const test = yield* TestInstance + yield* fs.makeDirectory(path.join(test.directory, "tui.json"), { recursive: true }) + yield* fs.writeWithDirs(path.join(test.directory, ".opencode", "tui.json"), JSON.stringify({ theme: "fallback" })) + + const config = yield* getTuiConfig(test.directory) + expect(config.theme).toBe("fallback") + }), + ), +) + +it.instance("missing tui.json - silently treated as empty (ENOENT path)", () => + withCleanState( + Effect.gen(function* () { + const test = yield* TestInstance + const config = yield* getTuiConfig(test.directory) + expect(config).toBeDefined() + expect(config.theme).toBeUndefined() + }), + ), +) diff --git a/packages/opencode/test/effect/runtime-flags.test.ts b/packages/opencode/test/effect/runtime-flags.test.ts new file mode 100644 index 000000000000..058fa7559ae4 --- /dev/null +++ b/packages/opencode/test/effect/runtime-flags.test.ts @@ -0,0 +1,74 @@ +import { describe, expect } from "bun:test" +import { ConfigProvider, Effect, Layer } from "effect" +import { RuntimeFlags } from "../../src/effect/runtime-flags" +import { it } from "../lib/effect" + +const fromConfig = (input: Record) => + RuntimeFlags.defaultLayer.pipe(Layer.provide(ConfigProvider.layer(ConfigProvider.fromUnknown(input)))) + +const readFlags = RuntimeFlags.Service.useSync((flags) => flags) + +describe("RuntimeFlags", () => { + it.effect("defaultLayer parses plugin flags from the active ConfigProvider", () => + Effect.gen(function* () { + const flags = yield* readFlags.pipe( + Effect.provide( + fromConfig({ + OPENCODE_PURE: "true", + OPENCODE_DISABLE_DEFAULT_PLUGINS: "true", + OPENCODE_EXPERIMENTAL: "true", + OPENCODE_ENABLE_EXA: "true", + OPENCODE_ENABLE_PARALLEL: "true", + OPENCODE_ENABLE_QUESTION_TOOL: "true", + OPENCODE_CLIENT: "desktop", + }), + ), + ) + + expect(flags.pure).toBe(true) + expect(flags.disableDefaultPlugins).toBe(true) + expect(flags.enableExa).toBe(true) + expect(flags.enableParallel).toBe(true) + expect(flags.enableQuestionTool).toBe(true) + expect(flags.experimentalScout).toBe(true) + expect(flags.experimentalLspTool).toBe(true) + expect(flags.experimentalPlanMode).toBe(true) + expect(flags.client).toBe("desktop") + }), + ) + + it.effect("layer accepts partial test overrides and fills defaults from Config definitions", () => + Effect.gen(function* () { + const flags = yield* readFlags.pipe(Effect.provide(RuntimeFlags.layer({ disableDefaultPlugins: true }))) + + expect(flags.pure).toBe(false) + expect(flags.disableDefaultPlugins).toBe(true) + expect(flags.enableExa).toBe(false) + expect(flags.client).toBe("cli") + }), + ) + + it.effect("layer ignores the active ConfigProvider for omitted test overrides", () => + Effect.gen(function* () { + const flags = yield* readFlags.pipe( + Effect.provide(RuntimeFlags.layer()), + Effect.provide( + ConfigProvider.layer( + ConfigProvider.fromUnknown({ + OPENCODE_PURE: "true", + OPENCODE_DISABLE_DEFAULT_PLUGINS: "true", + OPENCODE_EXPERIMENTAL: "true", + OPENCODE_ENABLE_EXA: "true", + OPENCODE_CLIENT: "desktop", + }), + ), + ), + ) + + expect(flags.pure).toBe(false) + expect(flags.disableDefaultPlugins).toBe(false) + expect(flags.enableExa).toBe(false) + expect(flags.client).toBe("cli") + }), + ) +}) diff --git a/packages/opencode/test/fixture/tui-plugin.ts b/packages/opencode/test/fixture/tui-plugin.ts index 3d894bd0aeae..f95025494559 100644 --- a/packages/opencode/test/fixture/tui-plugin.ts +++ b/packages/opencode/test/fixture/tui-plugin.ts @@ -12,6 +12,10 @@ type Count = { command_drop: number } +type AttentionOpts = Partial> & { + soundboard?: Partial +} + function themeCurrent(): HostPluginApi["theme"]["current"] { const a = RGBA.fromInts(0, 120, 240) const b = RGBA.fromInts(120, 120, 120) @@ -83,6 +87,8 @@ function themeCurrent(): HostPluginApi["theme"]["current"] { type Opts = { client?: HostPluginApi["client"] | (() => HostPluginApi["client"]) renderer?: HostPluginApi["renderer"] + attention?: AttentionOpts + event?: HostPluginApi["event"] count?: Count keymap?: HostPluginApi["keymap"] tuiConfig?: Partial @@ -183,6 +189,17 @@ export function createTuiPluginApi(opts: Opts = {}): HostPluginApi { return opts.app?.version ?? "0.0.0-test" }, }, + attention: { + async notify(input) { + return opts.attention?.notify?.(input) ?? { ok: false, notification: false, sound: false } + }, + soundboard: { + registerPack: (pack) => opts.attention?.soundboard?.registerPack?.(pack) ?? (() => {}), + activate: (id, options) => opts.attention?.soundboard?.activate?.(id, options) ?? false, + current: () => opts.attention?.soundboard?.current?.() ?? "opencode.default", + list: () => opts.attention?.soundboard?.list?.() ?? [], + }, + }, keys: { formatSequence: () => "", formatBindings: () => undefined, @@ -190,7 +207,7 @@ export function createTuiPluginApi(opts: Opts = {}): HostPluginApi { get client() { return client() }, - event: { + event: opts.event ?? { on: () => { if (count) count.event_add += 1 return () => { diff --git a/packages/opencode/test/fixture/tui-runtime.ts b/packages/opencode/test/fixture/tui-runtime.ts index 64537b6c50e2..75fc2fdc44b2 100644 --- a/packages/opencode/test/fixture/tui-runtime.ts +++ b/packages/opencode/test/fixture/tui-runtime.ts @@ -5,7 +5,8 @@ import { TuiConfig } from "../../src/cli/cmd/tui/config/tui" import { TuiKeybind } from "../../src/cli/cmd/tui/config/keybind" type PluginSpec = string | [string, Record] -type ResolvedInput = Omit & { +type ResolvedInput = Omit & { + attention?: Partial keybinds?: Partial leader_timeout?: number } @@ -22,6 +23,15 @@ export function createTuiResolvedConfig(input: ResolvedInput = {}): TuiConfig.Re const keybinds = TuiKeybind.Keybinds.parse(input.keybinds ?? {}) return { ...input, + attention: { + enabled: false, + notifications: true, + sound: true, + volume: 0.4, + sound_pack: "opencode.default", + sounds: {}, + ...input.attention, + }, keybinds: createTuiResolvedKeybinds(keybinds), leader_timeout: input.leader_timeout ?? 2000, } diff --git a/packages/opencode/test/mcp/headers.test.ts b/packages/opencode/test/mcp/headers.test.ts index 5bc8f803d27b..c51ed00d32f6 100644 --- a/packages/opencode/test/mcp/headers.test.ts +++ b/packages/opencode/test/mcp/headers.test.ts @@ -1,6 +1,6 @@ -import { test, expect, mock, beforeEach } from "bun:test" +import { describe, expect, mock, beforeEach } from "bun:test" import { Effect } from "effect" -import type { MCP as MCPNS } from "../../src/mcp/index" +import { testEffect } from "../lib/effect" // Track what options were passed to each transport constructor const transportCalls: Array<{ @@ -46,53 +46,22 @@ beforeEach(() => { // Import MCP after mocking const { MCP } = await import("../../src/mcp/index") -const { AppRuntime } = await import("../../src/effect/app-runtime") -const { Instance } = await import("../../src/project/instance") -const { WithInstance } = await import("../../src/project/with-instance") -const { tmpdir } = await import("../fixture/fixture") -const service = MCP.Service as unknown as Effect.Effect - -test("headers are passed to transports when oauth is enabled (default)", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write( - `${dir}/opencode.json`, - JSON.stringify({ - $schema: "https://opencode.ai/config.json", - mcp: { - "test-server": { - type: "remote", - url: "https://example.com/mcp", - headers: { - Authorization: "Bearer test-token", - "X-Custom-Header": "custom-value", - }, - }, +const it = testEffect(MCP.defaultLayer) + +describe("mcp.headers", () => { + it.instance("headers are passed to transports when oauth is enabled (default)", () => + Effect.gen(function* () { + const mcp = yield* MCP.Service + yield* mcp + .add("test-server", { + type: "remote", + url: "https://example.com/mcp", + headers: { + Authorization: "Bearer test-token", + "X-Custom-Header": "custom-value", }, - }), - ) - }, - }) - - await WithInstance.provide({ - directory: tmp.path, - fn: async () => { - // Trigger MCP initialization - it will fail to connect but we can check the transport options - await AppRuntime.runPromise( - Effect.gen(function* () { - const mcp = yield* service - yield* mcp - .add("test-server", { - type: "remote", - url: "https://example.com/mcp", - headers: { - Authorization: "Bearer test-token", - "X-Custom-Header": "custom-value", - }, - }) - .pipe(Effect.catch(() => Effect.void)) - }), - ) + }) + .pipe(Effect.catch(() => Effect.void)) // Both transports should have been created with headers expect(transportCalls.length).toBeGreaterThanOrEqual(1) @@ -106,33 +75,22 @@ test("headers are passed to transports when oauth is enabled (default)", async ( // OAuth should be enabled by default, so authProvider should exist expect(call.options.authProvider).toBeDefined() } - }, - }) -}) - -test("headers are passed to transports when oauth is explicitly disabled", async () => { - await using tmp = await tmpdir() - - await WithInstance.provide({ - directory: tmp.path, - fn: async () => { - transportCalls.length = 0 - - await AppRuntime.runPromise( - Effect.gen(function* () { - const mcp = yield* service - yield* mcp - .add("test-server-no-oauth", { - type: "remote", - url: "https://example.com/mcp", - oauth: false, - headers: { - Authorization: "Bearer test-token", - }, - }) - .pipe(Effect.catch(() => Effect.void)) - }), - ) + }), + ) + + it.instance("headers are passed to transports when oauth is explicitly disabled", () => + Effect.gen(function* () { + const mcp = yield* MCP.Service + yield* mcp + .add("test-server-no-oauth", { + type: "remote", + url: "https://example.com/mcp", + oauth: false, + headers: { + Authorization: "Bearer test-token", + }, + }) + .pipe(Effect.catch(() => Effect.void)) expect(transportCalls.length).toBeGreaterThanOrEqual(1) @@ -144,29 +102,18 @@ test("headers are passed to transports when oauth is explicitly disabled", async // OAuth is disabled, so no authProvider expect(call.options.authProvider).toBeUndefined() } - }, - }) -}) - -test("no requestInit when headers are not provided", async () => { - await using tmp = await tmpdir() - - await WithInstance.provide({ - directory: tmp.path, - fn: async () => { - transportCalls.length = 0 - - await AppRuntime.runPromise( - Effect.gen(function* () { - const mcp = yield* service - yield* mcp - .add("test-server-no-headers", { - type: "remote", - url: "https://example.com/mcp", - }) - .pipe(Effect.catch(() => Effect.void)) - }), - ) + }), + ) + + it.instance("no requestInit when headers are not provided", () => + Effect.gen(function* () { + const mcp = yield* MCP.Service + yield* mcp + .add("test-server-no-headers", { + type: "remote", + url: "https://example.com/mcp", + }) + .pipe(Effect.catch(() => Effect.void)) expect(transportCalls.length).toBeGreaterThanOrEqual(1) @@ -174,6 +121,6 @@ test("no requestInit when headers are not provided", async () => { // No headers means requestInit should be undefined expect(call.options.requestInit).toBeUndefined() } - }, - }) + }), + ) }) diff --git a/packages/opencode/test/mcp/lifecycle.test.ts b/packages/opencode/test/mcp/lifecycle.test.ts index 5afc85e3b5de..185086fe60a9 100644 --- a/packages/opencode/test/mcp/lifecycle.test.ts +++ b/packages/opencode/test/mcp/lifecycle.test.ts @@ -1,7 +1,7 @@ -import { test, expect, mock, beforeEach } from "bun:test" -import { InstanceRuntime } from "../../src/project/instance-runtime" -import { Effect } from "effect" +import { expect, mock, beforeEach } from "bun:test" +import { Effect, Exit } from "effect" import type { MCP as MCPNS } from "../../src/mcp/index" +import { testEffect } from "../lib/effect" // --- Mock infrastructure --- @@ -179,39 +179,9 @@ beforeEach(() => { // Import after mocks const { MCP } = await import("../../src/mcp/index") -const { Instance } = await import("../../src/project/instance") -const { WithInstance } = await import("../../src/project/with-instance") -const { tmpdir } = await import("../fixture/fixture") - -// --- Helper --- - -function withInstance( - config: Record, - fn: (mcp: MCPNS.Interface) => Effect.Effect, -) { - return async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write( - `${dir}/opencode.json`, - JSON.stringify({ - $schema: "https://opencode.ai/config.json", - mcp: config, - }), - ) - }, - }) - - await WithInstance.provide({ - directory: tmp.path, - fn: async () => { - await Effect.runPromise(MCP.Service.use(fn).pipe(Effect.provide(MCP.defaultLayer))) - // dispose instance to clean up state between tests - await InstanceRuntime.disposeInstance(Instance.current) - }, - }) - } -} +const { McpOAuthCallback } = await import("../../src/mcp/oauth-callback") + +const it = testEffect(MCP.defaultLayer) function statusName(status: Record | MCPNS.Status, server: string) { if ("status" in status) return status.status @@ -222,82 +192,82 @@ function statusName(status: Record | MCPNS.Status, server: // Test: tools() are cached after connect // ======================================================================== -test( +it.instance( "tools() reuses cached tool definitions after connect", - withInstance({}, (mcp) => - Effect.gen(function* () { - lastCreatedClientName = "my-server" - const serverState = getOrCreateClientState("my-server") - serverState.tools = [ - { name: "do_thing", description: "does a thing", inputSchema: { type: "object", properties: {} } }, - ] - - // First: add the server successfully - const addResult = yield* mcp.add("my-server", { - type: "local", - command: ["echo", "test"], - }) - expect((addResult.status as any)["my-server"]?.status ?? (addResult.status as any).status).toBe("connected") - - expect(serverState.listToolsCalls).toBe(1) - - const toolsA = yield* mcp.tools() - const toolsB = yield* mcp.tools() - expect(Object.keys(toolsA).length).toBeGreaterThan(0) - expect(Object.keys(toolsB).length).toBeGreaterThan(0) - expect(serverState.listToolsCalls).toBe(1) - }), - ), + () => + MCP.Service.use((mcp: MCPNS.Interface) => + Effect.gen(function* () { + lastCreatedClientName = "my-server" + const serverState = getOrCreateClientState("my-server") + serverState.tools = [ + { name: "do_thing", description: "does a thing", inputSchema: { type: "object", properties: {} } }, + ] + + // First: add the server successfully + const addResult = yield* mcp.add("my-server", { + type: "local", + command: ["echo", "test"], + }) + expect((addResult.status as any)["my-server"]?.status ?? (addResult.status as any).status).toBe("connected") + + expect(serverState.listToolsCalls).toBe(1) + + const toolsA = yield* mcp.tools() + const toolsB = yield* mcp.tools() + expect(Object.keys(toolsA).length).toBeGreaterThan(0) + expect(Object.keys(toolsB).length).toBeGreaterThan(0) + expect(serverState.listToolsCalls).toBe(1) + }), + ), + { config: { mcp: {} } }, ) // ======================================================================== // Test: tool change notifications refresh the cache // ======================================================================== -test( +it.instance( "tool change notifications refresh cached tool definitions", - withInstance({}, (mcp) => - Effect.gen(function* () { - lastCreatedClientName = "status-server" - const serverState = getOrCreateClientState("status-server") - - yield* mcp.add("status-server", { - type: "local", - command: ["echo", "test"], - }) - - const before = yield* mcp.tools() - expect(Object.keys(before).some((key) => key.includes("test_tool"))).toBe(true) - expect(serverState.listToolsCalls).toBe(1) - - serverState.tools = [{ name: "next_tool", description: "next", inputSchema: { type: "object", properties: {} } }] - - const handler = Array.from(serverState.notificationHandlers.values())[0] - expect(handler).toBeDefined() - yield* Effect.promise(() => handler?.()) - - const after = yield* mcp.tools() - expect(Object.keys(after).some((key) => key.includes("next_tool"))).toBe(true) - expect(Object.keys(after).some((key) => key.includes("test_tool"))).toBe(false) - expect(serverState.listToolsCalls).toBe(2) - }), - ), + () => + MCP.Service.use((mcp: MCPNS.Interface) => + Effect.gen(function* () { + lastCreatedClientName = "status-server" + const serverState = getOrCreateClientState("status-server") + + yield* mcp.add("status-server", { + type: "local", + command: ["echo", "test"], + }) + + const before = yield* mcp.tools() + expect(Object.keys(before).some((key) => key.includes("test_tool"))).toBe(true) + expect(serverState.listToolsCalls).toBe(1) + + serverState.tools = [ + { name: "next_tool", description: "next", inputSchema: { type: "object", properties: {} } }, + ] + + const handler = Array.from(serverState.notificationHandlers.values())[0] + expect(handler).toBeDefined() + yield* Effect.promise(() => handler?.()) + + const after = yield* mcp.tools() + expect(Object.keys(after).some((key) => key.includes("next_tool"))).toBe(true) + expect(Object.keys(after).some((key) => key.includes("test_tool"))).toBe(false) + expect(serverState.listToolsCalls).toBe(2) + }), + ), + { config: { mcp: {} } }, ) // ======================================================================== // Test: connect() / disconnect() lifecycle // ======================================================================== -test( +it.instance( "disconnect sets status to disabled and removes client", - withInstance( - { - "disc-server": { - type: "local", - command: ["echo", "test"], - }, - }, - (mcp) => + () => + MCP.Service.use((mcp: MCPNS.Interface) => Effect.gen(function* () { lastCreatedClientName = "disc-server" getOrCreateClientState("disc-server") @@ -315,24 +285,27 @@ test( const statusAfter = yield* mcp.status() expect(statusAfter["disc-server"]?.status).toBe("disabled") - // Tools should be empty after disconnect const tools = yield* mcp.tools() const serverTools = Object.keys(tools).filter((k) => k.startsWith("disc-server")) expect(serverTools.length).toBe(0) }), - ), + ), + { + config: { + mcp: { + "disc-server": { + type: "local", + command: ["echo", "test"], + }, + }, + }, + }, ) -test( +it.instance( "connect() after disconnect() re-establishes the server", - withInstance( - { - "reconn-server": { - type: "local", - command: ["echo", "test"], - }, - }, - (mcp) => + () => + MCP.Service.use((mcp: MCPNS.Interface) => Effect.gen(function* () { lastCreatedClientName = "reconn-server" const serverState = getOrCreateClientState("reconn-server") @@ -348,70 +321,71 @@ test( yield* mcp.disconnect("reconn-server") expect((yield* mcp.status())["reconn-server"]?.status).toBe("disabled") - // Reconnect yield* mcp.connect("reconn-server") expect((yield* mcp.status())["reconn-server"]?.status).toBe("connected") const tools = yield* mcp.tools() expect(Object.keys(tools).some((k) => k.includes("my_tool"))).toBe(true) }), - ), + ), + { + config: { + mcp: { + "reconn-server": { + type: "local", + command: ["echo", "test"], + }, + }, + }, + }, ) // ======================================================================== // Test: add() closes existing client before replacing // ======================================================================== -test( +it.instance( "add() closes the old client when replacing a server", // Don't put the server in config — add it dynamically so we control // exactly which client instance is "first" vs "second". - withInstance({}, (mcp) => - Effect.gen(function* () { - lastCreatedClientName = "replace-server" - const firstState = getOrCreateClientState("replace-server") - - yield* mcp.add("replace-server", { - type: "local", - command: ["echo", "test"], - }) - - expect(firstState.closed).toBe(false) - - // Create new state for second client - clientStates.delete("replace-server") - const secondState = getOrCreateClientState("replace-server") - - // Re-add should close the first client - yield* mcp.add("replace-server", { - type: "local", - command: ["echo", "test"], - }) - - expect(firstState.closed).toBe(true) - expect(secondState.closed).toBe(false) - }), - ), + () => + MCP.Service.use((mcp: MCPNS.Interface) => + Effect.gen(function* () { + lastCreatedClientName = "replace-server" + const firstState = getOrCreateClientState("replace-server") + + yield* mcp.add("replace-server", { + type: "local", + command: ["echo", "test"], + }) + + expect(firstState.closed).toBe(false) + + // Create new state for second client + clientStates.delete("replace-server") + const secondState = getOrCreateClientState("replace-server") + + // Re-add should close the first client + yield* mcp.add("replace-server", { + type: "local", + command: ["echo", "test"], + }) + + expect(firstState.closed).toBe(true) + expect(secondState.closed).toBe(false) + }), + ), + { config: { mcp: {} } }, ) // ======================================================================== // Test: state init with mixed success/failure // ======================================================================== -test( +it.instance( "init connects available servers even when one fails", - withInstance( - { - "good-server": { - type: "local", - command: ["echo", "good"], - }, - "bad-server": { - type: "local", - command: ["echo", "bad"], - }, - }, - (mcp) => + () => + MCP.Service.use((mcp: MCPNS.Interface) => Effect.gen(function* () { // Set up good server const goodState = getOrCreateClientState("good-server") @@ -443,77 +417,88 @@ test( const tools = yield* mcp.tools() expect(Object.keys(tools).some((k) => k.includes("good_tool"))).toBe(true) }), - ), + ), + { + config: { + mcp: { + "good-server": { + type: "local", + command: ["echo", "good"], + }, + "bad-server": { + type: "local", + command: ["echo", "bad"], + }, + }, + }, + }, ) -test( +it.instance( "falls back when MCP output schema refs fail SDK tool discovery", - withInstance({}, (mcp) => - Effect.gen(function* () { - lastCreatedClientName = "stitch-like-server" - const serverState = getOrCreateClientState("stitch-like-server") - serverState.listToolsShouldFail = true - serverState.listToolsError = "can't resolve reference #/$defs/ScreenInstance from id #" - serverState.tools = [ - { - name: "render_screen", - description: "renders a screen", - inputSchema: { type: "object", properties: { prompt: { type: "string" } }, required: ["prompt"] }, - outputSchema: { type: "object", properties: { screen: { $ref: "#/$defs/ScreenInstance" } } }, - }, - ] + () => + MCP.Service.use((mcp: MCPNS.Interface) => + Effect.gen(function* () { + lastCreatedClientName = "stitch-like-server" + const serverState = getOrCreateClientState("stitch-like-server") + serverState.listToolsShouldFail = true + serverState.listToolsError = "can't resolve reference #/$defs/ScreenInstance from id #" + serverState.tools = [ + { + name: "render_screen", + description: "renders a screen", + inputSchema: { type: "object", properties: { prompt: { type: "string" } }, required: ["prompt"] }, + outputSchema: { type: "object", properties: { screen: { $ref: "#/$defs/ScreenInstance" } } }, + }, + ] - const addResult = yield* mcp.add("stitch-like-server", { - type: "local", - command: ["echo", "test"], - }) + const addResult = yield* mcp.add("stitch-like-server", { + type: "local", + command: ["echo", "test"], + }) - expect(statusName(addResult.status, "stitch-like-server")).toBe("connected") + expect(statusName(addResult.status, "stitch-like-server")).toBe("connected") - const tools = yield* mcp.tools() - expect(Object.keys(tools).some((key) => key.includes("render_screen"))).toBe(true) - expect(serverState.listToolsCalls).toBe(1) - expect(serverState.requestCalls).toBe(1) - }), - ), + const tools = yield* mcp.tools() + expect(Object.keys(tools).some((key) => key.includes("render_screen"))).toBe(true) + expect(serverState.listToolsCalls).toBe(1) + expect(serverState.requestCalls).toBe(1) + }), + ), + { config: { mcp: {} } }, ) -test( +it.instance( "does not fall back for non-schema MCP tool discovery errors", - withInstance({}, (mcp) => - Effect.gen(function* () { - lastCreatedClientName = "broken-server" - const serverState = getOrCreateClientState("broken-server") - serverState.listToolsShouldFail = true - serverState.listToolsError = "transport closed" - - const addResult = yield* mcp.add("broken-server", { - type: "local", - command: ["echo", "test"], - }) - - expect(statusName(addResult.status, "broken-server")).toBe("failed") - expect(serverState.listToolsCalls).toBe(1) - expect(serverState.requestCalls).toBe(0) - }), - ), + () => + MCP.Service.use((mcp: MCPNS.Interface) => + Effect.gen(function* () { + lastCreatedClientName = "broken-server" + const serverState = getOrCreateClientState("broken-server") + serverState.listToolsShouldFail = true + serverState.listToolsError = "transport closed" + + const addResult = yield* mcp.add("broken-server", { + type: "local", + command: ["echo", "test"], + }) + + expect(statusName(addResult.status, "broken-server")).toBe("failed") + expect(serverState.listToolsCalls).toBe(1) + expect(serverState.requestCalls).toBe(0) + }), + ), + { config: { mcp: {} } }, ) // ======================================================================== // Test: disabled server via config // ======================================================================== -test( +it.instance( "disabled server is marked as disabled without attempting connection", - withInstance( - { - "disabled-server": { - type: "local", - command: ["echo", "test"], - enabled: false, - }, - }, - (mcp) => + () => + MCP.Service.use((mcp: MCPNS.Interface) => Effect.gen(function* () { const countBefore = clientCreateCount @@ -529,23 +514,28 @@ test( const status = yield* mcp.status() expect(status["disabled-server"]?.status).toBe("disabled") }), - ), + ), + { + config: { + mcp: { + "disabled-server": { + type: "local", + command: ["echo", "test"], + enabled: false, + }, + }, + }, + }, ) // ======================================================================== // Test: prompts() and resources() // ======================================================================== -test( +it.instance( "prompts() returns prompts from connected servers", - withInstance( - { - "prompt-server": { - type: "local", - command: ["echo", "test"], - }, - }, - (mcp) => + () => + MCP.Service.use((mcp: MCPNS.Interface) => Effect.gen(function* () { lastCreatedClientName = "prompt-server" const serverState = getOrCreateClientState("prompt-server") @@ -562,19 +552,23 @@ test( expect(key).toContain("prompt-server") expect(key).toContain("my-prompt") }), - ), + ), + { + config: { + mcp: { + "prompt-server": { + type: "local", + command: ["echo", "test"], + }, + }, + }, + }, ) -test( +it.instance( "resources() returns resources from connected servers", - withInstance( - { - "resource-server": { - type: "local", - command: ["echo", "test"], - }, - }, - (mcp) => + () => + MCP.Service.use((mcp: MCPNS.Interface) => Effect.gen(function* () { lastCreatedClientName = "resource-server" const serverState = getOrCreateClientState("resource-server") @@ -591,19 +585,23 @@ test( expect(key).toContain("resource-server") expect(key).toContain("my-resource") }), - ), + ), + { + config: { + mcp: { + "resource-server": { + type: "local", + command: ["echo", "test"], + }, + }, + }, + }, ) -test( +it.instance( "prompts() skips disconnected servers", - withInstance( - { - "prompt-disc-server": { - type: "local", - command: ["echo", "test"], - }, - }, - (mcp) => + () => + MCP.Service.use((mcp: MCPNS.Interface) => Effect.gen(function* () { lastCreatedClientName = "prompt-disc-server" const serverState = getOrCreateClientState("prompt-disc-server") @@ -619,67 +617,77 @@ test( const prompts = yield* mcp.prompts() expect(Object.keys(prompts).length).toBe(0) }), - ), + ), + { + config: { + mcp: { + "prompt-disc-server": { + type: "local", + command: ["echo", "test"], + }, + }, + }, + }, ) // ======================================================================== // Test: connect() on nonexistent server // ======================================================================== -test( +it.instance( "connect() on nonexistent server does not throw", - withInstance({}, (mcp) => - Effect.gen(function* () { - // Should not throw - yield* mcp.connect("nonexistent") - const status = yield* mcp.status() - expect(status["nonexistent"]).toBeUndefined() - }), - ), + () => + MCP.Service.use((mcp: MCPNS.Interface) => + Effect.gen(function* () { + // Should not throw + yield* mcp.connect("nonexistent") + const status = yield* mcp.status() + expect(status["nonexistent"]).toBeUndefined() + }), + ), + { config: { mcp: {} } }, ) // ======================================================================== // Test: disconnect() on nonexistent server // ======================================================================== -test( +it.instance( "disconnect() on nonexistent server does not throw", - withInstance({}, (mcp) => - Effect.gen(function* () { - yield* mcp.disconnect("nonexistent") - // Should complete without error - }), - ), + () => + MCP.Service.use((mcp: MCPNS.Interface) => + Effect.gen(function* () { + yield* mcp.disconnect("nonexistent") + // Should complete without error + }), + ), + { config: { mcp: {} } }, ) // ======================================================================== // Test: tools() with no MCP servers configured // ======================================================================== -test( +it.instance( "tools() returns empty when no MCP servers are configured", - withInstance({}, (mcp) => - Effect.gen(function* () { - const tools = yield* mcp.tools() - expect(Object.keys(tools).length).toBe(0) - }), - ), + () => + MCP.Service.use((mcp: MCPNS.Interface) => + Effect.gen(function* () { + const tools = yield* mcp.tools() + expect(Object.keys(tools).length).toBe(0) + }), + ), + { config: { mcp: {} } }, ) // ======================================================================== // Test: connect failure during create() // ======================================================================== -test( +it.instance( "server that fails to connect is marked as failed", - withInstance( - { - "fail-connect": { - type: "local", - command: ["echo", "test"], - }, - }, - (mcp) => + () => + MCP.Service.use((mcp: MCPNS.Interface) => Effect.gen(function* () { lastCreatedClientName = "fail-connect" getOrCreateClientState("fail-connect") @@ -701,51 +709,55 @@ test( const tools = yield* mcp.tools() expect(Object.keys(tools).length).toBe(0) }), - ), + ), + { + config: { + mcp: { + "fail-connect": { + type: "local", + command: ["echo", "test"], + }, + }, + }, + }, ) // ======================================================================== // Bug #5: McpOAuthCallback.cancelPending uses wrong key // ======================================================================== -test("McpOAuthCallback.cancelPending is keyed by mcpName but pendingAuths uses oauthState", async () => { - const { McpOAuthCallback } = await import("../../src/mcp/oauth-callback") - - // Register a pending auth with an oauthState key, associated to an mcpName - const oauthState = "abc123hexstate" - const callbackPromise = McpOAuthCallback.waitForCallback(oauthState, "my-mcp-server") - - // cancelPending is called with mcpName — should find the entry via reverse index - McpOAuthCallback.cancelPending("my-mcp-server") - - // The callback should still be pending because cancelPending looked up - // "my-mcp-server" in a map keyed by "abc123hexstate" - let rejected = false - callbackPromise.then(() => {}).catch(() => (rejected = true)) - - // Give it a tick - await new Promise((r) => setTimeout(r, 50)) - - // cancelPending("my-mcp-server") should have rejected the pending callback - expect(rejected).toBe(true) +it.live("McpOAuthCallback.cancelPending is keyed by mcpName but pendingAuths uses oauthState", () => + Effect.acquireUseRelease( + Effect.sync(() => McpOAuthCallback.waitForCallback("abc123hexstate", "my-mcp-server")), + (callback) => + Effect.gen(function* () { + McpOAuthCallback.cancelPending("my-mcp-server") + + const exit = yield* Effect.tryPromise({ + try: () => callback, + catch: (error) => (error instanceof Error ? error : new Error(String(error))), + }).pipe( + Effect.timeoutOrElse({ + duration: "1 second", + orElse: () => Effect.fail(new Error("timed out waiting for OAuth cancellation")), + }), + Effect.exit, + ) - await McpOAuthCallback.stop() -}) + expect(Exit.isFailure(exit)).toBe(true) + }), + () => Effect.promise(() => McpOAuthCallback.stop()).pipe(Effect.ignore), + ), +) // ======================================================================== // Test: multiple tools from same server get correct name prefixes // ======================================================================== -test( +it.instance( "tools() prefixes tool names with sanitized server name", - withInstance( - { - "my.special-server": { - type: "local", - command: ["echo", "test"], - }, - }, - (mcp) => + () => + MCP.Service.use((mcp: MCPNS.Interface) => Effect.gen(function* () { lastCreatedClientName = "my.special-server" const serverState = getOrCreateClientState("my.special-server") @@ -768,87 +780,103 @@ test( expect(keys.some((k) => k.endsWith("tool_b"))).toBe(true) expect(keys.length).toBe(2) }), - ), + ), + { + config: { + mcp: { + "my.special-server": { + type: "local", + command: ["echo", "test"], + }, + }, + }, + }, ) // ======================================================================== // Test: transport leak — local stdio timeout (#19168) // ======================================================================== -test( +it.instance( "local stdio transport is closed when connect times out (no process leak)", - withInstance({}, (mcp) => - Effect.gen(function* () { - lastCreatedClientName = "hanging-server" - getOrCreateClientState("hanging-server") - connectShouldHang = true - - const addResult = yield* mcp.add("hanging-server", { - type: "local", - command: ["node", "fake.js"], - timeout: 100, - }) - - const serverStatus = (addResult.status as any)["hanging-server"] ?? addResult.status - expect(serverStatus.status).toBe("failed") - expect(serverStatus.error).toContain("timed out") - // Transport must be closed to avoid orphaned child process - expect(transportCloseCount).toBeGreaterThanOrEqual(1) - }), - ), + () => + MCP.Service.use((mcp: MCPNS.Interface) => + Effect.gen(function* () { + lastCreatedClientName = "hanging-server" + getOrCreateClientState("hanging-server") + connectShouldHang = true + + const addResult = yield* mcp.add("hanging-server", { + type: "local", + command: ["node", "fake.js"], + timeout: 100, + }) + + const serverStatus = (addResult.status as any)["hanging-server"] ?? addResult.status + expect(serverStatus.status).toBe("failed") + expect(serverStatus.error).toContain("timed out") + // Transport must be closed to avoid orphaned child process + expect(transportCloseCount).toBeGreaterThanOrEqual(1) + }), + ), + { config: { mcp: {} } }, ) // ======================================================================== // Test: transport leak — remote timeout (#19168) // ======================================================================== -test( +it.instance( "remote transport is closed when connect times out", - withInstance({}, (mcp) => - Effect.gen(function* () { - lastCreatedClientName = "hanging-remote" - getOrCreateClientState("hanging-remote") - connectShouldHang = true - - const addResult = yield* mcp.add("hanging-remote", { - type: "remote", - url: "http://localhost:9999/mcp", - timeout: 100, - oauth: false, - }) - - const serverStatus = (addResult.status as any)["hanging-remote"] ?? addResult.status - expect(serverStatus.status).toBe("failed") - // Transport must be closed to avoid leaked HTTP connections - expect(transportCloseCount).toBeGreaterThanOrEqual(1) - }), - ), + () => + MCP.Service.use((mcp: MCPNS.Interface) => + Effect.gen(function* () { + lastCreatedClientName = "hanging-remote" + getOrCreateClientState("hanging-remote") + connectShouldHang = true + + const addResult = yield* mcp.add("hanging-remote", { + type: "remote", + url: "http://localhost:9999/mcp", + timeout: 100, + oauth: false, + }) + + const serverStatus = (addResult.status as any)["hanging-remote"] ?? addResult.status + expect(serverStatus.status).toBe("failed") + // Transport must be closed to avoid leaked HTTP connections + expect(transportCloseCount).toBeGreaterThanOrEqual(1) + }), + ), + { config: { mcp: {} } }, ) // ======================================================================== // Test: transport leak — failed remote transports not closed (#19168) // ======================================================================== -test( +it.instance( "failed remote transport is closed before trying next transport", - withInstance({}, (mcp) => - Effect.gen(function* () { - lastCreatedClientName = "fail-remote" - getOrCreateClientState("fail-remote") - connectShouldFail = true - connectError = "Connection refused" - - const addResult = yield* mcp.add("fail-remote", { - type: "remote", - url: "http://localhost:9999/mcp", - timeout: 5000, - oauth: false, - }) - - const serverStatus = (addResult.status as any)["fail-remote"] ?? addResult.status - expect(serverStatus.status).toBe("failed") - // Both StreamableHTTP and SSE transports should be closed - expect(transportCloseCount).toBeGreaterThanOrEqual(2) - }), - ), + () => + MCP.Service.use((mcp: MCPNS.Interface) => + Effect.gen(function* () { + lastCreatedClientName = "fail-remote" + getOrCreateClientState("fail-remote") + connectShouldFail = true + connectError = "Connection refused" + + const addResult = yield* mcp.add("fail-remote", { + type: "remote", + url: "http://localhost:9999/mcp", + timeout: 5000, + oauth: false, + }) + + const serverStatus = (addResult.status as any)["fail-remote"] ?? addResult.status + expect(serverStatus.status).toBe("failed") + // Both StreamableHTTP and SSE transports should be closed + expect(transportCloseCount).toBeGreaterThanOrEqual(2) + }), + ), + { config: { mcp: {} } }, ) diff --git a/packages/opencode/test/memory/abort-leak-webfetch.ts b/packages/opencode/test/memory/abort-leak-webfetch.ts deleted file mode 100644 index c3197f8dd55d..000000000000 --- a/packages/opencode/test/memory/abort-leak-webfetch.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { abortAfterAny } from "../../src/util/abort" - -const MB = 1024 * 1024 -const ITERATIONS = 50 - -const heap = () => { - Bun.gc(true) - return process.memoryUsage().heapUsed / MB -} - -const server = Bun.serve({ - port: 0, - fetch() { - return new Response("hello from local", { - headers: { - "content-type": "text/plain", - }, - }) - }, -}) - -const url = `http://127.0.0.1:${server.port}` - -async function run() { - const { signal, clearTimeout } = abortAfterAny(30000, new AbortController().signal) - try { - const response = await fetch(url, { signal }) - await response.text() - } finally { - clearTimeout() - } -} - -try { - await run() - Bun.sleepSync(100) - const baseline = heap() - - for (let i = 0; i < ITERATIONS; i++) { - await run() - } - - Bun.sleepSync(100) - const after = heap() - process.stdout.write(JSON.stringify({ baseline, after, growth: after - baseline })) -} finally { - void server.stop(true) - process.exit(0) -} diff --git a/packages/opencode/test/memory/abort-leak.test.ts b/packages/opencode/test/memory/abort-leak.test.ts deleted file mode 100644 index d30ad45e46a9..000000000000 --- a/packages/opencode/test/memory/abort-leak.test.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { describe, test, expect } from "bun:test" -import path from "path" - -const projectRoot = path.join(import.meta.dir, "../..") -const worker = path.join(import.meta.dir, "abort-leak-webfetch.ts") - -const MB = 1024 * 1024 -const ITERATIONS = 50 - -const getHeapMB = () => { - Bun.gc(true) - return process.memoryUsage().heapUsed / MB -} - -describe("memory: abort controller leak", () => { - test("webfetch does not leak memory over many invocations", async () => { - // Measure the abort-timed fetch path in a fresh process so shared tool - // runtime state does not dominate the heap signal. - const proc = Bun.spawn({ - cmd: [process.execPath, worker], - cwd: projectRoot, - stdout: "pipe", - stderr: "pipe", - env: process.env, - }) - - const [code, stdout, stderr] = await Promise.all([ - proc.exited, - new Response(proc.stdout).text(), - new Response(proc.stderr).text(), - ]) - - if (code !== 0) { - throw new Error(stderr.trim() || stdout.trim() || `worker exited with code ${code}`) - } - - const result = JSON.parse(stdout.trim()) as { - baseline: number - after: number - growth: number - } - - console.log(`Baseline: ${result.baseline.toFixed(2)} MB`) - console.log(`After ${ITERATIONS} fetches: ${result.after.toFixed(2)} MB`) - console.log(`Growth: ${result.growth.toFixed(2)} MB`) - - // Memory growth should be minimal - less than 1MB per 10 requests. - expect(result.growth).toBeLessThan(ITERATIONS / 10) - }, 60000) - - test("compare closure vs bind pattern directly", async () => { - const ITERATIONS = 500 - - // Test OLD pattern: arrow function closure - // Store closures in a map keyed by content to force retention - const closureMap = new Map void>() - const timers: Timer[] = [] - const controllers: AbortController[] = [] - - Bun.gc(true) - Bun.sleepSync(100) - const baseline = getHeapMB() - - for (let i = 0; i < ITERATIONS; i++) { - // Simulate large response body like webfetch would have - const content = `${i}:${"x".repeat(50 * 1024)}` // 50KB unique per iteration - const controller = new AbortController() - controllers.push(controller) - - // OLD pattern - closure captures `content` - const handler = () => { - // Actually use content so it can't be optimized away - if (content.length > 1000000000) controller.abort() - } - closureMap.set(content, handler) - const timeoutId = setTimeout(handler, 30000) - timers.push(timeoutId) - } - - Bun.gc(true) - Bun.sleepSync(100) - const after = getHeapMB() - const oldGrowth = after - baseline - - console.log(`OLD pattern (closure): ${oldGrowth.toFixed(2)} MB growth (${closureMap.size} closures)`) - - // Cleanup after measuring - timers.forEach(clearTimeout) - controllers.forEach((c) => c.abort()) - closureMap.clear() - - // Test NEW pattern: bind - Bun.gc(true) - Bun.sleepSync(100) - const baseline2 = getHeapMB() - const handlers2: (() => void)[] = [] - const timers2: Timer[] = [] - const controllers2: AbortController[] = [] - - for (let i = 0; i < ITERATIONS; i++) { - const _content = `${i}:${"x".repeat(50 * 1024)}` // 50KB - won't be captured - const controller = new AbortController() - controllers2.push(controller) - - // NEW pattern - bind doesn't capture surrounding scope - const handler = controller.abort.bind(controller) - handlers2.push(handler) - const timeoutId = setTimeout(handler, 30000) - timers2.push(timeoutId) - } - - Bun.gc(true) - Bun.sleepSync(100) - const after2 = getHeapMB() - const newGrowth = after2 - baseline2 - - // Cleanup after measuring - timers2.forEach(clearTimeout) - controllers2.forEach((c) => c.abort()) - handlers2.length = 0 - - console.log(`NEW pattern (bind): ${newGrowth.toFixed(2)} MB growth`) - console.log(`Improvement: ${(oldGrowth - newGrowth).toFixed(2)} MB saved`) - - expect(newGrowth).toBeLessThanOrEqual(oldGrowth) - }) -}) diff --git a/packages/opencode/test/permission/next.test.ts b/packages/opencode/test/permission/next.test.ts index 1c3d6fc563f3..1b09c36afdf3 100644 --- a/packages/opencode/test/permission/next.test.ts +++ b/packages/opencode/test/permission/next.test.ts @@ -1,31 +1,26 @@ -import { afterEach, test, expect } from "bun:test" +import { test, expect } from "bun:test" import os from "os" -import { Cause, Effect, Exit, Fiber, Layer } from "effect" +import { Cause, Deferred, Effect, Exit, Fiber, Layer } from "effect" import { Bus } from "../../src/bus" import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner" import { Permission } from "../../src/permission" import { PermissionID } from "../../src/permission/schema" -import { Instance } from "../../src/project/instance" -import { WithInstance } from "../../src/project/with-instance" -import { InstanceRuntime } from "../../src/project/instance-runtime" -import { - disposeAllInstances, - provideInstance, - provideTmpdirInstance, - reloadTestInstance, - tmpdirScoped, -} from "../fixture/fixture" +import { InstanceBootstrap } from "../../src/project/bootstrap-service" +import { InstanceStore } from "../../src/project/instance-store" +import { TestInstance, tmpdirScoped } from "../fixture/fixture" import { testEffect } from "../lib/effect" import { MessageID, SessionID } from "../../src/session/schema" const bus = Bus.layer -const env = Layer.mergeAll(Permission.layer.pipe(Layer.provide(bus)), bus, CrossSpawnSpawner.defaultLayer) +const noopBootstrap = Layer.succeed(InstanceBootstrap.Service, InstanceBootstrap.Service.of({ run: Effect.void })) +const env = Layer.mergeAll( + Permission.layer.pipe(Layer.provide(bus)), + bus, + CrossSpawnSpawner.defaultLayer, + InstanceStore.defaultLayer.pipe(Layer.provide(noopBootstrap)), +) const it = testEffect(env) -afterEach(async () => { - await disposeAllInstances() -}) - const rejectAll = (message?: string) => Effect.gen(function* () { const permission = yield* Permission.Service @@ -41,12 +36,18 @@ const rejectAll = (message?: string) => const waitForPending = (count: number) => Effect.gen(function* () { const permission = yield* Permission.Service - for (let i = 0; i < 100; i++) { - const list = yield* permission.list() - if (list.length === count) return list - yield* Effect.sleep("10 millis") - } - return yield* Effect.fail(new Error(`timed out waiting for ${count} pending permission request(s)`)) + return yield* Effect.gen(function* () { + while (true) { + const list = yield* permission.list() + if (list.length === count) return list + yield* Effect.sleep("10 millis") + } + }).pipe( + Effect.timeoutOrElse({ + duration: "1 second", + orElse: () => Effect.fail(new Error(`timed out waiting for ${count} pending permission request(s)`)), + }), + ) }) const fail = (self: Effect.Effect) => @@ -74,14 +75,6 @@ const list = () => return yield* permission.list() }) -function withDir(options: { git?: boolean } | undefined, self: (dir: string) => Effect.Effect) { - return provideTmpdirInstance(self, options) -} - -function withProvided(dir: string) { - return (self: Effect.Effect) => self.pipe(provideInstance(dir)) -} - // fromConfig tests test("fromConfig - string value becomes wildcard rule", () => { @@ -563,8 +556,9 @@ test("disabled - specific allow overrides wildcard deny", () => { // ask tests -it.live("ask - resolves immediately when action is allow", () => - withDir({ git: true }, () => +it.instance( + "ask - resolves immediately when action is allow", + () => Effect.gen(function* () { const result = yield* ask({ sessionID: SessionID.make("session_test"), @@ -576,11 +570,12 @@ it.live("ask - resolves immediately when action is allow", () => }) expect(result).toBeUndefined() }), - ), + { git: true }, ) -it.live("ask - throws DeniedError when action is deny", () => - withDir({ git: true }, () => +it.instance( + "ask - throws DeniedError when action is deny", + () => Effect.gen(function* () { const err = yield* fail( ask({ @@ -594,11 +589,12 @@ it.live("ask - throws DeniedError when action is deny", () => ) expect(err).toBeInstanceOf(Permission.DeniedError) }), - ), + { git: true }, ) -it.live("ask - stays pending when action is ask", () => - withDir({ git: true }, () => +it.instance( + "ask - stays pending when action is ask", + () => Effect.gen(function* () { const fiber = yield* ask({ sessionID: SessionID.make("session_test"), @@ -613,11 +609,12 @@ it.live("ask - stays pending when action is ask", () => yield* rejectAll() yield* Fiber.await(fiber) }), - ), + { git: true }, ) -it.live("ask - adds request to pending list", () => - withDir({ git: true }, () => +it.instance( + "ask - adds request to pending list", + () => Effect.gen(function* () { const fiber = yield* ask({ sessionID: SessionID.make("session_test"), @@ -649,53 +646,58 @@ it.live("ask - adds request to pending list", () => yield* rejectAll() yield* Fiber.await(fiber) }), - ), + { git: true }, ) -it.live("ask - publishes asked event", () => - withDir({ git: true }, () => +it.instance( + "ask - publishes asked event", + () => Effect.gen(function* () { const bus = yield* Bus.Service - let seen: Permission.Request | undefined + const seen = yield* Deferred.make() const unsub = yield* bus.subscribeCallback(Permission.Event.Asked, (event) => { - seen = event.properties + Deferred.doneUnsafe(seen, Effect.succeed(event.properties)) }) + yield* Effect.addFinalizer(() => Effect.sync(unsub)) - try { - const fiber = yield* ask({ - sessionID: SessionID.make("session_test"), - permission: "bash", - patterns: ["ls"], - metadata: { cmd: "ls" }, - always: ["ls"], - tool: { - messageID: MessageID.make("msg_test"), - callID: "call_test", - }, - ruleset: [], - }).pipe(Effect.forkScoped) + const fiber = yield* ask({ + sessionID: SessionID.make("session_test"), + permission: "bash", + patterns: ["ls"], + metadata: { cmd: "ls" }, + always: ["ls"], + tool: { + messageID: MessageID.make("msg_test"), + callID: "call_test", + }, + ruleset: [], + }).pipe(Effect.forkScoped) - expect(yield* waitForPending(1)).toHaveLength(1) - expect(seen).toBeDefined() - expect(seen).toMatchObject({ - sessionID: SessionID.make("session_test"), - permission: "bash", - patterns: ["ls"], - }) + expect(yield* waitForPending(1)).toHaveLength(1) + expect( + yield* Deferred.await(seen).pipe( + Effect.timeoutOrElse({ + duration: "1 second", + orElse: () => Effect.fail(new Error("timed out waiting for permission asked event")), + }), + ), + ).toMatchObject({ + sessionID: SessionID.make("session_test"), + permission: "bash", + patterns: ["ls"], + }) - yield* rejectAll() - yield* Fiber.await(fiber) - } finally { - unsub() - } + yield* rejectAll() + yield* Fiber.await(fiber) }), - ), + { git: true }, ) // reply tests -it.live("reply - once resolves the pending ask", () => - withDir({ git: true }, () => +it.instance( + "reply - once resolves the pending ask", + () => Effect.gen(function* () { const fiber = yield* ask({ id: PermissionID.make("per_test1"), @@ -711,11 +713,12 @@ it.live("reply - once resolves the pending ask", () => yield* reply({ requestID: PermissionID.make("per_test1"), reply: "once" }) yield* Fiber.join(fiber) }), - ), + { git: true }, ) -it.live("reply - reject throws RejectedError", () => - withDir({ git: true }, () => +it.instance( + "reply - reject throws RejectedError", + () => Effect.gen(function* () { const fiber = yield* ask({ id: PermissionID.make("per_test2"), @@ -734,11 +737,12 @@ it.live("reply - reject throws RejectedError", () => expect(Exit.isFailure(exit)).toBe(true) if (Exit.isFailure(exit)) expect(Cause.squash(exit.cause)).toBeInstanceOf(Permission.RejectedError) }), - ), + { git: true }, ) -it.live("reply - reject with message throws CorrectedError", () => - withDir({ git: true }, () => +it.instance( + "reply - reject with message throws CorrectedError", + () => Effect.gen(function* () { const fiber = yield* ask({ id: PermissionID.make("per_test2b"), @@ -765,41 +769,43 @@ it.live("reply - reject with message throws CorrectedError", () => expect(String(err)).toContain("Use a safer command") } }), - ), + { git: true }, ) -it.live("reply - always persists approval and resolves", () => - Effect.gen(function* () { - const dir = yield* tmpdirScoped({ git: true }) - const run = withProvided(dir) - const fiber = yield* ask({ - id: PermissionID.make("per_test3"), - sessionID: SessionID.make("session_test"), - permission: "bash", - patterns: ["ls"], - metadata: {}, - always: ["ls"], - ruleset: [], - }).pipe(run, Effect.forkScoped) - - yield* waitForPending(1).pipe(run) - yield* reply({ requestID: PermissionID.make("per_test3"), reply: "always" }).pipe(run) - yield* Fiber.join(fiber) - - const result = yield* ask({ - sessionID: SessionID.make("session_test2"), - permission: "bash", - patterns: ["ls"], - metadata: {}, - always: [], - ruleset: [], - }).pipe(run) - expect(result).toBeUndefined() - }), +it.instance( + "reply - always persists approval and resolves", + () => + Effect.gen(function* () { + const fiber = yield* ask({ + id: PermissionID.make("per_test3"), + sessionID: SessionID.make("session_test"), + permission: "bash", + patterns: ["ls"], + metadata: {}, + always: ["ls"], + ruleset: [], + }).pipe(Effect.forkScoped) + + yield* waitForPending(1) + yield* reply({ requestID: PermissionID.make("per_test3"), reply: "always" }) + yield* Fiber.join(fiber) + + const result = yield* ask({ + sessionID: SessionID.make("session_test2"), + permission: "bash", + patterns: ["ls"], + metadata: {}, + always: [], + ruleset: [], + }) + expect(result).toBeUndefined() + }), + { git: true }, ) -it.live("reply - reject cancels all pending for same session", () => - withDir({ git: true }, () => +it.instance( + "reply - reject cancels all pending for same session", + () => Effect.gen(function* () { const a = yield* ask({ id: PermissionID.make("per_test4a"), @@ -830,11 +836,12 @@ it.live("reply - reject cancels all pending for same session", () => if (Exit.isFailure(ea)) expect(Cause.squash(ea.cause)).toBeInstanceOf(Permission.RejectedError) if (Exit.isFailure(eb)) expect(Cause.squash(eb.cause)).toBeInstanceOf(Permission.RejectedError) }), - ), + { git: true }, ) -it.live("reply - always resolves matching pending requests in same session", () => - withDir({ git: true }, () => +it.instance( + "reply - always resolves matching pending requests in same session", + () => Effect.gen(function* () { const a = yield* ask({ id: PermissionID.make("per_test5a"), @@ -863,11 +870,12 @@ it.live("reply - always resolves matching pending requests in same session", () yield* Fiber.join(b) expect(yield* list()).toHaveLength(0) }), - ), + { git: true }, ) -it.live("reply - always keeps other session pending", () => - withDir({ git: true }, () => +it.instance( + "reply - always keeps other session pending", + () => Effect.gen(function* () { const a = yield* ask({ id: PermissionID.make("per_test6a"), @@ -898,24 +906,15 @@ it.live("reply - always keeps other session pending", () => yield* rejectAll() yield* Fiber.await(b) }), - ), + { git: true }, ) -it.live("reply - publishes replied event", () => - withDir({ git: true }, () => +it.instance( + "reply - publishes replied event", + () => Effect.gen(function* () { const bus = yield* Bus.Service - let resolve!: (value: { sessionID: SessionID; requestID: PermissionID; reply: Permission.Reply }) => void - const seen = Effect.promise<{ - sessionID: SessionID - requestID: PermissionID - reply: Permission.Reply - }>( - () => - new Promise((res) => { - resolve = res - }), - ) + const seen = yield* Deferred.make<{ sessionID: SessionID; requestID: PermissionID; reply: Permission.Reply }>() const fiber = yield* ask({ id: PermissionID.make("per_test7"), @@ -930,126 +929,146 @@ it.live("reply - publishes replied event", () => yield* waitForPending(1) const unsub = yield* bus.subscribeCallback(Permission.Event.Replied, (event) => { - resolve(event.properties) + Deferred.doneUnsafe(seen, Effect.succeed(event.properties)) }) + yield* Effect.addFinalizer(() => Effect.sync(unsub)) - try { - yield* reply({ requestID: PermissionID.make("per_test7"), reply: "once" }) - yield* Fiber.join(fiber) - expect(yield* seen).toEqual({ - sessionID: SessionID.make("session_test"), - requestID: PermissionID.make("per_test7"), - reply: "once", - }) - } finally { - unsub() - } + yield* reply({ requestID: PermissionID.make("per_test7"), reply: "once" }) + yield* Fiber.join(fiber) + expect( + yield* Deferred.await(seen).pipe( + Effect.timeoutOrElse({ + duration: "1 second", + orElse: () => Effect.fail(new Error("timed out waiting for permission replied event")), + }), + ), + ).toEqual({ + sessionID: SessionID.make("session_test"), + requestID: PermissionID.make("per_test7"), + reply: "once", + }) }), - ), + { git: true }, ) it.live("permission requests stay isolated by directory", () => Effect.gen(function* () { const one = yield* tmpdirScoped({ git: true }) const two = yield* tmpdirScoped({ git: true }) - const runOne = withProvided(one) - const runTwo = withProvided(two) - - const a = yield* ask({ - id: PermissionID.make("per_dir_a"), - sessionID: SessionID.make("session_dir_a"), - permission: "bash", - patterns: ["ls"], - metadata: {}, - always: [], - ruleset: [], - }).pipe(runOne, Effect.forkScoped) - - const b = yield* ask({ - id: PermissionID.make("per_dir_b"), - sessionID: SessionID.make("session_dir_b"), - permission: "bash", - patterns: ["pwd"], - metadata: {}, - always: [], - ruleset: [], - }).pipe(runTwo, Effect.forkScoped) - - const onePending = yield* waitForPending(1).pipe(runOne) - const twoPending = yield* waitForPending(1).pipe(runTwo) + const store = yield* InstanceStore.Service + + const a = yield* store + .provide( + { directory: one }, + ask({ + id: PermissionID.make("per_dir_a"), + sessionID: SessionID.make("session_dir_a"), + permission: "bash", + patterns: ["ls"], + metadata: {}, + always: [], + ruleset: [], + }), + ) + .pipe(Effect.forkScoped) + + const b = yield* store + .provide( + { directory: two }, + ask({ + id: PermissionID.make("per_dir_b"), + sessionID: SessionID.make("session_dir_b"), + permission: "bash", + patterns: ["pwd"], + metadata: {}, + always: [], + ruleset: [], + }), + ) + .pipe(Effect.forkScoped) + + const onePending = yield* store.provide({ directory: one }, waitForPending(1)) + const twoPending = yield* store.provide({ directory: two }, waitForPending(1)) expect(onePending).toHaveLength(1) expect(twoPending).toHaveLength(1) expect(onePending[0].id).toBe(PermissionID.make("per_dir_a")) expect(twoPending[0].id).toBe(PermissionID.make("per_dir_b")) - yield* reply({ requestID: onePending[0].id, reply: "reject" }).pipe(runOne) - yield* reply({ requestID: twoPending[0].id, reply: "reject" }).pipe(runTwo) + yield* store.provide({ directory: one }, reply({ requestID: onePending[0].id, reply: "reject" })) + yield* store.provide({ directory: two }, reply({ requestID: twoPending[0].id, reply: "reject" })) yield* Fiber.await(a) yield* Fiber.await(b) }), ) -it.live("pending permission rejects on instance dispose", () => - Effect.gen(function* () { - const dir = yield* tmpdirScoped({ git: true }) - const run = withProvided(dir) - const fiber = yield* ask({ - id: PermissionID.make("per_dispose"), - sessionID: SessionID.make("session_dispose"), - permission: "bash", - patterns: ["ls"], - metadata: {}, - always: [], - ruleset: [], - }).pipe(run, Effect.forkScoped) - - expect(yield* waitForPending(1).pipe(run)).toHaveLength(1) - yield* Effect.promise(() => - WithInstance.provide({ directory: dir, fn: () => void InstanceRuntime.disposeInstance(Instance.current) }), - ) +it.instance( + "pending permission rejects on instance dispose", + () => + Effect.gen(function* () { + const test = yield* TestInstance + const store = yield* InstanceStore.Service + const fiber = yield* ask({ + id: PermissionID.make("per_dispose"), + sessionID: SessionID.make("session_dispose"), + permission: "bash", + patterns: ["ls"], + metadata: {}, + always: [], + ruleset: [], + }).pipe(Effect.forkScoped) - const exit = yield* Fiber.await(fiber) - expect(Exit.isFailure(exit)).toBe(true) - if (Exit.isFailure(exit)) expect(Cause.squash(exit.cause)).toBeInstanceOf(Permission.RejectedError) - }), + expect(yield* waitForPending(1)).toHaveLength(1) + const ctx = yield* store.load({ directory: test.directory }) + yield* store.dispose(ctx) + + const exit = yield* Fiber.await(fiber) + expect(Exit.isFailure(exit)).toBe(true) + if (Exit.isFailure(exit)) expect(Cause.squash(exit.cause)).toBeInstanceOf(Permission.RejectedError) + }), + { git: true }, ) -it.live("pending permission rejects on instance reload", () => - Effect.gen(function* () { - const dir = yield* tmpdirScoped({ git: true }) - const run = withProvided(dir) - const fiber = yield* ask({ - id: PermissionID.make("per_reload"), - sessionID: SessionID.make("session_reload"), - permission: "bash", - patterns: ["ls"], - metadata: {}, - always: [], - ruleset: [], - }).pipe(run, Effect.forkScoped) - - expect(yield* waitForPending(1).pipe(run)).toHaveLength(1) - yield* Effect.promise(() => reloadTestInstance({ directory: dir })) - - const exit = yield* Fiber.await(fiber) - expect(Exit.isFailure(exit)).toBe(true) - if (Exit.isFailure(exit)) expect(Cause.squash(exit.cause)).toBeInstanceOf(Permission.RejectedError) - }), +it.instance( + "pending permission rejects on instance reload", + () => + Effect.gen(function* () { + const test = yield* TestInstance + const store = yield* InstanceStore.Service + const fiber = yield* ask({ + id: PermissionID.make("per_reload"), + sessionID: SessionID.make("session_reload"), + permission: "bash", + patterns: ["ls"], + metadata: {}, + always: [], + ruleset: [], + }).pipe(Effect.forkScoped) + + expect(yield* waitForPending(1)).toHaveLength(1) + yield* store.reload({ directory: test.directory }) + + const exit = yield* Fiber.await(fiber) + expect(Exit.isFailure(exit)).toBe(true) + if (Exit.isFailure(exit)) expect(Cause.squash(exit.cause)).toBeInstanceOf(Permission.RejectedError) + }), + { git: true }, ) -it.live("reply - does nothing for unknown requestID", () => - withDir({ git: true }, () => +it.instance( + "reply - does nothing for unknown requestID", + () => Effect.gen(function* () { yield* reply({ requestID: PermissionID.make("per_unknown"), reply: "once" }) expect(yield* list()).toHaveLength(0) }), - ), + { git: true }, ) -it.live("ask - checks all patterns and stops on first deny", () => - withDir({ git: true }, () => +it.instance( + "ask - checks all patterns and stops on first deny", + () => Effect.gen(function* () { const err = yield* fail( ask({ @@ -1066,11 +1085,12 @@ it.live("ask - checks all patterns and stops on first deny", () => ) expect(err).toBeInstanceOf(Permission.DeniedError) }), - ), + { git: true }, ) -it.live("ask - allows all patterns when all match allow rules", () => - withDir({ git: true }, () => +it.instance( + "ask - allows all patterns when all match allow rules", + () => Effect.gen(function* () { const result = yield* ask({ sessionID: SessionID.make("session_test"), @@ -1082,11 +1102,12 @@ it.live("ask - allows all patterns when all match allow rules", () => }) expect(result).toBeUndefined() }), - ), + { git: true }, ) -it.live("ask - should deny even when an earlier pattern is ask", () => - withDir({ git: true }, () => +it.instance( + "ask - should deny even when an earlier pattern is ask", + () => Effect.gen(function* () { const err = yield* fail( ask({ @@ -1105,30 +1126,33 @@ it.live("ask - should deny even when an earlier pattern is ask", () => expect(err).toBeInstanceOf(Permission.DeniedError) expect(yield* list()).toHaveLength(0) }), - ), + { git: true }, ) -it.live("ask - abort should clear pending request", () => - Effect.gen(function* () { - const dir = yield* tmpdirScoped({ git: true }) - const run = withProvided(dir) - - const fiber = yield* ask({ - id: PermissionID.make("per_reload"), - sessionID: SessionID.make("session_reload"), - permission: "bash", - patterns: ["ls"], - metadata: {}, - always: [], - ruleset: [{ permission: "bash", pattern: "*", action: "ask" }], - }).pipe(run, Effect.forkScoped) - - const pending = yield* waitForPending(1).pipe(run) - expect(pending).toHaveLength(1) - yield* Effect.promise(() => reloadTestInstance({ directory: dir })) - - const exit = yield* Fiber.await(fiber) - expect(Exit.isFailure(exit)).toBe(true) - if (Exit.isFailure(exit)) expect(Cause.squash(exit.cause)).toBeInstanceOf(Permission.RejectedError) - }), +it.instance( + "ask - abort should clear pending request", + () => + Effect.gen(function* () { + const test = yield* TestInstance + const store = yield* InstanceStore.Service + + const fiber = yield* ask({ + id: PermissionID.make("per_reload"), + sessionID: SessionID.make("session_reload"), + permission: "bash", + patterns: ["ls"], + metadata: {}, + always: [], + ruleset: [{ permission: "bash", pattern: "*", action: "ask" }], + }).pipe(Effect.forkScoped) + + const pending = yield* waitForPending(1) + expect(pending).toHaveLength(1) + yield* store.reload({ directory: test.directory }) + + const exit = yield* Fiber.await(fiber) + expect(Exit.isFailure(exit)).toBe(true) + if (Exit.isFailure(exit)) expect(Cause.squash(exit.cause)).toBeInstanceOf(Permission.RejectedError) + }), + { git: true }, ) diff --git a/packages/opencode/test/plugin/auth-override.test.ts b/packages/opencode/test/plugin/auth-override.test.ts index 402d755da7cd..adc66e48c556 100644 --- a/packages/opencode/test/plugin/auth-override.test.ts +++ b/packages/opencode/test/plugin/auth-override.test.ts @@ -7,6 +7,7 @@ import { provideInstance, TestInstance, tmpdirScoped } from "../fixture/fixture" import { ProviderAuth } from "@/provider/auth" import { ProviderID } from "../../src/provider/schema" import { Plugin } from "@/plugin" +import { RuntimeFlags } from "@/effect/runtime-flags" import { Auth } from "@/auth" import { Bus } from "@/bus" import { TestConfig } from "../fixture/config" @@ -21,6 +22,7 @@ function layer(directory: string, plugins: string[]) { Layer.provide( Plugin.layer.pipe( Layer.provide(Bus.layer), + Layer.provide(RuntimeFlags.layer()), Layer.provide( TestConfig.layer({ get: () => diff --git a/packages/opencode/test/plugin/loader-shared.test.ts b/packages/opencode/test/plugin/loader-shared.test.ts index 1b6372390e56..6b1dd306dcbb 100644 --- a/packages/opencode/test/plugin/loader-shared.test.ts +++ b/packages/opencode/test/plugin/loader-shared.test.ts @@ -1,4 +1,4 @@ -import { afterAll, afterEach, describe, expect, spyOn } from "bun:test" +import { afterEach, describe, expect, spyOn } from "bun:test" import { Effect, Layer } from "effect" import fs from "fs/promises" import path from "path" @@ -8,23 +8,13 @@ import { disposeAllInstances, provideInstance, tmpdirScoped } from "../fixture/f import { testEffect } from "../lib/effect" import { Filesystem } from "@/util/filesystem" -const disableDefault = process.env.OPENCODE_DISABLE_DEFAULT_PLUGINS -process.env.OPENCODE_DISABLE_DEFAULT_PLUGINS = "1" - const { Plugin } = await import("../../src/plugin/index") const { PluginLoader } = await import("../../src/plugin/loader") const { readPackageThemes } = await import("../../src/plugin/shared") const { Bus } = await import("../../src/bus") const { Npm } = await import("@opencode-ai/core/npm") const { TestConfig } = await import("../fixture/config") - -afterAll(() => { - if (disableDefault === undefined) { - delete process.env.OPENCODE_DISABLE_DEFAULT_PLUGINS - return - } - process.env.OPENCODE_DISABLE_DEFAULT_PLUGINS = disableDefault -}) +const { RuntimeFlags } = await import("../../src/effect/runtime-flags") afterEach(async () => { await disposeAllInstances() @@ -43,7 +33,7 @@ function withTmp( }) } -function load(dir: string) { +function load(dir: string, flags?: Parameters[0]) { const source = path.join(dir, "opencode.json") return Effect.gen(function* () { const config = yield* Effect.promise( @@ -57,6 +47,7 @@ function load(dir: string) { Effect.provide( Plugin.layer.pipe( Layer.provide(Bus.layer), + Layer.provide(RuntimeFlags.layer({ disableDefaultPlugins: true, ...flags })), Layer.provide( TestConfig.layer({ get: () => @@ -934,25 +925,14 @@ export default { }, (tmp) => Effect.gen(function* () { - const pure = process.env.OPENCODE_PURE - process.env.OPENCODE_PURE = "1" - - try { - yield* load(tmp.path) - const called = yield* Effect.promise(() => - fs - .readFile(tmp.extra.mark, "utf8") - .then(() => true) - .catch(() => false), - ) - expect(called).toBe(false) - } finally { - if (pure === undefined) { - delete process.env.OPENCODE_PURE - } else { - process.env.OPENCODE_PURE = pure - } - } + yield* load(tmp.path, { pure: true }) + const called = yield* Effect.promise(() => + fs + .readFile(tmp.extra.mark, "utf8") + .then(() => true) + .catch(() => false), + ) + expect(called).toBe(false) }), ), ) diff --git a/packages/opencode/test/plugin/trigger.test.ts b/packages/opencode/test/plugin/trigger.test.ts index 18fe0e82ef94..94642fba629c 100644 --- a/packages/opencode/test/plugin/trigger.test.ts +++ b/packages/opencode/test/plugin/trigger.test.ts @@ -10,6 +10,7 @@ import { Auth } from "../../src/auth" import { Bus } from "../../src/bus" import { Config } from "../../src/config/config" import { Env } from "../../src/env" +import { RuntimeFlags } from "../../src/effect/runtime-flags" import { Plugin } from "../../src/plugin/index" import { ModelID, ProviderID } from "../../src/provider/schema" import { provideTmpdirInstance } from "../fixture/fixture" @@ -33,7 +34,11 @@ const configLayer = Config.layer.pipe( ) const it = testEffect( Layer.mergeAll( - Plugin.layer.pipe(Layer.provide(Bus.layer), Layer.provide(configLayer)), + Plugin.layer.pipe( + Layer.provide(Bus.layer), + Layer.provide(configLayer), + Layer.provide(RuntimeFlags.layer({ disableDefaultPlugins: true })), + ), CrossSpawnSpawner.defaultLayer, ), ) diff --git a/packages/opencode/test/plugin/workspace-adapter.test.ts b/packages/opencode/test/plugin/workspace-adapter.test.ts index d4aaae4a9d57..bef860432450 100644 --- a/packages/opencode/test/plugin/workspace-adapter.test.ts +++ b/packages/opencode/test/plugin/workspace-adapter.test.ts @@ -11,6 +11,7 @@ import { Auth } from "../../src/auth" import { Bus } from "../../src/bus" import { Config } from "../../src/config/config" import { Env } from "../../src/env" +import { RuntimeFlags } from "../../src/effect/runtime-flags" import { Workspace } from "../../src/control-plane/workspace" import { Plugin } from "../../src/plugin/index" import { InstanceBootstrap } from "../../src/project/bootstrap-service" @@ -35,7 +36,11 @@ const configLayer = Config.layer.pipe( Layer.provide(emptyAccount), Layer.provide(NpmTest.noop), ) -const pluginLayer = Plugin.layer.pipe(Layer.provide(Bus.layer), Layer.provide(configLayer)) +const pluginLayer = Plugin.layer.pipe( + Layer.provide(Bus.layer), + Layer.provide(configLayer), + Layer.provide(RuntimeFlags.layer({ disableDefaultPlugins: true })), +) const noopBootstrapLayer = Layer.succeed(InstanceBootstrap.Service, InstanceBootstrap.Service.of({ run: Effect.void })) const workspaceLayer = Workspace.defaultLayer.pipe( Layer.provide(InstanceStore.defaultLayer.pipe(Layer.provide(noopBootstrapLayer))), diff --git a/packages/opencode/test/preload.ts b/packages/opencode/test/preload.ts index b408f7ef11b8..6447c2fe93c3 100644 --- a/packages/opencode/test/preload.ts +++ b/packages/opencode/test/preload.ts @@ -45,7 +45,6 @@ process.env["OPENCODE_TEST_HOME"] = testHome // Set test managed config directory to isolate tests from system managed settings const testManagedConfigDir = path.join(dir, "managed") process.env["OPENCODE_TEST_MANAGED_CONFIG_DIR"] = testManagedConfigDir -process.env["OPENCODE_DISABLE_DEFAULT_PLUGINS"] = "true" // Write the cache version file to prevent global/index.ts from clearing the cache const cacheDir = path.join(dir, "cache", "opencode") diff --git a/packages/opencode/test/project/instance.test.ts b/packages/opencode/test/project/instance.test.ts index dc87fde45edb..9c0f9150e10f 100644 --- a/packages/opencode/test/project/instance.test.ts +++ b/packages/opencode/test/project/instance.test.ts @@ -1,4 +1,4 @@ -import { afterEach, describe, expect } from "bun:test" +import { describe, expect } from "bun:test" import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner" import { Deferred, Effect, Fiber, Layer } from "effect" import { InstanceRef } from "../../src/effect/instance-ref" @@ -6,7 +6,7 @@ import { registerDisposer } from "../../src/effect/instance-registry" import { InstanceBootstrap } from "../../src/project/bootstrap-service" import { Instance } from "../../src/project/instance" import { InstanceStore } from "../../src/project/instance-store" -import { disposeAllInstances, TestInstance, tmpdirScoped } from "../fixture/fixture" +import { TestInstance, tmpdirScoped } from "../fixture/fixture" import { testEffect } from "../lib/effect" let bootstrapRun: Effect.Effect = Effect.void @@ -19,10 +19,22 @@ const it = testEffect( Layer.mergeAll(InstanceStore.defaultLayer, CrossSpawnSpawner.defaultLayer).pipe(Layer.provide(noopBootstrap)), ) -afterEach(async () => { - bootstrapRun = Effect.void - await disposeAllInstances() -}) +const setBootstrap = (run: Effect.Effect) => + Effect.acquireRelease( + Effect.sync(() => { + bootstrapRun = run + }), + () => + Effect.sync(() => { + bootstrapRun = Effect.void + }), + ) + +const registerDisposerScoped = (disposer: (directory: string) => Promise) => + Effect.acquireRelease( + Effect.sync(() => registerDisposer(disposer)), + (off) => Effect.sync(off), + ) describe("InstanceStore", () => { it.live("loads instance context without installing ALS for the caller", () => @@ -43,9 +55,11 @@ describe("InstanceStore", () => { const store = yield* InstanceStore.Service let initializedDirectory: string | undefined - bootstrapRun = Effect.gen(function* () { - initializedDirectory = (yield* InstanceRef)?.directory - }) + yield* setBootstrap( + Effect.gen(function* () { + initializedDirectory = (yield* InstanceRef)?.directory + }), + ) yield* store.load({ directory: dir }) expect(initializedDirectory).toBe(dir) @@ -59,9 +73,11 @@ describe("InstanceStore", () => { const store = yield* InstanceStore.Service let initialized = 0 - bootstrapRun = Effect.sync(() => { - initialized++ - }) + yield* setBootstrap( + Effect.sync(() => { + initialized++ + }), + ) const first = yield* store.load({ directory: dir }) const second = yield* store.load({ directory: dir }) @@ -78,18 +94,22 @@ describe("InstanceStore", () => { const release = yield* Deferred.make() let initialized = 0 - bootstrapRun = Effect.gen(function* () { - initialized++ - yield* Deferred.succeed(started, undefined) - yield* Deferred.await(release) - }) + yield* setBootstrap( + Effect.gen(function* () { + initialized++ + yield* Deferred.succeed(started, undefined) + yield* Deferred.await(release) + }), + ) const first = yield* store.load({ directory: dir }).pipe(Effect.forkScoped) yield* Deferred.await(started) - bootstrapRun = Effect.sync(() => { - initialized++ - }) + yield* setBootstrap( + Effect.sync(() => { + initialized++ + }), + ) const second = yield* store.load({ directory: dir }).pipe(Effect.forkScoped) expect(initialized).toBe(1) @@ -107,10 +127,12 @@ describe("InstanceStore", () => { const store = yield* InstanceStore.Service let attempts = 0 - bootstrapRun = Effect.sync(() => { - attempts++ - throw new Error("init failed") - }) + yield* setBootstrap( + Effect.sync(() => { + attempts++ + throw new Error("init failed") + }), + ) const failed = yield* store.load({ directory: dir }).pipe( Effect.as(false), Effect.catchCause(() => Effect.succeed(true)), @@ -118,9 +140,11 @@ describe("InstanceStore", () => { expect(failed).toBe(true) - bootstrapRun = Effect.sync(() => { - attempts++ - }) + yield* setBootstrap( + Effect.sync(() => { + attempts++ + }), + ) const ctx = yield* store.load({ directory: dir }) expect(ctx.directory).toBe(dir) @@ -149,16 +173,17 @@ describe("InstanceStore", () => { const reloading = yield* Deferred.make() const releaseReload = yield* Deferred.make() const disposed: Array = [] - const off = registerDisposer(async (directory) => { + yield* registerDisposerScoped(async (directory) => { disposed.push(directory) }) - yield* Effect.addFinalizer(() => Effect.sync(off)) const first = yield* store.load({ directory: dir }) - bootstrapRun = Effect.gen(function* () { - yield* Deferred.succeed(reloading, undefined) - yield* Deferred.await(releaseReload) - }) + yield* setBootstrap( + Effect.gen(function* () { + yield* Deferred.succeed(reloading, undefined) + yield* Deferred.await(releaseReload) + }), + ) const reload = yield* store.reload({ directory: dir }).pipe(Effect.forkScoped) yield* Deferred.await(reloading) @@ -178,22 +203,24 @@ describe("InstanceStore", () => { const dir = yield* tmpdirScoped({ git: true }) const store = yield* InstanceStore.Service const disposing = yield* Deferred.make() - const releaseDispose = yield* Deferred.make() + const releaseDispose = yield* Deferred.make<() => void>() const disposed: Array = [] - const off = registerDisposer(async (directory) => { + yield* registerDisposerScoped((directory) => { disposed.push(directory) Deferred.doneUnsafe(disposing, Effect.void) - await Effect.runPromise(Deferred.await(releaseDispose)) + return new Promise((resolve) => { + Deferred.doneUnsafe(releaseDispose, Effect.succeed(resolve)) + }) }) - yield* Effect.addFinalizer(() => Effect.sync(off)) yield* store.load({ directory: dir }) const first = yield* store.disposeAll().pipe(Effect.forkScoped) yield* Deferred.await(disposing) + const release = yield* Deferred.await(releaseDispose) const second = yield* store.disposeAll().pipe(Effect.forkScoped) expect(disposed).toEqual([dir]) - yield* Deferred.succeed(releaseDispose, undefined) + yield* Effect.sync(release) yield* Effect.all([Fiber.join(first), Fiber.join(second)]) expect(disposed).toEqual([dir]) }), @@ -205,10 +232,9 @@ describe("InstanceStore", () => { const dir2 = yield* tmpdirScoped({ git: true }) const store = yield* InstanceStore.Service const disposed: Array = [] - const off = registerDisposer(async (directory) => { + yield* registerDisposerScoped(async (directory) => { disposed.push(directory) }) - yield* Effect.addFinalizer(() => Effect.sync(off)) yield* store.load({ directory: dir1 }) yield* store.disposeAll() diff --git a/packages/opencode/test/project/worktree.test.ts b/packages/opencode/test/project/worktree.test.ts index bc8a2337b1b9..1de7600145c1 100644 --- a/packages/opencode/test/project/worktree.test.ts +++ b/packages/opencode/test/project/worktree.test.ts @@ -2,11 +2,13 @@ import { afterEach, describe, expect } from "bun:test" import path from "path" import { AppFileSystem } from "@opencode-ai/core/filesystem" import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner" -import { Cause, Deferred, Effect, Exit, Layer } from "effect" +import { Cause, Deferred, Effect, Exit, Fiber, Layer } from "effect" import { GlobalBus, type GlobalEvent } from "../../src/bus/global" import { Git } from "../../src/git" +import { Instance } from "../../src/project/instance" +import { InstanceRuntime } from "../../src/project/instance-runtime" import { Worktree } from "../../src/worktree" -import { disposeAllInstances, TestInstance } from "../fixture/fixture" +import { disposeAllInstances, provideInstance, TestInstance } from "../fixture/fixture" import { testEffect } from "../lib/effect" const it = testEffect( @@ -28,7 +30,7 @@ const waitReady = Effect.fn("WorktreeTest.waitReady")(function* () { GlobalBus.on("event", on) yield* Effect.addFinalizer(() => Effect.sync(() => GlobalBus.off("event", on))) - return Deferred.await(ready).pipe( + return yield* Deferred.await(ready).pipe( Effect.timeoutOrElse({ duration: "10 seconds", orElse: () => Effect.fail(new Error("timed out waiting for worktree.ready")), @@ -36,6 +38,31 @@ const waitReady = Effect.fn("WorktreeTest.waitReady")(function* () { ) }) +const removeCreatedWorktree = (directory: string) => + Effect.gen(function* () { + const svc = yield* Worktree.Service + const ctx = yield* Effect.sync(() => Instance.current).pipe(provideInstance(directory)) + yield* Effect.promise(() => InstanceRuntime.disposeInstance(ctx)) + const ok = yield* svc.remove({ directory }) + if (!ok) return yield* Effect.fail(new Error(`failed to remove worktree ${directory}`)) + }) + +const withCreatedWorktree = ( + input: Parameters[0], + use: (created: { info: Worktree.Info; ready: { name: string; branch?: string } }) => Effect.Effect, +) => + Effect.acquireUseRelease( + Effect.gen(function* () { + const svc = yield* Worktree.Service + const ready = yield* waitReady().pipe(Effect.forkScoped) + const info = yield* svc.create(input) + const props = yield* Fiber.join(ready) + return { info, ready: props } + }), + use, + ({ info }) => removeCreatedWorktree(info.directory), + ) + const git = Effect.fn("WorktreeTest.git")(function* (cwd: string, args: string[]) { const service = yield* Git.Service const result = yield* service.run(args, { cwd }) @@ -125,7 +152,7 @@ describe("Worktree", () => { const test = yield* TestInstance const svc = yield* Worktree.Service const info = yield* svc.makeWorktreeInfo({ name: "detached-test", detached: true }) - const ready = yield* waitReady() + const ready = yield* waitReady().pipe(Effect.forkScoped) yield* svc.createFromInfo(info) const list = yield* git(test.directory, ["worktree", "list", "--porcelain"]) @@ -136,7 +163,7 @@ describe("Worktree", () => { const branch = yield* gitResult(info.directory, ["symbolic-ref", "-q", "--short", "HEAD"]) expect(branch.exitCode).not.toBe(0) - const props = yield* ready + const props = yield* Fiber.join(ready) expect(props.name).toBe(info.name) expect(props.branch).toBeUndefined() @@ -150,63 +177,45 @@ describe("Worktree", () => { it.instance( "create returns worktree info and remove cleans up", () => - Effect.gen(function* () { - const svc = yield* Worktree.Service - const ready = yield* waitReady() - const info = yield* svc.create() - - expect(info.name).toBeDefined() - expect(info.branch ?? "").toStartWith("opencode/") - expect(info.directory).toBeDefined() - - yield* ready - - const ok = yield* svc.remove({ directory: info.directory }) - expect(ok).toBe(true) - }), + withCreatedWorktree(undefined, ({ info }) => + Effect.gen(function* () { + expect(info.name).toBeDefined() + expect(info.branch ?? "").toStartWith("opencode/") + expect(info.directory).toBeDefined() + }), + ), { git: true }, ) it.instance( "create returns after setup and fires Event.Ready after bootstrap", () => - Effect.gen(function* () { - const test = yield* TestInstance - const fs = yield* AppFileSystem.Service - const svc = yield* Worktree.Service - const ready = yield* waitReady() - const info = yield* svc.create() + withCreatedWorktree(undefined, ({ info, ready }) => + Effect.gen(function* () { + const svc = yield* Worktree.Service - expect(info.name).toBeDefined() - expect(info.branch ?? "").toStartWith("opencode/") + expect(info.name).toBeDefined() + expect(info.branch ?? "").toStartWith("opencode/") - const text = yield* git(test.directory, ["worktree", "list", "--porcelain"]) - const next = yield* fs.realPath(info.directory).pipe(Effect.catch(() => Effect.succeed(info.directory))) - expect(normalize(text)).toContain(normalize(next)) + expect(ready.name).toBe(info.name) + expect(ready.branch).toBe(info.branch) - const props = yield* ready - expect(props.name).toBe(info.name) - expect(props.branch).toBe(info.branch) - - yield* svc.remove({ directory: info.directory }) - }), + const list = yield* svc.list() + expect(list).toContainEqual(expect.objectContaining({ name: info.name, branch: info.branch })) + }), + ), { git: true }, ) it.instance( "create with custom name", () => - Effect.gen(function* () { - const svc = yield* Worktree.Service - const ready = yield* waitReady() - const info = yield* svc.create({ name: "test-workspace" }) - - expect(info.name).toBe("test-workspace") - expect(info.branch).toBe("opencode/test-workspace") - - yield* ready - yield* svc.remove({ directory: info.directory }) - }), + withCreatedWorktree({ name: "test-workspace" }, ({ info }) => + Effect.gen(function* () { + expect(info.name).toBe("test-workspace") + expect(info.branch).toBe("opencode/test-workspace") + }), + ), { git: true }, ) }) @@ -219,7 +228,7 @@ describe("Worktree", () => { const test = yield* TestInstance const svc = yield* Worktree.Service const info = yield* svc.makeWorktreeInfo({ name: "from-info-test" }) - const ready = yield* waitReady() + const ready = yield* waitReady().pipe(Effect.forkScoped) yield* svc.createFromInfo(info) const list = yield* git(test.directory, ["worktree", "list", "--porcelain"]) @@ -227,8 +236,8 @@ describe("Worktree", () => { const normalizedDir = info.directory.replace(/\\/g, "/") expect(normalizedList).toContain(normalizedDir) - yield* ready - yield* svc.remove({ directory: info.directory }) + yield* Fiber.join(ready) + yield* removeCreatedWorktree(info.directory) }), { git: true }, ) diff --git a/packages/opencode/test/provider/copilot/convert-to-copilot-messages.test.ts b/packages/opencode/test/provider/copilot/convert-to-copilot-messages.test.ts new file mode 100644 index 000000000000..6f874db6d2e9 --- /dev/null +++ b/packages/opencode/test/provider/copilot/convert-to-copilot-messages.test.ts @@ -0,0 +1,523 @@ +import { convertToOpenAICompatibleChatMessages as convertToCopilotMessages } from "@/provider/sdk/copilot/chat/convert-to-openai-compatible-chat-messages" +import { describe, test, expect } from "bun:test" + +describe("system messages", () => { + test("should convert system message content to string", () => { + const result = convertToCopilotMessages([ + { + role: "system", + content: "You are a helpful assistant with AGENTS.md instructions.", + }, + ]) + + expect(result).toEqual([ + { + role: "system", + content: "You are a helpful assistant with AGENTS.md instructions.", + }, + ]) + }) +}) + +describe("user messages", () => { + test("should convert messages with only a text part to a string content", () => { + const result = convertToCopilotMessages([ + { + role: "user", + content: [{ type: "text", text: "Hello" }], + }, + ]) + + expect(result).toEqual([{ role: "user", content: "Hello" }]) + }) + + test("should convert messages with image parts", () => { + const result = convertToCopilotMessages([ + { + role: "user", + content: [ + { type: "text", text: "Hello" }, + { + type: "file", + data: Buffer.from([0, 1, 2, 3]).toString("base64"), + mediaType: "image/png", + }, + ], + }, + ]) + + expect(result).toEqual([ + { + role: "user", + content: [ + { type: "text", text: "Hello" }, + { + type: "image_url", + image_url: { url: "data:image/png;base64,AAECAw==" }, + }, + ], + }, + ]) + }) + + test("should convert messages with image parts from Uint8Array", () => { + const result = convertToCopilotMessages([ + { + role: "user", + content: [ + { type: "text", text: "Hi" }, + { + type: "file", + data: new Uint8Array([0, 1, 2, 3]), + mediaType: "image/png", + }, + ], + }, + ]) + + expect(result).toEqual([ + { + role: "user", + content: [ + { type: "text", text: "Hi" }, + { + type: "image_url", + image_url: { url: "data:image/png;base64,AAECAw==" }, + }, + ], + }, + ]) + }) + + test("should handle URL-based images", () => { + const result = convertToCopilotMessages([ + { + role: "user", + content: [ + { + type: "file", + data: new URL("https://example.com/image.jpg"), + mediaType: "image/*", + }, + ], + }, + ]) + + expect(result).toEqual([ + { + role: "user", + content: [ + { + type: "image_url", + image_url: { url: "https://example.com/image.jpg" }, + }, + ], + }, + ]) + }) + + test("should handle multiple text parts without flattening", () => { + const result = convertToCopilotMessages([ + { + role: "user", + content: [ + { type: "text", text: "Part 1" }, + { type: "text", text: "Part 2" }, + ], + }, + ]) + + expect(result).toEqual([ + { + role: "user", + content: [ + { type: "text", text: "Part 1" }, + { type: "text", text: "Part 2" }, + ], + }, + ]) + }) +}) + +describe("assistant messages", () => { + test("should convert assistant text messages", () => { + const result = convertToCopilotMessages([ + { + role: "assistant", + content: [{ type: "text", text: "Hello back!" }], + }, + ]) + + expect(result).toEqual([ + { + role: "assistant", + content: "Hello back!", + tool_calls: undefined, + reasoning_text: undefined, + reasoning_opaque: undefined, + }, + ]) + }) + + test("should handle assistant message with null content when only tool calls", () => { + const result = convertToCopilotMessages([ + { + role: "assistant", + content: [ + { + type: "tool-call", + toolCallId: "call1", + toolName: "calculator", + input: { a: 1, b: 2 }, + }, + ], + }, + ]) + + expect(result).toEqual([ + { + role: "assistant", + content: null, + tool_calls: [ + { + id: "call1", + type: "function", + function: { + name: "calculator", + arguments: JSON.stringify({ a: 1, b: 2 }), + }, + }, + ], + reasoning_text: undefined, + reasoning_opaque: undefined, + }, + ]) + }) + + test("should concatenate multiple text parts", () => { + const result = convertToCopilotMessages([ + { + role: "assistant", + content: [ + { type: "text", text: "First part. " }, + { type: "text", text: "Second part." }, + ], + }, + ]) + + expect(result[0].content).toBe("First part. Second part.") + }) +}) + +describe("tool calls", () => { + test("should stringify arguments to tool calls", () => { + const result = convertToCopilotMessages([ + { + role: "assistant", + content: [ + { + type: "tool-call", + input: { foo: "bar123" }, + toolCallId: "quux", + toolName: "thwomp", + }, + ], + }, + { + role: "tool", + content: [ + { + type: "tool-result", + toolCallId: "quux", + toolName: "thwomp", + output: { type: "json", value: { oof: "321rab" } }, + }, + ], + }, + ]) + + expect(result).toEqual([ + { + role: "assistant", + content: null, + tool_calls: [ + { + id: "quux", + type: "function", + function: { + name: "thwomp", + arguments: JSON.stringify({ foo: "bar123" }), + }, + }, + ], + reasoning_text: undefined, + reasoning_opaque: undefined, + }, + { + role: "tool", + tool_call_id: "quux", + content: JSON.stringify({ oof: "321rab" }), + }, + ]) + }) + + test("should handle text output type in tool results", () => { + const result = convertToCopilotMessages([ + { + role: "tool", + content: [ + { + type: "tool-result", + toolCallId: "call-1", + toolName: "getWeather", + output: { type: "text", value: "It is sunny today" }, + }, + ], + }, + ]) + + expect(result).toEqual([ + { + role: "tool", + tool_call_id: "call-1", + content: "It is sunny today", + }, + ]) + }) + + test("should handle multiple tool results as separate messages", () => { + const result = convertToCopilotMessages([ + { + role: "tool", + content: [ + { + type: "tool-result", + toolCallId: "call1", + toolName: "api1", + output: { type: "text", value: "Result 1" }, + }, + { + type: "tool-result", + toolCallId: "call2", + toolName: "api2", + output: { type: "text", value: "Result 2" }, + }, + ], + }, + ]) + + expect(result).toHaveLength(2) + expect(result[0]).toEqual({ + role: "tool", + tool_call_id: "call1", + content: "Result 1", + }) + expect(result[1]).toEqual({ + role: "tool", + tool_call_id: "call2", + content: "Result 2", + }) + }) + + test("should handle text plus multiple tool calls", () => { + const result = convertToCopilotMessages([ + { + role: "assistant", + content: [ + { type: "text", text: "Checking... " }, + { + type: "tool-call", + toolCallId: "call1", + toolName: "searchTool", + input: { query: "Weather" }, + }, + { type: "text", text: "Almost there..." }, + { + type: "tool-call", + toolCallId: "call2", + toolName: "mapsTool", + input: { location: "Paris" }, + }, + ], + }, + ]) + + expect(result).toEqual([ + { + role: "assistant", + content: "Checking... Almost there...", + tool_calls: [ + { + id: "call1", + type: "function", + function: { + name: "searchTool", + arguments: JSON.stringify({ query: "Weather" }), + }, + }, + { + id: "call2", + type: "function", + function: { + name: "mapsTool", + arguments: JSON.stringify({ location: "Paris" }), + }, + }, + ], + reasoning_text: undefined, + reasoning_opaque: undefined, + }, + ]) + }) +}) + +describe("reasoning (copilot-specific)", () => { + test("should omit reasoning_text without reasoning_opaque", () => { + const result = convertToCopilotMessages([ + { + role: "assistant", + content: [ + { type: "reasoning", text: "Let me think about this..." }, + { type: "text", text: "The answer is 42." }, + ], + }, + ]) + + expect(result).toEqual([ + { + role: "assistant", + content: "The answer is 42.", + tool_calls: undefined, + reasoning_text: undefined, + reasoning_opaque: undefined, + }, + ]) + }) + + test("should include reasoning_opaque from providerOptions", () => { + const result = convertToCopilotMessages([ + { + role: "assistant", + content: [ + { + type: "reasoning", + text: "Thinking...", + providerOptions: { + copilot: { reasoningOpaque: "opaque-signature-123" }, + }, + }, + { type: "text", text: "Done!" }, + ], + }, + ]) + + expect(result).toEqual([ + { + role: "assistant", + content: "Done!", + tool_calls: undefined, + reasoning_text: "Thinking...", + reasoning_opaque: "opaque-signature-123", + }, + ]) + }) + + test("should include reasoning_opaque from text part providerOptions", () => { + const result = convertToCopilotMessages([ + { + role: "assistant", + content: [ + { + type: "text", + text: "Done!", + providerOptions: { + copilot: { reasoningOpaque: "opaque-text-456" }, + }, + }, + ], + }, + ]) + + expect(result).toEqual([ + { + role: "assistant", + content: "Done!", + tool_calls: undefined, + reasoning_text: undefined, + reasoning_opaque: "opaque-text-456", + }, + ]) + }) + + test("should handle reasoning-only assistant message", () => { + const result = convertToCopilotMessages([ + { + role: "assistant", + content: [ + { + type: "reasoning", + text: "Just thinking, no response yet", + providerOptions: { + copilot: { reasoningOpaque: "sig-abc" }, + }, + }, + ], + }, + ]) + + expect(result).toEqual([ + { + role: "assistant", + content: null, + tool_calls: undefined, + reasoning_text: "Just thinking, no response yet", + reasoning_opaque: "sig-abc", + }, + ]) + }) +}) + +describe("full conversation", () => { + test("should convert a multi-turn conversation with reasoning", () => { + const result = convertToCopilotMessages([ + { + role: "system", + content: "You are a helpful assistant.", + }, + { + role: "user", + content: [{ type: "text", text: "What is 2+2?" }], + }, + { + role: "assistant", + content: [ + { + type: "reasoning", + text: "Let me calculate 2+2...", + providerOptions: { + copilot: { reasoningOpaque: "sig-abc" }, + }, + }, + { type: "text", text: "2+2 equals 4." }, + ], + }, + { + role: "user", + content: [{ type: "text", text: "What about 3+3?" }], + }, + ]) + + expect(result).toHaveLength(4) + + const systemMsg = result[0] + expect(systemMsg.role).toBe("system") + + // Assistant message should have reasoning fields + const assistantMsg = result[2] as { + reasoning_text?: string + reasoning_opaque?: string + } + expect(assistantMsg.reasoning_text).toBe("Let me calculate 2+2...") + expect(assistantMsg.reasoning_opaque).toBe("sig-abc") + }) +}) diff --git a/packages/opencode/test/provider/copilot/copilot-chat-model.test.ts b/packages/opencode/test/provider/copilot/copilot-chat-model.test.ts new file mode 100644 index 000000000000..389a72bb377b --- /dev/null +++ b/packages/opencode/test/provider/copilot/copilot-chat-model.test.ts @@ -0,0 +1,592 @@ +import { OpenAICompatibleChatLanguageModel } from "@/provider/sdk/copilot/chat/openai-compatible-chat-language-model" +import { describe, test, expect, mock } from "bun:test" +import type { LanguageModelV3Prompt } from "@ai-sdk/provider" + +async function convertReadableStreamToArray(stream: ReadableStream): Promise { + const reader = stream.getReader() + const result: T[] = [] + while (true) { + const { done, value } = await reader.read() + if (done) break + result.push(value) + } + return result +} + +const TEST_PROMPT: LanguageModelV3Prompt = [{ role: "user", content: [{ type: "text", text: "Hello" }] }] + +// Fixtures from copilot_test.exs +const FIXTURES = { + basicText: [ + `data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"gemini-2.0-flash-001","choices":[{"index":0,"delta":{"role":"assistant","content":"Hello"},"finish_reason":null}]}`, + `data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"gemini-2.0-flash-001","choices":[{"index":0,"delta":{"content":" world"},"finish_reason":null}]}`, + `data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"gemini-2.0-flash-001","choices":[{"index":0,"delta":{"content":"!"},"finish_reason":"stop"}]}`, + `data: [DONE]`, + ], + + reasoningWithToolCalls: [ + `data: {"choices":[{"index":0,"delta":{"content":null,"role":"assistant","reasoning_text":"**Understanding Dayzee's Purpose**\\n\\nI'm starting to get a better handle on \`dayzee\`.\\n\\n"}}],"created":1764940861,"id":"OdwyabKMI9yel7oPlbzgwQM","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-3-pro-preview"}`, + `data: {"choices":[{"index":0,"delta":{"content":null,"role":"assistant","reasoning_text":"**Assessing Dayzee's Functionality**\\n\\nI've reviewed the files.\\n\\n"}}],"created":1764940862,"id":"OdwyabKMI9yel7oPlbzgwQM","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-3-pro-preview"}`, + `data: {"choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"function":{"arguments":"{\\"filePath\\":\\"/README.md\\"}","name":"read_file"},"id":"call_abc123","index":0,"type":"function"}],"reasoning_opaque":"4CUQ6696CwSXOdQ5rtvDimqA91tBzfmga4ieRbmZ5P67T2NLW3"}}],"created":1764940862,"id":"OdwyabKMI9yel7oPlbzgwQM","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-3-pro-preview"}`, + `data: {"choices":[{"finish_reason":"tool_calls","index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"function":{"arguments":"{\\"filePath\\":\\"/mix.exs\\"}","name":"read_file"},"id":"call_def456","index":1,"type":"function"}]}}],"created":1764940862,"id":"OdwyabKMI9yel7oPlbzgwQM","usage":{"completion_tokens":53,"prompt_tokens":19581,"prompt_tokens_details":{"cached_tokens":17068},"total_tokens":19768,"reasoning_tokens":134},"model":"gemini-3-pro-preview"}`, + `data: [DONE]`, + ], + + reasoningWithOpaqueAtEnd: [ + `data: {"choices":[{"index":0,"delta":{"content":null,"role":"assistant","reasoning_text":"**Analyzing the Inquiry's Nature**\\n\\nI'm currently parsing the user's question.\\n\\n"}}],"created":1765201729,"id":"Ptc2afqsCIHqlOoP653UiAI","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-3-pro-preview"}`, + `data: {"choices":[{"index":0,"delta":{"content":null,"role":"assistant","reasoning_text":"**Reconciling User's Input**\\n\\nI'm grappling with the context.\\n\\n"}}],"created":1765201730,"id":"Ptc2afqsCIHqlOoP653UiAI","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-3-pro-preview"}`, + `data: {"choices":[{"index":0,"delta":{"content":"I am Tidewave, a highly skilled AI coding agent.\\n\\n","role":"assistant"}}],"created":1765201730,"id":"Ptc2afqsCIHqlOoP653UiAI","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-3-pro-preview"}`, + `data: {"choices":[{"finish_reason":"stop","index":0,"delta":{"content":"How can I help you?","role":"assistant","reasoning_opaque":"/PMlTqxqSJZnUBDHgnnJKLVI4eZQ"}}],"created":1765201730,"id":"Ptc2afqsCIHqlOoP653UiAI","usage":{"completion_tokens":59,"prompt_tokens":5778,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":5932,"reasoning_tokens":95},"model":"gemini-3-pro-preview"}`, + `data: [DONE]`, + ], + + // Case where reasoning_opaque and content come in the SAME chunk + reasoningWithOpaqueAndContentSameChunk: [ + `data: {"choices":[{"index":0,"delta":{"content":null,"role":"assistant","reasoning_text":"**Understanding the Query's Nature**\\n\\nI'm currently grappling with the user's philosophical query.\\n\\n"}}],"created":1766062103,"id":"FPhDacixL9zrlOoPqLSuyQ4","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-2.5-pro"}`, + `data: {"choices":[{"index":0,"delta":{"content":null,"role":"assistant","reasoning_text":"**Framing the Response's Core**\\n\\nNow, I'm structuring my response.\\n\\n"}}],"created":1766062103,"id":"FPhDacixL9zrlOoPqLSuyQ4","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-2.5-pro"}`, + `data: {"choices":[{"index":0,"delta":{"content":"Of course. I'm thinking right now.","role":"assistant","reasoning_opaque":"ExXaGwW7jBo39OXRe9EPoFGN1rOtLJBx"}}],"created":1766062103,"id":"FPhDacixL9zrlOoPqLSuyQ4","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-2.5-pro"}`, + `data: {"choices":[{"finish_reason":"stop","index":0,"delta":{"content":" What's on your mind?","role":"assistant"}}],"created":1766062103,"id":"FPhDacixL9zrlOoPqLSuyQ4","usage":{"completion_tokens":78,"prompt_tokens":3767,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":3915,"reasoning_tokens":70},"model":"gemini-2.5-pro"}`, + `data: [DONE]`, + ], + + // Case where reasoning_opaque and content come in same chunk, followed by tool calls + reasoningWithOpaqueContentAndToolCalls: [ + `data: {"choices":[{"index":0,"delta":{"content":null,"role":"assistant","reasoning_text":"**Analyzing the Structure**\\n\\nI'm currently trying to get a handle on the project's layout. My initial focus is on the file structure itself, specifically the directory organization. I'm hoping this will illuminate how different components interact. I'll need to identify the key modules and their dependencies.\\n\\n\\n"}}],"created":1766066995,"id":"MQtEafqbFYTZsbwPwuCVoAg","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-2.5-pro"}`, + `data: {"choices":[{"index":0,"delta":{"content":"Okay, I need to check out the project's file structure.","role":"assistant","reasoning_opaque":"WHOd3dYFnxEBOsKUXjbX6c2rJa0fS214FHbsj+A3Q+i63SFo7H/92RsownAzyo0h2qEy3cOcrvAatsMx51eCKiMSqt4dYWZhd5YVSgF0CehkpDbWBP/SoRqLU1dhCmUJV/6b5uYFBOzKLBGNadyhI7T1gWFlXntwc6SNjH6DujnFPeVr+L8DdOoUJGJrw2aOfm9NtkXA6wZh9t7dt+831yIIImjD9MHczuXoXj8K7tyLpIJ9KlVXMhnO4IKSYNdKRtoHlGTmudAp5MgH/vLWb6oSsL+ZJl/OdF3WBOeanGhYNoByCRDSvR7anAR/9m5zf9yUax+u/nFg+gzmhFacnzZGtSmcvJ4/4HWKNtUkRASTKeN94DXB8j1ptB/i6ldaMAz2ZyU+sbjPWI8aI4fKJ2MuO01u3uE87xVwpWiM+0rahIzJsllI5edwOaOFtF4tnlCTQafbxHwCZR62uON2E+IjGzW80MzyfYrbLBJKS5zTeHCgPYQSNaKzPfpzkQvdwo3JUnJYcEHgGeKzkq5sbvS5qitCYI7Xue0V98S6/KnUSPnDQBjNnas2i6BqJV2vuCEU/Y3ucrlKVbuRIFCZXCyLzrsGeRLRKlrf5S/HDAQ04IOPQVQhBPvhX0nDjhZB"}}],"created":1766066995,"id":"MQtEafqbFYTZsbwPwuCVoAg","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-2.5-pro"}`, + `data: {"choices":[{"finish_reason":"tool_calls","index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"function":{"arguments":"{}","name":"list_project_files"},"id":"call_MHxqRDd5WVo3NU8wUXRaMmc0MFE","index":0,"type":"function"}]}}],"created":1766066995,"id":"MQtEafqbFYTZsbwPwuCVoAg","usage":{"completion_tokens":19,"prompt_tokens":3767,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":3797,"reasoning_tokens":11},"model":"gemini-2.5-pro"}`, + `data: [DONE]`, + ], + + // Case where reasoning goes directly to tool_calls with NO content + // reasoning_opaque and tool_calls come in the same chunk + reasoningDirectlyToToolCalls: [ + `data: {"choices":[{"index":0,"delta":{"content":null,"role":"assistant","reasoning_text":"**Executing and Analyzing HTML**\\n\\nI've successfully captured the HTML snapshot using the \`browser_eval\` tool, giving me a solid understanding of the page structure. Now, I'm shifting focus to Elixir code execution with \`project_eval\` to assess my ability to work within the project's environment.\\n\\n\\n"}}],"created":1766068643,"id":"oBFEaafzD9DVlOoPkY3l4Qs","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-3-pro-preview"}`, + `data: {"choices":[{"index":0,"delta":{"content":null,"role":"assistant","reasoning_text":"**Testing Project Contexts**\\n\\nI've got the HTML body snapshot from \`browser_eval\`, which is a helpful reference. Next, I'm testing my ability to run Elixir code in the project with \`project_eval\`. I'm starting with a simple sum: \`1 + 1\`. This will confirm I'm set up to interact with the project's codebase.\\n\\n\\n"}}],"created":1766068644,"id":"oBFEaafzD9DVlOoPkY3l4Qs","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-3-pro-preview"}`, + `data: {"choices":[{"finish_reason":"tool_calls","index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"function":{"arguments":"{\\"code\\":\\"1 + 1\\"}","name":"project_eval"},"id":"call_MHw3RDhmT1J5Z3B6WlhpVjlveTc","index":0,"type":"function"}],"reasoning_opaque":"ytGNWFf2doK38peANDvm7whkLPKrd+Fv6/k34zEPBF6Qwitj4bTZT0FBXleydLb6"}}],"created":1766068644,"id":"oBFEaafzD9DVlOoPkY3l4Qs","usage":{"completion_tokens":12,"prompt_tokens":8677,"prompt_tokens_details":{"cached_tokens":3692},"total_tokens":8768,"reasoning_tokens":79},"model":"gemini-3-pro-preview"}`, + `data: [DONE]`, + ], + + reasoningOpaqueWithToolCallsNoReasoningText: [ + `data: {"choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"function":{"arguments":"{}","name":"read_file"},"id":"call_reasoning_only","index":0,"type":"function"}],"reasoning_opaque":"opaque-xyz"}}],"created":1769917420,"id":"opaque-only","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-3-flash-preview"}`, + `data: {"choices":[{"finish_reason":"tool_calls","index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"function":{"arguments":"{}","name":"read_file"},"id":"call_reasoning_only_2","index":1,"type":"function"}]}}],"created":1769917420,"id":"opaque-only","usage":{"completion_tokens":12,"prompt_tokens":123,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":135,"reasoning_tokens":0},"model":"gemini-3-flash-preview"}`, + `data: [DONE]`, + ], +} + +function createMockFetch(chunks: string[]) { + return mock(async () => { + const body = new ReadableStream({ + start(controller) { + for (const chunk of chunks) { + controller.enqueue(new TextEncoder().encode(chunk + "\n\n")) + } + controller.close() + }, + }) + + return new Response(body, { + status: 200, + headers: { "Content-Type": "text/event-stream" }, + }) + }) +} + +function createModel(fetchFn: ReturnType) { + return new OpenAICompatibleChatLanguageModel("test-model", { + provider: "copilot.chat", + url: () => "https://api.test.com/chat/completions", + headers: () => ({ Authorization: "Bearer test-token" }), + fetch: fetchFn as any, + }) +} + +describe("doStream", () => { + test("should stream text deltas", async () => { + const mockFetch = createMockFetch(FIXTURES.basicText) + const model = createModel(mockFetch) + + const { stream } = await model.doStream({ + prompt: TEST_PROMPT, + includeRawChunks: false, + }) + + const parts = await convertReadableStreamToArray(stream) + + // Filter to just the key events + const textParts = parts.filter( + (p) => p.type === "text-start" || p.type === "text-delta" || p.type === "text-end" || p.type === "finish", + ) + + expect(textParts).toMatchObject([ + { type: "text-start", id: "txt-0" }, + { type: "text-delta", id: "txt-0", delta: "Hello" }, + { type: "text-delta", id: "txt-0", delta: " world" }, + { type: "text-delta", id: "txt-0", delta: "!" }, + { type: "text-end", id: "txt-0" }, + { type: "finish", finishReason: { unified: "stop" } }, + ]) + }) + + test("should stream reasoning with tool calls and capture reasoning_opaque", async () => { + const mockFetch = createMockFetch(FIXTURES.reasoningWithToolCalls) + const model = createModel(mockFetch) + + const { stream } = await model.doStream({ + prompt: TEST_PROMPT, + includeRawChunks: false, + }) + + const parts = await convertReadableStreamToArray(stream) + + // Check reasoning parts + const reasoningParts = parts.filter( + (p) => p.type === "reasoning-start" || p.type === "reasoning-delta" || p.type === "reasoning-end", + ) + + expect(reasoningParts[0]).toEqual({ + type: "reasoning-start", + id: "reasoning-0", + }) + + expect(reasoningParts[1]).toMatchObject({ + type: "reasoning-delta", + id: "reasoning-0", + }) + expect((reasoningParts[1] as { delta: string }).delta).toContain("**Understanding Dayzee's Purpose**") + + expect(reasoningParts[2]).toMatchObject({ + type: "reasoning-delta", + id: "reasoning-0", + }) + expect((reasoningParts[2] as { delta: string }).delta).toContain("**Assessing Dayzee's Functionality**") + + // reasoning_opaque should be in reasoning-end providerMetadata + const reasoningEnd = reasoningParts.find((p) => p.type === "reasoning-end") + expect(reasoningEnd).toMatchObject({ + type: "reasoning-end", + id: "reasoning-0", + providerMetadata: { + copilot: { + reasoningOpaque: "4CUQ6696CwSXOdQ5rtvDimqA91tBzfmga4ieRbmZ5P67T2NLW3", + }, + }, + }) + + // Check tool calls + const toolParts = parts.filter( + (p) => p.type === "tool-input-start" || p.type === "tool-call" || p.type === "tool-input-end", + ) + + expect(toolParts).toContainEqual({ + type: "tool-input-start", + id: "call_abc123", + toolName: "read_file", + }) + + expect(toolParts).toContainEqual( + expect.objectContaining({ + type: "tool-call", + toolCallId: "call_abc123", + toolName: "read_file", + }), + ) + + expect(toolParts).toContainEqual({ + type: "tool-input-start", + id: "call_def456", + toolName: "read_file", + }) + + // Check finish + const finish = parts.find((p) => p.type === "finish") + expect(finish).toMatchObject({ + type: "finish", + finishReason: { unified: "tool-calls" }, + usage: { + inputTokens: { total: 19581 }, + outputTokens: { total: 53 }, + }, + }) + }) + + test("should handle reasoning_opaque that comes at end with text in between", async () => { + const mockFetch = createMockFetch(FIXTURES.reasoningWithOpaqueAtEnd) + const model = createModel(mockFetch) + + const { stream } = await model.doStream({ + prompt: TEST_PROMPT, + includeRawChunks: false, + }) + + const parts = await convertReadableStreamToArray(stream) + + // Check that reasoning comes first + const reasoningStart = parts.findIndex((p) => p.type === "reasoning-start") + const textStart = parts.findIndex((p) => p.type === "text-start") + expect(reasoningStart).toBeLessThan(textStart) + + // Check reasoning deltas + const reasoningDeltas = parts.filter((p) => p.type === "reasoning-delta") + expect(reasoningDeltas).toHaveLength(2) + expect((reasoningDeltas[0] as { delta: string }).delta).toContain("**Analyzing the Inquiry's Nature**") + expect((reasoningDeltas[1] as { delta: string }).delta).toContain("**Reconciling User's Input**") + + // Check text deltas + const textDeltas = parts.filter((p) => p.type === "text-delta") + expect(textDeltas).toHaveLength(2) + expect((textDeltas[0] as { delta: string }).delta).toContain("I am Tidewave") + expect((textDeltas[1] as { delta: string }).delta).toContain("How can I help you?") + + // reasoning-end should be emitted before text-start + const reasoningEndIndex = parts.findIndex((p) => p.type === "reasoning-end") + const textStartIndex = parts.findIndex((p) => p.type === "text-start") + expect(reasoningEndIndex).toBeGreaterThan(-1) + expect(reasoningEndIndex).toBeLessThan(textStartIndex) + + // In this fixture, reasoning_opaque comes AFTER content has started (in chunk 4) + // So it arrives too late to be attached to reasoning-end. But it should still + // be captured and included in the finish event's providerMetadata. + const reasoningEnd = parts.find((p) => p.type === "reasoning-end") + expect(reasoningEnd).toMatchObject({ + type: "reasoning-end", + id: "reasoning-0", + }) + + // reasoning_opaque should be in the finish event's providerMetadata + const finish = parts.find((p) => p.type === "finish") + expect(finish).toMatchObject({ + type: "finish", + finishReason: { unified: "stop" }, + usage: { + inputTokens: { total: 5778 }, + outputTokens: { total: 59 }, + }, + providerMetadata: { + copilot: { + reasoningOpaque: "/PMlTqxqSJZnUBDHgnnJKLVI4eZQ", + }, + }, + }) + }) + + test("should handle reasoning_opaque and content in the same chunk", async () => { + const mockFetch = createMockFetch(FIXTURES.reasoningWithOpaqueAndContentSameChunk) + const model = createModel(mockFetch) + + const { stream } = await model.doStream({ + prompt: TEST_PROMPT, + includeRawChunks: false, + }) + + const parts = await convertReadableStreamToArray(stream) + + // The critical test: reasoning-end should come BEFORE text-start + const reasoningEndIndex = parts.findIndex((p) => p.type === "reasoning-end") + const textStartIndex = parts.findIndex((p) => p.type === "text-start") + expect(reasoningEndIndex).toBeGreaterThan(-1) + expect(textStartIndex).toBeGreaterThan(-1) + expect(reasoningEndIndex).toBeLessThan(textStartIndex) + + // Check reasoning deltas + const reasoningDeltas = parts.filter((p) => p.type === "reasoning-delta") + expect(reasoningDeltas).toHaveLength(2) + expect((reasoningDeltas[0] as { delta: string }).delta).toContain("**Understanding the Query's Nature**") + expect((reasoningDeltas[1] as { delta: string }).delta).toContain("**Framing the Response's Core**") + + // reasoning_opaque should be in reasoning-end even though it came with content + const reasoningEnd = parts.find((p) => p.type === "reasoning-end") + expect(reasoningEnd).toMatchObject({ + type: "reasoning-end", + id: "reasoning-0", + providerMetadata: { + copilot: { + reasoningOpaque: "ExXaGwW7jBo39OXRe9EPoFGN1rOtLJBx", + }, + }, + }) + + // Check text deltas + const textDeltas = parts.filter((p) => p.type === "text-delta") + expect(textDeltas).toHaveLength(2) + expect((textDeltas[0] as { delta: string }).delta).toContain("Of course. I'm thinking right now.") + expect((textDeltas[1] as { delta: string }).delta).toContain("What's on your mind?") + + // Check finish + const finish = parts.find((p) => p.type === "finish") + expect(finish).toMatchObject({ + type: "finish", + finishReason: { unified: "stop" }, + }) + }) + + test("should handle reasoning_opaque and content followed by tool calls", async () => { + const mockFetch = createMockFetch(FIXTURES.reasoningWithOpaqueContentAndToolCalls) + const model = createModel(mockFetch) + + const { stream } = await model.doStream({ + prompt: TEST_PROMPT, + includeRawChunks: false, + }) + + const parts = await convertReadableStreamToArray(stream) + + // Check that reasoning comes first, then text, then tool calls + const reasoningEndIndex = parts.findIndex((p) => p.type === "reasoning-end") + const textStartIndex = parts.findIndex((p) => p.type === "text-start") + const toolStartIndex = parts.findIndex((p) => p.type === "tool-input-start") + + expect(reasoningEndIndex).toBeGreaterThan(-1) + expect(textStartIndex).toBeGreaterThan(-1) + expect(toolStartIndex).toBeGreaterThan(-1) + expect(reasoningEndIndex).toBeLessThan(textStartIndex) + expect(textStartIndex).toBeLessThan(toolStartIndex) + + // Check reasoning content + const reasoningDeltas = parts.filter((p) => p.type === "reasoning-delta") + expect(reasoningDeltas).toHaveLength(1) + expect((reasoningDeltas[0] as { delta: string }).delta).toContain("**Analyzing the Structure**") + + // reasoning_opaque should be in reasoning-end (comes with content in same chunk) + const reasoningEnd = parts.find((p) => p.type === "reasoning-end") + expect(reasoningEnd).toMatchObject({ + type: "reasoning-end", + id: "reasoning-0", + providerMetadata: { + copilot: { + reasoningOpaque: expect.stringContaining("WHOd3dYFnxEBOsKUXjbX6c2rJa0fS214"), + }, + }, + }) + + // Check text content + const textDeltas = parts.filter((p) => p.type === "text-delta") + expect(textDeltas).toHaveLength(1) + expect((textDeltas[0] as { delta: string }).delta).toContain( + "Okay, I need to check out the project's file structure.", + ) + + // Check tool call + const toolParts = parts.filter( + (p) => p.type === "tool-input-start" || p.type === "tool-call" || p.type === "tool-input-end", + ) + + expect(toolParts).toContainEqual({ + type: "tool-input-start", + id: "call_MHxqRDd5WVo3NU8wUXRaMmc0MFE", + toolName: "list_project_files", + }) + + expect(toolParts).toContainEqual( + expect.objectContaining({ + type: "tool-call", + toolCallId: "call_MHxqRDd5WVo3NU8wUXRaMmc0MFE", + toolName: "list_project_files", + }), + ) + + // Check finish + const finish = parts.find((p) => p.type === "finish") + expect(finish).toMatchObject({ + type: "finish", + finishReason: { unified: "tool-calls" }, + usage: { + inputTokens: { total: 3767 }, + outputTokens: { total: 19 }, + }, + }) + }) + + test("should emit reasoning-end before tool-input-start when reasoning goes directly to tool calls", async () => { + const mockFetch = createMockFetch(FIXTURES.reasoningDirectlyToToolCalls) + const model = createModel(mockFetch) + + const { stream } = await model.doStream({ + prompt: TEST_PROMPT, + includeRawChunks: false, + }) + + const parts = await convertReadableStreamToArray(stream) + + // Critical check: reasoning-end MUST come before tool-input-start + const reasoningEndIndex = parts.findIndex((p) => p.type === "reasoning-end") + const toolStartIndex = parts.findIndex((p) => p.type === "tool-input-start") + + expect(reasoningEndIndex).toBeGreaterThan(-1) + expect(toolStartIndex).toBeGreaterThan(-1) + expect(reasoningEndIndex).toBeLessThan(toolStartIndex) + + // Check reasoning parts + const reasoningDeltas = parts.filter((p) => p.type === "reasoning-delta") + expect(reasoningDeltas).toHaveLength(2) + expect((reasoningDeltas[0] as { delta: string }).delta).toContain("**Executing and Analyzing HTML**") + expect((reasoningDeltas[1] as { delta: string }).delta).toContain("**Testing Project Contexts**") + + // reasoning_opaque should be in reasoning-end providerMetadata + const reasoningEnd = parts.find((p) => p.type === "reasoning-end") + expect(reasoningEnd).toMatchObject({ + type: "reasoning-end", + id: "reasoning-0", + providerMetadata: { + copilot: { + reasoningOpaque: "ytGNWFf2doK38peANDvm7whkLPKrd+Fv6/k34zEPBF6Qwitj4bTZT0FBXleydLb6", + }, + }, + }) + + // No text parts should exist + const textParts = parts.filter((p) => p.type === "text-start" || p.type === "text-delta" || p.type === "text-end") + expect(textParts).toHaveLength(0) + + // Check tool call + const toolCall = parts.find((p) => p.type === "tool-call") + expect(toolCall).toMatchObject({ + type: "tool-call", + toolCallId: "call_MHw3RDhmT1J5Z3B6WlhpVjlveTc", + toolName: "project_eval", + }) + + // Check finish + const finish = parts.find((p) => p.type === "finish") + expect(finish).toMatchObject({ + type: "finish", + finishReason: { unified: "tool-calls" }, + }) + }) + + test("should attach reasoning_opaque to tool calls without reasoning_text", async () => { + const mockFetch = createMockFetch(FIXTURES.reasoningOpaqueWithToolCallsNoReasoningText) + const model = createModel(mockFetch) + + const { stream } = await model.doStream({ + prompt: TEST_PROMPT, + includeRawChunks: false, + }) + + const parts = await convertReadableStreamToArray(stream) + const reasoningParts = parts.filter( + (p) => p.type === "reasoning-start" || p.type === "reasoning-delta" || p.type === "reasoning-end", + ) + + expect(reasoningParts).toHaveLength(0) + + const toolCall = parts.find((p) => p.type === "tool-call" && p.toolCallId === "call_reasoning_only") + expect(toolCall).toMatchObject({ + type: "tool-call", + toolCallId: "call_reasoning_only", + toolName: "read_file", + providerMetadata: { + copilot: { + reasoningOpaque: "opaque-xyz", + }, + }, + }) + }) + + test("should include response metadata from first chunk", async () => { + const mockFetch = createMockFetch(FIXTURES.basicText) + const model = createModel(mockFetch) + + const { stream } = await model.doStream({ + prompt: TEST_PROMPT, + includeRawChunks: false, + }) + + const parts = await convertReadableStreamToArray(stream) + + const metadata = parts.find((p) => p.type === "response-metadata") + expect(metadata).toMatchObject({ + type: "response-metadata", + id: "chatcmpl-123", + modelId: "gemini-2.0-flash-001", + }) + }) + + test("should emit stream-start with warnings", async () => { + const mockFetch = createMockFetch(FIXTURES.basicText) + const model = createModel(mockFetch) + + const { stream } = await model.doStream({ + prompt: TEST_PROMPT, + includeRawChunks: false, + }) + + const parts = await convertReadableStreamToArray(stream) + + const streamStart = parts.find((p) => p.type === "stream-start") + expect(streamStart).toEqual({ + type: "stream-start", + warnings: [], + }) + }) + + test("should include raw chunks when requested", async () => { + const mockFetch = createMockFetch(FIXTURES.basicText) + const model = createModel(mockFetch) + + const { stream } = await model.doStream({ + prompt: TEST_PROMPT, + includeRawChunks: true, + }) + + const parts = await convertReadableStreamToArray(stream) + + const rawChunks = parts.filter((p) => p.type === "raw") + expect(rawChunks.length).toBeGreaterThan(0) + }) +}) + +describe("request body", () => { + test("should send tools in OpenAI format", async () => { + let capturedBody: unknown + const mockFetch = mock(async (_url: string, init?: RequestInit) => { + capturedBody = JSON.parse(init?.body as string) + return new Response( + new ReadableStream({ + start(controller) { + controller.enqueue(new TextEncoder().encode(`data: [DONE]\n\n`)) + controller.close() + }, + }), + { status: 200, headers: { "Content-Type": "text/event-stream" } }, + ) + }) + + const model = createModel(mockFetch) + + await model.doStream({ + prompt: TEST_PROMPT, + tools: [ + { + type: "function", + name: "get_weather", + description: "Get the weather for a location", + inputSchema: { + type: "object", + properties: { + location: { type: "string" }, + }, + required: ["location"], + }, + }, + ], + includeRawChunks: false, + }) + + expect((capturedBody as { tools: unknown[] }).tools).toEqual([ + { + type: "function", + function: { + name: "get_weather", + description: "Get the weather for a location", + parameters: { + type: "object", + properties: { + location: { type: "string" }, + }, + required: ["location"], + }, + }, + }, + ]) + }) +}) diff --git a/packages/opencode/test/provider/digitalocean.test.ts b/packages/opencode/test/provider/digitalocean.test.ts index 6fc49a6eff98..665c792deb2b 100644 --- a/packages/opencode/test/provider/digitalocean.test.ts +++ b/packages/opencode/test/provider/digitalocean.test.ts @@ -1,132 +1,122 @@ -import { test, expect, afterEach } from "bun:test" -import path from "path" - -import { tmpdir } from "../fixture/fixture" -import { WithInstance } from "../../src/project/with-instance" +import { expect } from "bun:test" import { Provider } from "../../src/provider/provider" import { ProviderID } from "../../src/provider/schema" -import { Env } from "../../src/env" import { Effect } from "effect" -import { AppRuntime } from "../../src/effect/app-runtime" -import { makeRuntime } from "../../src/effect/run-service" +import { testEffect } from "../lib/effect" -const envRuntime = makeRuntime(Env.Service, Env.defaultLayer) -const set = (k: string, v: string) => envRuntime.runSync((svc) => svc.set(k, v)) +const DIGITALOCEAN = ProviderID.make("digitalocean") +const it = testEffect(Provider.defaultLayer) -async function list() { - return AppRuntime.runPromise( - Effect.gen(function* () { - const provider = yield* Provider.Service - return yield* provider.list() +const withEnv = (values: Record, effect: Effect.Effect) => + Effect.acquireUseRelease( + Effect.sync(() => { + const previous = Object.fromEntries(Object.keys(values).map((key) => [key, process.env[key]] as const)) + Object.assign(process.env, values) + return previous }), + () => effect, + (previous) => + Effect.sync(() => { + for (const [key, value] of Object.entries(previous)) { + if (value === undefined) delete process.env[key] + else process.env[key] = value + } + }), ) -} - -const DIGITALOCEAN = ProviderID.make("digitalocean") -const originalAuthContent = process.env.OPENCODE_AUTH_CONTENT -afterEach(() => { - if (originalAuthContent === undefined) delete process.env.OPENCODE_AUTH_CONTENT - else process.env.OPENCODE_AUTH_CONTENT = originalAuthContent -}) - -function injectAuth(metadata: Record | undefined) { - process.env.OPENCODE_AUTH_CONTENT = JSON.stringify({ - digitalocean: { - type: "api", - key: "sk_do_test", - ...(metadata ? { metadata } : {}), +const withAuth = (metadata: Record | undefined, effect: Effect.Effect) => + withEnv( + { + OPENCODE_AUTH_CONTENT: JSON.stringify({ + digitalocean: { + type: "api", + key: "sk_do_test", + ...(metadata ? { metadata } : {}), + }, + }), }, - }) -} + effect, + ) -test("digitalocean provider autoloads from DIGITALOCEAN_ACCESS_TOKEN", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write(path.join(dir, "opencode.json"), JSON.stringify({ $schema: "https://opencode.ai/config.json" })) - }, - }) - await WithInstance.provide({ - directory: tmp.path, - fn: async () => { - set("DIGITALOCEAN_ACCESS_TOKEN", "test-token") - const providers = await list() - expect(providers[DIGITALOCEAN]).toBeDefined() - expect(providers[DIGITALOCEAN].source).toBe("env") - const baseModel = Object.values(providers[DIGITALOCEAN].models)[0] - expect(baseModel.api.url).toBe("https://inference.do-ai.run/v1") - expect(baseModel.api.npm).toBe("@ai-sdk/openai-compatible") - const routerEntries = Object.keys(providers[DIGITALOCEAN].models).filter((id) => id.startsWith("router:")) - expect(routerEntries.length).toBe(0) - }, - }) -}) +it.instance( + "digitalocean provider autoloads from DIGITALOCEAN_ACCESS_TOKEN", + () => + withEnv( + { DIGITALOCEAN_ACCESS_TOKEN: "test-token" }, + Effect.gen(function* () { + const provider = yield* Provider.Service + const providers = yield* provider.list() + expect(providers[DIGITALOCEAN]).toBeDefined() + expect(providers[DIGITALOCEAN].source).toBe("env") + const baseModel = Object.values(providers[DIGITALOCEAN].models)[0] + expect(baseModel.api.url).toBe("https://inference.do-ai.run/v1") + expect(baseModel.api.npm).toBe("@ai-sdk/openai-compatible") + const routerEntries = Object.keys(providers[DIGITALOCEAN].models).filter((id) => id.startsWith("router:")) + expect(routerEntries.length).toBe(0) + }), + ), + { config: {} }, +) -test("digitalocean provider.models surfaces cached routers from auth metadata", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write(path.join(dir, "opencode.json"), JSON.stringify({ $schema: "https://opencode.ai/config.json" })) - }, - }) - injectAuth({ - routers: JSON.stringify([ - { name: "my-router", uuid: "11f1499a-aaaa-bbbb-cccc-4e013e2ddde4" }, - { name: "other-router", uuid: "22f1499a-aaaa-bbbb-cccc-4e013e2ddde4" }, - ]), - routers_fetched_at: String(Date.now()), - oauth_access: "doo_v1_test", - oauth_expires: String(Date.now() + 60 * 60 * 1000), - }) - await WithInstance.provide({ - directory: tmp.path, - fn: async () => { - const providers = await list() - const models = providers[DIGITALOCEAN].models - expect(models["router:my-router"]).toBeDefined() - expect(models["router:my-router"].api.id).toBe("router:my-router") - expect(models["router:my-router"].api.url).toBe("https://inference.do-ai.run/v1") - expect(models["router:my-router"].api.npm).toBe("@ai-sdk/openai-compatible") - expect(models["router:other-router"]).toBeDefined() - }, - }) -}) +it.instance( + "digitalocean provider.models surfaces cached routers from auth metadata", + () => + withAuth( + { + routers: JSON.stringify([ + { name: "my-router", uuid: "11f1499a-aaaa-bbbb-cccc-4e013e2ddde4" }, + { name: "other-router", uuid: "22f1499a-aaaa-bbbb-cccc-4e013e2ddde4" }, + ]), + routers_fetched_at: String(Date.now()), + oauth_access: "doo_v1_test", + oauth_expires: String(Date.now() + 60 * 60 * 1000), + }, + Effect.gen(function* () { + const provider = yield* Provider.Service + const providers = yield* provider.list() + const models = providers[DIGITALOCEAN].models + expect(models["router:my-router"]).toBeDefined() + expect(models["router:my-router"].api.id).toBe("router:my-router") + expect(models["router:my-router"].api.url).toBe("https://inference.do-ai.run/v1") + expect(models["router:my-router"].api.npm).toBe("@ai-sdk/openai-compatible") + expect(models["router:other-router"]).toBeDefined() + }), + ), + { config: {} }, +) -test("digitalocean provider.models skips refresh when oauth bearer is expired", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write(path.join(dir, "opencode.json"), JSON.stringify({ $schema: "https://opencode.ai/config.json" })) - }, - }) - injectAuth({ - routers: JSON.stringify([{ name: "stale-router", uuid: "stale" }]), - routers_fetched_at: "0", - oauth_access: "doo_v1_expired", - oauth_expires: "1", - }) - await WithInstance.provide({ - directory: tmp.path, - fn: async () => { - const providers = await list() - const models = providers[DIGITALOCEAN].models - expect(models["router:stale-router"]).toBeDefined() - }, - }) -}) +it.instance( + "digitalocean provider.models skips refresh when oauth bearer is expired", + () => + withAuth( + { + routers: JSON.stringify([{ name: "stale-router", uuid: "stale" }]), + routers_fetched_at: "0", + oauth_access: "doo_v1_expired", + oauth_expires: "1", + }, + Effect.gen(function* () { + const provider = yield* Provider.Service + const providers = yield* provider.list() + const models = providers[DIGITALOCEAN].models + expect(models["router:stale-router"]).toBeDefined() + }), + ), + { config: {} }, +) -test("digitalocean provider.models passes through base models when no auth metadata", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write(path.join(dir, "opencode.json"), JSON.stringify({ $schema: "https://opencode.ai/config.json" })) - }, - }) - await WithInstance.provide({ - directory: tmp.path, - fn: async () => { - set("DIGITALOCEAN_ACCESS_TOKEN", "test-token") - const providers = await list() - const models = providers[DIGITALOCEAN].models - expect(Object.keys(models).length).toBeGreaterThan(0) - expect(Object.keys(models).filter((id) => id.startsWith("router:")).length).toBe(0) - }, - }) -}) +it.instance( + "digitalocean provider.models passes through base models when no auth metadata", + () => + withEnv( + { DIGITALOCEAN_ACCESS_TOKEN: "test-token" }, + Effect.gen(function* () { + const provider = yield* Provider.Service + const providers = yield* provider.list() + const models = providers[DIGITALOCEAN].models + expect(Object.keys(models).length).toBeGreaterThan(0) + expect(Object.keys(models).filter((id) => id.startsWith("router:")).length).toBe(0) + }), + ), + { config: {} }, +) diff --git a/packages/opencode/test/provider/provider.test.ts b/packages/opencode/test/provider/provider.test.ts index d3225c997dc3..2270418beb16 100644 --- a/packages/opencode/test/provider/provider.test.ts +++ b/packages/opencode/test/provider/provider.test.ts @@ -19,7 +19,6 @@ import { testEffect } from "../lib/effect" const env = makeRuntime(Env.Service, Env.defaultLayer) const set = (k: string, v: string) => env.runSync((svc) => svc.set(k, v)) -const remove = (k: string) => env.runSync((svc) => svc.remove(k)) async function run(fn: (provider: Provider.Interface) => Effect.Effect) { return AppRuntime.runPromise( @@ -229,43 +228,6 @@ test("model blacklist excludes specific models", async () => { }) }) -test("custom provider keeps gpt-5-chat-latest model IDs", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write( - path.join(dir, "opencode.json"), - JSON.stringify({ - $schema: "https://opencode.ai/config.json", - provider: { - "custom-chat": { - name: "Custom Chat", - npm: "@ai-sdk/openai-compatible", - api: "https://example.com/v1", - options: { apiKey: "test-key" }, - models: { - "gpt-5-chat-latest": { - name: "GPT-5 Chat Latest", - tool_call: true, - limit: { context: 128000, output: 16000 }, - }, - }, - }, - }, - }), - ) - }, - }) - await WithInstance.provide({ - directory: tmp.path, - fn: async () => { - const providers = await list() - const provider = providers[ProviderID.make("custom-chat")] - expect(provider).toBeDefined() - expect(provider.models["gpt-5-chat-latest"]).toBeDefined() - }, - }) -}) - test("custom model alias via config", async () => { await using tmp = await tmpdir({ init: async (dir) => { @@ -2366,49 +2328,6 @@ test("Google Vertex: supports OpenAI compatible models", async () => { }) }) -test("Google Vertex: resolves GOOGLE_VERTEX_PROJECT env into provider options", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await Bun.write( - path.join(dir, "opencode.json"), - JSON.stringify({ - $schema: "https://opencode.ai/config.json", - provider: { - "google-vertex": { - name: "Vertex", - npm: "@ai-sdk/google-vertex", - env: ["GOOGLE_VERTEX_PROJECT", "GOOGLE_VERTEX_LOCATION"], - models: { - "gemini-pro": { - name: "Gemini Pro", - tool_call: true, - limit: { context: 128000, output: 16000 }, - }, - }, - }, - }, - }), - ) - }, - }) - - await WithInstance.provide({ - directory: tmp.path, - fn: async () => { - remove("GOOGLE_CLOUD_PROJECT") - remove("GCP_PROJECT") - remove("GCLOUD_PROJECT") - set("GOOGLE_VERTEX_PROJECT", "vertex-project") - set("GOOGLE_VERTEX_LOCATION", "europe-west4") - const providers = await list() - const provider = providers[ProviderID.googleVertex] - expect(provider).toBeDefined() - expect(provider.options.project).toBe("vertex-project") - expect(provider.options.location).toBe("europe-west4") - }, - }) -}) - test("cloudflare-ai-gateway loads with env variables", async () => { await using tmp = await tmpdir({ init: async (dir) => { diff --git a/packages/opencode/test/pty/pty-session.test.ts b/packages/opencode/test/pty/pty-session.test.ts index 8c5d804b7304..12784baf3159 100644 --- a/packages/opencode/test/pty/pty-session.test.ts +++ b/packages/opencode/test/pty/pty-session.test.ts @@ -1,103 +1,100 @@ -import { describe, expect, test } from "bun:test" -import { AppRuntime } from "../../src/effect/app-runtime" +import { describe, expect } from "bun:test" import { Bus } from "../../src/bus" -import { Effect } from "effect" -import { Instance } from "../../src/project/instance" -import { WithInstance } from "../../src/project/with-instance" +import { Config } from "../../src/config/config" +import { Plugin } from "../../src/plugin" import { Pty } from "../../src/pty" import type { PtyID } from "../../src/pty/schema" -import { tmpdir } from "../fixture/fixture" -import { setTimeout as sleep } from "node:timers/promises" +import { Effect, Layer, Queue } from "effect" +import { testEffect } from "../lib/effect" -const wait = async (fn: () => boolean, ms = 5000) => { - const end = Date.now() + ms - while (Date.now() < end) { - if (fn()) return - await sleep(25) - } - throw new Error("timeout waiting for pty events") -} - -const pick = (log: Array<{ type: "created" | "exited" | "deleted"; id: PtyID }>, id: PtyID) => { - return log.filter((evt) => evt.id === id).map((evt) => evt.type) -} - -describe("pty", () => { - test("publishes created, exited, deleted in order for a short-lived process", async () => { - if (process.platform === "win32") return +type PtyEvent = { type: "created" | "exited" | "deleted"; id: PtyID } - await using dir = await tmpdir({ git: true }) +const it = testEffect( + Pty.layer.pipe( + Layer.provideMerge(Bus.layer), + Layer.provideMerge(Config.defaultLayer), + Layer.provideMerge(Plugin.defaultLayer), + ), +) +const ptyTest = process.platform === "win32" ? it.instance.skip : it.instance - await WithInstance.provide({ - directory: dir.path, - fn: () => - AppRuntime.runPromise( - Effect.gen(function* () { - const pty = yield* Pty.Service - const log: Array<{ type: "created" | "exited" | "deleted"; id: PtyID }> = [] - const off = [ - Bus.subscribe(Pty.Event.Created, (evt) => log.push({ type: "created", id: evt.properties.info.id })), - Bus.subscribe(Pty.Event.Exited, (evt) => log.push({ type: "exited", id: evt.properties.id })), - Bus.subscribe(Pty.Event.Deleted, (evt) => log.push({ type: "deleted", id: evt.properties.id })), - ] +const subscribePtyEvents = Effect.fn("PtySessionTest.subscribePtyEvents")(function* () { + const bus = yield* Bus.Service + const events = yield* Queue.unbounded() - let id: PtyID | undefined - try { - const info = yield* pty.create({ - command: "/usr/bin/env", - args: ["sh", "-c", "sleep 0.1"], - title: "sleep", - }) - id = info.id + const subscribe = (effect: Effect.Effect<() => void, never, A>) => + Effect.acquireRelease(effect, (off) => Effect.sync(off)) - yield* Effect.promise(() => wait(() => pick(log, id!).includes("exited"))) + yield* subscribe( + bus.subscribeCallback(Pty.Event.Created, (evt) => { + Queue.offerUnsafe(events, { type: "created", id: evt.properties.info.id }) + }), + ) + yield* subscribe( + bus.subscribeCallback(Pty.Event.Exited, (evt) => { + Queue.offerUnsafe(events, { type: "exited", id: evt.properties.id }) + }), + ) + yield* subscribe( + bus.subscribeCallback(Pty.Event.Deleted, (evt) => { + Queue.offerUnsafe(events, { type: "deleted", id: evt.properties.id }) + }), + ) - yield* pty.remove(id) - yield* Effect.promise(() => wait(() => pick(log, id!).length >= 3)) - expect(pick(log, id!)).toEqual(["created", "exited", "deleted"]) - } finally { - off.forEach((x) => x()) - if (id) yield* pty.remove(id) - } - }), - ), - }) - }) + return events +}) - test("publishes created, exited, deleted in order for /bin/sh + remove", async () => { - if (process.platform === "win32") return +const createPty = Effect.fn("PtySessionTest.createPty")(function* (input: Pty.CreateInput) { + const pty = yield* Pty.Service + return yield* Effect.acquireRelease(pty.create(input), (info) => pty.remove(info.id).pipe(Effect.ignore)) +}) - await using dir = await tmpdir({ git: true }) +const waitForEvents = (events: Queue.Queue, id: PtyID, count: number) => { + return Effect.gen(function* () { + const picked: Array = [] + while (picked.length < count) { + const evt = yield* Queue.take(events) + if (evt.id === id) picked.push(evt.type) + } + return picked + }).pipe( + Effect.timeoutOrElse({ + duration: "5 seconds", + orElse: () => Effect.fail(new Error("timeout waiting for pty events")), + }), + ) +} - await WithInstance.provide({ - directory: dir.path, - fn: () => - AppRuntime.runPromise( - Effect.gen(function* () { - const pty = yield* Pty.Service - const log: Array<{ type: "created" | "exited" | "deleted"; id: PtyID }> = [] - const off = [ - Bus.subscribe(Pty.Event.Created, (evt) => log.push({ type: "created", id: evt.properties.info.id })), - Bus.subscribe(Pty.Event.Exited, (evt) => log.push({ type: "exited", id: evt.properties.id })), - Bus.subscribe(Pty.Event.Deleted, (evt) => log.push({ type: "deleted", id: evt.properties.id })), - ] +describe("pty", () => { + ptyTest( + "publishes created, exited, deleted in order for a short-lived process", + () => + Effect.gen(function* () { + const events = yield* subscribePtyEvents() + const info = yield* createPty({ + command: "/usr/bin/env", + args: ["sh", "-c", "sleep 0.1"], + title: "sleep", + }) - let id: PtyID | undefined - try { - const info = yield* pty.create({ command: "/bin/sh", title: "sh" }) - id = info.id + expect(yield* waitForEvents(events, info.id, 3)).toEqual(["created", "exited", "deleted"]) + }), + { git: true }, + ) - yield* Effect.promise(() => sleep(100)) + ptyTest( + "publishes created, exited, deleted in order for /bin/sh + remove", + () => + Effect.gen(function* () { + const pty = yield* Pty.Service + const events = yield* subscribePtyEvents() + const info = yield* createPty({ command: "/bin/sh", title: "sh" }) - yield* pty.remove(id) - yield* Effect.promise(() => wait(() => pick(log, id!).length >= 3)) - expect(pick(log, id!)).toEqual(["created", "exited", "deleted"]) - } finally { - off.forEach((x) => x()) - if (id) yield* pty.remove(id) - } - }), - ), - }) - }) + expect(yield* waitForEvents(events, info.id, 1)).toEqual(["created"]) + yield* pty.write(info.id, "exit\n") + expect(yield* waitForEvents(events, info.id, 2)).toEqual(["exited", "deleted"]) + yield* pty.remove(info.id) + }), + { git: true }, + ) }) diff --git a/packages/opencode/test/server/global-bus.ts b/packages/opencode/test/server/global-bus.ts index c8d0f92191fe..24e5cf77b5a9 100644 --- a/packages/opencode/test/server/global-bus.ts +++ b/packages/opencode/test/server/global-bus.ts @@ -29,6 +29,3 @@ export function waitGlobalBusEvent(input: { ), ) } - -export const waitGlobalBusEventPromise = (input: Parameters[0]) => - Effect.runPromise(waitGlobalBusEvent(input)) diff --git a/packages/opencode/test/server/global-session-list.test.ts b/packages/opencode/test/server/global-session-list.test.ts index 04348e5c0dbf..0fdba1f66397 100644 --- a/packages/opencode/test/server/global-session-list.test.ts +++ b/packages/opencode/test/server/global-session-list.test.ts @@ -1,104 +1,104 @@ -import { describe, expect, test } from "bun:test" -import { Effect } from "effect" -import { WithInstance } from "../../src/project/with-instance" +import { describe, expect } from "bun:test" +import { Deferred, Effect, Layer } from "effect" import { Project } from "@/project/project" import { Session as SessionNs } from "@/session/session" +import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner" import * as Log from "@opencode-ai/core/util/log" -import { tmpdir } from "../fixture/fixture" +import { provideInstance, TestInstance, tmpdirScoped } from "../fixture/fixture" +import { testEffect } from "../lib/effect" void Log.init({ print: false }) -function run(fx: Effect.Effect) { - return Effect.runPromise(fx.pipe(Effect.provide(SessionNs.defaultLayer))) -} +const it = testEffect(Layer.mergeAll(SessionNs.defaultLayer, Project.defaultLayer, CrossSpawnSpawner.defaultLayer)) -const svc = { - ...SessionNs, - create(input?: SessionNs.CreateInput) { - return run(SessionNs.Service.use((svc) => svc.create(input))) - }, - setArchived(input: typeof SessionNs.SetArchivedInput.Type) { - return run(SessionNs.Service.use((svc) => svc.setArchived(input))) - }, -} +const withSession = (input?: Parameters[0]) => + Effect.acquireRelease( + SessionNs.Service.use((session) => session.create(input)), + (created) => SessionNs.Service.use((session) => session.remove(created.id).pipe(Effect.ignore)), + ) describe("session.listGlobal", () => { - test("lists sessions across projects with project metadata", async () => { - await using first = await tmpdir({ git: true }) - await using second = await tmpdir({ git: true }) - - const firstSession = await WithInstance.provide({ - directory: first.path, - fn: async () => svc.create({ title: "first-session" }), - }) - const secondSession = await WithInstance.provide({ - directory: second.path, - fn: async () => svc.create({ title: "second-session" }), - }) - - const sessions = [...svc.listGlobal({ limit: 200 })] - const ids = sessions.map((session) => session.id) - - expect(ids).toContain(firstSession.id) - expect(ids).toContain(secondSession.id) - - const firstProject = Project.get(firstSession.projectID) - const secondProject = Project.get(secondSession.projectID) - - const firstItem = sessions.find((session) => session.id === firstSession.id) - const secondItem = sessions.find((session) => session.id === secondSession.id) - - expect(firstItem?.project?.id).toBe(firstProject?.id) - expect(firstItem?.project?.worktree).toBe(firstProject?.worktree) - expect(secondItem?.project?.id).toBe(secondProject?.id) - expect(secondItem?.project?.worktree).toBe(secondProject?.worktree) - }) - - test("excludes archived sessions by default", async () => { - await using tmp = await tmpdir({ git: true }) - - const archived = await WithInstance.provide({ - directory: tmp.path, - fn: async () => svc.create({ title: "archived-session" }), - }) - - await WithInstance.provide({ - directory: tmp.path, - fn: async () => svc.setArchived({ sessionID: archived.id, time: Date.now() }), - }) - - const sessions = [...svc.listGlobal({ limit: 200 })] - const ids = sessions.map((session) => session.id) - - expect(ids).not.toContain(archived.id) - - const allSessions = [...svc.listGlobal({ limit: 200, archived: true })] - const allIds = allSessions.map((session) => session.id) - - expect(allIds).toContain(archived.id) - }) - - test("supports cursor pagination", async () => { - await using tmp = await tmpdir({ git: true }) - - const first = await WithInstance.provide({ - directory: tmp.path, - fn: async () => svc.create({ title: "page-one" }), - }) - await new Promise((resolve) => setTimeout(resolve, 5)) - const second = await WithInstance.provide({ - directory: tmp.path, - fn: async () => svc.create({ title: "page-two" }), - }) - - const page = [...svc.listGlobal({ directory: tmp.path, limit: 1 })] - expect(page.length).toBe(1) - expect(page[0].id).toBe(second.id) - - const next = [...svc.listGlobal({ directory: tmp.path, limit: 10, cursor: page[0].time.updated })] - const ids = next.map((session) => session.id) - - expect(ids).toContain(first.id) - expect(ids).not.toContain(second.id) - }) + it.instance( + "lists sessions across projects with project metadata", + () => + Effect.gen(function* () { + const first = yield* TestInstance + const second = yield* tmpdirScoped({ git: true }) + + const firstSession = yield* withSession({ title: "first-session" }) + const secondSession = yield* withSession({ title: "second-session" }).pipe(provideInstance(second)) + + const sessions = yield* Effect.sync(() => [...SessionNs.listGlobal({ limit: 200 })]) + const ids = sessions.map((session) => session.id) + + expect(ids).toContain(firstSession.id) + expect(ids).toContain(secondSession.id) + + const firstProject = yield* Project.Service.use((project) => project.get(firstSession.projectID)) + const secondProject = yield* Project.Service.use((project) => project.get(secondSession.projectID)) + + const firstItem = sessions.find((session) => session.id === firstSession.id) + const secondItem = sessions.find((session) => session.id === secondSession.id) + + expect(firstItem?.project?.id).toBe(firstProject?.id) + expect(firstItem?.project?.worktree).toBe(firstProject?.worktree) + expect(secondItem?.project?.id).toBe(secondProject?.id) + expect(secondItem?.project?.worktree).toBe(secondProject?.worktree) + expect(first.directory).not.toBe(second) + }), + { git: true }, + ) + + it.instance( + "excludes archived sessions by default", + () => + Effect.gen(function* () { + const archived = yield* withSession({ title: "archived-session" }) + + yield* SessionNs.Service.use((session) => session.setArchived({ sessionID: archived.id, time: Date.now() })) + + const sessions = yield* Effect.sync(() => [...SessionNs.listGlobal({ limit: 200 })]) + const ids = sessions.map((session) => session.id) + + expect(ids).not.toContain(archived.id) + + const allSessions = yield* Effect.sync(() => [...SessionNs.listGlobal({ limit: 200, archived: true })]) + const allIds = allSessions.map((session) => session.id) + + expect(allIds).toContain(archived.id) + }), + { git: true }, + ) + + it.instance( + "supports cursor pagination", + () => + Effect.gen(function* () { + const test = yield* TestInstance + + const first = yield* withSession({ title: "page-one" }) + const ready = yield* Deferred.make() + yield* Deferred.succeed(ready, undefined).pipe(Effect.delay("5 millis"), Effect.forkScoped) + yield* Deferred.await(ready).pipe( + Effect.timeoutOrElse({ + duration: "1 second", + orElse: () => Effect.fail(new Error("timed out waiting between session creates")), + }), + ) + const second = yield* withSession({ title: "page-two" }) + + const page = yield* Effect.sync(() => [...SessionNs.listGlobal({ directory: test.directory, limit: 1 })]) + expect(page.length).toBe(1) + expect(page[0].id).toBe(second.id) + + const next = yield* Effect.sync(() => [ + ...SessionNs.listGlobal({ directory: test.directory, limit: 10, cursor: page[0].time.updated }), + ]) + const ids = next.map((session) => session.id) + + expect(ids).toContain(first.id) + expect(ids).not.toContain(second.id) + }), + { git: true }, + ) }) diff --git a/packages/opencode/test/server/httpapi-config.test.ts b/packages/opencode/test/server/httpapi-config.test.ts index 26c0fe03e612..7619a0c88172 100644 --- a/packages/opencode/test/server/httpapi-config.test.ts +++ b/packages/opencode/test/server/httpapi-config.test.ts @@ -1,10 +1,12 @@ -import { afterEach, describe, expect, test } from "bun:test" +import { afterEach, describe, expect } from "bun:test" import path from "path" import { Server } from "../../src/server/server" import * as Log from "@opencode-ai/core/util/log" +import { Effect, Fiber } from "effect" import { resetDatabase } from "../fixture/db" import { disposeAllInstances, tmpdir } from "../fixture/fixture" -import { waitGlobalBusEventPromise } from "./global-bus" +import { it } from "../lib/effect" +import { waitGlobalBusEvent } from "./global-bus" void Log.init({ print: false }) @@ -12,76 +14,100 @@ function app() { return Server.Default().app } -async function waitDisposed(directory: string) { - await waitGlobalBusEventPromise({ +function waitDisposed(directory: string) { + return waitGlobalBusEvent({ message: "timed out waiting for instance disposal", predicate: (event) => event.payload.type === "server.instance.disposed" && event.directory === directory, }) } +const tmpdirEffect = (options: Parameters[0]) => + Effect.acquireRelease( + Effect.promise(() => tmpdir(options)), + (tmp) => Effect.promise(() => tmp[Symbol.asyncDispose]()), + ) + afterEach(async () => { await disposeAllInstances() await resetDatabase() }) describe("config HttpApi", () => { - test("serves config update through the default server app", async () => { - await using tmp = await tmpdir({ config: { formatter: false, lsp: false } }) - const disposed = waitDisposed(tmp.path) - - const response = await app().request("/config", { - method: "PATCH", - headers: { - "content-type": "application/json", - "x-opencode-directory": tmp.path, - }, - body: JSON.stringify({ username: "patched-user", formatter: false, lsp: false }), - }) + it.live( + "serves config update through the default server app", + Effect.gen(function* () { + const tmp = yield* tmpdirEffect({ config: { formatter: false, lsp: false } }) + const disposed = yield* waitDisposed(tmp.path).pipe(Effect.forkScoped) - expect(response.status).toBe(200) - expect(await response.json()).toMatchObject({ username: "patched-user", formatter: false, lsp: false }) - await disposed - expect(await Bun.file(path.join(tmp.path, "config.json")).json()).toMatchObject({ - username: "patched-user", - formatter: false, - lsp: false, - }) - }) + const response = yield* Effect.promise(() => + Promise.resolve( + app().request("/config", { + method: "PATCH", + headers: { + "content-type": "application/json", + "x-opencode-directory": tmp.path, + }, + body: JSON.stringify({ username: "patched-user", formatter: false, lsp: false }), + }), + ), + ) - test("serves config with active provider model status", async () => { - await using tmp = await tmpdir({ - config: { + expect(response.status).toBe(200) + expect(yield* Effect.promise(() => response.json())).toMatchObject({ + username: "patched-user", formatter: false, lsp: false, - provider: { - omniroute: { - models: { - "gpt-4o": { - status: "active", + }) + yield* Fiber.join(disposed) + expect(yield* Effect.promise(() => Bun.file(path.join(tmp.path, "config.json")).json())).toMatchObject({ + username: "patched-user", + formatter: false, + lsp: false, + }) + }), + ) + + it.live( + "serves config with active provider model status", + Effect.gen(function* () { + const tmp = yield* tmpdirEffect({ + config: { + formatter: false, + lsp: false, + provider: { + omniroute: { + models: { + "gpt-4o": { + status: "active", + }, }, }, }, }, - }, - }) + }) - const response = await app().request("/config", { - headers: { - "x-opencode-directory": tmp.path, - }, - }) + const response = yield* Effect.promise(() => + Promise.resolve( + app().request("/config", { + headers: { + "x-opencode-directory": tmp.path, + }, + }), + ), + ) - expect(response.status).toBe(200) - expect(await response.json()).toMatchObject({ - provider: { - omniroute: { - models: { - "gpt-4o": { - status: "active", + expect(response.status).toBe(200) + expect(yield* Effect.promise(() => response.json())).toMatchObject({ + provider: { + omniroute: { + models: { + "gpt-4o": { + status: "active", + }, }, }, }, - }, - }) - }) + }) + }), + ) }) diff --git a/packages/opencode/test/server/httpapi-exercise/index.ts b/packages/opencode/test/server/httpapi-exercise/index.ts index 896aad32f5a1..0d6bec2dfed0 100644 --- a/packages/opencode/test/server/httpapi-exercise/index.ts +++ b/packages/opencode/test/server/httpapi-exercise/index.ts @@ -593,12 +593,6 @@ const scenarios: Scenario[] = [ check(auth.test === undefined, "auth remove should delete provider from isolated auth file") }), ), - http.protected.get("/api/model", "v2.model.list").json(200, array, "none"), - http.protected.get("/api/provider", "v2.provider.list").json(200, array, "none"), - http.protected - .get("/api/provider/{providerID}", "v2.provider.get") - .at((ctx) => ({ path: route("/api/provider/{providerID}", { providerID: "opencode" }), headers: ctx.headers() })) - .json(200, object, "none"), http.protected .get("/api/session", "v2.session.list") .at((ctx) => ({ path: "/api/session?roots=true", headers: ctx.headers() })) diff --git a/packages/opencode/test/server/httpapi-experimental.test.ts b/packages/opencode/test/server/httpapi-experimental.test.ts index 383442e00ef3..11aed69cb425 100644 --- a/packages/opencode/test/server/httpapi-experimental.test.ts +++ b/packages/opencode/test/server/httpapi-experimental.test.ts @@ -1,47 +1,183 @@ -import { afterEach, describe, expect, test } from "bun:test" -import { Effect } from "effect" -import { WithInstance } from "../../src/project/with-instance" +import { afterEach, describe, expect } from "bun:test" +import { Deferred, Effect, Fiber, Layer } from "effect" +import { eq } from "drizzle-orm" +import { GlobalBus, type GlobalEvent } from "@/bus/global" import { Server } from "../../src/server/server" import { ExperimentalPaths } from "../../src/server/routes/instance/httpapi/groups/experimental" import { Session } from "@/session/session" +import { SessionTable } from "@/session/session.sql" import { Database } from "@/storage/db" import * as Log from "@opencode-ai/core/util/log" import { Worktree } from "../../src/worktree" import { resetDatabase } from "../fixture/db" -import { disposeAllInstances, tmpdir } from "../fixture/fixture" -import { waitGlobalBusEventPromise } from "./global-bus" +import { disposeAllInstances, TestInstance } from "../fixture/fixture" +import { testEffect } from "../lib/effect" void Log.init({ print: false }) -const testWorktreeMutations = process.platform === "win32" ? test.skip : test +const it = testEffect(Layer.mergeAll(Session.defaultLayer)) +const testWorktreeMutations = process.platform === "win32" ? it.instance.skip : it.instance function app() { return Server.Default().app } -function runSession(fx: Effect.Effect) { - return Effect.runPromise(fx.pipe(Effect.provide(Session.defaultLayer))) +function request(path: string, directory: string, init: RequestInit = {}) { + return Effect.promise(() => { + const headers = new Headers(init.headers) + headers.set("x-opencode-directory", directory) + return Promise.resolve(app().request(path, { ...init, headers })) + }) } function createSession(input?: Session.CreateInput) { - return runSession(Session.Service.use((svc) => svc.create(input))) + return Session.Service.use((svc) => svc.create(input)) +} + +function json(response: Response) { + return Effect.promise(() => response.json() as Promise) } -async function waitReady(directory: string) { - await waitGlobalBusEventPromise({ - message: "timed out waiting for worktree.ready", - predicate: (event) => event.payload.type === Worktree.Event.Ready.type && event.directory === directory, +function waitReady(input: { directory?: string; name?: string }) { + return Effect.gen(function* () { + const ready = yield* Deferred.make() + const on = (event: GlobalEvent) => { + if (event.payload.type !== Worktree.Event.Ready.type) return + if (input.directory && event.directory !== input.directory) return + if (input.name && event.payload.properties.name !== input.name) return + Deferred.doneUnsafe(ready, Effect.void) + } + + GlobalBus.on("event", on) + yield* Effect.addFinalizer(() => Effect.sync(() => GlobalBus.off("event", on))) + + return yield* Deferred.await(ready).pipe( + Effect.timeoutOrElse({ + duration: "10 seconds", + orElse: () => Effect.fail(new Error("timed out waiting for worktree.ready")), + }), + ) }) } +function insertAccount() { + return Effect.acquireRelease( + Effect.sync(() => { + Database.Client() + .$client.prepare( + "INSERT INTO account (id, email, url, access_token, refresh_token, time_created, time_updated) VALUES (?, ?, ?, ?, ?, ?, ?)", + ) + .run( + "account-test", + "test@example.com", + "https://console.example.com", + "access", + "refresh", + Date.now(), + Date.now(), + ) + return "account-test" + }), + (id) => + Effect.sync(() => { + Database.Client().$client.prepare("DELETE FROM account WHERE id = ?").run(id) + }), + ) +} + +function setSessionUpdated(session: Session.Info, updated: number) { + return Effect.sync(() => { + Database.use((db) => + db.update(SessionTable).set({ time_updated: updated }).where(eq(SessionTable.id, session.id)).run(), + ) + }) +} + +function withCreatedWorktree(directory: string, use: (info: Worktree.Info) => Effect.Effect) { + const name = "api-test" + const headers = { "content-type": "application/json" } + return Effect.acquireUseRelease( + Effect.gen(function* () { + const ready = yield* waitReady({ name }).pipe(Effect.forkScoped) + const created = yield* request(ExperimentalPaths.worktree, directory, { + method: "POST", + headers, + body: JSON.stringify({ name }), + }) + + expect(created.status).toBe(200) + const info = yield* json(created) + expect(info).toMatchObject({ name, branch: "opencode/api-test" }) + yield* Fiber.join(ready) + return info + }), + use, + (info) => + Effect.gen(function* () { + const removed = yield* request(ExperimentalPaths.worktree, directory, { + method: "DELETE", + headers, + body: JSON.stringify({ directory: info.directory }), + }) + if (removed.status !== 200) return yield* Effect.fail(new Error(`failed to remove worktree: ${removed.status}`)) + const ok = yield* json(removed) + if (!ok) return yield* Effect.fail(new Error(`failed to remove worktree ${info.directory}`)) + }), + ) +} + afterEach(async () => { await disposeAllInstances() await resetDatabase() }) describe("experimental HttpApi", () => { - test("serves read-only experimental endpoints through the default server app", async () => { - await using tmp = await tmpdir({ + it.instance( + "serves read-only experimental endpoints through the default server app", + () => + Effect.gen(function* () { + const tmp = yield* TestInstance + const directory = tmp.directory + const [consoleState, consoleOrgs, toolList, toolIDs, worktrees, resources] = yield* Effect.all( + [ + request(ExperimentalPaths.console, directory), + request(ExperimentalPaths.consoleOrgs, directory), + request(`${ExperimentalPaths.tool}?provider=opencode&model=gpt-5`, directory), + request(ExperimentalPaths.toolIDs, directory), + request(ExperimentalPaths.worktree, directory), + request(ExperimentalPaths.resource, directory), + ], + { concurrency: "unbounded" }, + ) + + expect(consoleState.status).toBe(200) + expect(yield* json(consoleState)).toEqual({ + consoleManagedProviders: [], + switchableOrgCount: 0, + }) + + expect(consoleOrgs.status).toBe(200) + expect(yield* json(consoleOrgs)).toEqual({ orgs: [] }) + + expect(toolList.status).toBe(200) + expect(yield* json(toolList)).toContainEqual( + expect.objectContaining({ + id: "bash", + description: expect.any(String), + parameters: expect.any(Object), + }), + ) + + expect(toolIDs.status).toBe(200) + expect(yield* json(toolIDs)).toContain("bash") + + expect(worktrees.status).toBe(200) + expect(yield* json(worktrees)).toEqual([]) + + expect(resources.status).toBe(200) + expect(yield* json(resources)).toEqual({}) + }), + { config: { formatter: false, lsp: false, @@ -53,150 +189,88 @@ describe("experimental HttpApi", () => { }, }, }, - }) - - const headers = { "x-opencode-directory": tmp.path } - const [consoleState, consoleOrgs, toolList, toolIDs, worktrees, resources] = await Promise.all([ - app().request(ExperimentalPaths.console, { headers }), - app().request(ExperimentalPaths.consoleOrgs, { headers }), - app().request(`${ExperimentalPaths.tool}?provider=opencode&model=gpt-5`, { headers }), - app().request(ExperimentalPaths.toolIDs, { headers }), - app().request(ExperimentalPaths.worktree, { headers }), - app().request(ExperimentalPaths.resource, { headers }), - ]) - - expect(consoleState.status).toBe(200) - expect(await consoleState.json()).toEqual({ - consoleManagedProviders: [], - switchableOrgCount: 0, - }) - - expect(consoleOrgs.status).toBe(200) - expect(await consoleOrgs.json()).toEqual({ orgs: [] }) - - expect(toolList.status).toBe(200) - expect(await toolList.json()).toContainEqual( - expect.objectContaining({ - id: "bash", - description: expect.any(String), - parameters: expect.any(Object), + }, + ) + + it.instance( + "serves Console org switch through the default server app", + () => + Effect.gen(function* () { + const tmp = yield* TestInstance + const accountID = yield* insertAccount() + const switched = yield* request(ExperimentalPaths.consoleSwitch, tmp.directory, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ accountID, orgID: "org-test" }), + }) + + expect(switched.status).toBe(200) + expect(yield* json(switched)).toBe(true) }), - ) - - expect(toolIDs.status).toBe(200) - expect(await toolIDs.json()).toContain("bash") - - expect(worktrees.status).toBe(200) - expect(await worktrees.json()).toEqual([]) - - expect(resources.status).toBe(200) - expect(await resources.json()).toEqual({}) - }) - - test("serves Console org switch through the default server app", async () => { - await using tmp = await tmpdir({ config: { formatter: false, lsp: false } }) - Database.Client() - .$client.prepare( - "INSERT INTO account (id, email, url, access_token, refresh_token, time_created, time_updated) VALUES (?, ?, ?, ?, ?, ?, ?)", - ) - .run( - "account-test", - "test@example.com", - "https://console.example.com", - "access", - "refresh", - Date.now(), - Date.now(), - ) - - const switched = await app().request(ExperimentalPaths.consoleSwitch, { - method: "POST", - headers: { "x-opencode-directory": tmp.path, "content-type": "application/json" }, - body: JSON.stringify({ accountID: "account-test", orgID: "org-test" }), - }) - - expect(switched.status).toBe(200) - expect(await switched.json()).toBe(true) - }) - - test("serves global session list through the default server app", async () => { - await using tmp = await tmpdir({ git: true, config: { formatter: false, lsp: false } }) - - const first = await WithInstance.provide({ - directory: tmp.path, - fn: async () => createSession({ title: "page-one" }), - }) - await new Promise((resolve) => setTimeout(resolve, 5)) - const second = await WithInstance.provide({ - directory: tmp.path, - fn: async () => createSession({ title: "page-two" }), - }) - - const headers = { "x-opencode-directory": tmp.path } - const page = await app().request( - `${ExperimentalPaths.session}?${new URLSearchParams({ directory: tmp.path, limit: "1" })}`, - { headers }, - ) - expect(page.status).toBe(200) - expect(page.headers.get("x-next-cursor")).toBeTruthy() - - const body = (await page.json()) as Session.GlobalInfo[] - expect(body.map((session) => session.id)).toEqual([second.id]) - expect(body[0].project?.id).toBe(second.projectID) - - const next = await app().request( - `${ExperimentalPaths.session}?${new URLSearchParams({ - directory: tmp.path, - limit: "10", - cursor: body[0].time.updated.toString(), - })}`, - { headers }, - ) - expect(next.status).toBe(200) - expect(((await next.json()) as Session.GlobalInfo[]).map((session) => session.id)).toContain(first.id) - }) - - testWorktreeMutations("serves worktree mutations through the default server app", async () => { - await using tmp = await tmpdir({ git: true, config: { formatter: false, lsp: false } }) - - const headers = { "x-opencode-directory": tmp.path, "content-type": "application/json" } - const created = await app().request(ExperimentalPaths.worktree, { - method: "POST", - headers, - body: JSON.stringify({ name: "api-test" }), - }) - - expect(created.status).toBe(200) - const info = (await created.json()) as Worktree.Info - expect(info).toMatchObject({ name: "api-test", branch: "opencode/api-test" }) - await waitReady(info.directory) - - const listed = await app().request(ExperimentalPaths.worktree, { headers }) - expect(listed.status).toBe(200) - expect(await listed.json()).toContain(info.directory) - - if (process.platform !== "win32") { - const reset = await app().request(ExperimentalPaths.worktreeReset, { - method: "POST", - headers, - body: JSON.stringify({ directory: info.directory }), - }) - - expect(reset.status).toBe(200) - expect(await reset.json()).toBe(true) - } - - const removed = await app().request(ExperimentalPaths.worktree, { - method: "DELETE", - headers, - body: JSON.stringify({ directory: info.directory }), - }) - - expect(removed.status).toBe(200) - expect(await removed.json()).toBe(true) - - const afterRemove = await app().request(ExperimentalPaths.worktree, { headers }) - expect(afterRemove.status).toBe(200) - expect(await afterRemove.json()).toEqual([]) - }) + { config: { formatter: false, lsp: false } }, + ) + + it.instance( + "serves global session list through the default server app", + () => + Effect.gen(function* () { + const tmp = yield* TestInstance + const first = yield* createSession({ title: "page-one" }) + const second = yield* createSession({ title: "page-two" }) + yield* setSessionUpdated(first, 1) + yield* setSessionUpdated(second, 2) + + const page = yield* request( + `${ExperimentalPaths.session}?${new URLSearchParams({ directory: tmp.directory, limit: "1" })}`, + tmp.directory, + ) + expect(page.status).toBe(200) + expect(page.headers.get("x-next-cursor")).toBeTruthy() + + const body = yield* json(page) + expect(body.map((session) => session.id)).toEqual([second.id]) + expect(body[0].project?.id).toBe(second.projectID) + + const next = yield* request( + `${ExperimentalPaths.session}?${new URLSearchParams({ + directory: tmp.directory, + limit: "10", + cursor: body[0].time.updated.toString(), + })}`, + tmp.directory, + ) + expect(next.status).toBe(200) + expect((yield* json(next)).map((session) => session.id)).toContain(first.id) + }), + { git: true, config: { formatter: false, lsp: false } }, + ) + + testWorktreeMutations( + "serves worktree mutations through the default server app", + () => + Effect.gen(function* () { + const tmp = yield* TestInstance + yield* withCreatedWorktree(tmp.directory, (info) => + Effect.gen(function* () { + const listed = yield* request(ExperimentalPaths.worktree, tmp.directory) + expect(listed.status).toBe(200) + expect(yield* json(listed)).toContain(info.directory) + + const reset = yield* request(ExperimentalPaths.worktreeReset, tmp.directory, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ directory: info.directory }), + }) + + expect(reset.status).toBe(200) + expect(yield* json(reset)).toBe(true) + }), + ) + + const afterRemove = yield* request(ExperimentalPaths.worktree, tmp.directory) + expect(afterRemove.status).toBe(200) + expect(yield* json(afterRemove)).toEqual([]) + }), + { git: true, config: { formatter: false, lsp: false } }, + ) }) diff --git a/packages/opencode/test/server/httpapi-mcp.test.ts b/packages/opencode/test/server/httpapi-mcp.test.ts index b6c7aebcd2ae..21cb0cfd2465 100644 --- a/packages/opencode/test/server/httpapi-mcp.test.ts +++ b/packages/opencode/test/server/httpapi-mcp.test.ts @@ -1,69 +1,57 @@ -import { afterEach, describe, expect, test } from "bun:test" -import { Context, Effect, FileSystem, Layer, Path } from "effect" -import { NodeFileSystem, NodePath } from "@effect/platform-node" +import { describe, expect } from "bun:test" +import { Context, Effect, Layer } from "effect" import { ExperimentalHttpApiServer } from "../../src/server/routes/instance/httpapi/server" import { McpPaths } from "../../src/server/routes/instance/httpapi/groups/mcp" -import { Instance } from "../../src/project/instance" -import { WithInstance } from "../../src/project/with-instance" -import { InstanceRuntime } from "../../src/project/instance-runtime" import { Server } from "../../src/server/server" import * as Log from "@opencode-ai/core/util/log" import { resetDatabase } from "../fixture/db" -import { disposeAllInstances, provideInstance, tmpdir } from "../fixture/fixture" +import { TestInstance } from "../fixture/fixture" import { testEffect } from "../lib/effect" void Log.init({ print: false }) const context = Context.empty() as Context.Context -const it = testEffect(Layer.mergeAll(NodeFileSystem.layer, NodePath.layer)) +const testStateLayer = Layer.effectDiscard( + Effect.gen(function* () { + yield* Effect.promise(() => resetDatabase()) + yield* Effect.addFinalizer(() => Effect.promise(() => resetDatabase()).pipe(Effect.ignore)) + }), +) +const it = testEffect(testStateLayer) function app() { return Server.Default().app } type TestApp = ReturnType - -function request(route: string, directory: string, init?: RequestInit) { +type TestHandler = ReturnType + +const handlerScoped = Effect.acquireRelease( + Effect.sync(() => ExperimentalHttpApiServer.webHandler()), + (handler) => Effect.promise(() => handler.dispose()).pipe(Effect.ignore), +) + +const request = Effect.fnUntraced(function* ( + handler: TestHandler, + route: string, + directory: string, + init?: RequestInit, +) { const headers = new Headers(init?.headers) headers.set("x-opencode-directory", directory) - return ExperimentalHttpApiServer.webHandler().handler( - new Request(`http://localhost${route}`, { - ...init, - headers, - }), - context, + return yield* Effect.promise(() => + Promise.resolve( + handler.handler( + new Request(`http://localhost${route}`, { + ...init, + headers, + }), + context, + ), + ), ) -} - -function withMcpProject(self: (dir: string) => Effect.Effect) { - return Effect.gen(function* () { - const fs = yield* FileSystem.FileSystem - const path = yield* Path.Path - const dir = yield* fs.makeTempDirectoryScoped({ prefix: "opencode-test-" }) +}) - yield* fs.writeFileString( - path.join(dir, "opencode.json"), - JSON.stringify({ - $schema: "https://opencode.ai/config.json", - formatter: false, - lsp: false, - mcp: { - demo: { - type: "local", - command: ["echo", "demo"], - enabled: false, - }, - }, - }), - ) - yield* Effect.addFinalizer(() => - Effect.promise(() => - WithInstance.provide({ directory: dir, fn: () => InstanceRuntime.disposeInstance(Instance.current) }), - ).pipe(Effect.ignore), - ) - - return yield* self(dir).pipe(provideInstance(dir)) - }) -} +const json = (response: Response) => Effect.promise(() => response.json() as Promise) const readResponse = Effect.fnUntraced(function* (input: { app: TestApp; path: string; headers: HeadersInit }) { const response = yield* Effect.promise(() => @@ -75,14 +63,19 @@ const readResponse = Effect.fnUntraced(function* (input: { app: TestApp; path: s } }) -afterEach(async () => { - await disposeAllInstances() - await resetDatabase() -}) - describe("mcp HttpApi", () => { - test("serves status endpoint", async () => { - await using tmp = await tmpdir({ + it.instance( + "serves status endpoint", + () => + Effect.gen(function* () { + const tmp = yield* TestInstance + const handler = yield* handlerScoped + const response = yield* request(handler, McpPaths.status, tmp.directory) + + expect(response.status).toBe(200) + expect(yield* json(response)).toEqual({ demo: { status: "disabled" } }) + }), + { config: { mcp: { demo: { @@ -92,15 +85,39 @@ describe("mcp HttpApi", () => { }, }, }, - }) + }, + ) - const response = await request(McpPaths.status, tmp.path) - expect(response.status).toBe(200) - expect(await response.json()).toEqual({ demo: { status: "disabled" } }) - }) + it.instance( + "serves add, connect, and disconnect endpoints", + () => + Effect.gen(function* () { + const tmp = yield* TestInstance + const handler = yield* handlerScoped + const added = yield* request(handler, McpPaths.status, tmp.directory, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ + name: "added", + config: { + type: "local", + command: ["echo", "added"], + enabled: false, + }, + }), + }) + expect(added.status).toBe(200) + expect(yield* json(added)).toMatchObject({ added: { status: "disabled" } }) - test("serves add, connect, and disconnect endpoints", async () => { - await using tmp = await tmpdir({ + const connected = yield* request(handler, "/mcp/demo/connect", tmp.directory, { method: "POST" }) + expect(connected.status).toBe(200) + expect(yield* json(connected)).toBe(true) + + const disconnected = yield* request(handler, "/mcp/demo/disconnect", tmp.directory, { method: "POST" }) + expect(disconnected.status).toBe(200) + expect(yield* json(disconnected)).toBe(true) + }), + { config: { mcp: { demo: { @@ -110,34 +127,26 @@ describe("mcp HttpApi", () => { }, }, }, - }) - - const added = await request(McpPaths.status, tmp.path, { - method: "POST", - headers: { "content-type": "application/json" }, - body: JSON.stringify({ - name: "added", - config: { - type: "local", - command: ["echo", "added"], - enabled: false, - }, - }), - }) - expect(added.status).toBe(200) - expect(await added.json()).toMatchObject({ added: { status: "disabled" } }) + }, + ) - const connected = await request("/mcp/demo/connect", tmp.path, { method: "POST" }) - expect(connected.status).toBe(200) - expect(await connected.json()).toBe(true) + it.instance( + "serves deterministic OAuth endpoints", + () => + Effect.gen(function* () { + const tmp = yield* TestInstance + const handler = yield* handlerScoped + const start = yield* request(handler, "/mcp/demo/auth", tmp.directory, { method: "POST" }) + expect(start.status).toBe(400) - const disconnected = await request("/mcp/demo/disconnect", tmp.path, { method: "POST" }) - expect(disconnected.status).toBe(200) - expect(await disconnected.json()).toBe(true) - }) + const authenticate = yield* request(handler, "/mcp/demo/auth/authenticate", tmp.directory, { method: "POST" }) + expect(authenticate.status).toBe(400) - test("serves deterministic OAuth endpoints", async () => { - await using tmp = await tmpdir({ + const removed = yield* request(handler, "/mcp/demo/auth", tmp.directory, { method: "DELETE" }) + expect(removed.status).toBe(200) + expect(yield* json(removed)).toEqual({ success: true }) + }), + { config: { mcp: { demo: { @@ -147,23 +156,15 @@ describe("mcp HttpApi", () => { }, }, }, - }) - - const start = await request("/mcp/demo/auth", tmp.path, { method: "POST" }) - expect(start.status).toBe(400) - - const authenticate = await request("/mcp/demo/auth/authenticate", tmp.path, { method: "POST" }) - expect(authenticate.status).toBe(400) - - const removed = await request("/mcp/demo/auth", tmp.path, { method: "DELETE" }) - expect(removed.status).toBe(200) - expect(await removed.json()).toEqual({ success: true }) - }) + }, + ) - it.live( + it.instance( "returns unsupported OAuth error responses", - withMcpProject((dir) => + () => Effect.gen(function* () { + const tmp = yield* TestInstance + const dir = tmp.directory const headers = { "x-opencode-directory": dir } yield* Effect.forEach(["/mcp/demo/auth", "/mcp/demo/auth/authenticate"], (path) => @@ -177,6 +178,18 @@ describe("mcp HttpApi", () => { }), ) }), - ), + { + config: { + formatter: false, + lsp: false, + mcp: { + demo: { + type: "local", + command: ["echo", "demo"], + enabled: false, + }, + }, + }, + }, ) }) diff --git a/packages/opencode/test/server/httpapi-provider.test.ts b/packages/opencode/test/server/httpapi-provider.test.ts index 68db6663d2cf..cb47e5bbd5fb 100644 --- a/packages/opencode/test/server/httpapi-provider.test.ts +++ b/packages/opencode/test/server/httpapi-provider.test.ts @@ -1,18 +1,24 @@ -import { afterEach, describe, expect } from "bun:test" -import { Effect, FileSystem, Layer, Path } from "effect" -import { NodeFileSystem, NodePath } from "@effect/platform-node" -import { Instance } from "../../src/project/instance" -import { WithInstance } from "../../src/project/with-instance" -import { InstanceRuntime } from "../../src/project/instance-runtime" +import { describe, expect } from "bun:test" +import { AppFileSystem } from "@opencode-ai/core/filesystem" +import { Effect, Layer } from "effect" +import path from "path" import { Server } from "../../src/server/server" import * as Log from "@opencode-ai/core/util/log" import { resetDatabase } from "../fixture/db" -import { disposeAllInstances, provideInstance } from "../fixture/fixture" +import { TestInstance } from "../fixture/fixture" import { testEffect } from "../lib/effect" void Log.init({ print: false }) -const it = testEffect(Layer.mergeAll(NodeFileSystem.layer, NodePath.layer)) +const testStateLayer = Layer.effectDiscard( + Effect.acquireRelease( + Effect.promise(() => resetDatabase()), + () => Effect.promise(() => resetDatabase()), + ), +) + +const it = testEffect(Layer.mergeAll(testStateLayer, AppFileSystem.defaultLayer)) +const projectOptions = { config: { formatter: false, lsp: false } } const providerID = "test-oauth-parity" const oauthURL = "https://example.com/oauth" const oauthInstructions = "Finish OAuth" @@ -90,11 +96,9 @@ function requestAuthorize(input: { function writeProviderAuthPlugin(dir: string) { return Effect.gen(function* () { - const fs = yield* FileSystem.FileSystem - const path = yield* Path.Path + const fs = yield* AppFileSystem.Service - yield* fs.makeDirectory(path.join(dir, ".opencode", "plugin"), { recursive: true }) - yield* fs.writeFileString( + yield* fs.writeWithDirs( path.join(dir, ".opencode", "plugin", "provider-oauth-parity.ts"), [ "export default {", @@ -126,11 +130,9 @@ function writeProviderAuthPlugin(dir: string) { function writeFunctionOptionsPlugin(dir: string) { return Effect.gen(function* () { - const fs = yield* FileSystem.FileSystem - const path = yield* Path.Path + const fs = yield* AppFileSystem.Service - yield* fs.makeDirectory(path.join(dir, ".opencode", "plugin"), { recursive: true }) - yield* fs.writeFileString( + yield* fs.writeWithDirs( path.join(dir, ".opencode", "plugin", "provider-function-options.ts"), [ "export default {", @@ -159,11 +161,9 @@ function writeFunctionOptionsPlugin(dir: string) { function writeProviderModelsMutationPlugin(dir: string) { return Effect.gen(function* () { - const fs = yield* FileSystem.FileSystem - const path = yield* Path.Path + const fs = yield* AppFileSystem.Service - yield* fs.makeDirectory(path.join(dir, ".opencode", "plugin"), { recursive: true }) - yield* fs.writeFileString( + yield* fs.writeWithDirs( path.join(dir, ".opencode", "plugin", "provider-models-mutation.ts"), [ "export default {", @@ -191,91 +191,69 @@ function writeProviderModelsMutationPlugin(dir: string) { }) } -function withProviderProject(self: (dir: string) => Effect.Effect) { - return Effect.gen(function* () { - const fs = yield* FileSystem.FileSystem - const path = yield* Path.Path - const dir = yield* fs.makeTempDirectoryScoped({ prefix: "opencode-test-" }) - - yield* fs.writeFileString( - path.join(dir, "opencode.json"), - JSON.stringify({ $schema: "https://opencode.ai/config.json", formatter: false, lsp: false }), - ) - yield* writeProviderAuthPlugin(dir) - yield* Effect.addFinalizer(() => - Effect.promise(() => - WithInstance.provide({ directory: dir, fn: () => InstanceRuntime.disposeInstance(Instance.current) }), - ).pipe(Effect.ignore), - ) - - return yield* self(dir).pipe(provideInstance(dir)) - }) +function setEnvScoped(key: string, value: string) { + return Effect.acquireRelease( + Effect.sync(() => { + const previous = process.env[key] + process.env[key] = value + return previous + }), + (previous) => + Effect.sync(() => { + if (previous === undefined) delete process.env[key] + else process.env[key] = previous + }), + ) } -afterEach(async () => { - await disposeAllInstances() - await resetDatabase() -}) - describe("provider HttpApi", () => { - it.live( + it.instance( "serves OAuth authorize response shapes", - withProviderProject((dir) => - Effect.gen(function* () { - const headers = { "x-opencode-directory": dir, "content-type": "application/json" } - const server = app() - - const api = yield* requestAuthorize({ - app: server, - providerID, - method: 0, - headers, - }) - // method 0 (api-key style) — authorize() resolves with no further - // redirect; #26474 changed the wire format to JSON `null` so clients - // can `.json()` parse uniformly instead of getting an empty body - // that throws. - expect(api).toEqual({ status: 200, body: "null" }) - - const oauth = yield* requestAuthorize({ - app: server, - providerID, - method: 1, - headers, - }) - expect(JSON.parse(oauth.body)).toEqual({ - url: oauthURL, - method: "code", - instructions: oauthInstructions, - }) - }), - ), + Effect.gen(function* () { + const instance = yield* TestInstance + yield* writeProviderAuthPlugin(instance.directory) + const headers = { "x-opencode-directory": instance.directory, "content-type": "application/json" } + const server = app() + + const api = yield* requestAuthorize({ + app: server, + providerID, + method: 0, + headers, + }) + // method 0 (api-key style) — authorize() resolves with no further + // redirect; #26474 changed the wire format to JSON `null` so clients + // can `.json()` parse uniformly instead of getting an empty body + // that throws. + expect(api).toEqual({ status: 200, body: "null" }) + + const oauth = yield* requestAuthorize({ + app: server, + providerID, + method: 1, + headers, + }) + expect(JSON.parse(oauth.body)).toEqual({ + url: oauthURL, + method: "code", + instructions: oauthInstructions, + }) + }), + projectOptions, ) - it.live("serves provider lists when auth loaders add runtime fetch options", () => + it.instance( + "serves provider lists when auth loaders add runtime fetch options", Effect.gen(function* () { - const fs = yield* FileSystem.FileSystem - const path = yield* Path.Path - const dir = yield* fs.makeTempDirectoryScoped({ prefix: "opencode-test-" }) - const previous = process.env.OPENCODE_AUTH_CONTENT - - yield* fs.writeFileString( - path.join(dir, "opencode.json"), - JSON.stringify({ $schema: "https://opencode.ai/config.json", formatter: false, lsp: false }), - ) - yield* writeFunctionOptionsPlugin(dir) - yield* Effect.sync(() => { - process.env.OPENCODE_AUTH_CONTENT = JSON.stringify({ + const instance = yield* TestInstance + yield* writeFunctionOptionsPlugin(instance.directory) + yield* setEnvScoped( + "OPENCODE_AUTH_CONTENT", + JSON.stringify({ google: { type: "oauth", refresh: "dummy", access: "dummy", expires: 9999999999999 }, - }) - }) - yield* Effect.addFinalizer(() => - Effect.sync(() => { - if (previous === undefined) delete process.env.OPENCODE_AUTH_CONTENT - if (previous !== undefined) process.env.OPENCODE_AUTH_CONTENT = previous }), ) - const headers = { "x-opencode-directory": dir } + const headers = { "x-opencode-directory": instance.directory } const providerResponse = yield* Effect.promise(() => Promise.resolve(app().request("/provider", { headers }))) const configResponse = yield* Effect.promise(() => Promise.resolve(app().request("/config/providers", { headers })), @@ -291,21 +269,16 @@ describe("provider HttpApi", () => { expect(hasNonZeroModelCost(providerBody, "all", "google")).toBe(true) expect(hasNonZeroModelCost(configBody, "providers", "google")).toBe(true) }), + projectOptions, ) - it.live("keeps provider.models hook input mutations out of provider state", () => + it.instance( + "keeps provider.models hook input mutations out of provider state", Effect.gen(function* () { - const fs = yield* FileSystem.FileSystem - const path = yield* Path.Path - const dir = yield* fs.makeTempDirectoryScoped({ prefix: "opencode-test-" }) - - yield* fs.writeFileString( - path.join(dir, "opencode.json"), - JSON.stringify({ $schema: "https://opencode.ai/config.json", formatter: false, lsp: false }), - ) - yield* writeProviderModelsMutationPlugin(dir) + const instance = yield* TestInstance + yield* writeProviderModelsMutationPlugin(instance.directory) - const headers = { "x-opencode-directory": dir } + const headers = { "x-opencode-directory": instance.directory } const providerResponse = yield* Effect.promise(() => Promise.resolve(app().request("/provider", { headers }))) const configResponse = yield* Effect.promise(() => Promise.resolve(app().request("/config/providers", { headers })), @@ -320,5 +293,6 @@ describe("provider HttpApi", () => { expect(hasProviderMutationMarker(configBody, "providers", "google")).toBe(false) expect(hasNonZeroModelCost(providerBody, "all", "google")).toBe(true) }), + projectOptions, ) }) diff --git a/packages/opencode/test/server/httpapi-sdk.test.ts b/packages/opencode/test/server/httpapi-sdk.test.ts index 0201f98c25d4..a76877a0bf68 100644 --- a/packages/opencode/test/server/httpapi-sdk.test.ts +++ b/packages/opencode/test/server/httpapi-sdk.test.ts @@ -2,11 +2,14 @@ import { afterEach, describe, expect } from "bun:test" import { ConfigProvider, Effect, Layer } from "effect" import type * as Scope from "effect/Scope" import { HttpRouter } from "effect/unstable/http" +import { ChildProcessSpawner } from "effect/unstable/process" +import { AppFileSystem } from "@opencode-ai/core/filesystem" +import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner" import { Flag } from "@opencode-ai/core/flag/flag" import { createOpencodeClient } from "@opencode-ai/sdk/v2" import { validateSession } from "../../src/cli/cmd/tui/validate-session" -import { Instance } from "../../src/project/instance" -import { WithInstance } from "../../src/project/with-instance" +import { InstanceBootstrap } from "../../src/project/bootstrap-service" +import { InstanceStore } from "../../src/project/instance-store" import { ExperimentalHttpApiServer } from "../../src/server/routes/instance/httpapi/server" import { Server } from "../../src/server/server" import { MessageID, PartID, SessionID } from "../../src/session/schema" @@ -18,8 +21,17 @@ import { errorMessage } from "../../src/util/error" import { TestLLMServer } from "../lib/llm-server" import path from "path" import { resetDatabase } from "../fixture/db" -import { disposeAllInstances, tmpdir } from "../fixture/fixture" -import { it } from "../lib/effect" +import { disposeAllInstances, TestInstance, tmpdirScoped } from "../fixture/fixture" +import { testEffect } from "../lib/effect" + +const noopBootstrap = Layer.succeed(InstanceBootstrap.Service, InstanceBootstrap.Service.of({ run: Effect.void })) +const it = testEffect( + Layer.mergeAll( + AppFileSystem.defaultLayer, + CrossSpawnSpawner.defaultLayer, + InstanceStore.defaultLayer.pipe(Layer.provide(noopBootstrap)), + ), +) const original = { OPENCODE_SERVER_PASSWORD: Flag.OPENCODE_SERVER_PASSWORD, @@ -32,6 +44,8 @@ type SdkResult = { response: Response; data?: unknown; error?: unknown } type Captured = { status: number; data?: unknown; error?: unknown } type ProjectFixture = { sdk: Sdk; directory: string } type LlmProjectFixture = ProjectFixture & { llm: TestLLMServer["Service"] } +type TestServices = AppFileSystem.Service | ChildProcessSpawner.ChildProcessSpawner | InstanceStore.Service +type TestScope = Scope.Scope | TestServices function app(serverPath: ServerPath, input?: { password?: string; username?: string }) { Flag.OPENCODE_SERVER_PASSWORD = input?.password @@ -149,12 +163,27 @@ function expectStatus(request: () => Promise<{ response: Response }>, status: nu ) } -function firstEvent(open: () => Promise<{ stream: AsyncIterator }>) { - return Effect.acquireRelease(call(open), (events) => - call(async () => void (await events.stream.return?.(undefined))).pipe(Effect.ignore), +function firstEvent(open: (signal: AbortSignal) => Promise<{ stream: AsyncIterator }>) { + return Effect.acquireRelease( + Effect.sync(() => new AbortController()), + (controller) => Effect.sync(() => controller.abort()), ).pipe( - Effect.flatMap((events) => call(() => events.stream.next())), - Effect.map((result) => result.value), + Effect.flatMap((controller) => + Effect.acquireRelease( + call(() => open(controller.signal)), + (events) => call(async () => void (await events.stream.return?.(undefined))).pipe(Effect.ignore), + ).pipe( + Effect.flatMap((events) => + call(() => events.stream.next()).pipe( + Effect.timeoutOrElse({ + duration: "1 second", + orElse: () => Effect.fail(new Error("timed out waiting for SDK event")), + }), + ), + ), + Effect.map((result) => result.value), + ), + ), ) } @@ -188,11 +217,32 @@ function resetState() { }) } -function httpapi(name: string, effect: Effect.Effect) { +function httpapi(name: string, effect: Effect.Effect) { it.live(name, effect) } -function serverPathParity(name: string, scenario: (serverPath: ServerPath) => Effect.Effect) { +function httpapiInstance( + name: string, + options: { + serverPath: ServerPath + git?: boolean + config?: Partial + setup?: (dir: string) => Effect.Effect + }, + run: (input: ProjectFixture) => Effect.Effect, +) { + it.instance( + name, + Effect.gen(function* () { + const instance = yield* TestInstance + yield* options.setup?.(instance.directory) ?? Effect.void + return yield* run({ sdk: client(options.serverPath, instance.directory), directory: instance.directory }) + }), + { git: options.git ?? true, config: { formatter: false, lsp: false, ...options.config } }, + ) +} + +function serverPathParity(name: string, scenario: (serverPath: ServerPath) => Effect.Effect) { it.live( name, Effect.gen(function* () { @@ -204,35 +254,43 @@ function serverPathParity(name: string, scenario: (serverPath: ServerPath) ) } -function withProject( +function withProject( serverPath: ServerPath, - options: { git?: boolean; config?: Partial; setup?: (dir: string) => Effect.Effect }, - run: (input: ProjectFixture) => Effect.Effect, + options: { + git?: boolean + config?: Partial + setup?: (dir: string) => Effect.Effect + }, + run: (input: ProjectFixture) => Effect.Effect, ) { - return Effect.acquireRelease( - call(() => tmpdir({ git: options.git ?? true, config: { formatter: false, lsp: false, ...options.config } })), - (tmp) => call(() => tmp[Symbol.asyncDispose]()).pipe(Effect.ignore), - ).pipe( - Effect.tap((tmp) => options.setup?.(tmp.path) ?? Effect.void), - Effect.flatMap((tmp) => run({ sdk: client(serverPath, tmp.path), directory: tmp.path })), - ) + return Effect.gen(function* () { + const directory = yield* tmpdirScoped({ + git: options.git ?? true, + config: { formatter: false, lsp: false, ...options.config }, + }) + yield* options.setup?.(directory) ?? Effect.void + return yield* run({ sdk: client(serverPath, directory), directory }) + }) } -function withStandardProject(serverPath: ServerPath, run: (input: ProjectFixture) => Effect.Effect) { +function withStandardProject( + serverPath: ServerPath, + run: (input: ProjectFixture) => Effect.Effect, +) { return withProject(serverPath, { setup: writeStandardFiles }, run) } -function withFakeLlm(serverPath: ServerPath, run: (input: LlmProjectFixture) => Effect.Effect) { +function withFakeLlm(serverPath: ServerPath, run: (input: LlmProjectFixture) => Effect.Effect) { return Effect.gen(function* () { const llm = yield* TestLLMServer return yield* withProject(serverPath, { config: providerConfig(llm.url) }, (input) => run({ ...input, llm })) }).pipe(Effect.provide(TestLLMServer.layer)) } -function withFakeLlmProject( +function withFakeLlmProject( serverPath: ServerPath, - options: { setup?: (dir: string) => Effect.Effect }, - run: (input: LlmProjectFixture) => Effect.Effect, + options: { setup?: (dir: string) => Effect.Effect }, + run: (input: LlmProjectFixture) => Effect.Effect, ) { return Effect.gen(function* () { const llm = yield* TestLLMServer @@ -248,15 +306,17 @@ function withFakeLlmProject( } function writeStandardFiles(dir: string) { - return Effect.all([ - call(() => Bun.write(path.join(dir, "hello.txt"), "hello")), - call(() => Bun.write(path.join(dir, "needle.ts"), "export const needle = 'sdk-parity'\n")), - ]).pipe(Effect.asVoid) + return AppFileSystem.Service.use((fs) => + Effect.all([ + fs.writeWithDirs(path.join(dir, "hello.txt"), "hello"), + fs.writeWithDirs(path.join(dir, "needle.ts"), "export const needle = 'sdk-parity'\n"), + ]).pipe(Effect.asVoid), + ) } function writeProjectSkill(dir: string) { - return call(() => - Bun.write( + return AppFileSystem.Service.use((fs) => + fs.writeWithDirs( path.join(dir, ".opencode", "skills", "project-rest-skill", "SKILL.md"), `--- name: project-rest-skill @@ -266,40 +326,36 @@ description: A project skill visible to REST API prompts. # Project REST Skill `, ), - ).pipe(Effect.asVoid) + ) } function seedMessage(directory: string, sessionID: string) { const id = SessionID.make(sessionID) - return call( - async () => - await WithInstance.provide({ - directory, - fn: () => - Effect.runPromise( - SessionNs.Service.use((svc) => - Effect.gen(function* () { - const message = yield* svc.updateMessage({ - id: MessageID.ascending(), - sessionID: id, - role: "user", - time: { created: Date.now() }, - agent: "test", - model: { providerID: ProviderID.make("test"), modelID: ModelID.make("test") }, - tools: {}, - } satisfies MessageV2.User) - const part = yield* svc.updatePart({ - id: PartID.ascending(), - sessionID: id, - messageID: message.id, - type: "text", - text: "seeded message", - }) - return { message, part } - }), - ).pipe(Effect.provide(SessionNs.defaultLayer)), - ), - }), + return InstanceStore.Service.use((store) => + store.provide( + { directory }, + SessionNs.Service.use((svc) => + Effect.gen(function* () { + const message = yield* svc.updateMessage({ + id: MessageID.ascending(), + sessionID: id, + role: "user", + time: { created: Date.now() }, + agent: "test", + model: { providerID: ProviderID.make("test"), modelID: ModelID.make("test") }, + tools: {}, + } satisfies MessageV2.User) + const part = yield* svc.updatePart({ + id: PartID.ascending(), + sessionID: id, + messageID: message.id, + type: "text", + text: "seeded message", + }) + return { message, part } + }), + ).pipe(Effect.provide(SessionNs.defaultLayer)), + ), ) } @@ -320,7 +376,7 @@ describe("HttpApi SDK", () => { expect(health.response.status).toBe(200) expect(health.data).toMatchObject({ healthy: true }) - expect(yield* firstEvent(() => sdk.global.event({ signal: AbortSignal.timeout(1_000) }))).toMatchObject({ + expect(yield* firstEvent((signal) => sdk.global.event({ signal }))).toMatchObject({ payload: { type: "server.connected" }, }) expect(log.response.status).toBe(200) @@ -329,9 +385,10 @@ describe("HttpApi SDK", () => { }), ) - httpapi( + httpapiInstance( "uses the generated SDK for safe instance routes", - withProject("raw", { git: false, setup: writeStandardFiles }, ({ sdk }) => + { serverPath: "raw", git: false, setup: writeStandardFiles }, + ({ sdk }) => Effect.gen(function* () { const file = yield* call(() => sdk.file.read({ path: "hello.txt" })) const session = yield* call(() => sdk.session.create({ title: "sdk" })) @@ -351,7 +408,6 @@ describe("HttpApi SDK", () => { expectStatus(() => sdk.find.files({ query: "hello", limit: 10 }), 200), ]) }), - ), ) serverPathParity("matches generated SDK global and control behavior", (serverPath) => @@ -370,14 +426,14 @@ describe("HttpApi SDK", () => { ) serverPathParity("matches generated SDK global event stream", (serverPath) => - firstEvent(() => client(serverPath).global.event({ signal: AbortSignal.timeout(1_000) })).pipe( + firstEvent((signal) => client(serverPath).global.event({ signal })).pipe( Effect.map((event) => ({ type: record(record(event).payload).type })), ), ) serverPathParity("matches generated SDK instance event stream", (serverPath) => withStandardProject(serverPath, ({ sdk }) => - firstEvent(() => sdk.event.subscribe(undefined, { signal: AbortSignal.timeout(1_000) })).pipe( + firstEvent((signal) => sdk.event.subscribe(undefined, { signal })).pipe( Effect.map((event) => ({ type: record(record(event).payload).type })), ), ), @@ -431,9 +487,10 @@ describe("HttpApi SDK", () => { ), ) - httpapi( + httpapiInstance( "uses generated SDK basic auth behavior", - withStandardProject("raw", ({ directory }) => + { serverPath: "raw", setup: writeStandardFiles }, + ({ directory }) => Effect.gen(function* () { const missing = yield* capture(() => client("raw", directory, { password: "secret" }).file.read({ path: "hello.txt" }), @@ -456,7 +513,6 @@ describe("HttpApi SDK", () => { content: record(good.data).content, } }), - ), ) serverPathParity("matches generated SDK instance read routes", (serverPath) => @@ -687,7 +743,7 @@ describe("HttpApi SDK", () => { ) httpapi( - "includes project skills in REST API async prompt context", + "includes project skills in REST API prompt context", withFakeLlmProject("default", { setup: writeProjectSkill }, ({ sdk, llm }) => Effect.gen(function* () { yield* llm.text("skill context ok", { usage: { input: 11, output: 7 } }) @@ -699,18 +755,17 @@ describe("HttpApi SDK", () => { ) const sessionID = String(record(session.data).id) const prompt = yield* capture(() => - sdk.session.promptAsync({ + sdk.session.prompt({ sessionID, agent: "build", model: { providerID: "test", modelID: "test-model" }, parts: [{ type: "text", text: "hello skill context" }], }), ) - yield* llm.wait(1) const inputs = yield* llm.inputs expect(session.status).toBe(200) - expect(prompt.status).toBe(204) + expect(prompt.status).toBe(200) expect(JSON.stringify(inputs[0])).toContain("project-rest-skill") }), ), diff --git a/packages/opencode/test/server/httpapi-session.test.ts b/packages/opencode/test/server/httpapi-session.test.ts index 6204329d0e12..8cffb6e82571 100644 --- a/packages/opencode/test/server/httpapi-session.test.ts +++ b/packages/opencode/test/server/httpapi-session.test.ts @@ -8,8 +8,8 @@ import type { WorkspaceAdapter } from "../../src/control-plane/types" import { Workspace } from "../../src/control-plane/workspace" import { PermissionID } from "../../src/permission/schema" import { ModelID, ProviderID } from "../../src/provider/schema" -import { WithInstance } from "../../src/project/with-instance" import { InstanceBootstrap } from "../../src/project/bootstrap" +import { InstanceBootstrap as InstanceBootstrapService } from "../../src/project/bootstrap-service" import { InstanceStore } from "../../src/project/instance-store" import { Project } from "../../src/project/project" import { Server } from "../../src/server/server" @@ -20,14 +20,13 @@ import { MessageV2 } from "../../src/session/message-v2" import { Database } from "@/storage/db" import { SessionMessageTable, SessionTable } from "@/session/session.sql" import { SessionMessage } from "../../src/v2/session-message" -import { ModelV2 } from "@opencode-ai/core/model" -import { ProviderV2 } from "@opencode-ai/core/provider" +import { Modelv2 } from "../../src/v2/model" import * as DateTime from "effect/DateTime" import * as Log from "@opencode-ai/core/util/log" import { eq } from "drizzle-orm" import { resetDatabase } from "../fixture/db" -import { disposeAllInstances, tmpdir } from "../fixture/fixture" -import { it } from "../lib/effect" +import { disposeAllInstances, TestInstance } from "../fixture/fixture" +import { testEffect } from "../lib/effect" void Log.init({ print: false }) @@ -36,58 +35,45 @@ const workspaceLayer = Workspace.defaultLayer.pipe( Layer.provide(InstanceStore.defaultLayer), Layer.provide(InstanceBootstrap.defaultLayer), ) +const instanceStoreLayer = InstanceStore.defaultLayer.pipe( + Layer.provide( + Layer.succeed(InstanceBootstrapService.Service, InstanceBootstrapService.Service.of({ run: Effect.void })), + ), +) +const it = testEffect(Layer.mergeAll(instanceStoreLayer, Project.defaultLayer, Session.defaultLayer, workspaceLayer)) function app() { return Server.Default().app } -function runSession(fx: Effect.Effect) { - return Effect.runPromise(fx.pipe(Effect.provide(Session.defaultLayer))) -} - function pathFor(path: string, params: Record) { return Object.entries(params).reduce((result, [key, value]) => result.replace(`:${key}`, value), path) } -function createSession(directory: string, input?: Session.CreateInput) { - return Effect.promise( - async () => - await WithInstance.provide({ - directory, - fn: () => runSession(Session.Service.use((svc) => svc.create(input))), - }), - ) +function createSession(input?: Session.CreateInput) { + return Session.Service.use((svc) => svc.create(input)) } -function createTextMessage(directory: string, sessionID: SessionIDType, text: string) { - return Effect.promise( - async () => - await WithInstance.provide({ - directory, - fn: () => - runSession( - Effect.gen(function* () { - const svc = yield* Session.Service - const info = yield* svc.updateMessage({ - id: MessageID.ascending(), - role: "user", - sessionID, - agent: "build", - model: { providerID: ProviderID.make("test"), modelID: ModelID.make("test") }, - time: { created: Date.now() }, - }) - const part = yield* svc.updatePart({ - id: PartID.ascending(), - sessionID, - messageID: info.id, - type: "text", - text, - }) - return { info, part } - }), - ), - }), - ) +function createTextMessage(sessionID: SessionIDType, text: string) { + return Effect.gen(function* () { + const svc = yield* Session.Service + const info = yield* svc.updateMessage({ + id: MessageID.ascending(), + role: "user", + sessionID, + agent: "build", + model: { providerID: ProviderID.make("test"), modelID: ModelID.make("test") }, + time: { created: Date.now() }, + }) + const part = yield* svc.updatePart({ + id: PartID.ascending(), + sessionID, + messageID: info.id, + type: "text", + text, + }) + return { info, part } + }) } const localAdapter = (directory: string): WorkspaceAdapter => ({ @@ -102,18 +88,88 @@ const localAdapter = (directory: string): WorkspaceAdapter => ({ }) const createLocalWorkspace = (input: { projectID: Project.Info["id"]; type: string; directory: string }) => - Effect.gen(function* () { - registerAdapter(input.projectID, input.type, localAdapter(input.directory)) - return yield* Workspace.Service.use((svc) => - svc.create({ - type: input.type, - branch: null, - extra: null, - projectID: input.projectID, - }), - ).pipe(Effect.provide(workspaceLayer)) + Effect.acquireRelease( + Effect.gen(function* () { + registerAdapter(input.projectID, input.type, localAdapter(input.directory)) + return yield* Workspace.Service.use((svc) => + svc.create({ + type: input.type, + branch: null, + extra: null, + projectID: input.projectID, + }), + ) + }), + (info) => Workspace.Service.use((svc) => svc.remove(info.id)).pipe(Effect.ignore), + ) + +const insertLegacyAssistantMessage = (sessionID: SessionIDType) => + Effect.sync(() => { + const message = new SessionMessage.Assistant({ + id: SessionMessage.ID.create(), + type: "assistant", + agent: "build", + model: { + id: Modelv2.ID.make("model"), + providerID: Modelv2.ProviderID.make("provider"), + variant: Modelv2.VariantID.make("default"), + }, + time: { created: DateTime.makeUnsafe(1) }, + content: [], + }) + Database.use((db) => + db + .insert(SessionMessageTable) + .values([ + { + id: message.id, + session_id: sessionID, + type: message.type, + time_created: 1, + data: { + time: { created: 1 }, + agent: message.agent, + model: message.model, + content: message.content, + } as NonNullable<(typeof SessionMessageTable.$inferInsert)["data"]>, + }, + ]) + .run(), + ) }) +const setLegacySummaryDiff = (sessionID: SessionIDType) => + Effect.sync(() => + Database.use((db) => + db + .update(SessionTable) + .set({ + summary_additions: 1, + summary_deletions: 0, + summary_files: 1, + summary_diffs: [{ additions: 1, deletions: 0 }], + }) + .where(eq(SessionTable.id, sessionID)) + .run(), + ), + ) + +const getWorkspaceID = (sessionID: SessionIDType) => + Effect.sync(() => + Database.use((db) => + db + .select({ workspaceID: SessionTable.workspace_id }) + .from(SessionTable) + .where(eq(SessionTable.id, sessionID)) + .get(), + ), + ) + +const clearSessionPath = (sessionID: SessionIDType) => + Effect.sync(() => + Database.use((db) => db.update(SessionTable).set({ path: null }).where(eq(SessionTable.id, sessionID)).run()), + ) + function request(path: string, init?: RequestInit) { return Effect.promise(async () => app().request(path, init)) } @@ -133,16 +189,6 @@ function requestJson(path: string, init?: RequestInit) { return request(path, init).pipe(Effect.flatMap(json)) } -function withTmp( - options: Parameters[0], - fn: (tmp: Awaited>) => Effect.Effect, -) { - return Effect.acquireRelease( - Effect.promise(() => tmpdir(options)), - (tmp) => Effect.promise(() => tmp[Symbol.asyncDispose]()), - ).pipe(Effect.flatMap(fn)) -} - afterEach(async () => { Flag.OPENCODE_EXPERIMENTAL_WORKSPACES = originalWorkspaces await disposeAllInstances() @@ -150,11 +196,12 @@ afterEach(async () => { }) describe("session HttpApi", () => { - it.live( + it.instance( "returns declared not found errors for read routes", - withTmp({ git: true, config: { formatter: false, lsp: false } }, (tmp) => + () => Effect.gen(function* () { - const headers = { "x-opencode-directory": tmp.path } + const test = yield* TestInstance + const headers = { "x-opencode-directory": test.directory } const missingSession = SessionID.descending() const missingSessionBody = { name: "NotFoundError", @@ -176,7 +223,7 @@ describe("session HttpApi", () => { expect(remove.status).toBe(404) expect(yield* responseJson(remove)).toEqual(missingSessionBody) - const session = yield* createSession(tmp.path, { title: "missing message" }) + const session = yield* createSession({ title: "missing message" }) const missingMessage = MessageID.ascending() const message = yield* request( pathFor(SessionPaths.message, { sessionID: session.id, messageID: missingMessage }), @@ -188,18 +235,19 @@ describe("session HttpApi", () => { data: { message: `Message not found: ${missingMessage}` }, }) }), - ), + { git: true, config: { formatter: false, lsp: false } }, ) - it.live( + it.instance( "serves read routes", - withTmp({ git: true, config: { formatter: false, lsp: false } }, (tmp) => + () => Effect.gen(function* () { - const headers = { "x-opencode-directory": tmp.path } - const parent = yield* createSession(tmp.path, { title: "parent" }) - const child = yield* createSession(tmp.path, { title: "child", parentID: parent.id }) - const message = yield* createTextMessage(tmp.path, parent.id, "hello") - yield* createTextMessage(tmp.path, parent.id, "world") + const test = yield* TestInstance + const headers = { "x-opencode-directory": test.directory } + const parent = yield* createSession({ title: "parent" }) + const child = yield* createSession({ title: "child", parentID: parent.id }) + const message = yield* createTextMessage(parent.id, "hello") + yield* createTextMessage(parent.id, "world") const listed = yield* requestJson(`${SessionPaths.list}?roots=true`, { headers }) expect(listed.map((item) => item.id)).toContain(parent.id) @@ -251,88 +299,40 @@ describe("session HttpApi", () => { ), ).toMatchObject({ info: { id: message.info.id } }) - yield* Effect.promise(() => - WithInstance.provide({ - directory: tmp.path, - fn: async () => { - const message = new SessionMessage.Assistant({ - id: SessionMessage.ID.create(), - type: "assistant", - agent: "build", - model: { - id: ModelV2.ID.make("model"), - providerID: ProviderV2.ID.make("provider"), - variant: ModelV2.VariantID.make("default"), - }, - time: { created: DateTime.makeUnsafe(1) }, - content: [], - }) - Database.use((db) => - db - .insert(SessionMessageTable) - .values([ - { - id: message.id, - session_id: parent.id, - type: message.type, - time_created: 1, - data: { - time: { created: 1 }, - agent: message.agent, - model: message.model, - content: message.content, - } as NonNullable<(typeof SessionMessageTable.$inferInsert)["data"]>, - }, - ]) - .run(), - ) - }, - }), - ) + yield* insertLegacyAssistantMessage(parent.id) expect( (yield* requestJson<{ items: SessionMessage.Message[] }>(`/api/session/${parent.id}/message`, { headers })) .items, ).toMatchObject([{ type: "assistant" }]) }), - ), + { git: true, config: { formatter: false, lsp: false } }, ) - it.live( + it.instance( "serves sessions with migrated summary diffs missing file details", - withTmp({ git: true, config: { formatter: false, lsp: false } }, (tmp) => + () => Effect.gen(function* () { - const session = yield* createSession(tmp.path, { title: "legacy diff" }) - yield* Effect.sync(() => - Database.use((db) => - db - .update(SessionTable) - .set({ - summary_additions: 1, - summary_deletions: 0, - summary_files: 1, - summary_diffs: [{ additions: 1, deletions: 0 }], - }) - .where(eq(SessionTable.id, session.id)) - .run(), - ), - ) + const test = yield* TestInstance + const session = yield* createSession({ title: "legacy diff" }) + yield* setLegacySummaryDiff(session.id) const response = yield* request(pathFor(SessionPaths.get, { sessionID: session.id }), { - headers: { "x-opencode-directory": tmp.path }, + headers: { "x-opencode-directory": test.directory }, }) expect(response.status).toBe(200) expect((yield* json(response)).summary?.diffs).toEqual([{ additions: 1, deletions: 0 }]) }), - ), + { git: true, config: { formatter: false, lsp: false } }, ) - it.live( + it.instance( "serves lifecycle mutation routes", - withTmp({ git: true, config: { formatter: false, lsp: false, share: "disabled" } }, (tmp) => + () => Effect.gen(function* () { - const headers = { "x-opencode-directory": tmp.path, "content-type": "application/json" } + const test = yield* TestInstance + const headers = { "x-opencode-directory": test.directory, "content-type": "application/json" } const createdEmpty = yield* requestJson(SessionPaths.create, { method: "POST", @@ -374,56 +374,48 @@ describe("session HttpApi", () => { }), ).toBe(true) }), - ), + { git: true, config: { formatter: false, lsp: false, share: "disabled" } }, ) - it.live( + it.instance( "persists selected workspace id when creating a session", - withTmp({ git: true, config: { formatter: false, lsp: false, share: "disabled" } }, (tmp) => + () => Effect.gen(function* () { + const test = yield* TestInstance Flag.OPENCODE_EXPERIMENTAL_WORKSPACES = true - const project = yield* Project.use.fromDirectory(tmp.path).pipe(Effect.provide(Project.defaultLayer)) + const project = yield* Project.use.fromDirectory(test.directory) const workspace = yield* createLocalWorkspace({ projectID: project.project.id, type: "session-create-workspace", - directory: path.join(tmp.path, ".workspace-local"), + directory: path.join(test.directory, ".workspace-local"), }) const created = yield* requestJson(`${SessionPaths.create}?workspace=${workspace.id}`, { method: "POST", - headers: { "x-opencode-directory": tmp.path, "content-type": "application/json" }, + headers: { "x-opencode-directory": test.directory, "content-type": "application/json" }, body: JSON.stringify({ title: "workspace session" }), }) const messages = yield* request( `${pathFor(SessionPaths.messages, { sessionID: created.id })}?workspace=${workspace.id}`, { - headers: { "x-opencode-directory": tmp.path }, + headers: { "x-opencode-directory": test.directory }, }, ) expect(created).toMatchObject({ id: created.id, workspaceID: workspace.id }) expect(messages.status).toBe(200) - expect( - yield* Effect.sync(() => - Database.use((db) => - db - .select({ workspaceID: SessionTable.workspace_id }) - .from(SessionTable) - .where(eq(SessionTable.id, created.id)) - .get(), - ), - ), - ).toEqual({ workspaceID: workspace.id }) + expect(yield* getWorkspaceID(created.id)).toEqual({ workspaceID: workspace.id }) }), - ), + { git: true, config: { formatter: false, lsp: false, share: "disabled" } }, ) - it.live( + it.instance( "validates archived timestamp values", - withTmp({ git: true, config: { formatter: false, lsp: false } }, (tmp) => + () => Effect.gen(function* () { - const headers = { "x-opencode-directory": tmp.path, "content-type": "application/json" } - const session = yield* createSession(tmp.path, { title: "archived" }) + const test = yield* TestInstance + const headers = { "x-opencode-directory": test.directory, "content-type": "application/json" } + const session = yield* createSession({ title: "archived" }) const body = JSON.stringify({ time: { archived: -1 } }) const response = yield* request(pathFor(SessionPaths.update, { sessionID: session.id }), { @@ -434,30 +426,35 @@ describe("session HttpApi", () => { expect(response.status).toBe(200) expect((yield* json(response)).time.archived).toBe(-1) }), - ), + { git: true, config: { formatter: false, lsp: false } }, ) - it.live( + it.instance( "uses project-scoped path and directory precedence", - withTmp({ git: true, config: { formatter: false, lsp: false } }, (tmp) => + () => Effect.gen(function* () { - const currentDir = path.join(tmp.path, "packages", "opencode", "src") + const test = yield* TestInstance + const currentDir = path.join(test.directory, "packages", "opencode", "src") yield* Effect.promise(() => mkdir(currentDir, { recursive: true })) - const pathSession = yield* createSession(currentDir) - const pathlessSession = yield* createSession(currentDir) - yield* Effect.sync(() => - Database.use((db) => - db.update(SessionTable).set({ path: null }).where(eq(SessionTable.id, pathlessSession.id)).run(), - ), + const store = yield* InstanceStore.Service + const { pathSession, pathlessSession } = yield* store.provide( + { directory: currentDir }, + Effect.gen(function* () { + return { + pathSession: yield* createSession(), + pathlessSession: yield* createSession(), + } + }).pipe(Effect.provideService(TestInstance, { directory: currentDir }), Effect.provide(Session.defaultLayer)), ) + yield* clearSessionPath(pathlessSession.id) const query = new URLSearchParams({ scope: "project", path: "packages/opencode/src", directory: currentDir, }) - const headers = { "x-opencode-directory": tmp.path } + const headers = { "x-opencode-directory": test.directory } const sessions = (yield* json( yield* request(`${SessionPaths.list}?${query}`, { headers }), )).map((item) => item.id) @@ -465,17 +462,18 @@ describe("session HttpApi", () => { expect(sessions).toContain(pathSession.id) expect(sessions).not.toContain(pathlessSession.id) }), - ), + { git: true, config: { formatter: false, lsp: false } }, ) - it.live( + it.instance( "serves paginated message link headers", - withTmp({ git: true, config: { formatter: false, lsp: false } }, (tmp) => + () => Effect.gen(function* () { - const headers = { "x-opencode-directory": tmp.path } - const session = yield* createSession(tmp.path, { title: "messages" }) - yield* createTextMessage(tmp.path, session.id, "first") - yield* createTextMessage(tmp.path, session.id, "second") + const test = yield* TestInstance + const headers = { "x-opencode-directory": test.directory } + const session = yield* createSession({ title: "messages" }) + yield* createTextMessage(session.id, "first") + yield* createTextMessage(session.id, "second") const route = `${pathFor(SessionPaths.messages, { sessionID: session.id })}?limit=1` const response = yield* request(route, { headers }) @@ -484,17 +482,18 @@ describe("session HttpApi", () => { expect(response.headers.get("link")).toContain("limit=1") expect(response.headers.get("access-control-expose-headers")?.toLowerCase()).toContain("x-next-cursor") }), - ), + { git: true, config: { formatter: false, lsp: false } }, ) - it.live( + it.instance( "serves message mutation routes", - withTmp({ git: true, config: { formatter: false, lsp: false } }, (tmp) => + () => Effect.gen(function* () { - const headers = { "x-opencode-directory": tmp.path, "content-type": "application/json" } - const session = yield* createSession(tmp.path, { title: "messages" }) - const first = yield* createTextMessage(tmp.path, session.id, "first") - const second = yield* createTextMessage(tmp.path, session.id, "second") + const test = yield* TestInstance + const headers = { "x-opencode-directory": test.directory, "content-type": "application/json" } + const session = yield* createSession({ title: "messages" }) + const first = yield* createTextMessage(session.id, "first") + const second = yield* createTextMessage(session.id, "second") const updated = yield* requestJson( pathFor(SessionPaths.updatePart, { @@ -528,15 +527,16 @@ describe("session HttpApi", () => { ), ).toBe(true) }), - ), + { git: true, config: { formatter: false, lsp: false } }, ) - it.live( + it.instance( "serves remaining non-LLM session mutation routes", - withTmp({ git: true, config: { formatter: false, lsp: false } }, (tmp) => + () => Effect.gen(function* () { - const headers = { "x-opencode-directory": tmp.path, "content-type": "application/json" } - const session = yield* createSession(tmp.path, { title: "remaining" }) + const test = yield* TestInstance + const headers = { "x-opencode-directory": test.directory, "content-type": "application/json" } + const session = yield* createSession({ title: "remaining" }) expect( yield* requestJson(pathFor(SessionPaths.revert, { sessionID: session.id }), { @@ -567,6 +567,6 @@ describe("session HttpApi", () => { ), ).toBe(true) }), - ), + { git: true, config: { formatter: false, lsp: false } }, ) }) diff --git a/packages/opencode/test/server/httpapi-ui.test.ts b/packages/opencode/test/server/httpapi-ui.test.ts index 256c4501939f..74fc230042b4 100644 --- a/packages/opencode/test/server/httpapi-ui.test.ts +++ b/packages/opencode/test/server/httpapi-ui.test.ts @@ -1,5 +1,5 @@ import { createHash } from "node:crypto" -import { afterEach, describe, expect, test } from "bun:test" +import { describe, expect } from "bun:test" import { Flag } from "@opencode-ai/core/flag/flag" import * as Log from "@opencode-ai/core/util/log" import { ConfigProvider, Effect, Layer } from "effect" @@ -18,24 +18,33 @@ import { authorizationRouterMiddleware } from "../../src/server/routes/instance/ import { ExperimentalHttpApiServer } from "../../src/server/routes/instance/httpapi/server" import { serveEmbeddedUIEffect, serveUIEffect } from "../../src/server/shared/ui" import { Server } from "../../src/server/server" +import { testEffect } from "../lib/effect" void Log.init({ print: false }) -const original = { - OPENCODE_DISABLE_EMBEDDED_WEB_UI: Flag.OPENCODE_DISABLE_EMBEDDED_WEB_UI, - OPENCODE_SERVER_PASSWORD: Flag.OPENCODE_SERVER_PASSWORD, - OPENCODE_SERVER_USERNAME: Flag.OPENCODE_SERVER_USERNAME, - envPassword: process.env.OPENCODE_SERVER_PASSWORD, - envUsername: process.env.OPENCODE_SERVER_USERNAME, -} +const testStateLayer = Layer.effectDiscard( + Effect.gen(function* () { + const original = { + OPENCODE_DISABLE_EMBEDDED_WEB_UI: Flag.OPENCODE_DISABLE_EMBEDDED_WEB_UI, + OPENCODE_SERVER_PASSWORD: Flag.OPENCODE_SERVER_PASSWORD, + OPENCODE_SERVER_USERNAME: Flag.OPENCODE_SERVER_USERNAME, + envPassword: process.env.OPENCODE_SERVER_PASSWORD, + envUsername: process.env.OPENCODE_SERVER_USERNAME, + } -afterEach(() => { - Flag.OPENCODE_DISABLE_EMBEDDED_WEB_UI = original.OPENCODE_DISABLE_EMBEDDED_WEB_UI - Flag.OPENCODE_SERVER_PASSWORD = original.OPENCODE_SERVER_PASSWORD - Flag.OPENCODE_SERVER_USERNAME = original.OPENCODE_SERVER_USERNAME - restoreEnv("OPENCODE_SERVER_PASSWORD", original.envPassword) - restoreEnv("OPENCODE_SERVER_USERNAME", original.envUsername) -}) + yield* Effect.addFinalizer(() => + Effect.sync(() => { + Flag.OPENCODE_DISABLE_EMBEDDED_WEB_UI = original.OPENCODE_DISABLE_EMBEDDED_WEB_UI + Flag.OPENCODE_SERVER_PASSWORD = original.OPENCODE_SERVER_PASSWORD + Flag.OPENCODE_SERVER_USERNAME = original.OPENCODE_SERVER_USERNAME + restoreEnv("OPENCODE_SERVER_PASSWORD", original.envPassword) + restoreEnv("OPENCODE_SERVER_USERNAME", original.envUsername) + }), + ) + }), +) + +const it = testEffect(Layer.mergeAll(testStateLayer, AppFileSystem.defaultLayer)) function restoreEnv(key: string, value: string | undefined) { if (value === undefined) { @@ -61,9 +70,13 @@ function app(input?: { password?: string; username?: string }) { ).handler return { request(input: string | URL | Request, init?: RequestInit) { - return handler( - input instanceof Request ? input : new Request(new URL(input, "http://localhost"), init), - ExperimentalHttpApiServer.context, + return Effect.promise(() => + Promise.resolve( + handler( + input instanceof Request ? input : new Request(new URL(input, "http://localhost"), init), + ExperimentalHttpApiServer.context, + ), + ), ) }, } @@ -95,9 +108,13 @@ function uiApp(input?: { password?: string; username?: string; client?: Layer.La ).handler return { request(input: string | URL | Request, init?: RequestInit) { - return handler( - input instanceof Request ? input : new Request(new URL(input, "http://localhost"), init), - ExperimentalHttpApiServer.context, + return Effect.promise(() => + Promise.resolve( + handler( + input instanceof Request ? input : new Request(new URL(input, "http://localhost"), init), + ExperimentalHttpApiServer.context, + ), + ), ) }, } @@ -113,32 +130,38 @@ function httpClient(response: Response, onRequest?: (request: HttpClientRequest. ) } +function responseText(response: Response) { + return Effect.promise(() => response.text()) +} + describe("HttpApi UI fallback", () => { - test("serves the web UI through the experimental backend", async () => { - Flag.OPENCODE_DISABLE_EMBEDDED_WEB_UI = true - let proxiedUrl: string | undefined - - const response = await uiApp({ - client: httpClient( - new Response("opencode", { headers: { "content-type": "text/html" } }), - (request) => { - proxiedUrl = request.url - }, - ), - }).request("/") + it.live("serves the web UI through the experimental backend", () => + Effect.gen(function* () { + Flag.OPENCODE_DISABLE_EMBEDDED_WEB_UI = true + let proxiedUrl: string | undefined + + const response = yield* uiApp({ + client: httpClient( + new Response("opencode", { headers: { "content-type": "text/html" } }), + (request) => { + proxiedUrl = request.url + }, + ), + }).request("/") - expect(response.status).toBe(200) - expect(response.headers.get("content-type")).toContain("text/html") - expect(await response.text()).toBe("opencode") - expect(proxiedUrl).toBe("https://app.opencode.ai/") - }) + expect(response.status).toBe(200) + expect(response.headers.get("content-type")).toContain("text/html") + expect(yield* responseText(response)).toBe("opencode") + expect(proxiedUrl).toBe("https://app.opencode.ai/") + }), + ) - test("strips upstream transfer encoding headers from proxied assets", async () => { - Flag.OPENCODE_DISABLE_EMBEDDED_WEB_UI = true - let proxiedUrl: string | undefined + it.live("strips upstream transfer encoding headers from proxied assets", () => + Effect.gen(function* () { + Flag.OPENCODE_DISABLE_EMBEDDED_WEB_UI = true + let proxiedUrl: string | undefined - const response = await Effect.runPromise( - Effect.gen(function* () { + const response = yield* Effect.gen(function* () { const fs = yield* AppFileSystem.Service const client = yield* HttpClient.HttpClient return yield* serveUIEffect(HttpServerRequest.fromWeb(new Request("http://localhost/assets/app.js")), { @@ -147,48 +170,45 @@ describe("HttpApi UI fallback", () => { }) }).pipe( Effect.provide( - Layer.mergeAll( - AppFileSystem.defaultLayer, - Layer.succeed( - HttpClient.HttpClient, - HttpClient.make((request) => { - proxiedUrl = request.url - return Effect.succeed( - HttpClientResponse.fromWeb( - request, - new Response("console.log('ok')", { - headers: { - "content-encoding": "br", - "content-length": "999", - "content-type": "text/javascript", - }, - }), - ), - ) - }), - ), + Layer.succeed( + HttpClient.HttpClient, + HttpClient.make((request) => { + proxiedUrl = request.url + return Effect.succeed( + HttpClientResponse.fromWeb( + request, + new Response("console.log('ok')", { + headers: { + "content-encoding": "br", + "content-length": "999", + "content-type": "text/javascript", + }, + }), + ), + ) + }), ), ), Effect.map(HttpServerResponse.toWeb), - ), - ) + ) - expect(response.status).toBe(200) - expect(proxiedUrl).toBe("https://app.opencode.ai/assets/app.js") - expect(response.headers.get("content-encoding")).toBeNull() - expect(response.headers.get("content-length")).not.toBe("999") - expect(response.headers.get("content-type")).toContain("text/javascript") - expect(await response.text()).toBe("console.log('ok')") - }) + expect(response.status).toBe(200) + expect(proxiedUrl).toBe("https://app.opencode.ai/assets/app.js") + expect(response.headers.get("content-encoding")).toBeNull() + expect(response.headers.get("content-length")).not.toBe("999") + expect(response.headers.get("content-type")).toContain("text/javascript") + expect(yield* responseText(response)).toBe("console.log('ok')") + }), + ) // Regression for #25698 (Ope): upstream `transfer-encoding: chunked` was // forwarded through the proxy while the proxy itself re-frames the body, // causing browsers to fail with `ERR_INVALID_CHUNKED_ENCODING`. - test("strips upstream transfer-encoding header from proxied assets", async () => { - Flag.OPENCODE_DISABLE_EMBEDDED_WEB_UI = true + it.live("strips upstream transfer-encoding header from proxied assets", () => + Effect.gen(function* () { + Flag.OPENCODE_DISABLE_EMBEDDED_WEB_UI = true - const response = await Effect.runPromise( - Effect.gen(function* () { + const response = yield* Effect.gen(function* () { const fs = yield* AppFileSystem.Service const client = yield* HttpClient.HttpClient return yield* serveUIEffect(HttpServerRequest.fromWeb(new Request("http://localhost/")), { @@ -197,161 +217,166 @@ describe("HttpApi UI fallback", () => { }) }).pipe( Effect.provide( - Layer.mergeAll( - AppFileSystem.defaultLayer, - Layer.succeed( - HttpClient.HttpClient, - HttpClient.make((request) => - Effect.succeed( - HttpClientResponse.fromWeb( - request, - new Response("opencode", { - headers: { - "transfer-encoding": "chunked", - "content-type": "text/html", - }, - }), - ), + Layer.succeed( + HttpClient.HttpClient, + HttpClient.make((request) => + Effect.succeed( + HttpClientResponse.fromWeb( + request, + new Response("opencode", { + headers: { + "transfer-encoding": "chunked", + "content-type": "text/html", + }, + }), ), ), ), ), ), Effect.map(HttpServerResponse.toWeb), - ), - ) - - expect(response.status).toBe(200) - expect(response.headers.get("transfer-encoding")).toBeNull() - expect(await response.text()).toBe("opencode") - }) + ) - test("serves embedded UI assets when Bun can read them but access reports missing", async () => { - let readPath: string | undefined + expect(response.status).toBe(200) + expect(response.headers.get("transfer-encoding")).toBeNull() + expect(yield* responseText(response)).toBe("opencode") + }), + ) - const response = await Effect.runPromise( - Effect.gen(function* () { - const fs = yield* AppFileSystem.Service - return yield* serveEmbeddedUIEffect( - "/assets/app.js", - { - ...fs, - existsSafe: () => Effect.die("embedded UI should not rely on filesystem access checks"), - readFile: (path) => { - readPath = path - return path === "/$bunfs/root/assets/app.js" - ? Effect.succeed(new TextEncoder().encode("console.log('embedded')")) - : Effect.die(`unexpected embedded UI path: ${path}`) - }, + it.live("serves embedded UI assets when Bun can read them but access reports missing", () => + Effect.gen(function* () { + let readPath: string | undefined + + const fs = yield* AppFileSystem.Service + const response = yield* serveEmbeddedUIEffect( + "/assets/app.js", + { + ...fs, + existsSafe: () => Effect.die("embedded UI should not rely on filesystem access checks"), + readFile: (path) => { + readPath = path + return path === "/$bunfs/root/assets/app.js" + ? Effect.succeed(new TextEncoder().encode("console.log('embedded')")) + : Effect.die(`unexpected embedded UI path: ${path}`) }, - { "assets/app.js": "/$bunfs/root/assets/app.js" }, - ) - }).pipe(Effect.provide(AppFileSystem.defaultLayer), Effect.map(HttpServerResponse.toWeb)), - ) - - expect(response.status).toBe(200) - expect(readPath).toBe("/$bunfs/root/assets/app.js") - expect(response.headers.get("content-type")).toContain("text/javascript") - expect(await response.text()).toBe("console.log('embedded')") - }) + }, + { "assets/app.js": "/$bunfs/root/assets/app.js" }, + ).pipe(Effect.map(HttpServerResponse.toWeb)) - test("allows embedded UI terminal wasm and theme preload CSP", async () => { - const script = 'document.documentElement.dataset.theme = "dark"' + expect(response.status).toBe(200) + expect(readPath).toBe("/$bunfs/root/assets/app.js") + expect(response.headers.get("content-type")).toContain("text/javascript") + expect(yield* responseText(response)).toBe("console.log('embedded')") + }), + ) - const response = await Effect.runPromise( - Effect.gen(function* () { - const fs = yield* AppFileSystem.Service - return yield* serveEmbeddedUIEffect( - "/", - { - ...fs, - readFile: (path) => { - return path === "/$bunfs/root/index.html" - ? Effect.succeed( - new TextEncoder().encode( - ``, - ), - ) - : Effect.die(`unexpected embedded UI path: ${path}`) - }, + it.live("allows embedded UI terminal wasm and theme preload CSP", () => + Effect.gen(function* () { + const script = 'document.documentElement.dataset.theme = "dark"' + + const fs = yield* AppFileSystem.Service + const response = yield* serveEmbeddedUIEffect( + "/", + { + ...fs, + readFile: (path) => { + return path === "/$bunfs/root/index.html" + ? Effect.succeed( + new TextEncoder().encode( + ``, + ), + ) + : Effect.die(`unexpected embedded UI path: ${path}`) }, - { "index.html": "/$bunfs/root/index.html" }, - ) - }).pipe(Effect.provide(AppFileSystem.defaultLayer), Effect.map(HttpServerResponse.toWeb)), - ) + }, + { "index.html": "/$bunfs/root/index.html" }, + ).pipe(Effect.map(HttpServerResponse.toWeb)) - const csp = response.headers.get("content-security-policy") ?? "" - expect(csp).toContain("script-src 'self' 'wasm-unsafe-eval'") - expect(csp).toContain(`'sha256-${createHash("sha256").update(script).digest("base64")}'`) - expect(csp).toContain("connect-src * data:") - }) + const csp = response.headers.get("content-security-policy") ?? "" + expect(csp).toContain("script-src 'self' 'wasm-unsafe-eval'") + expect(csp).toContain(`'sha256-${createHash("sha256").update(script).digest("base64")}'`) + expect(csp).toContain("connect-src * data:") + }), + ) - test("keeps matched API routes ahead of the UI fallback", async () => { - const response = await Server.Default().app.request("/session/ses_nope") + it.live("keeps matched API routes ahead of the UI fallback", () => + Effect.gen(function* () { + const response = yield* Effect.promise(() => Promise.resolve(Server.Default().app.request("/session/ses_nope"))) - expect(response.status).toBe(404) - }) + expect(response.status).toBe(404) + }), + ) - test("requires server password for the web UI", async () => { - Flag.OPENCODE_DISABLE_EMBEDDED_WEB_UI = true + it.live("requires server password for the web UI", () => + Effect.gen(function* () { + Flag.OPENCODE_DISABLE_EMBEDDED_WEB_UI = true - const response = await uiApp({ password: "secret", username: "opencode" }).request("/") + const response = yield* uiApp({ password: "secret", username: "opencode" }).request("/") - expect(response.status).toBe(401) - expect(response.headers.get("www-authenticate")).toBe('Basic realm="Secure Area"') - }) + expect(response.status).toBe(401) + expect(response.headers.get("www-authenticate")).toBe('Basic realm="Secure Area"') + }), + ) - test("accepts auth token for the web UI", async () => { - Flag.OPENCODE_DISABLE_EMBEDDED_WEB_UI = true + it.live("accepts auth token for the web UI", () => + Effect.gen(function* () { + Flag.OPENCODE_DISABLE_EMBEDDED_WEB_UI = true - const response = await uiApp({ - password: "secret", - username: "opencode", - client: httpClient(new Response("opencode", { headers: { "content-type": "text/html" } })), - }).request(`/?auth_token=${btoa("opencode:secret")}`) + const response = yield* uiApp({ + password: "secret", + username: "opencode", + client: httpClient(new Response("opencode", { headers: { "content-type": "text/html" } })), + }).request(`/?auth_token=${btoa("opencode:secret")}`) - expect(response.status).toBe(200) - expect(await response.text()).toBe("opencode") - }) + expect(response.status).toBe(200) + expect(yield* responseText(response)).toBe("opencode") + }), + ) - test("accepts basic auth for the web UI", async () => { - Flag.OPENCODE_DISABLE_EMBEDDED_WEB_UI = true + it.live("accepts basic auth for the web UI", () => + Effect.gen(function* () { + Flag.OPENCODE_DISABLE_EMBEDDED_WEB_UI = true - const response = await uiApp({ password: "secret", username: "opencode" }).request("/", { - headers: { authorization: `Basic ${btoa("opencode:secret")}` }, - }) + const response = yield* uiApp({ password: "secret", username: "opencode" }).request("/", { + headers: { authorization: `Basic ${btoa("opencode:secret")}` }, + }) - expect(response.status).toBe(200) - }) + expect(response.status).toBe(200) + }), + ) // Regression for #25698 (Ope): the browser fetches the PWA manifest and // its icons via flows that don't carry app-managed credentials (the // `` request is not under page-auth control), so the // server returning 401 breaks PWA install. These specific public assets // should bypass auth. - test("serves the PWA manifest without auth even when a server password is set", async () => { - Flag.OPENCODE_DISABLE_EMBEDDED_WEB_UI = true + it.live("serves the PWA manifest without auth even when a server password is set", () => + Effect.gen(function* () { + Flag.OPENCODE_DISABLE_EMBEDDED_WEB_UI = true + + for (const path of ["/site.webmanifest", "/web-app-manifest-192x192.png", "/web-app-manifest-512x512.png"]) { + const response = yield* uiApp({ + password: "secret", + username: "opencode", + client: httpClient(new Response("ok")), + }).request(path) + expect(response.status).not.toBe(401) + } + }), + ) - for (const path of ["/site.webmanifest", "/web-app-manifest-192x192.png", "/web-app-manifest-512x512.png"]) { - const response = await uiApp({ - password: "secret", - username: "opencode", - client: httpClient(new Response("ok")), - }).request(path) - expect(response.status).not.toBe(401) - } - }) - - test("allows web UI preflight without auth", async () => { - const response = await app({ password: "secret", username: "opencode" }).request("/", { - method: "OPTIONS", - headers: { - origin: "http://localhost:3000", - "access-control-request-method": "GET", - }, - }) - - expect(response.status).toBe(204) - expect(response.headers.get("access-control-allow-origin")).toBe("http://localhost:3000") - }) + it.live("allows web UI preflight without auth", () => + Effect.gen(function* () { + const response = yield* app({ password: "secret", username: "opencode" }).request("/", { + method: "OPTIONS", + headers: { + origin: "http://localhost:3000", + "access-control-request-method": "GET", + }, + }) + + expect(response.status).toBe(204) + expect(response.headers.get("access-control-allow-origin")).toBe("http://localhost:3000") + }), + ) }) diff --git a/packages/opencode/test/server/project-init-git.test.ts b/packages/opencode/test/server/project-init-git.test.ts index 48e28aa5acc2..c3e77fb2dd83 100644 --- a/packages/opencode/test/server/project-init-git.test.ts +++ b/packages/opencode/test/server/project-init-git.test.ts @@ -1,113 +1,120 @@ -import { afterEach, describe, expect, test } from "bun:test" -import { Effect } from "effect" +import { afterEach, describe, expect } from "bun:test" +import { AppFileSystem } from "@opencode-ai/core/filesystem" +import { Effect, Layer } from "effect" import path from "path" -import { GlobalBus } from "../../src/bus/global" +import { InstanceRef } from "../../src/effect/instance-ref" +import { InstanceBootstrap } from "../../src/project/bootstrap-service" +import { InstanceStore } from "../../src/project/instance-store" +import { GlobalBus, type GlobalEvent } from "../../src/bus/global" import { Snapshot } from "../../src/snapshot" import { Server } from "../../src/server/server" -import { Filesystem } from "@/util/filesystem" import * as Log from "@opencode-ai/core/util/log" import { resetDatabase } from "../fixture/db" -import { disposeAllInstances, provideInstance, tmpdir } from "../fixture/fixture" +import { disposeAllInstances, TestInstance } from "../fixture/fixture" +import { testEffect } from "../lib/effect" void Log.init({ print: false }) afterEach(async () => { + await disposeAllInstances() await resetDatabase() }) -const disposedEvents = (seen: { directory?: string; payload: { type: string } }[], dir: string) => +const noopBootstrap = Layer.succeed(InstanceBootstrap.Service, InstanceBootstrap.Service.of({ run: Effect.void })) +const testInstanceStore = InstanceStore.defaultLayer.pipe(Layer.provide(noopBootstrap)) + +const it = testEffect(Layer.mergeAll(AppFileSystem.defaultLayer, Snapshot.defaultLayer, testInstanceStore)) + +function request(directory: string, url: string, init: RequestInit = {}) { + return Effect.promise(() => { + const headers = new Headers(init.headers) + headers.set("x-opencode-directory", directory) + return Promise.resolve(Server.Default().app.request(url, { ...init, headers })) + }) +} + +function json(response: Response) { + return Effect.promise(() => response.json() as Promise) +} + +function collectGlobalEvents() { + return Effect.acquireRelease( + Effect.sync(() => { + const seen: GlobalEvent[] = [] + const on = (event: GlobalEvent) => { + seen.push(event) + } + GlobalBus.on("event", on) + return { seen, on } + }), + ({ on }) => Effect.sync(() => GlobalBus.off("event", on)), + ) +} + +const disposedEvents = (seen: GlobalEvent[], dir: string) => seen.filter((evt) => evt.directory === dir && evt.payload.type === "server.instance.disposed").length describe("project.initGit endpoint", () => { - test("initializes git and reloads immediately", async () => { - await using tmp = await tmpdir() - const app = Server.Default().app - const seen: { directory?: string; payload: { type: string } }[] = [] - const fn = (evt: { directory?: string; payload: { type: string } }) => { - seen.push(evt) - } - GlobalBus.on("event", fn) + it.instance("initializes git and reloads immediately", () => + Effect.gen(function* () { + const tmp = yield* TestInstance + const fs = yield* AppFileSystem.Service + const events = yield* collectGlobalEvents() - try { - const init = await app.request("/project/git/init", { + const init = yield* request(tmp.directory, "/project/git/init", { method: "POST", - headers: { - "x-opencode-directory": tmp.path, - }, }) - const body = await init.json() + const body = yield* json(init) expect(init.status).toBe(200) expect(body).toMatchObject({ id: "global", vcs: "git", - worktree: tmp.path, + worktree: tmp.directory, }) // Reload behavior: bus emits exactly one server.instance.disposed for the directory. - expect(disposedEvents(seen, tmp.path)).toBe(1) - expect(await Filesystem.exists(path.join(tmp.path, ".git", "opencode"))).toBe(false) + expect(disposedEvents(events.seen, tmp.directory)).toBe(1) + expect(yield* fs.exists(path.join(tmp.directory, ".git", "opencode"))).toBe(false) - const current = await app.request("/project/current", { - headers: { - "x-opencode-directory": tmp.path, - }, - }) + const current = yield* request(tmp.directory, "/project/current") expect(current.status).toBe(200) - expect(await current.json()).toMatchObject({ + expect(yield* json(current)).toMatchObject({ id: "global", vcs: "git", - worktree: tmp.path, + worktree: tmp.directory, }) - expect( - await Effect.runPromise( - Snapshot.Service.use((svc) => svc.track()).pipe( - provideInstance(tmp.path), - Effect.provide(Snapshot.defaultLayer), - ), - ), - ).toBeTruthy() - } finally { - await disposeAllInstances() - GlobalBus.off("event", fn) - } - }) + const ctx = yield* InstanceStore.Service.use((store) => store.reload({ directory: tmp.directory })) + const tracked = yield* Snapshot.Service.use((snapshot) => snapshot.track()).pipe( + Effect.provideService(InstanceRef, ctx), + ) + expect(tracked).toBeTruthy() + }), + ) - test("does not reload when the project is already git", async () => { - await using tmp = await tmpdir({ git: true }) - const app = Server.Default().app - const seen: { directory?: string; payload: { type: string } }[] = [] - const fn = (evt: { directory?: string; payload: { type: string } }) => { - seen.push(evt) - } - GlobalBus.on("event", fn) + it.instance( + "does not reload when the project is already git", + () => + Effect.gen(function* () { + const tmp = yield* TestInstance + const events = yield* collectGlobalEvents() - try { - const init = await app.request("/project/git/init", { - method: "POST", - headers: { - "x-opencode-directory": tmp.path, - }, - }) - expect(init.status).toBe(200) - expect(await init.json()).toMatchObject({ - vcs: "git", - worktree: tmp.path, - }) - expect(disposedEvents(seen, tmp.path)).toBe(0) + const init = yield* request(tmp.directory, "/project/git/init", { + method: "POST", + }) + expect(init.status).toBe(200) + expect(yield* json(init)).toMatchObject({ + vcs: "git", + worktree: tmp.directory, + }) + expect(disposedEvents(events.seen, tmp.directory)).toBe(0) - const current = await app.request("/project/current", { - headers: { - "x-opencode-directory": tmp.path, - }, - }) - expect(current.status).toBe(200) - expect(await current.json()).toMatchObject({ - vcs: "git", - worktree: tmp.path, - }) - } finally { - await disposeAllInstances() - GlobalBus.off("event", fn) - } - }) + const current = yield* request(tmp.directory, "/project/current") + expect(current.status).toBe(200) + expect(yield* json(current)).toMatchObject({ + vcs: "git", + worktree: tmp.directory, + }) + }), + { git: true }, + ) }) diff --git a/packages/opencode/test/server/session-diff-missing-patch.test.ts b/packages/opencode/test/server/session-diff-missing-patch.test.ts index 5f27a4e2fde1..875c031d57a6 100644 --- a/packages/opencode/test/server/session-diff-missing-patch.test.ts +++ b/packages/opencode/test/server/session-diff-missing-patch.test.ts @@ -10,19 +10,20 @@ * asserts that GET /session//diff returns 200 with the row intact. */ import { afterEach, describe, expect } from "bun:test" -import { Effect } from "effect" +import { Effect, Layer } from "effect" import { Server } from "@/server/server" import { SessionPaths } from "@/server/routes/instance/httpapi/groups/session" import { Session } from "@/session/session" import { Storage } from "@/storage/storage" -import { WithInstance } from "@/project/with-instance" import { resetDatabase } from "../fixture/db" -import { disposeAllInstances, tmpdir } from "../fixture/fixture" -import { it } from "../lib/effect" +import { disposeAllInstances, TestInstance } from "../fixture/fixture" +import { testEffect } from "../lib/effect" import * as Log from "@opencode-ai/core/util/log" void Log.init({ print: false }) +const it = testEffect(Layer.mergeAll(Session.defaultLayer, Storage.defaultLayer)) + afterEach(async () => { await disposeAllInstances() await resetDatabase() @@ -32,50 +33,46 @@ function pathFor(template: string, params: Record) { return Object.entries(params).reduce((result, [key, value]) => result.replace(`:${key}`, value), template) } +const withSession = (input?: Parameters[0]) => + Effect.acquireRelease( + Session.Service.use((session) => session.create(input)), + (created) => Session.Service.use((session) => session.remove(created.id)).pipe(Effect.ignore), + ) + describe("session diff with missing patch (#26574)", () => { - it.live("GET /session//diff returns 200 when summary_diffs row has no patch", () => - Effect.gen(function* () { - const tmp = yield* Effect.acquireRelease( - Effect.promise(() => tmpdir({ git: true, config: { formatter: false, lsp: false } })), - (t) => Effect.promise(() => t[Symbol.asyncDispose]()), - ) + it.instance( + "GET /session//diff returns 200 when summary_diffs row has no patch", + () => + Effect.gen(function* () { + const test = yield* TestInstance + const session = yield* withSession({ title: "missing-patch" }) - yield* Effect.promise(() => - WithInstance.provide({ - directory: tmp.path, - fn: async () => { - const session = await Effect.runPromise( - Effect.provide( - Session.Service.use((s) => s.create({ title: "missing-patch" })), - Session.defaultLayer, - ), - ) + // Mimic legacy/imported on-disk shape: a diff entry with no + // `patch` text. Pre-fix the typed response encoder rejects + // this and returns 400. + yield* Storage.Service.use((storage) => + storage.write(["session_diff", session.id], [{ file: "legacy.txt", additions: 1, deletions: 0 }]), + ) - // Mimic legacy/imported on-disk shape: a diff entry with no - // `patch` text. Pre-fix the typed response encoder rejects - // this and returns 400. - await Effect.runPromise( - Effect.provide( - Storage.Service.use((s) => - s.write(["session_diff", session.id], [{ file: "legacy.txt", additions: 1, deletions: 0 }]), - ), - Storage.defaultLayer, - ), - ) + const response = yield* Effect.promise(() => + Promise.resolve( + Server.Default().app.request(pathFor(SessionPaths.diff, { sessionID: session.id }), { + headers: { "x-opencode-directory": test.directory }, + }), + ), + ) - const headers = { "x-opencode-directory": tmp.path } - const response = await Server.Default().app.request(pathFor(SessionPaths.diff, { sessionID: session.id }), { - headers, - }) - expect(response.status).toBe(200) - const body = (await response.json()) as Array<{ file: string; patch?: string; additions: number }> - expect(body).toHaveLength(1) - expect(body[0]?.file).toBe("legacy.txt") - expect(body[0]?.additions).toBe(1) - expect(body[0]?.patch).toBeUndefined() - }, - }), - ) - }), + expect(response.status).toBe(200) + const body = (yield* Effect.promise(() => response.json())) as Array<{ + file: string + patch?: string + additions: number + }> + expect(body).toHaveLength(1) + expect(body[0]?.file).toBe("legacy.txt") + expect(body[0]?.additions).toBe(1) + expect(body[0]?.patch).toBeUndefined() + }), + { git: true, config: { formatter: false, lsp: false } }, ) }) diff --git a/packages/opencode/test/server/session-messages.test.ts b/packages/opencode/test/server/session-messages.test.ts index f5ee5bdcb0ec..e603accbbecd 100644 --- a/packages/opencode/test/server/session-messages.test.ts +++ b/packages/opencode/test/server/session-messages.test.ts @@ -1,191 +1,179 @@ -import { afterEach, describe, expect, test } from "bun:test" +import { afterEach, describe, expect } from "bun:test" import { Effect } from "effect" -import { WithInstance } from "../../src/project/with-instance" import { Server } from "../../src/server/server" import { Session as SessionNs } from "@/session/session" import { MessageV2 } from "../../src/session/message-v2" +import { ModelID, ProviderID } from "../../src/provider/schema" import { MessageID, PartID, type SessionID } from "../../src/session/schema" import * as Log from "@opencode-ai/core/util/log" -import { disposeAllInstances, tmpdir } from "../fixture/fixture" +import { disposeAllInstances, TestInstance } from "../fixture/fixture" +import { testEffect } from "../lib/effect" void Log.init({ print: false }) -function run(fx: Effect.Effect) { - return Effect.runPromise(fx.pipe(Effect.provide(SessionNs.defaultLayer))) -} +const it = testEffect(SessionNs.defaultLayer) -const svc = { - ...SessionNs, - create(input?: SessionNs.CreateInput) { - return run(SessionNs.Service.use((svc) => svc.create(input))) - }, - remove(id: SessionID) { - return run(SessionNs.Service.use((svc) => svc.remove(id))) - }, - updateMessage(msg: T) { - return run(SessionNs.Service.use((svc) => svc.updateMessage(msg))) - }, - updatePart(part: T) { - return run(SessionNs.Service.use((svc) => svc.updatePart(part))) - }, +const model = { + providerID: ProviderID.make("test"), + modelID: ModelID.make("test"), } afterEach(async () => { await disposeAllInstances() }) -async function withoutWatcher(fn: () => Promise) { - if (process.platform !== "win32") return fn() - const prev = process.env.OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER - process.env.OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER = "true" - try { - return await fn() - } finally { - if (prev === undefined) delete process.env.OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER - else process.env.OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER = prev - } +const withoutWatcher = (effect: Effect.Effect) => { + if (process.platform !== "win32") return effect + return Effect.acquireUseRelease( + Effect.sync(() => { + const previous = process.env.OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER + process.env.OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER = "true" + return previous + }), + () => effect, + (previous) => + Effect.sync(() => { + if (previous === undefined) delete process.env.OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER + else process.env.OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER = previous + }), + ) +} + +const sessionScoped = Effect.acquireRelease( + SessionNs.Service.use((svc) => svc.create({})), + (session) => SessionNs.Service.use((svc) => svc.remove(session.id)).pipe(Effect.ignore), +) + +const fill = Effect.fn("SessionMessagesTest.fill")(function* ( + sessionID: SessionID, + count: number, + time = (i: number) => Date.now() + i, +) { + const session = yield* SessionNs.Service + return yield* Effect.forEach( + Array.from({ length: count }, (_, i) => i), + (i) => + Effect.gen(function* () { + const id = MessageID.ascending() + yield* session.updateMessage({ + id, + sessionID, + role: "user", + time: { created: time(i) }, + agent: "test", + model, + tools: {}, + } satisfies MessageV2.User) + yield* session.updatePart({ + id: PartID.ascending(), + sessionID, + messageID: id, + type: "text", + text: `m${i}`, + } satisfies MessageV2.TextPart) + return id + }), + ) +}) + +function request(path: string) { + return Effect.promise(() => Promise.resolve(Server.Default().app.request(path))) } -async function fill(sessionID: SessionID, count: number, time = (i: number) => Date.now() + i) { - const ids = [] as MessageID[] - for (let i = 0; i < count; i++) { - const id = MessageID.ascending() - ids.push(id) - await svc.updateMessage({ - id, - sessionID, - role: "user", - time: { created: time(i) }, - agent: "test", - model: { providerID: "test", modelID: "test" }, - tools: {}, - mode: "", - } as unknown as MessageV2.Info) - await svc.updatePart({ - id: PartID.ascending(), - sessionID, - messageID: id, - type: "text", - text: `m${i}`, - }) - } - return ids +function json(response: Response) { + return Effect.promise(() => response.json() as Promise) } describe("session messages endpoint", () => { - test("returns cursor headers for older pages", async () => { - await using tmp = await tmpdir({ git: true }) - await withoutWatcher(() => - WithInstance.provide({ - directory: tmp.path, - fn: async () => { - const session = await svc.create({}) - const ids = await fill(session.id, 5) - const app = Server.Default().app - - const a = await app.request(`/session/${session.id}/message?limit=2`) - expect(a.status).toBe(200) - const aBody = (await a.json()) as MessageV2.WithParts[] - expect(aBody.map((item) => item.info.id)).toEqual(ids.slice(-2)) - const cursor = a.headers.get("x-next-cursor") - expect(cursor).toBeTruthy() - expect(a.headers.get("link")).toContain('rel="next"') - - const b = await app.request(`/session/${session.id}/message?limit=2&before=${encodeURIComponent(cursor!)}`) - expect(b.status).toBe(200) - const bBody = (await b.json()) as MessageV2.WithParts[] - expect(bBody.map((item) => item.info.id)).toEqual(ids.slice(-4, -2)) - - await svc.remove(session.id) - }, + it.instance( + "returns cursor headers for older pages", + withoutWatcher( + Effect.gen(function* () { + const session = yield* sessionScoped + const ids = yield* fill(session.id, 5) + + const a = yield* request(`/session/${session.id}/message?limit=2`) + expect(a.status).toBe(200) + const aBody = yield* json(a) + expect(aBody.map((item) => item.info.id)).toEqual(ids.slice(-2)) + const cursor = a.headers.get("x-next-cursor") + expect(cursor).toBeTruthy() + expect(a.headers.get("link")).toContain('rel="next"') + + const b = yield* request(`/session/${session.id}/message?limit=2&before=${encodeURIComponent(cursor!)}`) + expect(b.status).toBe(200) + const bBody = yield* json(b) + expect(bBody.map((item) => item.info.id)).toEqual(ids.slice(-4, -2)) }), - ) - }) - - test("keeps full-history responses when limit is omitted", async () => { - await using tmp = await tmpdir({ git: true }) - await withoutWatcher(() => - WithInstance.provide({ - directory: tmp.path, - fn: async () => { - const session = await svc.create({}) - const ids = await fill(session.id, 3) - const app = Server.Default().app - - const res = await app.request(`/session/${session.id}/message`) - expect(res.status).toBe(200) - const body = (await res.json()) as MessageV2.WithParts[] - expect(body.map((item) => item.info.id)).toEqual(ids) - - await svc.remove(session.id) - }, + ), + { git: true }, + ) + + it.instance( + "keeps full-history responses when limit is omitted", + withoutWatcher( + Effect.gen(function* () { + const session = yield* sessionScoped + const ids = yield* fill(session.id, 3) + + const res = yield* request(`/session/${session.id}/message`) + expect(res.status).toBe(200) + const body = yield* json(res) + expect(body.map((item) => item.info.id)).toEqual(ids) }), - ) - }) - - test("rejects invalid cursors and missing sessions", async () => { - await using tmp = await tmpdir({ git: true }) - await withoutWatcher(() => - WithInstance.provide({ - directory: tmp.path, - fn: async () => { - const session = await svc.create({}) - const app = Server.Default().app - - const bad = await app.request(`/session/${session.id}/message?limit=2&before=bad`) - expect(bad.status).toBe(400) - - const miss = await app.request(`/session/ses_missing/message?limit=2`) - expect(miss.status).toBe(404) - - await svc.remove(session.id) - }, + ), + { git: true }, + ) + + it.instance( + "rejects invalid cursors and missing sessions", + withoutWatcher( + Effect.gen(function* () { + const session = yield* sessionScoped + + const bad = yield* request(`/session/${session.id}/message?limit=2&before=bad`) + expect(bad.status).toBe(400) + + const miss = yield* request(`/session/ses_missing/message?limit=2`) + expect(miss.status).toBe(404) }), - ) - }) - - test("does not truncate large legacy limit requests", async () => { - await using tmp = await tmpdir({ git: true }) - await withoutWatcher(() => - WithInstance.provide({ - directory: tmp.path, - fn: async () => { - const session = await svc.create({}) - await fill(session.id, 520) - const app = Server.Default().app - - const res = await app.request(`/session/${session.id}/message?limit=510`) - expect(res.status).toBe(200) - const body = (await res.json()) as MessageV2.WithParts[] - expect(body).toHaveLength(510) - - await svc.remove(session.id) - }, + ), + { git: true }, + ) + + it.instance( + "does not truncate large legacy limit requests", + withoutWatcher( + Effect.gen(function* () { + const session = yield* sessionScoped + yield* fill(session.id, 520) + + const res = yield* request(`/session/${session.id}/message?limit=510`) + expect(res.status).toBe(200) + const body = yield* json(res) + expect(body).toHaveLength(510) }), - ) - }) - - test("accepts directory query used by workspace routing", async () => { - await using tmp = await tmpdir({ git: true }) - await withoutWatcher(() => - WithInstance.provide({ - directory: tmp.path, - fn: async () => { - const session = await svc.create({}) - await fill(session.id, 1) - const app = Server.Default().app - - const res = await app.request( - `/session/${session.id}/message?limit=80&directory=${encodeURIComponent(tmp.path)}`, - ) - expect(res.status).toBe(200) - const body = await res.json() - expect(Array.isArray(body)).toBe(true) - expect(body).toHaveLength(1) - - await svc.remove(session.id) - }, + ), + { git: true }, + ) + + it.instance( + "accepts directory query used by workspace routing", + withoutWatcher( + Effect.gen(function* () { + const tmp = yield* TestInstance + const session = yield* sessionScoped + yield* fill(session.id, 1) + + const res = yield* request( + `/session/${session.id}/message?limit=80&directory=${encodeURIComponent(tmp.directory)}`, + ) + expect(res.status).toBe(200) + const body = yield* json(res) + expect(Array.isArray(body)).toBe(true) + expect(body).toHaveLength(1) }), - ) - }) + ), + { git: true }, + ) }) diff --git a/packages/opencode/test/server/session-select.test.ts b/packages/opencode/test/server/session-select.test.ts index 13edca14584e..9e24ed0ecc5b 100644 --- a/packages/opencode/test/server/session-select.test.ts +++ b/packages/opencode/test/server/session-select.test.ts @@ -1,101 +1,93 @@ -import { afterEach, describe, expect, test } from "bun:test" +import { describe, expect } from "bun:test" import { Effect } from "effect" -import { Session as SessionNs } from "@/session/session" -import type { SessionID } from "../../src/session/schema" +import { Session } from "@/session/session" import * as Log from "@opencode-ai/core/util/log" -import { Instance } from "../../src/project/instance" -import { WithInstance } from "../../src/project/with-instance" import { Server } from "../../src/server/server" -import { disposeAllInstances, tmpdir } from "../fixture/fixture" +import { TestInstance } from "../fixture/fixture" +import { testEffect } from "../lib/effect" void Log.init({ print: false }) -function run(fx: Effect.Effect) { - return Effect.runPromise(fx.pipe(Effect.provide(SessionNs.defaultLayer))) -} - -const svc = { - ...SessionNs, - create(input?: SessionNs.CreateInput) { - return run(SessionNs.Service.use((svc) => svc.create(input))) - }, - remove(id: SessionID) { - return run(SessionNs.Service.use((svc) => svc.remove(id))) - }, -} - -afterEach(async () => { - await disposeAllInstances() -}) +const it = testEffect(Session.defaultLayer) describe("tui.selectSession endpoint", () => { - test("should return 200 when called with valid session", async () => { - await using tmp = await tmpdir({ git: true }) - await WithInstance.provide({ - directory: tmp.path, - fn: async () => { - // #given - const session = await svc.create({}) + it.instance( + "should return 200 when called with valid session", + () => + Effect.gen(function* () { + const tmp = yield* TestInstance + const session = yield* Session.Service.use((svc) => svc.create({})) - // #when const app = Server.Default().app - const response = await app.request("/tui/select-session", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ sessionID: session.id }), - }) + const response = yield* Effect.promise(() => + Promise.resolve( + app.request("/tui/select-session", { + method: "POST", + headers: { + "Content-Type": "application/json", + "x-opencode-directory": tmp.directory, + }, + body: JSON.stringify({ sessionID: session.id }), + }), + ), + ) - // #then expect(response.status).toBe(200) - const body = await response.json() + const body = yield* Effect.promise(() => response.json()) expect(body).toBe(true) + }), + { git: true }, + ) - await svc.remove(session.id) - }, - }) - }) - - test("should return 404 when session does not exist", async () => { - await using tmp = await tmpdir({ git: true }) - await WithInstance.provide({ - directory: tmp.path, - fn: async () => { - // #given + it.instance( + "should return 404 when session does not exist", + () => + Effect.gen(function* () { + const tmp = yield* TestInstance const nonExistentSessionID = "ses_nonexistent123" - // #when const app = Server.Default().app - const response = await app.request("/tui/select-session", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ sessionID: nonExistentSessionID }), - }) + const response = yield* Effect.promise(() => + Promise.resolve( + app.request("/tui/select-session", { + method: "POST", + headers: { + "Content-Type": "application/json", + "x-opencode-directory": tmp.directory, + }, + body: JSON.stringify({ sessionID: nonExistentSessionID }), + }), + ), + ) - // #then expect(response.status).toBe(404) - }, - }) - }) + }), + { git: true }, + ) - test("should return 400 when session ID format is invalid", async () => { - await using tmp = await tmpdir({ git: true }) - await WithInstance.provide({ - directory: tmp.path, - fn: async () => { - // #given + it.instance( + "should return 400 when session ID format is invalid", + () => + Effect.gen(function* () { + const tmp = yield* TestInstance const invalidSessionID = "invalid_session_id" - // #when const app = Server.Default().app - const response = await app.request("/tui/select-session", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ sessionID: invalidSessionID }), - }) + const response = yield* Effect.promise(() => + Promise.resolve( + app.request("/tui/select-session", { + method: "POST", + headers: { + "Content-Type": "application/json", + "x-opencode-directory": tmp.directory, + }, + body: JSON.stringify({ sessionID: invalidSessionID }), + }), + ), + ) - // #then expect(response.status).toBe(400) - }, - }) - }) + }), + { git: true }, + ) }) diff --git a/packages/opencode/test/server/worktree-endpoint-repro.test.ts b/packages/opencode/test/server/worktree-endpoint-repro.test.ts index e95d706d5468..a1f6bf45a8ce 100644 --- a/packages/opencode/test/server/worktree-endpoint-repro.test.ts +++ b/packages/opencode/test/server/worktree-endpoint-repro.test.ts @@ -1,13 +1,14 @@ import { describe, expect } from "bun:test" -import { Effect, Layer } from "effect" +import { Effect, Layer, Queue } from "effect" import { HttpRouter } from "effect/unstable/http" import { Flag } from "@opencode-ai/core/flag/flag" +import { GlobalBus, type GlobalEvent } from "@/bus/global" +import { Worktree } from "@/worktree" import { ExperimentalHttpApiServer } from "../../src/server/routes/instance/httpapi/server" import { ExperimentalPaths } from "../../src/server/routes/instance/httpapi/groups/experimental" import { WorkspacePaths } from "../../src/server/routes/instance/httpapi/groups/workspace" -import { withTimeout } from "../../src/util/timeout" import { resetDatabase } from "../fixture/db" -import { TestInstance } from "../fixture/fixture" +import { disposeAllInstances, TestInstance } from "../fixture/fixture" import { testEffect } from "../lib/effect" const stateLayer = Layer.effectDiscard( @@ -28,7 +29,10 @@ const stateLayer = Layer.effectDiscard( ) const it = testEffect(stateLayer) +const worktreeTest = process.platform === "win32" ? it.instance.skip : it.instance type TestServer = ReturnType +type CreatedWorktree = { directory: string } +type ScopedWorktree = { directory: string; body: CreatedWorktree; ready: Effect.Effect } function serverScoped() { return Effect.acquireRelease( @@ -44,14 +48,106 @@ function request(server: TestServer, input: string, init?: RequestInit) { } function withRequestTimeout(effect: Effect.Effect, label: string, ms = 5_000) { - return Effect.promise(() => withTimeout(Effect.runPromise(effect), ms, label)) + return effect.pipe( + Effect.timeoutOrElse({ + duration: `${ms} millis`, + orElse: () => Effect.fail(new Error(`${label} timed out after ${ms}ms`)), + }), + ) +} + +function json(response: Response) { + return Effect.promise(() => response.json() as Promise) +} + +function readyWatcher() { + return Effect.gen(function* () { + const events = yield* Queue.bounded(1) + const on = (event: GlobalEvent) => { + if (event.payload.type === Worktree.Event.Ready.type) Queue.offerUnsafe(events, event) + } + + GlobalBus.on("event", on) + yield* Effect.addFinalizer(() => Effect.sync(() => GlobalBus.off("event", on))) + + return (directory: string) => + Effect.gen(function* () { + while (true) { + const event = yield* Queue.take(events) + if (event.directory === directory) return + } + }).pipe( + Effect.timeoutOrElse({ + duration: "10 seconds", + orElse: () => Effect.fail(new Error(`timed out waiting for worktree.ready: ${directory}`)), + }), + ) + }) +} + +function removeCreatedWorktree(input: { + server: TestServer + rootDirectory: string + worktreeDirectory: string + ready: Effect.Effect +}) { + return Effect.gen(function* () { + yield* input.ready.pipe(Effect.timeout("1 second"), Effect.ignore) + yield* Effect.promise(() => disposeAllInstances()).pipe(Effect.ignore) + + const removed = yield* request( + input.server, + `${ExperimentalPaths.worktree}?directory=${encodeURIComponent(input.rootDirectory)}`, + { + method: "DELETE", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ directory: input.worktreeDirectory }), + }, + ) + if (removed.status !== 200) { + const message = yield* Effect.promise(() => removed.text()) + throw new Error(`failed to remove worktree: ${removed.status} ${message}`) + } + const ok = yield* json(removed) + if (!ok) throw new Error(`failed to remove worktree ${input.worktreeDirectory}`) + }) +} + +function createWorktreeScoped(input: { + server: TestServer + directory: string + path: string + init: RequestInit + timeoutLabel: string + timeoutMs?: number +}) { + return Effect.acquireRelease( + Effect.gen(function* () { + const waitReady = yield* readyWatcher() + const response = yield* withRequestTimeout( + request(input.server, input.path, input.init), + input.timeoutLabel, + input.timeoutMs, + ) + expect(response.status).toBe(200) + const body = yield* json(response) + return { directory: body.directory, body, ready: waitReady(body.directory) } satisfies ScopedWorktree + }), + (created) => + removeCreatedWorktree({ + server: input.server, + rootDirectory: input.directory, + worktreeDirectory: created.directory, + ready: created.ready, + }).pipe(Effect.orDie), + ).pipe(Effect.map((created) => created.body)) } function setProjectStartCommand(input: { server: TestServer; directory: string; command: string }) { return Effect.gen(function* () { const current = yield* request(input.server, `/project/current?directory=${encodeURIComponent(input.directory)}`) expect(current.status).toBe(200) - const project = (yield* Effect.promise(() => current.json())) as { id: string } + const project = yield* json<{ id: string }>(current) const updated = yield* request( input.server, `/project/${project.id}?directory=${encodeURIComponent(input.directory)}`, @@ -66,47 +162,51 @@ function setProjectStartCommand(input: { server: TestServer; directory: string; } describe("worktree endpoint reproduction", () => { - it.instance( + worktreeTest( "direct HttpApi worktree create returns without waiting for boot", () => Effect.gen(function* () { const test = yield* TestInstance const server = yield* serverScoped() - const response = yield* withRequestTimeout( - request(server, `${ExperimentalPaths.worktree}?directory=${encodeURIComponent(test.directory)}`, { + const response = yield* createWorktreeScoped({ + server, + directory: test.directory, + path: `${ExperimentalPaths.worktree}?directory=${encodeURIComponent(test.directory)}`, + init: { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({}), - }), - "direct worktree create", - ) + }, + timeoutLabel: "direct worktree create", + }) - expect(response.status).toBe(200) - expect(yield* Effect.promise(() => response.json())).toMatchObject({ directory: expect.any(String) }) + expect(response).toMatchObject({ directory: expect.any(String) }) }), { git: true }, ) - it.instance( + worktreeTest( "workspace worktree create does not hang", () => Effect.gen(function* () { const test = yield* TestInstance const server = yield* serverScoped() - const response = yield* withRequestTimeout( - request(server, `${WorkspacePaths.list}?directory=${encodeURIComponent(test.directory)}`, { + const response = yield* createWorktreeScoped({ + server, + directory: test.directory, + path: `${WorkspacePaths.list}?directory=${encodeURIComponent(test.directory)}`, + init: { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ type: "worktree", branch: null }), - }), - "workspace worktree create", - 8_000, - ) + }, + timeoutLabel: "workspace worktree create", + timeoutMs: 8_000, + }) - expect(response.status).toBe(200) - expect(yield* Effect.promise(() => response.json())).toMatchObject({ + expect(response).toMatchObject({ type: "worktree", directory: expect.any(String), }) @@ -114,7 +214,7 @@ describe("worktree endpoint reproduction", () => { { git: true }, ) - it.instance( + worktreeTest( "workspace worktree create returns without waiting for project start command", () => Effect.gen(function* () { @@ -127,17 +227,19 @@ describe("worktree endpoint reproduction", () => { }) const started = Date.now() - const response = yield* withRequestTimeout( - request(server, `${WorkspacePaths.list}?directory=${encodeURIComponent(test.directory)}`, { + yield* createWorktreeScoped({ + server, + directory: test.directory, + path: `${WorkspacePaths.list}?directory=${encodeURIComponent(test.directory)}`, + init: { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ type: "worktree", branch: null }), - }), - "workspace worktree create with project start command", - 6_000, - ) + }, + timeoutLabel: "workspace worktree create with project start command", + timeoutMs: 6_000, + }) - expect(response.status).toBe(200) expect(Date.now() - started).toBeLessThan(1_500) }), { git: true }, diff --git a/packages/opencode/test/session/compaction.test.ts b/packages/opencode/test/session/compaction.test.ts index 1d329699f69b..2b623511b7c2 100644 --- a/packages/opencode/test/session/compaction.test.ts +++ b/packages/opencode/test/session/compaction.test.ts @@ -1758,6 +1758,101 @@ describe("SessionNs.getUsage", () => { expect(result.cost).toBe(3 + 1.5) }) + test("uses matching context cost tier before over-200k fallback", () => { + const model = createModel({ + context: 1_000_000, + output: 32_000, + cost: { + input: 1, + output: 2, + cache: { read: 0.1, write: 0.5 }, + tiers: [ + { + input: 3, + output: 4, + cache: { read: 0.3, write: 1.5 }, + tier: { type: "context", size: 200_000 }, + }, + { + input: 5, + output: 6, + cache: { read: 0.5, write: 2.5 }, + tier: { type: "context", size: 500_000 }, + }, + ], + experimentalOver200K: { + input: 100, + output: 100, + cache: { read: 100, write: 100 }, + }, + }, + }) + const result = SessionNs.getUsage({ + model, + usage: { + inputTokens: 650_000, + outputTokens: 100_000, + totalTokens: 750_000, + inputTokenDetails: { + noCacheTokens: undefined, + cacheReadTokens: 100_000, + cacheWriteTokens: undefined, + }, + outputTokenDetails: { + textTokens: undefined, + reasoningTokens: undefined, + }, + }, + }) + + expect(result.tokens.input).toBe(550_000) + expect(result.cost).toBe(2.75 + 0.6 + 0.05) + }) + + test("falls back to over-200k pricing when no cost tier matches", () => { + const model = createModel({ + context: 1_000_000, + output: 32_000, + cost: { + input: 1, + output: 2, + cache: { read: 0.1, write: 0.5 }, + tiers: [ + { + input: 5, + output: 6, + cache: { read: 0.5, write: 2.5 }, + tier: { type: "context", size: 500_000 }, + }, + ], + experimentalOver200K: { + input: 3, + output: 4, + cache: { read: 0.3, write: 1.5 }, + }, + }, + }) + const result = SessionNs.getUsage({ + model, + usage: { + inputTokens: 300_000, + outputTokens: 100_000, + totalTokens: 400_000, + inputTokenDetails: { + noCacheTokens: undefined, + cacheReadTokens: undefined, + cacheWriteTokens: undefined, + }, + outputTokenDetails: { + textTokens: undefined, + reasoningTokens: undefined, + }, + }, + }) + + expect(result.cost).toBe(0.9 + 0.4) + }) + test.each(["@ai-sdk/anthropic", "@ai-sdk/amazon-bedrock", "@ai-sdk/google-vertex/anthropic"])( "computes total from components for %s models", (npm) => { diff --git a/packages/opencode/test/session/llm.test.ts b/packages/opencode/test/session/llm.test.ts index 2879d0481249..4a6b1e8b7f04 100644 --- a/packages/opencode/test/session/llm.test.ts +++ b/packages/opencode/test/session/llm.test.ts @@ -277,6 +277,25 @@ async function loadFixture(providerID: string, modelID: string) { return { provider, model } } +function configModel(model: ModelsDev.Model) { + return { + id: model.id, + name: model.name, + family: model.family, + release_date: model.release_date, + attachment: model.attachment, + reasoning: model.reasoning, + temperature: model.temperature, + tool_call: model.tool_call, + interleaved: model.interleaved, + cost: model.cost ? { ...model.cost, tiers: undefined } : undefined, + limit: model.limit, + modalities: model.modalities, + status: model.status, + provider: model.provider, + } +} + function createEventStream(chunks: unknown[], includeDone = false) { const lines = chunks.map((chunk) => `data: ${typeof chunk === "string" ? chunk : JSON.stringify(chunk)}`) if (includeDone) { @@ -617,7 +636,7 @@ describe("session.llm.stream", () => { npm: "@ai-sdk/openai", api: "https://api.openai.com/v1", models: { - [model.id]: model, + [model.id]: configModel(model), }, options: { apiKey: "test-openai-key", @@ -733,7 +752,7 @@ describe("session.llm.stream", () => { npm: "@ai-sdk/openai", api: "https://api.openai.com/v1", models: { - [model.id]: model, + [model.id]: configModel(model), }, options: { apiKey: "test-openai-key", @@ -970,7 +989,7 @@ describe("session.llm.stream", () => { npm: "@ai-sdk/anthropic", api: "https://api.anthropic.com/v1", models: { - [model.id]: model, + [model.id]: configModel(model), }, options: { apiKey: "test-anthropic-key", diff --git a/packages/opencode/test/session/prompt.test.ts b/packages/opencode/test/session/prompt.test.ts index 3821954945f5..e7791db30875 100644 --- a/packages/opencode/test/session/prompt.test.ts +++ b/packages/opencode/test/session/prompt.test.ts @@ -1,8 +1,7 @@ import { NodeFileSystem } from "@effect/platform-node" import { FetchHttpClient } from "effect/unstable/http" import { expect } from "bun:test" -import { Cause, Effect, Exit, Fiber, Layer } from "effect" -import fs from "fs/promises" +import { Cause, Deferred, Duration, Effect, Exit, Fiber, Layer } from "effect" import path from "path" import { fileURLToPath, pathToFileURL } from "url" import { NamedError } from "@opencode-ai/core/util/error" @@ -48,10 +47,11 @@ import * as Database from "../../src/storage/db" import { Ripgrep } from "../../src/file/ripgrep" import { Format } from "../../src/format" import { Reference } from "../../src/reference/reference" -import { provideTmpdirInstance, provideTmpdirServer } from "../fixture/fixture" +import { TestInstance } from "../fixture/fixture" import { testEffect } from "../lib/effect" import { reply, TestLLMServer } from "../lib/llm-server" import { SyncEvent } from "@/sync" +import { RuntimeFlags } from "@/effect/runtime-flags" void Log.init({ print: false }) @@ -69,14 +69,6 @@ const ref = { modelID: ModelID.make("test-model"), } -function defer() { - let resolve!: (value: T | PromiseLike) => void - const promise = new Promise((done) => { - resolve = done - }) - return { promise, resolve } -} - function withSh(fx: () => Effect.Effect) { return Effect.acquireUseRelease( Effect.sync(() => { @@ -188,6 +180,7 @@ function makeHttp() { Layer.provide(Reference.defaultLayer), Layer.provide(Ripgrep.defaultLayer), Layer.provide(Format.defaultLayer), + Layer.provide(RuntimeFlags.layer()), Layer.provideMerge(todo), Layer.provideMerge(question), Layer.provideMerge(deps), @@ -219,7 +212,7 @@ function makeHttp() { } const it = testEffect(makeHttp()) -const unix = process.platform !== "win32" ? it.live : it.live.skip +const unix = process.platform !== "win32" ? it.instance : it.instance.skip // Config that registers a custom "test" provider with a "test-model" model // so provider model lookup succeeds inside the loop. @@ -268,6 +261,84 @@ function providerCfg(url: string) { } } +const writeText = Effect.fn("test.writeText")(function* (file: string, text: string) { + const fs = yield* AppFileSystem.Service + yield* fs.writeWithDirs(file, text) +}) + +const ensureDir = Effect.fn("test.ensureDir")(function* (dir: string) { + const fs = yield* AppFileSystem.Service + yield* fs.ensureDir(dir) +}) + +const writeConfig = Effect.fn("test.writeConfig")(function* (dir: string, config: Partial) { + yield* writeText( + path.join(dir, "opencode.json"), + JSON.stringify({ $schema: "https://opencode.ai/config.json", ...config }), + ) +}) + +const useServerConfig = Effect.fn("test.useServerConfig")(function* (config: (url: string) => Partial) { + const { directory: dir } = yield* TestInstance + const llm = yield* TestLLMServer + yield* writeConfig(dir, config(llm.url)) + return { dir, llm } +}) + +const awaitWithTimeout = ( + self: Effect.Effect, + message: string, + duration: Duration.Input = "2 seconds", +) => + self.pipe( + Effect.timeoutOrElse({ + duration, + orElse: () => Effect.fail(new Error(message)), + }), + ) + +const pollWithTimeout = ( + self: Effect.Effect, + message: string, + duration: Duration.Input = "5 seconds", +) => + Effect.gen(function* () { + while (true) { + const result = yield* self + if (result !== undefined) return result + yield* Effect.sleep("20 millis") + } + }).pipe( + Effect.timeoutOrElse({ + duration, + orElse: () => Effect.fail(new Error(message)), + }), + ) + +const hasBash = Effect.sync(() => Bun.which("bash") !== null) + +const deferredAsPromise = (deferred: Deferred.Deferred): PromiseLike => ({ + then: (onfulfilled, onrejected) => { + Effect.runFork( + Deferred.await(deferred).pipe( + Effect.match({ + onFailure: (error) => { + onrejected?.(error) + }, + onSuccess: (value) => { + onfulfilled?.(value) + }, + }), + ), + ) + return deferredAsPromise(deferred) as PromiseLike + }, +}) + +const succeedVoid = (deferred: Deferred.Deferred) => { + Effect.runSync(Deferred.succeed(deferred, void 0).pipe(Effect.ignore)) +} + const user = Effect.fn("test.user")(function* (sessionID: SessionID, text: string) { const session = yield* Session.Service const msg = yield* session.updateMessage({ @@ -344,9 +415,11 @@ const boot = Effect.fn("test.boot")(function* (input?: { title?: string }) { // Loop semantics -it.live("loop exits immediately when last assistant has stop finish", () => - provideTmpdirServer( - Effect.fnUntraced(function* ({ llm }) { +it.instance( + "loop exits immediately when last assistant has stop finish", + () => + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) const prompt = yield* SessionPrompt.Service const sessions = yield* Session.Service const chat = yield* sessions.create({ title: "Pinned" }) @@ -357,13 +430,14 @@ it.live("loop exits immediately when last assistant has stop finish", () => if (result.info.role === "assistant") expect(result.info.finish).toBe("stop") expect(yield* llm.calls).toBe(0) }), - { git: true, config: providerCfg }, - ), + { git: true }, ) -it.live("loop calls LLM and returns assistant message", () => - provideTmpdirServer( - Effect.fnUntraced(function* ({ llm }) { +it.instance( + "loop calls LLM and returns assistant message", + () => + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) const prompt = yield* SessionPrompt.Service const sessions = yield* Session.Service const chat = yield* sessions.create({ @@ -384,13 +458,14 @@ it.live("loop calls LLM and returns assistant message", () => expect(parts.some((p) => p.type === "text" && p.text === "world")).toBe(true) expect(yield* llm.hits).toHaveLength(1) }), - { git: true, config: providerCfg }, - ), + { git: true }, ) -it.live("prompt emits v2 prompted and synthetic events", () => - provideTmpdirServer( - Effect.fnUntraced(function* () { +it.instance( + "prompt emits v2 prompted and synthetic events", + () => + Effect.gen(function* () { + yield* useServerConfig(providerCfg) const prompt = yield* SessionPrompt.Service const sessions = yield* Session.Service const chat = yield* sessions.create({ title: "Pinned" }) @@ -425,13 +500,14 @@ it.live("prompt emits v2 prompted and synthetic events", () => ]), ) }), - { git: true, config: providerCfg }, - ), + { git: true }, ) -it.live("static loop returns assistant text through local provider", () => - provideTmpdirServer( - Effect.fnUntraced(function* ({ llm }) { +it.instance( + "static loop returns assistant text through local provider", + () => + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) const prompt = yield* SessionPrompt.Service const sessions = yield* Session.Service const session = yield* sessions.create({ @@ -454,13 +530,14 @@ it.live("static loop returns assistant text through local provider", () => expect(yield* llm.hits).toHaveLength(1) expect(yield* llm.pending).toBe(0) }), - { git: true, config: providerCfg }, - ), + { git: true }, ) -it.live("static loop consumes queued replies across turns", () => - provideTmpdirServer( - Effect.fnUntraced(function* ({ llm }) { +it.instance( + "static loop consumes queued replies across turns", + () => + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) const prompt = yield* SessionPrompt.Service const sessions = yield* Session.Service const session = yield* sessions.create({ @@ -497,13 +574,14 @@ it.live("static loop consumes queued replies across turns", () => expect(yield* llm.hits).toHaveLength(2) expect(yield* llm.pending).toBe(0) }), - { git: true, config: providerCfg }, - ), + { git: true }, ) -it.live("loop continues when finish is tool-calls", () => - provideTmpdirServer( - Effect.fnUntraced(function* ({ llm }) { +it.instance( + "loop continues when finish is tool-calls", + () => + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) const prompt = yield* SessionPrompt.Service const sessions = yield* Session.Service const session = yield* sessions.create({ @@ -527,55 +605,56 @@ it.live("loop continues when finish is tool-calls", () => expect(result.info.finish).toBe("stop") } }), - { git: true, config: providerCfg }, - ), + { git: true }, ) -it.live("glob tool keeps instance context during prompt runs", () => - provideTmpdirServer( - ({ dir, llm }) => - Effect.gen(function* () { - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const session = yield* sessions.create({ - title: "Glob context", - permission: [{ permission: "*", pattern: "*", action: "allow" }], - }) - const file = path.join(dir, "probe.txt") - yield* Effect.promise(() => Bun.write(file, "probe")) +it.instance( + "glob tool keeps instance context during prompt runs", + () => + Effect.gen(function* () { + const { dir, llm } = yield* useServerConfig(providerCfg) + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const session = yield* sessions.create({ + title: "Glob context", + permission: [{ permission: "*", pattern: "*", action: "allow" }], + }) + const file = path.join(dir, "probe.txt") + yield* writeText(file, "probe") - yield* prompt.prompt({ - sessionID: session.id, - agent: "build", - noReply: true, - parts: [{ type: "text", text: "find text files" }], - }) - yield* llm.tool("glob", { pattern: "**/*.txt" }) - yield* llm.text("done") + yield* prompt.prompt({ + sessionID: session.id, + agent: "build", + noReply: true, + parts: [{ type: "text", text: "find text files" }], + }) + yield* llm.tool("glob", { pattern: "**/*.txt" }) + yield* llm.text("done") - const result = yield* prompt.loop({ sessionID: session.id }) - expect(result.info.role).toBe("assistant") + const result = yield* prompt.loop({ sessionID: session.id }) + expect(result.info.role).toBe("assistant") - const msgs = yield* MessageV2.filterCompactedEffect(session.id) - const tool = msgs - .flatMap((msg) => msg.parts) - .find( - (part): part is CompletedToolPart => - part.type === "tool" && part.tool === "glob" && part.state.status === "completed", - ) - if (!tool) return + const msgs = yield* MessageV2.filterCompactedEffect(session.id) + const tool = msgs + .flatMap((msg) => msg.parts) + .find( + (part): part is CompletedToolPart => + part.type === "tool" && part.tool === "glob" && part.state.status === "completed", + ) + if (!tool) return - expect(tool.state.output).toContain(file) - expect(tool.state.output).not.toContain("No context found for instance") - expect(result.parts.some((part) => part.type === "text" && part.text === "done")).toBe(true) - }), - { git: true, config: providerCfg }, - ), + expect(tool.state.output).toContain(file) + expect(tool.state.output).not.toContain("No context found for instance") + expect(result.parts.some((part) => part.type === "text" && part.text === "done")).toBe(true) + }), + { git: true }, ) -it.live("loop continues when finish is stop but assistant has tool parts", () => - provideTmpdirServer( - Effect.fnUntraced(function* ({ llm }) { +it.instance( + "loop continues when finish is stop but assistant has tool parts", + () => + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) const prompt = yield* SessionPrompt.Service const sessions = yield* Session.Service const session = yield* sessions.create({ @@ -599,13 +678,21 @@ it.live("loop continues when finish is stop but assistant has tool parts", () => expect(result.info.finish).toBe("stop") } }), - { git: true, config: providerCfg }, - ), + { git: true }, ) -it.live("failed subtask preserves metadata on error tool state", () => - provideTmpdirServer( - Effect.fnUntraced(function* ({ llm }) { +it.instance( + "failed subtask preserves metadata on error tool state", + () => + Effect.gen(function* () { + const { llm } = yield* useServerConfig((url) => ({ + ...providerCfg(url), + agent: { + general: { + model: "test/missing-model", + }, + }, + })) const prompt = yield* SessionPrompt.Service const sessions = yield* Session.Service const chat = yield* sessions.create({ title: "Pinned" }) @@ -638,751 +725,710 @@ it.live("failed subtask preserves metadata on error tool state", () => modelID: ModelID.make("missing-model"), }) }), - { - git: true, - config: (url) => ({ - ...providerCfg(url), - agent: { - general: { - model: "test/missing-model", - }, - }, - }), - }, - ), + { git: true }, ) -it.live( +it.instance( "running subtask preserves metadata after tool-call transition", () => - provideTmpdirServer( - Effect.fnUntraced(function* ({ llm }) { - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const chat = yield* sessions.create({ title: "Pinned" }) - yield* llm.hang - const msg = yield* user(chat.id, "hello") - yield* addSubtask(chat.id, msg.id) - - const fiber = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) - - const tool = yield* Effect.promise(async () => { - const end = Date.now() + 5_000 - while (Date.now() < end) { - const msgs = await Effect.runPromise(MessageV2.filterCompactedEffect(chat.id)) - const taskMsg = msgs.find((item) => item.info.role === "assistant" && item.info.agent === "general") - const tool = taskMsg?.parts.find((part): part is MessageV2.ToolPart => part.type === "tool") - if (tool?.state.status === "running" && tool.state.metadata?.sessionId) return tool - await new Promise((done) => setTimeout(done, 20)) - } - throw new Error("timed out waiting for running subtask metadata") - }) + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const chat = yield* sessions.create({ title: "Pinned" }) + yield* llm.hang + const msg = yield* user(chat.id, "hello") + yield* addSubtask(chat.id, msg.id) - if (tool.state.status !== "running") return - expect(typeof tool.state.metadata?.sessionId).toBe("string") - expect(tool.state.title).toBeDefined() - expect(tool.state.metadata?.model).toBeDefined() + const fiber = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) - yield* prompt.cancel(chat.id) - yield* Fiber.await(fiber) - }), - { git: true, config: providerCfg }, - ), + const tool = yield* pollWithTimeout( + Effect.gen(function* () { + const msgs = yield* MessageV2.filterCompactedEffect(chat.id) + const taskMsg = msgs.find((item) => item.info.role === "assistant" && item.info.agent === "general") + const tool = taskMsg?.parts.find((part): part is MessageV2.ToolPart => part.type === "tool") + if (tool?.state.status === "running" && tool.state.metadata?.sessionId) return tool + }), + "timed out waiting for running subtask metadata", + ) + + if (tool.state.status !== "running") return + expect(typeof tool.state.metadata?.sessionId).toBe("string") + expect(tool.state.title).toBeDefined() + expect(tool.state.metadata?.model).toBeDefined() + + yield* prompt.cancel(chat.id) + yield* Fiber.await(fiber) + }), + { git: true }, 5_000, ) -it.live( +it.instance( "running task tool preserves metadata after tool-call transition", () => - provideTmpdirServer( - Effect.fnUntraced(function* ({ llm }) { - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const chat = yield* sessions.create({ - title: "Pinned", - permission: [{ permission: "*", pattern: "*", action: "allow" }], - }) - yield* llm.tool("task", { - description: "inspect bug", - prompt: "look into the cache key path", - subagent_type: "general", - }) - yield* llm.hang - yield* user(chat.id, "hello") - - const fiber = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) - - const tool = yield* Effect.promise(async () => { - const end = Date.now() + 5_000 - while (Date.now() < end) { - const msgs = await Effect.runPromise(MessageV2.filterCompactedEffect(chat.id)) - const assistant = msgs.findLast((item) => item.info.role === "assistant" && item.info.agent === "build") - const tool = assistant?.parts.find( - (part): part is MessageV2.ToolPart => part.type === "tool" && part.tool === "task", - ) - if (tool?.state.status === "running" && tool.state.metadata?.sessionId) return tool - await new Promise((done) => setTimeout(done, 20)) - } - throw new Error("timed out waiting for running task metadata") - }) + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const chat = yield* sessions.create({ + title: "Pinned", + permission: [{ permission: "*", pattern: "*", action: "allow" }], + }) + yield* llm.tool("task", { + description: "inspect bug", + prompt: "look into the cache key path", + subagent_type: "general", + }) + yield* llm.hang + yield* user(chat.id, "hello") - if (tool.state.status !== "running") return - expect(typeof tool.state.metadata?.sessionId).toBe("string") - expect(tool.state.title).toBe("inspect bug") - expect(tool.state.metadata?.model).toBeDefined() + const fiber = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) - yield* prompt.cancel(chat.id) - yield* Fiber.await(fiber) - }), - { git: true, config: providerCfg }, - ), + const tool = yield* pollWithTimeout( + Effect.gen(function* () { + const msgs = yield* MessageV2.filterCompactedEffect(chat.id) + const assistant = msgs.findLast((item) => item.info.role === "assistant" && item.info.agent === "build") + const tool = assistant?.parts.find( + (part): part is MessageV2.ToolPart => part.type === "tool" && part.tool === "task", + ) + if (tool?.state.status === "running" && tool.state.metadata?.sessionId) return tool + }), + "timed out waiting for running task metadata", + ) + + if (tool.state.status !== "running") return + expect(typeof tool.state.metadata?.sessionId).toBe("string") + expect(tool.state.title).toBe("inspect bug") + expect(tool.state.metadata?.model).toBeDefined() + + yield* prompt.cancel(chat.id) + yield* Fiber.await(fiber) + }), + { git: true }, 10_000, ) -it.live( +it.instance( "loop sets status to busy then idle", () => - provideTmpdirServer( - Effect.fnUntraced(function* ({ llm }) { - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const status = yield* SessionStatus.Service + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const status = yield* SessionStatus.Service - yield* llm.hang + yield* llm.hang - const chat = yield* sessions.create({}) - yield* user(chat.id, "hi") + const chat = yield* sessions.create({}) + yield* user(chat.id, "hi") - const fiber = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) - yield* llm.wait(1) - expect((yield* status.get(chat.id)).type).toBe("busy") - yield* prompt.cancel(chat.id) - yield* Fiber.await(fiber) - expect((yield* status.get(chat.id)).type).toBe("idle") - }), - { git: true, config: providerCfg }, - ), + const fiber = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) + yield* llm.wait(1) + expect((yield* status.get(chat.id)).type).toBe("busy") + yield* prompt.cancel(chat.id) + yield* Fiber.await(fiber) + expect((yield* status.get(chat.id)).type).toBe("idle") + }), + { git: true }, 3_000, ) // Cancel semantics -it.live( +it.instance( "cancel interrupts loop and resolves with an assistant message", () => - provideTmpdirServer( - Effect.fnUntraced(function* ({ llm }) { - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const chat = yield* sessions.create({ title: "Pinned" }) - yield* seed(chat.id) + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const chat = yield* sessions.create({ title: "Pinned" }) + yield* seed(chat.id) - yield* llm.hang + yield* llm.hang - yield* user(chat.id, "more") + yield* user(chat.id, "more") - const fiber = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) - yield* llm.wait(1) - yield* prompt.cancel(chat.id) - const exit = yield* Fiber.await(fiber) - expect(Exit.isSuccess(exit)).toBe(true) - if (Exit.isSuccess(exit)) { - expect(exit.value.info.role).toBe("assistant") - } - }), - { git: true, config: providerCfg }, - ), + const fiber = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) + yield* llm.wait(1) + yield* prompt.cancel(chat.id) + const exit = yield* Fiber.await(fiber) + expect(Exit.isSuccess(exit)).toBe(true) + if (Exit.isSuccess(exit)) { + expect(exit.value.info.role).toBe("assistant") + } + }), + { git: true }, 3_000, ) -it.live( +it.instance( "cancel records MessageAbortedError on interrupted process", () => - provideTmpdirServer( - Effect.fnUntraced(function* ({ llm }) { - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const chat = yield* sessions.create({ title: "Pinned" }) - yield* llm.hang - yield* user(chat.id, "hello") - - const fiber = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) - yield* llm.wait(1) - yield* prompt.cancel(chat.id) - const exit = yield* Fiber.await(fiber) - expect(Exit.isSuccess(exit)).toBe(true) - if (Exit.isSuccess(exit)) { - const info = exit.value.info - if (info.role === "assistant") { - expect(info.error?.name).toBe("MessageAbortedError") - } + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const chat = yield* sessions.create({ title: "Pinned" }) + yield* llm.hang + yield* user(chat.id, "hello") + + const fiber = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) + yield* llm.wait(1) + yield* prompt.cancel(chat.id) + const exit = yield* Fiber.await(fiber) + expect(Exit.isSuccess(exit)).toBe(true) + if (Exit.isSuccess(exit)) { + const info = exit.value.info + if (info.role === "assistant") { + expect(info.error?.name).toBe("MessageAbortedError") } - }), - { git: true, config: providerCfg }, - ), + } + }), + { git: true }, 3_000, ) -it.live( +it.instance( "cancel finalizes subtask tool state", () => - provideTmpdirInstance( - () => - Effect.gen(function* () { - const ready = defer() - const aborted = defer() - const registry = yield* ToolRegistry.Service - const { task } = yield* registry.named() - const original = task.execute - task.execute = (_args, ctx) => - Effect.callback((_resume) => { - ready.resolve() - ctx.abort.addEventListener("abort", () => aborted.resolve(), { once: true }) - return Effect.sync(() => aborted.resolve()) - }) - yield* Effect.addFinalizer(() => Effect.sync(() => void (task.execute = original))) - - const { prompt, chat } = yield* boot() - const msg = yield* user(chat.id, "hello") - yield* addSubtask(chat.id, msg.id) - - const fiber = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) - yield* Effect.promise(() => ready.promise) - yield* prompt.cancel(chat.id) - yield* Effect.promise(() => aborted.promise) - - const exit = yield* Fiber.await(fiber) - expect(Exit.isSuccess(exit)).toBe(true) + Effect.gen(function* () { + const ready = yield* Deferred.make() + const aborted = yield* Deferred.make() + const registry = yield* ToolRegistry.Service + const { task } = yield* registry.named() + const original = task.execute + task.execute = (_args, ctx) => + Effect.callback((_resume) => { + ctx.abort.addEventListener("abort", () => succeedVoid(aborted), { once: true }) + if (ctx.abort.aborted) succeedVoid(aborted) + succeedVoid(ready) + return Effect.sync(() => succeedVoid(aborted)) + }) + yield* Effect.addFinalizer(() => Effect.sync(() => void (task.execute = original))) - const msgs = yield* MessageV2.filterCompactedEffect(chat.id) - const taskMsg = msgs.find((item) => item.info.role === "assistant" && item.info.agent === "general") - expect(taskMsg?.info.role).toBe("assistant") - if (!taskMsg || taskMsg.info.role !== "assistant") return + const { prompt, chat } = yield* boot() + const msg = yield* user(chat.id, "hello") + yield* addSubtask(chat.id, msg.id) - const tool = toolPart(taskMsg.parts) - expect(tool?.type).toBe("tool") - if (!tool) return + const fiber = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) + yield* awaitWithTimeout(Deferred.await(ready), "timed out waiting for task tool to start", "10 seconds") + yield* prompt.cancel(chat.id) - expect(tool.state.status).not.toBe("running") - expect(taskMsg.info.time.completed).toBeDefined() - expect(taskMsg.info.finish).toBeDefined() - }), - { git: true, config: cfg }, - ), + const exit = yield* Fiber.await(fiber) + expect(Exit.isSuccess(exit)).toBe(true) + yield* awaitWithTimeout(Deferred.await(aborted), "timed out waiting for task tool abort", "10 seconds") + + const msgs = yield* MessageV2.filterCompactedEffect(chat.id) + const taskMsg = msgs.find((item) => item.info.role === "assistant" && item.info.agent === "general") + expect(taskMsg?.info.role).toBe("assistant") + if (!taskMsg || taskMsg.info.role !== "assistant") return + + const tool = toolPart(taskMsg.parts) + expect(tool?.type).toBe("tool") + if (!tool) return + + expect(tool.state.status).not.toBe("running") + expect(taskMsg.info.time.completed).toBeDefined() + expect(taskMsg.info.finish).toBeDefined() + }), + { git: true, config: cfg }, 30_000, ) -it.live( +it.instance( "cancel propagates from slash command subtask to child session", () => - provideTmpdirServer( - Effect.fnUntraced(function* ({ llm }) { - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const status = yield* SessionStatus.Service - const chat = yield* sessions.create({ title: "Pinned" }) - yield* llm.hang - const msg = yield* user(chat.id, "hello") - yield* addSubtask(chat.id, msg.id) - - const fiber = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) - yield* llm.wait(1) - - const msgs = yield* MessageV2.filterCompactedEffect(chat.id) - const taskMsg = msgs.find((item) => item.info.role === "assistant" && item.info.agent === "general") - const tool = taskMsg ? toolPart(taskMsg.parts) : undefined - const sessionID = tool?.state.status === "running" ? tool.state.metadata?.sessionId : undefined - expect(typeof sessionID).toBe("string") - if (typeof sessionID !== "string") throw new Error("missing child session id") - const childID = SessionID.make(sessionID) - expect((yield* status.get(childID)).type).toBe("busy") + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const status = yield* SessionStatus.Service + const chat = yield* sessions.create({ title: "Pinned" }) + yield* llm.hang + const msg = yield* user(chat.id, "hello") + yield* addSubtask(chat.id, msg.id) - yield* prompt.cancel(chat.id) - const exit = yield* Fiber.await(fiber) - expect(Exit.isSuccess(exit)).toBe(true) + const fiber = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) + yield* llm.wait(1) - expect((yield* status.get(chat.id)).type).toBe("idle") - expect((yield* status.get(childID)).type).toBe("idle") - }), - { git: true, config: providerCfg }, - ), + const msgs = yield* MessageV2.filterCompactedEffect(chat.id) + const taskMsg = msgs.find((item) => item.info.role === "assistant" && item.info.agent === "general") + const tool = taskMsg ? toolPart(taskMsg.parts) : undefined + const sessionID = tool?.state.status === "running" ? tool.state.metadata?.sessionId : undefined + expect(typeof sessionID).toBe("string") + if (typeof sessionID !== "string") throw new Error("missing child session id") + const childID = SessionID.make(sessionID) + expect((yield* status.get(childID)).type).toBe("busy") + + yield* prompt.cancel(chat.id) + const exit = yield* Fiber.await(fiber) + expect(Exit.isSuccess(exit)).toBe(true) + + expect((yield* status.get(chat.id)).type).toBe("idle") + expect((yield* status.get(childID)).type).toBe("idle") + }), + { git: true }, 10_000, ) -it.live( +it.instance( "cancel with queued callers resolves all cleanly", () => - provideTmpdirServer( - Effect.fnUntraced(function* ({ llm }) { - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const chat = yield* sessions.create({ title: "Pinned" }) - yield* llm.hang - yield* user(chat.id, "hello") - - const a = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) - yield* llm.wait(1) - const b = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) - yield* Effect.sleep(50) - - yield* prompt.cancel(chat.id) - const [exitA, exitB] = yield* Effect.all([Fiber.await(a), Fiber.await(b)]) - expect(Exit.isSuccess(exitA)).toBe(true) - expect(Exit.isSuccess(exitB)).toBe(true) - if (Exit.isSuccess(exitA) && Exit.isSuccess(exitB)) { - expect(exitA.value.info.id).toBe(exitB.value.info.id) - } - }), - { git: true, config: providerCfg }, - ), + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const chat = yield* sessions.create({ title: "Pinned" }) + yield* llm.hang + yield* user(chat.id, "hello") + + const a = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) + yield* llm.wait(1) + const b = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) + yield* Effect.sleep(50) + + yield* prompt.cancel(chat.id) + const [exitA, exitB] = yield* Effect.all([Fiber.await(a), Fiber.await(b)]) + expect(Exit.isSuccess(exitA)).toBe(true) + expect(Exit.isSuccess(exitB)).toBe(true) + if (Exit.isSuccess(exitA) && Exit.isSuccess(exitB)) { + expect(exitA.value.info.id).toBe(exitB.value.info.id) + } + }), + { git: true }, 3_000, ) // Queue semantics -it.live("concurrent loop callers get same result", () => - provideTmpdirInstance( - (_dir) => - Effect.gen(function* () { - const { prompt, run, chat } = yield* boot() - yield* seed(chat.id, { finish: "stop" }) +it.instance( + "concurrent loop callers get same result", + () => + Effect.gen(function* () { + const { prompt, run, chat } = yield* boot() + yield* seed(chat.id, { finish: "stop" }) - const [a, b] = yield* Effect.all([prompt.loop({ sessionID: chat.id }), prompt.loop({ sessionID: chat.id })], { - concurrency: "unbounded", - }) + const [a, b] = yield* Effect.all([prompt.loop({ sessionID: chat.id }), prompt.loop({ sessionID: chat.id })], { + concurrency: "unbounded", + }) - expect(a.info.id).toBe(b.info.id) - expect(a.info.role).toBe("assistant") - yield* run.assertNotBusy(chat.id) - }), - { git: true }, - ), + expect(a.info.id).toBe(b.info.id) + expect(a.info.role).toBe("assistant") + yield* run.assertNotBusy(chat.id) + }), + { git: true }, ) -it.live( +it.instance( "concurrent loop callers all receive same error result", () => - provideTmpdirServer( - Effect.fnUntraced(function* ({ llm }) { - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const chat = yield* sessions.create({ title: "Pinned" }) + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const chat = yield* sessions.create({ title: "Pinned" }) - yield* llm.fail("boom") - yield* user(chat.id, "hello") + yield* llm.fail("boom") + yield* user(chat.id, "hello") - const [a, b] = yield* Effect.all([prompt.loop({ sessionID: chat.id }), prompt.loop({ sessionID: chat.id })], { - concurrency: "unbounded", - }) - expect(a.info.id).toBe(b.info.id) - expect(a.info.role).toBe("assistant") - }), - { git: true, config: providerCfg }, - ), + const [a, b] = yield* Effect.all([prompt.loop({ sessionID: chat.id }), prompt.loop({ sessionID: chat.id })], { + concurrency: "unbounded", + }) + expect(a.info.id).toBe(b.info.id) + expect(a.info.role).toBe("assistant") + }), + { git: true }, 3_000, ) -it.live( +it.instance( "prompt submitted during an active run is included in the next LLM input", () => - provideTmpdirServer( - Effect.fnUntraced(function* ({ llm }) { - const gate = defer() - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const chat = yield* sessions.create({ title: "Pinned" }) + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) + const gate = yield* Deferred.make() + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const chat = yield* sessions.create({ title: "Pinned" }) - yield* llm.hold("first", gate.promise) - yield* llm.text("second") + yield* llm.hold("first", deferredAsPromise(gate)) + yield* llm.text("second") - const a = yield* prompt - .prompt({ - sessionID: chat.id, - agent: "build", - model: ref, - parts: [{ type: "text", text: "first" }], - }) - .pipe(Effect.forkChild) + const a = yield* prompt + .prompt({ + sessionID: chat.id, + agent: "build", + model: ref, + parts: [{ type: "text", text: "first" }], + }) + .pipe(Effect.forkChild) - yield* llm.wait(1) - - const id = MessageID.ascending() - const b = yield* prompt - .prompt({ - sessionID: chat.id, - messageID: id, - agent: "build", - model: ref, - parts: [{ type: "text", text: "second" }], - }) - .pipe(Effect.forkChild) + yield* llm.wait(1) - yield* Effect.promise(async () => { - const end = Date.now() + 5000 - while (Date.now() < end) { - const msgs = await Effect.runPromise(sessions.messages({ sessionID: chat.id })) - if (msgs.some((msg) => msg.info.role === "user" && msg.info.id === id)) return - await new Promise((done) => setTimeout(done, 20)) - } - throw new Error("timed out waiting for second prompt to save") + const id = MessageID.ascending() + const b = yield* prompt + .prompt({ + sessionID: chat.id, + messageID: id, + agent: "build", + model: ref, + parts: [{ type: "text", text: "second" }], }) + .pipe(Effect.forkChild) + + yield* pollWithTimeout( + sessions + .messages({ sessionID: chat.id }) + .pipe( + Effect.map((msgs) => + msgs.some((msg) => msg.info.role === "user" && msg.info.id === id) ? true : undefined, + ), + ), + "timed out waiting for second prompt to save", + ) - gate.resolve() - - const [ea, eb] = yield* Effect.all([Fiber.await(a), Fiber.await(b)]) - expect(Exit.isSuccess(ea)).toBe(true) - expect(Exit.isSuccess(eb)).toBe(true) - expect(yield* llm.calls).toBe(2) + yield* Deferred.succeed(gate, void 0) - const msgs = yield* sessions.messages({ sessionID: chat.id }) - const assistants = msgs.filter((msg) => msg.info.role === "assistant") - expect(assistants).toHaveLength(2) - const last = assistants.at(-1) - if (!last || last.info.role !== "assistant") throw new Error("expected second assistant") - expect(last.info.parentID).toBe(id) - expect(last.parts.some((part) => part.type === "text" && part.text === "second")).toBe(true) + const [ea, eb] = yield* Effect.all([Fiber.await(a), Fiber.await(b)]) + expect(Exit.isSuccess(ea)).toBe(true) + expect(Exit.isSuccess(eb)).toBe(true) + expect(yield* llm.calls).toBe(2) - const inputs = yield* llm.inputs - expect(inputs).toHaveLength(2) - expect(JSON.stringify(inputs.at(-1)?.messages)).toContain("second") - }), - { git: true, config: providerCfg }, - ), + const msgs = yield* sessions.messages({ sessionID: chat.id }) + const assistants = msgs.filter((msg) => msg.info.role === "assistant") + expect(assistants).toHaveLength(2) + const last = assistants.at(-1) + if (!last || last.info.role !== "assistant") throw new Error("expected second assistant") + expect(last.info.parentID).toBe(id) + expect(last.parts.some((part) => part.type === "text" && part.text === "second")).toBe(true) + + const inputs = yield* llm.inputs + expect(inputs).toHaveLength(2) + expect(JSON.stringify(inputs.at(-1)?.messages)).toContain("second") + }), + { git: true }, 3_000, ) -it.live( +it.instance( "assertNotBusy throws BusyError when loop running", () => - provideTmpdirServer( - Effect.fnUntraced(function* ({ llm }) { - const prompt = yield* SessionPrompt.Service - const run = yield* SessionRunState.Service - const sessions = yield* Session.Service - yield* llm.hang + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) + const prompt = yield* SessionPrompt.Service + const run = yield* SessionRunState.Service + const sessions = yield* Session.Service + yield* llm.hang - const chat = yield* sessions.create({}) - yield* user(chat.id, "hi") + const chat = yield* sessions.create({}) + yield* user(chat.id, "hi") - const fiber = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) - yield* llm.wait(1) + const fiber = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) + yield* llm.wait(1) - const exit = yield* run.assertNotBusy(chat.id).pipe(Effect.exit) - expect(Exit.isFailure(exit)).toBe(true) - if (Exit.isFailure(exit)) { - expect(Cause.squash(exit.cause)).toBeInstanceOf(Session.BusyError) - } + const exit = yield* run.assertNotBusy(chat.id).pipe(Effect.exit) + expect(Exit.isFailure(exit)).toBe(true) + if (Exit.isFailure(exit)) { + expect(Cause.squash(exit.cause)).toBeInstanceOf(Session.BusyError) + } - yield* prompt.cancel(chat.id) - yield* Fiber.await(fiber) - }), - { git: true, config: providerCfg }, - ), + yield* prompt.cancel(chat.id) + yield* Fiber.await(fiber) + }), + { git: true }, 3_000, ) -it.live("assertNotBusy succeeds when idle", () => - provideTmpdirInstance( - (_dir) => - Effect.gen(function* () { - const run = yield* SessionRunState.Service - const sessions = yield* Session.Service +it.instance( + "assertNotBusy succeeds when idle", + () => + Effect.gen(function* () { + const run = yield* SessionRunState.Service + const sessions = yield* Session.Service - const chat = yield* sessions.create({}) - const exit = yield* run.assertNotBusy(chat.id).pipe(Effect.exit) - expect(Exit.isSuccess(exit)).toBe(true) - }), - { git: true }, - ), + const chat = yield* sessions.create({}) + const exit = yield* run.assertNotBusy(chat.id).pipe(Effect.exit) + expect(Exit.isSuccess(exit)).toBe(true) + }), + { git: true }, ) // Shell semantics -it.live( +it.instance( "shell rejects with BusyError when loop running", () => - provideTmpdirServer( - Effect.fnUntraced(function* ({ llm }) { - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const chat = yield* sessions.create({ title: "Pinned" }) - yield* llm.hang - yield* user(chat.id, "hi") + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const chat = yield* sessions.create({ title: "Pinned" }) + yield* llm.hang + yield* user(chat.id, "hi") - const fiber = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) - yield* llm.wait(1) + const fiber = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) + yield* llm.wait(1) - const exit = yield* prompt.shell({ sessionID: chat.id, agent: "build", command: "echo hi" }).pipe(Effect.exit) - expect(Exit.isFailure(exit)).toBe(true) - if (Exit.isFailure(exit)) { - expect(Cause.squash(exit.cause)).toBeInstanceOf(Session.BusyError) - } + const exit = yield* prompt.shell({ sessionID: chat.id, agent: "build", command: "echo hi" }).pipe(Effect.exit) + expect(Exit.isFailure(exit)).toBe(true) + if (Exit.isFailure(exit)) { + expect(Cause.squash(exit.cause)).toBeInstanceOf(Session.BusyError) + } - yield* prompt.cancel(chat.id) - yield* Fiber.await(fiber) - }), - { git: true, config: providerCfg }, - ), + yield* prompt.cancel(chat.id) + yield* Fiber.await(fiber) + }), + { git: true }, 3_000, ) -unix("shell captures stdout and stderr in completed tool output", () => - provideTmpdirInstance( - (_dir) => - Effect.gen(function* () { - const { prompt, run, chat } = yield* boot() - const result = yield* prompt.shell({ - sessionID: chat.id, - agent: "build", - command: "printf out && printf err >&2", - }) +unix( + "shell captures stdout and stderr in completed tool output", + () => + Effect.gen(function* () { + const { prompt, run, chat } = yield* boot() + const result = yield* prompt.shell({ + sessionID: chat.id, + agent: "build", + command: "printf out && printf err >&2", + }) - expect(result.info.role).toBe("assistant") - const tool = completedTool(result.parts) - if (!tool) return + expect(result.info.role).toBe("assistant") + const tool = completedTool(result.parts) + if (!tool) return - expect(tool.state.output).toContain("out") - expect(tool.state.output).toContain("err") - expect(tool.state.metadata.output).toContain("out") - expect(tool.state.metadata.output).toContain("err") - yield* run.assertNotBusy(chat.id) - }), - { git: true, config: cfg }, - ), + expect(tool.state.output).toContain("out") + expect(tool.state.output).toContain("err") + expect(tool.state.metadata.output).toContain("out") + expect(tool.state.metadata.output).toContain("err") + yield* run.assertNotBusy(chat.id) + }), + { git: true, config: cfg }, ) -unix("shell completes a fast command on the preferred shell", () => - provideTmpdirInstance( - (dir) => - Effect.gen(function* () { - const { prompt, run, chat } = yield* boot() - const result = yield* prompt.shell({ - sessionID: chat.id, - agent: "build", - command: "pwd", - }) +unix( + "shell completes a fast command on the preferred shell", + () => + Effect.gen(function* () { + const { directory: dir } = yield* TestInstance + const { prompt, run, chat } = yield* boot() + const result = yield* prompt.shell({ + sessionID: chat.id, + agent: "build", + command: "pwd", + }) - expect(result.info.role).toBe("assistant") - const tool = completedTool(result.parts) - if (!tool) return + expect(result.info.role).toBe("assistant") + const tool = completedTool(result.parts) + if (!tool) return - expect(tool.state.input.command).toBe("pwd") - expect(tool.state.output).toContain(dir) - expect(tool.state.metadata.output).toContain(dir) - yield* run.assertNotBusy(chat.id) - }), - { git: true, config: cfg }, - ), + expect(tool.state.input.command).toBe("pwd") + expect(tool.state.output).toContain(dir) + expect(tool.state.metadata.output).toContain(dir) + yield* run.assertNotBusy(chat.id) + }), + { git: true, config: cfg }, ) unix( "shell uses configured shell over env shell", () => withSh(() => - provideTmpdirInstance( - (_dir) => - Effect.gen(function* () { - if (!Bun.which("bash")) return - - const { prompt, chat } = yield* boot() - const result = yield* prompt.shell({ - sessionID: chat.id, - agent: "build", - command: "[[ 1 -eq 1 ]] && printf configured", - }) - - const tool = completedTool(result.parts) - if (!tool) return - expect(tool.state.output).toContain("configured") - }), - { git: true, config: { ...cfg, shell: "bash" } }, - ), - ), - 30_000, -) - -unix("shell commands can change directory after startup", () => - provideTmpdirInstance( - (dir) => Effect.gen(function* () { - const { prompt, run, chat } = yield* boot() - const parent = path.dirname(dir) + if (!(yield* hasBash)) return + + const { prompt, chat } = yield* boot() const result = yield* prompt.shell({ sessionID: chat.id, agent: "build", - command: "cd .. && pwd", + command: "[[ 1 -eq 1 ]] && printf configured", }) - expect(result.info.role).toBe("assistant") const tool = completedTool(result.parts) if (!tool) return - - expect(tool.state.output).toContain(parent) - expect(tool.state.metadata.output).toContain(parent) - yield* run.assertNotBusy(chat.id) + expect(tool.state.output).toContain("configured") }), - { git: true, config: cfg }, - ), + ), + { git: true, config: { ...cfg, shell: "bash" } }, + 30_000, ) -unix("shell lists files from the project directory", () => - provideTmpdirInstance( - (dir) => - Effect.gen(function* () { - const { prompt, run, chat } = yield* boot() - yield* Effect.promise(() => Bun.write(path.join(dir, "README.md"), "# e2e\n")) +unix( + "shell commands can change directory after startup", + () => + Effect.gen(function* () { + const { directory: dir } = yield* TestInstance + const { prompt, run, chat } = yield* boot() + const parent = path.dirname(dir) + const result = yield* prompt.shell({ + sessionID: chat.id, + agent: "build", + command: "cd .. && pwd", + }) - const result = yield* prompt.shell({ - sessionID: chat.id, - agent: "build", - command: "command ls", - }) + expect(result.info.role).toBe("assistant") + const tool = completedTool(result.parts) + if (!tool) return - expect(result.info.role).toBe("assistant") - const tool = completedTool(result.parts) - if (!tool) return + expect(tool.state.output).toContain(parent) + expect(tool.state.metadata.output).toContain(parent) + yield* run.assertNotBusy(chat.id) + }), + { git: true, config: cfg }, +) - expect(tool.state.input.command).toBe("command ls") - expect(tool.state.output).toContain("README.md") - expect(tool.state.metadata.output).toContain("README.md") - yield* run.assertNotBusy(chat.id) - }), - { git: true, config: cfg }, - ), +unix( + "shell lists files from the project directory", + () => + Effect.gen(function* () { + const { directory: dir } = yield* TestInstance + const { prompt, run, chat } = yield* boot() + yield* writeText(path.join(dir, "README.md"), "# e2e\n") + + const result = yield* prompt.shell({ + sessionID: chat.id, + agent: "build", + command: "command ls", + }) + + expect(result.info.role).toBe("assistant") + const tool = completedTool(result.parts) + if (!tool) return + + expect(tool.state.input.command).toBe("command ls") + expect(tool.state.output).toContain("README.md") + expect(tool.state.metadata.output).toContain("README.md") + yield* run.assertNotBusy(chat.id) + }), + { git: true, config: cfg }, ) -unix("shell captures stderr from a failing command", () => - provideTmpdirInstance( - (_dir) => - Effect.gen(function* () { - const { prompt, run, chat } = yield* boot() - const result = yield* prompt.shell({ - sessionID: chat.id, - agent: "build", - command: "command -v __nonexistent_cmd_e2e__ || echo 'not found' >&2; exit 1", - }) +unix( + "shell captures stderr from a failing command", + () => + Effect.gen(function* () { + const { prompt, run, chat } = yield* boot() + const result = yield* prompt.shell({ + sessionID: chat.id, + agent: "build", + command: "command -v __nonexistent_cmd_e2e__ || echo 'not found' >&2; exit 1", + }) - expect(result.info.role).toBe("assistant") - const tool = completedTool(result.parts) - if (!tool) return + expect(result.info.role).toBe("assistant") + const tool = completedTool(result.parts) + if (!tool) return - expect(tool.state.output).toContain("not found") - expect(tool.state.metadata.output).toContain("not found") - yield* run.assertNotBusy(chat.id) - }), - { git: true, config: cfg }, - ), + expect(tool.state.output).toContain("not found") + expect(tool.state.metadata.output).toContain("not found") + yield* run.assertNotBusy(chat.id) + }), + { git: true, config: cfg }, ) unix( "shell updates running metadata before process exit", () => withSh(() => - provideTmpdirInstance( - (_dir) => + Effect.gen(function* () { + const { prompt, chat } = yield* boot() + + const fiber = yield* prompt + .shell({ sessionID: chat.id, agent: "build", command: "printf first && sleep 0.2 && printf second" }) + .pipe(Effect.forkChild) + + yield* pollWithTimeout( Effect.gen(function* () { - const { prompt, chat } = yield* boot() - - const fiber = yield* prompt - .shell({ sessionID: chat.id, agent: "build", command: "printf first && sleep 0.2 && printf second" }) - .pipe(Effect.forkChild) - - yield* Effect.promise(async () => { - const start = Date.now() - while (Date.now() - start < 5000) { - const msgs = await MessageV2.filterCompacted(MessageV2.stream(chat.id)) - const taskMsg = msgs.find((item) => item.info.role === "assistant") - const tool = taskMsg ? toolPart(taskMsg.parts) : undefined - if (tool?.state.status === "running" && tool.state.metadata?.output.includes("first")) return - await new Promise((done) => setTimeout(done, 20)) - } - throw new Error("timed out waiting for running shell metadata") - }) - - const exit = yield* Fiber.await(fiber) - expect(Exit.isSuccess(exit)).toBe(true) + const msgs = yield* MessageV2.filterCompactedEffect(chat.id) + const taskMsg = msgs.find((item) => item.info.role === "assistant") + const tool = taskMsg ? toolPart(taskMsg.parts) : undefined + if (tool?.state.status === "running" && tool.state.metadata?.output.includes("first")) return true }), - { git: true, config: cfg }, - ), + "timed out waiting for running shell metadata", + ) + + const exit = yield* Fiber.await(fiber) + expect(Exit.isSuccess(exit)).toBe(true) + }), ), + { git: true, config: cfg }, 30_000, ) -it.live( +it.instance( "loop waits while shell runs and starts after shell exits", () => - provideTmpdirServer( - Effect.fnUntraced(function* ({ llm }) { - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const chat = yield* sessions.create({ - title: "Pinned", - permission: [{ permission: "*", pattern: "*", action: "allow" }], - }) - yield* llm.text("after-shell") + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const chat = yield* sessions.create({ + title: "Pinned", + permission: [{ permission: "*", pattern: "*", action: "allow" }], + }) + yield* llm.text("after-shell") - const sh = yield* prompt - .shell({ sessionID: chat.id, agent: "build", command: "sleep 0.2" }) - .pipe(Effect.forkChild) - yield* Effect.sleep(50) + const sh = yield* prompt + .shell({ sessionID: chat.id, agent: "build", command: "sleep 0.2" }) + .pipe(Effect.forkChild) + yield* Effect.sleep(50) - const loop = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) - yield* Effect.sleep(50) + const loop = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) + yield* Effect.sleep(50) - expect(yield* llm.calls).toBe(0) + expect(yield* llm.calls).toBe(0) - yield* Fiber.await(sh) - const exit = yield* Fiber.await(loop) + yield* Fiber.await(sh) + const exit = yield* Fiber.await(loop) - expect(Exit.isSuccess(exit)).toBe(true) - if (Exit.isSuccess(exit)) { - expect(exit.value.info.role).toBe("assistant") - expect(exit.value.parts.some((part) => part.type === "text" && part.text === "after-shell")).toBe(true) - } - expect(yield* llm.calls).toBe(1) - }), - { git: true, config: providerCfg }, - ), + expect(Exit.isSuccess(exit)).toBe(true) + if (Exit.isSuccess(exit)) { + expect(exit.value.info.role).toBe("assistant") + expect(exit.value.parts.some((part) => part.type === "text" && part.text === "after-shell")).toBe(true) + } + expect(yield* llm.calls).toBe(1) + }), + { git: true }, 3_000, ) -it.live( +it.instance( "shell completion resumes queued loop callers", () => - provideTmpdirServer( - Effect.fnUntraced(function* ({ llm }) { - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const chat = yield* sessions.create({ - title: "Pinned", - permission: [{ permission: "*", pattern: "*", action: "allow" }], - }) - yield* llm.text("done") + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const chat = yield* sessions.create({ + title: "Pinned", + permission: [{ permission: "*", pattern: "*", action: "allow" }], + }) + yield* llm.text("done") - const sh = yield* prompt - .shell({ sessionID: chat.id, agent: "build", command: "sleep 0.2" }) - .pipe(Effect.forkChild) - yield* Effect.sleep(50) + const sh = yield* prompt + .shell({ sessionID: chat.id, agent: "build", command: "sleep 0.2" }) + .pipe(Effect.forkChild) + yield* Effect.sleep(50) - const a = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) - const b = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) - yield* Effect.sleep(50) + const a = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) + const b = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) + yield* Effect.sleep(50) - expect(yield* llm.calls).toBe(0) + expect(yield* llm.calls).toBe(0) - yield* Fiber.await(sh) - const [ea, eb] = yield* Effect.all([Fiber.await(a), Fiber.await(b)]) + yield* Fiber.await(sh) + const [ea, eb] = yield* Effect.all([Fiber.await(a), Fiber.await(b)]) - expect(Exit.isSuccess(ea)).toBe(true) - expect(Exit.isSuccess(eb)).toBe(true) - if (Exit.isSuccess(ea) && Exit.isSuccess(eb)) { - expect(ea.value.info.id).toBe(eb.value.info.id) - expect(ea.value.info.role).toBe("assistant") - } - expect(yield* llm.calls).toBe(1) - }), - { git: true, config: providerCfg }, - ), + expect(Exit.isSuccess(ea)).toBe(true) + expect(Exit.isSuccess(eb)).toBe(true) + if (Exit.isSuccess(ea) && Exit.isSuccess(eb)) { + expect(ea.value.info.id).toBe(eb.value.info.id) + expect(ea.value.info.role).toBe("assistant") + } + expect(yield* llm.calls).toBe(1) + }), + { git: true }, 3_000, ) @@ -1390,38 +1436,33 @@ unix( "command ! expansion uses configured shell over env shell", () => withSh(() => - provideTmpdirServer( - ({ llm }) => - Effect.gen(function* () { - if (!Bun.which("bash")) return + Effect.gen(function* () { + if (!(yield* hasBash)) return + const { llm } = yield* useServerConfig((url) => ({ + ...providerCfg(url), + shell: "bash", + command: { + probe: { + template: "Probe: !`[[ 1 -eq 1 ]] && printf configured`", + }, + }, + })) - const { prompt, chat } = yield* boot() - yield* llm.text("done") + const { prompt, chat } = yield* boot() + yield* llm.text("done") - const result = yield* prompt.command({ - sessionID: chat.id, - command: "probe", - arguments: "", - }) + const result = yield* prompt.command({ + sessionID: chat.id, + command: "probe", + arguments: "", + }) - expect(result.info.role).toBe("assistant") - const inputs = yield* llm.inputs - expect(JSON.stringify(inputs.at(-1)?.messages)).toContain("configured") - }), - { - git: true, - config: (url) => ({ - ...providerCfg(url), - shell: "bash", - command: { - probe: { - template: "Probe: !`[[ 1 -eq 1 ]] && printf configured`", - }, - }, - }), - }, - ), + expect(result.info.role).toBe("assistant") + const inputs = yield* llm.inputs + expect(JSON.stringify(inputs.at(-1)?.messages)).toContain("configured") + }), ), + { git: true }, 30_000, ) @@ -1429,36 +1470,33 @@ unix( "cancel interrupts shell and resolves cleanly", () => withSh(() => - provideTmpdirInstance( - (_dir) => - Effect.gen(function* () { - const { prompt, run, chat } = yield* boot() - - const sh = yield* prompt - .shell({ sessionID: chat.id, agent: "build", command: "sleep 30" }) - .pipe(Effect.forkChild) - yield* Effect.sleep(50) - - yield* prompt.cancel(chat.id) - - const status = yield* SessionStatus.Service - expect((yield* status.get(chat.id)).type).toBe("idle") - const busy = yield* run.assertNotBusy(chat.id).pipe(Effect.exit) - expect(Exit.isSuccess(busy)).toBe(true) - - const exit = yield* Fiber.await(sh) - expect(Exit.isSuccess(exit)).toBe(true) - if (Exit.isSuccess(exit)) { - expect(exit.value.info.role).toBe("assistant") - const tool = completedTool(exit.value.parts) - if (tool) { - expect(tool.state.output).toContain("User aborted the command") - } - } - }), - { git: true, config: cfg }, - ), + Effect.gen(function* () { + const { prompt, run, chat } = yield* boot() + + const sh = yield* prompt + .shell({ sessionID: chat.id, agent: "build", command: "sleep 30" }) + .pipe(Effect.forkChild) + yield* Effect.sleep(50) + + yield* prompt.cancel(chat.id) + + const status = yield* SessionStatus.Service + expect((yield* status.get(chat.id)).type).toBe("idle") + const busy = yield* run.assertNotBusy(chat.id).pipe(Effect.exit) + expect(Exit.isSuccess(busy)).toBe(true) + + const exit = yield* Fiber.await(sh) + expect(Exit.isSuccess(exit)).toBe(true) + if (Exit.isSuccess(exit)) { + expect(exit.value.info.role).toBe("assistant") + const tool = completedTool(exit.value.parts) + if (tool) { + expect(tool.state.output).toContain("User aborted the command") + } + } + }), ), + { git: true, config: cfg }, 30_000, ) @@ -1466,114 +1504,104 @@ unix( "cancel persists aborted shell result when shell ignores TERM", () => withSh(() => - provideTmpdirInstance( - (_dir) => - Effect.gen(function* () { - const { prompt, chat } = yield* boot() - - const sh = yield* prompt - .shell({ sessionID: chat.id, agent: "build", command: "trap '' TERM; sleep 30" }) - .pipe(Effect.forkChild) - yield* Effect.sleep(50) - - yield* prompt.cancel(chat.id) - - const exit = yield* Fiber.await(sh) - expect(Exit.isSuccess(exit)).toBe(true) - if (Exit.isSuccess(exit)) { - expect(exit.value.info.role).toBe("assistant") - const tool = completedTool(exit.value.parts) - if (tool) { - expect(tool.state.output).toContain("User aborted the command") - } - } - }), - { git: true, config: cfg }, - ), + Effect.gen(function* () { + const { prompt, chat } = yield* boot() + + const sh = yield* prompt + .shell({ sessionID: chat.id, agent: "build", command: "trap '' TERM; sleep 30" }) + .pipe(Effect.forkChild) + yield* Effect.sleep(50) + + yield* prompt.cancel(chat.id) + + const exit = yield* Fiber.await(sh) + expect(Exit.isSuccess(exit)).toBe(true) + if (Exit.isSuccess(exit)) { + expect(exit.value.info.role).toBe("assistant") + const tool = completedTool(exit.value.parts) + if (tool) { + expect(tool.state.output).toContain("User aborted the command") + } + } + }), ), + { git: true, config: cfg }, 30_000, ) unix( "cancel finalizes interrupted bash tool output through normal truncation", () => - provideTmpdirServer( - ({ dir, llm }) => - Effect.gen(function* () { - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const chat = yield* sessions.create({ - title: "Interrupted bash truncation", - permission: [{ permission: "*", pattern: "*", action: "allow" }], - }) - - yield* prompt.prompt({ - sessionID: chat.id, - agent: "build", - noReply: true, - parts: [{ type: "text", text: "run bash" }], - }) - - yield* llm.tool("bash", { - command: - 'i=0; while [ "$i" -lt 4000 ]; do printf "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx %05d\\n" "$i"; i=$((i + 1)); done; sleep 30', - description: "Print many lines", - timeout: 30_000, - workdir: path.resolve(dir), - }) - - const run = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) - yield* llm.wait(1) - yield* Effect.sleep(150) - yield* prompt.cancel(chat.id) - - const exit = yield* Fiber.await(run) - expect(Exit.isSuccess(exit)).toBe(true) - if (Exit.isFailure(exit)) return + Effect.gen(function* () { + const { dir, llm } = yield* useServerConfig(providerCfg) + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const chat = yield* sessions.create({ + title: "Interrupted bash truncation", + permission: [{ permission: "*", pattern: "*", action: "allow" }], + }) - const tool = completedTool(exit.value.parts) - if (!tool) return + yield* prompt.prompt({ + sessionID: chat.id, + agent: "build", + noReply: true, + parts: [{ type: "text", text: "run bash" }], + }) - expect(tool.state.metadata.truncated).toBe(true) - expect(typeof tool.state.metadata.outputPath).toBe("string") - expect(tool.state.output).toMatch(/\.\.\.output truncated\.\.\./) - expect(tool.state.output).toMatch(/Full output saved to:\s+\S+/) - expect(tool.state.output).not.toContain("Tool execution aborted") - }), - { git: true, config: providerCfg }, - ), + yield* llm.tool("bash", { + command: + 'i=0; while [ "$i" -lt 4000 ]; do printf "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx %05d\\n" "$i"; i=$((i + 1)); done; sleep 30', + description: "Print many lines", + timeout: 30_000, + workdir: path.resolve(dir), + }) + + const run = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) + yield* llm.wait(1) + yield* Effect.sleep(150) + yield* prompt.cancel(chat.id) + + const exit = yield* Fiber.await(run) + expect(Exit.isSuccess(exit)).toBe(true) + if (Exit.isFailure(exit)) return + + const tool = completedTool(exit.value.parts) + if (!tool) return + + expect(tool.state.metadata.truncated).toBe(true) + expect(typeof tool.state.metadata.outputPath).toBe("string") + expect(tool.state.output).toMatch(/\.\.\.output truncated\.\.\./) + expect(tool.state.output).toMatch(/Full output saved to:\s+\S+/) + expect(tool.state.output).not.toContain("Tool execution aborted") + }), + { git: true }, 30_000, ) unix( "cancel interrupts loop queued behind shell", () => - provideTmpdirInstance( - (_dir) => - Effect.gen(function* () { - const { prompt, chat } = yield* boot() + Effect.gen(function* () { + const { prompt, chat } = yield* boot() - const sh = yield* prompt - .shell({ sessionID: chat.id, agent: "build", command: "sleep 30" }) - .pipe(Effect.forkChild) - yield* Effect.sleep(50) + const sh = yield* prompt.shell({ sessionID: chat.id, agent: "build", command: "sleep 30" }).pipe(Effect.forkChild) + yield* Effect.sleep(50) - const loop = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) - yield* Effect.sleep(50) + const loop = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild) + yield* Effect.sleep(50) - yield* prompt.cancel(chat.id) + yield* prompt.cancel(chat.id) - const exit = yield* Fiber.await(loop) - expect(Exit.isSuccess(exit)).toBe(true) - if (Exit.isSuccess(exit)) { - const tool = completedTool(exit.value.parts) - expect(tool?.state.output).toContain("User aborted the command") - } + const exit = yield* Fiber.await(loop) + expect(Exit.isSuccess(exit)).toBe(true) + if (Exit.isSuccess(exit)) { + const tool = completedTool(exit.value.parts) + expect(tool?.state.output).toContain("User aborted the command") + } - yield* Fiber.await(sh) - }), - { git: true, config: cfg }, - ), + yield* Fiber.await(sh) + }), + { git: true, config: cfg }, 30_000, ) @@ -1581,422 +1609,405 @@ unix( "shell rejects when another shell is already running", () => withSh(() => - provideTmpdirInstance( - (_dir) => - Effect.gen(function* () { - const { prompt, chat } = yield* boot() - - const a = yield* prompt - .shell({ sessionID: chat.id, agent: "build", command: "sleep 30" }) - .pipe(Effect.forkChild) - yield* Effect.sleep(50) - - const exit = yield* prompt - .shell({ sessionID: chat.id, agent: "build", command: "echo hi" }) - .pipe(Effect.exit) - expect(Exit.isFailure(exit)).toBe(true) - if (Exit.isFailure(exit)) { - expect(Cause.squash(exit.cause)).toBeInstanceOf(Session.BusyError) - } - - yield* prompt.cancel(chat.id) - yield* Fiber.await(a) - }), - { git: true, config: cfg }, - ), - ), - 30_000, -) - -// Abort signal propagation tests for inline tool execution + Effect.gen(function* () { + const { prompt, chat } = yield* boot() -/** Override a tool's execute to hang until aborted. Returns ready/aborted defers and a finalizer. */ -function hangUntilAborted(tool: { execute: (...args: any[]) => any }) { - const ready = defer() - const aborted = defer() - const original = tool.execute - tool.execute = (_args: any, ctx: any) => { - ready.resolve() - ctx.abort.addEventListener("abort", () => aborted.resolve(), { once: true }) - return Effect.callback(() => {}) - } - const restore = Effect.addFinalizer(() => Effect.sync(() => void (tool.execute = original))) - return { ready, aborted, restore } -} + const a = yield* prompt + .shell({ sessionID: chat.id, agent: "build", command: "sleep 30" }) + .pipe(Effect.forkChild) + yield* Effect.sleep(50) -it.live( - "interrupt propagates abort signal to read tool via file part (text/plain)", - () => - provideTmpdirInstance( - (dir) => - Effect.gen(function* () { - const registry = yield* ToolRegistry.Service - const { read } = yield* registry.named() - const { ready, aborted, restore } = hangUntilAborted(read) - yield* restore - - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const chat = yield* sessions.create({ title: "Abort Test" }) - - const testFile = path.join(dir, "test.txt") - yield* Effect.promise(() => Bun.write(testFile, "hello world")) - - const fiber = yield* prompt - .prompt({ - sessionID: chat.id, - agent: "build", - parts: [ - { type: "text", text: "read this" }, - { type: "file", url: `file://${testFile}`, filename: "test.txt", mime: "text/plain" }, - ], - }) - .pipe(Effect.forkChild) - - yield* Effect.promise(() => ready.promise) - yield* Fiber.interrupt(fiber) - - yield* Effect.promise(() => - Promise.race([ - aborted.promise, - new Promise((_, reject) => - setTimeout(() => reject(new Error("abort signal not propagated within 2s")), 2_000), - ), - ]), - ) - }), - { git: true, config: cfg }, + const exit = yield* prompt.shell({ sessionID: chat.id, agent: "build", command: "echo hi" }).pipe(Effect.exit) + expect(Exit.isFailure(exit)).toBe(true) + if (Exit.isFailure(exit)) { + expect(Cause.squash(exit.cause)).toBeInstanceOf(Session.BusyError) + } + + yield* prompt.cancel(chat.id) + yield* Fiber.await(a) + }), ), + { git: true, config: cfg }, 30_000, ) -it.live( - "interrupt propagates abort signal to read tool via file part (directory)", +// Abort signal propagation tests for inline tool execution + +function hangUntilAborted(tool: { execute: (...args: any[]) => any }) { + return Effect.gen(function* () { + const ready = yield* Deferred.make() + const aborted = yield* Deferred.make() + const original = tool.execute + tool.execute = (_args: any, ctx: any) => { + ctx.abort.addEventListener("abort", () => succeedVoid(aborted), { once: true }) + if (ctx.abort.aborted) succeedVoid(aborted) + succeedVoid(ready) + return Effect.callback(() => Effect.sync(() => succeedVoid(aborted))) + } + const restore = Effect.addFinalizer(() => Effect.sync(() => void (tool.execute = original))) + return { ready, aborted, restore } + }) +} + +it.instance( + "interrupt propagates abort signal to read tool via file part (text/plain)", () => - provideTmpdirInstance( - (dir) => - Effect.gen(function* () { - const registry = yield* ToolRegistry.Service - const { read } = yield* registry.named() - const { ready, aborted, restore } = hangUntilAborted(read) - yield* restore - - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const chat = yield* sessions.create({ title: "Abort Test" }) - - const fiber = yield* prompt - .prompt({ - sessionID: chat.id, - agent: "build", - parts: [ - { type: "text", text: "read this" }, - { type: "file", url: `file://${dir}`, filename: "dir", mime: "application/x-directory" }, - ], - }) - .pipe(Effect.forkChild) - - yield* Effect.promise(() => ready.promise) - yield* Fiber.interrupt(fiber) - - yield* Effect.promise(() => - Promise.race([ - aborted.promise, - new Promise((_, reject) => - setTimeout(() => reject(new Error("abort signal not propagated within 2s")), 2_000), - ), - ]), - ) - }), - { git: true, config: cfg }, - ), - 30_000, -) + Effect.gen(function* () { + const { directory: dir } = yield* TestInstance + const registry = yield* ToolRegistry.Service + const { read } = yield* registry.named() + const { ready, restore } = yield* hangUntilAborted(read) + yield* restore -// Missing file handling + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const chat = yield* sessions.create({ title: "Abort Test" }) -it.live("does not fail the prompt when a file part is missing", () => - provideTmpdirInstance( - (dir) => - Effect.gen(function* () { - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const session = yield* sessions.create({}) + const testFile = path.join(dir, "test.txt") + yield* writeText(testFile, "hello world") - const missing = path.join(dir, "does-not-exist.ts") - const msg = yield* prompt.prompt({ - sessionID: session.id, + const fiber = yield* prompt + .prompt({ + sessionID: chat.id, agent: "build", - noReply: true, parts: [ - { type: "text", text: "please review @does-not-exist.ts" }, - { - type: "file", - mime: "text/plain", - url: `file://${missing}`, - filename: "does-not-exist.ts", - }, + { type: "text", text: "read this" }, + { type: "file", url: `file://${testFile}`, filename: "test.txt", mime: "text/plain" }, ], }) + .pipe(Effect.forkChild) - if (msg.info.role !== "user") throw new Error("expected user message") - const hasFailure = msg.parts.some( - (part) => part.type === "text" && part.synthetic && part.text.includes("Read tool failed to read"), - ) - expect(hasFailure).toBe(true) - - yield* sessions.remove(session.id) - }), - { git: true, config: cfg }, - ), + yield* awaitWithTimeout(Deferred.await(ready), "timed out waiting for read tool to start", "10 seconds") + yield* prompt.cancel(chat.id) + yield* Fiber.interrupt(fiber) + const exit = yield* Fiber.await(fiber) + expect(Exit.isFailure(exit)).toBe(true) + }), + { git: true, config: cfg }, + 30_000, ) -it.live("keeps stored part order stable when file resolution is async", () => - provideTmpdirInstance( - (dir) => - Effect.gen(function* () { - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const session = yield* sessions.create({}) +it.instance( + "interrupt propagates abort signal to read tool via file part (directory)", + () => + Effect.gen(function* () { + const { directory: dir } = yield* TestInstance + const registry = yield* ToolRegistry.Service + const { read } = yield* registry.named() + const { ready, restore } = yield* hangUntilAborted(read) + yield* restore - const missing = path.join(dir, "still-missing.ts") - const msg = yield* prompt.prompt({ - sessionID: session.id, + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const chat = yield* sessions.create({ title: "Abort Test" }) + + const fiber = yield* prompt + .prompt({ + sessionID: chat.id, agent: "build", - noReply: true, parts: [ - { - type: "file", - mime: "text/plain", - url: `file://${missing}`, - filename: "still-missing.ts", - }, - { type: "text", text: "after-file" }, + { type: "text", text: "read this" }, + { type: "file", url: `file://${dir}`, filename: "dir", mime: "application/x-directory" }, ], }) + .pipe(Effect.forkChild) - if (msg.info.role !== "user") throw new Error("expected user message") + yield* awaitWithTimeout(Deferred.await(ready), "timed out waiting for read tool to start", "10 seconds") + yield* prompt.cancel(chat.id) + yield* Fiber.interrupt(fiber) + const exit = yield* Fiber.await(fiber) + expect(Exit.isFailure(exit)).toBe(true) + }), + { git: true, config: cfg }, + 30_000, +) - const stored = MessageV2.get({ - sessionID: session.id, - messageID: msg.info.id, - }) - const text = stored.parts.filter((part) => part.type === "text").map((part) => part.text) +// Missing file handling - expect(text[0]?.startsWith("Called the Read tool with the following input:")).toBe(true) - expect(text[1]?.includes("Read tool failed to read")).toBe(true) - expect(text[2]).toBe("after-file") +it.instance( + "does not fail the prompt when a file part is missing", + () => + Effect.gen(function* () { + const { directory: dir } = yield* TestInstance + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const session = yield* sessions.create({}) - yield* sessions.remove(session.id) - }), - { git: true, config: cfg }, - ), + const missing = path.join(dir, "does-not-exist.ts") + const msg = yield* prompt.prompt({ + sessionID: session.id, + agent: "build", + noReply: true, + parts: [ + { type: "text", text: "please review @does-not-exist.ts" }, + { + type: "file", + mime: "text/plain", + url: `file://${missing}`, + filename: "does-not-exist.ts", + }, + ], + }) + + if (msg.info.role !== "user") throw new Error("expected user message") + const hasFailure = msg.parts.some( + (part) => part.type === "text" && part.synthetic && part.text.includes("Read tool failed to read"), + ) + expect(hasFailure).toBe(true) + + yield* sessions.remove(session.id) + }), + { git: true, config: cfg }, ) -it.live("resolves configured reference mentions before workspace paths and agents", () => - provideTmpdirInstance( - (dir) => - Effect.gen(function* () { - const docs = path.join(dir, "external-docs") - yield* Effect.promise(() => fs.mkdir(path.join(docs, "guide"), { recursive: true })) - yield* Effect.promise(() => fs.mkdir(path.join(dir, "docs"), { recursive: true })) - yield* Effect.promise(() => Bun.write(path.join(docs, "README.md"), "reference readme")) - yield* Effect.promise(() => Bun.write(path.join(docs, "guide", "intro.md"), "reference intro")) - yield* Effect.promise(() => Bun.write(path.join(dir, "docs", "README.md"), "workspace readme")) - - const prompt = yield* SessionPrompt.Service - const parts = yield* prompt.resolvePromptParts( - "Use @docs and @docs/README.md and @docs/guide and @docs/missing.md and @docs/README.md and @build", - ) - const references = parts.filter( - (part): part is MessageV2.TextPartInput => - part.type === "text" && part.synthetic === true && part.text.startsWith("Referenced configured reference "), - ) - const files = parts.filter((part): part is MessageV2.FilePartInput => part.type === "file") - const agents = parts.filter((part): part is MessageV2.AgentPartInput => part.type === "agent") - const bare = references.find((part) => part.text.includes("@docs.")) - const missing = references.find((part) => part.text.includes("@docs/missing.md")) - const guide = files.find((part) => part.filename === "docs/guide") - - expect(references.length).toBe(2) - expect(bare?.metadata?.reference).toMatchObject({ - name: "docs", - kind: "local", - path: docs, - }) - expect(missing?.text).toContain("Path does not exist inside configured reference @docs") - expect(missing?.metadata?.reference).toMatchObject({ - target: "missing.md", - targetPath: path.join(docs, "missing.md"), - }) +it.instance( + "keeps stored part order stable when file resolution is async", + () => + Effect.gen(function* () { + const { directory: dir } = yield* TestInstance + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const session = yield* sessions.create({}) - expect(files.length).toBe(2) - expect(files.map((file) => fileURLToPath(file.url)).sort()).toEqual( - [path.join(docs, "README.md"), path.join(docs, "guide")].sort(), - ) - expect(guide?.mime).toBe("application/x-directory") - expect(agents.map((agent) => agent.name)).toEqual(["build"]) - }), - { - git: true, - config: { - ...cfg, - reference: { - docs: "./external-docs", - }, + const missing = path.join(dir, "still-missing.ts") + const msg = yield* prompt.prompt({ + sessionID: session.id, + agent: "build", + noReply: true, + parts: [ + { + type: "file", + mime: "text/plain", + url: `file://${missing}`, + filename: "still-missing.ts", + }, + { type: "text", text: "after-file" }, + ], + }) + + if (msg.info.role !== "user") throw new Error("expected user message") + + const stored = MessageV2.get({ + sessionID: session.id, + messageID: msg.info.id, + }) + const text = stored.parts.filter((part) => part.type === "text").map((part) => part.text) + + expect(text[0]?.startsWith("Called the Read tool with the following input:")).toBe(true) + expect(text[1]?.includes("Read tool failed to read")).toBe(true) + expect(text[2]).toBe("after-file") + + yield* sessions.remove(session.id) + }), + { git: true, config: cfg }, +) + +it.instance( + "resolves configured reference mentions before workspace paths and agents", + () => + Effect.gen(function* () { + const { directory: dir } = yield* TestInstance + const docs = path.join(dir, "external-docs") + yield* ensureDir(path.join(docs, "guide")) + yield* ensureDir(path.join(dir, "docs")) + yield* writeText(path.join(docs, "README.md"), "reference readme") + yield* writeText(path.join(docs, "guide", "intro.md"), "reference intro") + yield* writeText(path.join(dir, "docs", "README.md"), "workspace readme") + + const prompt = yield* SessionPrompt.Service + const parts = yield* prompt.resolvePromptParts( + "Use @docs and @docs/README.md and @docs/guide and @docs/missing.md and @docs/README.md and @build", + ) + const references = parts.filter( + (part): part is MessageV2.TextPartInput => + part.type === "text" && part.synthetic === true && part.text.startsWith("Referenced configured reference "), + ) + const files = parts.filter((part): part is MessageV2.FilePartInput => part.type === "file") + const agents = parts.filter((part): part is MessageV2.AgentPartInput => part.type === "agent") + const bare = references.find((part) => part.text.includes("@docs.")) + const missing = references.find((part) => part.text.includes("@docs/missing.md")) + const guide = files.find((part) => part.filename === "docs/guide") + + expect(references.length).toBe(2) + expect(bare?.metadata?.reference).toMatchObject({ + name: "docs", + kind: "local", + path: docs, + }) + expect(missing?.text).toContain("Path does not exist inside configured reference @docs") + expect(missing?.metadata?.reference).toMatchObject({ + target: "missing.md", + targetPath: path.join(docs, "missing.md"), + }) + + expect(files.length).toBe(2) + expect(files.map((file) => fileURLToPath(file.url)).sort()).toEqual( + [path.join(docs, "README.md"), path.join(docs, "guide")].sort(), + ) + expect(guide?.mime).toBe("application/x-directory") + expect(agents.map((agent) => agent.name)).toEqual(["build"]) + }), + { + git: true, + config: { + ...cfg, + reference: { + docs: "./external-docs", }, }, - ), + }, ) -it.live("injects metadata for bare configured reference mentions", () => - provideTmpdirInstance( - (dir) => - Effect.gen(function* () { - const docs = path.join(dir, "external-docs") - yield* Effect.promise(() => fs.mkdir(docs, { recursive: true })) +it.instance( + "injects metadata for bare configured reference mentions", + () => + Effect.gen(function* () { + const { directory: dir } = yield* TestInstance + const docs = path.join(dir, "external-docs") + yield* ensureDir(docs) - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const session = yield* sessions.create({}) - const message = yield* prompt.prompt({ - sessionID: session.id, - noReply: true, - parts: yield* prompt.resolvePromptParts("Use @docs for context"), - }) + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const session = yield* sessions.create({}) + const message = yield* prompt.prompt({ + sessionID: session.id, + noReply: true, + parts: yield* prompt.resolvePromptParts("Use @docs for context"), + }) - const stored = MessageV2.get({ sessionID: session.id, messageID: message.info.id }) - const synthetic = stored.parts.filter( - (part): part is MessageV2.TextPart => part.type === "text" && part.synthetic === true, - ) - const reference = synthetic.find((part) => part.text.startsWith("Referenced configured reference @docs.")) + const stored = MessageV2.get({ sessionID: session.id, messageID: message.info.id }) + const synthetic = stored.parts.filter( + (part): part is MessageV2.TextPart => part.type === "text" && part.synthetic === true, + ) + const reference = synthetic.find((part) => part.text.startsWith("Referenced configured reference @docs.")) - expect(reference?.metadata?.reference).toMatchObject({ name: "docs", kind: "local", path: docs }) - expect(synthetic.some((part) => part.text.includes(`Reference root: ${docs}`))).toBe(true) - expect(synthetic.some((part) => part.text.includes("subagent scout"))).toBe(true) + expect(reference?.metadata?.reference).toMatchObject({ name: "docs", kind: "local", path: docs }) + expect(synthetic.some((part) => part.text.includes(`Reference root: ${docs}`))).toBe(true) + expect(synthetic.some((part) => part.text.includes("subagent scout"))).toBe(true) - yield* sessions.remove(session.id) - }), - { - git: true, - config: { - ...cfg, - reference: { - docs: "./external-docs", - }, + yield* sessions.remove(session.id) + }), + { + git: true, + config: { + ...cfg, + reference: { + docs: "./external-docs", }, }, - ), + }, ) -it.live("injects metadata for configured reference file attachments", () => - provideTmpdirInstance( - (dir) => - Effect.gen(function* () { - const docs = path.join(dir, "external-docs") - const readme = path.join(docs, "README.md") - yield* Effect.promise(() => fs.mkdir(docs, { recursive: true })) - yield* Effect.promise(() => Bun.write(readme, "reference readme")) - - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const session = yield* sessions.create({}) - const message = yield* prompt.prompt({ - sessionID: session.id, - agent: "build", - noReply: true, - parts: [ - { type: "text", text: "Read @docs/README.md" }, - { +it.instance( + "injects metadata for configured reference file attachments", + () => + Effect.gen(function* () { + const { directory: dir } = yield* TestInstance + const docs = path.join(dir, "external-docs") + const readme = path.join(docs, "README.md") + yield* ensureDir(docs) + yield* writeText(readme, "reference readme") + + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const session = yield* sessions.create({}) + const message = yield* prompt.prompt({ + sessionID: session.id, + agent: "build", + noReply: true, + parts: [ + { type: "text", text: "Read @docs/README.md" }, + { + type: "file", + mime: "text/plain", + filename: "docs/README.md", + url: pathToFileURL(readme).href, + source: { type: "file", - mime: "text/plain", - filename: "docs/README.md", - url: pathToFileURL(readme).href, - source: { - type: "file", - path: "docs/README.md", - text: { value: "@docs/README.md", start: 5, end: 20 }, - }, + path: "docs/README.md", + text: { value: "@docs/README.md", start: 5, end: 20 }, }, - ], - }) + }, + ], + }) - const stored = MessageV2.get({ sessionID: session.id, messageID: message.info.id }) - const synthetic = stored.parts.filter( - (part): part is MessageV2.TextPart => part.type === "text" && part.synthetic === true, - ) - const reference = synthetic.find((part) => - part.text.startsWith("Referenced configured reference @docs/README.md."), - ) + const stored = MessageV2.get({ sessionID: session.id, messageID: message.info.id }) + const synthetic = stored.parts.filter( + (part): part is MessageV2.TextPart => part.type === "text" && part.synthetic === true, + ) + const reference = synthetic.find((part) => + part.text.startsWith("Referenced configured reference @docs/README.md."), + ) - expect(reference?.metadata?.reference).toMatchObject({ - name: "docs", - kind: "local", - path: docs, - target: "README.md", - targetPath: readme, - source: { value: "@docs/README.md", start: 5, end: 20 }, - }) - expect(synthetic.findIndex((part) => part === reference)).toBeLessThan( - synthetic.findIndex((part) => part.text.startsWith("Called the Read tool with the following input:")), - ) + expect(reference?.metadata?.reference).toMatchObject({ + name: "docs", + kind: "local", + path: docs, + target: "README.md", + targetPath: readme, + source: { value: "@docs/README.md", start: 5, end: 20 }, + }) + expect(synthetic.findIndex((part) => part === reference)).toBeLessThan( + synthetic.findIndex((part) => part.text.startsWith("Called the Read tool with the following input:")), + ) - yield* sessions.remove(session.id) - }), - { - git: true, - config: { - ...cfg, - reference: { - docs: "./external-docs", - }, + yield* sessions.remove(session.id) + }), + { + git: true, + config: { + ...cfg, + reference: { + docs: "./external-docs", }, }, - ), + }, ) // Special characters in filenames -it.live("handles filenames with # character", () => - provideTmpdirInstance( - (dir) => - Effect.gen(function* () { - yield* Effect.promise(() => Bun.write(path.join(dir, "file#name.txt"), "special content\n")) +it.instance( + "handles filenames with # character", + () => + Effect.gen(function* () { + const { directory: dir } = yield* TestInstance + yield* writeText(path.join(dir, "file#name.txt"), "special content\n") - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const session = yield* sessions.create({}) - const parts = yield* prompt.resolvePromptParts("Read @file#name.txt") - const fileParts = parts.filter((part) => part.type === "file") + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const session = yield* sessions.create({}) + const parts = yield* prompt.resolvePromptParts("Read @file#name.txt") + const fileParts = parts.filter((part) => part.type === "file") - expect(fileParts.length).toBe(1) - expect(fileParts[0].filename).toBe("file#name.txt") - expect(fileParts[0].url).toContain("%23") + expect(fileParts.length).toBe(1) + expect(fileParts[0].filename).toBe("file#name.txt") + expect(fileParts[0].url).toContain("%23") - const decodedPath = fileURLToPath(fileParts[0].url) - expect(decodedPath).toBe(path.join(dir, "file#name.txt")) + const decodedPath = fileURLToPath(fileParts[0].url) + expect(decodedPath).toBe(path.join(dir, "file#name.txt")) - const message = yield* prompt.prompt({ - sessionID: session.id, - parts, - noReply: true, - }) - const stored = MessageV2.get({ sessionID: session.id, messageID: message.info.id }) - const textParts = stored.parts.filter((part) => part.type === "text") - const hasContent = textParts.some((part) => part.text.includes("special content")) - expect(hasContent).toBe(true) + const message = yield* prompt.prompt({ + sessionID: session.id, + parts, + noReply: true, + }) + const stored = MessageV2.get({ sessionID: session.id, messageID: message.info.id }) + const textParts = stored.parts.filter((part) => part.type === "text") + const hasContent = textParts.some((part) => part.text.includes("special content")) + expect(hasContent).toBe(true) - yield* sessions.remove(session.id) - }), - { git: true, config: cfg }, - ), + yield* sessions.remove(session.id) + }), + { git: true, config: cfg }, ) // Regression: empty assistant turn loop -it.live("does not loop empty assistant turns for a simple reply", () => - provideTmpdirServer( - Effect.fnUntraced(function* ({ llm }) { +it.instance( + "does not loop empty assistant turns for a simple reply", + () => + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) const prompt = yield* SessionPrompt.Service const sessions = yield* Session.Service const session = yield* sessions.create({ title: "Prompt regression" }) @@ -2016,222 +2027,210 @@ it.live("does not loop empty assistant turns for a simple reply", () => expect(msgs.filter((msg) => msg.info.role === "assistant")).toHaveLength(1) expect(yield* llm.calls).toBe(1) }), - { git: true, config: providerCfg }, - ), + { git: true }, ) -it.live( +it.instance( "records aborted errors when prompt is cancelled mid-stream", () => - provideTmpdirServer( - Effect.fnUntraced(function* ({ llm }) { - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const session = yield* sessions.create({ title: "Prompt cancel regression" }) + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const session = yield* sessions.create({ title: "Prompt cancel regression" }) - yield* llm.hang + yield* llm.hang - const fiber = yield* prompt - .prompt({ - sessionID: session.id, - agent: "build", - parts: [{ type: "text", text: "Cancel me" }], - }) - .pipe(Effect.forkChild) + const fiber = yield* prompt + .prompt({ + sessionID: session.id, + agent: "build", + parts: [{ type: "text", text: "Cancel me" }], + }) + .pipe(Effect.forkChild) - yield* llm.wait(1) - yield* prompt.cancel(session.id) + yield* llm.wait(1) + yield* prompt.cancel(session.id) - const exit = yield* Fiber.await(fiber) - expect(Exit.isSuccess(exit)).toBe(true) - if (Exit.isSuccess(exit)) { - expect(exit.value.info.role).toBe("assistant") - if (exit.value.info.role === "assistant") { - expect(exit.value.info.error?.name).toBe("MessageAbortedError") - } + const exit = yield* Fiber.await(fiber) + expect(Exit.isSuccess(exit)).toBe(true) + if (Exit.isSuccess(exit)) { + expect(exit.value.info.role).toBe("assistant") + if (exit.value.info.role === "assistant") { + expect(exit.value.info.error?.name).toBe("MessageAbortedError") } + } - const msgs = yield* sessions.messages({ sessionID: session.id }) - const last = msgs.findLast((msg) => msg.info.role === "assistant") - expect(last?.info.role).toBe("assistant") - if (last?.info.role === "assistant") { - expect(last.info.error?.name).toBe("MessageAbortedError") - } - }), - { git: true, config: providerCfg }, - ), + const msgs = yield* sessions.messages({ sessionID: session.id }) + const last = msgs.findLast((msg) => msg.info.role === "assistant") + expect(last?.info.role).toBe("assistant") + if (last?.info.role === "assistant") { + expect(last.info.error?.name).toBe("MessageAbortedError") + } + }), + { git: true }, 3_000, ) // Agent variant -it.live("applies agent variant only when using agent model", () => - provideTmpdirInstance( - (_dir) => - Effect.gen(function* () { - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const session = yield* sessions.create({}) +it.instance( + "applies agent variant only when using agent model", + () => + Effect.gen(function* () { + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const session = yield* sessions.create({}) - const other = yield* prompt.prompt({ - sessionID: session.id, - agent: "build", - model: { providerID: ProviderID.make("opencode"), modelID: ModelID.make("kimi-k2.5-free") }, - noReply: true, - parts: [{ type: "text", text: "hello" }], - }) - if (other.info.role !== "user") throw new Error("expected user message") - expect(other.info.model.variant).toBeUndefined() + const other = yield* prompt.prompt({ + sessionID: session.id, + agent: "build", + model: { providerID: ProviderID.make("opencode"), modelID: ModelID.make("kimi-k2.5-free") }, + noReply: true, + parts: [{ type: "text", text: "hello" }], + }) + if (other.info.role !== "user") throw new Error("expected user message") + expect(other.info.model.variant).toBeUndefined() - const match = yield* prompt.prompt({ - sessionID: session.id, - agent: "build", - noReply: true, - parts: [{ type: "text", text: "hello again" }], - }) - if (match.info.role !== "user") throw new Error("expected user message") - expect(match.info.model).toEqual({ - providerID: ProviderID.make("test"), - modelID: ModelID.make("test-model"), - variant: "xhigh", - }) - expect(match.info.model.variant).toBe("xhigh") + const match = yield* prompt.prompt({ + sessionID: session.id, + agent: "build", + noReply: true, + parts: [{ type: "text", text: "hello again" }], + }) + if (match.info.role !== "user") throw new Error("expected user message") + expect(match.info.model).toEqual({ + providerID: ProviderID.make("test"), + modelID: ModelID.make("test-model"), + variant: "xhigh", + }) + expect(match.info.model.variant).toBe("xhigh") - const override = yield* prompt.prompt({ - sessionID: session.id, - agent: "build", - noReply: true, - variant: "high", - parts: [{ type: "text", text: "hello third" }], - }) - if (override.info.role !== "user") throw new Error("expected user message") - expect(override.info.model.variant).toBe("high") + const override = yield* prompt.prompt({ + sessionID: session.id, + agent: "build", + noReply: true, + variant: "high", + parts: [{ type: "text", text: "hello third" }], + }) + if (override.info.role !== "user") throw new Error("expected user message") + expect(override.info.model.variant).toBe("high") - yield* sessions.remove(session.id) - }), - { - git: true, - config: { - ...cfg, - provider: { - ...cfg.provider, - test: { - ...cfg.provider.test, - models: { - "test-model": { - ...cfg.provider.test.models["test-model"], - variants: { xhigh: {}, high: {} }, - }, + yield* sessions.remove(session.id) + }), + { + git: true, + config: { + ...cfg, + provider: { + ...cfg.provider, + test: { + ...cfg.provider.test, + models: { + "test-model": { + ...cfg.provider.test.models["test-model"], + variants: { xhigh: {}, high: {} }, }, }, }, - agent: { - build: { - model: "test/test-model", - variant: "xhigh", - }, + }, + agent: { + build: { + model: "test/test-model", + variant: "xhigh", }, }, }, - ), + }, ) // Agent / command resolution errors -it.live( +it.instance( "unknown agent throws typed error", () => - provideTmpdirInstance( - (_dir) => - Effect.gen(function* () { - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const session = yield* sessions.create({}) - const exit = yield* prompt - .prompt({ - sessionID: session.id, - agent: "nonexistent-agent-xyz", - noReply: true, - parts: [{ type: "text", text: "hello" }], - }) - .pipe(Effect.exit) - - expect(Exit.isFailure(exit)).toBe(true) - if (Exit.isFailure(exit)) { - const err = Cause.squash(exit.cause) - expect(err).not.toBeInstanceOf(TypeError) - expect(NamedError.Unknown.isInstance(err)).toBe(true) - if (NamedError.Unknown.isInstance(err)) { - expect(err.data.message).toContain('Agent not found: "nonexistent-agent-xyz"') - } - } - }), - { git: true }, - ), + Effect.gen(function* () { + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const session = yield* sessions.create({}) + const exit = yield* prompt + .prompt({ + sessionID: session.id, + agent: "nonexistent-agent-xyz", + noReply: true, + parts: [{ type: "text", text: "hello" }], + }) + .pipe(Effect.exit) + + expect(Exit.isFailure(exit)).toBe(true) + if (Exit.isFailure(exit)) { + const err = Cause.squash(exit.cause) + expect(err).not.toBeInstanceOf(TypeError) + expect(NamedError.Unknown.isInstance(err)).toBe(true) + if (NamedError.Unknown.isInstance(err)) { + expect(err.data.message).toContain('Agent not found: "nonexistent-agent-xyz"') + } + } + }), + { git: true }, 30_000, ) -it.live( +it.instance( "unknown agent error includes available agent names", () => - provideTmpdirInstance( - (_dir) => - Effect.gen(function* () { - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const session = yield* sessions.create({}) - const exit = yield* prompt - .prompt({ - sessionID: session.id, - agent: "nonexistent-agent-xyz", - noReply: true, - parts: [{ type: "text", text: "hello" }], - }) - .pipe(Effect.exit) - - expect(Exit.isFailure(exit)).toBe(true) - if (Exit.isFailure(exit)) { - const err = Cause.squash(exit.cause) - expect(NamedError.Unknown.isInstance(err)).toBe(true) - if (NamedError.Unknown.isInstance(err)) { - expect(err.data.message).toContain("build") - } - } - }), - { git: true }, - ), + Effect.gen(function* () { + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const session = yield* sessions.create({}) + const exit = yield* prompt + .prompt({ + sessionID: session.id, + agent: "nonexistent-agent-xyz", + noReply: true, + parts: [{ type: "text", text: "hello" }], + }) + .pipe(Effect.exit) + + expect(Exit.isFailure(exit)).toBe(true) + if (Exit.isFailure(exit)) { + const err = Cause.squash(exit.cause) + expect(NamedError.Unknown.isInstance(err)).toBe(true) + if (NamedError.Unknown.isInstance(err)) { + expect(err.data.message).toContain("build") + } + } + }), + { git: true }, 30_000, ) -it.live( +it.instance( "unknown command throws typed error with available names", () => - provideTmpdirInstance( - (_dir) => - Effect.gen(function* () { - const prompt = yield* SessionPrompt.Service - const sessions = yield* Session.Service - const session = yield* sessions.create({}) - const exit = yield* prompt - .command({ - sessionID: session.id, - command: "nonexistent-command-xyz", - arguments: "", - }) - .pipe(Effect.exit) - - expect(Exit.isFailure(exit)).toBe(true) - if (Exit.isFailure(exit)) { - const err = Cause.squash(exit.cause) - expect(err).not.toBeInstanceOf(TypeError) - expect(NamedError.Unknown.isInstance(err)).toBe(true) - if (NamedError.Unknown.isInstance(err)) { - expect(err.data.message).toContain('Command not found: "nonexistent-command-xyz"') - expect(err.data.message).toContain("init") - } - } - }), - { git: true }, - ), + Effect.gen(function* () { + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const session = yield* sessions.create({}) + const exit = yield* prompt + .command({ + sessionID: session.id, + command: "nonexistent-command-xyz", + arguments: "", + }) + .pipe(Effect.exit) + + expect(Exit.isFailure(exit)).toBe(true) + if (Exit.isFailure(exit)) { + const err = Cause.squash(exit.cause) + expect(err).not.toBeInstanceOf(TypeError) + expect(NamedError.Unknown.isInstance(err)).toBe(true) + if (NamedError.Unknown.isInstance(err)) { + expect(err.data.message).toContain('Command not found: "nonexistent-command-xyz"') + expect(err.data.message).toContain("init") + } + } + }), + { git: true }, 30_000, ) diff --git a/packages/opencode/test/session/snapshot-tool-race.test.ts b/packages/opencode/test/session/snapshot-tool-race.test.ts index 8640612e9825..adf8926870e6 100644 --- a/packages/opencode/test/session/snapshot-tool-race.test.ts +++ b/packages/opencode/test/session/snapshot-tool-race.test.ts @@ -59,6 +59,7 @@ import { Ripgrep } from "../../src/file/ripgrep" import { Format } from "../../src/format" import { Reference } from "../../src/reference/reference" import { SyncEvent } from "@/sync" +import { RuntimeFlags } from "@/effect/runtime-flags" void Log.init({ print: false }) @@ -137,6 +138,7 @@ function makeHttp() { Layer.provide(Reference.defaultLayer), Layer.provide(Ripgrep.defaultLayer), Layer.provide(Format.defaultLayer), + Layer.provide(RuntimeFlags.layer()), Layer.provideMerge(todo), Layer.provideMerge(question), Layer.provideMerge(deps), diff --git a/packages/opencode/test/tool/fixtures/models-api.json b/packages/opencode/test/tool/fixtures/models-api.json index 7ced5ca5d3f4..6302a951dd89 100644 --- a/packages/opencode/test/tool/fixtures/models-api.json +++ b/packages/opencode/test/tool/fixtures/models-api.json @@ -1,894 +1,1151 @@ { - "digitalocean": { - "id": "digitalocean", - "env": ["DIGITALOCEAN_ACCESS_TOKEN"], + "302ai": { + "id": "302ai", + "env": ["302AI_API_KEY"], "npm": "@ai-sdk/openai-compatible", - "api": "https://inference.do-ai.run/v1", - "name": "DigitalOcean", - "doc": "https://docs.digitalocean.com/products/genai-platform/", + "api": "https://api.302.ai/v1", + "name": "302.AI", + "doc": "https://doc.302.ai", "models": { - "openai-gpt-oss-120b": { - "id": "openai-gpt-oss-120b", - "name": "GPT OSS 120B", + "qwen3-235b-a22b": { + "id": "qwen3-235b-a22b", + "name": "Qwen3-235B-A22B", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-04-29", + "last_updated": "2025-04-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.35, "output": 0.75 }, - "limit": { "context": 128000, "output": 16384 } - } - } - }, - "ollama-cloud": { - "id": "ollama-cloud", - "env": ["OLLAMA_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://ollama.com/v1", - "name": "Ollama Cloud", - "doc": "https://docs.ollama.com/cloud", - "models": { - "mistral-large-3:675b": { - "id": "mistral-large-3:675b", - "name": "mistral-large-3:675b", - "family": "mistral-large", + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.29, + "output": 2.86 + } + }, + "grok-4.1": { + "id": "grok-4.1", + "name": "grok-4.1", "attachment": true, "reasoning": false, "tool_call": true, - "release_date": "2025-12-02", - "last_updated": "2026-01-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 262144, "output": 262144 } - }, - "kimi-k2-thinking": { - "id": "kimi-k2-thinking", - "name": "kimi-k2-thinking", - "family": "kimi-thinking", - "attachment": false, - "reasoning": true, - "tool_call": true, - "knowledge": "2024-08", - "release_date": "2025-11-06", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 262144, "output": 262144 } + "temperature": true, + "knowledge": "2025-06", + "release_date": "2025-11-18", + "last_updated": "2025-11-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 2, + "output": 10 + } }, - "qwen3-coder-next": { - "id": "qwen3-coder-next", - "name": "qwen3-coder-next", - "family": "qwen", + "MiniMax-M2": { + "id": "MiniMax-M2", + "name": "MiniMax-M2", "attachment": false, "reasoning": false, "tool_call": true, - "release_date": "2026-02-02", - "last_updated": "2026-02-08", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 262144, "output": 65536 } + "temperature": true, + "release_date": "2025-10-26", + "last_updated": "2025-10-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 0.33, + "output": 1.32 + } }, - "qwen3-vl:235b-instruct": { - "id": "qwen3-vl:235b-instruct", - "name": "qwen3-vl:235b-instruct", - "family": "qwen", + "grok-4-1-fast-reasoning": { + "id": "grok-4-1-fast-reasoning", + "name": "grok-4-1-fast-reasoning", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "release_date": "2025-09-22", - "last_updated": "2026-01-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 262144, "output": 131072 } + "temperature": true, + "knowledge": "2025-06", + "release_date": "2025-11-20", + "last_updated": "2025-11-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5 + } }, - "gpt-oss:120b": { - "id": "gpt-oss:120b", - "name": "gpt-oss:120b", - "family": "gpt-oss", - "attachment": false, - "reasoning": true, + "gemini-2.5-flash-nothink": { + "id": "gemini-2.5-flash-nothink", + "name": "gemini-2.5-flash-nothink", + "family": "gemini-flash", + "attachment": true, + "reasoning": false, "tool_call": true, - "release_date": "2025-08-05", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 131072, "output": 32768 } + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-06-24", + "last_updated": "2025-06-24", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5 + } }, - "kimi-k2.5": { - "id": "kimi-k2.5", - "name": "kimi-k2.5", - "family": "kimi", + "grok-4.20-multi-agent-beta-0309": { + "id": "grok-4.20-multi-agent-beta-0309", + "name": "grok-4.20-multi-agent-beta-0309", "attachment": true, "reasoning": true, "tool_call": true, - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 262144, "output": 262144 } + "temperature": true, + "release_date": "2026-03-16", + "last_updated": "2026-03-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 2, + "output": 6 + } }, - "cogito-2.1:671b": { - "id": "cogito-2.1:671b", - "name": "cogito-2.1:671b", - "family": "cogito", + "kimi-k2-0905-preview": { + "id": "kimi-k2-0905-preview", + "name": "kimi-k2-0905-preview", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "release_date": "2025-11-19", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 163840, "output": 32000 } + "temperature": true, + "knowledge": "2025-06", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.632, + "output": 2.53 + } }, - "nemotron-3-nano:30b": { - "id": "nemotron-3-nano:30b", - "name": "nemotron-3-nano:30b", - "family": "nemotron", - "attachment": false, + "claude-haiku-4-5": { + "id": "claude-haiku-4-5", + "name": "claude-haiku-4-5", + "family": "claude-haiku", + "attachment": true, "reasoning": true, "tool_call": true, - "release_date": "2025-12-15", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 1048576, "output": 131072 } + "temperature": true, + "knowledge": "2025-02-28", + "release_date": "2025-10-16", + "last_updated": "2025-10-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5 + } }, - "ministral-3:14b": { - "id": "ministral-3:14b", - "name": "ministral-3:14b", - "family": "ministral", + "claude-opus-4-5-20251101": { + "id": "claude-opus-4-5-20251101", + "name": "claude-opus-4-5-20251101", + "family": "claude-opus", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "release_date": "2024-12-01", - "last_updated": "2026-01-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 262144, "output": 128000 } + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-11-25", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 5, + "output": 25 + } }, - "devstral-small-2:24b": { - "id": "devstral-small-2:24b", - "name": "devstral-small-2:24b", - "family": "devstral", + "gemini-2.5-flash-lite-preview-09-2025": { + "id": "gemini-2.5-flash-lite-preview-09-2025", + "name": "gemini-2.5-flash-lite-preview-09-2025", "attachment": true, "reasoning": false, "tool_call": true, - "release_date": "2025-12-09", - "last_updated": "2026-01-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 262144, "output": 262144 } + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-09-26", + "last_updated": "2025-09-26", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4 + } }, - "minimax-m2": { - "id": "minimax-m2", - "name": "minimax-m2", - "family": "minimax", + "qwen3-235b-a22b-instruct-2507": { + "id": "qwen3-235b-a22b-instruct-2507", + "name": "qwen3-235b-a22b-instruct-2507", "attachment": false, "reasoning": false, "tool_call": true, - "release_date": "2025-10-23", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 204800, "output": 128000 } + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-30", + "last_updated": "2025-07-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 65536 + }, + "cost": { + "input": 0.29, + "output": 1.143 + } }, - "qwen3-next:80b": { - "id": "qwen3-next:80b", - "name": "qwen3-next:80b", - "family": "qwen", - "attachment": false, + "glm-5v-turbo": { + "id": "glm-5v-turbo", + "name": "GLM-5V-Turbo", + "family": "glm", + "attachment": true, "reasoning": true, "tool_call": true, - "release_date": "2025-09-15", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 262144, "output": 32768 } + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 0.72, + "output": 3.2 + } }, - "qwen3-vl:235b": { - "id": "qwen3-vl:235b", - "name": "qwen3-vl:235b", - "family": "qwen", + "mistral-large-2512": { + "id": "mistral-large-2512", + "name": "mistral-large-2512", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "release_date": "2025-09-22", - "last_updated": "2026-01-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 262144, "output": 32768 } + "temperature": true, + "knowledge": "2024-12", + "release_date": "2025-12-16", + "last_updated": "2025-12-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 262144 + }, + "cost": { + "input": 1.1, + "output": 3.3 + } }, - "minimax-m2.1": { - "id": "minimax-m2.1", - "name": "minimax-m2.1", - "family": "minimax", + "glm-4.7": { + "id": "glm-4.7", + "name": "glm-4.7", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, - "release_date": "2025-12-23", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.286, + "output": 1.142 + } }, - "gemma3:12b": { - "id": "gemma3:12b", - "name": "gemma3:12b", - "family": "gemma", + "claude-3-5-haiku-20241022": { + "id": "claude-3-5-haiku-20241022", + "name": "claude-3-5-haiku-20241022", + "family": "claude-haiku", "attachment": true, "reasoning": false, - "tool_call": false, - "release_date": "2024-12-01", - "last_updated": "2026-01-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 131072, "output": 131072 } + "tool_call": true, + "temperature": true, + "knowledge": "2024-07-31", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 0.8, + "output": 4 + } }, - "gemma3:27b": { - "id": "gemma3:27b", - "name": "gemma3:27b", - "family": "gemma", + "doubao-seed-1-8-251215": { + "id": "doubao-seed-1-8-251215", + "name": "doubao-seed-1-8-251215", "attachment": true, "reasoning": false, - "tool_call": false, - "release_date": "2025-07-27", - "last_updated": "2026-01-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 131072, "output": 131072 } + "tool_call": true, + "temperature": true, + "release_date": "2025-12-18", + "last_updated": "2025-12-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 224000, + "output": 64000 + }, + "cost": { + "input": 0.114, + "output": 0.286 + } }, - "qwen3-coder:480b": { - "id": "qwen3-coder:480b", - "name": "qwen3-coder:480b", - "family": "qwen", - "attachment": false, + "chatgpt-4o-latest": { + "id": "chatgpt-4o-latest", + "name": "chatgpt-4o-latest", + "family": "gpt", + "attachment": true, "reasoning": false, - "tool_call": true, - "release_date": "2025-07-22", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 262144, "output": 65536 } + "tool_call": false, + "temperature": true, + "knowledge": "2023-09", + "release_date": "2024-08-08", + "last_updated": "2024-08-08", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 5, + "output": 15 + } }, - "glm-4.6": { - "id": "glm-4.6", - "name": "glm-4.6", + "glm-5": { + "id": "glm-5", + "name": "glm-5", "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, - "release_date": "2025-09-29", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 202752, "output": 131072 } - }, - "gemini-3-flash-preview": { - "id": "gemini-3-flash-preview", - "name": "gemini-3-flash-preview", - "family": "gemini-flash", - "attachment": false, - "reasoning": true, - "tool_call": true, - "knowledge": "2025-01", - "release_date": "2025-12-17", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 2.6 + } }, - "minimax-m2.7": { - "id": "minimax-m2.7", - "name": "minimax-m2.7", - "family": "minimax", + "deepseek-chat": { + "id": "deepseek-chat", + "name": "Deepseek-Chat", + "family": "deepseek", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 204800, "output": 131072 } + "temperature": true, + "knowledge": "2024-07", + "release_date": "2024-11-29", + "last_updated": "2024-11-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.29, + "output": 0.43 + } }, - "gpt-oss:20b": { - "id": "gpt-oss:20b", - "name": "gpt-oss:20b", - "family": "gpt-oss", + "deepseek-v3.2-thinking": { + "id": "deepseek-v3.2-thinking", + "name": "DeepSeek-V3.2-Thinking", "attachment": false, "reasoning": true, "tool_call": true, - "release_date": "2025-08-05", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 131072, "output": 32768 } + "temperature": true, + "knowledge": "2024-12", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.29, + "output": 0.43 + } }, - "ministral-3:8b": { - "id": "ministral-3:8b", - "name": "ministral-3:8b", - "family": "ministral", + "claude-sonnet-4-6": { + "id": "claude-sonnet-4-6", + "name": "claude-sonnet-4-6", + "family": "claude-sonnet", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "release_date": "2024-12-01", - "last_updated": "2026-01-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 262144, "output": 128000 } - }, - "gemma3:4b": { - "id": "gemma3:4b", - "name": "gemma3:4b", - "family": "gemma", - "attachment": true, - "reasoning": false, - "tool_call": false, - "release_date": "2024-12-01", - "last_updated": "2026-01-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 131072, "output": 131072 } + "temperature": true, + "knowledge": "2025-08-31", + "release_date": "2026-02-18", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15 + } }, - "qwen3.5:397b": { - "id": "qwen3.5:397b", - "name": "qwen3.5:397b", - "family": "qwen", + "gpt-5-thinking": { + "id": "gpt-5-thinking", + "name": "gpt-5-thinking", "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_details" }, - "release_date": "2026-02-15", - "last_updated": "2026-02-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 262144, "output": 81920 } + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-08-08", + "last_updated": "2025-08-08", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, - "nemotron-3-super": { - "id": "nemotron-3-super", - "name": "nemotron-3-super", - "family": "nemotron", + "glm-4.7-flashx": { + "id": "glm-4.7-flashx", + "name": "glm-4.7-flashx", + "family": "glm-flash", "attachment": false, "reasoning": true, "tool_call": true, - "release_date": "2026-03-11", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2026-01-20", + "last_updated": "2026-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "limit": { "context": 262144, "output": 65536 } - }, - "glm-5": { - "id": "glm-5", - "name": "glm-5", - "family": "glm", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 202752, "output": 131072 } - }, - "devstral-2:123b": { - "id": "devstral-2:123b", - "name": "devstral-2:123b", - "family": "devstral", - "attachment": false, - "reasoning": false, - "tool_call": true, - "release_date": "2025-12-09", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 262144, "output": 262144 } - }, - "glm-4.7": { - "id": "glm-4.7", - "name": "glm-4.7", - "family": "glm", - "attachment": false, - "reasoning": true, - "tool_call": true, - "release_date": "2025-12-22", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 202752, "output": 131072 } - }, - "rnj-1:8b": { - "id": "rnj-1:8b", - "name": "rnj-1:8b", - "family": "rnj", - "attachment": false, - "reasoning": false, - "tool_call": true, - "release_date": "2025-12-06", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 32768, "output": 4096 } - }, - "deepseek-v3.2": { - "id": "deepseek-v3.2", - "name": "deepseek-v3.2", - "family": "deepseek", - "attachment": false, - "reasoning": true, - "tool_call": true, - "release_date": "2025-06-15", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 163840, "output": 65536 } - }, - "deepseek-v3.1:671b": { - "id": "deepseek-v3.1:671b", - "name": "deepseek-v3.1:671b", - "family": "deepseek", - "attachment": false, - "reasoning": true, - "tool_call": true, - "release_date": "2025-08-21", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 163840, "output": 163840 } + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 0.0715, + "output": 0.429 + } }, - "ministral-3:3b": { - "id": "ministral-3:3b", - "name": "ministral-3:3b", - "family": "ministral", + "gemini-3-flash-preview": { + "id": "gemini-3-flash-preview", + "name": "gemini-3-flash-preview", "attachment": true, "reasoning": false, "tool_call": true, - "release_date": "2024-10-22", - "last_updated": "2026-01-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 262144, "output": 128000 } + "temperature": true, + "knowledge": "2025-06", + "release_date": "2025-12-18", + "last_updated": "2025-12-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 3 + } }, - "kimi-k2:1t": { - "id": "kimi-k2:1t", - "name": "kimi-k2:1t", - "family": "kimi", + "qwen-plus": { + "id": "qwen-plus", + "name": "Qwen-Plus", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, + "temperature": true, "knowledge": "2024-10", - "release_date": "2025-07-11", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 262144, "output": 262144 } + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 32768 + }, + "cost": { + "input": 0.12, + "output": 1.2 + } }, - "minimax-m2.5": { - "id": "minimax-m2.5", - "name": "minimax-m2.5", - "family": "minimax", - "attachment": false, - "reasoning": true, - "tool_call": true, - "knowledge": "2025-01", - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 204800, "output": 131072 } - } - } - }, - "moark": { - "id": "moark", - "env": ["MOARK_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://moark.com/v1", - "name": "Moark", - "doc": "https://moark.com/docs/openapi/v1#tag/%E6%96%87%E6%9C%AC%E7%94%9F%E6%88%90", - "models": { - "GLM-4.7": { - "id": "GLM-4.7", - "name": "GLM-4.7", - "family": "glm", - "attachment": false, - "reasoning": true, + "grok-4.20-beta-0309-non-reasoning": { + "id": "grok-4.20-beta-0309-non-reasoning", + "name": "grok-4.20-beta-0309-non-reasoning", + "attachment": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 3.5, "output": 14 }, - "limit": { "context": 204800, "output": 131072 } + "release_date": "2026-03-16", + "last_updated": "2026-03-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 2, + "output": 6 + } }, - "MiniMax-M2.1": { - "id": "MiniMax-M2.1", - "name": "MiniMax-M2.1", - "family": "minimax", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2.1, "output": 8.4 }, - "limit": { "context": 204800, "output": 131072 } - } - } - }, - "drun": { - "id": "drun", - "env": ["DRUN_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://chat.d.run/v1", - "name": "D.Run (China)", - "doc": "https://www.d.run", - "models": { - "public/deepseek-r1": { - "id": "public/deepseek-r1", - "name": "DeepSeek R1", - "family": "deepseek-thinking", - "attachment": false, + "claude-opus-4-7": { + "id": "claude-opus-4-7", + "name": "claude-opus-4-7", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.55, "output": 2.2 }, - "limit": { "context": 131072, "output": 32000 } - }, - "public/deepseek-v3": { - "id": "public/deepseek-v3", - "name": "DeepSeek V3", - "family": "deepseek", - "attachment": false, - "reasoning": false, - "tool_call": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2024-12-26", - "last_updated": "2024-12-26", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.28, "output": 1.1 }, - "limit": { "context": 131072, "output": 8192 } + "knowledge": "2026-01-31", + "release_date": "2026-04-17", + "last_updated": "2026-04-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25, + "tiers": [ + { + "input": 10, + "output": 37.5, + "cache_read": 1, + "cache_write": 12.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 10, + "output": 37.5, + "cache_read": 1, + "cache_write": 12.5 + } + } }, - "public/minimax-m25": { - "id": "public/minimax-m25", - "name": "MiniMax M2.5", - "family": "minimax", - "attachment": false, + "gpt-5-mini": { + "id": "gpt-5-mini", + "name": "gpt-5-mini", + "family": "gpt-mini", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_details" }, - "temperature": true, - "release_date": "2025-03-01", - "last_updated": "2025-03-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-08", + "last_updated": "2025-08-08", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.29, "output": 1.16 }, - "limit": { "context": 204800, "output": 131072 } - } - } - }, - "inference": { - "id": "inference", - "env": ["INFERENCE_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://inference.net/v1", - "name": "Inference", - "doc": "https://inference.net/models", - "models": { - "google/gemma-3": { - "id": "google/gemma-3", - "name": "Google Gemma 3", - "family": "gemma", + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2 + } + }, + "gemini-3-pro-preview": { + "id": "gemini-3-pro-preview", + "name": "gemini-3-pro-preview", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.3 }, - "limit": { "context": 125000, "output": 4096 } + "knowledge": "2025-06", + "release_date": "2025-11-19", + "last_updated": "2025-11-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 2, + "output": 12 + } }, - "qwen/qwen3-embedding-4b": { - "id": "qwen/qwen3-embedding-4b", - "name": "Qwen 3 Embedding 4B", - "family": "qwen", + "MiniMax-M2.7": { + "id": "MiniMax-M2.7", + "name": "MiniMax-M2.7", "attachment": false, "reasoning": false, - "tool_call": false, - "temperature": false, - "knowledge": "2024-12", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.01, "output": 0 }, - "limit": { "context": 32000, "output": 2048 } - }, - "qwen/qwen-2.5-7b-vision-instruct": { - "id": "qwen/qwen-2.5-7b-vision-instruct", - "name": "Qwen 2.5 7B Vision Instruct", - "family": "qwen", - "attachment": true, - "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 125000, "output": 4096 } + "release_date": "2026-03-19", + "last_updated": "2026-03-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "mistral/mistral-nemo-12b-instruct": { - "id": "mistral/mistral-nemo-12b-instruct", - "name": "Mistral Nemo 12B Instruct", - "family": "mistral-nemo", + "qwen3-max-2025-09-23": { + "id": "qwen3-max-2025-09-23", + "name": "qwen3-max-2025-09-23", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.038, "output": 0.1 }, - "limit": { "context": 16000, "output": 4096 } + "knowledge": "2025-04", + "release_date": "2025-09-24", + "last_updated": "2025-09-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 258048, + "output": 65536 + }, + "cost": { + "input": 0.86, + "output": 3.43 + } }, - "meta/llama-3.2-1b-instruct": { - "id": "meta/llama-3.2-1b-instruct", - "name": "Llama 3.2 1B Instruct", - "family": "llama", - "attachment": false, - "reasoning": false, + "claude-sonnet-4-5-20250929": { + "id": "claude-sonnet-4-5-20250929", + "name": "claude-sonnet-4-5-20250929", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.01, "output": 0.01 }, - "limit": { "context": 16000, "output": 4096 } + "knowledge": "2025-07-31", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15 + } }, - "meta/llama-3.1-8b-instruct": { - "id": "meta/llama-3.1-8b-instruct", - "name": "Llama 3.1 8B Instruct", - "family": "llama", + "qwen-flash": { + "id": "qwen-flash", + "name": "Qwen-Flash", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.025, "output": 0.025 }, - "limit": { "context": 16000, "output": 4096 } + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 32768 + }, + "cost": { + "input": 0.022, + "output": 0.22 + } }, - "meta/llama-3.2-11b-vision-instruct": { - "id": "meta/llama-3.2-11b-vision-instruct", - "name": "Llama 3.2 11B Vision Instruct", - "family": "llama", + "gemini-2.5-pro": { + "id": "gemini-2.5-pro", + "name": "gemini-2.5-pro", + "family": "gemini-pro", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.055, "output": 0.055 }, - "limit": { "context": 16000, "output": 4096 } + "knowledge": "2025-01", + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, - "meta/llama-3.2-3b-instruct": { - "id": "meta/llama-3.2-3b-instruct", - "name": "Llama 3.2 3B Instruct", - "family": "llama", - "attachment": false, + "grok-4-1-fast-non-reasoning": { + "id": "grok-4-1-fast-non-reasoning", + "name": "grok-4-1-fast-non-reasoning", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.02, "output": 0.02 }, - "limit": { "context": 16000, "output": 4096 } + "knowledge": "2025-06", + "release_date": "2025-11-20", + "last_updated": "2025-11-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5 + } }, - "osmosis/osmosis-structure-0.6b": { - "id": "osmosis/osmosis-structure-0.6b", - "name": "Osmosis Structure 0.6B", - "family": "osmosis", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.5 }, - "limit": { "context": 4000, "output": 2048 } - } - } - }, - "bailing": { - "id": "bailing", - "env": ["BAILING_API_TOKEN"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.tbox.cn/api/llm/v1/chat/completions", - "name": "Bailing", - "doc": "https://alipaytbox.yuque.com/sxs0ba/ling/intro", - "models": { - "Ling-1T": { - "id": "Ling-1T", - "name": "Ling-1T", - "family": "ling", - "attachment": false, + "claude-3-5-haiku-latest": { + "id": "claude-3-5-haiku-latest", + "name": "claude-3-5-haiku-latest", + "family": "claude-haiku", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-06", - "release_date": "2025-10", - "last_updated": "2025-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.57, "output": 2.29 }, - "limit": { "context": 128000, "output": 32000 } + "knowledge": "2024-07-31", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 0.8, + "output": 4 + } }, - "Ring-1T": { - "id": "Ring-1T", - "name": "Ring-1T", - "family": "ring", - "attachment": false, + "claude-opus-4-5-20251101-thinking": { + "id": "claude-opus-4-5-20251101-thinking", + "name": "claude-opus-4-5-20251101-thinking", + "attachment": true, "reasoning": true, - "tool_call": false, + "tool_call": true, "temperature": true, - "knowledge": "2024-06", - "release_date": "2025-10", - "last_updated": "2025-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.57, "output": 2.29 }, - "limit": { "context": 128000, "output": 32000 } - } - } - }, - "openai": { - "id": "openai", - "env": ["OPENAI_API_KEY"], - "npm": "@ai-sdk/openai", - "name": "OpenAI", - "doc": "https://platform.openai.com/docs/models", - "models": { - "gpt-5.2-codex": { - "id": "gpt-5.2-codex", - "name": "GPT-5.2 Codex", - "family": "gpt-codex", + "knowledge": "2025-03", + "release_date": "2025-11-25", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 5, + "output": 25 + } + }, + "gpt-5.2": { + "id": "gpt-5.2", + "name": "gpt-5.2", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": false, "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-12-12", + "last_updated": "2025-12-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14 + } }, - "o1-pro": { - "id": "o1-pro", - "name": "o1-pro", - "family": "o-pro", + "gpt-5.4-mini": { + "id": "gpt-5.4-mini", + "name": "gpt-5.4-mini", + "family": "gpt-mini", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": false, - "knowledge": "2023-09", - "release_date": "2025-03-19", - "last_updated": "2025-03-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-03-19", + "last_updated": "2026-03-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 150, "output": 600 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.75, + "output": 4.5 + } }, - "text-embedding-3-large": { - "id": "text-embedding-3-large", - "name": "text-embedding-3-large", - "family": "text-embedding", - "attachment": false, + "gemini-3-pro-image-preview": { + "id": "gemini-3-pro-image-preview", + "name": "gemini-3-pro-image-preview", + "attachment": true, "reasoning": false, "tool_call": false, - "temperature": false, - "knowledge": "2024-01", - "release_date": "2024-01-25", - "last_updated": "2024-01-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-06", + "release_date": "2025-11-20", + "last_updated": "2025-11-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.13, "output": 0 }, - "limit": { "context": 8191, "output": 3072 } + "limit": { + "context": 32768, + "output": 64000 + }, + "cost": { + "input": 2, + "output": 120 + } }, - "gpt-5.1-codex-mini": { - "id": "gpt-5.1-codex-mini", - "name": "GPT-5.1 Codex mini", - "family": "gpt-codex", - "attachment": true, + "glm-5.1": { + "id": "glm-5.1", + "name": "glm-5.1", + "family": "glm", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "release_date": "2026-04-10", + "last_updated": "2026-04-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 0.86, + "output": 3.5 + } + }, + "qwen-max-latest": { + "id": "qwen-max-latest", + "name": "Qwen-Max-Latest", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2024-04-03", + "last_updated": "2025-01-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.025 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.343, + "output": 1.372 + } }, - "gpt-5.4-pro": { - "id": "gpt-5.4-pro", - "name": "GPT-5.4 Pro", - "family": "gpt-pro", + "gpt-5.4-nano": { + "id": "gpt-5.4-nano", + "name": "gpt-5.4-nano", + "family": "gpt-nano", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": false, + "structured_output": true, "temperature": false, "knowledge": "2025-08-31", - "release_date": "2026-03-05", - "last_updated": "2026-03-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-03-19", + "last_updated": "2026-03-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.2, + "output": 1.25 + } + }, + "gemini-2.5-flash-image": { + "id": "gemini-2.5-flash-image", + "name": "gemini-2.5-flash-image", + "attachment": true, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-10-08", + "last_updated": "2025-10-08", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 30, "output": 180, "context_over_200k": { "input": 60, "output": 270 } }, - "limit": { "context": 1050000, "input": 922000, "output": 128000 } + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.3, + "output": 30 + } }, - "o3-mini": { - "id": "o3-mini", - "name": "o3-mini", - "family": "o-mini", + "glm-4.5": { + "id": "glm-4.5", + "name": "GLM-4.5", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-05", - "release_date": "2024-12-20", - "last_updated": "2025-01-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.55 }, - "limit": { "context": 200000, "output": 100000 } + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-29", + "last_updated": "2025-07-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 98304 + }, + "cost": { + "input": 0.286, + "output": 1.142 + } }, - "gpt-5.4-mini": { - "id": "gpt-5.4-mini", - "name": "GPT-5.4 mini", + "gpt-5.4-mini-2026-03-17": { + "id": "gpt-5.4-mini-2026-03-17", + "name": "gpt-5.4-mini-2026-03-17", "family": "gpt-mini", "attachment": true, "reasoning": true, @@ -896,33 +1153,51 @@ "structured_output": true, "temperature": false, "knowledge": "2025-08-31", - "release_date": "2026-03-17", - "last_updated": "2026-03-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-03-19", + "last_updated": "2026-03-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.75, "output": 4.5, "cache_read": 0.075 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.75, + "output": 4.5 + } }, - "gpt-5-pro": { - "id": "gpt-5-pro", - "name": "GPT-5 Pro", - "family": "gpt-pro", + "gemini-2.5-flash": { + "id": "gemini-2.5-flash", + "name": "gemini-2.5-flash", + "family": "gemini-flash", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-10-06", - "last_updated": "2025-10-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 120 }, - "limit": { "context": 400000, "input": 272000, "output": 272000 } + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5 + } }, "gpt-5.2-chat-latest": { "id": "gpt-5.2-chat-latest", - "name": "GPT-5.2 Chat", + "name": "gpt-5.2-chat-latest", "family": "gpt-codex", "attachment": true, "reasoning": true, @@ -930,376 +1205,585 @@ "structured_output": true, "temperature": false, "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-12-12", + "last_updated": "2025-12-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.75, + "output": 14 + } }, - "gpt-5": { - "id": "gpt-5", - "name": "GPT-5", - "family": "gpt", + "doubao-seed-1-6-vision-250815": { + "id": "doubao-seed-1-6-vision-250815", + "name": "doubao-seed-1-6-vision-250815", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 256000, + "output": 32000 + }, + "cost": { + "input": 0.114, + "output": 1.143 + } }, - "gpt-4-turbo": { - "id": "gpt-4-turbo", - "name": "GPT-4 Turbo", - "family": "gpt", + "gemini-3.1-flash-image-preview": { + "id": "gemini-3.1-flash-image-preview", + "name": "gemini-3.1-flash-image-preview", "attachment": true, "reasoning": false, - "tool_call": true, - "structured_output": false, + "tool_call": false, "temperature": true, - "knowledge": "2023-12", - "release_date": "2023-11-06", - "last_updated": "2024-04-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2026-02-27", + "last_updated": "2026-02-27", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text", "image"] + }, "open_weights": false, - "cost": { "input": 10, "output": 30 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.5, + "output": 60 + } }, - "gpt-4o": { - "id": "gpt-4o", - "name": "GPT-4o", - "family": "gpt", - "attachment": true, + "MiniMax-M2.7-highspeed": { + "id": "MiniMax-M2.7-highspeed", + "name": "MiniMax-M2.7-highspeed", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2023-09", - "release_date": "2024-05-13", - "last_updated": "2024-08-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-03-19", + "last_updated": "2026-03-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 10, "cache_read": 1.25 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 4.8 + } }, - "gpt-5.3-codex": { - "id": "gpt-5.3-codex", - "name": "GPT-5.3 Codex", - "family": "gpt-codex", - "attachment": true, - "reasoning": true, + "glm-4.5-x": { + "id": "glm-4.5-x", + "name": "glm-4.5-x", + "family": "glm", + "attachment": false, + "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-29", + "last_updated": "2025-07-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.143, + "output": 2.29 + } }, - "gpt-5-mini": { - "id": "gpt-5-mini", - "name": "GPT-5 Mini", - "family": "gpt-mini", - "attachment": true, - "reasoning": true, + "MiniMax-M2.1": { + "id": "MiniMax-M2.1", + "name": "MiniMax-M2.1", + "attachment": false, + "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-05-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "release_date": "2025-12-19", + "last_updated": "2025-12-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.025 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 1000000, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "gpt-5.3-codex-spark": { - "id": "gpt-5.3-codex-spark", - "name": "GPT-5.3 Codex Spark", - "family": "gpt-codex-spark", + "gpt-5.1": { + "id": "gpt-5.1", + "name": "gpt-5.1", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2024-09-30", + "release_date": "2025-11-14", + "last_updated": "2025-11-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 128000, "input": 100000, "output": 32000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, - "gpt-4o-mini": { - "id": "gpt-4o-mini", - "name": "GPT-4o mini", - "family": "gpt-mini", - "attachment": true, - "reasoning": false, + "kimi-k2-thinking-turbo": { + "id": "kimi-k2-thinking-turbo", + "name": "kimi-k2-thinking-turbo", + "attachment": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2023-09", - "release_date": "2024-07-18", - "last_updated": "2024-07-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-06", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.6, "cache_read": 0.08 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 1.265, + "output": 9.119 + } }, - "gpt-5.1-codex-max": { - "id": "gpt-5.1-codex-max", - "name": "GPT-5.1 Codex Max", - "family": "gpt-codex", - "attachment": true, + "deepseek-reasoner": { + "id": "deepseek-reasoner", + "name": "Deepseek-Reasoner", + "family": "deepseek-thinking", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.29, + "output": 0.43 + } }, - "gpt-4.1": { - "id": "gpt-4.1", - "name": "GPT-4.1", - "family": "gpt", + "grok-4-fast-reasoning": { + "id": "grok-4-fast-reasoning", + "name": "grok-4-fast-reasoning", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-06", + "release_date": "2025-09-23", + "last_updated": "2025-09-23", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8, "cache_read": 0.5 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5 + } }, - "gpt-5.1-chat-latest": { - "id": "gpt-5.1-chat-latest", - "name": "GPT-5.1 Chat", - "family": "gpt-codex", + "claude-opus-4-1-20250805-thinking": { + "id": "claude-opus-4-1-20250805-thinking", + "name": "claude-opus-4-1-20250805-thinking", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-03", + "release_date": "2025-05-27", + "last_updated": "2025-05-27", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75 + } }, - "gpt-3.5-turbo": { - "id": "gpt-3.5-turbo", - "name": "GPT-3.5-turbo", - "family": "gpt", + "glm-4.5-air": { + "id": "glm-4.5-air", + "name": "glm-4.5-air", + "family": "glm-air", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "knowledge": "2021-09-01", - "release_date": "2023-03-01", - "last_updated": "2023-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.5, "output": 1.5, "cache_read": 1.25 }, - "limit": { "context": 16385, "output": 4096 } + "knowledge": "2025-04", + "release_date": "2025-07-29", + "last_updated": "2025-07-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 98304 + }, + "cost": { + "input": 0.1143, + "output": 0.286 + } }, - "gpt-5.4": { - "id": "gpt-5.4", - "name": "GPT-5.4", - "family": "gpt", + "gpt-5.4-pro": { + "id": "gpt-5.4-pro", + "name": "gpt-5.4-pro", + "family": "gpt-pro", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": false, "knowledge": "2025-08-31", "release_date": "2026-03-05", "last_updated": "2026-03-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { - "input": 2.5, - "output": 15, - "cache_read": 0.25, - "context_over_200k": { "input": 5, "output": 22.5, "cache_read": 0.5 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 }, - "limit": { "context": 1050000, "input": 922000, "output": 128000 } + "cost": { + "input": 30, + "output": 180, + "cache_read": 0, + "cache_write": 0, + "tiers": [ + { + "input": 60, + "output": 270, + "tier": { + "type": "context", + "size": 272000 + } + } + ], + "context_over_200k": { + "input": 60, + "output": 270 + } + } }, - "o1": { - "id": "o1", - "name": "o1", - "family": "o", - "attachment": true, + "glm-5-turbo": { + "id": "glm-5-turbo", + "name": "glm-5-turbo", + "family": "glm", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, - "temperature": false, - "knowledge": "2023-09", - "release_date": "2024-12-05", - "last_updated": "2024-12-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "release_date": "2026-03-16", + "last_updated": "2026-03-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 60, "cache_read": 7.5 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 0.72, + "output": 3.2 + } }, - "codex-mini-latest": { - "id": "codex-mini-latest", - "name": "Codex Mini", - "family": "gpt-codex-mini", - "attachment": true, - "reasoning": true, + "qwen3-30b-a3b": { + "id": "qwen3-30b-a3b", + "name": "Qwen3-30B-A3B", + "family": "qwen", + "attachment": false, + "reasoning": false, "tool_call": true, - "temperature": false, - "knowledge": "2024-04", - "release_date": "2025-05-16", - "last_updated": "2025-05-16", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04-29", + "last_updated": "2025-04-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.5, "output": 6, "cache_read": 0.375 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.11, + "output": 1.08 + } }, - "o3": { - "id": "o3", - "name": "o3", - "family": "o", + "claude-opus-4-5": { + "id": "claude-opus-4-5", + "name": "claude-opus-4-5", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-05", - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-11-25", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8, "cache_read": 0.5 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 5, + "output": 25 + } }, - "gpt-5.3-chat-latest": { - "id": "gpt-5.3-chat-latest", - "name": "GPT-5.3 Chat (latest)", - "family": "gpt", + "glm-4.5v": { + "id": "glm-4.5v", + "name": "GLM-4.5V", + "family": "glm", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-08-31", - "release_date": "2026-03-03", - "last_updated": "2026-03-03", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2025-04", + "release_date": "2025-08-12", + "last_updated": "2025-08-12", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 64000, + "output": 16384 + }, + "cost": { + "input": 0.29, + "output": 0.86 + } }, - "gpt-5.4-nano": { - "id": "gpt-5.4-nano", - "name": "GPT-5.4 nano", - "family": "gpt-nano", - "attachment": true, + "glm-4.6": { + "id": "glm-4.6", + "name": "glm-4.6", + "family": "glm", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-17", - "last_updated": "2026-03-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 1.25, "cache_read": 0.02 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.286, + "output": 1.142 + } }, - "gpt-4o-2024-05-13": { - "id": "gpt-4o-2024-05-13", - "name": "GPT-4o (2024-05-13)", - "family": "gpt", + "claude-opus-4-6-thinking": { + "id": "claude-opus-4-6-thinking", + "name": "claude-opus-4-6-thinking", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2023-09", - "release_date": "2024-05-13", - "last_updated": "2024-05-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-05", + "release_date": "2026-02-06", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 15 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25 + } }, - "gpt-4": { - "id": "gpt-4", - "name": "GPT-4", - "family": "gpt", + "gemini-2.5-flash-preview-09-2025": { + "id": "gemini-2.5-flash-preview-09-2025", + "name": "gemini-2.5-flash-preview-09-2025", "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": false, "temperature": true, - "knowledge": "2023-11", - "release_date": "2023-11-06", - "last_updated": "2024-04-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-09-26", + "last_updated": "2025-09-26", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 30, "output": 60 }, - "limit": { "context": 8192, "output": 8192 } + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5 + } }, - "gpt-4o-2024-11-20": { - "id": "gpt-4o-2024-11-20", - "name": "GPT-4o (2024-11-20)", - "family": "gpt", + "claude-sonnet-4-6-thinking": { + "id": "claude-sonnet-4-6-thinking", + "name": "claude-sonnet-4-6-thinking", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2023-09", - "release_date": "2024-11-20", - "last_updated": "2024-11-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-08", + "release_date": "2026-02-18", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 10, "cache_read": 1.25 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15 + } }, - "text-embedding-ada-002": { - "id": "text-embedding-ada-002", - "name": "text-embedding-ada-002", - "family": "text-embedding", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "knowledge": "2022-12", - "release_date": "2022-12-15", - "last_updated": "2022-12-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "glm-4.6v": { + "id": "glm-4.6v", + "name": "GLM-4.6V", + "family": "glm", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-12-08", + "last_updated": "2025-12-08", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.145, + "output": 0.43 + } + }, + "claude-opus-4-1-20250805": { + "id": "claude-opus-4-1-20250805", + "name": "claude-opus-4-1-20250805", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0 }, - "limit": { "context": 8192, "output": 1536 } + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75 + } }, - "gpt-5.2": { - "id": "gpt-5.2", - "name": "GPT-5.2", + "gpt-5.4": { + "id": "gpt-5.4", + "name": "gpt-5.4", "family": "gpt", "attachment": true, "reasoning": true, @@ -1307,134 +1791,241 @@ "structured_output": true, "temperature": false, "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 2.5, + "output": 15, + "cache_read": 0.25, + "cache_write": 0, + "tiers": [ + { + "input": 5, + "output": 22.5, + "tier": { + "type": "context", + "size": 272000 + } + } + ], + "context_over_200k": { + "input": 5, + "output": 22.5 + } + } }, - "o4-mini-deep-research": { - "id": "o4-mini-deep-research", - "name": "o4-mini-deep-research", - "family": "o-mini", + "gpt-5.1-chat-latest": { + "id": "gpt-5.1-chat-latest", + "name": "gpt-5.1-chat-latest", + "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": false, - "knowledge": "2024-05", - "release_date": "2024-06-26", - "last_updated": "2024-06-26", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-09-30", + "release_date": "2025-11-14", + "last_updated": "2025-11-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8, "cache_read": 0.5 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, - "gpt-5.1": { - "id": "gpt-5.1", - "name": "GPT-5.1", - "family": "gpt", + "claude-haiku-4-5-20251001": { + "id": "claude-haiku-4-5-20251001", + "name": "claude-haiku-4-5-20251001", + "family": "claude-haiku", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-02-28", + "release_date": "2025-10-16", + "last_updated": "2025-10-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.13 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5 + } }, - "gpt-4.1-mini": { - "id": "gpt-4.1-mini", - "name": "GPT-4.1 mini", - "family": "gpt-mini", - "attachment": true, + "MiniMax-M1": { + "id": "MiniMax-M1", + "name": "MiniMax-M1", + "family": "minimax", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-06-16", + "last_updated": "2025-06-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 1.6, "cache_read": 0.1 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 0.132, + "output": 1.254 + } }, - "gpt-5-chat-latest": { - "id": "gpt-5-chat-latest", - "name": "GPT-5 Chat (latest)", - "family": "gpt-codex", + "gpt-5.4-nano-2026-03-17": { + "id": "gpt-5.4-nano-2026-03-17", + "name": "gpt-5.4-nano-2026-03-17", + "family": "gpt-nano", "attachment": true, "reasoning": true, - "tool_call": false, + "tool_call": true, "structured_output": true, - "temperature": true, - "knowledge": "2024-09-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-19", + "last_updated": "2026-03-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.2, + "output": 1.25 + } }, - "gpt-5-nano": { - "id": "gpt-5-nano", - "name": "GPT-5 Nano", - "family": "gpt-nano", + "claude-sonnet-4-20250514": { + "id": "claude-sonnet-4-20250514", + "name": "claude-sonnet-4-20250514", + "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-05-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.05, "output": 0.4, "cache_read": 0.005 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15 + } }, - "o3-pro": { - "id": "o3-pro", - "name": "o3-pro", - "family": "o-pro", + "qwen3-coder-480b-a35b-instruct": { + "id": "qwen3-coder-480b-a35b-instruct", + "name": "qwen3-coder-480b-a35b-instruct", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.86, + "output": 3.43 + } + }, + "claude-opus-4-6": { + "id": "claude-opus-4-6", + "name": "claude-opus-4-6", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-05", - "release_date": "2025-06-10", - "last_updated": "2025-06-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-05-31", + "release_date": "2026-02-06", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 20, "output": 80 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25 + } }, - "gpt-4o-2024-08-06": { - "id": "gpt-4o-2024-08-06", - "name": "GPT-4o (2024-08-06)", - "family": "gpt", + "doubao-seed-code-preview-251028": { + "id": "doubao-seed-code-preview-251028", + "name": "doubao-seed-code-preview-251028", "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2023-09", - "release_date": "2024-08-06", - "last_updated": "2024-08-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-11-11", + "last_updated": "2025-11-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 10, "cache_read": 1.25 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 256000, + "output": 32000 + }, + "cost": { + "input": 0.17, + "output": 1.14 + } }, "gpt-4.1-nano": { "id": "gpt-4.1-nano", - "name": "GPT-4.1 nano", + "name": "gpt-4.1-nano", "family": "gpt-nano", "attachment": true, "reasoning": false, @@ -1444,10081 +2035,14974 @@ "knowledge": "2024-04", "release_date": "2025-04-14", "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.03 }, - "limit": { "context": 1047576, "output": 32768 } - }, - "o1-preview": { - "id": "o1-preview", - "name": "o1-preview", - "family": "o", - "attachment": false, - "reasoning": true, - "tool_call": false, - "temperature": true, - "knowledge": "2023-09", - "release_date": "2024-09-12", - "last_updated": "2024-09-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 60, "cache_read": 7.5 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.1, + "output": 0.4 + } }, - "text-embedding-3-small": { - "id": "text-embedding-3-small", - "name": "text-embedding-3-small", - "family": "text-embedding", + "deepseek-v3.2": { + "id": "deepseek-v3.2", + "name": "deepseek-v3.2", "attachment": false, "reasoning": false, - "tool_call": false, - "temperature": false, - "knowledge": "2024-01", - "release_date": "2024-01-25", - "last_updated": "2024-01-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.02, "output": 0 }, - "limit": { "context": 8191, "output": 1536 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.29, + "output": 0.43 + } }, - "gpt-5-codex": { - "id": "gpt-5-codex", - "name": "GPT-5-Codex", - "family": "gpt-codex", - "attachment": false, + "gpt-5-pro": { + "id": "gpt-5-pro", + "name": "gpt-5-pro", + "family": "gpt-pro", + "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": false, "knowledge": "2024-09-30", - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-10-08", + "last_updated": "2025-10-08", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 272000 + }, + "cost": { + "input": 15, + "output": 120 + } }, - "o4-mini": { - "id": "o4-mini", - "name": "o4-mini", - "family": "o-mini", + "gpt-4o": { + "id": "gpt-4o", + "name": "gpt-4o", + "family": "gpt", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "structured_output": true, - "temperature": false, - "knowledge": "2024-05", - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2023-09", + "release_date": "2024-05-13", + "last_updated": "2024-05-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.28 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "o3-deep-research": { - "id": "o3-deep-research", - "name": "o3-deep-research", - "family": "o", + "claude-sonnet-4-5": { + "id": "claude-sonnet-4-5", + "name": "claude-sonnet-4-5", + "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2024-05", - "release_date": "2024-06-26", - "last_updated": "2024-06-26", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-07-31", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 10, "output": 40, "cache_read": 2.5 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15 + } }, - "gpt-5.1-codex": { - "id": "gpt-5.1-codex", - "name": "GPT-5.1 Codex", - "family": "gpt-codex", + "gpt-5": { + "id": "gpt-5", + "name": "gpt-5", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": false, "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-08-08", + "last_updated": "2025-08-08", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, - "o1-mini": { - "id": "o1-mini", - "name": "o1-mini", - "family": "o-mini", - "attachment": false, + "grok-4.20-beta-0309-reasoning": { + "id": "grok-4.20-beta-0309-reasoning", + "name": "grok-4.20-beta-0309-reasoning", + "attachment": true, "reasoning": true, - "tool_call": false, - "structured_output": true, - "temperature": false, - "knowledge": "2023-09", - "release_date": "2024-09-12", - "last_updated": "2024-09-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-16", + "last_updated": "2026-03-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.55 }, - "limit": { "context": 128000, "output": 65536 } + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 2, + "output": 6 + } }, - "gpt-5.2-pro": { - "id": "gpt-5.2-pro", - "name": "GPT-5.2 Pro", - "family": "gpt-pro", + "claude-opus-4-20250514": { + "id": "claude-opus-4-20250514", + "name": "claude-opus-4-20250514", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": false, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 21, "output": 168 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } - } - } - }, - "io-net": { - "id": "io-net", - "env": ["IOINTELLIGENCE_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.intelligence.io.solutions/api/v1", - "name": "IO.NET", - "doc": "https://io.net/docs/guides/intelligence/io-intelligence", - "models": { - "openai/gpt-oss-120b": { - "id": "openai/gpt-oss-120b", - "name": "GPT-OSS 120B", - "family": "gpt-oss", + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75 + } + }, + "glm-for-coding": { + "id": "glm-for-coding", + "name": "glm-for-coding", + "family": "glm", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.04, "output": 0.4, "cache_read": 0.02, "cache_write": 0.08 }, - "limit": { "context": 131072, "output": 4096 } + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 0.086, + "output": 0.343 + } }, - "openai/gpt-oss-20b": { - "id": "openai/gpt-oss-20b", - "name": "GPT-OSS 20B", - "family": "gpt-oss", - "attachment": false, - "reasoning": false, + "claude-sonnet-4-5-20250929-thinking": { + "id": "claude-sonnet-4-5-20250929-thinking", + "name": "claude-sonnet-4-5-20250929-thinking", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.03, "output": 0.14, "cache_read": 0.015, "cache_write": 0.06 }, - "limit": { "context": 64000, "output": 4096 } + "knowledge": "2025-03", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15 + } }, - "zai-org/GLM-4.6": { - "id": "zai-org/GLM-4.6", - "name": "GLM 4.6", + "glm-4.5-airx": { + "id": "glm-4.5-airx", + "name": "glm-4.5-airx", "family": "glm", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-11-15", - "last_updated": "2024-11-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-29", + "last_updated": "2025-07-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 1.75, "cache_read": 0.2, "cache_write": 0.8 }, - "limit": { "context": 200000, "output": 4096 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.572, + "output": 1.714 + } }, - "Intel/Qwen3-Coder-480B-A35B-Instruct-int4-mixed-ar": { - "id": "Intel/Qwen3-Coder-480B-A35B-Instruct-int4-mixed-ar", - "name": "Qwen 3 Coder 480B", - "family": "qwen", - "attachment": false, + "gpt-4.1": { + "id": "gpt-4.1", + "name": "gpt-4.1", + "family": "gpt", + "attachment": true, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-01-15", - "last_updated": "2025-01-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.22, "output": 0.95, "cache_read": 0.11, "cache_write": 0.44 }, - "limit": { "context": 106000, "output": 4096 } - }, - "meta-llama/Llama-3.3-70B-Instruct": { - "id": "meta-llama/Llama-3.3-70B-Instruct", - "name": "Llama 3.3 70B Instruct", - "family": "llama", - "attachment": false, - "reasoning": false, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 8 + } + }, + "kimi-k2-thinking": { + "id": "kimi-k2-thinking", + "name": "kimi-k2-thinking", + "attachment": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.13, "output": 0.38, "cache_read": 0.065, "cache_write": 0.26 }, - "limit": { "context": 128000, "output": 4096 } + "knowledge": "2025-06", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.575, + "output": 2.3 + } }, - "meta-llama/Llama-3.2-90B-Vision-Instruct": { - "id": "meta-llama/Llama-3.2-90B-Vision-Instruct", - "name": "Llama 3.2 90B Vision Instruct", - "family": "llama", - "attachment": false, + "gemini-2.0-flash-lite": { + "id": "gemini-2.0-flash-lite", + "name": "gemini-2.0-flash-lite", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2025-06-16", + "last_updated": "2025-06-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 8192 + }, + "cost": { + "input": 0.075, + "output": 0.3 + } + }, + "gpt-4.1-mini": { + "id": "gpt-4.1-mini", + "name": "gpt-4.1-mini", + "family": "gpt-mini", + "attachment": true, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-09-25", - "last_updated": "2024-09-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.35, "output": 0.4, "cache_read": 0.175, "cache_write": 0.7 }, - "limit": { "context": 16000, "output": 4096 } + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.4, + "output": 1.6 + } }, - "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8": { - "id": "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8", - "name": "Llama 4 Maverick 17B 128E Instruct", - "family": "llama", - "attachment": false, + "grok-4-fast-non-reasoning": { + "id": "grok-4-fast-non-reasoning", + "name": "grok-4-fast-non-reasoning", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-01-15", - "last_updated": "2025-01-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.6, "cache_read": 0.075, "cache_write": 0.3 }, - "limit": { "context": 430000, "output": 4096 } + "knowledge": "2025-06", + "release_date": "2025-09-23", + "last_updated": "2025-09-23", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5 + } }, - "deepseek-ai/DeepSeek-R1-0528": { - "id": "deepseek-ai/DeepSeek-R1-0528", - "name": "DeepSeek R1", - "family": "deepseek-thinking", - "attachment": false, + "doubao-seed-1-6-thinking-250715": { + "id": "doubao-seed-1-6-thinking-250715", + "name": "doubao-seed-1-6-thinking-250715", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-01-20", - "last_updated": "2025-05-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2, "output": 8.75, "cache_read": 1, "cache_write": 4 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2025-07-15", + "last_updated": "2025-07-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 16000 + }, + "cost": { + "input": 0.121, + "output": 1.21 + } }, - "Qwen/Qwen3-235B-A22B-Thinking-2507": { - "id": "Qwen/Qwen3-235B-A22B-Thinking-2507", - "name": "Qwen 3 235B Thinking", + "ministral-14b-2512": { + "id": "ministral-14b-2512", + "name": "ministral-14b-2512", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2025-12-16", + "last_updated": "2025-12-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.33, + "output": 0.33 + } + } + } + }, + "alibaba": { + "id": "alibaba", + "env": ["DASHSCOPE_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://dashscope-intl.aliyuncs.com/compatible-mode/v1", + "name": "Alibaba", + "doc": "https://www.alibabacloud.com/help/en/model-studio/models", + "models": { + "qwen3-235b-a22b": { + "id": "qwen3-235b-a22b", + "name": "Qwen3 235B-A22B", "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-07-01", - "last_updated": "2025-07-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.11, "output": 0.6, "cache_read": 0.055, "cache_write": 0.22 }, - "limit": { "context": 262144, "output": 4096 } + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.7, + "output": 2.8, + "reasoning": 8.4 + } }, - "Qwen/Qwen3-Next-80B-A3B-Instruct": { - "id": "Qwen/Qwen3-Next-80B-A3B-Instruct", - "name": "Qwen 3 Next 80B Instruct", + "qwen3.5-122b-a10b": { + "id": "qwen3.5-122b-a10b", + "name": "Qwen3.5 122B-A10B", "family": "qwen", - "attachment": false, - "reasoning": false, + "attachment": true, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-01-10", - "last_updated": "2025-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-23", + "last_updated": "2026-02-23", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.8, "cache_read": 0.05, "cache_write": 0.2 }, - "limit": { "context": 262144, "output": 4096 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.4, + "output": 3.2 + } }, - "Qwen/Qwen2.5-VL-32B-Instruct": { - "id": "Qwen/Qwen2.5-VL-32B-Instruct", - "name": "Qwen 2.5 VL 32B Instruct", + "qwen3-coder-plus": { + "id": "qwen3-coder-plus", + "name": "Qwen3 Coder Plus", "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-09", - "release_date": "2024-11-01", - "last_updated": "2024-11-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.05, "output": 0.22, "cache_read": 0.025, "cache_write": 0.1 }, - "limit": { "context": 32000, "output": 4096 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1, + "output": 5 + } }, - "moonshotai/Kimi-K2-Instruct-0905": { - "id": "moonshotai/Kimi-K2-Instruct-0905", - "name": "Kimi K2 Instruct", - "family": "kimi", - "attachment": false, - "reasoning": false, + "qwen3.6-27b": { + "id": "qwen3.6-27b", + "name": "Qwen3.6 27B", + "family": "qwen", + "attachment": true, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-08", - "release_date": "2024-09-05", - "last_updated": "2024-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.39, "output": 1.9, "cache_read": 0.195, "cache_write": 0.78 }, - "limit": { "context": 32768, "output": 4096 } + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.6, + "output": 3.6 + } }, - "moonshotai/Kimi-K2-Thinking": { - "id": "moonshotai/Kimi-K2-Thinking", - "name": "Kimi K2 Thinking", - "family": "kimi-thinking", - "attachment": false, + "qwen3.5-27b": { + "id": "qwen3.5-27b", + "name": "Qwen3.5 27B", + "family": "qwen", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-08", - "release_date": "2024-11-01", - "last_updated": "2024-11-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.55, "output": 2.25, "cache_read": 0.275, "cache_write": 1.1 }, - "limit": { "context": 32768, "output": 4096 } + "release_date": "2026-02-23", + "last_updated": "2026-02-23", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.4 + } }, - "mistralai/Devstral-Small-2505": { - "id": "mistralai/Devstral-Small-2505", - "name": "Devstral Small 2505", - "family": "devstral", + "qwen-vl-ocr": { + "id": "qwen-vl-ocr", + "name": "Qwen-VL OCR", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-05-01", - "last_updated": "2025-05-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2024-10-28", + "last_updated": "2025-04-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.05, "output": 0.22, "cache_read": 0.025, "cache_write": 0.1 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 34096, + "output": 4096 + }, + "cost": { + "input": 0.72, + "output": 0.72 + } }, - "mistralai/Mistral-Large-Instruct-2411": { - "id": "mistralai/Mistral-Large-Instruct-2411", - "name": "Mistral Large Instruct 2411", - "family": "mistral-large", + "qwen-omni-turbo-realtime": { + "id": "qwen-omni-turbo-realtime", + "name": "Qwen-Omni Turbo Realtime", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-11-01", - "last_updated": "2024-11-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2025-05-08", + "last_updated": "2025-05-08", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text", "audio"] + }, "open_weights": false, - "cost": { "input": 2, "output": 6, "cache_read": 1, "cache_write": 4 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 32768, + "output": 2048 + }, + "cost": { + "input": 0.27, + "output": 1.07, + "input_audio": 4.44, + "output_audio": 8.89 + } }, - "mistralai/Mistral-Nemo-Instruct-2407": { - "id": "mistralai/Mistral-Nemo-Instruct-2407", - "name": "Mistral Nemo Instruct 2407", - "family": "mistral-nemo", + "qwen3-8b": { + "id": "qwen3-8b", + "name": "Qwen3 8B", + "family": "qwen", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-05", - "release_date": "2024-07-01", - "last_updated": "2024-07-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.02, "output": 0.04, "cache_read": 0.01, "cache_write": 0.04 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.18, + "output": 0.7, + "reasoning": 2.1 + } }, - "mistralai/Magistral-Small-2506": { - "id": "mistralai/Magistral-Small-2506", - "name": "Magistral Small 2506", - "family": "magistral-small", - "attachment": false, - "reasoning": false, + "qwen3.5-397b-a17b": { + "id": "qwen3.5-397b-a17b", + "name": "Qwen3.5 397B-A17B", + "family": "qwen", + "attachment": true, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-06-01", - "last_updated": "2025-06-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.5, "output": 1.5, "cache_read": 0.25, "cache_write": 1 }, - "limit": { "context": 128000, "output": 4096 } - } - } - }, - "cohere": { - "id": "cohere", - "env": ["COHERE_API_KEY"], - "npm": "@ai-sdk/cohere", - "name": "Cohere", - "doc": "https://docs.cohere.com/docs/models", - "models": { - "command-a-reasoning-08-2025": { - "id": "command-a-reasoning-08-2025", - "name": "Command A Reasoning", - "family": "command-a", + "release_date": "2026-02-15", + "last_updated": "2026-02-15", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.6, + "output": 3.6 + } + }, + "qwq-plus": { + "id": "qwq-plus", + "name": "QwQ Plus", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-06-01", - "release_date": "2025-08-21", - "last_updated": "2025-08-21", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 256000, "output": 32000 } + "knowledge": "2024-04", + "release_date": "2025-03-05", + "last_updated": "2025-03-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.8, + "output": 2.4 + } }, - "command-r-08-2024": { - "id": "command-r-08-2024", - "name": "Command R", - "family": "command-r", + "qwen-vl-plus": { + "id": "qwen-vl-plus", + "name": "Qwen-VL Plus", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-06-01", - "release_date": "2024-08-30", - "last_updated": "2024-08-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 128000, "output": 4000 } + "knowledge": "2024-04", + "release_date": "2024-01-25", + "last_updated": "2025-08-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.21, + "output": 0.63 + } }, - "command-a-translate-08-2025": { - "id": "command-a-translate-08-2025", - "name": "Command A Translate", - "family": "command-a", + "qwen3-livetranslate-flash-realtime": { + "id": "qwen3-livetranslate-flash-realtime", + "name": "Qwen3-LiveTranslate Flash Realtime", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-06-01", - "release_date": "2025-08-28", - "last_updated": "2025-08-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 8000, "output": 8000 } + "knowledge": "2024-04", + "release_date": "2025-09-22", + "last_updated": "2025-09-22", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text", "audio"] + }, + "open_weights": false, + "limit": { + "context": 53248, + "output": 4096 + }, + "cost": { + "input": 10, + "output": 10, + "input_audio": 10, + "output_audio": 38 + } }, - "command-a-03-2025": { - "id": "command-a-03-2025", - "name": "Command A", - "family": "command-a", + "qwen3-32b": { + "id": "qwen3-32b", + "name": "Qwen3 32B", + "family": "qwen", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-06-01", - "release_date": "2025-03-13", - "last_updated": "2025-03-13", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 256000, "output": 8000 } + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.7, + "output": 2.8, + "reasoning": 8.4 + } }, - "command-r-plus-08-2024": { - "id": "command-r-plus-08-2024", - "name": "Command R+", - "family": "command-r", + "qwen-max": { + "id": "qwen-max", + "name": "Qwen Max", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-06-01", - "release_date": "2024-08-30", - "last_updated": "2024-08-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 128000, "output": 4000 } + "knowledge": "2024-04", + "release_date": "2024-04-03", + "last_updated": "2025-01-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "output": 8192 + }, + "cost": { + "input": 1.6, + "output": 6.4 + } }, - "c4ai-aya-expanse-32b": { - "id": "c4ai-aya-expanse-32b", - "name": "Aya Expanse 32B", + "qwen-plus": { + "id": "qwen-plus", + "name": "Qwen Plus", + "family": "qwen", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2024-10-24", - "last_updated": "2024-10-24", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 128000, "output": 4000 } + "knowledge": "2024-04", + "release_date": "2024-01-25", + "last_updated": "2025-09-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 32768 + }, + "cost": { + "input": 0.4, + "output": 1.2, + "reasoning": 4 + } }, - "command-a-vision-07-2025": { - "id": "command-a-vision-07-2025", - "name": "Command A Vision", - "family": "command-a", - "attachment": false, - "reasoning": false, - "tool_call": false, + "qwen3.6-35b-a3b": { + "id": "qwen3.6-35b-a3b", + "name": "Qwen3.6 35B-A3B", + "family": "qwen", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-06-01", - "release_date": "2025-07-31", - "last_updated": "2025-07-31", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-04-17", + "last_updated": "2026-04-17", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 128000, "output": 8000 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.248, + "output": 1.485 + } }, - "command-r7b-arabic-02-2025": { - "id": "command-r7b-arabic-02-2025", - "name": "Command R7B Arabic", - "family": "command-r", + "qwen-omni-turbo": { + "id": "qwen-omni-turbo", + "name": "Qwen-Omni Turbo", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-06-01", - "release_date": "2025-02-27", - "last_updated": "2025-02-27", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.0375, "output": 0.15 }, - "limit": { "context": 128000, "output": 4000 } + "knowledge": "2024-04", + "release_date": "2025-01-19", + "last_updated": "2025-03-26", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text", "audio"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "output": 2048 + }, + "cost": { + "input": 0.07, + "output": 0.27, + "input_audio": 4.44, + "output_audio": 8.89 + } }, - "c4ai-aya-vision-8b": { - "id": "c4ai-aya-vision-8b", - "name": "Aya Vision 8B", - "attachment": true, - "reasoning": false, - "tool_call": false, + "qwen-flash": { + "id": "qwen-flash", + "name": "Qwen Flash", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-03-04", - "last_updated": "2025-05-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 16000, "output": 4000 } + "knowledge": "2024-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 32768 + }, + "cost": { + "input": 0.05, + "output": 0.4 + } }, - "command-r7b-12-2024": { - "id": "command-r7b-12-2024", - "name": "Command R7B", - "family": "command-r", + "qwen2-5-vl-7b-instruct": { + "id": "qwen2-5-vl-7b-instruct", + "name": "Qwen2.5-VL 7B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-06-01", - "release_date": "2024-02-27", - "last_updated": "2024-02-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2024-09", + "last_updated": "2024-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.0375, "output": 0.15 }, - "limit": { "context": 128000, "output": 4000 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.35, + "output": 1.05 + } }, - "c4ai-aya-expanse-8b": { - "id": "c4ai-aya-expanse-8b", - "name": "Aya Expanse 8B", + "qwen3.6-plus": { + "id": "qwen3.6-plus", + "name": "Qwen3.6 Plus", + "family": "qwen", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2024-10-24", - "last_updated": "2024-10-24", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 8000, "output": 4000 } + "knowledge": "2025-04", + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.05, + "cache_write": 0.625, + "tiers": [ + { + "input": 2, + "output": 6, + "cache_read": 0.2, + "cache_write": 2.5, + "tier": { + "type": "context", + "size": 256000 + } + } + ], + "context_over_200k": { + "input": 2, + "output": 6, + "cache_read": 0.2, + "cache_write": 2.5 + } + } }, - "c4ai-aya-vision-32b": { - "id": "c4ai-aya-vision-32b", - "name": "Aya Vision 32B", - "attachment": true, + "qwen3-max": { + "id": "qwen3-max", + "name": "Qwen3 Max", + "family": "qwen", + "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "release_date": "2025-03-04", - "last_updated": "2025-05-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "limit": { "context": 16000, "output": 4000 } - } - } - }, - "minimax-coding-plan": { - "id": "minimax-coding-plan", - "env": ["MINIMAX_API_KEY"], - "npm": "@ai-sdk/anthropic", - "api": "https://api.minimax.io/anthropic/v1", - "name": "MiniMax Coding Plan (minimax.io)", - "doc": "https://platform.minimax.io/docs/coding-plan/intro", - "models": { - "MiniMax-M2.7": { - "id": "MiniMax-M2.7", - "name": "MiniMax-M2.7", - "family": "minimax", + "knowledge": "2025-04", + "release_date": "2025-09-23", + "last_updated": "2025-09-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 1.2, + "output": 6 + } + }, + "qwen3-omni-flash": { + "id": "qwen3-omni-flash", + "name": "Qwen3-Omni Flash", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 204800, "output": 131072 } + "knowledge": "2024-04", + "release_date": "2025-09-15", + "last_updated": "2025-09-15", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text", "audio"] + }, + "open_weights": false, + "limit": { + "context": 65536, + "output": 16384 + }, + "cost": { + "input": 0.43, + "output": 1.66, + "input_audio": 3.81, + "output_audio": 15.11 + } }, - "MiniMax-M2.1": { - "id": "MiniMax-M2.1", - "name": "MiniMax-M2.1", - "family": "minimax", + "qwen2-5-72b-instruct": { + "id": "qwen2-5-72b-instruct", + "name": "Qwen2.5 72B Instruct", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2024-09", + "last_updated": "2024-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 1.4, + "output": 5.6 + } }, - "MiniMax-M2.5": { - "id": "MiniMax-M2.5", - "name": "MiniMax-M2.5", - "family": "minimax", + "qwen3-vl-235b-a22b": { + "id": "qwen3-vl-235b-a22b", + "name": "Qwen3-VL 235B-A22B", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.7, + "output": 2.8, + "reasoning": 8.4 + } }, - "MiniMax-M2": { - "id": "MiniMax-M2", - "name": "MiniMax-M2", - "family": "minimax", + "qwen3-asr-flash": { + "id": "qwen3-asr-flash", + "name": "Qwen3-ASR Flash", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "knowledge": "2024-04", + "release_date": "2025-09-08", + "last_updated": "2025-09-08", + "modalities": { + "input": ["audio"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 53248, + "output": 4096 + }, + "cost": { + "input": 0.035, + "output": 0.035 + } + }, + "qwen3-next-80b-a3b-thinking": { + "id": "qwen3-next-80b-a3b-thinking", + "name": "Qwen3-Next 80B-A3B (Thinking)", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-10-27", - "last_updated": "2025-10-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-09", + "last_updated": "2025-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 196608, "output": 128000 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.5, + "output": 6 + } }, - "MiniMax-M2.5-highspeed": { - "id": "MiniMax-M2.5-highspeed", - "name": "MiniMax-M2.5-highspeed", - "family": "minimax", + "qwen-mt-plus": { + "id": "qwen-mt-plus", + "name": "Qwen-MT Plus", + "family": "qwen", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "release_date": "2026-02-13", - "last_updated": "2026-02-13", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 204800, "output": 131072 } + "knowledge": "2024-04", + "release_date": "2025-01", + "last_updated": "2025-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 16384, + "output": 8192 + }, + "cost": { + "input": 2.46, + "output": 7.37 + } }, - "MiniMax-M2.7-highspeed": { - "id": "MiniMax-M2.7-highspeed", - "name": "MiniMax-M2.7-highspeed", - "family": "minimax", + "qwen-vl-max": { + "id": "qwen-vl-max", + "name": "Qwen-VL Max", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 204800, "output": 131072 } - } - } - }, - "cloudflare-ai-gateway": { - "id": "cloudflare-ai-gateway", - "env": ["CLOUDFLARE_API_TOKEN", "CLOUDFLARE_ACCOUNT_ID", "CLOUDFLARE_GATEWAY_ID"], - "npm": "ai-gateway-provider", - "name": "Cloudflare AI Gateway", - "doc": "https://developers.cloudflare.com/ai-gateway/", - "models": { - "openai/gpt-5.2-codex": { - "id": "openai/gpt-5.2-codex", - "name": "GPT-5.2 Codex", - "family": "gpt-codex", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2024-04-08", + "last_updated": "2025-08-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 }, - "provider": { "npm": "ai-gateway-provider" } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.8, + "output": 3.2 + } }, - "openai/o3-mini": { - "id": "openai/o3-mini", - "name": "o3-mini", - "family": "o-mini", + "qwen3-coder-flash": { + "id": "qwen3-coder-flash", + "name": "Qwen3 Coder Flash", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-05", - "release_date": "2024-12-20", - "last_updated": "2025-01-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.55 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 1.5 + } }, - "openai/gpt-4-turbo": { - "id": "openai/gpt-4-turbo", - "name": "GPT-4 Turbo", - "family": "gpt", - "attachment": true, + "qwen2-5-7b-instruct": { + "id": "qwen2-5-7b-instruct", + "name": "Qwen2.5 7B Instruct", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": false, "temperature": true, - "knowledge": "2023-12", - "release_date": "2023-11-06", - "last_updated": "2024-04-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 10, "output": 30 }, - "limit": { "context": 128000, "output": 4096 } + "knowledge": "2024-04", + "release_date": "2024-09", + "last_updated": "2024-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.175, + "output": 0.7 + } }, - "openai/gpt-4o": { - "id": "openai/gpt-4o", - "name": "GPT-4o", - "family": "gpt", - "attachment": true, + "qwen2-5-14b-instruct": { + "id": "qwen2-5-14b-instruct", + "name": "Qwen2.5 14B Instruct", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2023-09", - "release_date": "2024-05-13", - "last_updated": "2024-08-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.5, "output": 10, "cache_read": 1.25 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2024-04", + "release_date": "2024-09", + "last_updated": "2024-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.35, + "output": 1.4 + } }, - "openai/gpt-5.3-codex": { - "id": "openai/gpt-5.3-codex", - "name": "GPT-5.3 Codex", - "family": "gpt-codex", - "attachment": true, - "reasoning": true, + "qwen2-5-32b-instruct": { + "id": "qwen2-5-32b-instruct", + "name": "Qwen2.5 32B Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 }, - "provider": { "npm": "ai-gateway-provider" } + "temperature": true, + "knowledge": "2024-04", + "release_date": "2024-09", + "last_updated": "2024-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.7, + "output": 2.8 + } }, - "openai/gpt-4o-mini": { - "id": "openai/gpt-4o-mini", - "name": "GPT-4o mini", - "family": "gpt-mini", - "attachment": true, + "qwen3-next-80b-a3b-instruct": { + "id": "qwen3-next-80b-a3b-instruct", + "name": "Qwen3-Next 80B-A3B Instruct", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2023-09", - "release_date": "2024-07-18", - "last_updated": "2024-07-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.15, "output": 0.6, "cache_read": 0.08 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2025-04", + "release_date": "2025-09", + "last_updated": "2025-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.5, + "output": 2 + } }, - "openai/gpt-3.5-turbo": { - "id": "openai/gpt-3.5-turbo", - "name": "GPT-3.5-turbo", - "family": "gpt", + "qwen-plus-character-ja": { + "id": "qwen-plus-character-ja", + "name": "Qwen Plus Character (Japanese)", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, + "tool_call": true, "temperature": true, - "knowledge": "2021-09-01", - "release_date": "2023-03-01", - "last_updated": "2023-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2024-01", + "last_updated": "2024-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 1.5, "cache_read": 1.25 }, - "limit": { "context": 16385, "output": 4096 } + "limit": { + "context": 8192, + "output": 512 + }, + "cost": { + "input": 0.5, + "output": 1.4 + } }, - "openai/gpt-5.4": { - "id": "openai/gpt-5.4", - "name": "GPT-5.4", - "family": "gpt", - "attachment": true, - "reasoning": true, + "qwen3-omni-flash-realtime": { + "id": "qwen3-omni-flash-realtime", + "name": "Qwen3-Omni Flash Realtime", + "family": "qwen", + "attachment": false, + "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-05", - "last_updated": "2026-03-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-09-15", + "last_updated": "2025-09-15", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text", "audio"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 15, "cache_read": 0.25 }, - "limit": { "context": 1050000, "input": 922000, "output": 128000 }, - "provider": { "npm": "ai-gateway-provider" } + "limit": { + "context": 65536, + "output": 16384 + }, + "cost": { + "input": 0.52, + "output": 1.99, + "input_audio": 4.57, + "output_audio": 18.13 + } }, - "openai/o1": { - "id": "openai/o1", - "name": "o1", - "family": "o", - "attachment": true, + "qwen3-vl-30b-a3b": { + "id": "qwen3-vl-30b-a3b", + "name": "Qwen3-VL 30B-A3B", + "family": "qwen", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2023-09", - "release_date": "2024-12-05", - "last_updated": "2024-12-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 15, "output": 60, "cache_read": 7.5 }, - "limit": { "context": 200000, "output": 100000 } + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.2, + "output": 0.8, + "reasoning": 2.4 + } }, - "openai/o3": { - "id": "openai/o3", - "name": "o3", - "family": "o", - "attachment": true, + "qwen3-vl-plus": { + "id": "qwen3-vl-plus", + "name": "Qwen3-VL Plus", + "family": "qwen", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-05", - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-09-23", + "last_updated": "2025-09-23", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8, "cache_read": 0.5 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0.2, + "output": 1.6, + "reasoning": 4.8 + } }, - "openai/gpt-4": { - "id": "openai/gpt-4", - "name": "GPT-4", - "family": "gpt", - "attachment": true, + "qwen3-coder-480b-a35b-instruct": { + "id": "qwen3-coder-480b-a35b-instruct", + "name": "Qwen3-Coder 480B-A35B Instruct", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": false, "temperature": true, - "knowledge": "2023-11", - "release_date": "2023-11-06", - "last_updated": "2024-04-09", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 30, "output": 60 }, - "limit": { "context": 8192, "output": 8192 } + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 1.5, + "output": 7.5 + } }, - "openai/gpt-5.2": { - "id": "openai/gpt-5.2", - "name": "GPT-5.2", - "family": "gpt", - "attachment": true, - "reasoning": true, + "qwen3-coder-30b-a3b-instruct": { + "id": "qwen3-coder-30b-a3b-instruct", + "name": "Qwen3-Coder 30B-A3B Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, "tool_call": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "output": 128000 } + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.45, + "output": 2.25 + } }, - "openai/gpt-5.1": { - "id": "openai/gpt-5.1", - "name": "GPT-5.1", - "family": "gpt", - "attachment": true, + "qwen-turbo": { + "id": "qwen-turbo", + "name": "Qwen Turbo", + "family": "qwen", + "attachment": false, "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2024-11-01", + "last_updated": "2025-04-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.13 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 1000000, + "output": 16384 + }, + "cost": { + "input": 0.05, + "output": 0.2, + "reasoning": 0.5 + } }, - "openai/o3-pro": { - "id": "openai/o3-pro", - "name": "o3-pro", - "family": "o-pro", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-05", - "release_date": "2025-06-10", - "last_updated": "2025-06-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 20, "output": 80 }, - "limit": { "context": 200000, "output": 100000 } - }, - "openai/o4-mini": { - "id": "openai/o4-mini", - "name": "o4-mini", - "family": "o-mini", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-05", - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "qwen-mt-turbo": { + "id": "qwen-mt-turbo", + "name": "Qwen-MT Turbo", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-01", + "last_updated": "2025-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.28 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 16384, + "output": 8192 + }, + "cost": { + "input": 0.16, + "output": 0.49 + } }, - "openai/gpt-5.1-codex": { - "id": "openai/gpt-5.1-codex", - "name": "GPT-5.1 Codex", - "family": "gpt-codex", - "attachment": true, + "qwen3.6-max-preview": { + "id": "qwen3.6-max-preview", + "name": "Qwen3.6 Max Preview", + "family": "qwen", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } - }, - "anthropic/claude-3-opus": { - "id": "anthropic/claude-3-opus", - "name": "Claude Opus 3", - "family": "claude-opus", - "attachment": true, - "reasoning": false, - "tool_call": true, "temperature": true, - "knowledge": "2023-08-31", - "release_date": "2024-02-29", - "last_updated": "2024-02-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-04-20", + "last_updated": "2026-04-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 4096 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 1.3, + "output": 7.8, + "cache_read": 0.13, + "cache_write": 1.625 + } }, - "anthropic/claude-3-sonnet": { - "id": "anthropic/claude-3-sonnet", - "name": "Claude Sonnet 3", - "family": "claude-sonnet", - "attachment": true, + "qwen2-5-omni-7b": { + "id": "qwen2-5-omni-7b", + "name": "Qwen2.5-Omni 7B", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2023-08-31", - "release_date": "2024-03-04", - "last_updated": "2024-03-04", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 0.3 }, - "limit": { "context": 200000, "output": 4096 } + "knowledge": "2024-04", + "release_date": "2024-12", + "last_updated": "2024-12", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text", "audio"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 2048 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "input_audio": 6.76 + } }, - "anthropic/claude-opus-4-5": { - "id": "anthropic/claude-opus-4-5", - "name": "Claude Opus 4.5 (latest)", - "family": "claude-opus", - "attachment": true, + "qwen3.5-plus": { + "id": "qwen3.5-plus", + "name": "Qwen3.5 Plus", + "family": "qwen", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-11-24", - "last_updated": "2025-11-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-02-16", + "last_updated": "2026-02-16", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.4, + "output": 2.4, + "reasoning": 2.4 + } }, - "anthropic/claude-opus-4-6": { - "id": "anthropic/claude-opus-4-6", - "name": "Claude Opus 4.6 (latest)", - "family": "claude-opus", - "attachment": true, - "reasoning": true, + "qwen2-5-vl-72b-instruct": { + "id": "qwen2-5-vl-72b-instruct", + "name": "Qwen2.5-VL 72B Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-08-31", - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { - "input": 5, - "output": 25, - "cache_read": 0.5, - "cache_write": 6.25, - "context_over_200k": { "input": 10, "output": 37.5, "cache_read": 1, "cache_write": 12.5 } + "knowledge": "2024-04", + "release_date": "2024-09", + "last_updated": "2024-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] }, - "limit": { "context": 1000000, "output": 128000 } + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 2.8, + "output": 8.4 + } }, - "anthropic/claude-sonnet-4-6": { - "id": "anthropic/claude-sonnet-4-6", - "name": "Claude Sonnet 4.6", - "family": "claude-sonnet", - "attachment": true, + "qvq-max": { + "id": "qvq-max", + "name": "QVQ Max", + "family": "qvq", + "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": true, "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2026-02-17", - "last_updated": "2026-02-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2025-03-25", + "last_updated": "2025-03-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { - "input": 3, - "output": 15, - "cache_read": 0.3, - "cache_write": 3.75, - "context_over_200k": { "input": 6, "output": 22.5, "cache_read": 0.6, "cache_write": 7.5 } + "limit": { + "context": 131072, + "output": 8192 }, - "limit": { "context": 1000000, "output": 64000 }, - "provider": { "npm": "ai-gateway-provider" } + "cost": { + "input": 1.2, + "output": 4.8 + } }, - "anthropic/claude-opus-4-1": { - "id": "anthropic/claude-opus-4-1", - "name": "Claude Opus 4.1 (latest)", - "family": "claude-opus", - "attachment": true, + "qwen3-14b": { + "id": "qwen3-14b", + "name": "Qwen3 14B", + "family": "qwen", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.35, + "output": 1.4, + "reasoning": 4.2 + } }, - "anthropic/claude-sonnet-4": { - "id": "anthropic/claude-sonnet-4", - "name": "Claude Sonnet 4 (latest)", - "family": "claude-sonnet", + "qwen3.5-35b-a3b": { + "id": "qwen3.5-35b-a3b", + "name": "Qwen3.5 35B-A3B", + "family": "qwen", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2026-02-23", + "last_updated": "2026-02-23", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.25, + "output": 2 + } + } + } + }, + "scaleway": { + "id": "scaleway", + "env": ["SCALEWAY_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.scaleway.ai/v1", + "name": "Scaleway", + "doc": "https://www.scaleway.com/en/docs/generative-apis/", + "models": { + "qwen3-embedding-8b": { + "id": "qwen3-embedding-8b", + "name": "Qwen3 Embedding 8B", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-25-11", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 32768, + "output": 4096 + }, + "cost": { + "input": 0.1, + "output": 0 + } }, - "anthropic/claude-3.5-haiku": { - "id": "anthropic/claude-3.5-haiku", - "name": "Claude Haiku 3.5 (latest)", - "family": "claude-haiku", + "qwen3-235b-a22b-instruct-2507": { + "id": "qwen3-235b-a22b-instruct-2507", + "name": "Qwen3 235B A22B Instruct 2507", + "family": "qwen", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-07-31", - "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.8, "output": 4, "cache_read": 0.08, "cache_write": 1 }, - "limit": { "context": 200000, "output": 8192 } + "release_date": "2025-07-01", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 260000, + "output": 16384 + }, + "cost": { + "input": 0.75, + "output": 2.25 + } }, - "anthropic/claude-3-5-haiku": { - "id": "anthropic/claude-3-5-haiku", - "name": "Claude Haiku 3.5 (latest)", - "family": "claude-haiku", + "llama-3.3-70b-instruct": { + "id": "llama-3.3-70b-instruct", + "name": "Llama-3.3-70B-Instruct", + "family": "llama", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-07-31", - "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.8, "output": 4, "cache_read": 0.08, "cache_write": 1 }, - "limit": { "context": 200000, "output": 8192 } + "knowledge": "2023-12", + "release_date": "2024-12-06", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 100000, + "output": 16384 + }, + "cost": { + "input": 0.9, + "output": 0.9 + } }, - "anthropic/claude-sonnet-4-5": { - "id": "anthropic/claude-sonnet-4-5", - "name": "Claude Sonnet 4.5 (latest)", - "family": "claude-sonnet", - "attachment": true, + "qwen3.5-397b-a17b": { + "id": "qwen3.5-397b-a17b", + "name": "Qwen3.5 397B A17B", + "family": "qwen", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "knowledge": "2025-04", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 16384 + }, + "cost": { + "input": 0.6, + "output": 3.6 + } }, - "anthropic/claude-3.5-sonnet": { - "id": "anthropic/claude-3.5-sonnet", - "name": "Claude Sonnet 3.5 v2", - "family": "claude-sonnet", - "attachment": true, + "devstral-2-123b-instruct-2512": { + "id": "devstral-2-123b-instruct-2512", + "name": "Devstral 2 123B Instruct (2512)", + "family": "devstral", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-04-30", - "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 8192 } + "release_date": "2026-01-07", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 16384 + }, + "cost": { + "input": 0.4, + "output": 2 + } }, - "anthropic/claude-3-haiku": { - "id": "anthropic/claude-3-haiku", - "name": "Claude Haiku 3", - "family": "claude-haiku", + "deepseek-r1-distill-llama-70b": { + "id": "deepseek-r1-distill-llama-70b", + "name": "DeepSeek R1 Distill Llama 70B", + "family": "deepseek-thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-01-20", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32000, + "output": 8196 + }, + "cost": { + "input": 0.9, + "output": 0.9 + } + }, + "pixtral-12b-2409": { + "id": "pixtral-12b-2409", + "name": "Pixtral 12B 2409", + "family": "pixtral", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2023-08-31", - "release_date": "2024-03-13", - "last_updated": "2024-03-13", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 1.25, "cache_read": 0.03, "cache_write": 0.3 }, - "limit": { "context": 200000, "output": 4096 } + "release_date": "2024-09-25", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.2, + "output": 0.2 + } }, - "anthropic/claude-haiku-4-5": { - "id": "anthropic/claude-haiku-4-5", - "name": "Claude Haiku 4.5 (latest)", - "family": "claude-haiku", + "whisper-large-v3": { + "id": "whisper-large-v3", + "name": "Whisper Large v3", + "family": "whisper", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "knowledge": "2023-09", + "release_date": "2023-09-01", + "last_updated": "2026-03-17", + "modalities": { + "input": ["audio"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 0, + "output": 8192 + }, + "cost": { + "input": 0.003, + "output": 0 + } + }, + "voxtral-small-24b-2507": { + "id": "voxtral-small-24b-2507", + "name": "Voxtral Small 24B 2507", + "family": "voxtral", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-02-28", - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.1, "cache_write": 1.25 }, - "limit": { "context": 200000, "output": 64000 } + "release_date": "2025-07-01", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "audio"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32000, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.35 + } }, - "anthropic/claude-opus-4": { - "id": "anthropic/claude-opus-4", - "name": "Claude Opus 4 (latest)", - "family": "claude-opus", + "gemma-3-27b-it": { + "id": "gemma-3-27b-it", + "name": "Gemma-3-27B-IT", + "family": "gemma", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2024-12-01", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 40000, + "output": 8192 + }, + "cost": { + "input": 0.25, + "output": 0.5 + } }, - "workers-ai/@cf/openai/gpt-oss-120b": { - "id": "workers-ai/@cf/openai/gpt-oss-120b", - "name": "GPT OSS 120B", + "bge-multilingual-gemma2": { + "id": "bge-multilingual-gemma2", + "name": "BGE Multilingual Gemma2", + "family": "gemma", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2024-07-26", + "last_updated": "2025-06-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.35, "output": 0.75 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 8191, + "output": 3072 + }, + "cost": { + "input": 0.1, + "output": 0 + } }, - "workers-ai/@cf/openai/gpt-oss-20b": { - "id": "workers-ai/@cf/openai/gpt-oss-20b", - "name": "GPT OSS 20B", + "qwen3-coder-30b-a3b-instruct": { + "id": "qwen3-coder-30b-a3b-instruct", + "name": "Qwen3-Coder 30B-A3B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.3 }, - "limit": { "context": 128000, "output": 16384 } - }, - "workers-ai/@cf/zai-org/glm-4.7-flash": { - "id": "workers-ai/@cf/zai-org/glm-4.7-flash", - "name": "GLM-4.7-Flash", - "family": "glm-flash", - "attachment": false, - "reasoning": true, "tool_call": true, "temperature": true, "knowledge": "2025-04", - "release_date": "2026-01-19", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-04", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.06, "output": 0.4 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.2, + "output": 0.8 + } }, - "workers-ai/@cf/nvidia/nemotron-3-120b-a12b": { - "id": "workers-ai/@cf/nvidia/nemotron-3-120b-a12b", - "name": "Nemotron 3 Super 120B", - "family": "nemotron", + "mistral-small-3.2-24b-instruct-2506": { + "id": "mistral-small-3.2-24b-instruct-2506", + "name": "Mistral Small 3.2 24B Instruct (2506)", + "family": "mistral-small", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "release_date": "2026-03-11", - "last_updated": "2026-03-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-06-20", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.5, "output": 1.5 }, - "limit": { "context": 256000, "output": 256000 } + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.15, + "output": 0.35 + } }, - "workers-ai/@cf/myshell-ai/melotts": { - "id": "workers-ai/@cf/myshell-ai/melotts", - "name": "MyShell MeloTTS", - "family": "melotts", - "attachment": false, + "gpt-oss-120b": { + "id": "gpt-oss-120b", + "name": "GPT-OSS 120B", + "family": "gpt-oss", + "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "release_date": "2024-01-01", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "workers-ai/@cf/google/gemma-3-12b-it": { - "id": "workers-ai/@cf/google/gemma-3-12b-it", - "name": "Gemma 3 12B IT", - "family": "gemma", - "attachment": false, + "mistral-nemo-instruct-2407": { + "id": "mistral-nemo-instruct-2407", + "name": "Mistral Nemo Instruct 2407", + "family": "mistral-nemo", + "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "release_date": "2025-04-11", - "last_updated": "2025-04-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.35, "output": 0.56 }, - "limit": { "context": 128000, "output": 16384 } + "release_date": "2024-07-25", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.2, + "output": 0.2 + } }, - "workers-ai/@cf/ibm-granite/granite-4.0-h-micro": { - "id": "workers-ai/@cf/ibm-granite/granite-4.0-h-micro", - "name": "IBM Granite 4.0 H Micro", - "family": "granite", + "llama-3.1-8b-instruct": { + "id": "llama-3.1-8b-instruct", + "name": "Llama 3.1 8B Instruct", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.017, "output": 0.11 }, - "limit": { "context": 128000, "output": 16384 } - }, - "workers-ai/@cf/ai4bharat/indictrans2-en-indic-1B": { - "id": "workers-ai/@cf/ai4bharat/indictrans2-en-indic-1B", - "name": "IndicTrans2 EN-Indic 1B", - "family": "indictrans", + "knowledge": "2023-12", + "release_date": "2025-01-01", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.2, + "output": 0.2 + } + } + } + }, + "nano-gpt": { + "id": "nano-gpt", + "env": ["NANO_GPT_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://nano-gpt.com/api/v1", + "name": "NanoGPT", + "doc": "https://docs.nano-gpt.com", + "models": { + "glm-4-flash": { + "id": "glm-4-flash", + "name": "GLM-4 Flash", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2024-08-01", + "last_updated": "2024-08-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.34, "output": 0.34 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 128000, + "input": 128000, + "output": 4096 + }, + "cost": { + "input": 0.1003, + "output": 0.1003 + } }, - "workers-ai/@cf/deepseek-ai/deepseek-r1-distill-qwen-32b": { - "id": "workers-ai/@cf/deepseek-ai/deepseek-r1-distill-qwen-32b", - "name": "DeepSeek R1 Distill Qwen 32B", - "family": "deepseek-thinking", + "Meta-Llama-3-1-8B-Instruct-FP8": { + "id": "Meta-Llama-3-1-8B-Instruct-FP8", + "name": "Llama 3.1 8B (decentralized)", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 4.88 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 0.02, + "output": 0.03 + } }, - "workers-ai/@cf/qwen/qwq-32b": { - "id": "workers-ai/@cf/qwen/qwq-32b", - "name": "QwQ 32B", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-04-11", - "last_updated": "2025-04-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "claude-opus-4-thinking:32000": { + "id": "claude-opus-4-thinking:32000", + "name": "Claude 4 Opus Thinking (32K)", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.66, "output": 1 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 200000, + "input": 200000, + "output": 32000 + }, + "cost": { + "input": 14.994, + "output": 75.004 + } }, - "workers-ai/@cf/qwen/qwen3-30b-a3b-fp8": { - "id": "workers-ai/@cf/qwen/qwen3-30b-a3b-fp8", - "name": "Qwen3 30B A3B FP8", - "family": "qwen", - "attachment": false, - "reasoning": false, + "gemini-2.5-pro-preview-05-06": { + "id": "gemini-2.5-pro-preview-05-06", + "name": "Gemini 2.5 Pro Preview 0506", + "attachment": true, + "reasoning": true, "tool_call": false, - "temperature": true, - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-05-06", + "last_updated": "2025-05-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.051, "output": 0.34 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 1048756, + "input": 1048756, + "output": 65536 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "workers-ai/@cf/qwen/qwen3-embedding-0.6b": { - "id": "workers-ai/@cf/qwen/qwen3-embedding-0.6b", - "name": "Qwen3 Embedding 0.6B", - "family": "qwen", + "grok-3-mini-fast-beta": { + "id": "grok-3-mini-fast-beta", + "name": "Grok 3 Mini Fast Beta", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.012, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 131072, + "input": 131072, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 4 + } }, - "workers-ai/@cf/qwen/qwen2.5-coder-32b-instruct": { - "id": "workers-ai/@cf/qwen/qwen2.5-coder-32b-instruct", - "name": "Qwen 2.5 Coder 32B Instruct", - "family": "qwen", + "MiniMax-M2": { + "id": "MiniMax-M2", + "name": "MiniMax M2", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": false, - "temperature": true, - "release_date": "2025-04-11", - "last_updated": "2025-04-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-10-25", + "last_updated": "2025-10-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.66, "output": 1 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 200000, + "input": 200000, + "output": 131072 + }, + "cost": { + "input": 0.17, + "output": 1.53 + } }, - "workers-ai/@cf/huggingface/distilbert-sst-2-int8": { - "id": "workers-ai/@cf/huggingface/distilbert-sst-2-int8", - "name": "DistilBERT SST-2 INT8", - "family": "distilbert", + "command-a-reasoning-08-2025": { + "id": "command-a-reasoning-08-2025", + "name": "Cohere Command A (08/2025)", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-08-22", + "last_updated": "2025-08-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.026, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 256000, + "input": 256000, + "output": 8192 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "workers-ai/@cf/facebook/bart-large-cnn": { - "id": "workers-ai/@cf/facebook/bart-large-cnn", - "name": "BART Large CNN", - "family": "bart", + "brave": { + "id": "brave", + "name": "Brave (Answers)", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-04-09", - "last_updated": "2025-04-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2023-03-02", + "last_updated": "2024-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 8192, + "input": 8192, + "output": 8192 + }, + "cost": { + "input": 5, + "output": 5 + } }, - "workers-ai/@cf/baai/bge-base-en-v1.5": { - "id": "workers-ai/@cf/baai/bge-base-en-v1.5", - "name": "BGE Base EN v1.5", - "family": "bge", + "exa-research": { + "id": "exa-research", + "name": "Exa (Research)", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-06-04", + "last_updated": "2025-06-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.067, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 8192, + "input": 8192, + "output": 8192 + }, + "cost": { + "input": 2.5, + "output": 2.5 + } }, - "workers-ai/@cf/baai/bge-small-en-v1.5": { - "id": "workers-ai/@cf/baai/bge-small-en-v1.5", - "name": "BGE Small EN v1.5", - "family": "bge", + "Llama-3.3-70B-Nova": { + "id": "Llama-3.3-70B-Nova", + "name": "Llama 3.3 70B Nova", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.02, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "workers-ai/@cf/baai/bge-large-en-v1.5": { - "id": "workers-ai/@cf/baai/bge-large-en-v1.5", - "name": "BGE Large EN v1.5", - "family": "bge", - "attachment": false, + "gemini-exp-1206": { + "id": "gemini-exp-1206", + "name": "Gemini 2.0 Pro 1206", + "attachment": true, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 2097152, + "input": 2097152, + "output": 8192 + }, + "cost": { + "input": 1.258, + "output": 4.998 + } }, - "workers-ai/@cf/baai/bge-reranker-base": { - "id": "workers-ai/@cf/baai/bge-reranker-base", - "name": "BGE Reranker Base", - "family": "bge", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-04-09", - "last_updated": "2025-04-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "claude-opus-4-5-20251101": { + "id": "claude-opus-4-5-20251101", + "name": "Claude 4.5 Opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "release_date": "2025-11-01", + "last_updated": "2025-11-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.0031, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 200000, + "input": 200000, + "output": 32000 + }, + "cost": { + "input": 4.998, + "output": 25.007 + } }, - "workers-ai/@cf/baai/bge-m3": { - "id": "workers-ai/@cf/baai/bge-m3", - "name": "BGE M3", - "family": "bge", + "auto-model-basic": { + "id": "auto-model-basic", + "name": "Auto model (Basic)", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2024-06-01", + "last_updated": "2024-06-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.012, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 1000000 + }, + "cost": { + "input": 9.996, + "output": 19.992 + } }, - "workers-ai/@cf/pipecat-ai/smart-turn-v2": { - "id": "workers-ai/@cf/pipecat-ai/smart-turn-v2", - "name": "Pipecat Smart Turn v2", - "family": "smart-turn", + "jamba-mini": { + "id": "jamba-mini", + "name": "Jamba Mini", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 256000, + "input": 256000, + "output": 4096 + }, + "cost": { + "input": 0.1989, + "output": 0.408 + } }, - "workers-ai/@cf/moonshotai/kimi-k2.5": { - "id": "workers-ai/@cf/moonshotai/kimi-k2.5", - "name": "Kimi K2.5", - "family": "kimi", + "gemini-2.5-flash-lite-preview-09-2025": { + "id": "gemini-2.5-flash-lite-preview-09-2025", + "name": "Gemini 2.5 Flash Lite Preview (09/2025)", "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 3, "cache_read": 0.1 }, - "limit": { "context": 256000, "output": 256000 } + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048756, + "input": 1048756, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4 + } }, - "workers-ai/@cf/deepgram/aura-2-en": { - "id": "workers-ai/@cf/deepgram/aura-2-en", - "name": "Deepgram Aura 2 (EN)", - "family": "aura", + "yi-large": { + "id": "yi-large", + "name": "Yi Large", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2024-05-13", + "last_updated": "2024-05-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 32000, + "input": 32000, + "output": 4096 + }, + "cost": { + "input": 3.196, + "output": 3.196 + } }, - "workers-ai/@cf/deepgram/nova-3": { - "id": "workers-ai/@cf/deepgram/nova-3", - "name": "Deepgram Nova 3", - "family": "nova", + "auto-model-premium": { + "id": "auto-model-premium", + "name": "Auto model (Premium)", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2024-06-01", + "last_updated": "2024-06-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 1000000 + }, + "cost": { + "input": 9.996, + "output": 19.992 + } }, - "workers-ai/@cf/deepgram/aura-2-es": { - "id": "workers-ai/@cf/deepgram/aura-2-es", - "name": "Deepgram Aura 2 (ES)", - "family": "aura", - "attachment": false, + "azure-gpt-4o": { + "id": "azure-gpt-4o", + "name": "Azure gpt-4o", + "attachment": true, "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "release_date": "2024-05-13", + "last_updated": "2024-05-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 2.499, + "output": 9.996 + } }, - "workers-ai/@cf/mistral/mistral-7b-instruct-v0.1": { - "id": "workers-ai/@cf/mistral/mistral-7b-instruct-v0.1", - "name": "Mistral 7B Instruct v0.1", - "family": "mistral", + "deepseek-v3-0324": { + "id": "deepseek-v3-0324", + "name": "DeepSeek Chat 0324", "attachment": false, "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "release_date": "2025-03-24", + "last_updated": "2025-03-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.11, "output": 0.19 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 128000, + "input": 128000, + "output": 8192 + }, + "cost": { + "input": 0.25, + "output": 0.7 + } }, - "workers-ai/@cf/aisingapore/gemma-sea-lion-v4-27b-it": { - "id": "workers-ai/@cf/aisingapore/gemma-sea-lion-v4-27b-it", - "name": "Gemma SEA-LION v4 27B IT", - "family": "gemma", - "attachment": false, + "claude-3-5-haiku-20241022": { + "id": "claude-3-5-haiku-20241022", + "name": "Claude 3.5 Haiku", + "attachment": true, "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.35, "output": 0.56 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 200000, + "input": 200000, + "output": 8192 + }, + "cost": { + "input": 0.8, + "output": 4 + } }, - "workers-ai/@cf/meta/llama-3.3-70b-instruct-fp8-fast": { - "id": "workers-ai/@cf/meta/llama-3.3-70b-instruct-fp8-fast", - "name": "Llama 3.3 70B Instruct FP8 Fast", - "family": "llama", + "doubao-seed-1-8-251215": { + "id": "doubao-seed-1-8-251215", + "name": "Doubao Seed 1.8", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-12-15", + "last_updated": "2025-12-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.29, "output": 2.25 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 128000, + "input": 128000, + "output": 8192 + }, + "cost": { + "input": 0.612, + "output": 6.12 + } }, - "workers-ai/@cf/meta/llama-3-8b-instruct-awq": { - "id": "workers-ai/@cf/meta/llama-3-8b-instruct-awq", - "name": "Llama 3 8B Instruct AWQ", - "family": "llama", + "doubao-seed-1-6-250615": { + "id": "doubao-seed-1-6-250615", + "name": "Doubao Seed 1.6", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-06-15", + "last_updated": "2025-06-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.12, "output": 0.27 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 256000, + "input": 256000, + "output": 16384 + }, + "cost": { + "input": 0.204, + "output": 0.51 + } }, - "workers-ai/@cf/meta/llama-3.2-1b-instruct": { - "id": "workers-ai/@cf/meta/llama-3.2-1b-instruct", - "name": "Llama 3.2 1B Instruct", - "family": "llama", - "attachment": false, + "ernie-x1.1-preview": { + "id": "ernie-x1.1-preview", + "name": "ERNIE X1.1", + "attachment": true, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-09-10", + "last_updated": "2025-09-10", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.027, "output": 0.2 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 64000, + "input": 64000, + "output": 8192 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "workers-ai/@cf/meta/m2m100-1.2b": { - "id": "workers-ai/@cf/meta/m2m100-1.2b", - "name": "M2M100 1.2B", - "family": "m2m", - "attachment": false, - "reasoning": false, + "ernie-5.0-thinking-preview": { + "id": "ernie-5.0-thinking-preview", + "name": "Ernie 5.0 Thinking Preview", + "attachment": true, + "reasoning": true, "tool_call": false, - "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-11-18", + "last_updated": "2025-11-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.34, "output": 0.34 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 1.1, + "output": 2 + } }, - "workers-ai/@cf/meta/llama-3.1-8b-instruct": { - "id": "workers-ai/@cf/meta/llama-3.1-8b-instruct", - "name": "Llama 3.1 8B Instruct", - "family": "llama", + "glm-4-air-0111": { + "id": "glm-4-air-0111", + "name": "GLM 4 Air 0111", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-01-11", + "last_updated": "2025-01-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.28, "output": 0.8299999999999998 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 128000, + "input": 128000, + "output": 4096 + }, + "cost": { + "input": 0.1394, + "output": 0.1394 + } }, - "workers-ai/@cf/meta/llama-4-scout-17b-16e-instruct": { - "id": "workers-ai/@cf/meta/llama-4-scout-17b-16e-instruct", - "name": "Llama 4 Scout 17B 16E Instruct", - "family": "llama", + "fastgpt": { + "id": "fastgpt", + "name": "Web Answer", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2023-08-01", + "last_updated": "2024-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.27, "output": 0.85 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 32768, + "input": 32768, + "output": 32768 + }, + "cost": { + "input": 7.5, + "output": 7.5 + } }, - "workers-ai/@cf/meta/llama-3.2-11b-vision-instruct": { - "id": "workers-ai/@cf/meta/llama-3.2-11b-vision-instruct", - "name": "Llama 3.2 11B Vision Instruct", - "family": "llama", + "doubao-seed-1-6-thinking-250615": { + "id": "doubao-seed-1-6-thinking-250615", + "name": "Doubao Seed 1.6 Thinking", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-06-15", + "last_updated": "2025-06-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.049, "output": 0.68 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 256000, + "input": 256000, + "output": 16384 + }, + "cost": { + "input": 0.204, + "output": 2.04 + } }, - "workers-ai/@cf/meta/llama-3-8b-instruct": { - "id": "workers-ai/@cf/meta/llama-3-8b-instruct", - "name": "Llama 3 8B Instruct", - "family": "llama", - "attachment": false, + "gemini-2.0-flash-001": { + "id": "gemini-2.0-flash-001", + "name": "Gemini 2.0 Flash", + "attachment": true, "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "input": 1000000, + "output": 8192 + }, + "cost": { + "input": 0.1003, + "output": 0.408 + } + }, + "claude-opus-4-1-thinking:32000": { + "id": "claude-opus-4-1-thinking:32000", + "name": "Claude 4.1 Opus Thinking (32K)", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.28, "output": 0.83 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 200000, + "input": 200000, + "output": 32000 + }, + "cost": { + "input": 14.994, + "output": 75.004 + } }, - "workers-ai/@cf/meta/llama-guard-3-8b": { - "id": "workers-ai/@cf/meta/llama-guard-3-8b", - "name": "Llama Guard 3 8B", - "family": "llama", + "Llama-3.3-70B-RAWMAW": { + "id": "Llama-3.3-70B-RAWMAW", + "name": "Llama 3.3 70B RAWMAW", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.48, "output": 0.03 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "workers-ai/@cf/meta/llama-3.2-3b-instruct": { - "id": "workers-ai/@cf/meta/llama-3.2-3b-instruct", - "name": "Llama 3.2 3B Instruct", - "family": "llama", + "GLM-4.5-Air-Derestricted-Steam": { + "id": "GLM-4.5-Air-Derestricted-Steam", + "name": "GLM 4.5 Air Derestricted Steam", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.051, "output": 0.34 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 220600, + "input": 220600, + "output": 65536 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "workers-ai/@cf/meta/llama-3.1-8b-instruct-awq": { - "id": "workers-ai/@cf/meta/llama-3.1-8b-instruct-awq", - "name": "Llama 3.1 8B Instruct AWQ", - "family": "llama", + "claude-3-5-sonnet-20241022": { + "id": "claude-3-5-sonnet-20241022", + "name": "Claude 3.5 Sonnet", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "release_date": "2025-08-26", + "last_updated": "2025-08-26", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "input": 200000, + "output": 8192 + }, + "cost": { + "input": 2.992, + "output": 14.994 + } + }, + "yi-medium-200k": { + "id": "yi-medium-200k", + "name": "Yi Medium 200k", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2024-03-01", + "last_updated": "2024-03-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.12, "output": 0.27 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 200000, + "input": 200000, + "output": 4096 + }, + "cost": { + "input": 2.499, + "output": 2.499 + } }, - "workers-ai/@cf/meta/llama-3.1-8b-instruct-fp8": { - "id": "workers-ai/@cf/meta/llama-3.1-8b-instruct-fp8", - "name": "Llama 3.1 8B Instruct FP8", - "family": "llama", + "Gemma-3-27B-ArliAI-RPMax-v3": { + "id": "Gemma-3-27B-ArliAI-RPMax-v3", + "name": "Gemma 3 27B RPMax v3", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-07-03", + "last_updated": "2025-07-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.29 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "workers-ai/@cf/meta/llama-2-7b-chat-fp16": { - "id": "workers-ai/@cf/meta/llama-2-7b-chat-fp16", - "name": "Llama 2 7B Chat FP16", - "family": "llama", + "phi-4-mini-instruct": { + "id": "phi-4-mini-instruct", + "name": "Phi 4 Mini", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-07-26", + "last_updated": "2025-07-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.56, "output": 6.67 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 0.17, + "output": 0.68 + } }, - "workers-ai/@cf/pfnet/plamo-embedding-1b": { - "id": "workers-ai/@cf/pfnet/plamo-embedding-1b", - "name": "PLaMo Embedding 1B", - "family": "plamo", + "Llama-3.3+(3v3.3)-70B-TenyxChat-DaybreakStorywriter": { + "id": "Llama-3.3+(3v3.3)-70B-TenyxChat-DaybreakStorywriter", + "name": "Llama 3.3+ 70B TenyxChat DaybreakStorywriter", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.019, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "workers-ai/@cf/mistralai/mistral-small-3.1-24b-instruct": { - "id": "workers-ai/@cf/mistralai/mistral-small-3.1-24b-instruct", - "name": "Mistral Small 3.1 24B Instruct", - "family": "mistral-small", - "attachment": false, + "ernie-x1-32k": { + "id": "ernie-x1-32k", + "name": "Ernie X1 32k", + "attachment": true, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-04-11", - "last_updated": "2025-04-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-05-08", + "last_updated": "2025-05-08", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.35, "output": 0.56 }, - "limit": { "context": 128000, "output": 16384 } - } - } - }, - "wandb": { - "id": "wandb", - "env": ["WANDB_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.inference.wandb.ai/v1", - "name": "Weights & Biases", - "doc": "https://docs.wandb.ai/guides/integrations/inference/", - "models": { - "openai/gpt-oss-120b": { - "id": "openai/gpt-oss-120b", - "name": "gpt-oss-120b", - "family": "gpt-oss", - "attachment": false, + "limit": { + "context": 32000, + "input": 32000, + "output": 16384 + }, + "cost": { + "input": 0.33, + "output": 1.32 + } + }, + "deepseek-chat": { + "id": "deepseek-chat", + "name": "DeepSeek V3/Deepseek Chat", + "attachment": true, "reasoning": false, "tool_call": true, "structured_output": true, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-02-27", + "last_updated": "2025-02-27", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 128000, + "input": 128000, + "output": 8192 + }, + "cost": { + "input": 0.25, + "output": 0.7 + } }, - "openai/gpt-oss-20b": { - "id": "openai/gpt-oss-20b", - "name": "gpt-oss-20b", - "family": "gpt-oss", + "glm-z1-air": { + "id": "glm-z1-air", + "name": "GLM Z1 Air", "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-04-15", + "last_updated": "2025-04-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.05, "output": 0.2 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 32000, + "input": 32000, + "output": 16384 + }, + "cost": { + "input": 0.07, + "output": 0.07 + } }, - "microsoft/Phi-4-mini-instruct": { - "id": "microsoft/Phi-4-mini-instruct", - "name": "Phi-4-mini-instruct", - "family": "phi", - "attachment": false, + "claude-3-7-sonnet-thinking:128000": { + "id": "claude-3-7-sonnet-thinking:128000", + "name": "Claude 3.7 Sonnet Thinking (128K)", + "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-12-11", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.08, "output": 0.35 }, - "limit": { "context": 128000, "output": 128000 } + "release_date": "2025-02-24", + "last_updated": "2025-02-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "input": 200000, + "output": 64000 + }, + "cost": { + "input": 2.992, + "output": 14.994 + } }, - "zai-org/GLM-5-FP8": { - "id": "zai-org/GLM-5-FP8", - "name": "GLM 5", - "family": "glm", + "glm-4-air": { + "id": "glm-4-air", + "name": "GLM-4 Air", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-02-11", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1, "output": 3.2 }, - "limit": { "context": 200000, "output": 200000 } + "tool_call": false, + "structured_output": false, + "release_date": "2024-06-05", + "last_updated": "2024-06-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 4096 + }, + "cost": { + "input": 0.2006, + "output": 0.2006 + } }, - "nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-FP8": { - "id": "nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-FP8", - "name": "NVIDIA Nemotron 3 Super 120B", - "family": "nemotron", + "Llama-3.3-70B-MiraiFanfare": { + "id": "Llama-3.3-70B-MiraiFanfare", + "name": "Llama 3.3 70b Mirai Fanfare", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-03-11", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.8 }, - "limit": { "context": 262144, "output": 262144 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-26", + "last_updated": "2025-07-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.493, + "output": 0.493 + } }, - "OpenPipe/Qwen3-14B-Instruct": { - "id": "OpenPipe/Qwen3-14B-Instruct", - "name": "OpenPipe Qwen3 14B Instruct", - "family": "qwen", + "gemini-2.0-flash-thinking-exp-01-21": { + "id": "gemini-2.0-flash-thinking-exp-01-21", + "name": "Gemini 2.0 Flash Thinking 0121", + "attachment": true, + "reasoning": true, + "tool_call": false, + "structured_output": false, + "release_date": "2025-01-21", + "last_updated": "2025-01-21", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "input": 1000000, + "output": 8192 + }, + "cost": { + "input": 0.306, + "output": 1.003 + } + }, + "Magistral-Small-2506": { + "id": "Magistral-Small-2506", + "name": "Magistral Small 2506", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-04-29", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.05, "output": 0.22 }, - "limit": { "context": 32768, "output": 32768 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "input": 32768, + "output": 32768 + }, + "cost": { + "input": 0.4, + "output": 1.4 + } }, - "meta-llama/Llama-4-Scout-17B-16E-Instruct": { - "id": "meta-llama/Llama-4-Scout-17B-16E-Instruct", - "name": "Llama 4 Scout 17B 16E Instruct", - "family": "llama", + "doubao-1.5-pro-32k": { + "id": "doubao-1.5-pro-32k", + "name": "Doubao 1.5 Pro 32k", "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-01-31", - "last_updated": "2026-03-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.17, "output": 0.66 }, - "limit": { "context": 64000, "output": 64000 } + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-01-22", + "last_updated": "2025-01-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32000, + "input": 32000, + "output": 8192 + }, + "cost": { + "input": 0.1343, + "output": 0.3349 + } }, - "meta-llama/Llama-3.1-8B-Instruct": { - "id": "meta-llama/Llama-3.1-8B-Instruct", - "name": "Meta-Llama-3.1-8B-Instruct", - "family": "llama", + "venice-uncensored:web": { + "id": "venice-uncensored:web", + "name": "Venice Uncensored Web", "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-07-23", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.22, "output": 0.22 }, - "limit": { "context": 128000, "output": 128000 } + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-05-01", + "last_updated": "2024-05-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 80000, + "input": 80000, + "output": 16384 + }, + "cost": { + "input": 0.4, + "output": 0.4 + } }, - "meta-llama/Llama-3.3-70B-Instruct": { - "id": "meta-llama/Llama-3.3-70B-Instruct", - "name": "Llama-3.3-70B-Instruct", - "family": "llama", + "glm-4": { + "id": "glm-4", + "name": "GLM-4", "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-12-06", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.71, "output": 0.71 }, - "limit": { "context": 128000, "output": 128000 } + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-01-16", + "last_updated": "2024-01-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 4096 + }, + "cost": { + "input": 14.994, + "output": 14.994 + } }, - "meta-llama/Llama-3.1-70B-Instruct": { - "id": "meta-llama/Llama-3.1-70B-Instruct", - "name": "Llama 3.1 70B", - "family": "llama", + "qwen-max": { + "id": "qwen-max", + "name": "Qwen 2.5 Max", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2024-07-23", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.8, "output": 0.8 }, - "limit": { "context": 128000, "output": 128000 } + "tool_call": false, + "structured_output": false, + "release_date": "2024-04-03", + "last_updated": "2024-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32000, + "input": 32000, + "output": 8192 + }, + "cost": { + "input": 1.5997, + "output": 6.392 + } }, - "MiniMaxAI/MiniMax-M2.5": { - "id": "MiniMaxAI/MiniMax-M2.5", - "name": "MiniMax M2.5", - "family": "minimax", - "attachment": false, + "qwen3-vl-235b-a22b-instruct-original": { + "id": "qwen3-vl-235b-a22b-instruct-original", + "name": "Qwen3 VL 235B A22B Instruct Original", + "attachment": true, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 196608, "output": 196608 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "input": 32768, + "output": 32768 + }, + "cost": { + "input": 0.5, + "output": 1.2 + } }, - "deepseek-ai/DeepSeek-V3.1": { - "id": "deepseek-ai/DeepSeek-V3.1", - "name": "DeepSeek V3.1", - "family": "deepseek", + "jamba-large-1.6": { + "id": "jamba-large-1.6", + "name": "Jamba Large 1.6", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-08-21", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.55, "output": 1.65 }, - "limit": { "context": 161000, "output": 161000 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-03-12", + "last_updated": "2025-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "input": 256000, + "output": 4096 + }, + "cost": { + "input": 1.989, + "output": 7.99 + } }, - "Qwen/Qwen3-235B-A22B-Thinking-2507": { - "id": "Qwen/Qwen3-235B-A22B-Thinking-2507", - "name": "Qwen3-235B-A22B-Thinking-2507", - "family": "qwen", + "qwen-plus": { + "id": "qwen-plus", + "name": "Qwen Plus", "attachment": false, "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-25", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.1 }, - "limit": { "context": 262144, "output": 262144 } + "tool_call": false, + "structured_output": false, + "release_date": "2024-01-25", + "last_updated": "2024-01-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 995904, + "input": 995904, + "output": 32768 + }, + "cost": { + "input": 0.3995, + "output": 1.2002 + } }, - "Qwen/Qwen3-Coder-480B-A35B-Instruct": { - "id": "Qwen/Qwen3-Coder-480B-A35B-Instruct", - "name": "Qwen3-Coder-480B-A35B-Instruct", - "family": "qwen", - "attachment": false, + "qwen25-vl-72b-instruct": { + "id": "qwen25-vl-72b-instruct", + "name": "Qwen25 VL 72b", + "attachment": true, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-23", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1, "output": 1.5 }, - "limit": { "context": 262144, "output": 262144 } - }, - "Qwen/Qwen3-30B-A3B-Instruct-2507": { - "id": "Qwen/Qwen3-30B-A3B-Instruct-2507", - "name": "Qwen3 30B A3B Instruct 2507", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-07-29", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 262144, "output": 262144 } - }, - "Qwen/Qwen3-235B-A22B-Instruct-2507": { - "id": "Qwen/Qwen3-235B-A22B-Instruct-2507", - "name": "Qwen3 235B A22B Instruct 2507", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04-28", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.1 }, - "limit": { "context": 262144, "output": 262144 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-05-10", + "last_updated": "2025-05-10", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32000, + "input": 32000, + "output": 32768 + }, + "cost": { + "input": 0.69989, + "output": 0.69989 + } }, - "moonshotai/Kimi-K2.5": { - "id": "moonshotai/Kimi-K2.5", - "name": "Kimi K2.5", - "family": "kimi", + "claude-sonnet-4-thinking:64000": { + "id": "claude-sonnet-4-thinking:64000", + "name": "Claude 4 Sonnet Thinking (64K)", "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, - "temperature": true, - "release_date": "2026-01-27", - "last_updated": "2026-03-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.5, "output": 2.85 }, - "limit": { "context": 262144, "output": 262144 } - } - } - }, - "qiniu-ai": { - "id": "qiniu-ai", - "env": ["QINIU_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.qnaigc.com/v1", - "name": "Qiniu", - "doc": "https://developer.qiniu.com/aitokenapi", - "models": { - "gemini-2.5-flash-lite": { - "id": "gemini-2.5-flash-lite", - "name": "Gemini 2.5 Flash Lite", - "attachment": true, - "reasoning": false, - "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, - "open_weights": false, - "limit": { "context": 1048576, "output": 64000 } - }, - "qwen3-235b-a22b-instruct-2507": { - "id": "qwen3-235b-a22b-instruct-2507", - "name": "Qwen3 235b A22B Instruct 2507", - "attachment": false, - "reasoning": false, - "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2025-08-12", - "last_updated": "2025-08-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 262144, "output": 64000 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 64000 + }, + "cost": { + "input": 2.992, + "output": 14.994 + } }, - "claude-4.5-opus": { - "id": "claude-4.5-opus", - "name": "Claude 4.5 Opus", + "gemini-3-pro-preview": { + "id": "gemini-3-pro-preview", + "name": "Gemini 3 Pro", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2025-11-25", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-11-18", + "last_updated": "2025-11-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 200000, "output": 200000 } + "limit": { + "context": 1048756, + "input": 1048756, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12 + } }, - "doubao-1.5-vision-pro": { - "id": "doubao-1.5-vision-pro", - "name": "Doubao 1.5 Vision Pro", - "attachment": true, + "Llama-3.3+(3.1v3.3)-70B-New-Dawn-v1.1": { + "id": "Llama-3.3+(3.1v3.3)-70B-New-Dawn-v1.1", + "name": "Llama 3.3+ 70B New Dawn v1.1", + "attachment": false, "reasoning": false, "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 16000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "qwen-turbo": { - "id": "qwen-turbo", - "name": "Qwen-Turbo", + "GLM-4.5-Air-Derestricted-Iceblink-ReExtract": { + "id": "GLM-4.5-Air-Derestricted-Iceblink-ReExtract", + "name": "GLM 4.5 Air Derestricted Iceblink ReExtract", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-12", + "last_updated": "2025-12-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 1000000, "output": 4096 } + "limit": { + "context": 131072, + "input": 131072, + "output": 98304 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "deepseek-v3-0324": { - "id": "deepseek-v3-0324", - "name": "DeepSeek-V3-0324", + "universal-summarizer": { + "id": "universal-summarizer", + "name": "Universal Summarizer", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2023-05-01", + "last_updated": "2024-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 16000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 32768 + }, + "cost": { + "input": 30, + "output": 30 + } }, - "deepseek-r1": { - "id": "deepseek-r1", - "name": "DeepSeek-R1", - "attachment": false, + "claude-sonnet-4-thinking:32768": { + "id": "claude-sonnet-4-thinking:32768", + "name": "Claude 4 Sonnet Thinking (32K)", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 32000 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 64000 + }, + "cost": { + "input": 2.992, + "output": 14.994 + } }, - "qwen3-max-preview": { - "id": "qwen3-max-preview", - "name": "Qwen3 Max Preview", + "sarvan-medium": { + "id": "sarvan-medium", + "name": "Sarvam Medium", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-09-06", - "last_updated": "2025-09-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 256000, "output": 64000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 0.25, + "output": 0.75 + } }, - "claude-4.0-sonnet": { - "id": "claude-4.0-sonnet", - "name": "Claude 4.0 Sonnet", + "claude-3-7-sonnet-thinking:8192": { + "id": "claude-3-7-sonnet-thinking:8192", + "name": "Claude 3.7 Sonnet Thinking (8K)", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "limit": { "context": 200000, "output": 64000 } - }, - "doubao-1.5-pro-32k": { - "id": "doubao-1.5-pro-32k", - "name": "Doubao 1.5 Pro 32k", - "attachment": false, - "reasoning": false, - "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-02-24", + "last_updated": "2025-02-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 12000 } + "limit": { + "context": 200000, + "input": 200000, + "output": 64000 + }, + "cost": { + "input": 2.992, + "output": 14.994 + } }, - "gemini-3.0-flash-preview": { - "id": "gemini-3.0-flash-preview", - "name": "Gemini 3.0 Flash Preview", + "gemini-2.5-flash-preview-05-20": { + "id": "gemini-2.5-flash-preview-05-20", + "name": "Gemini 2.5 Flash 0520", "attachment": true, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-12-18", - "last_updated": "2025-12-18", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "release_date": "2025-05-20", + "last_updated": "2025-05-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 1000000, "output": 64000 } + "limit": { + "context": 1048000, + "input": 1048000, + "output": 65536 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "deepseek-v3": { - "id": "deepseek-v3", - "name": "DeepSeek-V3", + "GLM-4.5-Air-Derestricted-Iceblink-v2-ReExtract": { + "id": "GLM-4.5-Air-Derestricted-Iceblink-v2-ReExtract", + "name": "GLM 4.5 Air Derestricted Iceblink v2 ReExtract", "attachment": false, "reasoning": false, "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-13", - "last_updated": "2025-08-13", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-12", + "last_updated": "2025-12-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 16000 } + "limit": { + "context": 131072, + "input": 131072, + "output": 65536 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "MiniMax-M1": { - "id": "MiniMax-M1", - "name": "MiniMax M1", + "Llama-3.3-70B-Fallen-v1": { + "id": "Llama-3.3-70B-Fallen-v1", + "name": "Llama 3.3 70B Fallen v1", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 1000000, "output": 80000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "gemini-3.0-pro-image-preview": { - "id": "gemini-3.0-pro-image-preview", - "name": "Gemini 3.0 Pro Image Preview", + "qwen3-vl-235b-a22b-thinking": { + "id": "qwen3-vl-235b-a22b-thinking", + "name": "Qwen3 VL 235B A22B Thinking", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-11-20", - "last_updated": "2025-11-20", - "modalities": { "input": ["text", "image"], "output": ["text", "image"] }, + "release_date": "2025-08-26", + "last_updated": "2025-08-26", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 32768, "output": 8192 } + "limit": { + "context": 32768, + "input": 32768, + "output": 32768 + }, + "cost": { + "input": 0.5, + "output": 6 + } }, - "doubao-seed-2.0-lite": { - "id": "doubao-seed-2.0-lite", - "name": "Doubao Seed 2.0 Lite", + "claude-3-7-sonnet-thinking:32768": { + "id": "claude-3-7-sonnet-thinking:32768", + "name": "Claude 3.7 Sonnet Thinking (32K)", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2026-02-14", - "last_updated": "2026-02-14", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-07-15", + "last_updated": "2025-07-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 256000, "output": 32000 } + "limit": { + "context": 200000, + "input": 200000, + "output": 64000 + }, + "cost": { + "input": 2.992, + "output": 14.994 + } }, - "doubao-seed-2.0-mini": { - "id": "doubao-seed-2.0-mini", - "name": "Doubao Seed 2.0 Mini", + "claude-3-7-sonnet-thinking:1024": { + "id": "claude-3-7-sonnet-thinking:1024", + "name": "Claude 3.7 Sonnet Thinking (1K)", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2026-02-14", - "last_updated": "2026-02-14", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-02-24", + "last_updated": "2025-02-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 256000, "output": 32000 } + "limit": { + "context": 200000, + "input": 200000, + "output": 64000 + }, + "cost": { + "input": 2.992, + "output": 14.994 + } }, - "qwen3-30b-a3b-thinking-2507": { - "id": "qwen3-30b-a3b-thinking-2507", - "name": "Qwen3 30b A3b Thinking 2507", - "attachment": false, - "reasoning": true, + "claude-sonnet-4-5-20250929": { + "id": "claude-sonnet-4-5-20250929", + "name": "Claude Sonnet 4.5", + "attachment": true, + "reasoning": false, "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2026-02-04", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 126000, "output": 32000 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 64000 + }, + "cost": { + "input": 2.992, + "output": 14.994 + } }, - "kimi-k2": { - "id": "kimi-k2", - "name": "Kimi K2", + "Llama-3.3-70B-Vulpecula-R1": { + "id": "Llama-3.3-70B-Vulpecula-R1", + "name": "Llama 3.3 70B Vulpecula R1", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "qwen3-30b-a3b": { - "id": "qwen3-30b-a3b", - "name": "Qwen3 30B A3B", - "attachment": false, + "claude-sonnet-4-thinking:8192": { + "id": "claude-sonnet-4-thinking:8192", + "name": "Claude 4 Sonnet Thinking (8K)", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 40000, "output": 4096 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 64000 + }, + "cost": { + "input": 2.992, + "output": 14.994 + } }, - "doubao-seed-2.0-pro": { - "id": "doubao-seed-2.0-pro", - "name": "Doubao Seed 2.0 Pro", + "gemini-2.5-pro": { + "id": "gemini-2.5-pro", + "name": "Gemini 2.5 Pro", "attachment": true, "reasoning": true, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2026-02-14", - "last_updated": "2026-02-14", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2025-06-05", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 256000, "output": 128000 } + "limit": { + "context": 1048756, + "input": 1048756, + "output": 65536 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "gpt-oss-120b": { - "id": "gpt-oss-120b", - "name": "gpt-oss-120b", + "Llama-3.3-70B-Ignition-v0.1": { + "id": "Llama-3.3-70B-Ignition-v0.1", + "name": "Llama 3.3 70B Ignition v0.1", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-06", - "last_updated": "2025-08-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "gemini-2.0-flash-lite": { - "id": "gemini-2.0-flash-lite", - "name": "Gemini 2.0 Flash Lite", - "attachment": true, - "reasoning": true, - "tool_call": true, + "glm-4-plus-0111": { + "id": "glm-4-plus-0111", + "name": "GLM 4 Plus 0111", + "attachment": false, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 1048576, "output": 8192 } + "limit": { + "context": 128000, + "input": 128000, + "output": 4096 + }, + "cost": { + "input": 9.996, + "output": 9.996 + } }, - "doubao-seed-2.0-code": { - "id": "doubao-seed-2.0-code", - "name": "Doubao Seed 2.0 Code", - "attachment": true, - "reasoning": true, - "tool_call": true, + "KAT-Coder-Air-V1": { + "id": "KAT-Coder-Air-V1", + "name": "KAT Coder Air V1", + "attachment": false, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2026-02-14", - "last_updated": "2026-02-14", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2025-10-28", + "last_updated": "2025-10-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 256000, "output": 128000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 32768 + }, + "cost": { + "input": 0.1, + "output": 0.2 + } }, - "doubao-seed-1.6": { - "id": "doubao-seed-1.6", - "name": "Doubao-Seed 1.6", - "attachment": true, - "reasoning": true, - "tool_call": true, + "deepseek-r1-sambanova": { + "id": "deepseek-r1-sambanova", + "name": "DeepSeek R1 Fast", + "attachment": false, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-15", - "last_updated": "2025-08-15", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2025-02-20", + "last_updated": "2025-02-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 256000, "output": 32000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 4096 + }, + "cost": { + "input": 4.998, + "output": 6.987 + } }, - "glm-4.5": { - "id": "glm-4.5", - "name": "GLM 4.5", + "deepseek-r1": { + "id": "deepseek-r1", + "name": "DeepSeek R1", "attachment": false, "reasoning": true, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 131072, "output": 98304 } + "limit": { + "context": 128000, + "input": 128000, + "output": 8192 + }, + "cost": { + "input": 0.4, + "output": 1.7 + } }, - "qwen2.5-vl-72b-instruct": { - "id": "qwen2.5-vl-72b-instruct", - "name": "Qwen 2.5 VL 72B Instruct", - "attachment": true, - "reasoning": false, - "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, - "open_weights": false, - "limit": { "context": 128000, "output": 8192 } - }, - "claude-3.7-sonnet": { - "id": "claude-3.7-sonnet", - "name": "Claude 3.7 Sonnet", + "doubao-1-5-thinking-pro-250415": { + "id": "doubao-1-5-thinking-pro-250415", + "name": "Doubao 1.5 Thinking Pro", "attachment": true, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-04-17", + "last_updated": "2025-04-17", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 200000, "output": 128000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 0.6, + "output": 2.4 + } }, - "doubao-seed-1.6-flash": { - "id": "doubao-seed-1.6-flash", - "name": "Doubao-Seed 1.6 Flash", - "attachment": true, - "reasoning": true, - "tool_call": true, + "sonar-pro": { + "id": "sonar-pro", + "name": "Perplexity Pro", + "attachment": false, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-15", - "last_updated": "2025-08-15", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 256000, "output": 32000 } + "limit": { + "context": 200000, + "input": 200000, + "output": 128000 + }, + "cost": { + "input": 2.992, + "output": 14.994 + } }, - "gemini-3.0-pro-preview": { - "id": "gemini-3.0-pro-preview", - "name": "Gemini 3.0 Pro Preview", - "attachment": true, - "reasoning": true, - "tool_call": true, + "Gemma-3-27B-it-Abliterated": { + "id": "Gemma-3-27B-it-Abliterated", + "name": "Gemma 3 27B IT Abliterated", + "attachment": false, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-11-19", - "last_updated": "2025-11-19", - "modalities": { "input": ["text", "image", "video", "pdf", "audio"], "output": ["text"] }, + "release_date": "2025-07-03", + "last_updated": "2025-07-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 1000000, "output": 64000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 96000 + }, + "cost": { + "input": 0.42, + "output": 0.42 + } }, - "qwen3-coder-480b-a35b-instruct": { - "id": "qwen3-coder-480b-a35b-instruct", - "name": "Qwen3 Coder 480B A35B Instruct", - "attachment": false, + "deepseek-chat-cheaper": { + "id": "deepseek-chat-cheaper", + "name": "DeepSeek V3/Chat Cheaper", + "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2025-08-14", - "last_updated": "2025-08-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-04-15", + "last_updated": "2025-04-15", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 262000, "output": 4096 } + "limit": { + "context": 128000, + "input": 128000, + "output": 8192 + }, + "cost": { + "input": 0.25, + "output": 0.7 + } }, - "qwen3-next-80b-a3b-thinking": { - "id": "qwen3-next-80b-a3b-thinking", - "name": "Qwen3 Next 80B A3B Thinking", - "attachment": false, - "reasoning": true, - "tool_call": true, + "gemini-2.0-pro-exp-02-05": { + "id": "gemini-2.0-pro-exp-02-05", + "name": "Gemini 2.0 Pro 0205", + "attachment": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-09-12", - "last_updated": "2025-09-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-02-05", + "last_updated": "2025-02-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 2097152, + "input": 2097152, + "output": 8192 + }, + "cost": { + "input": 1.989, + "output": 7.956 + } }, - "gemini-2.5-pro": { - "id": "gemini-2.5-pro", - "name": "Gemini 2.5 Pro", + "azure-gpt-4o-mini": { + "id": "azure-gpt-4o-mini", + "name": "Azure gpt-4o-mini", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "video", "audio"], "output": ["text"] }, + "structured_output": true, + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 0.1496, + "output": 0.595 + } }, - "qwen-max-2025-01-25": { - "id": "qwen-max-2025-01-25", - "name": "Qwen2.5-Max-2025-01-25", + "Llama-3.3-70B-MS-Nevoria": { + "id": "Llama-3.3-70B-MS-Nevoria", + "name": "Llama 3.3 70B MS Nevoria", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "claude-4.0-opus": { - "id": "claude-4.0-opus", - "name": "Claude 4.0 Opus", + "claude-opus-4-thinking": { + "id": "claude-opus-4-thinking", + "name": "Claude 4 Opus Thinking", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-07-15", + "last_updated": "2025-07-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 200000, + "input": 200000, + "output": 32000 + }, + "cost": { + "input": 14.994, + "output": 75.004 + } }, - "gemini-2.5-flash": { - "id": "gemini-2.5-flash", - "name": "Gemini 2.5 Flash", - "attachment": true, - "reasoning": true, - "tool_call": true, + "Llama-3.3-70B-Sapphira-0.1": { + "id": "Llama-3.3-70B-Sapphira-0.1", + "name": "Llama 3.3 70B Sapphira 0.1", + "attachment": false, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 1048576, "output": 64000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "qwen3-235b-a22b-thinking-2507": { - "id": "qwen3-235b-a22b-thinking-2507", - "name": "Qwen3 235B A22B Thinking 2507", + "doubao-seed-code-preview-latest": { + "id": "doubao-seed-code-preview-latest", + "name": "Doubao Seed Code Preview", "attachment": false, "reasoning": true, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-12", - "last_updated": "2025-08-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 262144, "output": 4096 } + "limit": { + "context": 256000, + "input": 256000, + "output": 16384 + }, + "cost": { + "input": 0.1, + "output": 0.4 + } }, - "qwen-vl-max-2025-01-25": { - "id": "qwen-vl-max-2025-01-25", - "name": "Qwen VL-MAX-2025-01-25", - "attachment": true, + "qwen-3.6-plus": { + "id": "qwen-3.6-plus", + "name": "Qwen 3.6 Plus", + "family": "qwen3.6", + "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 991800, + "output": 65536 + }, + "cost": { + "input": 0.45, + "output": 2.7 + } }, - "qwen3-next-80b-a3b-instruct": { - "id": "qwen3-next-80b-a3b-instruct", - "name": "Qwen3 Next 80B A3B Instruct", + "Llama-3.3-70B-ArliAI-RPMax-v1.4": { + "id": "Llama-3.3-70B-ArliAI-RPMax-v1.4", + "name": "Llama 3.3 70B RPMax v1.4", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-09-12", - "last_updated": "2025-09-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "claude-3.5-haiku": { - "id": "claude-3.5-haiku", - "name": "Claude 3.5 Haiku", + "mistral-small-31-24b-instruct": { + "id": "mistral-small-31-24b-instruct", + "name": "Mistral Small 31 24b Instruct", "attachment": true, "reasoning": false, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-26", - "last_updated": "2025-08-26", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-04-15", + "last_updated": "2025-04-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 200000, "output": 8192 } + "limit": { + "context": 128000, + "input": 128000, + "output": 131072 + }, + "cost": { + "input": 0.1, + "output": 0.3 + } }, - "kling-v2-6": { - "id": "kling-v2-6", - "name": "Kling-V2 6", + "glm-4.1v-thinking-flashx": { + "id": "glm-4.1v-thinking-flashx", + "name": "GLM 4.1V Thinking FlashX", "attachment": true, "reasoning": false, "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2026-01-13", - "last_updated": "2026-01-13", - "modalities": { "input": ["text", "image", "video"], "output": ["video"] }, + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 99999999, "output": 99999999 } + "limit": { + "context": 64000, + "input": 64000, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 0.3 + } }, - "deepseek-v3.1": { - "id": "deepseek-v3.1", - "name": "DeepSeek-V3.1", + "hunyuan-t1-latest": { + "id": "hunyuan-t1-latest", + "name": "Hunyuan T1", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-19", - "last_updated": "2025-08-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-03-22", + "last_updated": "2025-03-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 32000 } + "limit": { + "context": 256000, + "input": 256000, + "output": 16384 + }, + "cost": { + "input": 0.17, + "output": 0.66 + } }, - "gemini-2.0-flash": { - "id": "gemini-2.0-flash", - "name": "Gemini 2.0 Flash", + "doubao-1-5-thinking-vision-pro-250428": { + "id": "doubao-1-5-thinking-vision-pro-250428", + "name": "Doubao 1.5 Thinking Vision Pro", "attachment": true, "reasoning": false, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, + "release_date": "2025-05-15", + "last_updated": "2025-05-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 1048576, "output": 8192 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 0.55, + "output": 1.43 + } }, - "doubao-seed-1.6-thinking": { - "id": "doubao-seed-1.6-thinking", - "name": "Doubao-Seed 1.6 Thinking", + "asi1-mini": { + "id": "asi1-mini", + "name": "ASI1 Mini", "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2025-08-15", - "last_updated": "2025-08-15", - "modalities": { "input": ["image", "text", "video"], "output": ["text"] }, - "open_weights": false, - "limit": { "context": 256000, "output": 32000 } - }, - "qwen3-235b-a22b": { - "id": "qwen3-235b-a22b", - "name": "Qwen 3 235B A22B", - "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-03-25", + "last_updated": "2025-03-25", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 32000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 1, + "output": 1 + } }, - "qwen3-vl-30b-a3b-thinking": { - "id": "qwen3-vl-30b-a3b-thinking", - "name": "Qwen3-Vl 30b A3b Thinking", + "ernie-5.0-thinking-latest": { + "id": "ernie-5.0-thinking-latest", + "name": "Ernie 5.0 Thinking", "attachment": true, - "reasoning": false, - "tool_call": true, + "reasoning": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2026-02-09", - "last_updated": "2026-02-09", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2025-11-18", + "last_updated": "2025-11-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 32000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 1.1, + "output": 2 + } }, - "doubao-1.5-thinking-pro": { - "id": "doubao-1.5-thinking-pro", - "name": "Doubao 1.5 Thinking Pro", + "Llama-3.3-70B-Incandescent-Malevolence": { + "id": "Llama-3.3-70B-Incandescent-Malevolence", + "name": "Llama 3.3 70B Incandescent Malevolence", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 16000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "claude-4.1-opus": { - "id": "claude-4.1-opus", - "name": "Claude 4.1 Opus", - "attachment": true, - "reasoning": true, - "tool_call": true, + "Llama-3.3-70B-Damascus-R1": { + "id": "Llama-3.3-70B-Damascus-R1", + "name": "Damascus R1", + "attachment": false, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-06", - "last_updated": "2025-08-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "glm-4.5-air": { - "id": "glm-4.5-air", - "name": "GLM 4.5 Air", + "Gemma-3-27B-Nidum-Uncensored": { + "id": "Gemma-3-27B-Nidum-Uncensored", + "name": "Gemma 3 27B Nidum Uncensored", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-08", + "last_updated": "2025-08-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 131000, "output": 4096 } + "limit": { + "context": 32768, + "input": 32768, + "output": 96000 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "qwen3.5-397b-a17b": { - "id": "qwen3.5-397b-a17b", - "name": "Qwen3.5 397B A17B", + "gemini-2.5-flash-lite-preview-09-2025-thinking": { + "id": "gemini-2.5-flash-lite-preview-09-2025-thinking", + "name": "Gemini 2.5 Flash Lite Preview (09/2025) – Thinking", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2026-02-22", - "last_updated": "2026-02-22", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 256000, "output": 64000 } + "limit": { + "context": 1048756, + "input": 1048756, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4 + } }, - "gemini-2.5-flash-image": { - "id": "gemini-2.5-flash-image", - "name": "Gemini 2.5 Flash Image", - "attachment": true, + "doubao-seed-2-0-pro-260215": { + "id": "doubao-seed-2-0-pro-260215", + "name": "Doubao Seed 2.0 Pro", + "attachment": false, "reasoning": false, "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-10-22", - "last_updated": "2025-10-22", - "modalities": { "input": ["text", "image"], "output": ["image"] }, + "release_date": "2026-02-14", + "last_updated": "2026-02-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 32768, "output": 8192 } + "limit": { + "context": 256000, + "input": 256000, + "output": 128000 + }, + "cost": { + "input": 0.782, + "output": 3.876 + } }, - "claude-4.5-sonnet": { - "id": "claude-4.5-sonnet", - "name": "Claude 4.5 Sonnet", + "gemini-3-pro-image-preview": { + "id": "gemini-3-pro-image-preview", + "name": "Gemini 3 Pro Image", "attachment": true, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-11-18", + "last_updated": "2025-11-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 1048756, + "input": 1048756, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12 + } }, - "deepseek-r1-0528": { - "id": "deepseek-r1-0528", - "name": "DeepSeek-R1-0528", + "Gemma-3-27B-CardProjector-v4": { + "id": "Gemma-3-27B-CardProjector-v4", + "name": "Gemma 3 27B CardProjector v4", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-03-10", + "last_updated": "2025-03-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 32000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "qwen3-max": { - "id": "qwen3-max", - "name": "Qwen3 Max", + "jamba-mini-1.7": { + "id": "jamba-mini-1.7", + "name": "Jamba Mini 1.7", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-09-24", - "last_updated": "2025-09-24", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 256000, + "input": 256000, + "output": 4096 + }, + "cost": { + "input": 0.1989, + "output": 0.408 + } }, - "gpt-oss-20b": { - "id": "gpt-oss-20b", - "name": "gpt-oss-20b", + "Llama-3.3-70B-Forgotten-Safeword-3.6": { + "id": "Llama-3.3-70B-Forgotten-Safeword-3.6", + "name": "Llama 3.3 70B Forgotten Safeword 3.6", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-06", - "last_updated": "2025-08-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "qwen3-32b": { - "id": "qwen3-32b", - "name": "Qwen3 32B", - "attachment": false, - "reasoning": true, - "tool_call": true, + "doubao-1-5-thinking-pro-vision-250415": { + "id": "doubao-1-5-thinking-pro-vision-250415", + "name": "Doubao 1.5 Thinking Pro Vision", + "attachment": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-04-15", + "last_updated": "2025-04-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 40000, "output": 4096 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 0.6, + "output": 2.4 + } }, - "claude-4.5-haiku": { - "id": "claude-4.5-haiku", - "name": "Claude 4.5 Haiku", + "gemini-2.5-pro-preview-06-05": { + "id": "gemini-2.5-pro-preview-06-05", + "name": "Gemini 2.5 Pro Preview 0605", "attachment": true, "reasoning": true, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-10-16", - "last_updated": "2025-10-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-06-05", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 1048756, + "input": 1048756, + "output": 65536 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "qwen2.5-vl-7b-instruct": { - "id": "qwen2.5-vl-7b-instruct", - "name": "Qwen 2.5 VL 7B Instruct", - "attachment": true, + "gemini-2.0-pro-reasoner": { + "id": "gemini-2.0-pro-reasoner", + "name": "Gemini 2.0 Pro Reasoner", + "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, + "release_date": "2025-02-05", + "last_updated": "2025-02-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 128000, + "input": 128000, + "output": 65536 + }, + "cost": { + "input": 1.292, + "output": 4.998 + } }, - "claude-3.5-sonnet": { - "id": "claude-3.5-sonnet", - "name": "Claude 3.5 Sonnet", + "doubao-seed-2-0-lite-260215": { + "id": "doubao-seed-2-0-lite-260215", + "name": "Doubao Seed 2.0 Lite", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2026-02-14", + "last_updated": "2026-02-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "input": 256000, + "output": 32000 + }, + "cost": { + "input": 0.1462, + "output": 0.8738 + } + }, + "gemini-2.5-flash-lite-preview-06-17": { + "id": "gemini-2.5-flash-lite-preview-06-17", + "name": "Gemini 2.5 Flash Lite Preview", "attachment": true, "reasoning": true, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-09-09", - "last_updated": "2025-09-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 200000, "output": 8200 } + "limit": { + "context": 1048756, + "input": 1048756, + "output": 65536 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "mimo-v2-flash": { - "id": "mimo-v2-flash", - "name": "Mimo-V2-Flash", + "sonar-deep-research": { + "id": "sonar-deep-research", + "name": "Perplexity Deep Research", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-02-25", + "last_updated": "2025-02-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 256000, "output": 256000 } + "limit": { + "context": 60000, + "input": 60000, + "output": 128000 + }, + "cost": { + "input": 3.4, + "output": 13.6 + } }, - "qwen3-30b-a3b-instruct-2507": { - "id": "qwen3-30b-a3b-instruct-2507", - "name": "Qwen3 30b A3b Instruct 2507", + "Gemma-3-27B-it": { + "id": "Gemma-3-27B-it", + "name": "Gemma 3 27B IT", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2026-02-04", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-03-10", + "last_updated": "2025-03-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 32000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "meituan/longcat-flash-lite": { - "id": "meituan/longcat-flash-lite", - "name": "Meituan/Longcat-Flash-Lite", + "Llama-3.3-70B-GeneticLemonade-Unleashed-v3": { + "id": "Llama-3.3-70B-GeneticLemonade-Unleashed-v3", + "name": "Llama 3.3 70B GeneticLemonade Unleashed v3", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2026-02-06", - "last_updated": "2026-02-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 256000, "output": 320000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "meituan/longcat-flash-chat": { - "id": "meituan/longcat-flash-chat", - "name": "Meituan/Longcat-Flash-Chat", + "Gemma-3-27B-Glitter": { + "id": "Gemma-3-27B-Glitter", + "name": "Gemma 3 27B Glitter", "attachment": false, "reasoning": false, "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-11-05", - "last_updated": "2025-11-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-03-10", + "last_updated": "2025-03-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "openai/gpt-5": { - "id": "openai/gpt-5", - "name": "OpenAI/GPT-5", + "Llama-3.3-70B-The-Omega-Directive-Unslop-v2.1": { + "id": "Llama-3.3-70B-The-Omega-Directive-Unslop-v2.1", + "name": "Llama 3.3 70B Omega Directive Unslop v2.1", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-09-19", - "last_updated": "2025-09-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "openai/gpt-5.2": { - "id": "openai/gpt-5.2", - "name": "OpenAI/GPT-5.2", - "attachment": true, - "reasoning": true, - "tool_call": true, + "qwen3-30b-a3b-instruct-2507": { + "id": "qwen3-30b-a3b-instruct-2507", + "name": "Qwen3 30B A3B Instruct 2507", + "attachment": false, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-02-20", + "last_updated": "2025-02-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 256000, + "input": 256000, + "output": 32768 + }, + "cost": { + "input": 0.2, + "output": 0.5 + } }, - "x-ai/grok-4-fast": { - "id": "x-ai/grok-4-fast", - "name": "x-AI/Grok-4-Fast", + "gemini-2.5-flash-preview-09-2025-thinking": { + "id": "gemini-2.5-flash-preview-09-2025-thinking", + "name": "Gemini 2.5 Flash Preview (09/2025) – Thinking", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2025-09-20", - "last_updated": "2025-09-20", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 2000000, "output": 2000000 } + "limit": { + "context": 1048756, + "input": 1048756, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5 + } }, - "x-ai/grok-4.1-fast": { - "id": "x-ai/grok-4.1-fast", - "name": "x-AI/Grok-4.1-Fast", - "attachment": false, + "gemini-2.5-flash": { + "id": "gemini-2.5-flash", + "name": "Gemini 2.5 Flash", + "attachment": true, "reasoning": true, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-11-20", - "last_updated": "2025-11-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-06-05", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 2000000, "output": 2000000 } + "limit": { + "context": 1048756, + "input": 1048756, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5 + } }, - "x-ai/grok-4-fast-non-reasoning": { - "id": "x-ai/grok-4-fast-non-reasoning", - "name": "X-Ai/Grok-4-Fast-Non-Reasoning", + "deepclaude": { + "id": "deepclaude", + "name": "DeepClaude", "attachment": true, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-12-18", - "last_updated": "2025-12-18", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, + "release_date": "2025-02-01", + "last_updated": "2025-02-01", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 2000000, "output": 2000000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15 + } }, - "x-ai/grok-code-fast-1": { - "id": "x-ai/grok-code-fast-1", - "name": "x-AI/Grok-Code-Fast 1", + "ernie-4.5-8k-preview": { + "id": "ernie-4.5-8k-preview", + "name": "Ernie 4.5 8k Preview", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-09-02", - "last_updated": "2025-09-02", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-03-25", + "last_updated": "2025-03-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 256000, "output": 10000 } + "limit": { + "context": 8000, + "input": 8000, + "output": 16384 + }, + "cost": { + "input": 0.66, + "output": 2.6 + } }, - "x-ai/grok-4.1-fast-non-reasoning": { - "id": "x-ai/grok-4.1-fast-non-reasoning", - "name": "X-Ai/Grok 4.1 Fast Non Reasoning", - "attachment": true, - "reasoning": true, - "tool_call": true, + "doubao-seed-2-0-mini-260215": { + "id": "doubao-seed-2-0-mini-260215", + "name": "Doubao Seed 2.0 Mini", + "attachment": false, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-12-19", - "last_updated": "2025-12-19", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, + "release_date": "2026-02-14", + "last_updated": "2026-02-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 2000000, "output": 2000000 } + "limit": { + "context": 256000, + "input": 256000, + "output": 32000 + }, + "cost": { + "input": 0.0493, + "output": 0.4845 + } }, - "x-ai/grok-4.1-fast-reasoning": { - "id": "x-ai/grok-4.1-fast-reasoning", - "name": "X-Ai/Grok 4.1 Fast Reasoning", + "gemini-3-pro-preview-thinking": { + "id": "gemini-3-pro-preview-thinking", + "name": "Gemini 3 Pro Thinking", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2025-12-19", - "last_updated": "2025-12-19", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-11-18", + "last_updated": "2025-11-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 20000000, "output": 2000000 } + "limit": { + "context": 1048756, + "input": 1048756, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12 + } }, - "x-ai/grok-4-fast-reasoning": { - "id": "x-ai/grok-4-fast-reasoning", - "name": "X-Ai/Grok-4-Fast-Reasoning", - "attachment": true, - "reasoning": true, - "tool_call": true, + "Llama-3.3-70B-GeneticLemonade-Opus": { + "id": "Llama-3.3-70B-GeneticLemonade-Opus", + "name": "Llama 3.3 70B GeneticLemonade Opus", + "attachment": false, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-12-18", - "last_updated": "2025-12-18", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 2000000, "output": 2000000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "deepseek/deepseek-v3.1-terminus-thinking": { - "id": "deepseek/deepseek-v3.1-terminus-thinking", - "name": "DeepSeek/DeepSeek-V3.1-Terminus-Thinking", + "v0-1.5-lg": { + "id": "v0-1.5-lg", + "name": "v0 1.5 LG", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-09-22", - "last_updated": "2025-09-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-07-04", + "last_updated": "2025-07-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 32000 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 64000 + }, + "cost": { + "input": 15, + "output": 75 + } }, - "deepseek/deepseek-v3.1-terminus": { - "id": "deepseek/deepseek-v3.1-terminus", - "name": "DeepSeek/DeepSeek-V3.1-Terminus", - "attachment": false, + "ernie-4.5-turbo-128k": { + "id": "ernie-4.5-turbo-128k", + "name": "Ernie 4.5 Turbo 128k", + "attachment": true, "reasoning": false, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-09-22", - "last_updated": "2025-09-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-05-08", + "last_updated": "2025-05-08", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 32000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 0.132, + "output": 0.55 + } }, - "deepseek/deepseek-v3.2-exp-thinking": { - "id": "deepseek/deepseek-v3.2-exp-thinking", - "name": "DeepSeek/DeepSeek-V3.2-Exp-Thinking", + "KAT-Coder-Pro-V1": { + "id": "KAT-Coder-Pro-V1", + "name": "KAT Coder Pro V1", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-10-28", + "last_updated": "2025-10-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 32000 } + "limit": { + "context": 256000, + "input": 256000, + "output": 32768 + }, + "cost": { + "input": 1.5, + "output": 6 + } }, - "deepseek/deepseek-v3.2-exp": { - "id": "deepseek/deepseek-v3.2-exp", - "name": "DeepSeek/DeepSeek-V3.2-Exp", - "attachment": false, + "claude-3-5-sonnet-20240620": { + "id": "claude-3-5-sonnet-20240620", + "name": "Claude 3.5 Sonnet Old", + "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "release_date": "2024-06-20", + "last_updated": "2024-06-20", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 32000 } + "limit": { + "context": 200000, + "input": 200000, + "output": 8192 + }, + "cost": { + "input": 2.992, + "output": 14.994 + } }, - "deepseek/deepseek-math-v2": { - "id": "deepseek/deepseek-math-v2", - "name": "Deepseek/Deepseek-Math-V2", - "attachment": false, + "claude-opus-4-1-thinking:8192": { + "id": "claude-opus-4-1-thinking:8192", + "name": "Claude 4.1 Opus Thinking (8K)", + "attachment": true, "reasoning": true, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2025-12-04", - "last_updated": "2025-12-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 160000, "output": 160000 } + "limit": { + "context": 200000, + "input": 200000, + "output": 32000 + }, + "cost": { + "input": 14.994, + "output": 75.004 + } }, - "deepseek/deepseek-v3.2-251201": { - "id": "deepseek/deepseek-v3.2-251201", - "name": "Deepseek/DeepSeek-V3.2", + "gemini-2.0-flash-exp-image-generation": { + "id": "gemini-2.0-flash-exp-image-generation", + "name": "Gemini Text + Image", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 32000 } + "limit": { + "context": 32767, + "input": 32767, + "output": 8192 + }, + "cost": { + "input": 0.2, + "output": 0.8 + } }, - "z-ai/glm-4.6": { - "id": "z-ai/glm-4.6", - "name": "Z-AI/GLM 4.6", + "Llama-3.3-70B-Magnum-v4-SE": { + "id": "Llama-3.3-70B-Magnum-v4-SE", + "name": "Llama 3.3 70B Magnum v4 SE", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-10-11", - "last_updated": "2025-10-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 200000, "output": 200000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "z-ai/glm-5": { - "id": "z-ai/glm-5", - "name": "Z-Ai/GLM 5", + "glm-zero-preview": { + "id": "glm-zero-preview", + "name": "GLM Zero Preview", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 200000, "output": 128000 } + "limit": { + "context": 8000, + "input": 8000, + "output": 4096 + }, + "cost": { + "input": 1.802, + "output": 1.802 + } }, - "z-ai/autoglm-phone-9b": { - "id": "z-ai/autoglm-phone-9b", - "name": "Z-Ai/Autoglm Phone 9b", + "study_gpt-chatgpt-4o-latest": { + "id": "study_gpt-chatgpt-4o-latest", + "name": "Study Mode", "attachment": true, "reasoning": false, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2024-05-13", + "last_updated": "2024-05-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 12800, "output": 4096 } + "limit": { + "context": 200000, + "input": 200000, + "output": 16384 + }, + "cost": { + "input": 4.998, + "output": 14.994 + } }, - "z-ai/glm-4.7": { - "id": "z-ai/glm-4.7", - "name": "Z-Ai/GLM 4.7", + "glm-4-airx": { + "id": "glm-4-airx", + "name": "GLM-4 AirX", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-06-05", + "last_updated": "2024-06-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 200000, "output": 200000 } + "limit": { + "context": 8000, + "input": 8000, + "output": 4096 + }, + "cost": { + "input": 2.006, + "output": 2.006 + } }, - "stepfun-ai/gelab-zero-4b-preview": { - "id": "stepfun-ai/gelab-zero-4b-preview", - "name": "Stepfun-Ai/Gelab Zero 4b Preview", - "attachment": true, + "step-2-mini": { + "id": "step-2-mini", + "name": "Step-2 Mini", + "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2024-07-05", + "last_updated": "2024-07-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 8192, "output": 4096 } + "limit": { + "context": 8000, + "input": 8000, + "output": 4096 + }, + "cost": { + "input": 0.2006, + "output": 0.408 + } }, - "minimax/minimax-m2": { - "id": "minimax/minimax-m2", - "name": "Minimax/Minimax-M2", - "attachment": false, + "gemini-2.5-flash-preview-04-17:thinking": { + "id": "gemini-2.5-flash-preview-04-17:thinking", + "name": "Gemini 2.5 Flash Preview Thinking", + "attachment": true, "reasoning": true, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-10-28", - "last_updated": "2025-10-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-04-17", + "last_updated": "2025-04-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 200000, "output": 128000 } + "limit": { + "context": 1048756, + "input": 1048756, + "output": 65536 + }, + "cost": { + "input": 0.15, + "output": 3.5 + } }, - "minimax/minimax-m2.1": { - "id": "minimax/minimax-m2.1", - "name": "Minimax/Minimax-M2.1", + "Llama-3.3-70B-Mokume-Gane-R1": { + "id": "Llama-3.3-70B-Mokume-Gane-R1", + "name": "Llama 3.3 70B Mokume Gane R1", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 204800, "output": 128000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "minimax/minimax-m2.5": { - "id": "minimax/minimax-m2.5", - "name": "Minimax/Minimax-M2.5", + "deepseek-reasoner": { + "id": "deepseek-reasoner", + "name": "DeepSeek Reasoner", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 204800, "output": 128000 } + "limit": { + "context": 64000, + "input": 64000, + "output": 65536 + }, + "cost": { + "input": 0.4, + "output": 1.7 + } }, - "minimax/minimax-m2.5-highspeed": { - "id": "minimax/minimax-m2.5-highspeed", - "name": "Minimax/Minimax-M2.5 Highspeed", + "glm-z1-airx": { + "id": "glm-z1-airx", + "name": "GLM Z1 AirX", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2026-02-14", - "last_updated": "2026-02-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-04-15", + "last_updated": "2025-04-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 204800, "output": 128000 } + "limit": { + "context": 32000, + "input": 32000, + "output": 16384 + }, + "cost": { + "input": 0.7, + "output": 0.7 + } }, - "xiaomi/mimo-v2-flash": { - "id": "xiaomi/mimo-v2-flash", - "name": "Xiaomi/Mimo-V2-Flash", + "jamba-mini-1.6": { + "id": "jamba-mini-1.6", + "name": "Jamba Mini 1.6", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-12-26", - "last_updated": "2025-12-26", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-03-01", + "last_updated": "2025-03-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 256000, "output": 256000 } + "limit": { + "context": 256000, + "input": 256000, + "output": 4096 + }, + "cost": { + "input": 0.1989, + "output": 0.408 + } }, - "stepfun/step-3.5-flash": { - "id": "stepfun/step-3.5-flash", - "name": "Stepfun/Step-3.5 Flash", + "claude-opus-4-1-thinking": { + "id": "claude-opus-4-1-thinking", + "name": "Claude 4.1 Opus Thinking", "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "input": 200000, + "output": 32000 + }, + "cost": { + "input": 14.994, + "output": 75.004 + } + }, + "grok-3-beta": { + "id": "grok-3-beta", + "name": "Grok 3 Beta", + "attachment": false, "reasoning": false, "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2026-02-02", - "last_updated": "2026-02-02", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 64000, "output": 4096 } + "limit": { + "context": 131072, + "input": 131072, + "output": 131072 + }, + "cost": { + "input": 3, + "output": 15 + } }, - "moonshotai/kimi-k2-thinking": { - "id": "moonshotai/kimi-k2-thinking", - "name": "Kimi K2 Thinking", + "Llama-3.3-70B-Legion-V2.1": { + "id": "Llama-3.3-70B-Legion-V2.1", + "name": "Llama 3.3 70B Legion V2.1", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2025-11-07", - "last_updated": "2025-11-07", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 256000, "output": 100000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "moonshotai/kimi-k2.5": { - "id": "moonshotai/kimi-k2.5", - "name": "Moonshotai/Kimi-K2.5", - "attachment": true, + "sonar": { + "id": "sonar", + "name": "Perplexity Simple", + "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2026-01-28", - "last_updated": "2026-01-28", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 256000, "output": 256000 } + "limit": { + "context": 127000, + "input": 127000, + "output": 128000 + }, + "cost": { + "input": 1.003, + "output": 1.003 + } }, - "moonshotai/kimi-k2-0905": { - "id": "moonshotai/kimi-k2-0905", - "name": "Kimi K2 0905", - "attachment": false, + "z-image-turbo": { + "id": "z-image-turbo", + "name": "Z Image Turbo", + "attachment": true, "reasoning": false, - "tool_call": true, + "tool_call": false, "structured_output": false, "temperature": true, - "release_date": "2025-09-08", - "last_updated": "2025-09-08", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-11-27", + "last_updated": "2025-11-27", + "modalities": { + "input": ["text"], + "output": ["image"] + }, "open_weights": false, - "limit": { "context": 256000, "output": 100000 } - } - } - }, - "morph": { - "id": "morph", - "env": ["MORPH_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.morphllm.com/v1", - "name": "Morph", - "doc": "https://docs.morphllm.com/api-reference/introduction", - "models": { - "morph-v3-large": { - "id": "morph-v3-large", - "name": "Morph v3 Large", - "family": "morph", + "limit": { + "context": 0, + "output": 0 + } + }, + "GLM-4.5-Air-Derestricted-Iceblink-v2": { + "id": "GLM-4.5-Air-Derestricted-Iceblink-v2", + "name": "GLM 4.5 Air Derestricted Iceblink v2", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": false, - "release_date": "2024-08-15", - "last_updated": "2024-08-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.9, "output": 1.9 }, - "limit": { "context": 32000, "output": 32000 } + "limit": { + "context": 158600, + "input": 158600, + "output": 65536 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "auto": { - "id": "auto", - "name": "Auto", - "family": "auto", + "jamba-large": { + "id": "jamba-large", + "name": "Jamba Large", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": false, - "release_date": "2024-06-01", - "last_updated": "2024-06-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.85, "output": 1.55 }, - "limit": { "context": 32000, "output": 32000 } + "limit": { + "context": 256000, + "input": 256000, + "output": 4096 + }, + "cost": { + "input": 1.989, + "output": 7.99 + } }, - "morph-v3-fast": { - "id": "morph-v3-fast", - "name": "Morph v3 Fast", - "family": "morph", - "attachment": false, + "claude-3-7-sonnet-reasoner": { + "id": "claude-3-7-sonnet-reasoner", + "name": "Claude 3.7 Sonnet Reasoner", + "attachment": true, "reasoning": false, "tool_call": false, - "temperature": false, - "release_date": "2024-08-15", - "last_updated": "2024-08-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-03-29", + "last_updated": "2025-03-29", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.8, "output": 1.2 }, - "limit": { "context": 16000, "output": 16000 } - } - } - }, - "dinference": { - "id": "dinference", - "env": ["DINFERENCE_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.dinference.com/v1", - "name": "DInference", - "doc": "https://dinference.com", - "models": { - "gpt-oss-120b": { - "id": "gpt-oss-120b", - "name": "GPT OSS 120B", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2025-08", - "last_updated": "2025-08", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.0675, "output": 0.27 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 128000, + "input": 128000, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15 + } }, - "glm-5": { - "id": "glm-5", - "name": "GLM-5", - "family": "glm", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-02", - "last_updated": "2026-02", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.75, "output": 2.4 }, - "limit": { "context": 200000, "output": 128000 } + "ernie-4.5-turbo-vl-32k": { + "id": "ernie-4.5-turbo-vl-32k", + "name": "Ernie 4.5 Turbo VL 32k", + "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-05-08", + "last_updated": "2025-05-08", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32000, + "input": 32000, + "output": 16384 + }, + "cost": { + "input": 0.495, + "output": 1.43 + } }, - "glm-4.7": { - "id": "glm-4.7", - "name": "GLM-4.7", - "family": "glm", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12", - "last_updated": "2025-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.45, "output": 1.65 }, - "limit": { "context": 200000, "output": 128000 } - } - } - }, - "meganova": { - "id": "meganova", - "env": ["MEGANOVA_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.meganova.ai/v1", - "name": "Meganova", - "doc": "https://docs.meganova.ai", - "models": { - "zai-org/GLM-4.7": { - "id": "zai-org/GLM-4.7", - "name": "GLM-4.7", - "family": "glm", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.8 }, - "limit": { "context": 202752, "output": 131072 } + "Mistral-Nemo-12B-Instruct-2407": { + "id": "Mistral-Nemo-12B-Instruct-2407", + "name": "Mistral Nemo 12B Instruct 2407", + "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 16384, + "input": 16384, + "output": 16384 + }, + "cost": { + "input": 0.01, + "output": 0.01 + } }, - "zai-org/GLM-5": { - "id": "zai-org/GLM-5", - "name": "GLM-5", - "family": "glm", + "doubao-seed-1-6-flash-250615": { + "id": "doubao-seed-1-6-flash-250615", + "name": "Doubao Seed 1.6 Flash", "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.8, "output": 2.56 }, - "limit": { "context": 202752, "output": 131072 } + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-06-15", + "last_updated": "2025-06-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "input": 256000, + "output": 16384 + }, + "cost": { + "input": 0.0374, + "output": 0.374 + } }, - "zai-org/GLM-4.6": { - "id": "zai-org/GLM-4.6", - "name": "GLM-4.6", - "family": "glm", + "qwq-32b": { + "id": "qwq-32b", + "name": "Qwen: QwQ 32B", "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.45, "output": 1.9 }, - "limit": { "context": 202752, "output": 131072 } + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-04-15", + "last_updated": "2025-04-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 32768 + }, + "cost": { + "input": 0.25599999, + "output": 0.30499999 + } }, - "meta-llama/Llama-3.3-70B-Instruct": { - "id": "meta-llama/Llama-3.3-70B-Instruct", - "name": "Llama 3.3 70B Instruct", - "family": "llama", + "Llama-3.3-70B-Strawberrylemonade-v1.2": { + "id": "Llama-3.3-70B-Strawberrylemonade-v1.2", + "name": "Llama 3.3 70B StrawberryLemonade v1.2", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, + "tool_call": false, + "structured_output": false, "release_date": "2024-12-06", "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 131072, "output": 16384 } + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "MiniMaxAI/MiniMax-M2.1": { - "id": "MiniMaxAI/MiniMax-M2.1", - "name": "MiniMax M2.1", - "family": "minimax", - "attachment": false, + "gemini-2.5-flash-preview-04-17": { + "id": "gemini-2.5-flash-preview-04-17", + "name": "Gemini 2.5 Flash Preview", + "attachment": true, "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.28, "output": 1.2 }, - "limit": { "context": 196608, "output": 131072 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-04-17", + "last_updated": "2025-04-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048756, + "input": 1048756, + "output": 65536 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "MiniMaxAI/MiniMax-M2.5": { - "id": "MiniMaxAI/MiniMax-M2.5", - "name": "MiniMax M2.5", - "family": "minimax", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 204800, "output": 131072 } + "ernie-x1-turbo-32k": { + "id": "ernie-x1-turbo-32k", + "name": "Ernie X1 Turbo 32k", + "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-05-08", + "last_updated": "2025-05-08", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32000, + "input": 32000, + "output": 16384 + }, + "cost": { + "input": 0.165, + "output": 0.66 + } }, - "deepseek-ai/DeepSeek-V3.1": { - "id": "deepseek-ai/DeepSeek-V3.1", - "name": "DeepSeek V3.1", - "family": "deepseek", + "deepseek-math-v2": { + "id": "deepseek-math-v2", + "name": "DeepSeek Math V2", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-08-25", - "last_updated": "2025-08-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.27, "output": 1 }, - "limit": { "context": 164000, "output": 164000 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-12-03", + "last_updated": "2025-12-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 65536 + }, + "cost": { + "input": 0.6, + "output": 2.2 + } }, - "deepseek-ai/DeepSeek-V3.2-Exp": { - "id": "deepseek-ai/DeepSeek-V3.2-Exp", - "name": "DeepSeek V3.2 Exp", - "family": "deepseek", + "Llama-3.3-70B-Electranova-v1.0": { + "id": "Llama-3.3-70B-Electranova-v1.0", + "name": "Llama 3.3 70B Electranova v1.0", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-10-10", - "last_updated": "2025-10-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.27, "output": 0.4 }, - "limit": { "context": 164000, "output": 164000 } - }, - "deepseek-ai/DeepSeek-V3-0324": { - "id": "deepseek-ai/DeepSeek-V3-0324", - "name": "DeepSeek V3 0324", - "family": "deepseek", + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } + }, + "Llama-3.3-70B-ArliAI-RPMax-v2": { + "id": "Llama-3.3-70B-ArliAI-RPMax-v2", + "name": "Llama 3.3 70B ArliAI RPMax v2", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, + "structured_output": false, + "release_date": "2025-08-08", + "last_updated": "2025-08-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } + }, + "qwen-image": { + "id": "qwen-image", + "name": "Qwen Image", + "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": false, "temperature": true, - "release_date": "2025-03-24", - "last_updated": "2025-03-24", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.25, "output": 0.88 }, - "limit": { "context": 163840, "output": 163840 } + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 0, + "output": 0 + } }, - "deepseek-ai/DeepSeek-R1-0528": { - "id": "deepseek-ai/DeepSeek-R1-0528", - "name": "DeepSeek R1 0528", - "family": "deepseek-thinking", + "Llama-3.3-70B-Cu-Mai-R1": { + "id": "Llama-3.3-70B-Cu-Mai-R1", + "name": "Llama 3.3 70B Cu Mai R1", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": false, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-05-28", - "last_updated": "2025-05-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.5, "output": 2.15 }, - "limit": { "context": 163840, "output": 64000 } + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "deepseek-ai/DeepSeek-V3.2": { - "id": "deepseek-ai/DeepSeek-V3.2", - "name": "DeepSeek V3.2", - "family": "deepseek", + "GLM-4.5-Air-Derestricted-Iceblink": { + "id": "GLM-4.5-Air-Derestricted-Iceblink", + "name": "GLM 4.5 Air Derestricted Iceblink", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-12-03", - "last_updated": "2025-12-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.26, "output": 0.38 }, - "limit": { "context": 164000, "output": 164000 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "input": 131072, + "output": 98304 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "Qwen/Qwen3.5-Plus": { - "id": "Qwen/Qwen3.5-Plus", - "name": "Qwen3.5 Plus", - "family": "qwen", + "Llama-3.3-70B-Bigger-Body": { + "id": "Llama-3.3-70B-Bigger-Body", + "name": "Llama 3.3 70B Bigger Body", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-02", - "last_updated": "2026-02", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 2.4, "reasoning": 2.4 }, - "limit": { "context": 1000000, "output": 65536 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "Qwen/Qwen2.5-VL-32B-Instruct": { - "id": "Qwen/Qwen2.5-VL-32B-Instruct", - "name": "Qwen2.5 VL 32B Instruct", - "family": "qwen", - "attachment": true, + "Llama-3.3+(3.1v3.3)-70B-Hanami-x1": { + "id": "Llama-3.3+(3.1v3.3)-70B-Hanami-x1", + "name": "Llama 3.3+ 70B Hanami x1", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-03-24", - "last_updated": "2025-03-24", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.6 }, - "limit": { "context": 16384, "output": 16384 } + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "Qwen/Qwen3-235B-A22B-Instruct-2507": { - "id": "Qwen/Qwen3-235B-A22B-Instruct-2507", - "name": "Qwen3 235B A22B Instruct 2507", - "family": "qwen", + "hunyuan-turbos-20250226": { + "id": "hunyuan-turbos-20250226", + "name": "Hunyuan Turbo S", "attachment": false, "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-02-27", + "last_updated": "2025-02-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 24000, + "input": 24000, + "output": 8192 + }, + "cost": { + "input": 0.187, + "output": 0.374 + } + }, + "gemini-2.5-flash-preview-09-2025": { + "id": "gemini-2.5-flash-preview-09-2025", + "name": "Gemini 2.5 Flash Preview (09/2025)", + "attachment": true, + "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": true, - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.09, "output": 0.6 }, - "limit": { "context": 262000, "output": 262000 } + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048756, + "input": 1048756, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5 + } }, - "moonshotai/Kimi-K2.5": { - "id": "moonshotai/Kimi-K2.5", - "name": "Kimi K2.5", - "family": "kimi", + "GLM-4.6-Derestricted-v5": { + "id": "GLM-4.6-Derestricted-v5", + "name": "GLM 4.6 Derestricted v5", "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2026-01", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.45, "output": 2.8 }, - "limit": { "context": 262144, "output": 262144 } + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "input": 131072, + "output": 8192 + }, + "cost": { + "input": 0.4, + "output": 1.5 + } }, - "moonshotai/Kimi-K2-Thinking": { - "id": "moonshotai/Kimi-K2-Thinking", - "name": "Kimi K2 Thinking", - "family": "kimi-thinking", + "glm-4-plus": { + "id": "glm-4-plus", + "name": "GLM-4 Plus", "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-11-06", - "last_updated": "2025-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.6 }, - "limit": { "context": 262144, "output": 262144 } + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-08-01", + "last_updated": "2024-08-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 4096 + }, + "cost": { + "input": 7.497, + "output": 7.497 + } }, - "XiaomiMiMo/MiMo-V2-Flash": { - "id": "XiaomiMiMo/MiMo-V2-Flash", - "name": "MiMo V2 Flash", - "family": "mimo", + "Gemma-3-27B-Big-Tiger-v3": { + "id": "Gemma-3-27B-Big-Tiger-v3", + "name": "Gemma 3 27B Big Tiger v3", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-08-08", + "last_updated": "2025-08-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } + }, + "brave-research": { + "id": "brave-research", + "name": "Brave (Research)", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2023-03-02", + "last_updated": "2024-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 16384, + "input": 16384, + "output": 16384 + }, + "cost": { + "input": 5, + "output": 5 + } + }, + "hidream": { + "id": "hidream", + "name": "Hidream", + "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": false, "temperature": true, - "knowledge": "2024-12-01", - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 262144, "output": 32000 } + "release_date": "2024-01-01", + "last_updated": "2024-01-01", + "modalities": { + "input": ["text"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 0, + "output": 0 + } }, - "mistralai/Mistral-Nemo-Instruct-2407": { - "id": "mistralai/Mistral-Nemo-Instruct-2407", - "name": "Mistral Nemo Instruct 2407", - "family": "mistral", + "qwen3-max-2026-01-23": { + "id": "qwen3-max-2026-01-23", + "name": "Qwen3 Max 2026-01-23", "attachment": false, "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2026-01-26", + "last_updated": "2026-01-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "input": 256000, + "output": 32768 + }, + "cost": { + "input": 1.2002, + "output": 6.001 + } + }, + "claude-opus-4-1-20250805": { + "id": "claude-opus-4-1-20250805", + "name": "Claude 4.1 Opus", + "attachment": true, + "reasoning": false, "tool_call": true, "structured_output": true, - "temperature": true, - "release_date": "2024-07-18", - "last_updated": "2024-07-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.02, "output": 0.04 }, - "limit": { "context": 131072, "output": 65536 } + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "input": 200000, + "output": 32000 + }, + "cost": { + "input": 14.994, + "output": 75.004 + } }, - "mistralai/Mistral-Small-3.2-24B-Instruct-2506": { - "id": "mistralai/Mistral-Small-3.2-24B-Instruct-2506", - "name": "Mistral Small 3.2 24B Instruct", - "family": "mistral-small", + "claude-haiku-4-5-20251001": { + "id": "claude-haiku-4-5-20251001", + "name": "Claude Haiku 4.5", "attachment": true, "reasoning": false, "tool_call": true, "structured_output": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-06-20", - "last_updated": "2025-06-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 32768, "output": 8192 } - } - } - }, - "zai-coding-plan": { - "id": "zai-coding-plan", - "env": ["ZHIPU_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.z.ai/api/coding/paas/v4", - "name": "Z.AI Coding Plan", - "doc": "https://docs.z.ai/devpack/overview", - "models": { - "glm-4.7-flash": { - "id": "glm-4.7-flash", - "name": "GLM-4.7-Flash", - "family": "glm-flash", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "input": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5 + } + }, + "MiniMax-M1": { + "id": "MiniMax-M1", + "name": "MiniMax M1", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-01-19", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 200000, "output": 131072 } + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-06-16", + "last_updated": "2025-06-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "input": 1000000, + "output": 131072 + }, + "cost": { + "input": 0.1394, + "output": 1.3328 + } }, - "glm-5-turbo": { - "id": "glm-5-turbo", - "name": "GLM-5-Turbo", - "family": "glm", + "gemini-2.5-flash-nothinking": { + "id": "gemini-2.5-flash-nothinking", + "name": "Gemini 2.5 Flash (No Thinking)", + "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-06-05", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048756, + "input": 1048756, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5 + } + }, + "exa-research-pro": { + "id": "exa-research-pro", + "name": "Exa (Research Pro)", "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-06-04", + "last_updated": "2025-06-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 16384, + "input": 16384, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 2.5 + } + }, + "grok-3-fast-beta": { + "id": "grok-3-fast-beta", + "name": "Grok 3 Fast Beta", + "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "input": 131072, + "output": 131072 + }, + "cost": { + "input": 5, + "output": 25 + } + }, + "claude-opus-4-5-20251101:thinking": { + "id": "claude-opus-4-5-20251101:thinking", + "name": "Claude 4.5 Opus Thinking", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, - "temperature": true, - "release_date": "2026-03-16", - "last_updated": "2026-03-16", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-11-01", + "last_updated": "2025-11-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 200000, "output": 131072 } + "limit": { + "context": 200000, + "input": 200000, + "output": 32000 + }, + "cost": { + "input": 4.998, + "output": 25.007 + } }, - "glm-4.5": { - "id": "glm-4.5", - "name": "GLM-4.5", - "family": "glm", - "attachment": false, + "gemini-2.5-pro-exp-03-25": { + "id": "gemini-2.5-pro-exp-03-25", + "name": "Gemini 2.5 Pro Experimental 0325", + "attachment": true, "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 131072, "output": 98304 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-03-25", + "last_updated": "2025-03-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048756, + "input": 1048756, + "output": 65536 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "glm-4.7-flashx": { - "id": "glm-4.7-flashx", - "name": "GLM-4.7-FlashX", - "family": "glm-flash", - "attachment": false, + "claude-3-7-sonnet-thinking": { + "id": "claude-3-7-sonnet-thinking", + "name": "Claude 3.7 Sonnet Thinking", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-01-19", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.07, "output": 0.4, "cache_read": 0.01, "cache_write": 0 }, - "limit": { "context": 200000, "output": 131072 } + "structured_output": true, + "release_date": "2025-02-24", + "last_updated": "2025-02-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "input": 200000, + "output": 16000 + }, + "cost": { + "input": 2.992, + "output": 14.994 + } }, - "glm-4.6": { - "id": "glm-4.6", - "name": "GLM-4.6", - "family": "glm", - "attachment": false, + "claude-opus-4-thinking:8192": { + "id": "claude-opus-4-thinking:8192", + "name": "Claude 4 Opus Thinking (8K)", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 204800, "output": 131072 } + "structured_output": true, + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "input": 200000, + "output": 32000 + }, + "cost": { + "input": 14.994, + "output": 75.004 + } }, - "glm-4.6v": { - "id": "glm-4.6v", - "name": "GLM-4.6V", - "family": "glm", + "claude-sonnet-4-thinking:1024": { + "id": "claude-sonnet-4-thinking:1024", + "name": "Claude 4 Sonnet Thinking (1K)", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-08", - "last_updated": "2025-12-08", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 32768 } + "structured_output": true, + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "input": 1000000, + "output": 64000 + }, + "cost": { + "input": 2.992, + "output": 14.994 + } }, - "glm-4.5-flash": { - "id": "glm-4.5-flash", - "name": "GLM-4.5-Flash", - "family": "glm-flash", + "Llama-3.3-70B-Magnum-v4-SE-Cirrus-x1-SLERP": { + "id": "Llama-3.3-70B-Magnum-v4-SE-Cirrus-x1-SLERP", + "name": "Llama 3.3 70B Magnum v4 SE Cirrus x1 SLERP", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 131072, "output": 98304 } - }, - "glm-5": { - "id": "glm-5", - "name": "GLM-5", - "family": "glm", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 204800, "output": 131072 } - }, - "glm-4.5-air": { - "id": "glm-4.5-air", - "name": "GLM-4.5-Air", - "family": "glm-air", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 131072, "output": 98304 } - }, - "glm-4.5v": { - "id": "glm-4.5v", - "name": "GLM-4.5V", - "family": "glm", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-08-11", - "last_updated": "2025-08-11", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 64000, "output": 16384 } + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-26", + "last_updated": "2025-07-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "glm-5.1": { - "id": "glm-5.1", - "name": "GLM-5.1", - "family": "glm", + "step-r1-v-mini": { + "id": "step-r1-v-mini", + "name": "Step R1 V Mini", "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, - "temperature": true, - "release_date": "2026-03-27", - "last_updated": "2026-03-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-04-08", + "last_updated": "2025-04-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 200000, "output": 131072 } + "limit": { + "context": 128000, + "input": 128000, + "output": 65536 + }, + "cost": { + "input": 2.5, + "output": 11 + } }, - "glm-4.7": { - "id": "glm-4.7", - "name": "GLM-4.7", - "family": "glm", + "ernie-x1-32k-preview": { + "id": "ernie-x1-32k-preview", + "name": "Ernie X1 32k", "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 204800, "output": 131072 } - } - } - }, - "anthropic": { - "id": "anthropic", - "env": ["ANTHROPIC_API_KEY"], - "npm": "@ai-sdk/anthropic", - "name": "Anthropic", - "doc": "https://docs.anthropic.com/en/docs/about-claude/models", - "models": { - "claude-opus-4-5-20251101": { - "id": "claude-opus-4-5-20251101", - "name": "Claude Opus 4.5", - "family": "claude-opus", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-11-01", - "last_updated": "2025-11-01", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-04-03", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 32000, + "input": 32000, + "output": 16384 + }, + "cost": { + "input": 0.33, + "output": 1.32 + } }, - "claude-opus-4-20250514": { - "id": "claude-opus-4-20250514", - "name": "Claude Opus 4", - "family": "claude-opus", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "Llama-3.3-70B-StrawberryLemonade-v1.0": { + "id": "Llama-3.3-70B-StrawberryLemonade-v1.0", + "name": "Llama 3.3 70B StrawberryLemonade v1.0", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "claude-opus-4-5": { - "id": "claude-opus-4-5", - "name": "Claude Opus 4.5 (latest)", - "family": "claude-opus", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-11-24", - "last_updated": "2025-11-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "KAT-Coder-Exp-72B-1010": { + "id": "KAT-Coder-Exp-72B-1010", + "name": "KAT Coder Exp 72B 1010", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-10-28", + "last_updated": "2025-10-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 32768 + }, + "cost": { + "input": 0.1, + "output": 0.2 + } }, - "claude-3-7-sonnet-20250219": { - "id": "claude-3-7-sonnet-20250219", - "name": "Claude Sonnet 3.7", - "family": "claude-sonnet", + "gemini-2.5-pro-preview-03-25": { + "id": "gemini-2.5-pro-preview-03-25", + "name": "Gemini 2.5 Pro Preview 0325", "attachment": true, "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-10-31", - "release_date": "2025-02-19", - "last_updated": "2025-02-19", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-03-25", + "last_updated": "2025-03-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 1048756, + "input": 1048756, + "output": 65536 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "claude-opus-4-6": { - "id": "claude-opus-4-6", - "name": "Claude Opus 4.6", - "family": "claude-opus", + "claude-opus-4-thinking:1024": { + "id": "claude-opus-4-thinking:1024", + "name": "Claude 4 Opus Thinking (1K)", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-05", - "release_date": "2026-02-05", - "last_updated": "2026-03-13", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 1000000, "output": 128000 } + "limit": { + "context": 200000, + "input": 200000, + "output": 32000 + }, + "cost": { + "input": 14.994, + "output": 75.004 + } }, - "claude-sonnet-4-5-20250929": { - "id": "claude-sonnet-4-5-20250929", - "name": "Claude Sonnet 4.5", - "family": "claude-sonnet", + "claude-sonnet-4-20250514": { + "id": "claude-sonnet-4-20250514", + "name": "Claude 4 Sonnet", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2025-07-31", + "structured_output": true, "release_date": "2025-09-29", "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 200000, + "input": 200000, + "output": 64000 + }, + "cost": { + "input": 2.992, + "output": 14.994 + } }, - "claude-sonnet-4-6": { - "id": "claude-sonnet-4-6", - "name": "Claude Sonnet 4.6", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-08", - "release_date": "2026-02-17", - "last_updated": "2026-03-13", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "Llama-3.3-70B-Progenitor-V3.3": { + "id": "Llama-3.3-70B-Progenitor-V3.3", + "name": "Llama 3.3 70B Progenitor V3.3", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-26", + "last_updated": "2025-07-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 1000000, "output": 64000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "claude-3-5-haiku-20241022": { - "id": "claude-3-5-haiku-20241022", - "name": "Claude Haiku 3.5", - "family": "claude-haiku", - "attachment": true, + "Qwen2.5-32B-EVA-v0.2": { + "id": "Qwen2.5-32B-EVA-v0.2", + "name": "Qwen 2.5 32b EVA", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-07-31", - "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-09-01", + "last_updated": "2024-09-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.8, "output": 4, "cache_read": 0.08, "cache_write": 1 }, - "limit": { "context": 200000, "output": 8192 } + "limit": { + "context": 24576, + "input": 24576, + "output": 8192 + }, + "cost": { + "input": 0.493, + "output": 0.493 + } }, - "claude-sonnet-4-0": { - "id": "claude-sonnet-4-0", - "name": "Claude Sonnet 4 (latest)", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "brave-pro": { + "id": "brave-pro", + "name": "Brave (Pro)", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2023-03-02", + "last_updated": "2024-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 8192, + "input": 8192, + "output": 8192 + }, + "cost": { + "input": 5, + "output": 5 + } }, - "claude-3-haiku-20240307": { - "id": "claude-3-haiku-20240307", - "name": "Claude Haiku 3", - "family": "claude-haiku", - "attachment": true, + "step-2-16k-exp": { + "id": "step-2-16k-exp", + "name": "Step-2 16k Exp", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2023-08-31", - "release_date": "2024-03-13", - "last_updated": "2024-03-13", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-07-05", + "last_updated": "2024-07-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 1.25, "cache_read": 0.03, "cache_write": 0.3 }, - "limit": { "context": 200000, "output": 4096 } + "limit": { + "context": 16000, + "input": 16000, + "output": 8192 + }, + "cost": { + "input": 7.004, + "output": 19.992 + } }, - "claude-sonnet-4-20250514": { - "id": "claude-sonnet-4-20250514", - "name": "Claude Sonnet 4", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "Llama-3.3-70B-Fallen-R1-v1": { + "id": "Llama-3.3-70B-Fallen-R1-v1", + "name": "Llama 3.3 70B Fallen R1 v1", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "claude-opus-4-1": { - "id": "claude-opus-4-1", - "name": "Claude Opus 4.1 (latest)", - "family": "claude-opus", + "claude-sonnet-4-thinking": { + "id": "claude-sonnet-4-thinking", + "name": "Claude 4 Sonnet Thinking", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-02-24", + "last_updated": "2025-02-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 64000 + }, + "cost": { + "input": 2.992, + "output": 14.994 + } }, - "claude-3-opus-20240229": { - "id": "claude-3-opus-20240229", - "name": "Claude Opus 3", - "family": "claude-opus", - "attachment": true, + "doubao-1.5-pro-256k": { + "id": "doubao-1.5-pro-256k", + "name": "Doubao 1.5 Pro 256k", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2023-08-31", - "release_date": "2024-02-29", - "last_updated": "2024-02-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-03-12", + "last_updated": "2025-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 4096 } + "limit": { + "context": 256000, + "input": 256000, + "output": 16384 + }, + "cost": { + "input": 0.799, + "output": 1.445 + } }, - "claude-3-5-haiku-latest": { - "id": "claude-3-5-haiku-latest", - "name": "Claude Haiku 3.5 (latest)", - "family": "claude-haiku", + "claude-3-7-sonnet-20250219": { + "id": "claude-3-7-sonnet-20250219", + "name": "Claude 3.7 Sonnet", "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-07-31", - "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.8, "output": 4, "cache_read": 0.08, "cache_write": 1 }, - "limit": { "context": 200000, "output": 8192 } + "limit": { + "context": 200000, + "input": 200000, + "output": 16000 + }, + "cost": { + "input": 2.992, + "output": 14.994 + } }, - "claude-3-5-sonnet-20240620": { - "id": "claude-3-5-sonnet-20240620", - "name": "Claude Sonnet 3.5", - "family": "claude-sonnet", - "attachment": true, + "learnlm-1.5-pro-experimental": { + "id": "learnlm-1.5-pro-experimental", + "name": "Gemini LearnLM Experimental", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-04-30", - "release_date": "2024-06-20", - "last_updated": "2024-06-20", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-05-14", + "last_updated": "2024-05-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 8192 } + "limit": { + "context": 32767, + "input": 32767, + "output": 8192 + }, + "cost": { + "input": 3.502, + "output": 10.506 + } }, - "claude-opus-4-1-20250805": { - "id": "claude-opus-4-1-20250805", - "name": "Claude Opus 4.1", - "family": "claude-opus", - "attachment": true, - "reasoning": true, + "qwen3-coder-30b-a3b-instruct": { + "id": "qwen3-coder-30b-a3b-instruct", + "name": "Qwen3 Coder 30B A3B Instruct", + "attachment": false, + "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2025-03-31", + "structured_output": true, "release_date": "2025-08-05", "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4 + } }, - "claude-opus-4-0": { - "id": "claude-opus-4-0", - "name": "Claude Opus 4 (latest)", - "family": "claude-opus", + "chroma": { + "id": "chroma", + "name": "Chroma", "attachment": true, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, + "structured_output": false, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-08-12", + "last_updated": "2025-08-12", + "modalities": { + "input": ["text"], + "output": ["image"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 0, + "output": 0 + } }, - "claude-haiku-4-5-20251001": { - "id": "claude-haiku-4-5-20251001", - "name": "Claude Haiku 4.5", - "family": "claude-haiku", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-02-28", - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "Llama-3.3-70B-Predatorial-Extasy": { + "id": "Llama-3.3-70B-Predatorial-Extasy", + "name": "Llama 3.3 70B Predatorial Extasy", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.1, "cache_write": 1.25 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "claude-sonnet-4-5": { - "id": "claude-sonnet-4-5", - "name": "Claude Sonnet 4.5 (latest)", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "Llama-3.3-70B-Aurora-Borealis": { + "id": "Llama-3.3-70B-Aurora-Borealis", + "name": "Llama 3.3 70B Aurora Borealis", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "claude-3-7-sonnet-latest": { - "id": "claude-3-7-sonnet-latest", - "name": "Claude Sonnet 3.7 (latest)", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-10-31", - "release_date": "2025-02-19", - "last_updated": "2025-02-19", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "Llama-3.3-70B-ArliAI-RPMax-v3": { + "id": "Llama-3.3-70B-ArliAI-RPMax-v3", + "name": "Llama 3.3 70B ArliAI RPMax v3", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "claude-haiku-4-5": { - "id": "claude-haiku-4-5", - "name": "Claude Haiku 4.5 (latest)", - "family": "claude-haiku", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-02-28", - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "venice-uncensored": { + "id": "venice-uncensored", + "name": "Venice Uncensored", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-02-24", + "last_updated": "2025-02-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.1, "cache_write": 1.25 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 0.4, + "output": 0.4 + } }, - "claude-3-sonnet-20240229": { - "id": "claude-3-sonnet-20240229", - "name": "Claude Sonnet 3", - "family": "claude-sonnet", + "step-3": { + "id": "step-3", + "name": "Step-3", "attachment": true, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2023-08-31", - "release_date": "2024-03-04", - "last_updated": "2024-03-04", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-31", + "last_updated": "2025-07-31", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 0.3 }, - "limit": { "context": 200000, "output": 4096 } + "limit": { + "context": 65536, + "input": 65536, + "output": 8192 + }, + "cost": { + "input": 0.2499, + "output": 0.6494 + } }, - "claude-3-5-sonnet-20241022": { - "id": "claude-3-5-sonnet-20241022", - "name": "Claude Sonnet 3.5 v2", - "family": "claude-sonnet", - "attachment": true, + "Llama-3.3-70B-The-Omega-Directive-Unslop-v2.0": { + "id": "Llama-3.3-70B-The-Omega-Directive-Unslop-v2.0", + "name": "Llama 3.3 70B Omega Directive Unslop v2.0", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-04-30", - "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 8192 } - } - } - }, - "nova": { - "id": "nova", - "env": ["NOVA_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.nova.amazon.com/v1", - "name": "Nova", - "doc": "https://nova.amazon.com/dev/documentation", - "models": { - "nova-2-lite-v1": { - "id": "nova-2-lite-v1", - "name": "Nova 2 Lite", - "family": "nova-lite", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text", "image", "video", "pdf"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0, "reasoning": 0 }, - "limit": { "context": 1000000, "output": 64000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "nova-2-pro-v1": { - "id": "nova-2-pro-v1", - "name": "Nova 2 Pro", - "family": "nova-pro", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2025-12-03", - "last_updated": "2026-01-03", - "modalities": { "input": ["text", "image", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0, "reasoning": 0 }, - "limit": { "context": 1000000, "output": 64000 } - } - } - }, - "upstage": { - "id": "upstage", - "env": ["UPSTAGE_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.upstage.ai/v1/solar", - "name": "Upstage", - "doc": "https://developers.upstage.ai/docs/apis/chat", - "models": { - "solar-pro3": { - "id": "solar-pro3", - "name": "solar-pro3", - "family": "solar-pro", + "auto-model": { + "id": "auto-model", + "name": "Auto model", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-03", - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-06-01", + "last_updated": "2024-06-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 0.25 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 1000000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "solar-pro2": { - "id": "solar-pro2", - "name": "solar-pro2", - "family": "solar-pro", - "attachment": false, + "claude-opus-4-1-thinking:32768": { + "id": "claude-opus-4-1-thinking:32768", + "name": "Claude 4.1 Opus Thinking (32K)", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-05-20", - "last_updated": "2025-05-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 0.25 }, - "limit": { "context": 65536, "output": 8192 } + "limit": { + "context": 200000, + "input": 200000, + "output": 32000 + }, + "cost": { + "input": 14.994, + "output": 75.004 + } }, - "solar-mini": { - "id": "solar-mini", - "name": "solar-mini", - "family": "solar-mini", + "Llama-3.3-70B-Shakudo": { + "id": "Llama-3.3-70B-Shakudo", + "name": "Llama 3.3 70B Shakudo", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-09", - "release_date": "2024-06-12", - "last_updated": "2025-04-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.15 }, - "limit": { "context": 32768, "output": 4096 } - } - } - }, - "tencent-coding-plan": { - "id": "tencent-coding-plan", - "env": ["TENCENT_CODING_PLAN_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.lkeap.cloud.tencent.com/coding/v3", - "name": "Tencent Coding Plan (China)", - "doc": "https://cloud.tencent.com/document/product/1772/128947", - "models": { - "hunyuan-2.0-instruct": { - "id": "hunyuan-2.0-instruct", - "name": "Tencent HY 2.0 Instruct", - "family": "hunyuan", + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } + }, + "Baichuan4-Air": { + "id": "Baichuan4-Air", + "name": "Baichuan 4 Air", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2026-03-08", - "last_updated": "2026-03-08", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-08-19", + "last_updated": "2025-08-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 131072, "output": 16384 } + "limit": { + "context": 32768, + "input": 32768, + "output": 32768 + }, + "cost": { + "input": 0.157, + "output": 0.157 + } }, - "kimi-k2.5": { - "id": "kimi-k2.5", - "name": "Kimi-K2.5", - "family": "kimi", + "kimi-thinking-preview": { + "id": "kimi-thinking-preview", + "name": "Kimi Thinking Preview", "attachment": true, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 262144, "output": 32768 } - }, - "hunyuan-t1": { - "id": "hunyuan-t1", - "name": "Hunyuan-T1", - "family": "hunyuan", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "release_date": "2026-03-08", - "last_updated": "2026-03-08", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-05-07", + "last_updated": "2025-05-07", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 131072, "output": 16384 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 31.46, + "output": 31.46 + } }, - "hunyuan-2.0-thinking": { - "id": "hunyuan-2.0-thinking", - "name": "Tencent HY 2.0 Think", - "family": "hunyuan", + "qwen-turbo": { + "id": "qwen-turbo", + "name": "Qwen Turbo", "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "release_date": "2026-03-08", - "last_updated": "2026-03-08", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-11-01", + "last_updated": "2024-11-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 131072, "output": 16384 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 8192 + }, + "cost": { + "input": 0.04998, + "output": 0.2006 + } }, - "tc-code-latest": { - "id": "tc-code-latest", - "name": "Auto", - "family": "auto", + "Llama-3.3-70B-Mhnnn-x1": { + "id": "Llama-3.3-70B-Mhnnn-x1", + "name": "Llama 3.3 70B Mhnnn x1", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2026-03-08", - "last_updated": "2026-03-08", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 131072, "output": 16384 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "glm-5": { - "id": "glm-5", - "name": "GLM-5", - "family": "glm", - "attachment": false, + "claude-opus-4-thinking:32768": { + "id": "claude-opus-4-thinking:32768", + "name": "Claude 4 Opus Thinking (32K)", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 202752, "output": 16384 } + "limit": { + "context": 200000, + "input": 200000, + "output": 32000 + }, + "cost": { + "input": 14.994, + "output": 75.004 + } }, - "hunyuan-turbos": { - "id": "hunyuan-turbos", - "name": "Hunyuan-TurboS", - "family": "hunyuan", + "Llama-3.3-70B-Argunaut-1-SFT": { + "id": "Llama-3.3-70B-Argunaut-1-SFT", + "name": "Llama 3.3 70B Argunaut 1 SFT", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2026-03-08", - "last_updated": "2026-03-08", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 131072, "output": 16384 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "minimax-m2.5": { - "id": "minimax-m2.5", - "name": "MiniMax-M2.5", - "family": "minimax", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 204800, "output": 32768 } - } - } - }, - "jiekou": { - "id": "jiekou", - "env": ["JIEKOU_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.jiekou.ai/openai", - "name": "Jiekou.AI", - "doc": "https://docs.jiekou.ai/docs/support/quickstart?utm_source=github_models.dev", - "models": { - "gpt-5.2-codex": { - "id": "gpt-5.2-codex", - "name": "gpt-5.2-codex", - "family": "gpt-codex", + "claude-opus-4-1-thinking:1024": { + "id": "claude-opus-4-1-thinking:1024", + "name": "Claude 4.1 Opus Thinking (1K)", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 200000, + "input": 200000, + "output": 32000 + }, + "cost": { + "input": 14.994, + "output": 75.004 + } }, "gemini-2.5-flash-lite": { "id": "gemini-2.5-flash-lite", - "name": "gemini-2.5-flash-lite", - "family": "gemini-flash-lite", + "name": "Gemini 2.5 Flash Lite", "attachment": true, - "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image", "video", "audio"], "output": ["text"] }, + "reasoning": true, + "tool_call": false, + "structured_output": false, + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.09, "output": 0.36 }, - "limit": { "context": 1048576, "output": 65535 } + "limit": { + "context": 1048756, + "input": 1048756, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4 + } }, - "gpt-5.1-codex-mini": { - "id": "gpt-5.1-codex-mini", - "name": "gpt-5.1-codex-mini", - "family": "gpt-codex", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "phi-4-multimodal-instruct": { + "id": "phi-4-multimodal-instruct", + "name": "Phi 4 Multimodal", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-26", + "last_updated": "2025-07-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.225, "output": 1.8 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 0.07, + "output": 0.11 + } }, - "claude-opus-4-5-20251101": { - "id": "claude-opus-4-5-20251101", - "name": "claude-opus-4-5-20251101", - "family": "claude-opus", - "attachment": true, + "doubao-seed-2-0-code-preview-260215": { + "id": "doubao-seed-2-0-code-preview-260215", + "name": "Doubao Seed 2.0 Code Preview", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2026-02-14", + "last_updated": "2026-02-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 4.5, "output": 22.5 }, - "limit": { "context": 200000, "output": 65536 } + "limit": { + "context": 256000, + "input": 256000, + "output": 128000 + }, + "cost": { + "input": 0.782, + "output": 3.893 + } }, - "o3-mini": { - "id": "o3-mini", - "name": "o3-mini", - "family": "o", - "attachment": true, + "deepseek-reasoner-cheaper": { + "id": "deepseek-reasoner-cheaper", + "name": "Deepseek R1 Cheaper", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 128000, + "input": 128000, + "output": 65536 + }, + "cost": { + "input": 0.4, + "output": 1.7 + } }, - "gpt-5-pro": { - "id": "gpt-5-pro", - "name": "gpt-5-pro", - "family": "gpt-pro", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "exa-answer": { + "id": "exa-answer", + "name": "Exa (Answer)", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-06-04", + "last_updated": "2025-06-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 13.5, "output": 108 }, - "limit": { "context": 400000, "output": 272000 } + "limit": { + "context": 4096, + "input": 4096, + "output": 4096 + }, + "cost": { + "input": 2.5, + "output": 2.5 + } }, - "gemini-2.5-flash-lite-preview-09-2025": { - "id": "gemini-2.5-flash-lite-preview-09-2025", - "name": "gemini-2.5-flash-lite-preview-09-2025", - "family": "gemini-flash-lite", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image", "video", "audio"], "output": ["text"] }, + "v0-1.0-md": { + "id": "v0-1.0-md", + "name": "v0 1.0 MD", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-04", + "last_updated": "2025-07-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.09, "output": 0.36 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 200000, + "input": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15 + } }, - "claude-opus-4-20250514": { - "id": "claude-opus-4-20250514", - "name": "claude-opus-4-20250514", - "family": "claude-opus", + "glm-4.1v-thinking-flash": { + "id": "glm-4.1v-thinking-flash", + "name": "GLM 4.1V Thinking Flash", "attachment": true, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 13.5, "output": 67.5 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 64000, + "input": 64000, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 0.3 + } }, - "gemini-2.5-flash-preview-05-20": { - "id": "gemini-2.5-flash-preview-05-20", - "name": "gemini-2.5-flash-preview-05-20", - "family": "gemini-flash", - "attachment": true, + "azure-o1": { + "id": "azure-o1", + "name": "Azure o1", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image", "video", "audio"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-17", + "last_updated": "2024-12-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.135, "output": 3.15 }, - "limit": { "context": 1048576, "output": 200000 } + "limit": { + "context": 200000, + "input": 200000, + "output": 100000 + }, + "cost": { + "input": 14.994, + "output": 59.993 + } }, - "gemini-3-pro-preview": { - "id": "gemini-3-pro-preview", - "name": "gemini-3-pro-preview", - "family": "gemini-pro", - "attachment": true, + "GLM-4.5-Air-Derestricted": { + "id": "GLM-4.5-Air-Derestricted", + "name": "GLM 4.5 Air Derestricted", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image", "video", "audio"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.8, "output": 10.8 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 202600, + "input": 202600, + "output": 98304 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "grok-4-fast-non-reasoning": { - "id": "grok-4-fast-non-reasoning", - "name": "grok-4-fast-non-reasoning", - "family": "grok", - "attachment": true, + "azure-o3-mini": { + "id": "azure-o3-mini", + "name": "Azure o3-mini", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-01-31", + "last_updated": "2025-01-31", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.18, "output": 0.45 }, - "limit": { "context": 2000000, "output": 2000000 } + "limit": { + "context": 200000, + "input": 200000, + "output": 65536 + }, + "cost": { + "input": 1.088, + "output": 4.3996 + } }, - "grok-code-fast-1": { - "id": "grok-code-fast-1", - "name": "grok-code-fast-1", - "family": "grok", - "attachment": true, + "qwen3.6-max-preview": { + "id": "qwen3.6-max-preview", + "name": "Qwen3.6 Max Preview", + "family": "qwen3.6", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2026-04-20", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.18, "output": 1.35 }, - "limit": { "context": 256000, "output": 256000 } + "limit": { + "context": 245800, + "output": 65536 + }, + "cost": { + "input": 1.3, + "output": 7.8 + } }, - "gpt-5-mini": { - "id": "gpt-5-mini", - "name": "gpt-5-mini", - "family": "gpt-mini", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "Llama-3.3-70B-Sapphira-0.2": { + "id": "Llama-3.3-70B-Sapphira-0.2", + "name": "Llama 3.3 70B Sapphira 0.2", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.225, "output": 1.8 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "claude-opus-4-6": { - "id": "claude-opus-4-6", - "name": "claude-opus-4-6", - "family": "claude-opus", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-02", - "last_updated": "2026-02", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "Llama-3.3-70B-Anthrobomination": { + "id": "Llama-3.3-70B-Anthrobomination", + "name": "Llama 3.3 70B Anthrobomination", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25 }, - "limit": { "context": 1000000, "output": 128000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "claude-sonnet-4-5-20250929": { - "id": "claude-sonnet-4-5-20250929", - "name": "claude-sonnet-4-5-20250929", - "family": "claude-sonnet", - "attachment": true, + "QwQ-32B-ArliAI-RpR-v1": { + "id": "QwQ-32B-ArliAI-RpR-v1", + "name": "QwQ 32b Arli V1", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.7, "output": 13.5 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 32768 + }, + "cost": { + "input": 0.2, + "output": 0.2 + } }, - "gpt-5.1-codex-max": { - "id": "gpt-5.1-codex-max", - "name": "gpt-5.1-codex-max", - "family": "gpt-codex", + "claude-opus-4-20250514": { + "id": "claude-opus-4-20250514", + "name": "Claude 4 Opus", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-05-14", + "last_updated": "2025-05-14", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.125, "output": 9 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 200000, + "input": 200000, + "output": 32000 + }, + "cost": { + "input": 14.994, + "output": 75.004 + } }, - "gemini-2.5-pro-preview-06-05": { - "id": "gemini-2.5-pro-preview-06-05", - "name": "gemini-2.5-pro-preview-06-05", - "family": "gemini-pro", - "attachment": true, + "yi-lightning": { + "id": "yi-lightning", + "name": "Yi Lightning", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image", "video", "audio"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-10-16", + "last_updated": "2024-10-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.125, "output": 9 }, - "limit": { "context": 1048576, "output": 200000 } + "limit": { + "context": 12000, + "input": 12000, + "output": 4096 + }, + "cost": { + "input": 0.2006, + "output": 0.2006 + } }, - "o3": { - "id": "o3", - "name": "o3", - "attachment": true, + "Llama-3.3-70B-Electra-R1": { + "id": "Llama-3.3-70B-Electra-R1", + "name": "Llama 3.3 70B Electra R1", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 10, "output": 40 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "grok-4-1-fast-non-reasoning": { - "id": "grok-4-1-fast-non-reasoning", - "name": "grok-4-1-fast-non-reasoning", - "family": "grok", - "attachment": true, + "Llama-3.3-70B-Forgotten-Abomination-v5.0": { + "id": "Llama-3.3-70B-Forgotten-Abomination-v5.0", + "name": "Llama 3.3 70B Forgotten Abomination v5.0", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.18, "output": 0.45 }, - "limit": { "context": 2000000, "output": 2000000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "claude-sonnet-4-20250514": { - "id": "claude-sonnet-4-20250514", - "name": "claude-sonnet-4-20250514", - "family": "claude-sonnet", - "attachment": true, + "Llama-3.3-70B-Cirrus-x1": { + "id": "Llama-3.3-70B-Cirrus-x1", + "name": "Llama 3.3 70B Cirrus x1", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.7, "output": 13.5 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "grok-4-0709": { - "id": "grok-4-0709", - "name": "grok-4-0709", - "family": "grok", - "attachment": true, + "grok-3-mini-beta": { + "id": "grok-3-mini-beta", + "name": "Grok 3 Mini Beta", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.7, "output": 13.5 }, - "limit": { "context": 256000, "output": 8192 } + "limit": { + "context": 131072, + "input": 131072, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 0.5 + } }, - "gemini-3-flash-preview": { - "id": "gemini-3-flash-preview", - "name": "gemini-3-flash-preview", - "family": "gemini-flash", - "attachment": true, + "auto-model-standard": { + "id": "auto-model-standard", + "name": "Auto model (Standard)", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image", "video", "audio"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-06-01", + "last_updated": "2024-06-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 3 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 1000000 + }, + "cost": { + "input": 9.996, + "output": 19.992 + } }, - "gemini-2.5-pro": { - "id": "gemini-2.5-pro", - "name": "gemini-2.5-pro", - "family": "gemini-pro", + "claude-sonnet-4-5-20250929-thinking": { + "id": "claude-sonnet-4-5-20250929-thinking", + "name": "Claude Sonnet 4.5 Thinking", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image", "video", "audio"], "output": ["text"] }, + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.125, "output": 9 }, - "limit": { "context": 1048576, "output": 65535 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 64000 + }, + "cost": { + "input": 2.992, + "output": 14.994 + } }, - "claude-opus-4-1-20250805": { - "id": "claude-opus-4-1-20250805", - "name": "claude-opus-4-1-20250805", - "family": "claude-opus", - "attachment": true, + "v0-1.5-md": { + "id": "v0-1.5-md", + "name": "v0 1.5 MD", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-04", + "last_updated": "2025-07-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 13.5, "output": 67.5 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 200000, + "input": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15 + } }, - "gemini-2.5-flash": { - "id": "gemini-2.5-flash", - "name": "gemini-2.5-flash", - "family": "gemini-flash", + "kimi-k2-instruct-fast": { + "id": "kimi-k2-instruct-fast", + "name": "Kimi K2 0711 Fast", "attachment": true, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image", "video", "audio"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-15", + "last_updated": "2025-07-15", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.27, "output": 2.25 }, - "limit": { "context": 1048576, "output": 65535 } + "limit": { + "context": 131072, + "input": 131072, + "output": 16384 + }, + "cost": { + "input": 0.1, + "output": 2 + } }, - "gpt-5.2": { - "id": "gpt-5.2", - "name": "gpt-5.2", - "family": "gpt", - "attachment": true, + "glm-4-long": { + "id": "glm-4-long", + "name": "GLM-4 Long", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-08-01", + "last_updated": "2024-08-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.575, "output": 12.6 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 4096 + }, + "cost": { + "input": 0.2006, + "output": 0.2006 + } }, - "grok-4-1-fast-reasoning": { - "id": "grok-4-1-fast-reasoning", - "name": "grok-4-1-fast-reasoning", - "family": "grok", - "attachment": true, + "jamba-large-1.7": { + "id": "jamba-large-1.7", + "name": "Jamba Large 1.7", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.18, "output": 0.45 }, - "limit": { "context": 2000000, "output": 2000000 } + "limit": { + "context": 256000, + "input": 256000, + "output": 4096 + }, + "cost": { + "input": 1.989, + "output": 7.99 + } }, - "gpt-5.1": { - "id": "gpt-5.1", - "name": "gpt-5.1", - "family": "gpt", + "qvq-max": { + "id": "qvq-max", + "name": "Qwen: QvQ Max", "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-02", - "last_updated": "2026-02", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-03-28", + "last_updated": "2025-03-28", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.125, "output": 9 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 8192 + }, + "cost": { + "input": 1.4, + "output": 5.3 + } }, - "gpt-5-chat-latest": { - "id": "gpt-5-chat-latest", - "name": "gpt-5-chat-latest", - "family": "gpt", - "attachment": true, + "gemini-2.0-flash-thinking-exp-1219": { + "id": "gemini-2.0-flash-thinking-exp-1219", + "name": "Gemini 2.0 Flash Thinking 1219", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-19", + "last_updated": "2024-12-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.125, "output": 9 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 32767, + "input": 32767, + "output": 8192 + }, + "cost": { + "input": 0.1003, + "output": 0.408 + } }, - "grok-4-fast-reasoning": { - "id": "grok-4-fast-reasoning", - "name": "grok-4-fast-reasoning", - "family": "grok", + "gemini-2.0-flash-lite": { + "id": "gemini-2.0-flash-lite", + "name": "Gemini 2.0 Flash Lite", "attachment": true, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.18, "output": 0.45 }, - "limit": { "context": 2000000, "output": 2000000 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 8192 + }, + "cost": { + "input": 0.0748, + "output": 0.306 + } }, - "gpt-5-nano": { - "id": "gpt-5-nano", - "name": "gpt-5-nano", - "family": "gpt-nano", - "attachment": true, + "azure-gpt-4-turbo": { + "id": "azure-gpt-4-turbo", + "name": "Azure gpt-4-turbo", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2023-11-06", + "last_updated": "2024-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.045, "output": 0.36 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 4096 + }, + "cost": { + "input": 9.996, + "output": 30.005 + } }, - "gemini-2.5-flash-lite-preview-06-17": { - "id": "gemini-2.5-flash-lite-preview-06-17", - "name": "gemini-2.5-flash-lite-preview-06-17", - "family": "gemini-flash-lite", - "attachment": true, - "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "video", "image", "audio"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.09, "output": 0.36 }, - "limit": { "context": 1048576, "output": 65535 } - }, - "claude-haiku-4-5-20251001": { - "id": "claude-haiku-4-5-20251001", - "name": "claude-haiku-4-5-20251001", - "family": "claude-haiku", - "attachment": true, - "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.9, "output": 4.5 }, - "limit": { "context": 20000, "output": 64000 } - }, - "gpt-5-codex": { - "id": "gpt-5-codex", - "name": "gpt-5-codex", - "family": "gpt-codex", - "attachment": true, + "Baichuan-M2": { + "id": "Baichuan-M2", + "name": "Baichuan M2 32B Medical", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-08-19", + "last_updated": "2025-08-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.125, "output": 9 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 32768 + }, + "cost": { + "input": 15.73, + "output": 15.73 + } }, - "o4-mini": { - "id": "o4-mini", - "name": "o4-mini", - "family": "o", + "qwen-long": { + "id": "qwen-long", + "name": "Qwen Long 10M", "attachment": true, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-01-25", + "last_updated": "2025-01-25", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 10000000, + "input": 10000000, + "output": 8192 + }, + "cost": { + "input": 0.1003, + "output": 0.408 + } }, - "gpt-5.1-codex": { - "id": "gpt-5.1-codex", - "name": "gpt-5.1-codex", - "family": "gpt-codex", - "attachment": true, + "sonar-reasoning-pro": { + "id": "sonar-reasoning-pro", + "name": "Perplexity Reasoning Pro", + "attachment": false, "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.125, "output": 9 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 127000, + "input": 127000, + "output": 128000 + }, + "cost": { + "input": 2.006, + "output": 7.9985 + } }, - "gpt-5.2-pro": { - "id": "gpt-5.2-pro", - "name": "gpt-5.2-pro", - "family": "gpt-pro", + "gemini-2.5-flash-preview-05-20:thinking": { + "id": "gemini-2.5-flash-preview-05-20:thinking", + "name": "Gemini 2.5 Flash 0520 Thinking", "attachment": true, "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-05-20", + "last_updated": "2025-05-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 18.9, "output": 151.2 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 1048000, + "input": 1048000, + "output": 65536 + }, + "cost": { + "input": 0.15, + "output": 3.5 + } }, - "deepseek/deepseek-v3-0324": { - "id": "deepseek/deepseek-v3-0324", - "name": "DeepSeek V3 0324", - "family": "deepseek", + "GLM-4.5-Air-Derestricted-Steam-ReExtract": { + "id": "GLM-4.5-Air-Derestricted-Steam-ReExtract", + "name": "GLM 4.5 Air Derestricted Steam ReExtract", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.28, "output": 1.14 }, - "limit": { "context": 163840, "output": 163840 } - }, - "deepseek/deepseek-v3.1": { - "id": "deepseek/deepseek-v3.1", - "name": "DeepSeek V3.1", - "family": "deepseek", - "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.27, "output": 1 }, - "limit": { "context": 163840, "output": 32768 } - }, - "deepseek/deepseek-r1-0528": { - "id": "deepseek/deepseek-r1-0528", - "name": "DeepSeek R1 0528", - "family": "deepseek-thinking", - "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.7, "output": 2.5 }, - "limit": { "context": 163840, "output": 32768 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-12-12", + "last_updated": "2025-12-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "input": 131072, + "output": 65536 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "zai-org/glm-4.7-flash": { - "id": "zai-org/glm-4.7-flash", - "name": "GLM-4.7-Flash", - "family": "glm", + "Llama-3.3-70B-Dark-Ages-v0.1": { + "id": "Llama-3.3-70B-Dark-Ages-v0.1", + "name": "Llama 3.3 70B Dark Ages v0.1", "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.07, "output": 0.4 }, - "limit": { "context": 200000, "output": 128000 } + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "zai-org/glm-4.5": { - "id": "zai-org/glm-4.5", - "name": "GLM-4.5", - "family": "glm", + "Baichuan4-Turbo": { + "id": "Baichuan4-Turbo", + "name": "Baichuan 4 Turbo", "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.2 }, - "limit": { "context": 131072, "output": 98304 } + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-08-19", + "last_updated": "2025-08-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 32768 + }, + "cost": { + "input": 2.42, + "output": 2.42 + } }, - "zai-org/glm-4.5v": { - "id": "zai-org/glm-4.5v", - "name": "GLM 4.5V", - "family": "glmv", + "doubao-1.5-vision-pro-32k": { + "id": "doubao-1.5-vision-pro-32k", + "name": "Doubao 1.5 Vision Pro 32k", "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 1.8 }, - "limit": { "context": 65536, "output": 16384 } + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-01-22", + "last_updated": "2025-01-22", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32000, + "input": 32000, + "output": 8192 + }, + "cost": { + "input": 0.459, + "output": 1.377 + } }, - "zai-org/glm-4.7": { - "id": "zai-org/glm-4.7", - "name": "GLM-4.7", - "family": "glm", + "alibaba/qwen3.6-flash": { + "id": "alibaba/qwen3.6-flash", + "name": "Qwen3.6 Flash", + "family": "qwen3.6", "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.2 }, - "limit": { "context": 204800, "output": 131072 } + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2026-04-17", + "last_updated": "2026-04-17", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 991800, + "output": 65536 + }, + "cost": { + "input": 0.19, + "output": 1.16 + } }, - "baidu/ernie-4.5-300b-a47b-paddle": { - "id": "baidu/ernie-4.5-300b-a47b-paddle", - "name": "ERNIE 4.5 300B A47B", - "family": "ernie", + "inflection/inflection-3-pi": { + "id": "inflection/inflection-3-pi", + "name": "Inflection 3 Pi", + "family": "gpt", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.28, "output": 1.1 }, - "limit": { "context": 123000, "output": 12000 } - }, - "baidu/ernie-4.5-vl-424b-a47b": { - "id": "baidu/ernie-4.5-vl-424b-a47b", - "name": "ERNIE 4.5 VL 424B A47B", - "family": "ernie", - "attachment": true, - "reasoning": true, - "tool_call": true, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.42, "output": 1.25 }, - "limit": { "context": 123000, "output": 16000 } + "release_date": "2024-10-11", + "last_updated": "2024-10-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8000, + "input": 8000, + "output": 4096 + }, + "cost": { + "input": 2.499, + "output": 9.996 + } }, - "minimaxai/minimax-m1-80k": { - "id": "minimaxai/minimax-m1-80k", - "name": "MiniMax M1", - "family": "minimax", + "inflection/inflection-3-productivity": { + "id": "inflection/inflection-3-productivity", + "name": "Inflection 3 Productivity", + "family": "gpt", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.55, "output": 2.2 }, - "limit": { "context": 1000000, "output": 40000 } + "release_date": "2024-10-11", + "last_updated": "2024-10-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8000, + "input": 8000, + "output": 4096 + }, + "cost": { + "input": 2.499, + "output": 9.996 + } }, - "minimax/minimax-m2.1": { - "id": "minimax/minimax-m2.1", - "name": "Minimax M2.1", - "family": "minimax", + "essentialai/rnj-1-instruct": { + "id": "essentialai/rnj-1-instruct", + "name": "RNJ-1 Instruct 8B", + "family": "rnj", "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 204800, "output": 131072 } + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-12-13", + "last_updated": "2025-12-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 8192 + }, + "cost": { + "input": 0.15, + "output": 0.15 + } }, - "qwen/qwen3-235b-a22b-instruct-2507": { - "id": "qwen/qwen3-235b-a22b-instruct-2507", - "name": "Qwen3 235B A22B Instruct 2507", - "family": "qwen", + "LLM360/K2-Think": { + "id": "LLM360/K2-Think", + "name": "K2-Think", + "family": "kimi-thinking", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.8 }, - "limit": { "context": 131072, "output": 16384 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-26", + "last_updated": "2025-07-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 32768 + }, + "cost": { + "input": 0.17, + "output": 0.68 + } }, - "qwen/qwen3-coder-next": { - "id": "qwen/qwen3-coder-next", - "name": "qwen/qwen3-coder-next", - "family": "qwen", + "TEE/kimi-k2.5": { + "id": "TEE/kimi-k2.5", + "name": "Kimi K2.5 TEE", + "family": "kimi", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-02", - "last_updated": "2026-02", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 1.5 }, - "limit": { "context": 262144, "output": 65536 } + "tool_call": false, + "structured_output": false, + "release_date": "2026-01-29", + "last_updated": "2026-01-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 65535 + }, + "cost": { + "input": 0.3, + "output": 1.9 + } }, - "qwen/qwen3-30b-a3b-fp8": { - "id": "qwen/qwen3-30b-a3b-fp8", - "name": "Qwen3 30B A3B", - "family": "qwen", + "TEE/glm-4.7": { + "id": "TEE/glm-4.7", + "name": "GLM 4.7 TEE", + "family": "glm", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.09, "output": 0.45 }, - "limit": { "context": 40960, "output": 20000 } + "release_date": "2026-01-29", + "last_updated": "2026-01-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "input": 131000, + "output": 65535 + }, + "cost": { + "input": 0.85, + "output": 3.3 + } }, - "qwen/qwen3-235b-a22b-fp8": { - "id": "qwen/qwen3-235b-a22b-fp8", - "name": "Qwen3 235B A22B", + "TEE/qwen3.5-397b-a17b": { + "id": "TEE/qwen3.5-397b-a17b", + "name": "Qwen3.5 397B A17B TEE", "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.8 }, - "limit": { "context": 40960, "output": 20000 } + "release_date": "2026-02-28", + "last_updated": "2026-02-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 258048, + "input": 258048, + "output": 65536 + }, + "cost": { + "input": 0.6, + "output": 3.6 + } }, - "qwen/qwen3-coder-480b-a35b-instruct": { - "id": "qwen/qwen3-coder-480b-a35b-instruct", - "name": "Qwen3 Coder 480B A35B Instruct", - "family": "qwen", + "TEE/glm-5": { + "id": "TEE/glm-5", + "name": "GLM 5 TEE", + "family": "glm", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.29, "output": 1.2 }, - "limit": { "context": 262144, "output": 65536 } + "tool_call": false, + "structured_output": false, + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 203000, + "input": 203000, + "output": 65535 + }, + "cost": { + "input": 1.2, + "output": 3.5 + } }, - "qwen/qwen3-next-80b-a3b-thinking": { - "id": "qwen/qwen3-next-80b-a3b-thinking", - "name": "Qwen3 Next 80B A3B Thinking", + "TEE/qwen2.5-vl-72b-instruct": { + "id": "TEE/qwen2.5-vl-72b-instruct", + "name": "Qwen2.5 VL 72B TEE", "family": "qwen", - "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 1.5 }, - "limit": { "context": 65536, "output": 65536 } + "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-02-01", + "last_updated": "2025-02-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 65536, + "input": 65536, + "output": 8192 + }, + "cost": { + "input": 0.7, + "output": 0.7 + } }, - "qwen/qwen3-235b-a22b-thinking-2507": { - "id": "qwen/qwen3-235b-a22b-thinking-2507", - "name": "Qwen3 235B A22b Thinking 2507", - "family": "qwen", + "TEE/minimax-m2.1": { + "id": "TEE/minimax-m2.1", + "name": "MiniMax M2.1 TEE", + "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 3 }, - "limit": { "context": 131072, "output": 131072 } + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "input": 200000, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "qwen/qwen3-next-80b-a3b-instruct": { - "id": "qwen/qwen3-next-80b-a3b-instruct", - "name": "Qwen3 Next 80B A3B Instruct", + "TEE/qwen3-30b-a3b-instruct-2507": { + "id": "TEE/qwen3-30b-a3b-instruct-2507", + "name": "Qwen3 30B A3B Instruct 2507 TEE", "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 1.5 }, - "limit": { "context": 65536, "output": 65536 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-29", + "last_updated": "2025-07-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "input": 262000, + "output": 32768 + }, + "cost": { + "input": 0.15, + "output": 0.44999999999999996 + } }, - "qwen/qwen3-32b-fp8": { - "id": "qwen/qwen3-32b-fp8", - "name": "Qwen3 32B", - "family": "qwen", + "TEE/deepseek-v3.1": { + "id": "TEE/deepseek-v3.1", + "name": "DeepSeek V3.1 TEE", + "family": "deepseek", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": false, "structured_output": false, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.45 }, - "limit": { "context": 40960, "output": 20000 } - }, - "moonshotai/kimi-k2.5": { - "id": "moonshotai/kimi-k2.5", - "name": "Kimi K2.5", - "family": "kimi", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 3 }, - "limit": { "context": 262144, "output": 262144 } + "release_date": "2025-08-21", + "last_updated": "2025-08-21", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 164000, + "input": 164000, + "output": 8192 + }, + "cost": { + "input": 1, + "output": 2.5 + } }, - "moonshotai/kimi-k2-0905": { - "id": "moonshotai/kimi-k2-0905", - "name": "Kimi K2 0905", - "family": "kimi", + "TEE/llama3-3-70b": { + "id": "TEE/llama3-3-70b", + "name": "Llama 3.3 70B", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.5 }, - "limit": { "context": 262144, "output": 262144 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-03", + "last_updated": "2025-07-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 2, + "output": 2 + } }, - "moonshotai/kimi-k2-instruct": { - "id": "moonshotai/kimi-k2-instruct", - "name": "Kimi K2 Instruct", - "family": "kimi", + "TEE/glm-4.6": { + "id": "TEE/glm-4.6", + "name": "GLM 4.6 TEE", + "family": "glm", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.57, "output": 2.3 }, - "limit": { "context": 131072, "output": 131072 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 203000, + "input": 203000, + "output": 65535 + }, + "cost": { + "input": 0.75, + "output": 2 + } }, - "xiaomimimo/mimo-v2-flash": { - "id": "xiaomimimo/mimo-v2-flash", - "name": "XiaomiMiMo/MiMo-V2-Flash", - "family": "mimo", + "TEE/kimi-k2.5-thinking": { + "id": "TEE/kimi-k2.5-thinking", + "name": "Kimi K2.5 Thinking TEE", + "family": "kimi-thinking", "attachment": false, "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 131072 } - } - } - }, - "deepseek": { - "id": "deepseek", - "env": ["DEEPSEEK_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.deepseek.com", - "name": "DeepSeek", - "doc": "https://api-docs.deepseek.com/quick_start/pricing", - "models": { - "deepseek-chat": { - "id": "deepseek-chat", - "name": "DeepSeek Chat", + "tool_call": false, + "structured_output": false, + "release_date": "2026-01-29", + "last_updated": "2026-01-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 65535 + }, + "cost": { + "input": 0.3, + "output": 1.9 + } + }, + "TEE/gemma-3-27b-it": { + "id": "TEE/gemma-3-27b-it", + "name": "Gemma 3 27B TEE", + "family": "gemma", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-03-10", + "last_updated": "2025-03-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "input": 131072, + "output": 8192 + }, + "cost": { + "input": 0.2, + "output": 0.8 + } + }, + "TEE/deepseek-v3.2": { + "id": "TEE/deepseek-v3.2", + "name": "DeepSeek V3.2 TEE", "family": "deepseek", - "attachment": true, + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-09", + "tool_call": false, + "structured_output": false, "release_date": "2025-12-01", - "last_updated": "2026-02-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.28, "output": 0.42, "cache_read": 0.028 }, - "limit": { "context": 128000, "output": 8192 } + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 164000, + "input": 164000, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 1 + } }, - "deepseek-reasoner": { - "id": "deepseek-reasoner", - "name": "DeepSeek Reasoner", - "family": "deepseek-thinking", - "attachment": true, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2025-09", - "release_date": "2025-12-01", - "last_updated": "2026-02-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.28, "output": 0.42, "cache_read": 0.028 }, - "limit": { "context": 128000, "output": 64000 } - } - } - }, - "llama": { - "id": "llama", - "env": ["LLAMA_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.llama.com/compat/v1/", - "name": "Llama", - "doc": "https://llama.developer.meta.com/docs/models", - "models": { - "cerebras-llama-4-scout-17b-16e-instruct": { - "id": "cerebras-llama-4-scout-17b-16e-instruct", - "name": "Cerebras-Llama-4-Scout-17B-16E-Instruct", - "family": "llama", - "attachment": true, + "TEE/gpt-oss-20b": { + "id": "TEE/gpt-oss-20b", + "name": "GPT-OSS 20B TEE", + "family": "gpt-oss", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "input": 131072, + "output": 8192 + }, + "cost": { + "input": 0.2, + "output": 0.8 + } }, - "llama-3.3-70b-instruct": { - "id": "llama-3.3-70b-instruct", - "name": "Llama-3.3-70B-Instruct", - "family": "llama", - "attachment": true, + "TEE/qwen3-coder": { + "id": "TEE/qwen3-coder", + "name": "Qwen3 Coder 480B TEE", + "family": "qwen", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 32768 + }, + "cost": { + "input": 1.5, + "output": 2 + } }, - "cerebras-llama-4-maverick-17b-128e-instruct": { - "id": "cerebras-llama-4-maverick-17b-128e-instruct", - "name": "Cerebras-Llama-4-Maverick-17B-128E-Instruct", - "family": "llama", - "attachment": true, + "TEE/glm-4.7-flash": { + "id": "TEE/glm-4.7-flash", + "name": "GLM 4.7 Flash TEE", + "family": "glm-flash", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "tool_call": false, + "structured_output": false, + "release_date": "2026-01-19", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 203000, + "input": 203000, + "output": 65535 + }, + "cost": { + "input": 0.15, + "output": 0.5 + } }, - "groq-llama-4-maverick-17b-128e-instruct": { - "id": "groq-llama-4-maverick-17b-128e-instruct", - "name": "Groq-Llama-4-Maverick-17B-128E-Instruct", - "family": "llama", - "attachment": true, + "TEE/gpt-oss-120b": { + "id": "TEE/gpt-oss-120b", + "name": "GPT-OSS 120B TEE", + "family": "gpt-oss", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "input": 131072, + "output": 16384 + }, + "cost": { + "input": 2, + "output": 2 + } }, - "llama-4-scout-17b-16e-instruct-fp8": { - "id": "llama-4-scout-17b-16e-instruct-fp8", - "name": "Llama-4-Scout-17B-16E-Instruct-FP8", - "family": "llama", - "attachment": true, + "TEE/deepseek-r1-0528": { + "id": "TEE/deepseek-r1-0528", + "name": "DeepSeek R1 0528 TEE", + "family": "deepseek", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-05-28", + "last_updated": "2025-05-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 2 + } }, - "llama-3.3-8b-instruct": { - "id": "llama-3.3-8b-instruct", - "name": "Llama-3.3-8B-Instruct", - "family": "llama", - "attachment": true, + "TEE/kimi-k2-thinking": { + "id": "TEE/kimi-k2-thinking", + "name": "Kimi K2 Thinking TEE", + "family": "kimi-thinking", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 65535 + }, + "cost": { + "input": 2, + "output": 2 + } }, - "llama-4-maverick-17b-128e-instruct-fp8": { - "id": "llama-4-maverick-17b-128e-instruct-fp8", - "name": "Llama-4-Maverick-17B-128E-Instruct-FP8", + "CrucibleLab/L3.3-70B-Loki-V2.0": { + "id": "CrucibleLab/L3.3-70B-Loki-V2.0", + "name": "L3.3 70B Loki v2.0", "family": "llama", - "attachment": true, + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } - } - } - }, - "azure-cognitive-services": { - "id": "azure-cognitive-services", - "env": ["AZURE_COGNITIVE_SERVICES_RESOURCE_NAME", "AZURE_COGNITIVE_SERVICES_API_KEY"], - "npm": "@ai-sdk/azure", - "name": "Azure Cognitive Services", - "doc": "https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models", - "models": { - "gpt-5.4-mini": { - "id": "gpt-5.4-mini", - "name": "GPT-5.4 Mini", - "family": "gpt-mini", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-17", - "last_updated": "2026-03-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2026-01-22", + "last_updated": "2026-01-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.75, "output": 4.5, "cache_read": 0.075 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 16384, + "input": 16384, + "output": 16384 + }, + "cost": { + "input": 0.49299999999999994, + "output": 0.49299999999999994 + } }, - "claude-opus-4-5": { - "id": "claude-opus-4-5", - "name": "Claude Opus 4.5", - "family": "claude-opus", + "deepseek/deepseek-v3.2:thinking": { + "id": "deepseek/deepseek-v3.2:thinking", + "name": "DeepSeek V3.2 Thinking", + "family": "deepseek", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-11-24", - "last_updated": "2025-08-01", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 200000, "output": 64000 }, - "provider": { - "npm": "@ai-sdk/anthropic", - "api": "https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1" + "limit": { + "context": 163000, + "input": 163000, + "output": 65536 + }, + "cost": { + "input": 0.27999999999999997, + "output": 0.42000000000000004 } }, - "claude-opus-4-6": { - "id": "claude-opus-4-6", - "name": "Claude Opus 4.6", - "family": "claude-opus", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-05", - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "deepseek/deepseek-prover-v2-671b": { + "id": "deepseek/deepseek-prover-v2-671b", + "name": "DeepSeek Prover v2 671B", + "family": "deepseek", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-04-30", + "last_updated": "2025-04-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { - "input": 5, - "output": 25, - "cache_read": 0.5, - "cache_write": 6.25, - "context_over_200k": { "input": 10, "output": 37.5, "cache_read": 1, "cache_write": 12.5 } + "limit": { + "context": 160000, + "input": 160000, + "output": 16384 }, - "limit": { "context": 200000, "output": 128000 }, - "provider": { - "npm": "@ai-sdk/anthropic", - "api": "https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1" + "cost": { + "input": 1, + "output": 2.5 } }, - "claude-opus-4-1": { - "id": "claude-opus-4-1", - "name": "Claude Opus 4.1", - "family": "claude-opus", + "deepseek/deepseek-v3.2-speciale": { + "id": "deepseek/deepseek-v3.2-speciale", + "name": "DeepSeek V3.2 Speciale", + "family": "deepseek", "attachment": true, "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-11-18", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-12-02", + "last_updated": "2025-12-02", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 }, - "provider": { - "npm": "@ai-sdk/anthropic", - "api": "https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1" + "limit": { + "context": 163000, + "input": 163000, + "output": 65536 + }, + "cost": { + "input": 0.27999999999999997, + "output": 0.42000000000000004 } }, - "gpt-5.4-nano": { - "id": "gpt-5.4-nano", - "name": "GPT-5.4 Nano", - "family": "gpt-nano", + "deepseek/deepseek-v3.2": { + "id": "deepseek/deepseek-v3.2", + "name": "DeepSeek V3.2", + "family": "deepseek", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-17", - "last_updated": "2026-03-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 1.25, "cache_read": 0.02 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 163000, + "input": 163000, + "output": 65536 + }, + "cost": { + "input": 0.27999999999999997, + "output": 0.42000000000000004 + } }, - "claude-sonnet-4-5": { - "id": "claude-sonnet-4-5", - "name": "Claude Sonnet 4.5", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2025-11-18", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "Doctor-Shotgun/MS3.2-24B-Magnum-Diamond": { + "id": "Doctor-Shotgun/MS3.2-24B-Magnum-Diamond", + "name": "MS3.2 24B Magnum Diamond", + "family": "mistral", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-11-24", + "last_updated": "2025-11-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 }, - "provider": { - "npm": "@ai-sdk/anthropic", - "api": "https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1" + "limit": { + "context": 16384, + "input": 16384, + "output": 32768 + }, + "cost": { + "input": 0.49299999999999994, + "output": 0.49299999999999994 } }, - "claude-haiku-4-5": { - "id": "claude-haiku-4-5", - "name": "Claude Haiku 4.5", - "family": "claude-haiku", + "NeverSleep/Llama-3-Lumimaid-70B-v0.1": { + "id": "NeverSleep/Llama-3-Lumimaid-70B-v0.1", + "name": "Lumimaid 70b", + "family": "llama", "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2025-02-31", - "release_date": "2025-11-18", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-07-01", + "last_updated": "2024-07-01", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.1, "cache_write": 1.25 }, - "limit": { "context": 200000, "output": 64000 }, - "provider": { - "npm": "@ai-sdk/anthropic", - "api": "https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1" + "limit": { + "context": 16384, + "input": 16384, + "output": 8192 + }, + "cost": { + "input": 2.006, + "output": 2.006 } }, - "o1-mini": { - "id": "o1-mini", - "name": "o1-mini", - "family": "o-mini", + "NeverSleep/Lumimaid-v0.2-70B": { + "id": "NeverSleep/Lumimaid-v0.2-70B", + "name": "Lumimaid v0.2", + "family": "llama", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2023-09", - "release_date": "2024-09-12", - "last_updated": "2024-09-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-07-01", + "last_updated": "2024-07-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.55 }, - "limit": { "context": 128000, "output": 65536 } + "limit": { + "context": 16384, + "input": 16384, + "output": 8192 + }, + "cost": { + "input": 1, + "output": 1.5 + } }, - "gpt-5.1-codex": { - "id": "gpt-5.1-codex", - "name": "GPT-5.1 Codex", - "family": "gpt-codex", + "Steelskull/L3.3-Cu-Mai-R1-70b": { + "id": "Steelskull/L3.3-Cu-Mai-R1-70b", + "name": "Llama 3.3 70B Cu Mai", + "family": "llama", "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text", "image", "audio"], "output": ["text", "image", "audio"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } - }, - "o4-mini": { - "id": "o4-mini", - "name": "o4-mini", - "family": "o-mini", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2024-05", - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.28 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 16384, + "input": 16384, + "output": 16384 + }, + "cost": { + "input": 0.49299999999999994, + "output": 0.49299999999999994 + } }, - "gpt-5-codex": { - "id": "gpt-5-codex", - "name": "GPT-5-Codex", - "family": "gpt-codex", + "Steelskull/L3.3-Nevoria-R1-70b": { + "id": "Steelskull/L3.3-Nevoria-R1-70b", + "name": "Steelskull Nevoria R1 70b", + "family": "llama", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.13 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 16384, + "input": 16384, + "output": 16384 + }, + "cost": { + "input": 0.49299999999999994, + "output": 0.49299999999999994 + } }, - "text-embedding-3-small": { - "id": "text-embedding-3-small", - "name": "text-embedding-3-small", - "family": "text-embedding", + "Steelskull/L3.3-MS-Evayale-70B": { + "id": "Steelskull/L3.3-MS-Evayale-70B", + "name": "Evayale 70b ", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": false, - "release_date": "2024-01-25", - "last_updated": "2024-01-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.02, "output": 0 }, - "limit": { "context": 8191, "output": 1536 } + "limit": { + "context": 16384, + "input": 16384, + "output": 16384 + }, + "cost": { + "input": 0.49299999999999994, + "output": 0.49299999999999994 + } }, - "gpt-3.5-turbo-0125": { - "id": "gpt-3.5-turbo-0125", - "name": "GPT-3.5 Turbo 0125", - "family": "gpt", + "Steelskull/L3.3-Electra-R1-70b": { + "id": "Steelskull/L3.3-Electra-R1-70b", + "name": "Steelskull Electra R1 70b", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "knowledge": "2021-08", - "release_date": "2024-01-25", - "last_updated": "2024-01-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 1.5 }, - "limit": { "context": 16384, "output": 16384 } - }, - "deepseek-v3.2": { - "id": "deepseek-v3.2", - "name": "DeepSeek-V3.2", - "family": "deepseek", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.58, "output": 1.68 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 16384, + "input": 16384, + "output": 16384 + }, + "cost": { + "input": 0.69989, + "output": 0.69989 + } }, - "o1-preview": { - "id": "o1-preview", - "name": "o1-preview", - "family": "o", + "Steelskull/L3.3-MS-Nevoria-70b": { + "id": "Steelskull/L3.3-MS-Nevoria-70b", + "name": "Steelskull Nevoria 70b", + "family": "llama", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2023-09", - "release_date": "2024-09-12", - "last_updated": "2024-09-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 16.5, "output": 66, "cache_read": 8.25 }, - "limit": { "context": 128000, "output": 32768 } - }, - "gpt-4.1-nano": { - "id": "gpt-4.1-nano", - "name": "GPT-4.1 nano", - "family": "gpt-nano", - "attachment": true, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-05", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.03 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 16384, + "input": 16384, + "output": 16384 + }, + "cost": { + "input": 0.49299999999999994, + "output": 0.49299999999999994 + } }, - "meta-llama-3.1-70b-instruct": { - "id": "meta-llama-3.1-70b-instruct", - "name": "Meta-Llama-3.1-70B-Instruct", + "Steelskull/L3.3-MS-Evalebis-70b": { + "id": "Steelskull/L3.3-MS-Evalebis-70b", + "name": "MS Evalebis 70b", "family": "llama", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2.68, "output": 3.54 }, - "limit": { "context": 128000, "output": 32768 } + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 16384, + "input": 16384, + "output": 16384 + }, + "cost": { + "input": 0.49299999999999994, + "output": 0.49299999999999994 + } }, - "phi-3-small-128k-instruct": { - "id": "phi-3-small-128k-instruct", - "name": "Phi-3-small-instruct (128k)", - "family": "phi", + "miromind-ai/mirothinker-v1.5-235b": { + "id": "miromind-ai/mirothinker-v1.5-235b", + "name": "MiroThinker v1.5 235B", + "family": "gpt", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-04-23", - "last_updated": "2024-04-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 128000, "output": 4096 } + "structured_output": false, + "release_date": "2026-01-07", + "last_updated": "2026-01-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "input": 32768, + "output": 4000 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "deepseek-r1-0528": { - "id": "deepseek-r1-0528", - "name": "DeepSeek-R1-0528", - "family": "deepseek-thinking", + "pamanseau/OpenReasoning-Nemotron-32B": { + "id": "pamanseau/OpenReasoning-Nemotron-32B", + "name": "OpenReasoning Nemotron 32B", + "family": "nemotron", "attachment": false, "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-05-28", - "last_updated": "2025-05-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1.35, "output": 5.4 }, - "limit": { "context": 163840, "output": 163840 } - }, - "llama-4-maverick-17b-128e-instruct-fp8": { - "id": "llama-4-maverick-17b-128e-instruct-fp8", - "name": "Llama 4 Maverick 17B 128E Instruct FP8", - "family": "llama", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.25, "output": 1 }, - "limit": { "context": 128000, "output": 8192 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-08-21", + "last_updated": "2025-08-21", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "input": 32768, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4 + } }, - "cohere-embed-v-4-0": { - "id": "cohere-embed-v-4-0", - "name": "Embed v4", - "family": "cohere-embed", - "attachment": true, + "arcee-ai/trinity-mini": { + "id": "arcee-ai/trinity-mini", + "name": "Trinity Mini", + "family": "trinity-mini", + "attachment": false, "reasoning": false, "tool_call": false, - "temperature": false, - "release_date": "2025-04-15", - "last_updated": "2025-04-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.12, "output": 0 }, - "limit": { "context": 128000, "output": 1536 } + "structured_output": false, + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "input": 131072, + "output": 8192 + }, + "cost": { + "input": 0.045000000000000005, + "output": 0.15 + } }, - "phi-4-reasoning-plus": { - "id": "phi-4-reasoning-plus", - "name": "Phi-4-reasoning-plus", - "family": "phi", + "arcee-ai/trinity-large": { + "id": "arcee-ai/trinity-large", + "name": "Trinity Large", + "family": "trinity", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": false, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.125, "output": 0.5 }, - "limit": { "context": 32000, "output": 4096 } + "structured_output": false, + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "input": 131072, + "output": 8192 + }, + "cost": { + "input": 0.25, + "output": 1 + } }, - "grok-3": { - "id": "grok-3", - "name": "Grok 3", - "family": "grok", + "cognitivecomputations/dolphin-2.9.2-qwen2-72b": { + "id": "cognitivecomputations/dolphin-2.9.2-qwen2-72b", + "name": "Dolphin 72b", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-02-27", + "last_updated": "2025-02-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.75 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 8192, + "input": 8192, + "output": 4096 + }, + "cost": { + "input": 0.306, + "output": 0.306 + } }, - "cohere-command-a": { - "id": "cohere-command-a", - "name": "Command A", - "family": "command-a", + "deepcogito/cogito-v1-preview-qwen-32B": { + "id": "deepcogito/cogito-v1-preview-qwen-32B", + "name": "Cogito v1 Preview Qwen 32B", + "family": "qwen", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-06-01", - "release_date": "2025-03-13", - "last_updated": "2025-03-13", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 256000, "output": 8000 } - }, - "gpt-5-nano": { - "id": "gpt-5-nano", - "name": "GPT-5 Nano", - "family": "gpt-nano", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2024-05-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-05-10", + "last_updated": "2025-05-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.05, "output": 0.4, "cache_read": 0.01 }, - "limit": { "context": 272000, "output": 128000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 32768 + }, + "cost": { + "input": 1.7999999999999998, + "output": 1.7999999999999998 + } }, - "grok-4-fast-reasoning": { - "id": "grok-4-fast-reasoning", - "name": "Grok 4 Fast (Reasoning)", - "family": "grok", - "attachment": true, + "deepcogito/cogito-v2.1-671b": { + "id": "deepcogito/cogito-v2.1-671b", + "name": "Cogito v2.1 671B MoE", + "family": "cogito", + "attachment": false, "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-09-19", - "last_updated": "2025-09-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-11-19", + "last_updated": "2025-11-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 1.25, + "output": 1.25 + } }, - "phi-3.5-moe-instruct": { - "id": "phi-3.5-moe-instruct", - "name": "Phi-3.5-MoE-instruct", - "family": "phi", + "Salesforce/Llama-xLAM-2-70b-fc-r": { + "id": "Salesforce/Llama-xLAM-2-70b-fc-r", + "name": "Llama-xLAM-2 70B fc-r", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-08-20", - "last_updated": "2024-08-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.16, "output": 0.64 }, - "limit": { "context": 128000, "output": 4096 } + "structured_output": false, + "release_date": "2025-04-13", + "last_updated": "2025-04-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 2.5 + } }, - "meta-llama-3.1-405b-instruct": { - "id": "meta-llama-3.1-405b-instruct", - "name": "Meta-Llama-3.1-405B-Instruct", - "family": "llama", + "NousResearch 2/hermes-4-405b:thinking": { + "id": "NousResearch 2/hermes-4-405b:thinking", + "name": "Hermes 4 Large (Thinking)", + "family": "nousresearch", "attachment": false, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 5.33, "output": 16 }, - "limit": { "context": 128000, "output": 32768 } + "structured_output": true, + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "phi-3-medium-128k-instruct": { - "id": "phi-3-medium-128k-instruct", - "name": "Phi-3-medium-instruct (128k)", - "family": "phi", + "NousResearch 2/DeepHermes-3-Mistral-24B-Preview": { + "id": "NousResearch 2/DeepHermes-3-Mistral-24B-Preview", + "name": "DeepHermes-3 Mistral 24B (Preview)", + "family": "nousresearch", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-04-23", - "last_updated": "2024-04-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.17, "output": 0.68 }, - "limit": { "context": 128000, "output": 4096 } - }, - "gpt-4.1-mini": { - "id": "gpt-4.1-mini", - "name": "GPT-4.1 mini", - "family": "gpt-mini", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-05", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-05-10", + "last_updated": "2025-05-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 1.6, "cache_read": 0.1 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 128000, + "input": 128000, + "output": 32768 + }, + "cost": { + "input": 0.3, + "output": 0.3 + } }, - "cohere-command-r-08-2024": { - "id": "cohere-command-r-08-2024", - "name": "Command R", - "family": "command-r", + "NousResearch 2/Hermes-4-70B:thinking": { + "id": "NousResearch 2/Hermes-4-70B:thinking", + "name": "Hermes 4 (Thinking)", + "family": "nousresearch", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-06-01", - "release_date": "2024-08-30", - "last_updated": "2024-08-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 128000, "output": 4000 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-09-17", + "last_updated": "2025-09-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 8192 + }, + "cost": { + "input": 0.2006, + "output": 0.39949999999999997 + } }, - "deepseek-v3.1": { - "id": "deepseek-v3.1", - "name": "DeepSeek-V3.1", - "family": "deepseek", + "NousResearch 2/hermes-4-405b": { + "id": "NousResearch 2/hermes-4-405b", + "name": "Hermes 4 Large", + "family": "nousresearch", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-08-21", - "last_updated": "2025-08-21", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.56, "output": 1.68 }, - "limit": { "context": 131072, "output": 131072 } - }, - "gpt-5.1": { - "id": "gpt-5.1", - "name": "GPT-5.1", - "family": "gpt", - "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text", "image", "audio"], "output": ["text", "image", "audio"] }, + "release_date": "2025-08-26", + "last_updated": "2025-08-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 272000, "output": 128000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "phi-4": { - "id": "phi-4", - "name": "Phi-4", - "family": "phi", + "NousResearch 2/hermes-3-llama-3.1-70b": { + "id": "NousResearch 2/hermes-3-llama-3.1-70b", + "name": "Hermes 3 70B", + "family": "nousresearch", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.125, "output": 0.5 }, - "limit": { "context": 128000, "output": 4096 } + "structured_output": false, + "release_date": "2026-01-07", + "last_updated": "2026-01-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 65536, + "input": 65536, + "output": 8192 + }, + "cost": { + "input": 0.408, + "output": 0.408 + } }, - "gpt-3.5-turbo-0301": { - "id": "gpt-3.5-turbo-0301", - "name": "GPT-3.5 Turbo 0301", - "family": "gpt", + "NousResearch 2/hermes-4-70b": { + "id": "NousResearch 2/hermes-4-70b", + "name": "Hermes 4 Medium", + "family": "nousresearch", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "knowledge": "2021-08", - "release_date": "2023-03-01", - "last_updated": "2023-03-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.5, "output": 2 }, - "limit": { "context": 4096, "output": 4096 } - }, - "gpt-5.2": { - "id": "gpt-5.2", - "name": "GPT-5.2", - "family": "gpt", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } - }, - "gpt-5.2-chat": { - "id": "gpt-5.2-chat", - "name": "GPT-5.2 Chat", - "family": "gpt-codex", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-07-03", + "last_updated": "2025-07-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 128000, + "input": 128000, + "output": 8192 + }, + "cost": { + "input": 0.2006, + "output": 0.39949999999999997 + } }, - "mistral-nemo": { - "id": "mistral-nemo", - "name": "Mistral Nemo", - "family": "mistral-nemo", + "soob3123/Veiled-Calla-12B": { + "id": "soob3123/Veiled-Calla-12B", + "name": "Veiled Calla 12B", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-07", - "release_date": "2024-07-18", - "last_updated": "2024-07-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.15 }, - "limit": { "context": 128000, "output": 128000 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-04-13", + "last_updated": "2025-04-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "input": 32768, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 0.3 + } }, - "ministral-3b": { - "id": "ministral-3b", - "name": "Ministral 3B", - "family": "ministral", + "soob3123/GrayLine-Qwen3-8B": { + "id": "soob3123/GrayLine-Qwen3-8B", + "name": "Grayline Qwen3 8B", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-03", - "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.04, "output": 0.04 }, - "limit": { "context": 128000, "output": 8192 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 16384, + "input": 16384, + "output": 32768 + }, + "cost": { + "input": 0.3, + "output": 0.3 + } }, - "text-embedding-ada-002": { - "id": "text-embedding-ada-002", - "name": "text-embedding-ada-002", - "family": "text-embedding", + "soob3123/amoral-gemma3-27B-v2": { + "id": "soob3123/amoral-gemma3-27B-v2", + "name": "Amoral Gemma3 27B v2", + "family": "gemma", "attachment": false, "reasoning": false, "tool_call": false, - "release_date": "2022-12-15", - "last_updated": "2022-12-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-05-23", + "last_updated": "2025-05-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0 }, - "limit": { "context": 8192, "output": 1536 } + "limit": { + "context": 32768, + "input": 32768, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 0.3 + } }, - "deepseek-v3.2-speciale": { - "id": "deepseek-v3.2-speciale", - "name": "DeepSeek-V3.2-Speciale", + "nex-agi/deepseek-v3.1-nex-n1": { + "id": "nex-agi/deepseek-v3.1-nex-n1", + "name": "DeepSeek V3.1 Nex N1", "family": "deepseek", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": false, - "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.58, "output": 1.68 }, - "limit": { "context": 128000, "output": 128000 } + "structured_output": false, + "release_date": "2025-12-10", + "last_updated": "2025-12-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 8192 + }, + "cost": { + "input": 0.27999999999999997, + "output": 0.42000000000000004 + } }, - "llama-3.2-90b-vision-instruct": { - "id": "llama-3.2-90b-vision-instruct", - "name": "Llama-3.2-90B-Vision-Instruct", + "Envoid/Llama-3.05-NT-Storybreaker-Ministral-70B": { + "id": "Envoid/Llama-3.05-NT-Storybreaker-Ministral-70B", + "name": "Llama 3.05 Storybreaker Ministral 70b", "family": "llama", - "attachment": true, + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-09-25", - "last_updated": "2024-09-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2.04, "output": 2.04 }, - "limit": { "context": 128000, "output": 8192 } + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 16384, + "input": 16384, + "output": 8192 + }, + "cost": { + "input": 0.49299999999999994, + "output": 0.49299999999999994 + } }, - "gpt-4": { - "id": "gpt-4", - "name": "GPT-4", - "family": "gpt", + "Envoid/Llama-3.05-Nemotron-Tenyxchat-Storybreaker-70B": { + "id": "Envoid/Llama-3.05-Nemotron-Tenyxchat-Storybreaker-70B", + "name": "Nemotron Tenyxchat Storybreaker 70b", + "family": "nemotron", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2023-11", - "release_date": "2023-03-14", - "last_updated": "2023-03-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 60, "output": 120 }, - "limit": { "context": 8192, "output": 8192 } + "limit": { + "context": 16384, + "input": 16384, + "output": 8192 + }, + "cost": { + "input": 0.49299999999999994, + "output": 0.49299999999999994 + } }, - "mistral-medium-2505": { - "id": "mistral-medium-2505", - "name": "Mistral Medium 3", - "family": "mistral-medium", + "anthracite-org/magnum-v4-72b": { + "id": "anthracite-org/magnum-v4-72b", + "name": "Magnum v4 72B", + "family": "llama", "attachment": true, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-05", - "release_date": "2025-05-07", - "last_updated": "2025-05-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 16384, + "input": 16384, + "output": 8192 + }, + "cost": { + "input": 2.006, + "output": 2.992 + } }, - "gpt-4-32k": { - "id": "gpt-4-32k", - "name": "GPT-4 32K", - "family": "gpt", + "anthracite-org/magnum-v2-72b": { + "id": "anthracite-org/magnum-v2-72b", + "name": "Magnum V2 72B", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2023-11", - "release_date": "2023-03-14", - "last_updated": "2023-03-14", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 60, "output": 120 }, - "limit": { "context": 32768, "output": 32768 } - }, - "grok-3-mini": { - "id": "grok-3-mini", - "name": "Grok 3 Mini", - "family": "grok", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-07-01", + "last_updated": "2024-07-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 0.5, "reasoning": 0.5, "cache_read": 0.075 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 16384, + "input": 16384, + "output": 8192 + }, + "cost": { + "input": 2.006, + "output": 2.992 + } }, - "meta-llama-3-8b-instruct": { - "id": "meta-llama-3-8b-instruct", - "name": "Meta-Llama-3-8B-Instruct", + "ReadyArt/MS3.2-The-Omega-Directive-24B-Unslop-v2.0": { + "id": "ReadyArt/MS3.2-The-Omega-Directive-24B-Unslop-v2.0", + "name": "Omega Directive 24B Unslop v2.0", "family": "llama", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-04-18", - "last_updated": "2024-04-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 0.61 }, - "limit": { "context": 8192, "output": 2048 } + "structured_output": false, + "release_date": "2025-12-08", + "last_updated": "2025-12-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 16384, + "input": 16384, + "output": 32768 + }, + "cost": { + "input": 0.5, + "output": 0.5 + } }, - "phi-3.5-mini-instruct": { - "id": "phi-3.5-mini-instruct", - "name": "Phi-3.5-mini-instruct", - "family": "phi", + "ReadyArt/The-Omega-Abomination-L-70B-v1.0": { + "id": "ReadyArt/The-Omega-Abomination-L-70B-v1.0", + "name": "The Omega Abomination V1", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-08-20", - "last_updated": "2024-08-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.13, "output": 0.52 }, - "limit": { "context": 128000, "output": 4096 } + "structured_output": false, + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 16384, + "input": 16384, + "output": 16384 + }, + "cost": { + "input": 0.7, + "output": 0.95 + } }, - "meta-llama-3-70b-instruct": { - "id": "meta-llama-3-70b-instruct", - "name": "Meta-Llama-3-70B-Instruct", + "undi95/remm-slerp-l2-13b": { + "id": "undi95/remm-slerp-l2-13b", + "name": "ReMM SLERP 13B", "family": "llama", - "attachment": false, + "attachment": true, "reasoning": false, "tool_call": false, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-04-18", - "last_updated": "2024-04-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2.68, "output": 3.54 }, - "limit": { "context": 8192, "output": 2048 } + "structured_output": false, + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 6144, + "input": 6144, + "output": 4096 + }, + "cost": { + "input": 0.7989999999999999, + "output": 1.2069999999999999 + } }, - "cohere-command-r-plus-08-2024": { - "id": "cohere-command-r-plus-08-2024", - "name": "Command R+", - "family": "command-r", + "MarinaraSpaghetti/NemoMix-Unleashed-12B": { + "id": "MarinaraSpaghetti/NemoMix-Unleashed-12B", + "name": "NemoMix 12B Unleashed", + "family": "mistral-nemo", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-06-01", - "release_date": "2024-08-30", - "last_updated": "2024-08-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 128000, "output": 4000 } + "tool_call": false, + "structured_output": false, + "release_date": "2024-07-01", + "last_updated": "2024-07-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "input": 32768, + "output": 8192 + }, + "cost": { + "input": 0.49299999999999994, + "output": 0.49299999999999994 + } }, - "gpt-5-chat": { - "id": "gpt-5-chat", - "name": "GPT-5 Chat", - "family": "gpt-codex", + "allenai/molmo-2-8b": { + "id": "allenai/molmo-2-8b", + "name": "Molmo 2 8B", + "family": "allenai", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": false, - "temperature": false, - "knowledge": "2024-10-24", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": false, + "release_date": "2026-02-14", + "last_updated": "2026-02-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.13 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 36864, + "input": 36864, + "output": 36864 + }, + "cost": { + "input": 0.2, + "output": 0.2 + } }, - "mistral-small-2503": { - "id": "mistral-small-2503", - "name": "Mistral Small 3.1", - "family": "mistral-small", - "attachment": true, + "allenai/olmo-3.1-32b-instruct": { + "id": "allenai/olmo-3.1-32b-instruct", + "name": "Olmo 3.1 32B Instruct", + "family": "allenai", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-09", - "release_date": "2025-03-01", - "last_updated": "2025-03-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2026-01-25", + "last_updated": "2026-01-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 65536, + "input": 65536, + "output": 8192 + }, + "cost": { + "input": 0.2, + "output": 0.6 + } }, - "mai-ds-r1": { - "id": "mai-ds-r1", - "name": "MAI-DS-R1", - "family": "mai", + "allenai/olmo-3.1-32b-think": { + "id": "allenai/olmo-3.1-32b-think", + "name": "Olmo 3.1 32B Think", + "family": "allenai", "attachment": false, "reasoning": true, "tool_call": false, - "temperature": true, - "knowledge": "2024-06", - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2026-01-25", + "last_updated": "2026-01-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.35, "output": 5.4 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 65536, + "input": 65536, + "output": 8192 + }, + "cost": { + "input": 0.15, + "output": 0.5 + } }, - "o3": { - "id": "o3", - "name": "o3", - "family": "o", - "attachment": true, + "allenai/olmo-3-32b-think": { + "id": "allenai/olmo-3-32b-think", + "name": "Olmo 3 32B Think", + "family": "allenai", + "attachment": false, "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2024-05", - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-11-01", + "last_updated": "2025-11-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8, "cache_read": 0.5 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 0.44999999999999996 + } }, - "o1": { - "id": "o1", - "name": "o1", - "family": "o", + "stepfun-ai/step-3.5-flash:thinking": { + "id": "stepfun-ai/step-3.5-flash:thinking", + "name": "Step 3.5 Flash Thinking", + "family": "step", "attachment": false, "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2023-09", - "release_date": "2024-12-05", - "last_updated": "2024-12-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2026-02-02", + "last_updated": "2026-02-02", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 60, "cache_read": 7.5 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 256000, + "input": 256000, + "output": 256000 + }, + "cost": { + "input": 0.2, + "output": 0.5 + } }, - "gpt-5.4": { - "id": "gpt-5.4", - "name": "GPT-5.4", - "family": "gpt", - "attachment": true, + "stepfun-ai/step-3.5-flash": { + "id": "stepfun-ai/step-3.5-flash", + "name": "Step 3.5 Flash", + "family": "step", + "attachment": false, "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-05", - "last_updated": "2026-03-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2026-02-02", + "last_updated": "2026-02-02", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 15, "cache_read": 0.25 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 256000, + "input": 256000, + "output": 256000 + }, + "cost": { + "input": 0.2, + "output": 0.5 + } }, - "gpt-5.1-chat": { - "id": "gpt-5.1-chat", - "name": "GPT-5.1 Chat", - "family": "gpt-codex", - "attachment": true, + "zai-org/glm-4.7": { + "id": "zai-org/glm-4.7", + "name": "GLM 4.7", + "family": "glm", + "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text", "image", "audio"], "output": ["text", "image", "audio"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 128000, "output": 16384 } + "release_date": "2026-01-29", + "last_updated": "2026-01-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 200000, + "input": 200000, + "output": 128000 + }, + "cost": { + "input": 0.15, + "output": 0.8 + } }, - "gpt-3.5-turbo-instruct": { - "id": "gpt-3.5-turbo-instruct", - "name": "GPT-3.5 Turbo Instruct", - "family": "gpt", + "zai-org/glm-5": { + "id": "zai-org/glm-5", + "name": "GLM 5", + "family": "glm", "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2021-08", - "release_date": "2023-09-21", - "last_updated": "2023-09-21", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.5, "output": 2 }, - "limit": { "context": 4096, "output": 4096 } - }, - "model-router": { - "id": "model-router", - "name": "Model Router", - "family": "model-router", - "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "release_date": "2025-05-19", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.14, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "structured_output": true, + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 200000, + "input": 200000, + "output": 128000 + }, + "cost": { + "input": 0.3, + "output": 2.55 + } }, - "phi-3-medium-4k-instruct": { - "id": "phi-3-medium-4k-instruct", - "name": "Phi-3-medium-instruct (4k)", - "family": "phi", + "zai-org/glm-5.1": { + "id": "zai-org/glm-5.1", + "name": "GLM 5.1", + "family": "glm", "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-04-23", - "last_updated": "2024-04-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "release_date": "2026-03-27", + "last_updated": "2026-03-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.17, "output": 0.68 }, - "limit": { "context": 4096, "output": 1024 } + "limit": { + "context": 200000, + "input": 200000, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 2.55 + } }, - "phi-3-mini-4k-instruct": { - "id": "phi-3-mini-4k-instruct", - "name": "Phi-3-mini-instruct (4k)", - "family": "phi", + "zai-org/glm-5.1:thinking": { + "id": "zai-org/glm-5.1:thinking", + "name": "GLM 5.1 Thinking", + "family": "glm", "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-04-23", - "last_updated": "2024-04-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.13, "output": 0.52 }, - "limit": { "context": 4096, "output": 1024 } - }, - "llama-3.2-11b-vision-instruct": { - "id": "llama-3.2-11b-vision-instruct", - "name": "Llama-3.2-11B-Vision-Instruct", - "family": "llama", - "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-09-25", - "last_updated": "2024-09-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "release_date": "2026-03-27", + "last_updated": "2026-03-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.37, "output": 0.37 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 200000, + "input": 200000, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 2.55 + } }, - "llama-4-scout-17b-16e-instruct": { - "id": "llama-4-scout-17b-16e-instruct", - "name": "Llama 4 Scout 17B 16E Instruct", - "family": "llama", - "attachment": true, - "reasoning": false, + "zai-org/glm-5:thinking": { + "id": "zai-org/glm-5:thinking", + "name": "GLM 5 Thinking", + "family": "glm", + "attachment": false, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.78 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 200000, + "input": 200000, + "output": 128000 + }, + "cost": { + "input": 0.3, + "output": 2.55 + } }, - "phi-4-mini-reasoning": { - "id": "phi-4-mini-reasoning", - "name": "Phi-4-mini-reasoning", - "family": "phi", + "zai-org/glm-4.7-flash": { + "id": "zai-org/glm-4.7-flash", + "name": "GLM 4.7 Flash", + "family": "glm-flash", "attachment": false, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "release_date": "2026-01-19", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.075, "output": 0.3 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 200000, + "input": 200000, + "output": 128000 + }, + "cost": { + "input": 0.07, + "output": 0.4 + } }, - "codex-mini": { - "id": "codex-mini", - "name": "Codex Mini", - "family": "gpt-codex-mini", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2024-04", - "release_date": "2025-05-16", - "last_updated": "2025-05-16", - "modalities": { "input": ["text"], "output": ["text"] }, + "featherless-ai/Qwerky-72B": { + "id": "featherless-ai/Qwerky-72B", + "name": "Qwerky 72B", + "family": "qwerky", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-03-20", + "last_updated": "2025-03-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.5, "output": 6, "cache_read": 0.375 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 32000, + "input": 32000, + "output": 8192 + }, + "cost": { + "input": 0.5, + "output": 0.5 + } }, - "gpt-4.1": { - "id": "gpt-4.1", - "name": "GPT-4.1", - "family": "gpt", - "attachment": true, + "mlabonne/NeuralDaredevil-8B-abliterated": { + "id": "mlabonne/NeuralDaredevil-8B-abliterated", + "name": "Neural Daredevil 8B abliterated", + "family": "llama", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-05", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8, "cache_read": 0.5 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 8192, + "input": 8192, + "output": 8192 + }, + "cost": { + "input": 0.44, + "output": 0.44 + } }, - "gpt-4o-mini": { - "id": "gpt-4o-mini", - "name": "GPT-4o mini", - "family": "gpt-mini", + "raifle/sorcererlm-8x22b": { + "id": "raifle/sorcererlm-8x22b", + "name": "SorcererLM 8x22B", + "family": "mixtral", "attachment": true, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2023-09", - "release_date": "2024-07-18", - "last_updated": "2024-07-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.6, "cache_read": 0.08 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 16000, + "input": 16000, + "output": 8192 + }, + "cost": { + "input": 4.505, + "output": 4.505 + } }, - "mistral-large-2411": { - "id": "mistral-large-2411", - "name": "Mistral Large 24.11", - "family": "mistral-large", + "mistralai/mixtral-8x7b-instruct-v0.1": { + "id": "mistralai/mixtral-8x7b-instruct-v0.1", + "name": "Mixtral 8x7B", + "family": "mixtral", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-09", - "release_date": "2024-11-01", - "last_updated": "2024-11-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 6 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 32768, + "input": 32768, + "output": 32768 + }, + "cost": { + "input": 0.27, + "output": 0.27 + } }, - "gpt-4-turbo-vision": { - "id": "gpt-4-turbo-vision", - "name": "GPT-4 Turbo Vision", - "family": "gpt", - "attachment": true, + "mistralai/mistral-saba": { + "id": "mistralai/mistral-saba", + "name": "Mistral Saba", + "family": "mistral", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2023-11", - "release_date": "2023-11-06", - "last_updated": "2024-04-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 10, "output": 30 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 32000, + "input": 32000, + "output": 32768 + }, + "cost": { + "input": 0.1989, + "output": 0.595 + } }, - "gpt-5-mini": { - "id": "gpt-5-mini", - "name": "GPT-5 Mini", - "family": "gpt-mini", + "mistralai/mistral-large-3-675b-instruct-2512": { + "id": "mistralai/mistral-large-3-675b-instruct-2512", + "name": "Mistral Large 3 675B", + "family": "mistral-large", "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2024-05-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-12-02", + "last_updated": "2025-12-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.03 }, - "limit": { "context": 272000, "output": 128000 } + "limit": { + "context": 262144, + "input": 262144, + "output": 256000 + }, + "cost": { + "input": 1, + "output": 3 + } }, - "gpt-5.3-codex": { - "id": "gpt-5.3-codex", - "name": "GPT-5.3 Codex", - "family": "gpt-codex", + "mistralai/devstral-2-123b-instruct-2512": { + "id": "mistralai/devstral-2-123b-instruct-2512", + "name": "Devstral 2 123B", + "family": "devstral", "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-02-24", - "last_updated": "2026-02-24", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-12-09", + "last_updated": "2025-12-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 262144, + "input": 262144, + "output": 65536 + }, + "cost": { + "input": 0.4, + "output": 1.4 + } }, - "codestral-2501": { - "id": "codestral-2501", - "name": "Codestral 25.01", + "mistralai/codestral-2508": { + "id": "mistralai/codestral-2508", + "name": "Codestral 2508", "family": "codestral", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-03", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-08-01", + "last_updated": "2025-08-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 0.9 }, - "limit": { "context": 256000, "output": 256000 } + "limit": { + "context": 256000, + "input": 256000, + "output": 32768 + }, + "cost": { + "input": 0.3, + "output": 0.8999999999999999 + } }, - "grok-code-fast-1": { - "id": "grok-code-fast-1", - "name": "Grok Code Fast 1", - "family": "grok", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2025-08-28", - "last_updated": "2025-08-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "mistralai/ministral-14b-instruct-2512": { + "id": "mistralai/ministral-14b-instruct-2512", + "name": "Ministral 3 14B", + "family": "ministral", + "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-12-02", + "last_updated": "2025-12-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 1.5, "cache_read": 0.02 }, - "limit": { "context": 256000, "output": 10000 } + "limit": { + "context": 262144, + "input": 262144, + "output": 32768 + }, + "cost": { + "input": 0.1, + "output": 0.4 + } }, - "phi-4-reasoning": { - "id": "phi-4-reasoning", - "name": "Phi-4-reasoning", - "family": "phi", + "mistralai/mistral-tiny": { + "id": "mistralai/mistral-tiny", + "name": "Mistral Tiny", + "family": "mistral", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": false, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.125, "output": 0.5 }, - "limit": { "context": 32000, "output": 4096 } + "structured_output": false, + "release_date": "2023-12-11", + "last_updated": "2024-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32000, + "input": 32000, + "output": 8192 + }, + "cost": { + "input": 0.25499999999999995, + "output": 0.25499999999999995 + } }, - "phi-4-mini": { - "id": "phi-4-mini", - "name": "Phi-4-mini", - "family": "phi", + "mistralai/ministral-8b-2512": { + "id": "mistralai/ministral-8b-2512", + "name": "Ministral 8B", + "family": "ministral", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.075, "output": 0.3 }, - "limit": { "context": 128000, "output": 4096 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-12-04", + "last_updated": "2025-12-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "input": 262144, + "output": 32768 + }, + "cost": { + "input": 0.15, + "output": 0.15 + } }, - "gpt-3.5-turbo-1106": { - "id": "gpt-3.5-turbo-1106", - "name": "GPT-3.5 Turbo 1106", - "family": "gpt", + "mistralai/mixtral-8x22b-instruct-v0.1": { + "id": "mistralai/mixtral-8x22b-instruct-v0.1", + "name": "Mixtral 8x22B", + "family": "mixtral", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "knowledge": "2021-08", - "release_date": "2023-11-06", - "last_updated": "2023-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 2 }, - "limit": { "context": 16384, "output": 16384 } + "limit": { + "context": 65536, + "input": 65536, + "output": 32768 + }, + "cost": { + "input": 0.8999999999999999, + "output": 0.8999999999999999 + } }, - "grok-4": { - "id": "grok-4", - "name": "Grok 4", - "family": "grok", + "mistralai/mistral-medium-3.1": { + "id": "mistralai/mistral-medium-3.1", + "name": "Mistral Medium 3.1", + "family": "mistral-medium", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "reasoning": 15, "cache_read": 0.75 }, - "limit": { "context": 256000, "output": 64000 } + "limit": { + "context": 131072, + "input": 131072, + "output": 32768 + }, + "cost": { + "input": 0.4, + "output": 2 + } }, - "grok-4-fast-non-reasoning": { - "id": "grok-4-fast-non-reasoning", - "name": "Grok 4 Fast (Non-Reasoning)", - "family": "grok", - "attachment": true, + "mistralai/ministral-3b-2512": { + "id": "mistralai/ministral-3b-2512", + "name": "Ministral 3B", + "family": "ministral", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-09-19", - "last_updated": "2025-09-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-12-04", + "last_updated": "2025-12-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 131072, + "input": 131072, + "output": 32768 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } }, - "gpt-4o": { - "id": "gpt-4o", - "name": "GPT-4o", - "family": "gpt", - "attachment": true, + "mistralai/Mistral-Nemo-Instruct-2407": { + "id": "mistralai/Mistral-Nemo-Instruct-2407", + "name": "Mistral Nemo", + "family": "mistral-nemo", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2023-09", - "release_date": "2024-05-13", - "last_updated": "2024-05-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 10, "cache_read": 1.25 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 16384, + "input": 16384, + "output": 8192 + }, + "cost": { + "input": 0.1003, + "output": 0.1207 + } }, - "gpt-4-turbo": { - "id": "gpt-4-turbo", - "name": "GPT-4 Turbo", - "family": "gpt", + "mistralai/mistral-medium-3": { + "id": "mistralai/mistral-medium-3", + "name": "Mistral Medium 3", + "family": "mistral-medium", "attachment": true, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2023-11", - "release_date": "2023-11-06", - "last_updated": "2024-04-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 10, "output": 30 }, - "limit": { "context": 128000, "output": 4096 } - }, - "kimi-k2.5": { - "id": "kimi-k2.5", - "name": "Kimi K2.5", - "family": "kimi", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": true, - "structured_output": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-02-06", - "last_updated": "2026-02-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 3 }, - "limit": { "context": 262144, "output": 262144 }, - "provider": { - "npm": "@ai-sdk/openai-compatible", - "api": "https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/models", - "shape": "completions" + "limit": { + "context": 131072, + "input": 131072, + "output": 32768 + }, + "cost": { + "input": 0.4, + "output": 2 } }, - "phi-3-small-8k-instruct": { - "id": "phi-3-small-8k-instruct", - "name": "Phi-3-small-instruct (8k)", - "family": "phi", - "attachment": false, + "mistralai/mistral-7b-instruct": { + "id": "mistralai/mistral-7b-instruct", + "name": "Mistral 7B Instruct", + "family": "mistral", + "attachment": true, "reasoning": false, "tool_call": false, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-04-23", - "last_updated": "2024-04-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 8192, "output": 2048 } + "structured_output": false, + "release_date": "2024-05-27", + "last_updated": "2024-05-27", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "input": 32768, + "output": 8192 + }, + "cost": { + "input": 0.0544, + "output": 0.0544 + } }, - "phi-3-mini-128k-instruct": { - "id": "phi-3-mini-128k-instruct", - "name": "Phi-3-mini-instruct (128k)", - "family": "phi", + "mistralai/Devstral-Small-2505": { + "id": "mistralai/Devstral-Small-2505", + "name": "Mistral Devstral Small 2505", + "family": "devstral", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-04-23", - "last_updated": "2024-04-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.13, "output": 0.52 }, - "limit": { "context": 128000, "output": 4096 } + "structured_output": false, + "release_date": "2025-08-02", + "last_updated": "2025-08-02", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "input": 32768, + "output": 8192 + }, + "cost": { + "input": 0.060000000000000005, + "output": 0.060000000000000005 + } }, - "llama-3.3-70b-instruct": { - "id": "llama-3.3-70b-instruct", - "name": "Llama-3.3-70B-Instruct", - "family": "llama", + "mistralai/mistral-small-creative": { + "id": "mistralai/mistral-small-creative", + "name": "Mistral Small Creative", + "family": "mistral-small", "attachment": false, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.71, "output": 0.71 }, - "limit": { "context": 128000, "output": 32768 } - }, - "gpt-5": { - "id": "gpt-5", - "name": "GPT-5", - "family": "gpt", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-12-16", + "last_updated": "2025-12-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.13 }, - "limit": { "context": 272000, "output": 128000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 32768 + }, + "cost": { + "input": 0.1, + "output": 0.3 + } }, - "deepseek-r1": { - "id": "deepseek-r1", - "name": "DeepSeek-R1", - "family": "deepseek-thinking", + "mistralai/mistral-large": { + "id": "mistralai/mistral-large", + "name": "Mistral Large 2411", + "family": "mistral-large", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": false, - "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1.35, "output": 5.4 }, - "limit": { "context": 163840, "output": 163840 } + "structured_output": false, + "release_date": "2024-02-26", + "last_updated": "2024-02-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 256000 + }, + "cost": { + "input": 2.006, + "output": 6.001 + } }, - "kimi-k2-thinking": { - "id": "kimi-k2-thinking", - "name": "Kimi K2 Thinking", - "family": "kimi-thinking", + "mistralai/ministral-14b-2512": { + "id": "mistralai/ministral-14b-2512", + "name": "Ministral 14B", + "family": "ministral", "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": true, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-11-06", - "last_updated": "2025-12-02", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.5, "cache_read": 0.15 }, - "limit": { "context": 262144, "output": 262144 } + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-12-04", + "last_updated": "2025-12-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "input": 262144, + "output": 32768 + }, + "cost": { + "input": 0.2, + "output": 0.2 + } }, - "meta-llama-3.1-8b-instruct": { - "id": "meta-llama-3.1-8b-instruct", - "name": "Meta-Llama-3.1-8B-Instruct", + "shisa-ai/shisa-v2.1-llama3.3-70b": { + "id": "shisa-ai/shisa-v2.1-llama3.3-70b", + "name": "Shisa V2.1 Llama 3.3 70B", "family": "llama", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 0.61 }, - "limit": { "context": 128000, "output": 32768 } + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "input": 32768, + "output": 4096 + }, + "cost": { + "input": 0.5, + "output": 0.5 + } }, - "deepseek-v3-0324": { - "id": "deepseek-v3-0324", - "name": "DeepSeek-V3-0324", - "family": "deepseek", + "shisa-ai/shisa-v2-llama3.3-70b": { + "id": "shisa-ai/shisa-v2-llama3.3-70b", + "name": "Shisa V2 Llama 3.3 70B", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-03-24", - "last_updated": "2025-03-24", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1.14, "output": 4.56 }, - "limit": { "context": 131072, "output": 131072 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-26", + "last_updated": "2025-07-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 0.5, + "output": 0.5 + } }, - "gpt-3.5-turbo-0613": { - "id": "gpt-3.5-turbo-0613", - "name": "GPT-3.5 Turbo 0613", - "family": "gpt", + "meta-llama/llama-3.3-70b-instruct": { + "id": "meta-llama/llama-3.3-70b-instruct", + "name": "Llama 3.3 70b Instruct", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2021-08", - "release_date": "2023-06-13", - "last_updated": "2023-06-13", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "release_date": "2025-02-27", + "last_updated": "2025-02-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 4 }, - "limit": { "context": 16384, "output": 16384 } + "limit": { + "context": 131072, + "input": 131072, + "output": 16384 + }, + "cost": { + "input": 0.05, + "output": 0.23 + } }, - "gpt-5-pro": { - "id": "gpt-5-pro", - "name": "GPT-5 Pro", - "family": "gpt-pro", + "meta-llama/llama-4-scout": { + "id": "meta-llama/llama-4-scout", + "name": "Llama 4 Scout", + "family": "llama", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-10-06", - "last_updated": "2025-10-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 120 }, - "limit": { "context": 400000, "output": 272000 } + "limit": { + "context": 328000, + "input": 328000, + "output": 65536 + }, + "cost": { + "input": 0.085, + "output": 0.46 + } }, - "o3-mini": { - "id": "o3-mini", - "name": "o3-mini", - "family": "o-mini", - "attachment": false, - "reasoning": true, + "meta-llama/llama-4-maverick": { + "id": "meta-llama/llama-4-maverick", + "name": "Llama 4 Maverick", + "family": "llama", + "attachment": true, + "reasoning": false, "tool_call": true, - "temperature": false, - "knowledge": "2024-05", - "release_date": "2024-12-20", - "last_updated": "2025-01-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.55 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 1048576, + "input": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.18000000000000002, + "output": 0.8 + } }, - "cohere-embed-v3-english": { - "id": "cohere-embed-v3-english", - "name": "Embed v3 English", - "family": "cohere-embed", + "meta-llama/llama-3.2-90b-vision-instruct": { + "id": "meta-llama/llama-3.2-90b-vision-instruct", + "name": "Llama 3.2 Medium", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": false, - "release_date": "2023-11-07", - "last_updated": "2023-11-07", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0 }, - "limit": { "context": 512, "output": 1024 } + "structured_output": false, + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "input": 131072, + "output": 16384 + }, + "cost": { + "input": 0.9009999999999999, + "output": 0.9009999999999999 + } }, - "gpt-5.4-pro": { - "id": "gpt-5.4-pro", - "name": "GPT-5.4 Pro", - "family": "gpt-pro", + "meta-llama/llama-3.2-3b-instruct": { + "id": "meta-llama/llama-3.2-3b-instruct", + "name": "Llama 3.2 3b Instruct", + "family": "llama", "attachment": true, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-05", - "last_updated": "2026-03-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2024-09-25", + "last_updated": "2024-09-25", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 30, "output": 180 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 131072, + "input": 131072, + "output": 8192 + }, + "cost": { + "input": 0.0306, + "output": 0.0493 + } }, - "cohere-embed-v3-multilingual": { - "id": "cohere-embed-v3-multilingual", - "name": "Embed v3 Multilingual", - "family": "cohere-embed", + "meta-llama/llama-3.1-8b-instruct": { + "id": "meta-llama/llama-3.1-8b-instruct", + "name": "Llama 3.1 8b Instruct", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": false, - "release_date": "2023-11-07", - "last_updated": "2023-11-07", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0 }, - "limit": { "context": 512, "output": 1024 } + "structured_output": false, + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "input": 131072, + "output": 16384 + }, + "cost": { + "input": 0.0544, + "output": 0.0544 + } }, - "phi-4-multimodal": { - "id": "phi-4-multimodal", - "name": "Phi-4-multimodal", - "family": "phi", - "attachment": true, + "GalrionSoftworks/MN-LooseCannon-12B-v1": { + "id": "GalrionSoftworks/MN-LooseCannon-12B-v1", + "name": "MN-LooseCannon-12B-v1", + "family": "mistral-nemo", + "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text", "image", "audio"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.08, "output": 0.32, "input_audio": 4 }, - "limit": { "context": 128000, "output": 4096 } + "structured_output": false, + "release_date": "2024-07-01", + "last_updated": "2024-07-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 16384, + "input": 16384, + "output": 8192 + }, + "cost": { + "input": 0.49299999999999994, + "output": 0.49299999999999994 + } }, - "gpt-5.1-codex-mini": { - "id": "gpt-5.1-codex-mini", - "name": "GPT-5.1 Codex Mini", - "family": "gpt-codex", + "baseten/Kimi-K2-Instruct-FP4": { + "id": "baseten/Kimi-K2-Instruct-FP4", + "name": "Kimi K2 0711 Instruct FP4", + "family": "kimi", "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-11", + "last_updated": "2025-07-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.025 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 131072 + }, + "cost": { + "input": 0.1, + "output": 2 + } }, - "text-embedding-3-large": { - "id": "text-embedding-3-large", - "name": "text-embedding-3-large", - "family": "text-embedding", + "Gryphe/MythoMax-L2-13b": { + "id": "Gryphe/MythoMax-L2-13b", + "name": "MythoMax 13B", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": false, - "release_date": "2024-01-25", - "last_updated": "2024-01-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2025-08-08", + "last_updated": "2025-08-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.13, "output": 0 }, - "limit": { "context": 8191, "output": 3072 } + "limit": { + "context": 4000, + "input": 4000, + "output": 4096 + }, + "cost": { + "input": 0.1003, + "output": 0.1003 + } }, - "gpt-5.2-codex": { - "id": "gpt-5.2-codex", - "name": "GPT-5.2 Codex", - "family": "gpt-codex", - "attachment": false, + "x-ai/grok-4-fast:thinking": { + "id": "x-ai/grok-4-fast:thinking", + "name": "Grok 4 Fast Thinking", + "family": "grok", + "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-01-14", - "last_updated": "2026-01-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "output": 128000 } - } - } - }, - "zai": { - "id": "zai", - "env": ["ZHIPU_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.z.ai/api/paas/v4", - "name": "Z.AI", - "doc": "https://docs.z.ai/guides/overview/pricing", - "models": { - "glm-4.7-flash": { - "id": "glm-4.7-flash", - "name": "GLM-4.7-Flash", - "family": "glm-flash", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-01-19", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 200000, "output": 131072 } + "limit": { + "context": 2000000, + "input": 2000000, + "output": 131072 + }, + "cost": { + "input": 0.2, + "output": 0.5 + } }, - "glm-5-turbo": { - "id": "glm-5-turbo", - "name": "GLM-5-Turbo", - "family": "glm", - "attachment": false, + "x-ai/grok-4-07-09": { + "id": "x-ai/grok-4-07-09", + "name": "Grok 4", + "family": "grok", + "attachment": true, "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, - "temperature": true, - "release_date": "2026-03-16", - "last_updated": "2026-03-16", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.2, "output": 4, "cache_read": 0.24, "cache_write": 0 }, - "limit": { "context": 200000, "output": 131072 } + "limit": { + "context": 256000, + "input": 256000, + "output": 131072 + }, + "cost": { + "input": 3, + "output": 15 + } }, - "glm-4.5": { - "id": "glm-4.5", - "name": "GLM-4.5", - "family": "glm", - "attachment": false, + "x-ai/grok-4-fast": { + "id": "x-ai/grok-4-fast", + "name": "Grok 4 Fast", + "family": "grok", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.2, "cache_read": 0.11, "cache_write": 0 }, - "limit": { "context": 131072, "output": 98304 } + "structured_output": true, + "release_date": "2025-09-20", + "last_updated": "2025-09-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "input": 2000000, + "output": 131072 + }, + "cost": { + "input": 0.2, + "output": 0.5 + } }, - "glm-4.7-flashx": { - "id": "glm-4.7-flashx", - "name": "GLM-4.7-FlashX", - "family": "glm-flash", + "x-ai/grok-code-fast-1": { + "id": "x-ai/grok-code-fast-1", + "name": "Grok Code Fast 1", + "family": "grok", "attachment": false, "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-01-19", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.07, "output": 0.4, "cache_read": 0.01, "cache_write": 0 }, - "limit": { "context": 200000, "output": 131072 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-08-28", + "last_updated": "2025-08-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "input": 256000, + "output": 131072 + }, + "cost": { + "input": 0.2, + "output": 1.5 + } }, - "glm-4.6": { - "id": "glm-4.6", - "name": "GLM-4.6", - "family": "glm", - "attachment": false, + "x-ai/grok-4.1-fast": { + "id": "x-ai/grok-4.1-fast", + "name": "Grok 4.1 Fast", + "family": "grok", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.2, "cache_read": 0.11, "cache_write": 0 }, - "limit": { "context": 204800, "output": 131072 } + "structured_output": true, + "release_date": "2025-11-20", + "last_updated": "2025-11-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "input": 2000000, + "output": 131072 + }, + "cost": { + "input": 0.2, + "output": 0.5 + } }, - "glm-4.6v": { - "id": "glm-4.6v", - "name": "GLM-4.6V", - "family": "glm", + "x-ai/grok-4.1-fast-reasoning": { + "id": "x-ai/grok-4.1-fast-reasoning", + "name": "Grok 4.1 Fast Reasoning", + "family": "grok", "attachment": true, "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-08", - "last_updated": "2025-12-08", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 0.9 }, - "limit": { "context": 128000, "output": 32768 } + "tool_call": false, + "structured_output": false, + "release_date": "2025-11-20", + "last_updated": "2025-11-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "input": 2000000, + "output": 131072 + }, + "cost": { + "input": 0.2, + "output": 0.5 + } }, - "glm-4.5-flash": { - "id": "glm-4.5-flash", - "name": "GLM-4.5-Flash", - "family": "glm-flash", + "tencent/Hunyuan-MT-7B": { + "id": "tencent/Hunyuan-MT-7B", + "name": "Hunyuan MT 7B", + "family": "hunyuan", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 131072, "output": 98304 } + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-09-18", + "last_updated": "2025-09-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "input": 8192, + "output": 8192 + }, + "cost": { + "input": 10, + "output": 20 + } }, - "glm-5": { - "id": "glm-5", - "name": "GLM-5", - "family": "glm", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1, "output": 3.2, "cache_read": 0.2, "cache_write": 0 }, - "limit": { "context": 204800, "output": 131072 } - }, - "glm-4.5-air": { - "id": "glm-4.5-air", - "name": "GLM-4.5-Air", - "family": "glm-air", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 1.1, "cache_read": 0.03, "cache_write": 0 }, - "limit": { "context": 131072, "output": 98304 } - }, - "glm-4.5v": { - "id": "glm-4.5v", - "name": "GLM-4.5V", - "family": "glm", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-08-11", - "last_updated": "2025-08-11", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 1.8 }, - "limit": { "context": 64000, "output": 16384 } - }, - "glm-4.7": { - "id": "glm-4.7", - "name": "GLM-4.7", - "family": "glm", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.2, "cache_read": 0.11, "cache_write": 0 }, - "limit": { "context": 204800, "output": 131072 } - } - } - }, - "xai": { - "id": "xai", - "env": ["XAI_API_KEY"], - "npm": "@ai-sdk/xai", - "name": "xAI", - "doc": "https://docs.x.ai/docs/models", - "models": { - "grok-2-vision-1212": { - "id": "grok-2-vision-1212", - "name": "Grok 2 Vision (1212)", - "family": "grok", + "microsoft/wizardlm-2-8x22b": { + "id": "microsoft/wizardlm-2-8x22b", + "name": "WizardLM-2 8x22B", + "family": "gpt", "attachment": true, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2024-08-20", - "last_updated": "2024-12-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-04-15", + "last_updated": "2025-04-15", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 10, "cache_read": 2 }, - "limit": { "context": 8192, "output": 4096 } + "limit": { + "context": 65536, + "input": 65536, + "output": 8192 + }, + "cost": { + "input": 0.49299999999999994, + "output": 0.49299999999999994 + } }, - "grok-4-fast": { - "id": "grok-4-fast", - "name": "Grok 4 Fast", - "family": "grok", + "microsoft/MAI-DS-R1-FP8": { + "id": "microsoft/MAI-DS-R1-FP8", + "name": "Microsoft DeepSeek R1", + "family": "deepseek", "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-09-19", - "last_updated": "2025-09-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 0.3 + } }, - "grok-2-latest": { - "id": "grok-2-latest", - "name": "Grok 2 Latest", - "family": "grok", + "cohere/command-r": { + "id": "cohere/command-r", + "name": "Cohere: Command R", + "family": "command-r", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2024-08-20", - "last_updated": "2024-12-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-03-11", + "last_updated": "2024-03-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 10, "cache_read": 2 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 128000, + "input": 128000, + "output": 4096 + }, + "cost": { + "input": 0.476, + "output": 1.428 + } }, - "grok-4-fast-non-reasoning": { - "id": "grok-4-fast-non-reasoning", - "name": "Grok 4 Fast (Non-Reasoning)", - "family": "grok", - "attachment": true, + "cohere/command-r-plus-08-2024": { + "id": "cohere/command-r-plus-08-2024", + "name": "Cohere: Command R+", + "family": "command-r", + "attachment": false, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-09-19", - "last_updated": "2025-09-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": false, + "release_date": "2024-08-30", + "last_updated": "2024-08-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 4096 + }, + "cost": { + "input": 2.856, + "output": 14.246 + } }, - "grok-4": { - "id": "grok-4", - "name": "Grok 4", - "family": "grok", + "chutesai/Mistral-Small-3.2-24B-Instruct-2506": { + "id": "chutesai/Mistral-Small-3.2-24B-Instruct-2506", + "name": "Mistral Small 3.2 24b Instruct", + "family": "chutesai", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-04-15", + "last_updated": "2025-04-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "reasoning": 15, "cache_read": 0.75 }, - "limit": { "context": 256000, "output": 64000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 131072 + }, + "cost": { + "input": 0.2, + "output": 0.4 + } }, - "grok-code-fast-1": { - "id": "grok-code-fast-1", - "name": "Grok Code Fast 1", - "family": "grok", + "nvidia/Llama-3.1-Nemotron-Ultra-253B-v1": { + "id": "nvidia/Llama-3.1-Nemotron-Ultra-253B-v1", + "name": "Nvidia Nemotron Ultra 253B", + "family": "nemotron", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2025-08-28", - "last_updated": "2025-08-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-03", + "last_updated": "2025-07-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 1.5, "cache_read": 0.02 }, - "limit": { "context": 256000, "output": 10000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 0.4, + "output": 0.8 + } }, - "grok-3-mini-fast": { - "id": "grok-3-mini-fast", - "name": "Grok 3 Mini Fast", - "family": "grok", + "nvidia/nemotron-3-nano-30b-a3b": { + "id": "nvidia/nemotron-3-nano-30b-a3b", + "name": "Nvidia Nemotron 3 Nano 30B", + "family": "nemotron", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-12-15", + "last_updated": "2025-12-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.6, "output": 4, "reasoning": 4, "cache_read": 0.15 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 256000, + "input": 256000, + "output": 262144 + }, + "cost": { + "input": 0.17, + "output": 0.68 + } }, - "grok-beta": { - "id": "grok-beta", - "name": "Grok Beta", - "family": "grok-beta", + "nvidia/nvidia-nemotron-nano-9b-v2": { + "id": "nvidia/nvidia-nemotron-nano-9b-v2", + "name": "Nvidia Nemotron Nano 9B v2", + "family": "nemotron", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2024-11-01", - "last_updated": "2024-11-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-08-18", + "last_updated": "2025-08-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 15, "cache_read": 5 }, - "limit": { "context": 131072, "output": 4096 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 0.17, + "output": 0.68 + } }, - "grok-2-vision-latest": { - "id": "grok-2-vision-latest", - "name": "Grok 2 Vision Latest", - "family": "grok", - "attachment": true, + "nvidia/Llama-3.1-Nemotron-70B-Instruct-HF": { + "id": "nvidia/Llama-3.1-Nemotron-70B-Instruct-HF", + "name": "Nvidia Nemotron 70b", + "family": "nemotron", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2024-08-20", - "last_updated": "2024-12-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-04-15", + "last_updated": "2025-04-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 10, "cache_read": 2 }, - "limit": { "context": 8192, "output": 4096 } + "limit": { + "context": 16384, + "input": 16384, + "output": 8192 + }, + "cost": { + "input": 0.357, + "output": 0.408 + } }, - "grok-4-1-fast-non-reasoning": { - "id": "grok-4-1-fast-non-reasoning", - "name": "Grok 4.1 Fast (Non-Reasoning)", - "family": "grok", - "attachment": true, + "nvidia/Llama-3.3-Nemotron-Super-49B-v1": { + "id": "nvidia/Llama-3.3-Nemotron-Super-49B-v1", + "name": "Nvidia Nemotron Super 49B", + "family": "nemotron", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-11-19", - "last_updated": "2025-11-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-08-08", + "last_updated": "2025-08-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.15 + } }, - "grok-2": { - "id": "grok-2", - "name": "Grok 2", - "family": "grok", + "nvidia/Llama-3_3-Nemotron-Super-49B-v1_5": { + "id": "nvidia/Llama-3_3-Nemotron-Super-49B-v1_5", + "name": "Nvidia Nemotron Super 49B v1.5", + "family": "nemotron", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2024-08-20", - "last_updated": "2024-08-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-08-08", + "last_updated": "2025-08-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 10, "cache_read": 2 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 0.05, + "output": 0.25 + } }, - "grok-3-fast-latest": { - "id": "grok-3-fast-latest", - "name": "Grok 3 Fast Latest", - "family": "grok", + "TheDrummer 2/Anubis-70B-v1": { + "id": "TheDrummer 2/Anubis-70B-v1", + "name": "Anubis 70B v1", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-07-01", + "last_updated": "2024-07-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 1.25 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 65536, + "input": 65536, + "output": 16384 + }, + "cost": { + "input": 0.31, + "output": 0.31 + } }, - "grok-2-1212": { - "id": "grok-2-1212", - "name": "Grok 2 (1212)", - "family": "grok", + "TheDrummer 2/Cydonia-24B-v4.3": { + "id": "TheDrummer 2/Cydonia-24B-v4.3", + "name": "The Drummer Cydonia 24B v4.3", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2024-12-12", - "last_updated": "2024-12-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-12-25", + "last_updated": "2025-12-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 10, "cache_read": 2 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 32768, + "input": 32768, + "output": 32768 + }, + "cost": { + "input": 0.1003, + "output": 0.1207 + } }, - "grok-3-mini": { - "id": "grok-3-mini", - "name": "Grok 3 Mini", - "family": "grok", + "TheDrummer 2/Magidonia-24B-v4.3": { + "id": "TheDrummer 2/Magidonia-24B-v4.3", + "name": "The Drummer Magidonia 24B v4.3", + "family": "llama", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 0.5, "reasoning": 0.5, "cache_read": 0.075 }, - "limit": { "context": 131072, "output": 8192 } - }, - "grok-2-vision": { - "id": "grok-2-vision", - "name": "Grok 2 Vision", - "family": "grok", - "attachment": true, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2024-08-20", - "last_updated": "2024-08-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-12-25", + "last_updated": "2025-12-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 10, "cache_read": 2 }, - "limit": { "context": 8192, "output": 4096 } + "limit": { + "context": 32768, + "input": 32768, + "output": 32768 + }, + "cost": { + "input": 0.1003, + "output": 0.1207 + } }, - "grok-3-latest": { - "id": "grok-3-latest", - "name": "Grok 3 Latest", - "family": "grok", + "TheDrummer 2/Cydonia-24B-v4": { + "id": "TheDrummer 2/Cydonia-24B-v4", + "name": "The Drummer Cydonia 24B v4", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-22", + "last_updated": "2025-07-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.75 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 16384, + "input": 16384, + "output": 32768 + }, + "cost": { + "input": 0.2006, + "output": 0.2414 + } }, - "grok-4.20-multi-agent-0309": { - "id": "grok-4.20-multi-agent-0309", - "name": "Grok 4.20 Multi-Agent", - "family": "grok", - "attachment": true, - "reasoning": true, + "TheDrummer 2/Anubis-70B-v1.1": { + "id": "TheDrummer 2/Anubis-70B-v1.1", + "name": "Anubis 70B v1.1", + "family": "llama", + "attachment": false, + "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2026-03-09", - "last_updated": "2026-03-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": false, + "release_date": "2024-07-01", + "last_updated": "2024-07-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { - "input": 2, - "output": 6, - "cache_read": 0.2, - "context_over_200k": { "input": 4, "output": 12, "cache_read": 0.4 } + "limit": { + "context": 131072, + "input": 131072, + "output": 16384 }, - "limit": { "context": 2000000, "output": 30000 } + "cost": { + "input": 0.31, + "output": 0.31 + } }, - "grok-3-fast": { - "id": "grok-3-fast", - "name": "Grok 3 Fast", - "family": "grok", + "TheDrummer 2/Rocinante-12B-v1.1": { + "id": "TheDrummer 2/Rocinante-12B-v1.1", + "name": "Rocinante 12b", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-07-01", + "last_updated": "2024-07-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 1.25 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 16384, + "input": 16384, + "output": 8192 + }, + "cost": { + "input": 0.408, + "output": 0.595 + } }, - "grok-3-mini-fast-latest": { - "id": "grok-3-mini-fast-latest", - "name": "Grok 3 Mini Fast Latest", - "family": "grok", + "TheDrummer 2/Cydonia-24B-v4.1": { + "id": "TheDrummer 2/Cydonia-24B-v4.1", + "name": "The Drummer Cydonia 24B v4.1", + "family": "llama", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-08-19", + "last_updated": "2025-08-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.6, "output": 4, "reasoning": 4, "cache_read": 0.15 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 16384, + "input": 16384, + "output": 32768 + }, + "cost": { + "input": 0.1003, + "output": 0.1207 + } }, - "grok-3": { - "id": "grok-3", - "name": "Grok 3", - "family": "grok", - "attachment": false, + "TheDrummer 2/UnslopNemo-12B-v4.1": { + "id": "TheDrummer 2/UnslopNemo-12B-v4.1", + "name": "UnslopNemo 12b v4", + "family": "llama", + "attachment": true, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-07-01", + "last_updated": "2024-07-01", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.75 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 32768, + "input": 32768, + "output": 8192 + }, + "cost": { + "input": 0.49299999999999994, + "output": 0.49299999999999994 + } }, - "grok-3-mini-latest": { - "id": "grok-3-mini-latest", - "name": "Grok 3 Mini Latest", - "family": "grok", + "TheDrummer 2/Cydonia-24B-v2": { + "id": "TheDrummer 2/Cydonia-24B-v2", + "name": "The Drummer Cydonia 24B v2", + "family": "llama", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-11", + "reasoning": false, + "tool_call": false, + "structured_output": false, "release_date": "2025-02-17", "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 0.5, "reasoning": 0.5, "cache_read": 0.075 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 16384, + "input": 16384, + "output": 32768 + }, + "cost": { + "input": 0.1003, + "output": 0.1207 + } }, - "grok-4.20-0309-reasoning": { - "id": "grok-4.20-0309-reasoning", - "name": "Grok 4.20 (Reasoning)", - "family": "grok", + "TheDrummer 2/skyfall-36b-v2": { + "id": "TheDrummer 2/skyfall-36b-v2", + "name": "TheDrummer Skyfall 36B V2", + "family": "llama", "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2026-03-09", - "last_updated": "2026-03-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-03-10", + "last_updated": "2025-03-10", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, + "limit": { + "context": 64000, + "input": 64000, + "output": 32768 + }, "cost": { - "input": 2, - "output": 6, - "cache_read": 0.2, - "context_over_200k": { "input": 4, "output": 12, "cache_read": 0.4 } + "input": 0.49299999999999994, + "output": 0.49299999999999994 + } + }, + "deepseek-ai/DeepSeek-V3.1:thinking": { + "id": "deepseek-ai/DeepSeek-V3.1:thinking", + "name": "DeepSeek V3.1 Thinking", + "family": "deepseek-thinking", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-08-21", + "last_updated": "2025-08-21", + "modalities": { + "input": ["text"], + "output": ["text"] }, - "limit": { "context": 2000000, "output": 30000 } + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 65536 + }, + "cost": { + "input": 0.2, + "output": 0.7 + } }, - "grok-4.20-0309-non-reasoning": { - "id": "grok-4.20-0309-non-reasoning", - "name": "Grok 4.20 (Non-Reasoning)", - "family": "grok", + "deepseek-ai/DeepSeek-V3.1": { + "id": "deepseek-ai/DeepSeek-V3.1", + "name": "DeepSeek V3.1", + "family": "deepseek", "attachment": true, "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2026-03-09", - "last_updated": "2026-03-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-26", + "last_updated": "2025-07-26", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { - "input": 2, - "output": 6, - "cache_read": 0.2, - "context_over_200k": { "input": 4, "output": 12, "cache_read": 0.4 } + "limit": { + "context": 128000, + "input": 128000, + "output": 65536 }, - "limit": { "context": 2000000, "output": 30000 } + "cost": { + "input": 0.2, + "output": 0.7 + } }, - "grok-vision-beta": { - "id": "grok-vision-beta", - "name": "Grok Vision Beta", - "family": "grok-vision", - "attachment": true, + "deepseek-ai/DeepSeek-V3.1-Terminus:thinking": { + "id": "deepseek-ai/DeepSeek-V3.1-Terminus:thinking", + "name": "DeepSeek V3.1 Terminus (Thinking)", + "family": "deepseek-thinking", + "attachment": false, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2024-11-01", - "last_updated": "2024-11-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-09-22", + "last_updated": "2025-09-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 15, "cache_read": 5 }, - "limit": { "context": 8192, "output": 4096 } + "limit": { + "context": 128000, + "input": 128000, + "output": 65536 + }, + "cost": { + "input": 0.25, + "output": 0.7 + } }, - "grok-4-1-fast": { - "id": "grok-4-1-fast", - "name": "Grok 4.1 Fast", - "family": "grok", - "attachment": true, + "deepseek-ai/deepseek-v3.2-exp-thinking": { + "id": "deepseek-ai/deepseek-v3.2-exp-thinking", + "name": "DeepSeek V3.2 Exp Thinking", + "family": "deepseek-thinking", + "attachment": false, "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-11-19", - "last_updated": "2025-11-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 30000 } - } - } - }, - "poe": { - "id": "poe", - "env": ["POE_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.poe.com/v1", - "name": "Poe", - "doc": "https://creator.poe.com/docs/external-applications/openai-compatible-api", - "models": { - "runwayml/runway": { - "id": "runwayml/runway", - "name": "Runway", - "family": "runway", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2024-10-11", - "last_updated": "2024-10-11", - "modalities": { "input": ["text", "image"], "output": ["video"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 256, "output": 0 } + "limit": { + "context": 163840, + "input": 163840, + "output": 65536 + }, + "cost": { + "input": 0.27999999999999997, + "output": 0.42000000000000004 + } }, - "runwayml/runway-gen-4-turbo": { - "id": "runwayml/runway-gen-4-turbo", - "name": "Runway-Gen-4-Turbo", - "family": "runway", - "attachment": true, + "deepseek-ai/deepseek-v3.2-exp": { + "id": "deepseek-ai/deepseek-v3.2-exp", + "name": "DeepSeek V3.2 Exp", + "family": "deepseek", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-05-09", - "last_updated": "2025-05-09", - "modalities": { "input": ["text", "image"], "output": ["video"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 256, "output": 0 } + "limit": { + "context": 163840, + "input": 163840, + "output": 65536 + }, + "cost": { + "input": 0.27999999999999997, + "output": 0.42000000000000004 + } }, - "openai/gpt-5.2-codex": { - "id": "openai/gpt-5.2-codex", - "name": "GPT-5.2-Codex", - "attachment": true, + "deepseek-ai/DeepSeek-R1-0528": { + "id": "deepseek-ai/DeepSeek-R1-0528", + "name": "DeepSeek R1 0528", + "family": "deepseek", + "attachment": false, "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2026-01-14", - "last_updated": "2026-01-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-05-28", + "last_updated": "2025-05-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.6, "output": 13, "cache_read": 0.16 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 163840 + }, + "cost": { + "input": 0.4, + "output": 1.7 + } }, - "openai/o1-pro": { - "id": "openai/o1-pro", - "name": "o1-pro", - "family": "o-pro", - "attachment": true, - "reasoning": true, + "deepseek-ai/DeepSeek-V3.1-Terminus": { + "id": "deepseek-ai/DeepSeek-V3.1-Terminus", + "name": "DeepSeek V3.1 Terminus", + "family": "deepseek", + "attachment": false, + "reasoning": false, "tool_call": true, - "temperature": false, - "release_date": "2025-03-19", - "last_updated": "2025-03-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-08-02", + "last_updated": "2025-08-02", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 140, "output": 540 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 65536 + }, + "cost": { + "input": 0.25, + "output": 0.7 + } }, - "openai/gpt-5.1-codex-mini": { - "id": "openai/gpt-5.1-codex-mini", - "name": "GPT-5.1-Codex-Mini", + "openai/gpt-5.1-codex-max": { + "id": "openai/gpt-5.1-codex-max", + "name": "GPT 5.1 Codex Max", "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-11-12", - "last_updated": "2025-11-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.22, "output": 1.8, "cache_read": 0.022 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 400000, + "input": 400000, + "output": 128000 + }, + "cost": { + "input": 2.5, + "output": 20 + } }, - "openai/gpt-5.4-pro": { - "id": "openai/gpt-5.4-pro", - "name": "GPT-5.4-Pro", + "openai/gpt-5.2-chat": { + "id": "openai/gpt-5.2-chat", + "name": "GPT 5.2 Chat", + "family": "gpt", "attachment": true, "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2026-03-05", - "last_updated": "2026-03-05", - "modalities": { "input": ["text", "image"], "output": ["image"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2026-01-01", + "last_updated": "2026-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 27, "output": 160 }, - "limit": { "context": 1050000, "input": 922000, "output": 128000 } + "limit": { + "context": 400000, + "input": 400000, + "output": 16384 + }, + "cost": { + "input": 1.75, + "output": 14 + } }, - "openai/sora-2": { - "id": "openai/sora-2", - "name": "Sora-2", - "family": "sora", - "attachment": true, + "openai/gpt-4o-mini-search-preview": { + "id": "openai/gpt-4o-mini-search-preview", + "name": "GPT-4o mini Search Preview", + "family": "gpt-mini", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-10-06", - "last_updated": "2025-10-06", - "modalities": { "input": ["text", "image"], "output": ["video"] }, - "open_weights": false, - "limit": { "context": 0, "output": 0 } - }, - "openai/o3-mini": { - "id": "openai/o3-mini", - "name": "o3-mini", - "family": "o-mini", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-01-31", - "last_updated": "2025-01-31", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.99, "output": 4 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 0.088, + "output": 0.35 + } }, - "openai/gpt-5.4-mini": { - "id": "openai/gpt-5.4-mini", - "name": "GPT-5.4-Mini", + "openai/chatgpt-4o-latest": { + "id": "openai/chatgpt-4o-latest", + "name": "ChatGPT 4o", + "family": "gpt", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "temperature": false, - "release_date": "2026-03-12", - "last_updated": "2026-03-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "release_date": "2024-05-13", + "last_updated": "2024-05-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.68, "output": 4, "cache_read": 0.068 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 4.998, + "output": 14.993999999999998 + } }, - "openai/gpt-5-pro": { - "id": "openai/gpt-5-pro", - "name": "GPT-5-Pro", + "openai/gpt-5.2-pro": { + "id": "openai/gpt-5.2-pro", + "name": "GPT 5.2 Pro", "family": "gpt-pro", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-10-06", - "last_updated": "2025-10-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "release_date": "2026-01-01", + "last_updated": "2026-01-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 14, "output": 110 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 400000, + "input": 400000, + "output": 128000 + }, + "cost": { + "input": 21, + "output": 168 + } }, - "openai/gpt-5": { - "id": "openai/gpt-5", - "name": "GPT-5", - "family": "gpt", + "openai/gpt-5-mini": { + "id": "openai/gpt-5-mini", + "name": "GPT 5 Mini", + "family": "gpt-mini", "attachment": true, "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 9, "cache_read": 0.11 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 400000, + "input": 400000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2 + } }, - "openai/chatgpt-4o-latest": { - "id": "openai/chatgpt-4o-latest", - "name": "ChatGPT-4o-Latest", - "family": "gpt", + "openai/gpt-5-nano": { + "id": "openai/gpt-5-nano", + "name": "GPT 5 Nano", + "family": "gpt-nano", "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2024-08-14", - "last_updated": "2024-08-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "reasoning": true, + "tool_call": false, + "structured_output": false, + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 4.5, "output": 14 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 400000, + "input": 400000, + "output": 128000 + }, + "cost": { + "input": 0.05, + "output": 0.4 + } }, "openai/gpt-4-turbo": { "id": "openai/gpt-4-turbo", - "name": "GPT-4-Turbo", + "name": "GPT-4 Turbo", "family": "gpt", "attachment": true, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2023-09-13", - "last_updated": "2023-09-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2023-11-06", + "last_updated": "2024-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 9, "output": 27 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 128000, + "input": 128000, + "output": 4096 + }, + "cost": { + "input": 10, + "output": 30 + } }, - "openai/gpt-4o": { - "id": "openai/gpt-4o", - "name": "GPT-4o", + "openai/gpt-5.2": { + "id": "openai/gpt-5.2", + "name": "GPT 5.2", "family": "gpt", "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2024-05-13", - "last_updated": "2024-05-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "limit": { "context": 128000, "output": 8192 } - }, - "openai/gpt-5.3-codex": { - "id": "openai/gpt-5.3-codex", - "name": "GPT-5.3-Codex", - "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2026-02-10", - "last_updated": "2026-02-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "release_date": "2026-01-01", + "last_updated": "2026-01-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.6, "output": 13, "cache_read": 0.16 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 400000, + "input": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14 + } }, "openai/o3-mini-high": { "id": "openai/o3-mini-high", - "name": "o3-mini-high", + "name": "OpenAI o3-mini (High)", "family": "o-mini", - "attachment": true, + "attachment": false, "reasoning": true, "tool_call": true, - "temperature": false, + "structured_output": true, "release_date": "2025-01-31", "last_updated": "2025-01-31", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.99, "output": 4 }, - "limit": { "context": 200000, "output": 100000 } - }, - "openai/gpt-5-mini": { - "id": "openai/gpt-5-mini", - "name": "GPT-5-mini", - "family": "gpt-mini", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-06-25", - "last_updated": "2025-06-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.22, "output": 1.8, "cache_read": 0.022 }, - "limit": { "context": 400000, "output": 128000 } - }, - "openai/gpt-image-1.5": { - "id": "openai/gpt-image-1.5", - "name": "gpt-image-1.5", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-12-16", - "last_updated": "2025-12-16", - "modalities": { "input": ["text", "image"], "output": ["image"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 0 } + "limit": { + "context": 200000, + "input": 200000, + "output": 100000 + }, + "cost": { + "input": 0.64, + "output": 2.588 + } }, "openai/gpt-4o-mini": { "id": "openai/gpt-4o-mini", - "name": "GPT-4o-mini", + "name": "GPT-4o mini", "family": "gpt-mini", "attachment": true, "reasoning": false, - "tool_call": true, - "temperature": false, + "tool_call": false, + "structured_output": false, "release_date": "2024-07-18", "last_updated": "2024-07-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.14, "output": 0.54, "cache_read": 0.068 }, - "limit": { "context": 124096, "output": 4096 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 0.1496, + "output": 0.595 + } }, - "openai/gpt-image-1-mini": { - "id": "openai/gpt-image-1-mini", - "name": "GPT-Image-1-Mini", - "family": "gpt", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-08-26", - "last_updated": "2025-08-26", - "modalities": { "input": ["text", "image"], "output": ["image"] }, + "openai/o4-mini-deep-research": { + "id": "openai/o4-mini-deep-research", + "name": "OpenAI o4-mini Deep Research", + "family": "o-mini", + "attachment": false, + "reasoning": true, + "tool_call": false, + "structured_output": false, + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 0, "output": 0 } + "limit": { + "context": 200000, + "input": 200000, + "output": 100000 + }, + "cost": { + "input": 9.996, + "output": 19.992 + } }, - "openai/gpt-5.1-codex-max": { - "id": "openai/gpt-5.1-codex-max", - "name": "GPT 5.1 Codex Max", + "openai/gpt-5.1-chat": { + "id": "openai/gpt-5.1-chat", + "name": "GPT 5.1 Chat", + "family": "gpt", "attachment": true, "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-12-08", - "last_updated": "2025-12-08", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 9, "cache_read": 0.11 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 400000, + "input": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, - "openai/gpt-4.1": { - "id": "openai/gpt-4.1", - "name": "GPT-4.1", - "family": "gpt", - "attachment": true, - "reasoning": false, + "openai/o4-mini": { + "id": "openai/o4-mini", + "name": "OpenAI o4-mini", + "family": "o-mini", + "attachment": false, + "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.8, "output": 7.2, "cache_read": 0.45 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 200000, + "input": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4 + } }, - "openai/gpt-3.5-turbo": { - "id": "openai/gpt-3.5-turbo", - "name": "GPT-3.5-Turbo", - "family": "gpt", + "openai/gpt-5.2-codex": { + "id": "openai/gpt-5.2-codex", + "name": "GPT 5.2 Codex", + "family": "gpt-codex", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2023-09-13", - "last_updated": "2023-09-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "release_date": "2026-01-14", + "last_updated": "2026-01-14", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.45, "output": 1.4 }, - "limit": { "context": 16384, "output": 2048 } + "limit": { + "context": 400000, + "input": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14 + } }, - "openai/gpt-3.5-turbo-instruct": { - "id": "openai/gpt-3.5-turbo-instruct", - "name": "GPT-3.5-Turbo-Instruct", - "family": "gpt", + "openai/gpt-5.1-codex-mini": { + "id": "openai/gpt-5.1-codex-mini", + "name": "GPT 5.1 Codex Mini", + "family": "gpt-codex-mini", "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2023-09-20", - "last_updated": "2023-09-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "reasoning": true, + "tool_call": false, + "structured_output": false, + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.4, "output": 1.8 }, - "limit": { "context": 3500, "output": 1024 } + "limit": { + "context": 400000, + "input": 400000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2 + } }, - "openai/dall-e-3": { - "id": "openai/dall-e-3", - "name": "DALL-E-3", - "family": "dall-e", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2023-11-06", - "last_updated": "2023-11-06", - "modalities": { "input": ["text"], "output": ["image"] }, + "openai/o1-preview": { + "id": "openai/o1-preview", + "name": "OpenAI o1-preview", + "family": "o", + "attachment": false, + "reasoning": true, + "tool_call": false, + "structured_output": false, + "release_date": "2024-09-12", + "last_updated": "2024-09-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 800, "output": 0 } + "limit": { + "context": 128000, + "input": 128000, + "output": 32768 + }, + "cost": { + "input": 14.993999999999998, + "output": 59.993 + } }, - "openai/gpt-4-classic": { - "id": "openai/gpt-4-classic", - "name": "GPT-4-Classic", + "openai/gpt-4o-2024-08-06": { + "id": "openai/gpt-4o-2024-08-06", + "name": "GPT-4o (2024-08-06)", "family": "gpt", "attachment": true, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2024-03-25", - "last_updated": "2024-03-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-08-06", + "last_updated": "2024-08-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 27, "output": 54 }, - "limit": { "context": 8192, "output": 4096 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 2.499, + "output": 9.996 + } }, - "openai/gpt-5.4": { - "id": "openai/gpt-5.4", - "name": "GPT-5.4", + "openai/gpt-5.1": { + "id": "openai/gpt-5.1", + "name": "GPT 5.1", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2026-02-26", - "last_updated": "2026-02-26", - "modalities": { "input": ["text", "image", "pdf"], "output": ["image"] }, + "structured_output": true, + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.2, "output": 14, "cache_read": 0.22 }, - "limit": { "context": 1050000, "input": 922000, "output": 128000 } + "limit": { + "context": 400000, + "input": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, "openai/o1": { "id": "openai/o1", - "name": "o1", + "name": "OpenAI o1", "family": "o", - "attachment": true, + "attachment": false, "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2024-12-18", - "last_updated": "2024-12-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-17", + "last_updated": "2024-12-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 14, "output": 54 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 200000, + "input": 200000, + "output": 100000 + }, + "cost": { + "input": 14.993999999999998, + "output": 59.993 + } }, - "openai/gpt-4o-aug": { - "id": "openai/gpt-4o-aug", - "name": "GPT-4o-Aug", + "openai/gpt-3.5-turbo": { + "id": "openai/gpt-3.5-turbo", + "name": "GPT-3.5 Turbo", "family": "gpt", - "attachment": true, + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2024-11-21", - "last_updated": "2024-11-21", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2022-11-30", + "last_updated": "2024-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.2, "output": 9, "cache_read": 1.1 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 16385, + "input": 16385, + "output": 4096 + }, + "cost": { + "input": 0.5, + "output": 1.5 + } }, - "openai/o3": { - "id": "openai/o3", - "name": "o3", + "openai/o3-deep-research": { + "id": "openai/o3-deep-research", + "name": "OpenAI o3 Deep Research", "family": "o", - "attachment": true, + "attachment": false, "reasoning": true, - "tool_call": true, - "temperature": false, + "tool_call": false, + "structured_output": false, "release_date": "2025-04-16", "last_updated": "2025-04-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.8, "output": 7.2, "cache_read": 0.45 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 200000, + "input": 200000, + "output": 100000 + }, + "cost": { + "input": 9.996, + "output": 19.992 + } }, - "openai/gpt-5-chat": { - "id": "openai/gpt-5-chat", - "name": "GPT-5-Chat", - "family": "gpt-codex", - "attachment": true, - "reasoning": false, + "openai/o3-mini": { + "id": "openai/o3-mini", + "name": "OpenAI o3-mini", + "family": "o-mini", + "attachment": false, + "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-01-31", + "last_updated": "2025-01-31", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 9, "cache_read": 0.11 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 200000, + "input": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4 + } }, - "openai/gpt-4o-mini-search": { - "id": "openai/gpt-4o-mini-search", - "name": "GPT-4o-mini-Search", - "family": "gpt-mini", - "attachment": true, + "openai/gpt-4-turbo-preview": { + "id": "openai/gpt-4-turbo-preview", + "name": "GPT-4 Turbo Preview", + "family": "gpt", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-03-11", - "last_updated": "2025-03-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2023-11-06", + "last_updated": "2024-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.14, "output": 0.54 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 128000, + "input": 128000, + "output": 4096 + }, + "cost": { + "input": 9.996, + "output": 30.004999999999995 + } }, - "openai/gpt-3.5-turbo-raw": { - "id": "openai/gpt-3.5-turbo-raw", - "name": "GPT-3.5-Turbo-Raw", - "family": "gpt", + "openai/o1-pro": { + "id": "openai/o1-pro", + "name": "OpenAI o1 Pro", + "family": "o-pro", "attachment": true, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2023-09-27", - "last_updated": "2023-09-27", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-01-25", + "last_updated": "2025-01-25", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.45, "output": 1.4 }, - "limit": { "context": 4524, "output": 2048 } + "limit": { + "context": 200000, + "input": 200000, + "output": 100000 + }, + "cost": { + "input": 150, + "output": 600 + } }, - "openai/gpt-5.4-nano": { - "id": "openai/gpt-5.4-nano", - "name": "GPT-5.4-Nano", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2026-03-11", - "last_updated": "2026-03-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "openai/gpt-5-codex": { + "id": "openai/gpt-5-codex", + "name": "GPT-5 Codex", + "family": "gpt-codex", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-09-15", + "last_updated": "2025-09-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.18, "output": 1.1, "cache_read": 0.018 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 256000, + "input": 256000, + "output": 32768 + }, + "cost": { + "input": 9.996, + "output": 19.992 + } }, - "openai/gpt-5.2": { - "id": "openai/gpt-5.2", - "name": "GPT-5.2", + "openai/gpt-5.1-chat-latest": { + "id": "openai/gpt-5.1-chat-latest", + "name": "GPT 5.1 Chat (Latest)", + "family": "gpt", "attachment": true, "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-12-08", - "last_updated": "2025-12-08", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.6, "output": 13, "cache_read": 0.16 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 400000, + "input": 400000, + "output": 16384 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, - "openai/o4-mini-deep-research": { - "id": "openai/o4-mini-deep-research", - "name": "o4-mini-deep-research", - "family": "o-mini", + "openai/gpt-4o-search-preview": { + "id": "openai/gpt-4o-search-preview", + "name": "GPT-4o Search Preview", + "family": "gpt", "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-06-27", - "last_updated": "2025-06-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-05-13", + "last_updated": "2024-05-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.8, "output": 7.2, "cache_read": 0.45 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 1.47, + "output": 5.88 + } }, - "openai/gpt-5.1": { - "id": "openai/gpt-5.1", - "name": "GPT-5.1", - "family": "gpt", + "openai/gpt-4.1-nano": { + "id": "openai/gpt-4.1-nano", + "name": "GPT 4.1 Nano", + "family": "gpt-nano", "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1047576, + "input": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.1, + "output": 0.4 + } + }, + "openai/o4-mini-high": { + "id": "openai/o4-mini-high", + "name": "OpenAI o4-mini high", + "family": "o-mini", + "attachment": false, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-11-12", - "last_updated": "2025-11-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 9, "cache_read": 0.11 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 200000, + "input": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4 + } }, - "openai/gpt-4.1-mini": { - "id": "openai/gpt-4.1-mini", - "name": "GPT-4.1-mini", - "family": "gpt-mini", - "attachment": true, + "openai/o3": { + "id": "openai/o3", + "name": "OpenAI o3", + "family": "o", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-04-15", - "last_updated": "2025-04-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.36, "output": 1.4, "cache_read": 0.09 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 200000, + "input": 200000, + "output": 100000 + }, + "cost": { + "input": 2, + "output": 8 + } }, - "openai/gpt-5-nano": { - "id": "openai/gpt-5-nano", - "name": "GPT-5-nano", - "family": "gpt-nano", - "attachment": true, + "openai/gpt-oss-20b": { + "id": "openai/gpt-oss-20b", + "name": "GPT OSS 20B", + "family": "gpt-oss", + "attachment": false, "reasoning": true, - "tool_call": true, - "temperature": false, + "tool_call": false, + "structured_output": false, "release_date": "2025-08-05", "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.045, "output": 0.36, "cache_read": 0.0045 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 0.04, + "output": 0.15 + } }, - "openai/gpt-5.1-instant": { - "id": "openai/gpt-5.1-instant", - "name": "GPT-5.1-Instant", - "family": "gpt", + "openai/gpt-5-pro": { + "id": "openai/gpt-5-pro", + "name": "GPT 5 Pro", + "family": "gpt-pro", "attachment": true, "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-11-12", - "last_updated": "2025-11-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 9, "cache_read": 0.11 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 400000, + "input": 400000, + "output": 128000 + }, + "cost": { + "input": 15, + "output": 120 + } }, - "openai/gpt-5.2-instant": { - "id": "openai/gpt-5.2-instant", - "name": "GPT-5.2-Instant", - "attachment": true, + "openai/gpt-5.1-2025-11-13": { + "id": "openai/gpt-5.1-2025-11-13", + "name": "GPT-5.1 (2025-11-13)", + "family": "gpt", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.6, "output": 13, "cache_read": 0.16 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 32768 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, - "openai/gpt-4-classic-0314": { - "id": "openai/gpt-4-classic-0314", - "name": "GPT-4-Classic-0314", + "openai/gpt-4o": { + "id": "openai/gpt-4o", + "name": "GPT-4o", "family": "gpt", "attachment": true, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2024-08-26", - "last_updated": "2024-08-26", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-05-13", + "last_updated": "2024-05-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 27, "output": 54 }, - "limit": { "context": 8192, "output": 4096 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 2.499, + "output": 9.996 + } }, - "openai/gpt-4o-search": { - "id": "openai/gpt-4o-search", - "name": "GPT-4o-Search", - "family": "gpt", - "attachment": true, - "reasoning": false, + "openai/o3-mini-low": { + "id": "openai/o3-mini-low", + "name": "OpenAI o3-mini (Low)", + "family": "o-mini", + "attachment": false, + "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-03-11", - "last_updated": "2025-03-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-01-31", + "last_updated": "2025-01-31", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.2, "output": 9 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 200000, + "input": 200000, + "output": 100000 + }, + "cost": { + "input": 9.996, + "output": 19.992 + } }, - "openai/gpt-image-1": { - "id": "openai/gpt-image-1", - "name": "GPT-Image-1", + "openai/gpt-5": { + "id": "openai/gpt-5", + "name": "GPT 5", "family": "gpt", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-03-31", - "last_updated": "2025-03-31", - "modalities": { "input": ["text", "image"], "output": ["image"] }, + "structured_output": true, + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 0 } + "limit": { + "context": 400000, + "input": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, - "openai/o3-pro": { - "id": "openai/o3-pro", - "name": "o3-pro", + "openai/gpt-oss-safeguard-20b": { + "id": "openai/gpt-oss-safeguard-20b", + "name": "GPT OSS Safeguard 20B", + "family": "gpt-oss", + "attachment": false, + "reasoning": true, + "tool_call": false, + "structured_output": false, + "release_date": "2025-10-29", + "last_updated": "2025-10-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 0.075, + "output": 0.3 + } + }, + "openai/o3-pro-2025-06-10": { + "id": "openai/o3-pro-2025-06-10", + "name": "OpenAI o3-pro (2025-06-10)", "family": "o-pro", - "attachment": true, + "attachment": false, "reasoning": true, "tool_call": true, - "temperature": false, + "structured_output": true, "release_date": "2025-06-10", "last_updated": "2025-06-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 18, "output": 72 }, - "limit": { "context": 200000, "output": 100000 } - }, - "openai/gpt-4.1-nano": { - "id": "openai/gpt-4.1-nano", - "name": "GPT-4.1-nano", - "family": "gpt-nano", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-04-15", - "last_updated": "2025-04-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.09, "output": 0.36, "cache_read": 0.022 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 200000, + "input": 200000, + "output": 100000 + }, + "cost": { + "input": 9.996, + "output": 19.992 + } }, - "openai/gpt-5.3-instant": { - "id": "openai/gpt-5.3-instant", - "name": "GPT-5.3-Instant", - "attachment": true, - "reasoning": false, + "openai/gpt-oss-120b": { + "id": "openai/gpt-oss-120b", + "name": "GPT OSS 120B", + "family": "gpt-oss", + "attachment": false, + "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2026-03-03", - "last_updated": "2026-03-03", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.6, "output": 13, "cache_read": 0.16 }, - "limit": { "context": 128000, "input": 111616, "output": 16384 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 0.05, + "output": 0.25 + } }, - "openai/gpt-5-codex": { - "id": "openai/gpt-5-codex", - "name": "GPT-5-Codex", - "family": "gpt-codex", + "openai/gpt-5-chat-latest": { + "id": "openai/gpt-5-chat-latest", + "name": "GPT 5 Chat", + "family": "gpt", "attachment": true, "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-09-23", - "last_updated": "2025-09-23", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 9 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 400000, + "input": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, - "openai/o4-mini": { - "id": "openai/o4-mini", - "name": "o4-mini", - "family": "o-mini", + "openai/gpt-4.1": { + "id": "openai/gpt-4.1", + "name": "GPT 4.1", + "family": "gpt", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "temperature": false, - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-09-10", + "last_updated": "2025-09-10", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.99, "output": 4, "cache_read": 0.25 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 1047576, + "input": 1047576, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 8 + } }, - "openai/o3-deep-research": { - "id": "openai/o3-deep-research", - "name": "o3-deep-research", - "family": "o", + "openai/gpt-4.1-mini": { + "id": "openai/gpt-4.1-mini", + "name": "GPT 4.1 Mini", + "family": "gpt-mini", "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-06-27", - "last_updated": "2025-06-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 9, "output": 36, "cache_read": 2.2 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 1047576, + "input": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.4, + "output": 1.6 + } }, "openai/gpt-5.1-codex": { "id": "openai/gpt-5.1-codex", - "name": "GPT-5.1-Codex", + "name": "GPT 5.1 Codex", "family": "gpt-codex", "attachment": true, "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-11-12", - "last_updated": "2025-11-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 9, "cache_read": 0.11 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 400000, + "input": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, - "openai/sora-2-pro": { - "id": "openai/sora-2-pro", - "name": "Sora-2-Pro", - "family": "sora", + "openai/gpt-4o-2024-11-20": { + "id": "openai/gpt-4o-2024-11-20", + "name": "GPT-4o (2024-11-20)", + "family": "gpt", "attachment": true, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-10-06", - "last_updated": "2025-10-06", - "modalities": { "input": ["text", "image"], "output": ["video"] }, - "open_weights": false, - "limit": { "context": 0, "output": 0 } - }, - "openai/gpt-5.2-pro": { - "id": "openai/gpt-5.2-pro", - "name": "GPT-5.2-Pro", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 19, "output": 150 }, - "limit": { "context": 400000, "output": 128000 } - }, - "anthropic/claude-opus-4.6": { - "id": "anthropic/claude-opus-4.6", - "name": "Claude-Opus-4.6", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2026-02-04", - "last_updated": "2026-02-04", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-11-20", + "last_updated": "2024-11-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 4.3, "output": 21, "cache_read": 0.43, "cache_write": 5.3 }, - "limit": { "context": 983040, "output": 128000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "anthropic/claude-haiku-4.5": { - "id": "anthropic/claude-haiku-4.5", - "name": "Claude-Haiku-4.5", - "family": "claude-haiku", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "VongolaChouko/Starcannon-Unleashed-12B-v1.0": { + "id": "VongolaChouko/Starcannon-Unleashed-12B-v1.0", + "name": "Mistral Nemo Starcannon 12b v1", + "family": "mistral-nemo", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-07-01", + "last_updated": "2024-07-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.85, "output": 4.3, "cache_read": 0.085, "cache_write": 1.1 }, - "limit": { "context": 192000, "output": 64000 } + "limit": { + "context": 16384, + "input": 16384, + "output": 8192 + }, + "cost": { + "input": 0.49299999999999994, + "output": 0.49299999999999994 + } }, - "anthropic/claude-haiku-3.5": { - "id": "anthropic/claude-haiku-3.5", - "name": "Claude-Haiku-3.5", - "family": "claude-haiku", - "attachment": true, + "amazon/nova-lite-v1": { + "id": "amazon/nova-lite-v1", + "name": "Amazon Nova Lite 1.0", + "family": "nova-lite", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2024-10-01", - "last_updated": "2024-10-01", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-03", + "last_updated": "2024-12-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.68, "output": 3.4, "cache_read": 0.068, "cache_write": 0.85 }, - "limit": { "context": 189096, "output": 8192 } + "limit": { + "context": 300000, + "input": 300000, + "output": 5120 + }, + "cost": { + "input": 0.0595, + "output": 0.238 + } }, - "anthropic/claude-haiku-3": { - "id": "anthropic/claude-haiku-3", - "name": "Claude-Haiku-3", - "family": "claude-haiku", - "attachment": true, + "amazon/nova-pro-v1": { + "id": "amazon/nova-pro-v1", + "name": "Amazon Nova Pro 1.0", + "family": "nova-pro", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2024-03-09", - "last_updated": "2024-03-09", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-03", + "last_updated": "2024-12-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.21, "output": 1.1, "cache_read": 0.021, "cache_write": 0.26 }, - "limit": { "context": 189096, "output": 8192 } + "limit": { + "context": 300000, + "input": 300000, + "output": 32000 + }, + "cost": { + "input": 0.7989999999999999, + "output": 3.1959999999999997 + } }, - "anthropic/claude-sonnet-3.7": { - "id": "anthropic/claude-sonnet-3.7", - "name": "Claude-Sonnet-3.7", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-02-19", - "last_updated": "2025-02-19", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "amazon/nova-2-lite-v1": { + "id": "amazon/nova-2-lite-v1", + "name": "Amazon Nova 2 Lite", + "family": "nova", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-03", + "last_updated": "2024-12-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.6, "output": 13, "cache_read": 0.26, "cache_write": 3.2 }, - "limit": { "context": 196608, "output": 128000 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 65535 + }, + "cost": { + "input": 0.5099999999999999, + "output": 4.25 + } }, - "anthropic/claude-opus-4.1": { - "id": "anthropic/claude-opus-4.1", - "name": "Claude-Opus-4.1", - "family": "claude-opus", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "amazon/nova-micro-v1": { + "id": "amazon/nova-micro-v1", + "name": "Amazon Nova Micro 1.0", + "family": "nova-micro", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-03", + "last_updated": "2024-12-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 13, "output": 64, "cache_read": 1.3, "cache_write": 16 }, - "limit": { "context": 196608, "output": 32000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 5120 + }, + "cost": { + "input": 0.0357, + "output": 0.1394 + } }, - "anthropic/claude-sonnet-4.6": { - "id": "anthropic/claude-sonnet-4.6", - "name": "Claude-Sonnet-4.6", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "Sao10K/L3.3-70B-Euryale-v2.3": { + "id": "Sao10K/L3.3-70B-Euryale-v2.3", + "name": "Llama 3.3 70B Euryale", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.6, "output": 13, "cache_read": 0.26, "cache_write": 3.2 }, - "limit": { "context": 983040, "output": 128000 } + "limit": { + "context": 20480, + "input": 20480, + "output": 16384 + }, + "cost": { + "input": 0.49299999999999994, + "output": 0.49299999999999994 + } }, - "anthropic/claude-sonnet-4": { - "id": "anthropic/claude-sonnet-4", - "name": "Claude-Sonnet-4", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-05-21", - "last_updated": "2025-05-21", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "Sao10K/L3.1-70B-Euryale-v2.2": { + "id": "Sao10K/L3.1-70B-Euryale-v2.2", + "name": "Llama 3.1 70B Euryale", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.6, "output": 13, "cache_read": 0.26, "cache_write": 3.2 }, - "limit": { "context": 983040, "output": 64000 } + "limit": { + "context": 20480, + "input": 20480, + "output": 16384 + }, + "cost": { + "input": 0.306, + "output": 0.357 + } }, - "anthropic/claude-sonnet-3.5-june": { - "id": "anthropic/claude-sonnet-3.5-june", - "name": "Claude-Sonnet-3.5-June", - "family": "claude-sonnet", - "attachment": true, + "Sao10K/L3.1-70B-Hanami-x1": { + "id": "Sao10K/L3.1-70B-Hanami-x1", + "name": "Llama 3.1 70B Hanami", + "family": "llama", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2024-11-18", - "last_updated": "2024-11-18", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.6, "output": 13, "cache_read": 0.26, "cache_write": 3.2 }, - "limit": { "context": 189096, "output": 8192 } + "limit": { + "context": 16384, + "input": 16384, + "output": 16384 + }, + "cost": { + "input": 0.49299999999999994, + "output": 0.49299999999999994 + } }, - "anthropic/claude-opus-4.5": { - "id": "anthropic/claude-opus-4.5", - "name": "Claude-Opus-4.5", - "family": "claude-opus", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-11-21", - "last_updated": "2025-11-21", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "Sao10K/L3-8B-Stheno-v3.2": { + "id": "Sao10K/L3-8B-Stheno-v3.2", + "name": "Sao10K Stheno 8b", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-11-29", + "last_updated": "2024-11-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 4.3, "output": 21, "cache_read": 0.43, "cache_write": 5.3 }, - "limit": { "context": 196608, "output": 64000 } + "limit": { + "context": 16384, + "input": 16384, + "output": 8192 + }, + "cost": { + "input": 0.2006, + "output": 0.2006 + } }, - "anthropic/claude-sonnet-3.5": { - "id": "anthropic/claude-sonnet-3.5", - "name": "Claude-Sonnet-3.5", - "family": "claude-sonnet", - "attachment": true, + "LatitudeGames/Wayfarer-Large-70B-Llama-3.3": { + "id": "LatitudeGames/Wayfarer-Large-70B-Llama-3.3", + "name": "Llama 3.3 70B Wayfarer", + "family": "llama", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2024-06-05", - "last_updated": "2024-06-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-02-20", + "last_updated": "2025-02-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.6, "output": 13, "cache_read": 0.26, "cache_write": 3.2 }, - "limit": { "context": 189096, "output": 8192 } + "limit": { + "context": 16384, + "input": 16384, + "output": 16384 + }, + "cost": { + "input": 0.700000007, + "output": 0.700000007 + } }, - "anthropic/claude-sonnet-4.5": { - "id": "anthropic/claude-sonnet-4.5", - "name": "Claude-Sonnet-4.5", - "family": "claude-sonnet", - "attachment": true, + "z-ai/glm-4.6:thinking": { + "id": "z-ai/glm-4.6:thinking", + "name": "GLM 4.6 Thinking", + "family": "glm", + "attachment": false, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-09-26", - "last_updated": "2025-09-26", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.6, "output": 13, "cache_read": 0.26, "cache_write": 3.2 }, - "limit": { "context": 983040, "output": 32768 } + "limit": { + "context": 200000, + "input": 200000, + "output": 65535 + }, + "cost": { + "input": 0.4, + "output": 1.5 + } }, - "anthropic/claude-opus-4": { - "id": "anthropic/claude-opus-4", - "name": "Claude-Opus-4", - "family": "claude-opus", + "z-ai/glm-4.5v": { + "id": "z-ai/glm-4.5v", + "name": "GLM 4.5V", + "family": "glmv", "attachment": true, "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-05-21", - "last_updated": "2025-05-21", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 13, "output": 64, "cache_read": 1.3, "cache_write": 16 }, - "limit": { "context": 192512, "output": 28672 } - }, - "xai/grok-4-fast-non-reasoning": { - "id": "xai/grok-4-fast-non-reasoning", - "name": "Grok-4-Fast-Non-Reasoning", - "family": "grok", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-09-16", - "last_updated": "2025-09-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-11-22", + "last_updated": "2025-11-22", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 128000 } + "limit": { + "context": 64000, + "input": 64000, + "output": 96000 + }, + "cost": { + "input": 0.6, + "output": 1.7999999999999998 + } }, - "xai/grok-4": { - "id": "xai/grok-4", - "name": "Grok-4", - "family": "grok", - "attachment": true, + "z-ai/glm-4.6": { + "id": "z-ai/glm-4.6", + "name": "GLM 4.6", + "family": "glm", + "attachment": false, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-07-10", - "last_updated": "2025-07-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.75 }, - "limit": { "context": 256000, "output": 128000 } + "limit": { + "context": 200000, + "input": 200000, + "output": 65535 + }, + "cost": { + "input": 0.4, + "output": 1.5 + } }, - "xai/grok-code-fast-1": { - "id": "xai/grok-code-fast-1", - "name": "Grok Code Fast 1", - "family": "grok", + "z-ai/glm-4.5v:thinking": { + "id": "z-ai/glm-4.5v:thinking", + "name": "GLM 4.5V Thinking", + "family": "glmv", "attachment": true, "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-08-22", - "last_updated": "2025-08-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-11-22", + "last_updated": "2025-11-22", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 1.5, "cache_read": 0.02 }, - "limit": { "context": 256000, "output": 128000 } + "limit": { + "context": 64000, + "input": 64000, + "output": 96000 + }, + "cost": { + "input": 0.6, + "output": 1.7999999999999998 + } }, - "xai/grok-4.1-fast-non-reasoning": { - "id": "xai/grok-4.1-fast-non-reasoning", - "name": "Grok-4.1-Fast-Non-Reasoning", - "family": "grok", + "baidu/ernie-4.5-vl-28b-a3b": { + "id": "baidu/ernie-4.5-vl-28b-a3b", + "name": "ERNIE 4.5 VL 28B", + "family": "ernie", "attachment": true, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-11-19", - "last_updated": "2025-11-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "limit": { "context": 2000000, "output": 30000 } - }, - "xai/grok-4.1-fast-reasoning": { - "id": "xai/grok-4.1-fast-reasoning", - "name": "Grok-4.1-Fast-Reasoning", - "family": "grok", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-11-19", - "last_updated": "2025-11-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-06-30", + "last_updated": "2025-06-30", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.13999999999999999, + "output": 0.5599999999999999 + } }, - "xai/grok-3-mini": { - "id": "xai/grok-3-mini", - "name": "Grok 3 Mini", - "family": "grok", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-04-11", - "last_updated": "2025-04-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "baidu/ernie-4.5-300b-a47b": { + "id": "baidu/ernie-4.5-300b-a47b", + "name": "ERNIE 4.5 300B", + "family": "ernie", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-06-30", + "last_updated": "2025-06-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 0.5, "cache_read": 0.075 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 131072, + "input": 131072, + "output": 16384 + }, + "cost": { + "input": 0.35, + "output": 1.15 + } }, - "xai/grok-4.20-multi-agent": { - "id": "xai/grok-4.20-multi-agent", - "name": "Grok-4.20-Multi-Agent", - "attachment": true, + "dmind/dmind-1": { + "id": "dmind/dmind-1", + "name": "DMind-1", + "family": "gpt", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2026-03-13", - "last_updated": "2026-03-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-06-01", + "last_updated": "2025-06-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 6, "cache_read": 0.2 }, - "limit": { "context": 128000, "output": 0 } + "limit": { + "context": 32768, + "input": 32768, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 0.6 + } }, - "xai/grok-4-fast-reasoning": { - "id": "xai/grok-4-fast-reasoning", - "name": "Grok-4-Fast-Reasoning", - "family": "grok", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-09-16", - "last_updated": "2025-09-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "dmind/dmind-1-mini": { + "id": "dmind/dmind-1-mini", + "name": "DMind-1-Mini", + "family": "gpt", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-06-01", + "last_updated": "2025-06-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 128000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 8192 + }, + "cost": { + "input": 0.2, + "output": 0.4 + } }, - "xai/grok-3": { - "id": "xai/grok-3", - "name": "Grok 3", - "family": "grok", - "attachment": true, + "Infermatic/MN-12B-Inferor-v0.0": { + "id": "Infermatic/MN-12B-Inferor-v0.0", + "name": "Mistral Nemo Inferor 12B", + "family": "mistral-nemo", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-04-11", - "last_updated": "2025-04-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-07-01", + "last_updated": "2024-07-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.75 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 16384, + "input": 16384, + "output": 8192 + }, + "cost": { + "input": 0.25499999999999995, + "output": 0.49299999999999994 + } }, - "stabilityai/stablediffusionxl": { - "id": "stabilityai/stablediffusionxl", - "name": "StableDiffusionXL", - "family": "stable-diffusion", - "attachment": true, + "meituan-longcat/LongCat-Flash-Chat-FP8": { + "id": "meituan-longcat/LongCat-Flash-Chat-FP8", + "name": "LongCat Flash", + "family": "longcat", + "attachment": false, "reasoning": false, "tool_call": true, - "temperature": false, - "release_date": "2023-07-09", - "last_updated": "2023-07-09", - "modalities": { "input": ["text", "image"], "output": ["image"] }, + "structured_output": true, + "release_date": "2025-08-31", + "last_updated": "2025-08-31", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 200, "output": 0 } + "limit": { + "context": 128000, + "input": 128000, + "output": 32768 + }, + "cost": { + "input": 0.15, + "output": 0.7 + } }, - "trytako/tako": { - "id": "trytako/tako", - "name": "Tako", - "family": "tako", - "attachment": true, + "meganova-ai/manta-mini-1.0": { + "id": "meganova-ai/manta-mini-1.0", + "name": "Manta Mini 1.0", + "family": "nova", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2024-08-15", - "last_updated": "2024-08-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-12-20", + "last_updated": "2025-12-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 2048, "output": 0 } + "limit": { + "context": 8192, + "input": 8192, + "output": 8192 + }, + "cost": { + "input": 0.02, + "output": 0.16 + } }, - "google/gemini-2.5-flash-lite": { - "id": "google/gemini-2.5-flash-lite", - "name": "Gemini-2.5-Flash-Lite", - "family": "gemini-flash-lite", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-06-19", - "last_updated": "2025-06-19", - "modalities": { "input": ["text", "image", "video", "audio"], "output": ["text"] }, + "meganova-ai/manta-pro-1.0": { + "id": "meganova-ai/manta-pro-1.0", + "name": "Manta Pro 1.0", + "family": "nova", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-12-20", + "last_updated": "2025-12-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.07, "output": 0.28 }, - "limit": { "context": 1024000, "output": 64000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 32768 + }, + "cost": { + "input": 0.060000000000000005, + "output": 0.5 + } }, - "google/lyria": { - "id": "google/lyria", - "name": "Lyria", - "family": "lyria", - "attachment": true, + "meganova-ai/manta-flash-1.0": { + "id": "meganova-ai/manta-flash-1.0", + "name": "Manta Flash 1.0", + "family": "nova", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-06-04", - "last_updated": "2025-06-04", - "modalities": { "input": ["text"], "output": ["audio"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-12-20", + "last_updated": "2025-12-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 0, "output": 0 } + "limit": { + "context": 16384, + "input": 16384, + "output": 16384 + }, + "cost": { + "input": 0.02, + "output": 0.16 + } }, - "google/imagen-4-ultra": { - "id": "google/imagen-4-ultra", - "name": "Imagen-4-Ultra", - "family": "imagen", - "attachment": true, - "reasoning": false, + "minimax/minimax-m2.7": { + "id": "minimax/minimax-m2.7", + "name": "MiniMax M2.7", + "family": "minimax", + "attachment": false, + "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-05-24", - "last_updated": "2025-05-24", - "modalities": { "input": ["text"], "output": ["image"] }, + "structured_output": true, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 480, "output": 0 } + "limit": { + "context": 204800, + "input": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "google/nano-banana-pro": { - "id": "google/nano-banana-pro", - "name": "Nano-Banana-Pro", - "family": "nano-banana", + "minimax/minimax-01": { + "id": "minimax/minimax-01", + "name": "MiniMax 01", + "family": "minimax", "attachment": true, "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-01-15", + "last_updated": "2025-01-15", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000192, + "input": 1000192, + "output": 16384 + }, + "cost": { + "input": 0.1394, + "output": 1.1219999999999999 + } + }, + "minimax/minimax-m2.1": { + "id": "minimax/minimax-m2.1", + "name": "MiniMax M2.1", + "family": "minimax", + "attachment": false, + "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-11-19", - "last_updated": "2025-11-19", - "modalities": { "input": ["text", "image"], "output": ["image"] }, + "structured_output": true, + "release_date": "2025-12-19", + "last_updated": "2025-12-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 12, "cache_read": 0.2 }, - "limit": { "context": 65536, "output": 0 } + "limit": { + "context": 200000, + "input": 200000, + "output": 131072 + }, + "cost": { + "input": 0.33, + "output": 1.32 + } }, - "google/imagen-3-fast": { - "id": "google/imagen-3-fast", - "name": "Imagen-3-Fast", - "family": "imagen", - "attachment": true, + "minimax/minimax-m2-her": { + "id": "minimax/minimax-m2-her", + "name": "MiniMax M2-her", + "family": "minimax", + "attachment": false, "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2026-01-24", + "last_updated": "2026-01-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 65532, + "input": 65532, + "output": 2048 + }, + "cost": { + "input": 0.30200000000000005, + "output": 1.2069999999999999 + } + }, + "minimax/minimax-m2.5": { + "id": "minimax/minimax-m2.5", + "name": "MiniMax M2.5", + "family": "minimax", + "attachment": false, + "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2024-10-17", - "last_updated": "2024-10-17", - "modalities": { "input": ["text"], "output": ["image"] }, + "structured_output": true, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 480, "output": 0 } + "limit": { + "context": 204800, + "input": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "google/imagen-3": { - "id": "google/imagen-3", - "name": "Imagen-3", - "family": "imagen", - "attachment": true, + "qwen/Qwen3.6-35B-A3B:thinking": { + "id": "qwen/Qwen3.6-35B-A3B:thinking", + "name": "Qwen3.6 35B A3B Thinking", + "family": "qwen3.6", + "attachment": false, + "reasoning": true, + "tool_call": false, + "structured_output": false, + "release_date": "2026-04-19", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 16384 + }, + "cost": { + "input": 0.29, + "output": 1.74 + } + }, + "qwen/qwen3.5-397b-a17b": { + "id": "qwen/qwen3.5-397b-a17b", + "name": "Qwen3.5 397B A17B", + "family": "qwen", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2024-10-15", - "last_updated": "2024-10-15", - "modalities": { "input": ["text"], "output": ["image"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2026-02-16", + "last_updated": "2026-02-16", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 258048, + "input": 258048, + "output": 65536 + }, + "cost": { + "input": 0.6, + "output": 3.6 + } + }, + "qwen/Qwen3.6-35B-A3B": { + "id": "qwen/Qwen3.6-35B-A3B", + "name": "Qwen3.6 35B A3B", + "family": "qwen3.6", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2026-04-17", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 16384 + }, + "cost": { + "input": 0.29, + "output": 1.74 + } + }, + "unsloth/gemma-3-1b-it": { + "id": "unsloth/gemma-3-1b-it", + "name": "Gemma 3 1B IT", + "family": "unsloth", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-03-10", + "last_updated": "2025-03-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 480, "output": 0 } + "limit": { + "context": 128000, + "input": 128000, + "output": 8192 + }, + "cost": { + "input": 0.1003, + "output": 0.1003 + } }, - "google/gemini-2.0-flash-lite": { - "id": "google/gemini-2.0-flash-lite", - "name": "Gemini-2.0-Flash-Lite", - "family": "gemini-flash-lite", + "unsloth/gemma-3-12b-it": { + "id": "unsloth/gemma-3-12b-it", + "name": "Gemma 3 12B IT", + "family": "unsloth", "attachment": true, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-02-05", - "last_updated": "2025-02-05", - "modalities": { "input": ["text", "image", "video", "audio"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-03-10", + "last_updated": "2025-03-10", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.052, "output": 0.21 }, - "limit": { "context": 990000, "output": 8192 } + "limit": { + "context": 128000, + "input": 128000, + "output": 131072 + }, + "cost": { + "input": 0.272, + "output": 0.272 + } }, - "google/veo-3.1-fast": { - "id": "google/veo-3.1-fast", - "name": "Veo-3.1-Fast", - "family": "veo", + "unsloth/gemma-3-4b-it": { + "id": "unsloth/gemma-3-4b-it", + "name": "Gemma 3 4B IT", + "family": "unsloth", "attachment": true, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text", "image"], "output": ["video"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-03-10", + "last_updated": "2025-03-10", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 480, "output": 0 } + "limit": { + "context": 128000, + "input": 128000, + "output": 8192 + }, + "cost": { + "input": 0.2006, + "output": 0.2006 + } }, - "google/veo-3-fast": { - "id": "google/veo-3-fast", - "name": "Veo-3-Fast", - "family": "veo", + "unsloth/gemma-3-27b-it": { + "id": "unsloth/gemma-3-27b-it", + "name": "Gemma 3 27B IT", + "family": "unsloth", "attachment": true, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-10-13", - "last_updated": "2025-10-13", - "modalities": { "input": ["text"], "output": ["video"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-03-10", + "last_updated": "2025-03-10", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 480, "output": 0 } + "limit": { + "context": 128000, + "input": 128000, + "output": 96000 + }, + "cost": { + "input": 0.2992, + "output": 0.2992 + } }, - "google/imagen-4-fast": { - "id": "google/imagen-4-fast", - "name": "Imagen-4-Fast", - "family": "imagen", - "attachment": true, + "THUDM/GLM-Z1-9B-0414": { + "id": "THUDM/GLM-Z1-9B-0414", + "name": "GLM Z1 9B 0414", + "family": "glm-z", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-06-25", - "last_updated": "2025-06-25", - "modalities": { "input": ["text"], "output": ["image"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 480, "output": 0 } + "limit": { + "context": 32000, + "input": 32000, + "output": 8000 + }, + "cost": { + "input": 0.2, + "output": 0.2 + } }, - "google/veo-3.1": { - "id": "google/veo-3.1", - "name": "Veo-3.1", - "family": "veo", - "attachment": true, + "THUDM/GLM-4-9B-0414": { + "id": "THUDM/GLM-4-9B-0414", + "name": "GLM 4 9B 0414", + "family": "glm", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text"], "output": ["video"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 480, "output": 0 } + "limit": { + "context": 32000, + "input": 32000, + "output": 8000 + }, + "cost": { + "input": 0.2, + "output": 0.2 + } }, - "google/imagen-4": { - "id": "google/imagen-4", - "name": "Imagen-4", - "family": "imagen", - "attachment": true, + "THUDM/GLM-Z1-Rumination-32B-0414": { + "id": "THUDM/GLM-Z1-Rumination-32B-0414", + "name": "GLM Z1 Rumination 32B 0414", + "family": "glm-z", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text"], "output": ["image"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-04-15", + "last_updated": "2025-04-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 480, "output": 0 } + "limit": { + "context": 32000, + "input": 32000, + "output": 65536 + }, + "cost": { + "input": 0.2, + "output": 0.2 + } }, - "google/veo-3": { - "id": "google/veo-3", - "name": "Veo-3", - "family": "veo", - "attachment": true, + "THUDM/GLM-4-32B-0414": { + "id": "THUDM/GLM-4-32B-0414", + "name": "GLM 4 32B 0414", + "family": "glm", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-05-21", - "last_updated": "2025-05-21", - "modalities": { "input": ["text"], "output": ["video"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 480, "output": 0 } + "limit": { + "context": 128000, + "input": 128000, + "output": 65536 + }, + "cost": { + "input": 0.2, + "output": 0.2 + } }, - "google/gemini-2.5-pro": { - "id": "google/gemini-2.5-pro", - "name": "Gemini-2.5-Pro", - "family": "gemini-pro", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-02-05", - "last_updated": "2025-02-05", - "modalities": { "input": ["text", "image", "video", "audio"], "output": ["text"] }, + "THUDM/GLM-Z1-32B-0414": { + "id": "THUDM/GLM-Z1-32B-0414", + "name": "GLM Z1 32B 0414", + "family": "glm-z", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-04-15", + "last_updated": "2025-04-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.87, "output": 7, "cache_read": 0.087 }, - "limit": { "context": 1065535, "output": 65535 } + "limit": { + "context": 128000, + "input": 128000, + "output": 65536 + }, + "cost": { + "input": 0.2, + "output": 0.2 + } }, - "google/gemini-2.5-flash": { - "id": "google/gemini-2.5-flash", - "name": "Gemini-2.5-Flash", + "google/gemini-3-flash-preview": { + "id": "google/gemini-3-flash-preview", + "name": "Gemini 3 Flash (Preview)", "family": "gemini-flash", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-04-26", - "last_updated": "2025-04-26", - "modalities": { "input": ["text", "image", "video", "audio"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.21, "output": 1.8, "cache_read": 0.021 }, - "limit": { "context": 1065535, "output": 65535 } + "limit": { + "context": 1048756, + "input": 1048756, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 3 + } }, - "google/gemini-2.0-flash": { - "id": "google/gemini-2.0-flash", - "name": "Gemini-2.0-Flash", + "google/gemini-flash-1.5": { + "id": "google/gemini-flash-1.5", + "name": "Gemini 1.5 Flash", "family": "gemini-flash", - "attachment": true, + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text", "image", "video", "audio"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-05-14", + "last_updated": "2024-05-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.42 }, - "limit": { "context": 990000, "output": 8192 } + "limit": { + "context": 2000000, + "input": 2000000, + "output": 8192 + }, + "cost": { + "input": 0.0748, + "output": 0.306 + } }, - "google/gemini-3-pro": { - "id": "google/gemini-3-pro", - "name": "Gemini-3-Pro", - "family": "gemini-pro", + "google/gemini-3-flash-preview-thinking": { + "id": "google/gemini-3-flash-preview-thinking", + "name": "Gemini 3 Flash Thinking", + "family": "gemini-flash", "attachment": true, "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-10-22", - "last_updated": "2025-10-22", - "modalities": { "input": ["text", "image", "video", "audio"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.6, "output": 9.6, "cache_read": 0.16 }, - "limit": { "context": 1048576, "output": 65536 } - }, - "google/gemini-deep-research": { - "id": "google/gemini-deep-research", - "name": "gemini-deep-research", + "limit": { + "context": 1048756, + "input": 1048756, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 3 + } + }, + "moonshotai/kimi-k2.5": { + "id": "moonshotai/kimi-k2.5", + "name": "Kimi K2.5", + "family": "kimi", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "temperature": false, - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "structured_output": false, + "release_date": "2026-01-26", + "last_updated": "2026-01-26", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.6, "output": 9.6 }, - "limit": { "context": 1048576, "output": 0 } + "limit": { + "context": 256000, + "input": 256000, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 1.9 + } }, - "google/veo-2": { - "id": "google/veo-2", - "name": "Veo-2", - "family": "veo", - "attachment": true, + "moonshotai/kimi-k2-instruct": { + "id": "moonshotai/kimi-k2-instruct", + "name": "Kimi K2 Instruct", + "family": "kimi", + "attachment": false, "reasoning": false, "tool_call": true, - "temperature": false, - "release_date": "2024-12-02", - "last_updated": "2024-12-02", - "modalities": { "input": ["text"], "output": ["video"] }, + "structured_output": true, + "release_date": "2025-07-01", + "last_updated": "2025-07-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 480, "output": 0 } + "limit": { + "context": 256000, + "input": 256000, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 2 + } }, - "google/gemini-3.1-pro": { - "id": "google/gemini-3.1-pro", - "name": "Gemini-3.1-Pro", - "attachment": true, + "moonshotai/kimi-k2-thinking-original": { + "id": "moonshotai/kimi-k2-thinking-original", + "name": "Kimi K2 Thinking Original", + "family": "kimi-thinking", + "attachment": false, "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2026-02-19", - "last_updated": "2026-02-19", - "modalities": { "input": ["text", "image", "video", "audio"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 12, "cache_read": 0.2 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 256000, + "input": 256000, + "output": 16384 + }, + "cost": { + "input": 0.6, + "output": 2.5 + } }, - "google/nano-banana": { - "id": "google/nano-banana", - "name": "Nano-Banana", - "family": "nano-banana", - "attachment": true, + "moonshotai/kimi-k2-instruct-0711": { + "id": "moonshotai/kimi-k2-instruct-0711", + "name": "Kimi K2 0711", + "family": "kimi", + "attachment": false, "reasoning": false, "tool_call": true, - "temperature": false, - "release_date": "2025-08-21", - "last_updated": "2025-08-21", - "modalities": { "input": ["text", "image"], "output": ["text", "image"] }, + "structured_output": true, + "release_date": "2025-07-11", + "last_updated": "2025-07-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.21, "output": 1.8, "cache_read": 0.021 }, - "limit": { "context": 65536, "output": 0 } + "limit": { + "context": 128000, + "input": 128000, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 2 + } }, - "google/gemini-3-flash": { - "id": "google/gemini-3-flash", - "name": "Gemini-3-Flash", + "moonshotai/Kimi-Dev-72B": { + "id": "moonshotai/Kimi-Dev-72B", + "name": "Kimi Dev 72B", + "family": "kimi", "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-10-07", - "last_updated": "2025-10-07", - "modalities": { "input": ["text", "image", "video", "audio"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-04-15", + "last_updated": "2025-04-15", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 2.4, "cache_read": 0.04 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 128000, + "input": 128000, + "output": 131072 + }, + "cost": { + "input": 0.4, + "output": 0.4 + } }, - "google/gemini-3.1-flash-lite": { - "id": "google/gemini-3.1-flash-lite", - "name": "Gemini-3.1-Flash-Lite", - "attachment": true, + "moonshotai/kimi-k2-thinking-turbo-original": { + "id": "moonshotai/kimi-k2-thinking-turbo-original", + "name": "Kimi K2 Thinking Turbo Original", + "family": "kimi-thinking", + "attachment": false, "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2026-02-18", - "last_updated": "2026-02-18", - "modalities": { "input": ["text", "image", "video", "audio"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 1.5 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 256000, + "input": 256000, + "output": 16384 + }, + "cost": { + "input": 1.15, + "output": 8 + } }, - "poetools/claude-code": { - "id": "poetools/claude-code", - "name": "claude-code", + "moonshotai/kimi-k2.6": { + "id": "moonshotai/kimi-k2.6", + "name": "Kimi K2.6", + "family": "kimi-k2.6", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "temperature": false, - "release_date": "2025-11-27", - "last_updated": "2025-11-27", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "limit": { "context": 0, "output": 0 } + "structured_output": false, + "release_date": "2026-04-16", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 65536 + }, + "cost": { + "input": 0.53, + "output": 2.73 + } }, - "novita/glm-4.7-n": { - "id": "novita/glm-4.7-n", - "name": "glm-4.7-n", + "moonshotai/kimi-k2.6:thinking": { + "id": "moonshotai/kimi-k2.6:thinking", + "name": "Kimi K2.6 Thinking", + "family": "kimi-thinking", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "limit": { "context": 205000, "output": 131072 } + "structured_output": false, + "release_date": "2026-04-16", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 65536 + }, + "cost": { + "input": 0.53, + "output": 2.73 + } }, - "novita/kimi-k2-thinking": { - "id": "novita/kimi-k2-thinking", - "name": "kimi-k2-thinking", + "moonshotai/Kimi-K2-Instruct-0905": { + "id": "moonshotai/Kimi-K2-Instruct-0905", + "name": "Kimi K2 0905", "family": "kimi", - "attachment": true, - "reasoning": true, + "attachment": false, + "reasoning": false, "tool_call": true, - "temperature": false, - "release_date": "2025-11-07", - "last_updated": "2025-11-07", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 256000, "output": 0 } + "limit": { + "context": 256000, + "input": 256000, + "output": 262144 + }, + "cost": { + "input": 0.4, + "output": 2 + } }, - "novita/kimi-k2.5": { - "id": "novita/kimi-k2.5", - "name": "kimi-k2.5", - "attachment": true, - "reasoning": true, + "moonshotai/kimi-k2-thinking": { + "id": "moonshotai/kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "family": "kimi-thinking", + "attachment": false, + "reasoning": false, "tool_call": true, - "temperature": false, - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "structured_output": true, + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 256000, "output": 262144 } + "limit": { + "context": 256000, + "input": 256000, + "output": 262144 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "novita/glm-4.7-flash": { - "id": "novita/glm-4.7-flash", - "name": "glm-4.7-flash", + "moonshotai/kimi-k2.5:thinking": { + "id": "moonshotai/kimi-k2.5:thinking", + "name": "Kimi K2.5 Thinking", + "family": "kimi-thinking", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2026-01-19", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": false, + "release_date": "2026-01-26", + "last_updated": "2026-01-26", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 200000, "output": 65500 } + "limit": { + "context": 256000, + "input": 256000, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 1.9 + } }, - "novita/minimax-m2.1": { - "id": "novita/minimax-m2.1", - "name": "minimax-m2.1", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-12-26", - "last_updated": "2025-12-26", - "modalities": { "input": ["text"], "output": ["text"] }, + "Tongyi-Zhiwen/QwenLong-L1-32B": { + "id": "Tongyi-Zhiwen/QwenLong-L1-32B", + "name": "QwenLong L1 32B", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-01-25", + "last_updated": "2025-01-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 205000, "output": 131072 } + "limit": { + "context": 128000, + "input": 128000, + "output": 40960 + }, + "cost": { + "input": 0.13999999999999999, + "output": 0.6 + } }, - "novita/glm-4.6": { - "id": "novita/glm-4.6", - "name": "GLM-4.6", - "family": "glm", - "attachment": true, + "nothingiisreal/L3.1-70B-Celeste-V0.1-BF16": { + "id": "nothingiisreal/L3.1-70B-Celeste-V0.1-BF16", + "name": "Llama 3.1 70B Celeste v0.1", + "family": "llama", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 0, "output": 0 } + "limit": { + "context": 16384, + "input": 16384, + "output": 16384 + }, + "cost": { + "input": 0.49299999999999994, + "output": 0.49299999999999994 + } }, - "novita/glm-4.6v": { - "id": "novita/glm-4.6v", - "name": "glm-4.6v", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-12-09", - "last_updated": "2025-12-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "aion-labs/aion-1.0": { + "id": "aion-labs/aion-1.0", + "name": "Aion 1.0", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-02-01", + "last_updated": "2025-02-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 131000, "output": 32768 } + "limit": { + "context": 65536, + "input": 65536, + "output": 8192 + }, + "cost": { + "input": 3.995, + "output": 7.99 + } }, - "novita/glm-4.7": { - "id": "novita/glm-4.7", - "name": "glm-4.7", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "aion-labs/aion-rp-llama-3.1-8b": { + "id": "aion-labs/aion-rp-llama-3.1-8b", + "name": "Llama 3.1 8b (uncensored)", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 205000, "output": 131072 } - }, - "novita/deepseek-v3.2": { - "id": "novita/deepseek-v3.2", - "name": "DeepSeek-V3.2", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.27, "output": 0.4, "cache_read": 0.13 }, - "limit": { "context": 128000, "output": 0 } + "limit": { + "context": 32768, + "input": 32768, + "output": 16384 + }, + "cost": { + "input": 0.2006, + "output": 0.2006 + } }, - "topazlabs-co/topazlabs": { - "id": "topazlabs-co/topazlabs", - "name": "TopazLabs", - "family": "topazlabs", - "attachment": true, + "aion-labs/aion-1.0-mini": { + "id": "aion-labs/aion-1.0-mini", + "name": "Aion 1.0 mini (DeepSeek)", + "family": "deepseek", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2024-12-03", - "last_updated": "2024-12-03", - "modalities": { "input": ["text"], "output": ["image"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-02-20", + "last_updated": "2025-02-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 204, "output": 0 } + "limit": { + "context": 131072, + "input": 131072, + "output": 8192 + }, + "cost": { + "input": 0.7989999999999999, + "output": 1.394 + } }, - "elevenlabs/elevenlabs-v3": { - "id": "elevenlabs/elevenlabs-v3", - "name": "ElevenLabs-v3", - "family": "elevenlabs", - "attachment": true, + "Alibaba-NLP/Tongyi-DeepResearch-30B-A3B": { + "id": "Alibaba-NLP/Tongyi-DeepResearch-30B-A3B", + "name": "Tongyi DeepResearch 30B A3B", + "family": "yi", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-06-05", - "last_updated": "2025-06-05", - "modalities": { "input": ["text"], "output": ["audio"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-08-26", + "last_updated": "2025-08-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 0 } + "limit": { + "context": 128000, + "input": 128000, + "output": 65536 + }, + "cost": { + "input": 0.08, + "output": 0.24000000000000002 + } }, - "elevenlabs/elevenlabs-music": { - "id": "elevenlabs/elevenlabs-music", - "name": "ElevenLabs-Music", - "family": "elevenlabs", - "attachment": true, + "MiniMaxAI/MiniMax-M1-80k": { + "id": "MiniMaxAI/MiniMax-M1-80k", + "name": "MiniMax M1 80K", + "family": "minimax", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-08-29", - "last_updated": "2025-08-29", - "modalities": { "input": ["text"], "output": ["audio"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-06-16", + "last_updated": "2025-06-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 2000, "output": 0 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 131072 + }, + "cost": { + "input": 0.6052, + "output": 2.4225000000000003 + } }, - "elevenlabs/elevenlabs-v2.5-turbo": { - "id": "elevenlabs/elevenlabs-v2.5-turbo", - "name": "ElevenLabs-v2.5-Turbo", - "family": "elevenlabs", + "anthropic/claude-opus-4.6:thinking:low": { + "id": "anthropic/claude-opus-4.6:thinking:low", + "name": "Claude 4.6 Opus Thinking Low", + "family": "claude-opus", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2024-10-28", - "last_updated": "2024-10-28", - "modalities": { "input": ["text"], "output": ["audio"] }, + "structured_output": true, + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 128000, "output": 0 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 128000 + }, + "cost": { + "input": 4.998, + "output": 25.007 + } }, - "lumalabs/ray2": { - "id": "lumalabs/ray2", - "name": "Ray2", - "family": "ray", + "anthropic/claude-opus-4.6": { + "id": "anthropic/claude-opus-4.6", + "name": "Claude 4.6 Opus", + "family": "claude-opus", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-02-20", - "last_updated": "2025-02-20", - "modalities": { "input": ["text", "image"], "output": ["video"] }, + "structured_output": true, + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 5000, "output": 0 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 128000 + }, + "cost": { + "input": 4.998, + "output": 25.007 + } }, - "cerebras/gpt-oss-120b-cs": { - "id": "cerebras/gpt-oss-120b-cs", - "name": "gpt-oss-120b-cs", + "anthropic/claude-sonnet-4.6:thinking": { + "id": "anthropic/claude-sonnet-4.6:thinking", + "name": "Claude Sonnet 4.6 Thinking", + "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-08-06", - "last_updated": "2025-08-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-02-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 0, "output": 0 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 128000 + }, + "cost": { + "input": 2.992, + "output": 14.993999999999998 + } }, - "cerebras/llama-3.3-70b-cs": { - "id": "cerebras/llama-3.3-70b-cs", - "name": "llama-3.3-70b-cs", + "anthropic/claude-opus-4.6:thinking:max": { + "id": "anthropic/claude-opus-4.6:thinking:max", + "name": "Claude 4.6 Opus Thinking Max", + "family": "claude-opus", "attachment": true, - "reasoning": false, - "tool_call": false, - "temperature": false, - "release_date": "2025-05-13", - "last_updated": "2025-05-13", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 0, "output": 0 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 128000 + }, + "cost": { + "input": 4.998, + "output": 25.007 + } }, - "cerebras/qwen3-235b-2507-cs": { - "id": "cerebras/qwen3-235b-2507-cs", - "name": "qwen3-235b-2507-cs", + "anthropic/claude-opus-4.6:thinking:medium": { + "id": "anthropic/claude-opus-4.6:thinking:medium", + "name": "Claude 4.6 Opus Thinking Medium", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-08-06", - "last_updated": "2025-08-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 0, "output": 0 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 128000 + }, + "cost": { + "input": 4.998, + "output": 25.007 + } }, - "cerebras/llama-3.1-8b-cs": { - "id": "cerebras/llama-3.1-8b-cs", - "name": "llama-3.1-8b-cs", + "anthropic/claude-sonnet-4.6": { + "id": "anthropic/claude-sonnet-4.6", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", "attachment": true, "reasoning": false, "tool_call": true, - "temperature": false, - "release_date": "2025-05-13", - "last_updated": "2025-05-13", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-02-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 0, "output": 0 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 128000 + }, + "cost": { + "input": 2.992, + "output": 14.993999999999998 + } }, - "cerebras/qwen3-32b-cs": { - "id": "cerebras/qwen3-32b-cs", - "name": "qwen3-32b-cs", + "anthropic/claude-opus-4.6:thinking": { + "id": "anthropic/claude-opus-4.6:thinking", + "name": "Claude 4.6 Opus Thinking", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-05-15", - "last_updated": "2025-05-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 0, "output": 0 } + "limit": { + "context": 1000000, + "input": 1000000, + "output": 128000 + }, + "cost": { + "input": 4.998, + "output": 25.007 + } }, - "ideogramai/ideogram-v2": { - "id": "ideogramai/ideogram-v2", - "name": "Ideogram-v2", - "family": "ideogram", - "attachment": true, + "abacusai/Dracarys-72B-Instruct": { + "id": "abacusai/Dracarys-72B-Instruct", + "name": "Llama 3.1 70B Dracarys 2", + "family": "llama", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2024-08-21", - "last_updated": "2024-08-21", - "modalities": { "input": ["text", "image"], "output": ["image"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-08-02", + "last_updated": "2025-08-02", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 150, "output": 0 } + "limit": { + "context": 16384, + "input": 16384, + "output": 8192 + }, + "cost": { + "input": 0.49299999999999994, + "output": 0.49299999999999994 + } }, - "ideogramai/ideogram-v2a": { - "id": "ideogramai/ideogram-v2a", - "name": "Ideogram-v2a", - "family": "ideogram", - "attachment": true, + "EVA-UNIT-01/EVA-LLaMA-3.33-70B-v0.0": { + "id": "EVA-UNIT-01/EVA-LLaMA-3.33-70B-v0.0", + "name": "EVA Llama 3.33 70B", + "family": "llama", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-02-27", - "last_updated": "2025-02-27", - "modalities": { "input": ["text"], "output": ["image"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-26", + "last_updated": "2025-07-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 150, "output": 0 } + "limit": { + "context": 16384, + "input": 16384, + "output": 16384 + }, + "cost": { + "input": 2.006, + "output": 2.006 + } }, - "ideogramai/ideogram-v2a-turbo": { - "id": "ideogramai/ideogram-v2a-turbo", - "name": "Ideogram-v2a-Turbo", - "family": "ideogram", - "attachment": true, + "EVA-UNIT-01/EVA-Qwen2.5-72B-v0.2": { + "id": "EVA-UNIT-01/EVA-Qwen2.5-72B-v0.2", + "name": "EVA-Qwen2.5-72B-v0.2", + "family": "qwen", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-02-27", - "last_updated": "2025-02-27", - "modalities": { "input": ["text"], "output": ["image"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 150, "output": 0 } + "limit": { + "context": 16384, + "input": 16384, + "output": 8192 + }, + "cost": { + "input": 0.7989999999999999, + "output": 0.7989999999999999 + } }, - "ideogramai/ideogram": { - "id": "ideogramai/ideogram", - "name": "Ideogram", - "family": "ideogram", - "attachment": true, + "EVA-UNIT-01/EVA-LLaMA-3.33-70B-v0.1": { + "id": "EVA-UNIT-01/EVA-LLaMA-3.33-70B-v0.1", + "name": "EVA-LLaMA-3.33-70B-v0.1", + "family": "llama", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2024-04-03", - "last_updated": "2024-04-03", - "modalities": { "input": ["text", "image"], "output": ["image"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 150, "output": 0 } - } - } - }, - "v0": { - "id": "v0", - "env": ["V0_API_KEY"], - "npm": "@ai-sdk/vercel", - "name": "v0", - "doc": "https://sdk.vercel.ai/providers/ai-sdk-providers/vercel", - "models": { - "v0-1.5-lg": { - "id": "v0-1.5-lg", - "name": "v0-1.5-lg", - "family": "v0", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2025-06-09", - "last_updated": "2025-06-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "limit": { + "context": 16384, + "input": 16384, + "output": 16384 + }, + "cost": { + "input": 2.006, + "output": 2.006 + } + }, + "EVA-UNIT-01/EVA-Qwen2.5-32B-v0.2": { + "id": "EVA-UNIT-01/EVA-Qwen2.5-32B-v0.2", + "name": "EVA-Qwen2.5-32B-v0.2", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-26", + "last_updated": "2025-07-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75 }, - "limit": { "context": 512000, "output": 32000 } + "limit": { + "context": 16384, + "input": 16384, + "output": 8192 + }, + "cost": { + "input": 0.7989999999999999, + "output": 0.7989999999999999 + } }, - "v0-1.0-md": { - "id": "v0-1.0-md", - "name": "v0-1.0-md", - "family": "v0", - "attachment": true, + "huihui-ai/DeepSeek-R1-Distill-Qwen-32B-abliterated": { + "id": "huihui-ai/DeepSeek-R1-Distill-Qwen-32B-abliterated", + "name": "DeepSeek R1 Qwen Abliterated", + "family": "qwen", + "attachment": false, "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 128000, "output": 32000 } + "limit": { + "context": 16384, + "input": 16384, + "output": 8192 + }, + "cost": { + "input": 1.4, + "output": 1.4 + } }, - "v0-1.5-md": { - "id": "v0-1.5-md", - "name": "v0-1.5-md", - "family": "v0", - "attachment": true, + "huihui-ai/DeepSeek-R1-Distill-Llama-70B-abliterated": { + "id": "huihui-ai/DeepSeek-R1-Distill-Llama-70B-abliterated", + "name": "DeepSeek R1 Llama 70B Abliterated", + "family": "deepseek", + "attachment": false, "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2025-06-09", - "last_updated": "2025-06-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 128000, "output": 32000 } - } - } - }, - "opencode": { - "id": "opencode", - "env": ["OPENCODE_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://opencode.ai/zen/v1", - "name": "OpenCode Zen", - "doc": "https://opencode.ai/docs/zen", - "models": { - "gpt-5.2-codex": { - "id": "gpt-5.2-codex", - "name": "GPT-5.2 Codex", - "family": "gpt-codex", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-01-14", - "last_updated": "2026-01-14", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "limit": { + "context": 16384, + "input": 16384, + "output": 8192 + }, + "cost": { + "input": 0.7, + "output": 0.7 + } + }, + "huihui-ai/Llama-3.3-70B-Instruct-abliterated": { + "id": "huihui-ai/Llama-3.3-70B-Instruct-abliterated", + "name": "Llama 3.3 70B Instruct abliterated", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-08-08", + "last_updated": "2025-08-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai" } + "limit": { + "context": 16384, + "input": 16384, + "output": 16384 + }, + "cost": { + "input": 0.7, + "output": 0.7 + } }, - "mimo-v2-flash-free": { - "id": "mimo-v2-flash-free", - "name": "MiMo V2 Flash Free", - "family": "mimo-flash-free", + "huihui-ai/Qwen2.5-32B-Instruct-abliterated": { + "id": "huihui-ai/Qwen2.5-32B-Instruct-abliterated", + "name": "Qwen 2.5 32B Abliterated", + "family": "qwen", "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-12-16", - "last_updated": "2025-12-16", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0 }, - "limit": { "context": 262144, "output": 65536 }, - "status": "deprecated" + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-01-06", + "last_updated": "2025-01-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "input": 32768, + "output": 8192 + }, + "cost": { + "input": 0.7, + "output": 0.7 + } }, - "gpt-5.1-codex-mini": { - "id": "gpt-5.1-codex-mini", - "name": "GPT-5.1 Codex Mini", - "family": "gpt-codex", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "huihui-ai/Llama-3.1-Nemotron-70B-Instruct-HF-abliterated": { + "id": "huihui-ai/Llama-3.1-Nemotron-70B-Instruct-HF-abliterated", + "name": "Nemotron 3.1 70B abliterated", + "family": "nemotron", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.025 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai" } + "limit": { + "context": 16384, + "input": 16384, + "output": 16384 + }, + "cost": { + "input": 0.7, + "output": 0.7 + } }, - "gpt-5.4-pro": { - "id": "gpt-5.4-pro", - "name": "GPT-5.4 Pro", - "family": "gpt-pro", - "attachment": true, - "reasoning": true, - "tool_call": true, + "xiaomi/mimo-v2-flash-thinking-original": { + "id": "xiaomi/mimo-v2-flash-thinking-original", + "name": "MiMo V2 Flash (Thinking) Original", + "family": "mimo", + "attachment": false, + "reasoning": false, + "tool_call": false, "structured_output": false, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-05", - "last_updated": "2026-03-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 30, "output": 180, "cache_read": 30 }, - "limit": { "context": 1050000, "input": 922000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai" } + "limit": { + "context": 256000, + "input": 256000, + "output": 32768 + }, + "cost": { + "input": 0.102, + "output": 0.306 + } }, - "big-pickle": { - "id": "big-pickle", - "name": "Big Pickle", - "family": "big-pickle", + "xiaomi/mimo-v2-flash-thinking": { + "id": "xiaomi/mimo-v2-flash-thinking", + "name": "MiMo V2 Flash (Thinking)", + "family": "mimo", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-10-17", - "last_updated": "2025-10-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 200000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/anthropic" } + "limit": { + "context": 256000, + "input": 256000, + "output": 32768 + }, + "cost": { + "input": 0.102, + "output": 0.306 + } }, - "gpt-5.4-mini": { - "id": "gpt-5.4-mini", - "name": "GPT-5.4 Mini", - "family": "gpt-mini", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-17", - "last_updated": "2026-03-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "xiaomi/mimo-v2-flash": { + "id": "xiaomi/mimo-v2-flash", + "name": "MiMo V2 Flash", + "family": "mimo", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.75, "output": 4.5, "cache_read": 0.075 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai" } + "limit": { + "context": 256000, + "input": 256000, + "output": 32768 + }, + "cost": { + "input": 0.102, + "output": 0.306 + } }, - "kimi-k2-thinking": { - "id": "kimi-k2-thinking", - "name": "Kimi K2 Thinking", - "family": "kimi-thinking", + "xiaomi/mimo-v2-flash-original": { + "id": "xiaomi/mimo-v2-flash-original", + "name": "MiMo V2 Flash Original", + "family": "mimo", "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2024-10", + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "input": 256000, + "output": 32768 + }, + "cost": { + "input": 0.102, + "output": 0.306 + } + }, + "tngtech/DeepSeek-TNG-R1T2-Chimera": { + "id": "tngtech/DeepSeek-TNG-R1T2-Chimera", + "name": "DeepSeek TNG R1T2 Chimera", + "family": "tngtech", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, "release_date": "2025-09-05", "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.4, "output": 2.5, "cache_read": 0.4 }, - "limit": { "context": 262144, "output": 262144 }, - "status": "deprecated" + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 8192 + }, + "cost": { + "input": 0.31, + "output": 0.31 + } }, - "minimax-m2.1-free": { - "id": "minimax-m2.1-free", - "name": "MiniMax M2.1 Free", - "family": "minimax-free", + "tngtech/tng-r1t-chimera": { + "id": "tngtech/tng-r1t-chimera", + "name": "TNG R1T Chimera", + "family": "tngtech", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0 }, - "limit": { "context": 204800, "output": 131072 }, - "status": "deprecated", - "provider": { "npm": "@ai-sdk/anthropic" } + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-11-26", + "last_updated": "2025-11-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "gpt-5": { - "id": "gpt-5", - "name": "GPT-5", + "inflatebot/MN-12B-Mag-Mell-R1": { + "id": "inflatebot/MN-12B-Mag-Mell-R1", + "name": "Mag Mell R1", + "family": "mistral-nemo", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2024-07-01", + "last_updated": "2024-07-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 16384, + "input": 16384, + "output": 8192 + }, + "cost": { + "input": 0.49299999999999994, + "output": 0.49299999999999994 + } + }, + "failspy/Meta-Llama-3-70B-Instruct-abliterated-v3.5": { + "id": "failspy/Meta-Llama-3-70B-Instruct-abliterated-v3.5", + "name": "Llama 3 70B abliterated", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-26", + "last_updated": "2025-07-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "input": 8192, + "output": 8192 + }, + "cost": { + "input": 0.7, + "output": 0.7 + } + } + } + }, + "abacus": { + "id": "abacus", + "env": ["ABACUS_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://routellm.abacus.ai/v1", + "name": "Abacus", + "doc": "https://abacus.ai/help/api", + "models": { + "gpt-5.1-codex-max": { + "id": "gpt-5.1-codex-max", + "name": "GPT-5.1 Codex Max", "family": "gpt", "attachment": true, "reasoning": true, @@ -11526,16 +17010,25 @@ "structured_output": true, "temperature": false, "knowledge": "2024-09-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.07, "output": 8.5, "cache_read": 0.107 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai" } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, - "claude-opus-4-5": { - "id": "claude-opus-4-5", + "claude-opus-4-5-20251101": { + "id": "claude-opus-4-5-20251101", "name": "Claude Opus 4.5", "family": "claude-opus", "attachment": true, @@ -11543,354 +17036,554 @@ "tool_call": true, "temperature": true, "knowledge": "2025-03-31", - "release_date": "2025-11-24", - "last_updated": "2025-11-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-11-01", + "last_updated": "2025-11-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 200000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/anthropic" } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 5, + "output": 25 + } }, "kimi-k2.5": { "id": "kimi-k2.5", "name": "Kimi K2.5", "family": "kimi", - "attachment": true, + "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "structured_output": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 3, "cache_read": 0.08 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0.6, + "output": 3 + } }, - "mimo-v2-omni-free": { - "id": "mimo-v2-omni-free", - "name": "MiMo V2 Omni Free", - "family": "mimo-omni-free", + "gemini-3.1-flash-lite-preview": { + "id": "gemini-3.1-flash-lite-preview", + "name": "Gemini 3.1 Flash Lite Preview", + "family": "gemini-flash", "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "structured_output": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { "input": ["text", "image", "audio", "pdf"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0 }, - "limit": { "context": 262144, "output": 64000 } + "release_date": "2026-03-01", + "last_updated": "2026-03-01", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.25, + "output": 1.5, + "cache_read": 0.025, + "cache_write": 1 + } }, - "gpt-5.3-codex": { - "id": "gpt-5.3-codex", - "name": "GPT-5.3 Codex", - "family": "gpt-codex", + "claude-sonnet-4-6": { + "id": "claude-sonnet-4-6", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, + "temperature": true, "knowledge": "2025-08-31", - "release_date": "2026-02-24", - "last_updated": "2026-02-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai" } + "release_date": "2026-02-17", + "last_updated": "2026-02-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15 + } }, - "qwen3.6-plus-free": { - "id": "qwen3.6-plus-free", - "name": "Qwen3.6 Plus Free", - "family": "qwen-free", - "attachment": false, + "gemini-3.1-pro-preview": { + "id": "gemini-3.1-pro-preview", + "name": "Gemini 3.1 Pro Preview", + "family": "gemini-pro", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "structured_output": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2026-03-30", - "last_updated": "2026-03-30", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2026-02-19", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0 }, - "limit": { "context": 1048576, "output": 64000 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12 + } }, - "gpt-5.3-codex-spark": { - "id": "gpt-5.3-codex-spark", - "name": "GPT-5.3 Codex Spark", - "family": "gpt-codex-spark", - "attachment": false, + "gpt-5.3-chat-latest": { + "id": "gpt-5.3-chat-latest", + "name": "GPT-5.3 Chat Latest", + "family": "gpt", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "release_date": "2026-03-01", + "last_updated": "2026-03-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 128000, "input": 128000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai" } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14 + } }, - "kimi-k2": { - "id": "kimi-k2", - "name": "Kimi K2", - "family": "kimi", + "gemini-3-flash-preview": { + "id": "gemini-3-flash-preview", + "name": "Gemini 3 Flash Preview", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 3 + } + }, + "llama-3.3-70b-versatile": { + "id": "llama-3.3-70b-versatile", + "name": "Llama 3.3 70B Versatile", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.4, "output": 2.5, "cache_read": 0.4 }, - "limit": { "context": 262144, "output": 262144 }, - "status": "deprecated" + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.59, + "output": 0.79 + } }, - "claude-opus-4-6": { - "id": "claude-opus-4-6", - "name": "Claude Opus 4.6", - "family": "claude-opus", + "gpt-5-mini": { + "id": "gpt-5-mini", + "name": "GPT-5 Mini", + "family": "gpt-mini", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-08-31", - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 1000000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/anthropic" } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2 + } }, - "gpt-5.1-codex-max": { - "id": "gpt-5.1-codex-max", - "name": "GPT-5.1 Codex Max", - "family": "gpt-codex", + "gpt-5-nano": { + "id": "gpt-5-nano", + "name": "GPT-5 Nano", + "family": "gpt-nano", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.05, + "output": 0.4 + } + }, + "gpt-5.3-codex": { + "id": "gpt-5.3-codex", + "name": "GPT-5.3 Codex", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai" } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14 + } }, - "claude-sonnet-4-6": { - "id": "claude-sonnet-4-6", - "name": "Claude Sonnet 4.6", + "claude-sonnet-4-5-20250929": { + "id": "claude-sonnet-4-5-20250929", + "name": "Claude Sonnet 4.5", "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": true, "temperature": true, "knowledge": "2025-07-31", - "release_date": "2026-02-17", - "last_updated": "2026-02-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 1000000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/anthropic" } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15 + } }, - "grok-code": { - "id": "grok-code", - "name": "Grok Code Fast 1", - "family": "grok", + "gemini-2.5-pro": { + "id": "gemini-2.5-pro", + "name": "Gemini 2.5 Pro", + "family": "gemini-pro", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-08-20", - "last_updated": "2025-08-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-03-25", + "last_updated": "2025-03-25", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 256000, "output": 256000 }, - "status": "deprecated" + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, - "gpt-5.4": { - "id": "gpt-5.4", - "name": "GPT-5.4", + "grok-4-1-fast-non-reasoning": { + "id": "grok-4-1-fast-non-reasoning", + "name": "Grok 4.1 Fast (Non-Reasoning)", + "family": "grok", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2025-11-17", + "last_updated": "2025-11-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 16384 + }, + "cost": { + "input": 0.2, + "output": 0.5 + } + }, + "gpt-5.2": { + "id": "gpt-5.2", + "name": "GPT-5.2", "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": false, "knowledge": "2025-08-31", - "release_date": "2026-03-05", - "last_updated": "2026-03-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 15, "cache_read": 0.25 }, - "limit": { "context": 1050000, "input": 922000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai" } - }, - "qwen3-coder": { - "id": "qwen3-coder", - "name": "Qwen3 Coder", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.45, "output": 1.8 }, - "limit": { "context": 262144, "output": 65536 }, - "status": "deprecated" + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14 + } }, - "minimax-m2.1": { - "id": "minimax-m2.1", - "name": "MiniMax M2.1", - "family": "minimax", - "attachment": false, + "o3-pro": { + "id": "o3-pro", + "name": "o3-pro", + "family": "o-pro", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.1 }, - "limit": { "context": 204800, "output": 131072 }, - "status": "deprecated" + "temperature": false, + "knowledge": "2024-05", + "release_date": "2025-06-10", + "last_updated": "2025-06-10", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 20, + "output": 40 + } }, - "kimi-k2.5-free": { - "id": "kimi-k2.5-free", - "name": "Kimi K2.5 Free", - "family": "kimi-free", + "gpt-4o-mini": { + "id": "gpt-4o-mini", + "name": "GPT-4o Mini", + "family": "gpt", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2024-10", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0 }, - "limit": { "context": 262144, "output": 262144 }, - "status": "deprecated" + "knowledge": "2024-04", + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "glm-5-free": { - "id": "glm-5-free", - "name": "GLM-5 Free", - "family": "glm-free", + "qwen3-max": { + "id": "qwen3-max", + "name": "Qwen3 Max", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0 }, - "limit": { "context": 204800, "output": 131072 }, - "status": "deprecated" + "release_date": "2025-05-28", + "last_updated": "2025-05-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 1.2, + "output": 6 + } }, - "claude-opus-4-1": { - "id": "claude-opus-4-1", - "name": "Claude Opus 4.1", - "family": "claude-opus", + "o4-mini": { + "id": "o4-mini", + "name": "o4-mini", + "family": "o-mini", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 }, - "provider": { "npm": "@ai-sdk/anthropic" } - }, - "glm-4.6": { - "id": "glm-4.6", - "name": "GLM-4.6", - "family": "glm", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.2, "cache_read": 0.1 }, - "limit": { "context": 204800, "output": 131072 }, - "status": "deprecated" + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4 + } }, - "gpt-5.4-nano": { - "id": "gpt-5.4-nano", - "name": "GPT-5.4 Nano", - "family": "gpt-nano", + "gpt-5.2-codex": { + "id": "gpt-5.2-codex", + "name": "GPT-5.2 Codex", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": false, "knowledge": "2025-08-31", - "release_date": "2026-03-17", - "last_updated": "2026-03-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 1.25, "cache_read": 0.02 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai" } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14 + } }, - "claude-sonnet-4": { - "id": "claude-sonnet-4", - "name": "Claude Sonnet 4", - "family": "claude-sonnet", + "gemini-2.5-flash": { + "id": "gemini-2.5-flash", + "name": "Gemini 2.5 Flash", + "family": "gemini-flash", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, "cost": { - "input": 3, - "output": 15, - "cache_read": 0.3, - "cache_write": 3.75, - "context_over_200k": { "input": 6, "output": 22.5, "cache_read": 0.6, "cache_write": 7.5 } + "input": 0.3, + "output": 2.5 + } + }, + "gpt-5.2-chat-latest": { + "id": "gpt-5.2-chat-latest", + "name": "GPT-5.2 Chat Latest", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-09-30", + "release_date": "2026-01-01", + "last_updated": "2026-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 }, - "limit": { "context": 1000000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/anthropic" } + "cost": { + "input": 1.75, + "output": 14 + } }, - "gpt-5.2": { - "id": "gpt-5.2", - "name": "GPT-5.2", + "gpt-5.3-codex-xhigh": { + "id": "gpt-5.3-codex-xhigh", + "name": "GPT-5.3 Codex XHigh", "family": "gpt", "attachment": true, "reasoning": true, @@ -11898,13 +17591,46 @@ "structured_output": true, "temperature": false, "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14 + } + }, + "grok-code-fast-1": { + "id": "grok-code-fast-1", + "name": "Grok Code Fast 1", + "family": "grok", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2025-09-01", + "last_updated": "2025-09-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai" } + "limit": { + "context": 256000, + "output": 16384 + }, + "cost": { + "input": 0.2, + "output": 1.5 + } }, "gpt-5.1": { "id": "gpt-5.1", @@ -11913,266 +17639,501 @@ "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": false, "knowledge": "2024-09-30", "release_date": "2025-11-13", "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.07, "output": 8.5, "cache_read": 0.107 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai" } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, - "gemini-3-pro": { - "id": "gemini-3-pro", - "name": "Gemini 3 Pro", - "family": "gemini-pro", + "o3-mini": { + "id": "o3-mini", + "name": "o3-mini", + "family": "o-mini", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2024-12-20", + "last_updated": "2025-01-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4 + } + }, + "grok-4-0709": { + "id": "grok-4-0709", + "name": "Grok 4", + "family": "grok", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-11-18", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, + "limit": { + "context": 256000, + "output": 16384 + }, "cost": { - "input": 2, - "output": 12, - "cache_read": 0.2, - "context_over_200k": { "input": 4, "output": 18, "cache_read": 0.4 } + "input": 3, + "output": 15 + } + }, + "route-llm": { + "id": "route-llm", + "name": "Route LLM", + "family": "gpt", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2024-01-01", + "last_updated": "2024-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] }, - "limit": { "context": 1048576, "output": 65536 }, - "status": "deprecated", - "provider": { "npm": "@ai-sdk/google" } + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 3, + "output": 15 + } }, - "glm-5": { - "id": "glm-5", - "name": "GLM-5", - "family": "glm", + "qwen-2.5-coder-32b": { + "id": "qwen-2.5-coder-32b", + "name": "Qwen 2.5 Coder 32B", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-11-11", + "last_updated": "2024-11-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1, "output": 3.2, "cache_read": 0.2 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.79, + "output": 0.79 + } }, - "gpt-5-nano": { - "id": "gpt-5-nano", - "name": "GPT-5 Nano", - "family": "gpt-nano", - "attachment": true, + "gpt-5-codex": { + "id": "gpt-5-codex", + "name": "GPT-5 Codex", + "family": "gpt", + "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": false, - "knowledge": "2024-05-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-09-30", + "release_date": "2025-09-15", + "last_updated": "2025-09-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai" } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, - "nemotron-3-super-free": { - "id": "nemotron-3-super-free", - "name": "Nemotron 3 Super Free", - "family": "nemotron-free", - "attachment": false, + "claude-opus-4-1-20250805": { + "id": "claude-opus-4-1-20250805", + "name": "Claude Opus 4.1", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2026-02", - "release_date": "2026-03-11", - "last_updated": "2026-03-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0 }, - "limit": { "context": 1000000, "output": 128000 } + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75 + } }, - "claude-3-5-haiku": { - "id": "claude-3-5-haiku", - "name": "Claude Haiku 3.5", + "gpt-5.4": { + "id": "gpt-5.4", + "name": "GPT-5.4", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 2.5, + "output": 15 + } + }, + "gpt-5.1-chat-latest": { + "id": "gpt-5.1-chat-latest", + "name": "GPT-5.1 Chat Latest", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10 + } + }, + "claude-haiku-4-5-20251001": { + "id": "claude-haiku-4-5-20251001", + "name": "Claude Haiku 4.5", "family": "claude-haiku", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-07-31", - "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.8, "output": 4, "cache_read": 0.08, "cache_write": 1 }, - "limit": { "context": 200000, "output": 8192 }, - "provider": { "npm": "@ai-sdk/anthropic" } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5 + } }, - "minimax-m2.5-free": { - "id": "minimax-m2.5-free", - "name": "MiniMax M2.5 Free", - "family": "minimax-free", - "attachment": false, + "claude-sonnet-4-20250514": { + "id": "claude-sonnet-4-20250514", + "name": "Claude Sonnet 4", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0 }, - "limit": { "context": 204800, "output": 131072 }, - "provider": { "npm": "@ai-sdk/anthropic" } + "release_date": "2025-05-14", + "last_updated": "2025-05-14", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15 + } }, - "trinity-large-preview-free": { - "id": "trinity-large-preview-free", - "name": "Trinity Large Preview", - "family": "trinity", + "kimi-k2-turbo-preview": { + "id": "kimi-k2-turbo-preview", + "name": "Kimi K2 Turbo Preview", + "family": "kimi", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-06", - "release_date": "2026-01-28", - "last_updated": "2026-01-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 131072 }, - "status": "deprecated" + "release_date": "2025-07-08", + "last_updated": "2025-07-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 8192 + }, + "cost": { + "input": 0.15, + "output": 8 + } }, - "glm-4.7": { - "id": "glm-4.7", - "name": "GLM-4.7", - "family": "glm", - "attachment": false, + "claude-opus-4-6": { + "id": "claude-opus-4-6", + "name": "Claude Opus 4.6", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.2, "cache_read": 0.1 }, - "limit": { "context": 204800, "output": 131072 }, - "status": "deprecated" + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25 + } }, - "gemini-3.1-pro": { - "id": "gemini-3.1-pro", - "name": "Gemini 3.1 Pro Preview", - "family": "gemini-pro", + "gpt-4.1-nano": { + "id": "gpt-4.1-nano", + "name": "GPT-4.1 Nano", + "family": "gpt", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-02-19", - "last_updated": "2026-02-19", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { - "input": 2, - "output": 12, - "cache_read": 0.2, - "context_over_200k": { "input": 4, "output": 18, "cache_read": 0.4 } + "limit": { + "context": 1047576, + "output": 32768 }, - "limit": { "context": 1048576, "output": 65536 }, - "provider": { "npm": "@ai-sdk/google" } + "cost": { + "input": 0.1, + "output": 0.4 + } }, - "claude-sonnet-4-5": { - "id": "claude-sonnet-4-5", - "name": "Claude Sonnet 4.5", + "claude-3-7-sonnet-20250219": { + "id": "claude-3-7-sonnet-20250219", + "name": "Claude Sonnet 3.7", "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": true, "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2024-10-31", + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, "cost": { "input": 3, - "output": 15, - "cache_read": 0.3, - "cache_write": 3.75, - "context_over_200k": { "input": 6, "output": 22.5, "cache_read": 0.6, "cache_write": 7.5 } - }, - "limit": { "context": 1000000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/anthropic" } + "output": 15 + } }, - "glm-4.7-free": { - "id": "glm-4.7-free", - "name": "GLM-4.7 Free", - "family": "glm-free", - "attachment": false, + "o3": { + "id": "o3", + "name": "o3", + "family": "o", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0 }, - "limit": { "context": 204800, "output": 131072 }, - "status": "deprecated" + "temperature": false, + "knowledge": "2024-05", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 2, + "output": 8 + } }, - "gpt-5-codex": { - "id": "gpt-5-codex", - "name": "GPT-5 Codex", - "family": "gpt-codex", + "gpt-5": { + "id": "gpt-5", + "name": "GPT-5", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": false, "knowledge": "2024-09-30", - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.07, "output": 8.5, "cache_read": 0.107 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai" } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, - "claude-haiku-4-5": { - "id": "claude-haiku-4-5", - "name": "Claude Haiku 4.5", - "family": "claude-haiku", + "claude-opus-4-20250514": { + "id": "claude-opus-4-20250514", + "name": "Claude Opus 4", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-02-28", - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-05-14", + "last_updated": "2025-05-14", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75 + } + }, + "gpt-4.1": { + "id": "gpt-4.1", + "name": "GPT-4.1", + "family": "gpt", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 8 + } + }, + "gpt-4.1-mini": { + "id": "gpt-4.1-mini", + "name": "GPT-4.1 Mini", + "family": "gpt", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.1, "cache_write": 1.25 }, - "limit": { "context": 200000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/anthropic" } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.4, + "output": 1.6 + } }, "gpt-5.1-codex": { "id": "gpt-5.1-codex", "name": "GPT-5.1 Codex", - "family": "gpt-codex", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, @@ -12181,2409 +18142,3260 @@ "knowledge": "2024-09-30", "release_date": "2025-11-13", "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.07, "output": 8.5, "cache_read": 0.107 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai" } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, - "minimax-m2.5": { - "id": "minimax-m2.5", - "name": "MiniMax M2.5", - "family": "minimax", - "attachment": false, - "reasoning": true, + "gpt-4o-2024-11-20": { + "id": "gpt-4o-2024-11-20", + "name": "GPT-4o (2024-11-20)", + "family": "gpt", + "attachment": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.06 }, - "limit": { "context": 204800, "output": 131072 } + "knowledge": "2024-10", + "release_date": "2024-11-20", + "last_updated": "2024-11-20", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "gemini-3-flash": { - "id": "gemini-3-flash", - "name": "Gemini 3 Flash", - "family": "gemini-flash", + "grok-4-fast-non-reasoning": { + "id": "grok-4-fast-non-reasoning", + "name": "Grok 4 Fast (Non-Reasoning)", + "family": "grok", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 3, "cache_read": 0.05 }, - "limit": { "context": 1048576, "output": 65536 }, - "provider": { "npm": "@ai-sdk/google" } + "limit": { + "context": 2000000, + "output": 16384 + }, + "cost": { + "input": 0.2, + "output": 0.5 + } }, - "mimo-v2-pro-free": { - "id": "mimo-v2-pro-free", - "name": "MiMo V2 Pro Free", - "family": "mimo-pro-free", - "attachment": true, + "deepseek/deepseek-v3.1": { + "id": "deepseek/deepseek-v3.1", + "name": "DeepSeek V3.1", + "family": "deepseek", + "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2024-12", - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0 }, - "limit": { "context": 1048576, "output": 64000 } - } - } - }, - "berget": { - "id": "berget", - "env": ["BERGET_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.berget.ai/v1", - "name": "Berget.AI", - "doc": "https://api.berget.ai", - "models": { - "openai/gpt-oss-120b": { - "id": "openai/gpt-oss-120b", - "name": "GPT-OSS-120B", - "family": "gpt-oss", + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.55, + "output": 1.66 + } + }, + "Qwen/QwQ-32B": { + "id": "Qwen/QwQ-32B", + "name": "QwQ 32B", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-08", - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-11-28", + "last_updated": "2024-11-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 0.9 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.4, + "output": 0.4 + } }, - "zai-org/GLM-4.7": { - "id": "zai-org/GLM-4.7", - "name": "GLM 4.7", - "family": "glm", + "Qwen/Qwen3-235B-A22B-Instruct-2507": { + "id": "Qwen/Qwen3-235B-A22B-Instruct-2507", + "name": "Qwen3 235B A22B Instruct", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-12", - "release_date": "2026-01-19", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-07-01", + "last_updated": "2025-07-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.7, "output": 2.3 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 262144, + "output": 8192 + }, + "cost": { + "input": 0.13, + "output": 0.6 + } }, - "meta-llama/Llama-3.3-70B-Instruct": { - "id": "meta-llama/Llama-3.3-70B-Instruct", - "name": "Llama 3.3 70B Instruct", - "family": "llama", + "Qwen/Qwen3-32B": { + "id": "Qwen/Qwen3-32B", + "name": "Qwen3 32B", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2025-04-27", - "last_updated": "2025-04-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-04-29", + "last_updated": "2025-04-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.9, "output": 0.9 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.09, + "output": 0.29 + } }, - "intfloat/multilingual-e5-large-instruct": { - "id": "intfloat/multilingual-e5-large-instruct", - "name": "Multilingual-E5-large-instruct", - "family": "text-embedding", + "Qwen/qwen3-coder-480b-a35b-instruct": { + "id": "Qwen/qwen3-coder-480b-a35b-instruct", + "name": "Qwen3 Coder 480B A35B Instruct", + "family": "qwen", "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "knowledge": "2025-04", - "release_date": "2025-04-27", - "last_updated": "2025-04-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-07-22", + "last_updated": "2025-07-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.02, "output": 0 }, - "limit": { "context": 512, "output": 1024 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.29, + "output": 1.2 + } }, - "intfloat/multilingual-e5-large": { - "id": "intfloat/multilingual-e5-large", - "name": "Multilingual-E5-large", - "family": "text-embedding", + "Qwen/Qwen2.5-72B-Instruct": { + "id": "Qwen/Qwen2.5-72B-Instruct", + "name": "Qwen 2.5 72B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, - "temperature": false, - "knowledge": "2025-09", - "release_date": "2025-09-11", - "last_updated": "2025-09-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "release_date": "2024-09-19", + "last_updated": "2024-09-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.02, "output": 0 }, - "limit": { "context": 512, "output": 1024 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.11, + "output": 0.38 + } }, - "KBLab/kb-whisper-large": { - "id": "KBLab/kb-whisper-large", - "name": "KB-Whisper-Large", - "family": "whisper", + "zai-org/glm-4.7": { + "id": "zai-org/glm-4.7", + "name": "GLM-4.7", + "family": "glm", "attachment": false, "reasoning": false, - "tool_call": false, - "temperature": false, - "knowledge": "2025-04", - "release_date": "2025-04-27", - "last_updated": "2025-04-27", - "modalities": { "input": ["audio"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "release_date": "2025-06-01", + "last_updated": "2025-06-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 3, "output": 3 }, - "limit": { "context": 480000, "output": 4800 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.6, + "output": 2.2 + } }, - "BAAI/bge-reranker-v2-m3": { - "id": "BAAI/bge-reranker-v2-m3", - "name": "bge-reranker-v2-m3", - "family": "bge", + "zai-org/glm-5": { + "id": "zai-org/glm-5", + "name": "GLM-5", + "family": "glm", "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "knowledge": "2025-04", - "release_date": "2025-04-23", - "last_updated": "2025-04-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.1 }, - "limit": { "context": 512, "output": 512 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 1, + "output": 3.2 + } }, - "mistralai/Mistral-Small-3.2-24B-Instruct-2506": { - "id": "mistralai/Mistral-Small-3.2-24B-Instruct-2506", - "name": "Mistral Small 3.2 24B Instruct 2506", - "family": "mistral-small", + "zai-org/glm-4.5": { + "id": "zai-org/glm-4.5", + "name": "GLM-4.5", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-09", - "release_date": "2025-10-01", - "last_updated": "2025-10-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 0.3 }, - "limit": { "context": 32000, "output": 8192 } - } - } - }, - "lucidquery": { - "id": "lucidquery", - "env": ["LUCIDQUERY_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://lucidquery.com/api/v1", - "name": "LucidQuery AI", - "doc": "https://lucidquery.com/api/docs", - "models": { - "lucidquery-nexus-coder": { - "id": "lucidquery-nexus-coder", - "name": "LucidQuery Nexus Coder", - "family": "lucid", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2025-08-01", - "release_date": "2025-09-01", - "last_updated": "2025-09-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 5 }, - "limit": { "context": 250000, "output": 60000 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.6, + "output": 2.2 + } }, - "lucidnova-rf1-100b": { - "id": "lucidnova-rf1-100b", - "name": "LucidNova RF1 100B", - "family": "nova", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2025-09-16", - "release_date": "2024-12-28", - "last_updated": "2025-09-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 5 }, - "limit": { "context": 120000, "output": 8000 } - } - } - }, - "zhipuai": { - "id": "zhipuai", - "env": ["ZHIPU_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://open.bigmodel.cn/api/paas/v4", - "name": "Zhipu AI", - "doc": "https://docs.z.ai/guides/overview/pricing", - "models": { - "glm-5": { - "id": "glm-5", - "name": "GLM-5", + "zai-org/glm-4.6": { + "id": "zai-org/glm-4.6", + "name": "GLM-4.6", "family": "glm", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-03-01", + "last_updated": "2025-03-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1, "output": 3.2, "cache_read": 0.2, "cache_write": 0 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.6, + "output": 2.2 + } }, - "glm-4.7": { - "id": "glm-4.7", - "name": "GLM-4.7", - "family": "glm", + "meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo": { + "id": "meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo", + "name": "Llama 3.1 405B Instruct Turbo", + "family": "llama", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 2.2, "cache_read": 0.11, "cache_write": 0 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 3.5, + "output": 3.5 + } }, - "glm-4.5v": { - "id": "glm-4.5v", - "name": "GLM-4.5V", - "family": "glm", + "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8": { + "id": "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8", + "name": "Llama 4 Maverick 17B 128E Instruct FP8", + "family": "llama", "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-08-11", - "last_updated": "2025-08-11", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 1.8 }, - "limit": { "context": 64000, "output": 16384 } - }, - "glm-4.5-air": { - "id": "glm-4.5-air", - "name": "GLM-4.5-Air", - "family": "glm-air", - "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-08", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 1.1, "cache_read": 0.03, "cache_write": 0 }, - "limit": { "context": 131072, "output": 98304 } + "limit": { + "context": 1000000, + "output": 32768 + }, + "cost": { + "input": 0.14, + "output": 0.59 + } }, - "glm-4.5-flash": { - "id": "glm-4.5-flash", - "name": "GLM-4.5-Flash", - "family": "glm-flash", + "meta-llama/Meta-Llama-3.1-8B-Instruct": { + "id": "meta-llama/Meta-Llama-3.1-8B-Instruct", + "name": "Llama 3.1 8B Instruct", + "family": "llama", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 131072, "output": 98304 } - }, - "glm-4.6v": { - "id": "glm-4.6v", - "name": "GLM-4.6V", - "family": "glm", - "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-08", - "last_updated": "2025-12-08", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 0.9 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.02, + "output": 0.05 + } }, - "glm-4.6": { - "id": "glm-4.6", - "name": "GLM-4.6", - "family": "glm", + "deepseek-ai/DeepSeek-R1": { + "id": "deepseek-ai/DeepSeek-R1", + "name": "DeepSeek R1", + "family": "deepseek-thinking", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 2.2, "cache_read": 0.11, "cache_write": 0 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 7 + } }, - "glm-4.7-flashx": { - "id": "glm-4.7-flashx", - "name": "GLM-4.7-FlashX", - "family": "glm-flash", + "deepseek-ai/DeepSeek-V3.2": { + "id": "deepseek-ai/DeepSeek-V3.2", + "name": "DeepSeek V3.2", + "family": "deepseek", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-01-19", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-06-15", + "last_updated": "2025-06-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.07, "output": 0.4, "cache_read": 0.01, "cache_write": 0 }, - "limit": { "context": 200000, "output": 131072 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.27, + "output": 0.4 + } }, - "glm-4.5": { - "id": "glm-4.5", - "name": "GLM-4.5", - "family": "glm", + "deepseek-ai/DeepSeek-V3.1-Terminus": { + "id": "deepseek-ai/DeepSeek-V3.1-Terminus", + "name": "DeepSeek V3.1 Terminus", + "family": "deepseek", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-06-01", + "last_updated": "2025-06-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 2.2, "cache_read": 0.11, "cache_write": 0 }, - "limit": { "context": 131072, "output": 98304 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.27, + "output": 1 + } }, - "glm-4.7-flash": { - "id": "glm-4.7-flash", - "name": "GLM-4.7-Flash", - "family": "glm-flash", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-01-19", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 200000, "output": 131072 } - } - } - }, - "nvidia": { - "id": "nvidia", - "env": ["NVIDIA_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://integrate.api.nvidia.com/v1", - "name": "Nvidia", - "doc": "https://docs.api.nvidia.com/nim/", - "models": { "openai/gpt-oss-120b": { "id": "openai/gpt-oss-120b", - "name": "GPT-OSS-120B", + "name": "GPT-OSS 120B", "family": "gpt-oss", "attachment": true, "reasoning": true, - "tool_call": false, - "temperature": true, - "knowledge": "2025-08", - "release_date": "2025-08-04", - "last_updated": "2025-08-14", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 8192 } - }, - "openai/whisper-large-v3": { - "id": "openai/whisper-large-v3", - "name": "Whisper Large v3", - "family": "whisper", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "knowledge": "2023-09", - "release_date": "2023-09-01", - "last_updated": "2025-09-05", - "modalities": { "input": ["audio"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 0, "output": 4096 } - }, - "microsoft/phi-3-small-8k-instruct": { - "id": "microsoft/phi-3-small-8k-instruct", - "name": "Phi 3 Small 8k Instruct", - "attachment": true, - "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-05-07", - "last_updated": "2024-05-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 8000, "output": 4096 } - }, - "microsoft/phi-3-vision-128k-instruct": { - "id": "microsoft/phi-3-vision-128k-instruct", - "name": "Phi 3 Vision 128k Instruct", + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.08, + "output": 0.44 + } + } + } + }, + "perplexity-agent": { + "id": "perplexity-agent", + "env": ["PERPLEXITY_API_KEY"], + "npm": "@ai-sdk/openai", + "api": "https://api.perplexity.ai/v1", + "name": "Perplexity Agent", + "doc": "https://docs.perplexity.ai/docs/agent-api/models", + "models": { + "perplexity/sonar": { + "id": "perplexity/sonar", + "name": "Sonar", + "family": "sonar", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-05-19", - "last_updated": "2024-05-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "knowledge": "2025-09-01", + "release_date": "2024-01-01", + "last_updated": "2025-09-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.25, + "output": 2.5, + "cache_read": 0.0625 + } }, - "microsoft/phi-3-medium-4k-instruct": { - "id": "microsoft/phi-3-medium-4k-instruct", - "name": "Phi 3 Medium 4k Instruct", + "xai/grok-4-1-fast-non-reasoning": { + "id": "xai/grok-4-1-fast-non-reasoning", + "name": "Grok 4.1 Fast (Non-Reasoning)", + "family": "grok", "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-05-07", - "last_updated": "2024-05-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 4000, "output": 4096 } + "knowledge": "2025-07", + "release_date": "2025-11-19", + "last_updated": "2025-11-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } }, - "microsoft/phi-3.5-vision-instruct": { - "id": "microsoft/phi-3.5-vision-instruct", - "name": "Phi 3.5 Vision Instruct", + "nvidia/nemotron-3-super-120b-a12b": { + "id": "nvidia/nemotron-3-super-120b-a12b", + "name": "Nemotron 3 Super 120B", + "family": "nemotron", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-08-16", - "last_updated": "2024-08-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2026-02", + "release_date": "2026-03-11", + "last_updated": "2026-03-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 1000000, + "output": 32000 + }, + "cost": { + "input": 0.25, + "output": 2.5 + } }, - "microsoft/phi-3-medium-128k-instruct": { - "id": "microsoft/phi-3-medium-128k-instruct", - "name": "Phi 3 Medium 128k Instruct", + "openai/gpt-5.5": { + "id": "openai/gpt-5.5", + "name": "GPT-5.5", + "family": "gpt", "attachment": true, - "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-05-07", - "last_updated": "2024-05-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } - }, - "microsoft/phi-3.5-moe-instruct": { - "id": "microsoft/phi-3.5-moe-instruct", - "name": "Phi 3.5 Moe Instruct", - "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2024-08-17", - "last_updated": "2024-08-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "temperature": false, + "knowledge": "2025-12-01", + "release_date": "2026-04-23", + "last_updated": "2026-04-23", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 30, + "cache_read": 0.5 + } }, - "microsoft/phi-3-small-128k-instruct": { - "id": "microsoft/phi-3-small-128k-instruct", - "name": "Phi 3 Small 128k Instruct", + "openai/gpt-5-mini": { + "id": "openai/gpt-5-mini", + "name": "GPT-5 Mini", + "family": "gpt-mini", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-05-07", - "last_updated": "2024-05-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.025 + } }, - "microsoft/phi-4-mini-instruct": { - "id": "microsoft/phi-4-mini-instruct", - "name": "Phi-4-Mini", - "family": "phi", + "openai/gpt-5.2": { + "id": "openai/gpt-5.2", + "name": "GPT-5.2", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-12", - "release_date": "2024-12-01", - "last_updated": "2025-09-05", - "modalities": { "input": ["text", "image", "audio"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "nvidia/llama3-chatqa-1.5-70b": { - "id": "nvidia/llama3-chatqa-1.5-70b", - "name": "Llama3 Chatqa 1.5 70b", - "attachment": false, - "reasoning": false, + "openai/gpt-5.1": { + "id": "openai/gpt-5.1", + "name": "GPT-5.1", + "family": "gpt", + "attachment": true, + "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2024-04-28", - "last_updated": "2024-04-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "nvidia/llama-3.1-nemotron-70b-instruct": { - "id": "nvidia/llama-3.1-nemotron-70b-instruct", - "name": "Llama 3.1 Nemotron 70b Instruct", - "attachment": false, - "reasoning": false, + "openai/gpt-5.4": { + "id": "openai/gpt-5.4", + "name": "GPT-5.4", + "family": "gpt", + "attachment": true, + "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2024-10-12", - "last_updated": "2024-10-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 2.5, + "output": 15, + "cache_read": 0.25 + } }, - "nvidia/llama-3.3-nemotron-super-49b-v1.5": { - "id": "nvidia/llama-3.3-nemotron-super-49b-v1.5", - "name": "Llama 3.3 Nemotron Super 49b V1.5", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, + "google/gemini-3.1-pro-preview": { + "id": "google/gemini-3.1-pro-preview", + "name": "Gemini 3.1 Pro Preview", + "family": "gemini-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-03-16", - "last_updated": "2025-03-16", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2026-02-19", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2, + "tiers": [ + { + "input": 4, + "output": 18, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 4, + "output": 18, + "cache_read": 0.4 + } + } }, - "nvidia/nemotron-4-340b-instruct": { - "id": "nvidia/nemotron-4-340b-instruct", - "name": "Nemotron 4 340b Instruct", - "attachment": false, - "reasoning": false, + "google/gemini-3-flash-preview": { + "id": "google/gemini-3-flash-preview", + "name": "Gemini 3 Flash Preview", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-06-13", - "last_updated": "2024-06-13", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.05, + "tiers": [ + { + "input": 0.5, + "output": 3, + "cache_read": 0.05, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 0.5, + "output": 3, + "cache_read": 0.05 + } + } }, - "nvidia/cosmos-nemotron-34b": { - "id": "nvidia/cosmos-nemotron-34b", - "name": "Cosmos Nemotron 34B", - "family": "nemotron", - "attachment": false, + "google/gemini-2.5-pro": { + "id": "google/gemini-2.5-pro", + "name": "Gemini 2.5 Pro", + "family": "gemini-pro", + "attachment": true, "reasoning": true, - "tool_call": false, + "tool_call": true, "temperature": true, - "knowledge": "2024-01", - "release_date": "2024-01-01", - "last_updated": "2025-09-05", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125, + "tiers": [ + { + "input": 2.5, + "output": 15, + "cache_read": 0.25, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 2.5, + "output": 15, + "cache_read": 0.25 + } + } }, - "nvidia/nemotron-3-super-120b-a12b": { - "id": "nvidia/nemotron-3-super-120b-a12b", - "name": "Nemotron 3 Super", - "family": "nemotron", - "attachment": false, + "google/gemini-2.5-flash": { + "id": "google/gemini-2.5-flash", + "name": "Gemini 2.5 Flash", + "family": "gemini-flash", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2026-03-11", - "last_updated": "2026-03-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.8 }, - "limit": { "context": 262144, "output": 262144 } + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.03 + } }, - "nvidia/nvidia-nemotron-nano-9b-v2": { - "id": "nvidia/nvidia-nemotron-nano-9b-v2", - "name": "nvidia-nemotron-nano-9b-v2", - "family": "nemotron", - "attachment": false, + "anthropic/claude-haiku-4-5": { + "id": "anthropic/claude-haiku-4-5", + "name": "Claude Haiku 4.5", + "family": "claude-haiku", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-09", - "release_date": "2025-08-18", - "last_updated": "2025-08-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 131072 } + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1 + } }, - "nvidia/llama-3.1-nemotron-51b-instruct": { - "id": "nvidia/llama-3.1-nemotron-51b-instruct", - "name": "Llama 3.1 Nemotron 51b Instruct", - "attachment": false, - "reasoning": false, + "anthropic/claude-sonnet-4-6": { + "id": "anthropic/claude-sonnet-4-6", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-09-22", - "last_updated": "2024-09-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-02-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3 + } }, - "nvidia/nemoretriever-ocr-v1": { - "id": "nvidia/nemoretriever-ocr-v1", - "name": "NeMo Retriever OCR v1", - "family": "nemoretriever", - "attachment": false, - "reasoning": false, - "tool_call": false, + "anthropic/claude-opus-4-7": { + "id": "anthropic/claude-opus-4-7", + "name": "Claude Opus 4.7", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, "temperature": false, - "knowledge": "2024-01", - "release_date": "2024-01-01", - "last_updated": "2025-09-05", - "modalities": { "input": ["image"], "output": ["text"] }, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 0, "output": 4096 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5 + } }, - "nvidia/llama-embed-nemotron-8b": { - "id": "nvidia/llama-embed-nemotron-8b", - "name": "Llama Embed Nemotron 8B", - "family": "llama", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "knowledge": "2025-03", - "release_date": "2025-03-18", - "last_updated": "2025-03-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "anthropic/claude-opus-4-5": { + "id": "anthropic/claude-opus-4-5", + "name": "Claude Opus 4.5", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-11-24", + "last_updated": "2025-11-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 32768, "output": 2048 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5 + } }, - "nvidia/llama-3.3-nemotron-super-49b-v1": { - "id": "nvidia/llama-3.3-nemotron-super-49b-v1", - "name": "Llama 3.3 Nemotron Super 49b V1", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, + "anthropic/claude-opus-4-6": { + "id": "anthropic/claude-opus-4-6", + "name": "Claude Opus 4.6", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-03-16", - "last_updated": "2025-03-16", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5 + } }, - "nvidia/parakeet-tdt-0.6b-v2": { - "id": "nvidia/parakeet-tdt-0.6b-v2", - "name": "Parakeet TDT 0.6B v2", - "family": "parakeet", + "anthropic/claude-sonnet-4-5": { + "id": "anthropic/claude-sonnet-4-5", + "name": "Claude Sonnet 4.5", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3 + } + } + } + }, + "siliconflow-cn": { + "id": "siliconflow-cn", + "env": ["SILICONFLOW_CN_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.siliconflow.cn/v1", + "name": "SiliconFlow (China)", + "doc": "https://cloud.siliconflow.com/models", + "models": { + "Kwaipilot/KAT-Dev": { + "id": "Kwaipilot/KAT-Dev", + "name": "Kwaipilot/KAT-Dev", + "family": "kat-coder", "attachment": false, "reasoning": false, - "tool_call": false, - "temperature": false, - "knowledge": "2024-01", - "release_date": "2024-01-01", - "last_updated": "2025-09-05", - "modalities": { "input": ["audio"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-09-27", + "last_updated": "2026-01-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 0, "output": 4096 } + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.2, + "output": 0.6 + } }, - "nvidia/nemotron-3-nano-30b-a3b": { - "id": "nvidia/nemotron-3-nano-30b-a3b", - "name": "nemotron-3-nano-30b-a3b", - "family": "nemotron", + "Qwen/Qwen3.5-397B-A17B": { + "id": "Qwen/Qwen3.5-397B-A17B", + "name": "Qwen/Qwen3.5-397B-A17B", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-09", - "release_date": "2024-12", - "last_updated": "2024-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-02-16", + "last_updated": "2026-02-16", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.29, + "output": 1.74 + } }, - "nvidia/llama-3.1-nemotron-ultra-253b-v1": { - "id": "nvidia/llama-3.1-nemotron-ultra-253b-v1", - "name": "Llama-3.1-Nemotron-Ultra-253B-v1", - "family": "llama", + "Qwen/Qwen3.5-35B-A3B": { + "id": "Qwen/Qwen3.5-35B-A3B", + "name": "Qwen/Qwen3.5-35B-A3B", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2024-07-01", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 8192 } + "knowledge": "2025-04", + "release_date": "2026-02-25", + "last_updated": "2026-02-25", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.23, + "output": 1.86 + } }, - "z-ai/glm5": { - "id": "z-ai/glm5", - "name": "GLM5", - "family": "glm", + "Qwen/Qwen3.5-122B-A10B": { + "id": "Qwen/Qwen3.5-122B-A10B", + "name": "Qwen/Qwen3.5-122B-A10B", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-02-26", + "last_updated": "2026-02-26", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 202752, "output": 131000 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.29, + "output": 2.32 + } }, - "z-ai/glm4.7": { - "id": "z-ai/glm4.7", - "name": "GLM-4.7", - "family": "glm", + "Qwen/Qwen3.5-9B": { + "id": "Qwen/Qwen3.5-9B", + "name": "Qwen/Qwen3.5-9B", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-03", + "last_updated": "2026-03-03", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.22, + "output": 1.74 + } }, - "stepfun-ai/step-3.5-flash": { - "id": "stepfun-ai/step-3.5-flash", - "name": "Step 3.5 Flash", + "Qwen/Qwen3.5-27B": { + "id": "Qwen/Qwen3.5-27B", + "name": "Qwen/Qwen3.5-27B", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2026-02-02", - "last_updated": "2026-02-02", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-02-25", + "last_updated": "2026-02-25", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 256000, "output": 16384 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.26, + "output": 2.09 + } }, - "google/gemma-3-1b-it": { - "id": "google/gemma-3-1b-it", - "name": "Gemma 3 1b It", - "attachment": true, - "reasoning": false, + "Qwen/Qwen3.5-4B": { + "id": "Qwen/Qwen3.5-4B", + "name": "Qwen/Qwen3.5-4B", + "family": "qwen", + "attachment": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-03-10", - "last_updated": "2025-03-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-03-03", + "last_updated": "2026-03-03", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "google/gemma-3n-e2b-it": { - "id": "google/gemma-3n-e2b-it", - "name": "Gemma 3n E2b It", - "attachment": true, - "reasoning": false, + "Qwen/Qwen3.6-35B-A3B": { + "id": "Qwen/Qwen3.6-35B-A3B", + "name": "Qwen/Qwen3.6-35B-A3B", + "family": "qwen", + "attachment": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2024-06", - "release_date": "2025-06-12", - "last_updated": "2025-06-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-04-17", + "last_updated": "2026-04-17", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.23, + "output": 1.86 + } }, - "google/gemma-3-27b-it": { - "id": "google/gemma-3-27b-it", - "name": "Gemma-3-27B-IT", - "family": "gemma", - "attachment": true, - "reasoning": true, + "Qwen/Qwen2.5-72B-Instruct": { + "id": "Qwen/Qwen2.5-72B-Instruct", + "name": "Qwen/Qwen2.5-72B-Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2024-12-01", - "last_updated": "2025-09-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2024-09-18", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 33000, + "output": 4000 + }, + "cost": { + "input": 0.59, + "output": 0.59 + } }, - "google/gemma-3n-e4b-it": { - "id": "google/gemma-3n-e4b-it", - "name": "Gemma 3n E4b It", - "attachment": true, + "Qwen/Qwen3-Coder-480B-A35B-Instruct": { + "id": "Qwen/Qwen3-Coder-480B-A35B-Instruct", + "name": "Qwen/Qwen3-Coder-480B-A35B-Instruct", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2024-06", - "release_date": "2025-06-03", - "last_updated": "2025-06-03", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2025-07-31", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.25, + "output": 1 + } }, - "google/codegemma-1.1-7b": { - "id": "google/codegemma-1.1-7b", - "name": "Codegemma 1.1 7b", - "attachment": false, + "Qwen/Qwen3-VL-8B-Instruct": { + "id": "Qwen/Qwen3-VL-8B-Instruct", + "name": "Qwen/Qwen3-VL-8B-Instruct", + "family": "qwen", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-04-30", - "last_updated": "2024-04-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2025-10-15", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.18, + "output": 0.68 + } }, - "google/codegemma-7b": { - "id": "google/codegemma-7b", - "name": "Codegemma 7b", - "attachment": false, + "Qwen/Qwen3-VL-32B-Instruct": { + "id": "Qwen/Qwen3-VL-32B-Instruct", + "name": "Qwen/Qwen3-VL-32B-Instruct", + "family": "qwen", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-03-21", - "last_updated": "2024-03-21", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2025-10-21", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.2, + "output": 0.6 + } }, - "google/gemma-2-2b-it": { - "id": "google/gemma-2-2b-it", - "name": "Gemma 2 2b It", - "attachment": false, - "reasoning": false, + "Qwen/Qwen3-VL-30B-A3B-Thinking": { + "id": "Qwen/Qwen3-VL-30B-A3B-Thinking", + "name": "Qwen/Qwen3-VL-30B-A3B-Thinking", + "family": "qwen", + "attachment": true, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2024-07-16", - "last_updated": "2024-07-16", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2025-10-11", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.29, + "output": 1 + } }, - "google/gemma-2-27b-it": { - "id": "google/gemma-2-27b-it", - "name": "Gemma 2 27b It", + "Qwen/Qwen2.5-14B-Instruct": { + "id": "Qwen/Qwen2.5-14B-Instruct", + "name": "Qwen/Qwen2.5-14B-Instruct", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2024-06-24", - "last_updated": "2024-06-24", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2024-09-18", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 33000, + "output": 4000 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } }, - "google/gemma-3-12b-it": { - "id": "google/gemma-3-12b-it", - "name": "Gemma 3 12b It", - "attachment": false, + "Qwen/Qwen3-VL-235B-A22B-Instruct": { + "id": "Qwen/Qwen3-VL-235B-A22B-Instruct", + "name": "Qwen/Qwen3-VL-235B-A22B-Instruct", + "family": "qwen", + "attachment": true, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-03-01", - "last_updated": "2025-03-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2025-10-04", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.3, + "output": 1.5 + } }, - "minimaxai/minimax-m2.1": { - "id": "minimaxai/minimax-m2.1", - "name": "MiniMax-M2.1", - "family": "minimax", + "Qwen/Qwen3-Next-80B-A3B-Thinking": { + "id": "Qwen/Qwen3-Next-80B-A3B-Thinking", + "name": "Qwen/Qwen3-Next-80B-A3B-Thinking", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 204800, "output": 131072 } + "release_date": "2025-09-25", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.14, + "output": 0.57 + } }, - "minimaxai/minimax-m2.5": { - "id": "minimaxai/minimax-m2.5", - "name": "MiniMax-M2.5", - "family": "minimax", - "attachment": false, - "reasoning": true, + "Qwen/Qwen2.5-VL-32B-Instruct": { + "id": "Qwen/Qwen2.5-VL-32B-Instruct", + "name": "Qwen/Qwen2.5-VL-32B-Instruct", + "family": "qwen", + "attachment": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-08", - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 204800, "output": 131072 } + "release_date": "2025-03-24", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.27, + "output": 0.27 + } }, - "deepseek-ai/deepseek-v3.1-terminus": { - "id": "deepseek-ai/deepseek-v3.1-terminus", - "name": "DeepSeek V3.1 Terminus", - "family": "deepseek", - "attachment": false, + "Qwen/Qwen3-Omni-30B-A3B-Thinking": { + "id": "Qwen/Qwen3-Omni-30B-A3B-Thinking", + "name": "Qwen/Qwen3-Omni-30B-A3B-Thinking", + "family": "qwen", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-09-22", - "last_updated": "2025-09-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-10-04", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 66000, + "output": 66000 + }, + "cost": { + "input": 0.1, + "output": 0.4 + } }, - "deepseek-ai/deepseek-r1": { - "id": "deepseek-ai/deepseek-r1", - "name": "Deepseek R1", + "Qwen/Qwen3-235B-A22B-Thinking-2507": { + "id": "Qwen/Qwen3-235B-A22B-Thinking-2507", + "name": "Qwen/Qwen3-235B-A22B-Thinking-2507", + "family": "qwen", "attachment": false, "reasoning": true, - "tool_call": false, - "structured_output": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2025-07-28", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.13, + "output": 0.6 + } }, - "deepseek-ai/deepseek-coder-6.7b-instruct": { - "id": "deepseek-ai/deepseek-coder-6.7b-instruct", - "name": "Deepseek Coder 6.7b Instruct", + "Qwen/Qwen2.5-32B-Instruct": { + "id": "Qwen/Qwen2.5-32B-Instruct", + "name": "Qwen/Qwen2.5-32B-Instruct", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2023-10-29", - "last_updated": "2023-10-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2024-09-19", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 33000, + "output": 4000 + }, + "cost": { + "input": 0.18, + "output": 0.18 + } }, - "deepseek-ai/deepseek-v3.1": { - "id": "deepseek-ai/deepseek-v3.1", - "name": "DeepSeek V3.1", - "family": "deepseek", + "Qwen/Qwen2.5-72B-Instruct-128K": { + "id": "Qwen/Qwen2.5-72B-Instruct-128K", + "name": "Qwen/Qwen2.5-72B-Instruct-128K", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-08-20", - "last_updated": "2025-08-26", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-09-18", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 131000, + "output": 4000 + }, + "cost": { + "input": 0.59, + "output": 0.59 + } }, - "deepseek-ai/deepseek-r1-0528": { - "id": "deepseek-ai/deepseek-r1-0528", - "name": "Deepseek R1 0528", + "Qwen/Qwen3-14B": { + "id": "Qwen/Qwen3-14B", + "name": "Qwen/Qwen3-14B", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-05-28", - "last_updated": "2025-05-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2025-04-30", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.07, + "output": 0.28 + } }, - "deepseek-ai/deepseek-v3.2": { - "id": "deepseek-ai/deepseek-v3.2", - "name": "DeepSeek V3.2", - "family": "deepseek", - "attachment": false, - "reasoning": true, + "Qwen/Qwen3-Omni-30B-A3B-Instruct": { + "id": "Qwen/Qwen3-Omni-30B-A3B-Instruct", + "name": "Qwen/Qwen3-Omni-30B-A3B-Instruct", + "family": "qwen", + "attachment": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-10-04", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 163840, "output": 65536 } - }, - "qwen/qwq-32b": { - "id": "qwen/qwq-32b", - "name": "Qwq 32b", - "attachment": false, - "reasoning": true, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2025-03-05", - "last_updated": "2025-03-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 66000, + "output": 66000 + }, + "cost": { + "input": 0.1, + "output": 0.4 + } }, - "qwen/qwen2.5-coder-7b-instruct": { - "id": "qwen/qwen2.5-coder-7b-instruct", - "name": "Qwen2.5 Coder 7b Instruct", + "Qwen/Qwen3-Coder-30B-A3B-Instruct": { + "id": "Qwen/Qwen3-Coder-30B-A3B-Instruct", + "name": "Qwen/Qwen3-Coder-30B-A3B-Instruct", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2024-09-17", - "last_updated": "2024-09-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2025-08-01", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.07, + "output": 0.28 + } }, - "qwen/qwen2.5-coder-32b-instruct": { - "id": "qwen/qwen2.5-coder-32b-instruct", - "name": "Qwen2.5 Coder 32b Instruct", + "Qwen/Qwen3-32B": { + "id": "Qwen/Qwen3-32B", + "name": "Qwen/Qwen3-32B", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2024-11-06", - "last_updated": "2024-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2025-04-30", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.14, + "output": 0.57 + } }, - "qwen/qwen3-coder-480b-a35b-instruct": { - "id": "qwen/qwen3-coder-480b-a35b-instruct", - "name": "Qwen3 Coder 480B A35B Instruct", + "Qwen/Qwen3-235B-A22B-Instruct-2507": { + "id": "Qwen/Qwen3-235B-A22B-Instruct-2507", + "name": "Qwen/Qwen3-235B-A22B-Instruct-2507", "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 66536 } + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.09, + "output": 0.6 + } }, - "qwen/qwen3-next-80b-a3b-thinking": { - "id": "qwen/qwen3-next-80b-a3b-thinking", - "name": "Qwen3-Next-80B-A3B-Thinking", + "Qwen/Qwen3-30B-A3B-Instruct-2507": { + "id": "Qwen/Qwen3-30B-A3B-Instruct-2507", + "name": "Qwen/Qwen3-30B-A3B-Instruct-2507", "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2024-12-01", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 16384 } + "release_date": "2025-07-30", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.09, + "output": 0.3 + } }, - "qwen/qwen3-next-80b-a3b-instruct": { - "id": "qwen/qwen3-next-80b-a3b-instruct", - "name": "Qwen3-Next-80B-A3B-Instruct", + "Qwen/Qwen3-8B": { + "id": "Qwen/Qwen3-8B", + "name": "Qwen/Qwen3-8B", "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2024-12-01", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-04-30", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 16384 } + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.06, + "output": 0.06 + } }, - "qwen/qwen3-235b-a22b": { - "id": "qwen/qwen3-235b-a22b", - "name": "Qwen3-235B-A22B", + "Qwen/Qwen3-Next-80B-A3B-Instruct": { + "id": "Qwen/Qwen3-Next-80B-A3B-Instruct", + "name": "Qwen/Qwen3-Next-80B-A3B-Instruct", "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2024-12-01", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-09-18", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.14, + "output": 1.4 + } }, - "qwen/qwen3.5-397b-a17b": { - "id": "qwen/qwen3.5-397b-a17b", - "name": "Qwen3.5-397B-A17B", + "Qwen/Qwen3-VL-8B-Thinking": { + "id": "Qwen/Qwen3-VL-8B-Thinking", + "name": "Qwen/Qwen3-VL-8B-Thinking", "family": "qwen", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2026-01", - "release_date": "2026-02-16", - "last_updated": "2026-02-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 8192 } + "release_date": "2025-10-15", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.18, + "output": 2 + } }, - "black-forest-labs/flux.1-dev": { - "id": "black-forest-labs/flux.1-dev", - "name": "FLUX.1-dev", - "family": "flux", - "attachment": false, + "Qwen/Qwen3-Omni-30B-A3B-Captioner": { + "id": "Qwen/Qwen3-Omni-30B-A3B-Captioner", + "name": "Qwen/Qwen3-Omni-30B-A3B-Captioner", + "family": "qwen", + "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-08", - "release_date": "2024-08-01", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["image"] }, + "release_date": "2025-10-04", + "last_updated": "2025-11-25", + "modalities": { + "input": ["audio"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 4096, "output": 0 } + "limit": { + "context": 66000, + "output": 66000 + }, + "cost": { + "input": 0.1, + "output": 0.4 + } }, - "moonshotai/kimi-k2-thinking": { - "id": "moonshotai/kimi-k2-thinking", - "name": "Kimi K2 Thinking", - "family": "kimi-thinking", + "Qwen/QwQ-32B": { + "id": "Qwen/QwQ-32B", + "name": "Qwen/QwQ-32B", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": true, "structured_output": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-11", - "last_updated": "2025-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 262144, "output": 262144 } + "release_date": "2025-03-06", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.15, + "output": 0.58 + } }, - "moonshotai/kimi-k2.5": { - "id": "moonshotai/kimi-k2.5", - "name": "Kimi K2.5", - "family": "kimi", + "Qwen/Qwen3-VL-30B-A3B-Instruct": { + "id": "Qwen/Qwen3-VL-30B-A3B-Instruct", + "name": "Qwen/Qwen3-VL-30B-A3B-Instruct", + "family": "qwen", "attachment": true, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2025-07", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 262144 } - }, - "moonshotai/kimi-k2-instruct-0905": { - "id": "moonshotai/kimi-k2-instruct-0905", - "name": "Kimi K2 0905", - "family": "kimi", - "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 262144 } - }, - "moonshotai/kimi-k2-instruct": { - "id": "moonshotai/kimi-k2-instruct", - "name": "Kimi K2 Instruct", - "family": "kimi", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-01", - "release_date": "2025-01-01", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-10-05", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 8192 } - }, - "meta/codellama-70b": { - "id": "meta/codellama-70b", - "name": "Codellama 70b", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2024-01-29", - "last_updated": "2024-01-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.29, + "output": 1 + } }, - "meta/llama-3.3-70b-instruct": { - "id": "meta/llama-3.3-70b-instruct", - "name": "Llama 3.3 70b Instruct", + "Qwen/Qwen2.5-Coder-32B-Instruct": { + "id": "Qwen/Qwen2.5-Coder-32B-Instruct", + "name": "Qwen/Qwen2.5-Coder-32B-Instruct", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2024-11-26", - "last_updated": "2024-11-26", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2024-11-11", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 33000, + "output": 4000 + }, + "cost": { + "input": 0.18, + "output": 0.18 + } }, - "meta/llama-3.2-1b-instruct": { - "id": "meta/llama-3.2-1b-instruct", - "name": "Llama 3.2 1b Instruct", + "Qwen/Qwen2.5-7B-Instruct": { + "id": "Qwen/Qwen2.5-7B-Instruct", + "name": "Qwen/Qwen2.5-7B-Instruct", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2023-12", "release_date": "2024-09-18", - "last_updated": "2024-09-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 33000, + "output": 4000 + }, + "cost": { + "input": 0.05, + "output": 0.05 + } }, - "meta/llama-3.1-405b-instruct": { - "id": "meta/llama-3.1-405b-instruct", - "name": "Llama 3.1 405b Instruct", - "attachment": false, - "reasoning": false, + "Qwen/Qwen3-VL-235B-A22B-Thinking": { + "id": "Qwen/Qwen3-VL-235B-A22B-Thinking", + "name": "Qwen/Qwen3-VL-235B-A22B-Thinking", + "family": "qwen", + "attachment": true, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2024-07-16", - "last_updated": "2024-07-16", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2025-10-04", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.45, + "output": 3.5 + } }, - "meta/llama3-8b-instruct": { - "id": "meta/llama3-8b-instruct", - "name": "Llama3 8b Instruct", + "Qwen/Qwen3-30B-A3B-Thinking-2507": { + "id": "Qwen/Qwen3-30B-A3B-Thinking-2507", + "name": "Qwen/Qwen3-30B-A3B-Thinking-2507", + "family": "qwen", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2024-04-17", - "last_updated": "2024-04-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2025-07-31", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 131000 + }, + "cost": { + "input": 0.09, + "output": 0.3 + } }, - "meta/llama-4-scout-17b-16e-instruct": { - "id": "meta/llama-4-scout-17b-16e-instruct", - "name": "Llama 4 Scout 17b 16e Instruct", + "Qwen/Qwen3-VL-32B-Thinking": { + "id": "Qwen/Qwen3-VL-32B-Thinking", + "name": "Qwen/Qwen3-VL-32B-Thinking", + "family": "qwen", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2024-02", - "release_date": "2025-04-02", - "last_updated": "2025-04-02", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2025-10-21", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.2, + "output": 1.5 + } }, - "meta/llama-3.2-11b-vision-instruct": { - "id": "meta/llama-3.2-11b-vision-instruct", - "name": "Llama 3.2 11b Vision Instruct", + "Qwen/Qwen2.5-VL-72B-Instruct": { + "id": "Qwen/Qwen2.5-VL-72B-Instruct", + "name": "Qwen/Qwen2.5-VL-72B-Instruct", + "family": "qwen", "attachment": true, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-09-18", - "last_updated": "2024-09-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2025-01-28", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 4000 + }, + "cost": { + "input": 0.59, + "output": 0.59 + } }, - "meta/llama3-70b-instruct": { - "id": "meta/llama3-70b-instruct", - "name": "Llama3 70b Instruct", + "stepfun-ai/Step-3.5-Flash": { + "id": "stepfun-ai/Step-3.5-Flash", + "name": "stepfun-ai/Step-3.5-Flash", + "family": "step", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2024-04-17", - "last_updated": "2024-04-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.1, + "output": 0.3 + } }, - "meta/llama-4-maverick-17b-128e-instruct": { - "id": "meta/llama-4-maverick-17b-128e-instruct", - "name": "Llama 4 Maverick 17b 128e Instruct", + "zai-org/GLM-4.5V": { + "id": "zai-org/GLM-4.5V", + "name": "zai-org/GLM-4.5V", + "family": "glm", "attachment": true, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2024-02", - "release_date": "2025-04-01", - "last_updated": "2025-04-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2025-08-13", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 66000, + "output": 66000 + }, + "cost": { + "input": 0.14, + "output": 0.86 + } }, - "meta/llama-3.1-70b-instruct": { - "id": "meta/llama-3.1-70b-instruct", - "name": "Llama 3.1 70b Instruct", + "zai-org/GLM-4.6": { + "id": "zai-org/GLM-4.6", + "name": "zai-org/GLM-4.6", + "family": "glm", "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2024-07-16", - "last_updated": "2024-07-16", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2025-10-04", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 205000, + "output": 205000 + }, + "cost": { + "input": 0.5, + "output": 1.9 + } }, - "mistralai/devstral-2-123b-instruct-2512": { - "id": "mistralai/devstral-2-123b-instruct-2512", - "name": "Devstral-2-123B-Instruct-2512", - "family": "devstral", + "zai-org/GLM-4.6V": { + "id": "zai-org/GLM-4.6V", + "name": "zai-org/GLM-4.6V", + "family": "glm", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-12", - "release_date": "2025-12-08", - "last_updated": "2025-12-09", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 262144 } + "release_date": "2025-12-07", + "last_updated": "2025-12-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.3, + "output": 0.9 + } }, - "mistralai/mistral-large-3-675b-instruct-2512": { - "id": "mistralai/mistral-large-3-675b-instruct-2512", - "name": "Mistral Large 3 675B Instruct 2512", - "family": "mistral-large", - "attachment": true, + "zai-org/GLM-4.5-Air": { + "id": "zai-org/GLM-4.5-Air", + "name": "zai-org/GLM-4.5-Air", + "family": "glm-air", + "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-12-02", - "last_updated": "2025-12-02", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 262144 } + "release_date": "2025-07-28", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.14, + "output": 0.86 + } }, - "mistralai/mistral-large-2-instruct": { - "id": "mistralai/mistral-large-2-instruct", - "name": "Mistral Large 2 Instruct", + "inclusionAI/Ling-flash-2.0": { + "id": "inclusionAI/Ling-flash-2.0", + "name": "inclusionAI/Ling-flash-2.0", + "family": "ling", "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2024-07-24", - "last_updated": "2024-07-24", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2025-09-18", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.14, + "output": 0.57 + } }, - "mistralai/ministral-14b-instruct-2512": { - "id": "mistralai/ministral-14b-instruct-2512", - "name": "Ministral 3 14B Instruct 2512", - "family": "ministral", - "attachment": true, + "inclusionAI/Ling-mini-2.0": { + "id": "inclusionAI/Ling-mini-2.0", + "name": "inclusionAI/Ling-mini-2.0", + "family": "ling", + "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-12", - "release_date": "2025-12-01", - "last_updated": "2025-12-08", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 262144 } - }, - "mistralai/mamba-codestral-7b-v0.1": { - "id": "mistralai/mamba-codestral-7b-v0.1", - "name": "Mamba Codestral 7b V0.1", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2024-07-16", - "last_updated": "2024-07-16", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2025-09-10", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.07, + "output": 0.28 + } }, - "mistralai/codestral-22b-instruct-v0.1": { - "id": "mistralai/codestral-22b-instruct-v0.1", - "name": "Codestral 22b Instruct V0.1", + "inclusionAI/Ring-flash-2.0": { + "id": "inclusionAI/Ring-flash-2.0", + "name": "inclusionAI/Ring-flash-2.0", + "family": "ring", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2024-05-29", - "last_updated": "2024-05-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } - }, - "mistralai/mistral-small-3.1-24b-instruct-2503": { - "id": "mistralai/mistral-small-3.1-24b-instruct-2503", - "name": "Mistral Small 3.1 24b Instruct 2503", - "attachment": false, - "reasoning": false, - "tool_call": true, + "release_date": "2025-09-29", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.14, + "output": 0.57 + } + }, + "ascend-tribe/pangu-pro-moe": { + "id": "ascend-tribe/pangu-pro-moe", + "name": "ascend-tribe/pangu-pro-moe", + "family": "pangu", + "attachment": false, + "reasoning": true, + "tool_call": false, "structured_output": true, "temperature": true, - "release_date": "2025-03-11", - "last_updated": "2025-03-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } - } - } - }, - "nebius": { - "id": "nebius", - "env": ["NEBIUS_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.tokenfactory.nebius.com/v1", - "name": "Nebius Token Factory", - "doc": "https://docs.tokenfactory.nebius.com/", - "models": { - "openai/gpt-oss-120b": { - "id": "openai/gpt-oss-120b", - "name": "gpt-oss-120b", + "release_date": "2025-07-02", + "last_updated": "2026-01-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.2, + "output": 0.6 + } + }, + "tencent/Hunyuan-MT-7B": { + "id": "tencent/Hunyuan-MT-7B", + "name": "tencent/Hunyuan-MT-7B", + "family": "hunyuan", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "knowledge": "2025-09", - "release_date": "2026-01-10", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.6, "reasoning": 0.6, "cache_read": 0.015, "cache_write": 0.18 }, - "limit": { "context": 128000, "input": 124000, "output": 8192 } + "release_date": "2025-09-18", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 33000, + "output": 33000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "openai/gpt-oss-20b": { - "id": "openai/gpt-oss-20b", - "name": "gpt-oss-20b", + "tencent/Hunyuan-A13B-Instruct": { + "id": "tencent/Hunyuan-A13B-Instruct", + "name": "tencent/Hunyuan-A13B-Instruct", + "family": "hunyuan", "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-09", - "release_date": "2026-01-10", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.05, "output": 0.2, "cache_read": 0.005, "cache_write": 0.06 }, - "limit": { "context": 128000, "input": 124000, "output": 4096 } + "release_date": "2025-06-30", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.14, + "output": 0.57 + } }, - "NousResearch/Hermes-4-405B": { - "id": "NousResearch/Hermes-4-405B", - "name": "Hermes-4-405B", + "Pro/zai-org/GLM-4.7": { + "id": "Pro/zai-org/GLM-4.7", + "name": "Pro/zai-org/GLM-4.7", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, "temperature": true, - "knowledge": "2025-11", - "release_date": "2026-01-30", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1, "output": 3, "reasoning": 3, "cache_read": 0.1, "cache_write": 1.25 }, - "limit": { "context": 128000, "input": 120000, "output": 8192 } + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 205000, + "output": 205000 + }, + "cost": { + "input": 0.6, + "output": 2.2 + } }, - "NousResearch/Hermes-4-70B": { - "id": "NousResearch/Hermes-4-70B", - "name": "Hermes-4-70B", + "Pro/zai-org/GLM-5.1": { + "id": "Pro/zai-org/GLM-5.1", + "name": "Pro/zai-org/GLM-5.1", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, "temperature": true, - "knowledge": "2025-11", - "release_date": "2026-01-30", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-08", + "last_updated": "2026-04-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.13, "output": 0.4, "reasoning": 0.4, "cache_read": 0.013, "cache_write": 0.16 }, - "limit": { "context": 128000, "input": 120000, "output": 8192 } + "limit": { + "context": 205000, + "output": 205000 + }, + "cost": { + "input": 1.4, + "output": 4.4, + "cache_write": 0 + } }, - "zai-org/GLM-4.5-Air": { - "id": "zai-org/GLM-4.5-Air", - "name": "GLM-4.5-Air", + "Pro/zai-org/GLM-5": { + "id": "Pro/zai-org/GLM-5", + "name": "Pro/zai-org/GLM-5", + "family": "glm", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-11-15", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 1.2, "cache_read": 0.02, "cache_write": 0.25 }, - "limit": { "context": 128000, "input": 124000, "output": 4096 } + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 205000, + "output": 205000 + }, + "cost": { + "input": 1, + "output": 3.2 + } }, - "zai-org/GLM-4.5": { - "id": "zai-org/GLM-4.5", - "name": "GLM-4.5", + "Pro/deepseek-ai/DeepSeek-V3": { + "id": "Pro/deepseek-ai/DeepSeek-V3", + "name": "Pro/deepseek-ai/DeepSeek-V3", + "family": "deepseek", "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-11-15", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-26", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.6, "output": 2.2, "cache_read": 0.06, "cache_write": 0.75 }, - "limit": { "context": 128000, "input": 124000, "output": 4096 } + "limit": { + "context": 164000, + "output": 164000 + }, + "cost": { + "input": 0.25, + "output": 1 + } }, - "zai-org/GLM-5": { - "id": "zai-org/GLM-5", - "name": "GLM-5", + "Pro/deepseek-ai/DeepSeek-R1": { + "id": "Pro/deepseek-ai/DeepSeek-R1", + "name": "Pro/deepseek-ai/DeepSeek-R1", + "family": "deepseek-thinking", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "knowledge": "2026-01", - "release_date": "2026-03-01", - "last_updated": "2026-03-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-05-28", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 3.2, "cache_read": 0.1, "cache_write": 1 }, - "limit": { "context": 200000, "input": 200000, "output": 16384 } + "limit": { + "context": 164000, + "output": 164000 + }, + "cost": { + "input": 0.5, + "output": 2.18 + } }, - "zai-org/GLM-4.7-FP8": { - "id": "zai-org/GLM-4.7-FP8", - "name": "GLM-4.7 (FP8)", + "Pro/deepseek-ai/DeepSeek-V3.2": { + "id": "Pro/deepseek-ai/DeepSeek-V3.2", + "name": "Pro/deepseek-ai/DeepSeek-V3.2", + "family": "deepseek", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-12", - "release_date": "2026-01-15", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-03", + "last_updated": "2025-12-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 2, "cache_read": 0.04, "cache_write": 0.5 }, - "limit": { "context": 128000, "input": 124000, "output": 4096 } + "limit": { + "context": 164000, + "output": 164000 + }, + "cost": { + "input": 0.27, + "output": 0.42 + } }, - "nvidia/Nemotron-Nano-V2-12b": { - "id": "nvidia/Nemotron-Nano-V2-12b", - "name": "Nemotron-Nano-V2-12b", + "Pro/deepseek-ai/DeepSeek-V3.1-Terminus": { + "id": "Pro/deepseek-ai/DeepSeek-V3.1-Terminus", + "name": "Pro/deepseek-ai/DeepSeek-V3.1-Terminus", + "family": "deepseek", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-03-15", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.07, "output": 0.2, "cache_read": 0.007, "cache_write": 0.08 }, - "limit": { "context": 32000, "input": 30000, "output": 4096 } + "release_date": "2025-09-29", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 164000, + "output": 164000 + }, + "cost": { + "input": 0.27, + "output": 1 + } }, - "nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B": { - "id": "nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B", - "name": "Nemotron-3-Nano-30B-A3B", + "Pro/moonshotai/Kimi-K2-Thinking": { + "id": "Pro/moonshotai/Kimi-K2-Thinking", + "name": "Pro/moonshotai/Kimi-K2-Thinking", + "family": "kimi-thinking", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-05", - "release_date": "2025-08-10", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.06, "output": 0.24, "cache_read": 0.006, "cache_write": 0.075 }, - "limit": { "context": 32000, "input": 30000, "output": 4096 } + "release_date": "2025-11-07", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.55, + "output": 2.5 + } }, - "nvidia/nemotron-3-super-120b-a12b": { - "id": "nvidia/nemotron-3-super-120b-a12b", - "name": "Nemotron-3-Super-120B-A12B", + "Pro/moonshotai/Kimi-K2.6": { + "id": "Pro/moonshotai/Kimi-K2.6", + "name": "Pro/moonshotai/Kimi-K2.6", + "family": "kimi", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, "temperature": true, - "knowledge": "2026-02", - "release_date": "2026-03-11", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 0.9 }, - "limit": { "context": 256000, "input": 256000, "output": 32768 } + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.95, + "output": 4, + "cache_read": 0.16 + } }, - "nvidia/Llama-3_1-Nemotron-Ultra-253B-v1": { - "id": "nvidia/Llama-3_1-Nemotron-Ultra-253B-v1", - "name": "Llama-3.1-Nemotron-Ultra-253B-v1", + "Pro/moonshotai/Kimi-K2-Instruct-0905": { + "id": "Pro/moonshotai/Kimi-K2-Instruct-0905", + "name": "Pro/moonshotai/Kimi-K2-Instruct-0905", + "family": "kimi", "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-01-15", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 1.8, "cache_read": 0.06, "cache_write": 0.75 }, - "limit": { "context": 128000, "input": 120000, "output": 4096 } + "release_date": "2025-09-08", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.4, + "output": 2 + } }, - "google/gemma-3-27b-it": { - "id": "google/gemma-3-27b-it", - "name": "Gemma-3-27b-it", - "attachment": true, - "reasoning": false, + "Pro/moonshotai/Kimi-K2.5": { + "id": "Pro/moonshotai/Kimi-K2.5", + "name": "Pro/moonshotai/Kimi-K2.5", + "family": "kimi", + "attachment": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, "temperature": true, - "knowledge": "2025-10", - "release_date": "2026-01-20", - "last_updated": "2026-02-04", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.3, "cache_read": 0.01, "cache_write": 0.125 }, - "limit": { "context": 110000, "input": 100000, "output": 8192 } + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.45, + "output": 2.25 + } }, - "google/gemma-3-27b-it-fast": { - "id": "google/gemma-3-27b-it-fast", - "name": "Gemma-3-27b-it (Fast)", - "attachment": true, + "Pro/MiniMaxAI/MiniMax-M2.5": { + "id": "Pro/MiniMaxAI/MiniMax-M2.5", + "name": "Pro/MiniMaxAI/MiniMax-M2.5", + "family": "minimax", + "attachment": false, "reasoning": false, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, "temperature": true, - "knowledge": "2025-10", - "release_date": "2026-01-20", - "last_updated": "2026-02-04", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.6, "cache_read": 0.02, "cache_write": 0.25 }, - "limit": { "context": 110000, "input": 100000, "output": 8192 } + "release_date": "2026-02-13", + "last_updated": "2026-02-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 192000, + "output": 131000 + }, + "cost": { + "input": 0.3, + "output": 1.22 + } }, - "google/gemma-2-2b-it": { - "id": "google/gemma-2-2b-it", - "name": "Gemma-2-2b-it", + "Pro/MiniMaxAI/MiniMax-M2.1": { + "id": "Pro/MiniMaxAI/MiniMax-M2.1", + "name": "Pro/MiniMaxAI/MiniMax-M2.1", + "family": "minimax", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-06", - "release_date": "2024-07-31", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.02, "output": 0.06, "cache_read": 0.002, "cache_write": 0.025 }, - "limit": { "context": 8192, "input": 8000, "output": 4096 } + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 197000, + "output": 131000 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "google/gemma-2-9b-it-fast": { - "id": "google/gemma-2-9b-it-fast", - "name": "Gemma-2-9b-it (Fast)", - "attachment": false, + "PaddlePaddle/PaddleOCR-VL": { + "id": "PaddlePaddle/PaddleOCR-VL", + "name": "PaddlePaddle/PaddleOCR-VL", + "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": false, "temperature": true, - "knowledge": "2024-06", - "release_date": "2024-06-27", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-10-16", + "last_updated": "2025-10-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.03, "output": 0.09, "cache_read": 0.003, "cache_write": 0.0375 }, - "limit": { "context": 8192, "input": 8000, "output": 4096 } + "limit": { + "context": 16384, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "PrimeIntellect/INTELLECT-3": { - "id": "PrimeIntellect/INTELLECT-3", - "name": "INTELLECT-3", - "attachment": false, + "PaddlePaddle/PaddleOCR-VL-1.5": { + "id": "PaddlePaddle/PaddleOCR-VL-1.5", + "name": "PaddlePaddle/PaddleOCR-VL-1.5", + "attachment": true, "reasoning": false, - "tool_call": true, - "structured_output": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-10", - "release_date": "2026-01-25", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01-29", + "last_updated": "2026-01-29", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 1.1, "cache_read": 0.02, "cache_write": 0.25 }, - "limit": { "context": 128000, "input": 120000, "output": 8192 } + "limit": { + "context": 16384, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "meta-llama/Llama-Guard-3-8B": { - "id": "meta-llama/Llama-Guard-3-8B", - "name": "Llama-Guard-3-8B", - "attachment": false, + "deepseek-ai/DeepSeek-OCR": { + "id": "deepseek-ai/DeepSeek-OCR", + "name": "deepseek-ai/DeepSeek-OCR", + "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": true, - "temperature": false, - "knowledge": "2024-04", - "release_date": "2024-04-18", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "release_date": "2025-10-20", + "last_updated": "2025-10-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.02, "output": 0.06, "cache_read": 0.002, "cache_write": 0.025 }, - "limit": { "context": 8192, "input": 8000, "output": 1024 } + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "meta-llama/Llama-3.3-70B-Instruct": { - "id": "meta-llama/Llama-3.3-70B-Instruct", - "name": "Llama-3.3-70B-Instruct", + "deepseek-ai/DeepSeek-V3.1-Terminus": { + "id": "deepseek-ai/DeepSeek-V3.1-Terminus", + "name": "deepseek-ai/DeepSeek-V3.1-Terminus", + "family": "deepseek", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-08", - "release_date": "2025-12-05", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.13, "output": 0.4, "cache_read": 0.013, "cache_write": 0.16 }, - "limit": { "context": 128000, "input": 120000, "output": 8192 } + "release_date": "2025-09-29", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 164000, + "output": 164000 + }, + "cost": { + "input": 0.27, + "output": 1 + } }, - "meta-llama/Meta-Llama-3.1-8B-Instruct": { - "id": "meta-llama/Meta-Llama-3.1-8B-Instruct", - "name": "Meta-Llama-3.1-8B-Instruct", + "deepseek-ai/DeepSeek-V3.2": { + "id": "deepseek-ai/DeepSeek-V3.2", + "name": "deepseek-ai/DeepSeek-V3.2", + "family": "deepseek", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2024-07-23", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.02, "output": 0.06, "cache_read": 0.002, "cache_write": 0.025 }, - "limit": { "context": 128000, "input": 120000, "output": 4096 } + "release_date": "2025-12-03", + "last_updated": "2025-12-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 164000, + "output": 164000 + }, + "cost": { + "input": 0.27, + "output": 0.42 + } }, - "meta-llama/Meta-Llama-3.1-8B-Instruct-fast": { - "id": "meta-llama/Meta-Llama-3.1-8B-Instruct-fast", - "name": "Meta-Llama-3.1-8B-Instruct (Fast)", + "deepseek-ai/DeepSeek-R1-Distill-Qwen-14B": { + "id": "deepseek-ai/DeepSeek-R1-Distill-Qwen-14B", + "name": "deepseek-ai/DeepSeek-R1-Distill-Qwen-14B", + "family": "qwen", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2024-07-23", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.03, "output": 0.09, "cache_read": 0.003, "cache_write": 0.03 }, - "limit": { "context": 128000, "input": 120000, "output": 4096 } + "release_date": "2025-01-20", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } }, - "meta-llama/Llama-3.3-70B-Instruct-fast": { - "id": "meta-llama/Llama-3.3-70B-Instruct-fast", - "name": "Llama-3.3-70B-Instruct (Fast)", + "deepseek-ai/DeepSeek-R1": { + "id": "deepseek-ai/DeepSeek-R1", + "name": "deepseek-ai/DeepSeek-R1", + "family": "deepseek-thinking", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-08", - "release_date": "2025-12-05", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.25, "output": 0.75, "cache_read": 0.025, "cache_write": 0.31 }, - "limit": { "context": 128000, "input": 120000, "output": 8192 } + "release_date": "2025-05-28", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 164000, + "output": 164000 + }, + "cost": { + "input": 0.5, + "output": 2.18 + } }, - "MiniMaxAI/MiniMax-M2.1": { - "id": "MiniMaxAI/MiniMax-M2.1", - "name": "MiniMax-M2.1", + "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B": { + "id": "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B", + "name": "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "knowledge": "2025-10", - "release_date": "2026-02-01", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2, "reasoning": 1.2, "cache_read": 0.03, "cache_write": 0.375 }, - "limit": { "context": 128000, "input": 120000, "output": 8192 } + "release_date": "2025-01-20", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.18, + "output": 0.18 + } }, - "deepseek-ai/DeepSeek-V3-0324": { - "id": "deepseek-ai/DeepSeek-V3-0324", - "name": "DeepSeek-V3-0324", + "deepseek-ai/DeepSeek-V3": { + "id": "deepseek-ai/DeepSeek-V3", + "name": "deepseek-ai/DeepSeek-V3", + "family": "deepseek", "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-03-24", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.5, "output": 1.5, "cache_read": 0.05, "cache_write": 0.1875 }, - "limit": { "context": 128000, "input": 120000, "output": 8192 } + "release_date": "2024-12-26", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 164000, + "output": 164000 + }, + "cost": { + "input": 0.25, + "output": 1 + } }, - "deepseek-ai/DeepSeek-R1-0528-fast": { - "id": "deepseek-ai/DeepSeek-R1-0528-fast", - "name": "DeepSeek R1 0528 Fast", + "deepseek-ai/deepseek-vl2": { + "id": "deepseek-ai/deepseek-vl2", + "name": "deepseek-ai/deepseek-vl2", "family": "deepseek", - "attachment": false, - "reasoning": true, + "attachment": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-01-01", - "last_updated": "2025-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2, "output": 6 }, - "limit": { "context": 131072, "output": 8192 } + "release_date": "2024-12-13", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 4000, + "output": 4000 + }, + "cost": { + "input": 0.15, + "output": 0.15 + } }, - "deepseek-ai/DeepSeek-V3-0324-fast": { - "id": "deepseek-ai/DeepSeek-V3-0324-fast", - "name": "DeepSeek-V3-0324 (Fast)", + "baidu/ERNIE-4.5-300B-A47B": { + "id": "baidu/ERNIE-4.5-300B-A47B", + "name": "baidu/ERNIE-4.5-300B-A47B", + "family": "ernie", "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-03-24", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.75, "output": 2.25, "cache_read": 0.075, "cache_write": 0.28125 }, - "limit": { "context": 128000, "input": 120000, "output": 8192 } + "release_date": "2025-07-02", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.28, + "output": 1.1 + } }, - "deepseek-ai/DeepSeek-R1-0528": { - "id": "deepseek-ai/DeepSeek-R1-0528", - "name": "DeepSeek-R1-0528", + "THUDM/GLM-Z1-32B-0414": { + "id": "THUDM/GLM-Z1-32B-0414", + "name": "THUDM/GLM-Z1-32B-0414", + "family": "glm-z", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "knowledge": "2025-11", - "release_date": "2026-01-15", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.8, "output": 2.4, "reasoning": 2.4, "cache_read": 0.08, "cache_write": 1 }, - "limit": { "context": 128000, "input": 120000, "output": 32768 } + "release_date": "2025-04-18", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.14, + "output": 0.57 + } }, - "deepseek-ai/DeepSeek-V3.2": { - "id": "deepseek-ai/DeepSeek-V3.2", - "name": "DeepSeek-V3.2", + "THUDM/GLM-4-32B-0414": { + "id": "THUDM/GLM-4-32B-0414", + "name": "THUDM/GLM-4-32B-0414", + "family": "glm", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "knowledge": "2025-11", - "release_date": "2026-01-20", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 0.45, "reasoning": 0.45, "cache_read": 0.03, "cache_write": 0.375 }, - "limit": { "context": 163000, "input": 160000, "output": 16384 } - }, - "intfloat/e5-mistral-7b-instruct": { - "id": "intfloat/e5-mistral-7b-instruct", - "name": "e5-mistral-7b-instruct", - "family": "text-embedding", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": false, - "knowledge": "2023-12", - "release_date": "2024-01-01", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.01, "output": 0 }, - "limit": { "context": 32768, "input": 32768, "output": 0 } - }, - "black-forest-labs/flux-dev": { - "id": "black-forest-labs/flux-dev", - "name": "FLUX.1-dev", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": false, - "knowledge": "2024-07", - "release_date": "2024-08-01", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["image"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 77, "input": 77, "output": 0 } + "release_date": "2025-04-18", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 33000, + "output": 33000 + }, + "cost": { + "input": 0.27, + "output": 0.27 + } }, - "black-forest-labs/flux-schnell": { - "id": "black-forest-labs/flux-schnell", - "name": "FLUX.1-schnell", + "THUDM/GLM-4-9B-0414": { + "id": "THUDM/GLM-4-9B-0414", + "name": "THUDM/GLM-4-9B-0414", + "family": "glm", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": false, - "knowledge": "2024-07", - "release_date": "2024-08-01", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["image"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 77, "input": 77, "output": 0 } - }, - "Qwen/Qwen3-Next-80B-A3B-Thinking": { - "id": "Qwen/Qwen3-Next-80B-A3B-Thinking", - "name": "Qwen3-Next-80B-A3B-Thinking", - "attachment": false, - "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "knowledge": "2025-12", - "release_date": "2026-01-28", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 1.2, "reasoning": 1.2, "cache_read": 0.015, "cache_write": 0.18 }, - "limit": { "context": 128000, "input": 120000, "output": 16384 } + "release_date": "2025-04-18", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 33000, + "output": 33000 + }, + "cost": { + "input": 0.086, + "output": 0.086 + } }, - "Qwen/Qwen3-30B-A3B-Thinking-2507": { - "id": "Qwen/Qwen3-30B-A3B-Thinking-2507", - "name": "Qwen3-30B-A3B-Thinking-2507", + "THUDM/GLM-Z1-9B-0414": { + "id": "THUDM/GLM-Z1-9B-0414", + "name": "THUDM/GLM-Z1-9B-0414", + "family": "glm-z", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "knowledge": "2025-12", - "release_date": "2026-01-28", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.3, "reasoning": 0.3, "cache_read": 0.01, "cache_write": 0.125 }, - "limit": { "context": 128000, "input": 120000, "output": 16384 } + "release_date": "2025-04-18", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.086, + "output": 0.086 + } }, - "Qwen/Qwen3-32B": { - "id": "Qwen/Qwen3-32B", - "name": "Qwen3-32B", + "moonshotai/Kimi-K2-Instruct-0905": { + "id": "moonshotai/Kimi-K2-Instruct-0905", + "name": "moonshotai/Kimi-K2-Instruct-0905", + "family": "kimi", "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-12", - "release_date": "2026-01-28", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.3, "cache_read": 0.01, "cache_write": 0.125 }, - "limit": { "context": 128000, "input": 120000, "output": 8192 } + "release_date": "2025-09-08", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.4, + "output": 2 + } }, - "Qwen/Qwen3-235B-A22B-Thinking-2507": { - "id": "Qwen/Qwen3-235B-A22B-Thinking-2507", - "name": "Qwen3 235B A22B Thinking 2507", - "family": "qwen", + "moonshotai/Kimi-K2-Thinking": { + "id": "moonshotai/Kimi-K2-Thinking", + "name": "moonshotai/Kimi-K2-Thinking", + "family": "kimi-thinking", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-07-25", - "last_updated": "2025-10-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-11-07", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.8 }, - "limit": { "context": 262144, "output": 8192 } + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.55, + "output": 2.5 + } }, - "Qwen/Qwen2.5-Coder-7B-fast": { - "id": "Qwen/Qwen2.5-Coder-7B-fast", - "name": "Qwen2.5-Coder-7B (Fast)", + "ByteDance-Seed/Seed-OSS-36B-Instruct": { + "id": "ByteDance-Seed/Seed-OSS-36B-Instruct", + "name": "ByteDance-Seed/Seed-OSS-36B-Instruct", + "family": "seed", "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2024-09", - "release_date": "2024-09-19", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.03, "output": 0.09, "cache_read": 0.003, "cache_write": 0.03 }, - "limit": { "context": 128000, "input": 120000, "output": 8192 } - }, - "Qwen/Qwen2.5-VL-72B-Instruct": { - "id": "Qwen/Qwen2.5-VL-72B-Instruct", - "name": "Qwen2.5-VL-72B-Instruct", - "attachment": true, + "release_date": "2025-09-04", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.21, + "output": 0.57 + } + } + } + }, + "submodel": { + "id": "submodel", + "env": ["SUBMODEL_INSTAGEN_ACCESS_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://llm.submodel.ai/v1", + "name": "submodel", + "doc": "https://submodel.gitbook.io", + "models": { + "Qwen/Qwen3-235B-A22B-Instruct-2507": { + "id": "Qwen/Qwen3-235B-A22B-Instruct-2507", + "name": "Qwen3 235B A22B Instruct 2507", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-01-20", - "last_updated": "2026-02-04", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-08-23", + "last_updated": "2025-08-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.25, "output": 0.75, "cache_read": 0.025, "cache_write": 0.31 }, - "limit": { "context": 128000, "input": 120000, "output": 8192 } + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0.2, + "output": 0.3 + } }, - "Qwen/Qwen3-32B-fast": { - "id": "Qwen/Qwen3-32B-fast", - "name": "Qwen3-32B (Fast)", + "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8": { + "id": "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8", + "name": "Qwen3 Coder 480B A35B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-12", - "release_date": "2026-01-28", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.6, "cache_read": 0.02, "cache_write": 0.25 }, - "limit": { "context": 128000, "input": 120000, "output": 8192 } + "release_date": "2025-08-23", + "last_updated": "2025-08-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.2, + "output": 0.8 + } }, - "Qwen/Qwen3-Coder-30B-A3B-Instruct": { - "id": "Qwen/Qwen3-Coder-30B-A3B-Instruct", - "name": "Qwen3-Coder-30B-A3B-Instruct", + "Qwen/Qwen3-235B-A22B-Thinking-2507": { + "id": "Qwen/Qwen3-235B-A22B-Thinking-2507", + "name": "Qwen3 235B A22B Thinking 2507", + "family": "qwen", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-12", - "release_date": "2026-01-28", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-23", + "last_updated": "2025-08-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.3, "cache_read": 0.01, "cache_write": 0.125 }, - "limit": { "context": 128000, "input": 120000, "output": 8192 } + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0.2, + "output": 0.6 + } }, - "Qwen/Qwen3-Coder-480B-A35B-Instruct": { - "id": "Qwen/Qwen3-Coder-480B-A35B-Instruct", - "name": "Qwen3 Coder 480B A35B Instruct", - "family": "qwen", + "zai-org/GLM-4.5-Air": { + "id": "zai-org/GLM-4.5-Air", + "name": "GLM 4.5 Air", + "family": "glm-air", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-23", - "last_updated": "2025-10-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.4, "output": 1.8 }, - "limit": { "context": 262144, "output": 66536 } + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.1, + "output": 0.5 + } }, - "Qwen/Qwen3-30B-A3B-Instruct-2507": { - "id": "Qwen/Qwen3-30B-A3B-Instruct-2507", - "name": "Qwen3-30B-A3B-Instruct-2507", + "zai-org/GLM-4.5-FP8": { + "id": "zai-org/GLM-4.5-FP8", + "name": "GLM 4.5 FP8", + "family": "glm", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-12", - "release_date": "2026-01-28", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.3, "cache_read": 0.01, "cache_write": 0.125 }, - "limit": { "context": 128000, "input": 120000, "output": 8192 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.2, + "output": 0.8 + } }, - "Qwen/Qwen3-235B-A22B-Instruct-2507": { - "id": "Qwen/Qwen3-235B-A22B-Instruct-2507", - "name": "Qwen3 235B A22B Instruct 2507", - "family": "qwen", + "deepseek-ai/DeepSeek-V3.1": { + "id": "deepseek-ai/DeepSeek-V3.1", + "name": "DeepSeek V3.1", + "family": "deepseek", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-07-25", - "last_updated": "2025-10-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-23", + "last_updated": "2025-08-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.6 }, - "limit": { "context": 262144, "output": 8192 } - }, - "Qwen/Qwen3-Embedding-8B": { - "id": "Qwen/Qwen3-Embedding-8B", - "name": "Qwen3-Embedding-8B", - "family": "text-embedding", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": false, - "knowledge": "2025-10", - "release_date": "2026-01-10", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.01, "output": 0 }, - "limit": { "context": 32768, "input": 32768, "output": 0 } - }, - "BAAI/bge-en-icl": { - "id": "BAAI/bge-en-icl", - "name": "BGE-ICL", - "family": "text-embedding", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": false, - "knowledge": "2024-06", - "release_date": "2024-07-30", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.01, "output": 0 }, - "limit": { "context": 32768, "input": 32768, "output": 0 } + "limit": { + "context": 75000, + "output": 163840 + }, + "cost": { + "input": 0.2, + "output": 0.8 + } }, - "BAAI/bge-multilingual-gemma2": { - "id": "BAAI/bge-multilingual-gemma2", - "name": "bge-multilingual-gemma2", - "family": "text-embedding", + "deepseek-ai/DeepSeek-V3-0324": { + "id": "deepseek-ai/DeepSeek-V3-0324", + "name": "DeepSeek V3 0324", + "family": "deepseek", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": false, - "knowledge": "2024-06", - "release_date": "2024-07-30", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.01, "output": 0 }, - "limit": { "context": 8192, "input": 8192, "output": 0 } - }, - "moonshotai/Kimi-K2-Instruct": { - "id": "moonshotai/Kimi-K2-Instruct", - "name": "Kimi-K2-Instruct", - "attachment": true, - "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-10", - "release_date": "2026-01-05", - "last_updated": "2026-02-04", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-08-23", + "last_updated": "2025-08-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 2.4, "cache_read": 0.05, "cache_write": 0.625 }, - "limit": { "context": 200000, "input": 190000, "output": 8192 } - }, - "moonshotai/Kimi-K2.5": { - "id": "moonshotai/Kimi-K2.5", - "name": "Kimi-K2.5", - "family": "kimi", - "attachment": true, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, - "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-12-15", - "last_updated": "2026-02-04", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.5, "output": 2.5, "reasoning": 2.5, "cache_read": 0.05, "cache_write": 0.625 }, - "limit": { "context": 256000, "input": 256000, "output": 8192 } + "limit": { + "context": 75000, + "output": 163840 + }, + "cost": { + "input": 0.2, + "output": 0.8 + } }, - "moonshotai/Kimi-K2.5-fast": { - "id": "moonshotai/Kimi-K2.5-fast", - "name": "Kimi-K2.5-fast", - "family": "kimi", - "attachment": true, + "deepseek-ai/DeepSeek-R1-0528": { + "id": "deepseek-ai/DeepSeek-R1-0528", + "name": "DeepSeek R1 0528", + "family": "deepseek-thinking", + "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-12-15", - "last_updated": "2026-02-04", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.5, "output": 2.5, "cache_read": 0.05, "cache_write": 0.625 }, - "limit": { "context": 256000, "input": 256000, "output": 8192 } + "release_date": "2025-08-23", + "last_updated": "2025-08-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 75000, + "output": 163840 + }, + "cost": { + "input": 0.5, + "output": 2.15 + } }, - "moonshotai/Kimi-K2-Thinking": { - "id": "moonshotai/Kimi-K2-Thinking", - "name": "Kimi-K2-Thinking", - "attachment": true, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, - "temperature": true, - "knowledge": "2025-10", - "release_date": "2026-01-05", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.5, "reasoning": 2.5, "cache_read": 0.06, "cache_write": 0.75 }, - "limit": { "context": 128000, "input": 120000, "output": 16384 } - } - } - }, - "togetherai": { - "id": "togetherai", - "env": ["TOGETHER_API_KEY"], - "npm": "@ai-sdk/togetherai", - "name": "Together AI", - "doc": "https://docs.together.ai/docs/serverless-models", - "models": { "openai/gpt-oss-120b": { "id": "openai/gpt-oss-120b", "name": "GPT OSS 120B", @@ -14592,4662 +21404,7434 @@ "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-08", - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-23", + "last_updated": "2025-08-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 131072, "output": 131072 } - }, - "zai-org/GLM-4.7": { - "id": "zai-org/GLM-4.7", - "name": "GLM-4.7", - "family": "glm", + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.1, + "output": 0.5 + } + } + } + }, + "minimax-coding-plan": { + "id": "minimax-coding-plan", + "env": ["MINIMAX_API_KEY"], + "npm": "@ai-sdk/anthropic", + "api": "https://api.minimax.io/anthropic/v1", + "name": "MiniMax Coding Plan (minimax.io)", + "doc": "https://platform.minimax.io/docs/coding-plan/intro", + "models": { + "MiniMax-M2": { + "id": "MiniMax-M2", + "name": "MiniMax-M2", + "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-07-25", - "last_updated": "2025-07-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-10-27", + "last_updated": "2025-10-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.45, "output": 2 }, - "limit": { "context": 200000, "output": 200000 } + "limit": { + "context": 196608, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "zai-org/GLM-5": { - "id": "zai-org/GLM-5", - "name": "GLM-5", - "family": "glm", + "MiniMax-M2.5": { + "id": "MiniMax-M2.5", + "name": "MiniMax-M2.5", + "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-11", - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1, "output": 3.2 }, - "limit": { "context": 202752, "output": 131072 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "zai-org/GLM-4.6": { - "id": "zai-org/GLM-4.6", - "name": "GLM 4.6", - "family": "glm", + "MiniMax-M2.7": { + "id": "MiniMax-M2.7", + "name": "MiniMax-M2.7", + "family": "minimax", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-09", - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 2.2 }, - "limit": { "context": 200000, "output": 200000 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "meta-llama/Llama-3.3-70B-Instruct-Turbo": { - "id": "meta-llama/Llama-3.3-70B-Instruct-Turbo", - "name": "Llama 3.3 70B", - "family": "llama", + "MiniMax-M2.7-highspeed": { + "id": "MiniMax-M2.7-highspeed", + "name": "MiniMax-M2.7-highspeed", + "family": "minimax", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.88, "output": 0.88 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "MiniMaxAI/MiniMax-M2.5": { - "id": "MiniMaxAI/MiniMax-M2.5", - "name": "MiniMax-M2.5", + "MiniMax-M2.1": { + "id": "MiniMax-M2.1", + "name": "MiniMax-M2.1", "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.06 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "essentialai/Rnj-1-Instruct": { - "id": "essentialai/Rnj-1-Instruct", - "name": "Rnj-1 Instruct", - "family": "rnj", + "MiniMax-M2.5-highspeed": { + "id": "MiniMax-M2.5-highspeed", + "name": "MiniMax-M2.5-highspeed", + "family": "minimax", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-12-05", - "last_updated": "2025-12-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-13", + "last_updated": "2026-02-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.15 }, - "limit": { "context": 32768, "output": 32768 } - }, - "deepseek-ai/DeepSeek-R1": { - "id": "deepseek-ai/DeepSeek-R1", - "name": "DeepSeek R1", - "family": "deepseek-thinking", + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + } + } + }, + "perplexity": { + "id": "perplexity", + "env": ["PERPLEXITY_API_KEY"], + "npm": "@ai-sdk/perplexity", + "name": "Perplexity", + "doc": "https://docs.perplexity.ai", + "models": { + "sonar-pro": { + "id": "sonar-pro", + "name": "Sonar Pro", + "family": "sonar-pro", + "attachment": true, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2025-09-01", + "release_date": "2024-01-01", + "last_updated": "2025-09-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15 + } + }, + "sonar-deep-research": { + "id": "sonar-deep-research", + "name": "Perplexity Sonar Deep Research", "attachment": false, "reasoning": true, "tool_call": false, - "temperature": true, - "knowledge": "2024-07", - "release_date": "2024-12-26", - "last_updated": "2025-03-24", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 3, "output": 7 }, - "limit": { "context": 163839, "output": 163839 } + "temperature": false, + "knowledge": "2025-01", + "release_date": "2025-02-01", + "last_updated": "2025-09-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 8, + "reasoning": 3 + } }, - "deepseek-ai/DeepSeek-V3-1": { - "id": "deepseek-ai/DeepSeek-V3-1", - "name": "DeepSeek V3.1", - "family": "deepseek", + "sonar": { + "id": "sonar", + "name": "Sonar", + "family": "sonar", "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2025-09-01", + "release_date": "2024-01-01", + "last_updated": "2025-09-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 1, + "output": 1 + } + }, + "sonar-reasoning-pro": { + "id": "sonar-reasoning-pro", + "name": "Sonar Reasoning Pro", + "family": "sonar-reasoning", + "attachment": true, "reasoning": true, + "tool_call": false, + "temperature": true, + "knowledge": "2025-09-01", + "release_date": "2024-01-01", + "last_updated": "2025-09-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 2, + "output": 8 + } + } + } + }, + "deepseek": { + "id": "deepseek", + "env": ["DEEPSEEK_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.deepseek.com", + "name": "DeepSeek", + "doc": "https://api-docs.deepseek.com/quick_start/pricing", + "models": { + "deepseek-chat": { + "id": "deepseek-chat", + "name": "DeepSeek Chat", + "family": "deepseek", + "attachment": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-08", - "release_date": "2025-08-21", - "last_updated": "2025-08-21", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-09", + "release_date": "2025-12-01", + "last_updated": "2026-02-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 1.7 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 1000000, + "output": 384000 + }, + "cost": { + "input": 0.14, + "output": 0.28, + "cache_read": 0.028 + } }, - "deepseek-ai/DeepSeek-V3": { - "id": "deepseek-ai/DeepSeek-V3", - "name": "DeepSeek V3", - "family": "deepseek", - "attachment": false, + "deepseek-reasoner": { + "id": "deepseek-reasoner", + "name": "DeepSeek Reasoner", + "family": "deepseek-thinking", + "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-01-20", - "last_updated": "2025-05-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-09", + "release_date": "2025-12-01", + "last_updated": "2026-02-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1.25, "output": 1.25 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 1000000, + "output": 384000 + }, + "cost": { + "input": 0.14, + "output": 0.28, + "cache_read": 0.028 + } }, - "Qwen/Qwen3-Coder-Next-FP8": { - "id": "Qwen/Qwen3-Coder-Next-FP8", - "name": "Qwen3 Coder Next FP8", - "family": "qwen", + "deepseek-v4-flash": { + "id": "deepseek-v4-flash", + "name": "DeepSeek V4 Flash", + "family": "deepseek-flash", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2026-02-03", - "release_date": "2026-02-03", - "last_updated": "2026-02-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.5, "output": 1.2 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 1000000, + "output": 384000 + }, + "cost": { + "input": 0.14, + "output": 0.28, + "cache_read": 0.028 + } }, - "Qwen/Qwen3-235B-A22B-Instruct-2507-tput": { - "id": "Qwen/Qwen3-235B-A22B-Instruct-2507-tput", - "name": "Qwen3 235B A22B Instruct 2507 FP8", - "family": "qwen", + "deepseek-v4-pro": { + "id": "deepseek-v4-pro", + "name": "DeepSeek V4 Pro", + "family": "deepseek-thinking", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-07-25", - "last_updated": "2025-07-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.6 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 1000000, + "output": 384000 + }, + "cost": { + "input": 1.74, + "output": 3.48, + "cache_read": 0.145 + } + } + } + }, + "llama": { + "id": "llama", + "env": ["LLAMA_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.llama.com/compat/v1/", + "name": "Llama", + "doc": "https://llama.developer.meta.com/docs/models", + "models": { + "llama-3.3-70b-instruct": { + "id": "llama-3.3-70b-instruct", + "name": "Llama-3.3-70B-Instruct", + "family": "llama", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Qwen/Qwen3.5-397B-A17B": { - "id": "Qwen/Qwen3.5-397B-A17B", - "name": "Qwen3.5 397B A17B", - "family": "qwen", - "attachment": false, - "reasoning": true, + "cerebras-llama-4-maverick-17b-128e-instruct": { + "id": "cerebras-llama-4-maverick-17b-128e-instruct", + "name": "Cerebras-Llama-4-Maverick-17B-128E-Instruct", + "family": "llama", + "attachment": true, + "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2026-02-16", - "last_updated": "2026-02-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 3.6 }, - "limit": { "context": 262144, "output": 130000 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Qwen/Qwen3-Next-80B-A3B-Instruct": { - "id": "Qwen/Qwen3-Next-80B-A3B-Instruct", - "name": "Qwen3-Next-80B-A3B-Instruct", - "family": "qwen", - "attachment": false, + "llama-3.3-8b-instruct": { + "id": "llama-3.3-8b-instruct", + "name": "Llama-3.3-8B-Instruct", + "family": "llama", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-07-25", - "last_updated": "2025-07-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2023-12", + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 1.5 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8": { - "id": "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8", - "name": "Qwen3 Coder 480B A35B Instruct", - "family": "qwen", - "attachment": false, + "cerebras-llama-4-scout-17b-16e-instruct": { + "id": "cerebras-llama-4-scout-17b-16e-instruct", + "name": "Cerebras-Llama-4-Scout-17B-16E-Instruct", + "family": "llama", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 2, "output": 2 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "moonshotai/Kimi-K2-Instruct": { - "id": "moonshotai/Kimi-K2-Instruct", - "name": "Kimi K2 Instruct", - "family": "kimi", - "attachment": false, + "groq-llama-4-maverick-17b-128e-instruct": { + "id": "groq-llama-4-maverick-17b-128e-instruct", + "name": "Groq-Llama-4-Maverick-17B-128E-Instruct", + "family": "llama", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-07-14", - "last_updated": "2025-07-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1, "output": 3 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "moonshotai/Kimi-K2.5": { - "id": "moonshotai/Kimi-K2.5", - "name": "Kimi K2.5", - "family": "kimi", - "attachment": false, - "reasoning": true, + "llama-4-scout-17b-16e-instruct-fp8": { + "id": "llama-4-scout-17b-16e-instruct-fp8", + "name": "Llama-4-Scout-17B-16E-Instruct-FP8", + "family": "llama", + "attachment": true, + "reasoning": false, "tool_call": true, - "interleaved": true, "temperature": true, - "knowledge": "2026-01", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-08", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "llama-4-maverick-17b-128e-instruct-fp8": { + "id": "llama-4-maverick-17b-128e-instruct-fp8", + "name": "Llama-4-Maverick-17B-128E-Instruct-FP8", + "family": "llama", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.5, "output": 2.8 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } } } }, - "firmware": { - "id": "firmware", - "env": ["FIRMWARE_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://app.frogbot.ai/api/v1", - "name": "Firmware", - "doc": "https://docs.frogbot.ai", + "openrouter": { + "id": "openrouter", + "env": ["OPENROUTER_API_KEY"], + "npm": "@openrouter/ai-sdk-provider", + "api": "https://openrouter.ai/api/v1", + "name": "OpenRouter", + "doc": "https://openrouter.ai/models", "models": { - "claude-opus-4-5": { - "id": "claude-opus-4-5", - "name": "Claude Opus 4.5", - "family": "claude-opus", - "attachment": true, - "reasoning": true, - "tool_call": true, + "liquid/lfm-2.5-1.2b-instruct:free": { + "id": "liquid/lfm-2.5-1.2b-instruct:free", + "name": "LFM2.5-1.2B-Instruct (free)", + "family": "liquid", + "attachment": false, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-11-24", - "last_updated": "2025-11-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 200000, "output": 64000 } + "knowledge": "2025-06", + "release_date": "2026-01-20", + "last_updated": "2026-01-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "kimi-k2.5": { - "id": "kimi-k2.5", - "name": "Kimi-K2.5", + "liquid/lfm-2.5-1.2b-thinking:free": { + "id": "liquid/lfm-2.5-1.2b-thinking:free", + "name": "LFM2.5-1.2B-Thinking (free)", + "family": "liquid", "attachment": false, "reasoning": true, - "tool_call": true, - "structured_output": true, + "tool_call": false, "temperature": true, - "release_date": "1970-01-01", - "last_updated": "1970-01-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.6, "output": 3, "cache_read": 0.1 }, - "limit": { "context": 256000, "output": 128000 } + "knowledge": "2025-06", + "release_date": "2026-01-20", + "last_updated": "2026-01-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gemini-3-pro-preview": { - "id": "gemini-3-pro-preview", - "name": "Gemini 3 Pro Preview", - "family": "gemini-pro", - "attachment": true, + "deepseek/deepseek-chat-v3.1": { + "id": "deepseek/deepseek-chat-v3.1", + "name": "DeepSeek-V3.1", + "family": "deepseek", + "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-11-18", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 12, "cache_read": 0.2 }, - "limit": { "context": 1000000, "output": 64000 } + "knowledge": "2025-07", + "release_date": "2025-08-21", + "last_updated": "2025-08-21", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 163840, + "output": 163840 + }, + "cost": { + "input": 0.2, + "output": 0.8 + } }, - "gpt-4o": { - "id": "gpt-4o", - "name": "GPT-4o", - "family": "gpt", - "attachment": true, - "reasoning": false, - "tool_call": true, + "deepseek/deepseek-r1-distill-llama-70b": { + "id": "deepseek/deepseek-r1-distill-llama-70b", + "name": "DeepSeek R1 Distill Llama 70B", + "family": "deepseek-thinking", + "attachment": false, + "reasoning": true, + "tool_call": false, "structured_output": true, "temperature": true, - "knowledge": "2023-09", - "release_date": "2024-05-13", - "last_updated": "2024-08-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.5, "output": 10, "cache_read": 1.25 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2024-10", + "release_date": "2025-01-23", + "last_updated": "2025-01-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "grok-code-fast-1": { - "id": "grok-code-fast-1", - "name": "Grok 4.1 Fast (Reasoning)", - "family": "grok", + "deepseek/deepseek-r1": { + "id": "deepseek/deepseek-r1", + "name": "DeepSeek: R1", + "family": "deepseek-thinking", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2023-10", - "release_date": "2025-08-28", - "last_updated": "2025-08-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 1.5, "cache_read": 0.02 }, - "limit": { "context": 256000, "output": 128000 } - }, - "zai-glm-5": { - "id": "zai-glm-5", - "name": "GLM-5", - "family": "glm", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-10", + "knowledge": "2024-07", "release_date": "2025-01-20", - "last_updated": "2025-02-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1, "output": 3.2, "cache_read": 0.2 }, - "limit": { "context": 198000, "output": 8192 } + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 64000, + "output": 16000 + }, + "cost": { + "input": 0.7, + "output": 2.5 + } }, - "gpt-5-mini": { - "id": "gpt-5-mini", - "name": "GPT-5 Mini", - "family": "gpt-mini", - "attachment": true, + "deepseek/deepseek-v3.2-speciale": { + "id": "deepseek/deepseek-v3.2-speciale", + "name": "DeepSeek V3.2 Speciale", + "family": "deepseek", + "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": false, - "knowledge": "2024-05-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.03 }, - "limit": { "context": 400000, "output": 128000 } - }, - "claude-opus-4-6": { - "id": "claude-opus-4-6", - "name": "Claude Opus 4.6", - "family": "claude-opus", - "attachment": true, - "reasoning": true, - "tool_call": true, "temperature": true, - "knowledge": "2025-05-31", - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 200000, "output": 128000 } + "knowledge": "2024-07", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 163840, + "output": 65536 + }, + "cost": { + "input": 0.27, + "output": 0.41 + } }, - "deepseek-v3-2": { - "id": "deepseek-v3-2", - "name": "DeepSeek v3.2", + "deepseek/deepseek-v3.2": { + "id": "deepseek/deepseek-v3.2", + "name": "DeepSeek V3.2", "family": "deepseek", - "attachment": true, - "reasoning": false, + "attachment": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, "knowledge": "2024-07", - "release_date": "2024-12-26", - "last_updated": "2025-09-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.58, "output": 1.68, "cache_read": 0.28 }, - "limit": { "context": 128000, "output": 8192 } + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 163840, + "output": 65536 + }, + "cost": { + "input": 0.28, + "output": 0.4 + } }, - "claude-sonnet-4-6": { - "id": "claude-sonnet-4-6", - "name": "Claude Sonnet 4.6", - "family": "claude-sonnet", - "attachment": true, + "deepseek/deepseek-v3.1-terminus:exacto": { + "id": "deepseek/deepseek-v3.1-terminus:exacto", + "name": "DeepSeek V3.1 Terminus (exacto)", + "family": "deepseek", + "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2026-02-17", - "release_date": "2026-02-17", - "last_updated": "2026-02-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "knowledge": "2025-07", + "release_date": "2025-09-22", + "last_updated": "2025-09-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.27, + "output": 1 + } }, - "gpt-oss-120b": { - "id": "gpt-oss-120b", - "name": "GPT OSS 120B", - "family": "gpt-oss", + "deepseek/deepseek-chat-v3-0324": { + "id": "deepseek/deepseek-chat-v3-0324", + "name": "DeepSeek V3 0324", + "family": "deepseek", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "structured_output": true, "temperature": true, - "release_date": "1970-01-01", - "last_updated": "1970-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-03-24", + "last_updated": "2025-03-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 16384, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "minimax-m2-5": { - "id": "minimax-m2-5", - "name": "MiniMax-M2.5", - "family": "minimax", - "attachment": true, - "reasoning": false, + "deepseek/deepseek-v3.1-terminus": { + "id": "deepseek/deepseek-v3.1-terminus", + "name": "DeepSeek V3.1 Terminus", + "family": "deepseek", + "attachment": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-09", - "release_date": "2025-01-15", - "last_updated": "2025-02-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.03 }, - "limit": { "context": 192000, "output": 8192 } + "knowledge": "2025-07", + "release_date": "2025-09-22", + "last_updated": "2025-09-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.27, + "output": 1 + } }, - "grok-4-1-fast-non-reasoning": { - "id": "grok-4-1-fast-non-reasoning", - "name": "Grok 4.1 Fast (Non-Reasoning)", - "family": "grok", - "attachment": true, - "reasoning": false, + "openrouter/owl-alpha": { + "id": "openrouter/owl-alpha", + "name": "Owl Alpha", + "attachment": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-11", - "release_date": "2025-11-25", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-04-28", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 128000 } + "limit": { + "context": 1048756, + "output": 262144 + }, + "status": "alpha", + "cost": { + "input": 0, + "output": 0 + } }, - "gpt-5-4": { - "id": "gpt-5-4", - "name": "GPT-5.4", - "family": "gpt", + "openrouter/pareto-code": { + "id": "openrouter/pareto-code", + "name": "Pareto Code Router", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-05", - "last_updated": "2026-03-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "temperature": true, + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 15, "cache_read": 0.25 }, - "limit": { "context": 272000, "output": 128000 } + "limit": { + "context": 200000, + "output": 200000 + } }, - "gemini-3-flash-preview": { - "id": "gemini-3-flash-preview", - "name": "Gemini 3 Flash Preview", - "family": "gemini-flash", - "attachment": true, + "openrouter/elephant-alpha": { + "id": "openrouter/elephant-alpha", + "name": "Elephant (free)", + "family": "elephant", + "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, + "release_date": "2026-04-13", + "last_updated": "2026-04-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 3, "cache_read": 0.05 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gemini-3-1-pro-preview": { - "id": "gemini-3-1-pro-preview", - "name": "Gemini 3.1 Pro Preview", - "family": "gemini-pro", + "openrouter/free": { + "id": "openrouter/free", + "name": "Free Models Router", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2026-01", - "release_date": "2026-02-18", - "last_updated": "2026-02-18", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, + "release_date": "2026-02-01", + "last_updated": "2026-02-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 12, "cache_read": 0.2 }, - "limit": { "context": 1000000, "output": 64000 } + "limit": { + "context": 200000, + "input": 200000, + "output": 8000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gemini-2.5-pro": { - "id": "gemini-2.5-pro", - "name": "Gemini 2.5 Pro", - "family": "gemini-pro", - "attachment": true, + "arcee-ai/trinity-large-thinking": { + "id": "arcee-ai/trinity-large-thinking", + "name": "Trinity Large Thinking", + "family": "trinity", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-03-20", - "last_updated": "2025-06-05", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.31 }, - "limit": { "context": 1048576, "output": 65536 } + "release_date": "2026-04-01", + "last_updated": "2026-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 80000 + }, + "cost": { + "input": 0.22, + "output": 0.85 + } }, - "gemini-2.5-flash": { - "id": "gemini-2.5-flash", - "name": "Gemini 2.5 Flash", - "family": "gemini-flash", - "attachment": true, - "reasoning": true, + "arcee-ai/trinity-large-preview:free": { + "id": "arcee-ai/trinity-large-preview:free", + "name": "Trinity Large Preview", + "family": "trinity", + "attachment": false, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-07-17", - "last_updated": "2025-07-17", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 2.5, "cache_read": 0.075 }, - "limit": { "context": 1048576, "output": 65536 } + "knowledge": "2025-06", + "release_date": "2026-01-28", + "last_updated": "2026-01-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "grok-4-1-fast-reasoning": { - "id": "grok-4-1-fast-reasoning", - "name": "Grok 4.1 Fast (Reasoning)", - "family": "grok", - "attachment": true, - "reasoning": true, - "tool_call": true, + "cognitivecomputations/dolphin-mistral-24b-venice-edition:free": { + "id": "cognitivecomputations/dolphin-mistral-24b-venice-edition:free", + "name": "Uncensored (free)", + "family": "mistral", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": true, "temperature": true, - "knowledge": "2025-11", - "release_date": "2025-11-25", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-06", + "release_date": "2025-07-09", + "last_updated": "2026-01-31", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "bytedance-seed/seedream-4.5": { + "id": "bytedance-seed/seedream-4.5", + "name": "Seedream 4.5", + "family": "seed", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2025-06", + "release_date": "2025-12-23", + "last_updated": "2026-01-31", + "modalities": { + "input": ["image", "text"], + "output": ["image"] + }, + "open_weights": true, + "limit": { + "context": 4096, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "black-forest-labs/flux.2-max": { + "id": "black-forest-labs/flux.2-max", + "name": "FLUX.2 Max", + "family": "flux", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2025-06", + "release_date": "2025-12-16", + "last_updated": "2026-01-31", + "modalities": { + "input": ["image", "text"], + "output": ["image"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 128000 } + "limit": { + "context": 46864, + "output": 46864 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gpt-5-nano": { - "id": "gpt-5-nano", - "name": "GPT-5 Nano", - "family": "gpt-nano", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-05-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "black-forest-labs/flux.2-flex": { + "id": "black-forest-labs/flux.2-flex", + "name": "FLUX.2 Flex", + "family": "flux", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2025-06", + "release_date": "2025-11-25", + "last_updated": "2026-01-31", + "modalities": { + "input": ["image", "text"], + "output": ["image"] + }, "open_weights": false, - "cost": { "input": 0.05, "output": 0.4, "cache_read": 0.01 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 67344, + "output": 67344 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gpt-5-3-codex": { - "id": "gpt-5-3-codex", - "name": "GPT-5.3 Codex", - "family": "gpt", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2026-01-31", - "release_date": "2026-02-15", - "last_updated": "2026-02-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "black-forest-labs/flux.2-pro": { + "id": "black-forest-labs/flux.2-pro", + "name": "FLUX.2 Pro", + "family": "flux", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2025-06", + "release_date": "2025-11-25", + "last_updated": "2026-01-31", + "modalities": { + "input": ["image", "text"], + "output": ["image"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 46864, + "output": 46864 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gpt-oss-20b": { - "id": "gpt-oss-20b", - "name": "GPT OSS 20B", - "family": "gpt-oss", + "black-forest-labs/flux.2-klein-4b": { + "id": "black-forest-labs/flux.2-klein-4b", + "name": "FLUX.2 Klein 4B", + "family": "flux", "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "release_date": "1970-01-01", - "last_updated": "1970-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-06", + "release_date": "2026-01-14", + "last_updated": "2026-01-31", + "modalities": { + "input": ["image", "text"], + "output": ["image"] + }, "open_weights": true, - "cost": { "input": 0.07, "output": 0.2 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 40960, + "output": 40960 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "claude-sonnet-4-5": { - "id": "claude-sonnet-4-5", - "name": "Claude Sonnet 4.5", - "family": "claude-sonnet", - "attachment": true, + "nousresearch/hermes-3-llama-3.1-405b:free": { + "id": "nousresearch/hermes-3-llama-3.1-405b:free", + "name": "Hermes 3 405B Instruct (free)", + "family": "hermes", + "attachment": false, "reasoning": true, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "knowledge": "2023-12", + "release_date": "2024-08-16", + "last_updated": "2024-08-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "claude-haiku-4-5": { - "id": "claude-haiku-4-5", - "name": "Claude Haiku 4.5", - "family": "claude-haiku", - "attachment": true, + "nousresearch/hermes-4-405b": { + "id": "nousresearch/hermes-4-405b", + "name": "Hermes 4 405B", + "family": "hermes", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-02-28", - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.1, "cache_write": 1.25 }, - "limit": { "context": 200000, "output": 64000 } - } - } - }, - "google": { - "id": "google", - "env": ["GOOGLE_GENERATIVE_AI_API_KEY", "GEMINI_API_KEY"], - "npm": "@ai-sdk/google", - "name": "Google", - "doc": "https://ai.google.dev/gemini-api/docs/pricing", - "models": { - "gemini-2.5-flash-lite": { - "id": "gemini-2.5-flash-lite", - "name": "Gemini 2.5 Flash Lite", - "family": "gemini-flash-lite", - "attachment": true, + "knowledge": "2023-12", + "release_date": "2025-08-25", + "last_updated": "2025-08-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 1, + "output": 3 + } + }, + "nousresearch/hermes-4-70b": { + "id": "nousresearch/hermes-4-70b", + "name": "Hermes 4 70B", + "family": "hermes", + "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.025 }, - "limit": { "context": 1048576, "output": 65536 } + "knowledge": "2023-12", + "release_date": "2025-08-25", + "last_updated": "2025-08-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.13, + "output": 0.4 + } }, - "gemini-2.5-flash-lite-preview-09-2025": { - "id": "gemini-2.5-flash-lite-preview-09-2025", - "name": "Gemini 2.5 Flash Lite Preview 09-25", - "family": "gemini-flash-lite", - "attachment": true, + "stepfun/step-3.5-flash": { + "id": "stepfun/step-3.5-flash", + "name": "Step 3.5 Flash", + "family": "step", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, "knowledge": "2025-01", - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.025 }, - "limit": { "context": 1048576, "output": 65536 } + "release_date": "2026-01-29", + "last_updated": "2026-01-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.1, + "output": 0.3, + "cache_read": 0.02 + } }, - "gemini-2.5-flash-preview-04-17": { - "id": "gemini-2.5-flash-preview-04-17", - "name": "Gemini 2.5 Flash Preview 04-17", - "family": "gemini-flash", + "mistralai/mistral-small-3.1-24b-instruct": { + "id": "mistralai/mistral-small-3.1-24b-instruct", + "name": "Mistral Small 3.1 24B Instruct", + "family": "mistral-small", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-04-17", - "last_updated": "2025-04-17", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.15, "output": 0.6, "cache_read": 0.0375 }, - "limit": { "context": 1048576, "output": 65536 } + "knowledge": "2024-10", + "release_date": "2025-03-17", + "last_updated": "2025-03-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gemini-3.1-pro-preview": { - "id": "gemini-3.1-pro-preview", - "name": "Gemini 3.1 Pro Preview", - "family": "gemini-pro", - "attachment": true, - "reasoning": true, + "mistralai/devstral-2512": { + "id": "mistralai/devstral-2512", + "name": "Devstral 2 2512", + "family": "devstral", + "attachment": false, + "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-02-19", - "last_updated": "2026-02-19", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { - "input": 2, - "output": 12, - "cache_read": 0.2, - "context_over_200k": { "input": 4, "output": 18, "cache_read": 0.4 } + "knowledge": "2025-12", + "release_date": "2025-09-12", + "last_updated": "2025-09-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 }, - "limit": { "context": 1048576, "output": 65536 } + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "gemma-3n-e2b-it": { - "id": "gemma-3n-e2b-it", - "name": "Gemma 3n 2B", - "family": "gemma", - "attachment": true, + "mistralai/codestral-2508": { + "id": "mistralai/codestral-2508", + "name": "Codestral 2508", + "family": "codestral", + "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-05", + "release_date": "2025-08-01", + "last_updated": "2025-08-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 8192, "output": 2000 } + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.3, + "output": 0.9 + } }, - "gemini-2.5-flash-preview-05-20": { - "id": "gemini-2.5-flash-preview-05-20", - "name": "Gemini 2.5 Flash Preview 05-20", - "family": "gemini-flash", + "mistralai/mistral-medium-3.1": { + "id": "mistralai/mistral-medium-3.1", + "name": "Mistral Medium 3.1", + "family": "mistral-medium", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-05-20", - "last_updated": "2025-05-20", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "knowledge": "2025-05", + "release_date": "2025-08-12", + "last_updated": "2025-08-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.6, "cache_read": 0.0375 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.4, + "output": 2 + } }, - "gemini-3-pro-preview": { - "id": "gemini-3-pro-preview", - "name": "Gemini 3 Pro Preview", - "family": "gemini-pro", + "mistralai/mistral-small-2603": { + "id": "mistralai/mistral-small-2603", + "name": "Mistral Small 4", + "family": "mistral-small", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-11-18", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { - "input": 2, - "output": 12, - "cache_read": 0.2, - "context_over_200k": { "input": 4, "output": 18, "cache_read": 0.4 } + "knowledge": "2025-06", + "release_date": "2026-03-16", + "last_updated": "2026-03-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 }, - "limit": { "context": 1000000, "output": 64000 } + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "gemma-3-27b-it": { - "id": "gemma-3-27b-it", - "name": "Gemma 3 27B", - "family": "gemma", + "mistralai/mistral-medium-3": { + "id": "mistralai/mistral-medium-3", + "name": "Mistral Medium 3", + "family": "mistral-medium", "attachment": true, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-03-12", - "last_updated": "2025-03-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 8192 } + "knowledge": "2025-05", + "release_date": "2025-05-07", + "last_updated": "2025-05-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.4, + "output": 2 + } }, - "gemma-3-4b-it": { - "id": "gemma-3-4b-it", - "name": "Gemma 3 4B", - "family": "gemma", - "attachment": true, + "mistralai/devstral-small-2505": { + "id": "mistralai/devstral-small-2505", + "name": "Devstral Small", + "family": "devstral", + "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-03-13", - "last_updated": "2025-03-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-05", + "release_date": "2025-05-07", + "last_updated": "2025-05-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 32768, "output": 8192 } + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.06, + "output": 0.12 + } }, - "gemma-3n-e4b-it": { - "id": "gemma-3n-e4b-it", - "name": "Gemma 3n 4B", - "family": "gemma", + "mistralai/mistral-small-3.2-24b-instruct": { + "id": "mistralai/mistral-small-3.2-24b-instruct", + "name": "Mistral Small 3.2 24B Instruct", + "family": "mistral-small", "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, + "structured_output": true, "temperature": true, "knowledge": "2024-10", - "release_date": "2025-05-20", - "last_updated": "2025-05-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-06-20", + "last_updated": "2025-06-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 8192, "output": 2000 } + "limit": { + "context": 96000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gemini-2.5-pro-preview-06-05": { - "id": "gemini-2.5-pro-preview-06-05", - "name": "Gemini 2.5 Pro Preview 06-05", - "family": "gemini-pro", - "attachment": true, - "reasoning": true, + "mistralai/devstral-medium-2507": { + "id": "mistralai/devstral-medium-2507", + "name": "Devstral Medium", + "family": "devstral", + "attachment": false, + "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-06-05", - "last_updated": "2025-06-05", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.31 }, - "limit": { "context": 1048576, "output": 65536 } + "knowledge": "2025-05", + "release_date": "2025-07-10", + "last_updated": "2025-07-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.4, + "output": 2 + } }, - "gemini-2.5-pro-preview-05-06": { - "id": "gemini-2.5-pro-preview-05-06", - "name": "Gemini 2.5 Pro Preview 05-06", - "family": "gemini-pro", - "attachment": true, - "reasoning": true, + "mistralai/devstral-small-2507": { + "id": "mistralai/devstral-small-2507", + "name": "Devstral Small 1.1", + "family": "devstral", + "attachment": false, + "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-05-06", - "last_updated": "2025-05-06", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.31 }, - "limit": { "context": 1048576, "output": 65536 } + "knowledge": "2025-05", + "release_date": "2025-07-10", + "last_updated": "2025-07-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.1, + "output": 0.3 + } }, - "gemini-2.0-flash-lite": { - "id": "gemini-2.0-flash-lite", - "name": "Gemini 2.0 Flash Lite", - "family": "gemini-flash-lite", + "meta-llama/llama-3.2-11b-vision-instruct": { + "id": "meta-llama/llama-3.2-11b-vision-instruct", + "name": "Llama 3.2 11B Vision Instruct", + "family": "llama", "attachment": true, "reasoning": false, - "tool_call": true, - "structured_output": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-06", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.075, "output": 0.3 }, - "limit": { "context": 1048576, "output": 8192 } + "knowledge": "2023-12", + "release_date": "2024-09-25", + "last_updated": "2024-09-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gemini-1.5-flash-8b": { - "id": "gemini-1.5-flash-8b", - "name": "Gemini 1.5 Flash-8B", - "family": "gemini-flash", + "meta-llama/llama-3.2-3b-instruct:free": { + "id": "meta-llama/llama-3.2-3b-instruct:free", + "name": "Llama 3.2 3B Instruct (free)", + "family": "llama", "attachment": true, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-10-03", - "last_updated": "2024-10-03", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.0375, "output": 0.15, "cache_read": 0.01 }, - "limit": { "context": 1000000, "output": 8192 } + "knowledge": "2023-12", + "release_date": "2024-09-25", + "last_updated": "2024-09-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gemini-1.5-flash": { - "id": "gemini-1.5-flash", - "name": "Gemini 1.5 Flash", - "family": "gemini-flash", - "attachment": true, + "meta-llama/llama-3.3-70b-instruct:free": { + "id": "meta-llama/llama-3.3-70b-instruct:free", + "name": "Llama 3.3 70B Instruct (free)", + "family": "llama", + "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-05-14", - "last_updated": "2024-05-14", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.075, "output": 0.3, "cache_read": 0.01875 }, - "limit": { "context": 1000000, "output": 8192 } + "knowledge": "2024-12", + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gemini-2.5-pro-preview-tts": { - "id": "gemini-2.5-pro-preview-tts", - "name": "Gemini 2.5 Pro Preview TTS", - "family": "gemini-flash", - "attachment": false, - "reasoning": false, + "x-ai/grok-4.20-multi-agent-beta": { + "id": "x-ai/grok-4.20-multi-agent-beta", + "name": "Grok 4.20 Multi - Agent Beta", + "family": "grok", + "attachment": true, + "reasoning": true, "tool_call": false, - "temperature": false, - "knowledge": "2025-01", - "release_date": "2025-05-01", - "last_updated": "2025-05-01", - "modalities": { "input": ["text"], "output": ["audio"] }, + "temperature": true, + "release_date": "2026-03-12", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 20 }, - "limit": { "context": 8000, "output": 16000 } + "limit": { + "context": 2000000, + "output": 30000 + }, + "status": "beta", + "cost": { + "input": 2, + "output": 6, + "cache_read": 0.2, + "tiers": [ + { + "input": 4, + "output": 12, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 4, + "output": 12, + "cache_read": 0.4 + } + } }, - "gemini-3-flash-preview": { - "id": "gemini-3-flash-preview", - "name": "Gemini 3 Flash Preview", - "family": "gemini-flash", - "attachment": true, + "x-ai/grok-4-fast": { + "id": "x-ai/grok-4-fast", + "name": "Grok 4 Fast", + "family": "grok", + "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, + "knowledge": "2024-11", + "release_date": "2025-08-19", + "last_updated": "2025-08-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, + "limit": { + "context": 2000000, + "output": 30000 + }, "cost": { - "input": 0.5, - "output": 3, + "input": 0.2, + "output": 0.5, "cache_read": 0.05, - "context_over_200k": { "input": 0.5, "output": 3, "cache_read": 0.05 } - }, - "limit": { "context": 1048576, "output": 65536 } + "cache_write": 0.05 + } }, - "gemini-2.5-pro": { - "id": "gemini-2.5-pro", - "name": "Gemini 2.5 Pro", - "family": "gemini-pro", - "attachment": true, + "x-ai/grok-code-fast-1": { + "id": "x-ai/grok-code-fast-1", + "name": "Grok Code Fast 1", + "family": "grok", + "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-03-20", - "last_updated": "2025-06-05", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "knowledge": "2025-08", + "release_date": "2025-08-26", + "last_updated": "2025-08-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.31 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 256000, + "output": 10000 + }, + "cost": { + "input": 0.2, + "output": 1.5, + "cache_read": 0.02 + } }, - "gemini-2.5-flash": { - "id": "gemini-2.5-flash", - "name": "Gemini 2.5 Flash", - "family": "gemini-flash", - "attachment": true, - "reasoning": true, + "x-ai/grok-3-beta": { + "id": "x-ai/grok-3-beta", + "name": "Grok 3 Beta", + "family": "grok", + "attachment": false, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-03-20", - "last_updated": "2025-06-05", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 2.5, "cache_read": 0.075, "input_audio": 1 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.75, + "cache_write": 15 + } }, - "gemini-3.1-pro-preview-customtools": { - "id": "gemini-3.1-pro-preview-customtools", - "name": "Gemini 3.1 Pro Preview Custom Tools", - "family": "gemini-pro", - "attachment": true, + "x-ai/grok-4": { + "id": "x-ai/grok-4", + "name": "Grok 4", + "family": "grok", + "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-02-19", - "last_updated": "2026-02-19", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, + "knowledge": "2025-07", + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { - "input": 2, - "output": 12, - "cache_read": 0.2, - "context_over_200k": { "input": 4, "output": 18, "cache_read": 0.4 } + "limit": { + "context": 256000, + "output": 64000 }, - "limit": { "context": 1048576, "output": 65536 } + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.75, + "cache_write": 15, + "tiers": [ + { + "input": 6, + "output": 30, + "tier": { + "type": "context", + "size": 128000 + } + } + ] + } }, - "gemini-2.5-flash-preview-09-2025": { - "id": "gemini-2.5-flash-preview-09-2025", - "name": "Gemini 2.5 Flash Preview 09-25", - "family": "gemini-flash", - "attachment": true, + "x-ai/grok-3-mini": { + "id": "x-ai/grok-3-mini", + "name": "Grok 3 Mini", + "family": "grok", + "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 2.5, "cache_read": 0.075, "input_audio": 1 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 0.5, + "cache_read": 0.075, + "cache_write": 0.5 + } }, - "gemini-2.0-flash": { - "id": "gemini-2.0-flash", - "name": "Gemini 2.0 Flash", - "family": "gemini-flash", - "attachment": true, - "reasoning": false, + "x-ai/grok-4.1-fast": { + "id": "x-ai/grok-4.1-fast", + "name": "Grok 4.1 Fast", + "family": "grok", + "attachment": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2024-06", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "knowledge": "2024-11", + "release_date": "2025-11-19", + "last_updated": "2025-11-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.025 }, - "limit": { "context": 1048576, "output": 8192 } + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05, + "cache_write": 0.05 + } }, - "gemini-1.5-pro": { - "id": "gemini-1.5-pro", - "name": "Gemini 1.5 Pro", - "family": "gemini-pro", + "x-ai/grok-4.20-beta": { + "id": "x-ai/grok-4.20-beta", + "name": "Grok 4.20 Beta", + "family": "grok", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-02-15", - "last_updated": "2024-02-15", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, + "release_date": "2026-03-12", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 5, "cache_read": 0.3125 }, - "limit": { "context": 1000000, "output": 8192 } + "limit": { + "context": 2000000, + "output": 30000 + }, + "status": "beta", + "cost": { + "input": 2, + "output": 6, + "cache_read": 0.2, + "tiers": [ + { + "input": 4, + "output": 12, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 4, + "output": 12, + "cache_read": 0.4 + } + } }, - "gemini-2.5-flash-lite-preview-06-17": { - "id": "gemini-2.5-flash-lite-preview-06-17", - "name": "Gemini 2.5 Flash Lite Preview 06-17", - "family": "gemini-flash-lite", - "attachment": true, + "x-ai/grok-3-mini-beta": { + "id": "x-ai/grok-3-mini-beta", + "name": "Grok 3 Mini Beta", + "family": "grok", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.025, "input_audio": 0.3 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 0.5, + "cache_read": 0.075, + "cache_write": 0.5 + } }, - "gemini-2.5-flash-preview-tts": { - "id": "gemini-2.5-flash-preview-tts", - "name": "Gemini 2.5 Flash Preview TTS", - "family": "gemini-flash", + "x-ai/grok-3": { + "id": "x-ai/grok-3", + "name": "Grok 3", + "family": "grok", "attachment": false, "reasoning": false, - "tool_call": false, - "temperature": false, - "knowledge": "2025-01", - "release_date": "2025-05-01", - "last_updated": "2025-05-01", - "modalities": { "input": ["text"], "output": ["audio"] }, - "open_weights": false, - "cost": { "input": 0.5, "output": 10 }, - "limit": { "context": 8000, "output": 16000 } - }, - "gemini-3.1-flash-lite-preview": { - "id": "gemini-3.1-flash-lite-preview", - "name": "Gemini 3.1 Flash Lite Preview", - "family": "gemini-flash-lite", - "attachment": true, - "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-03-03", - "last_updated": "2026-03-03", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 1.5, "cache_read": 0.025, "cache_write": 1 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.75, + "cache_write": 15 + } }, - "gemini-flash-lite-latest": { - "id": "gemini-flash-lite-latest", - "name": "Gemini Flash-Lite Latest", - "family": "gemini-flash-lite", - "attachment": true, + "tencent/hy3-preview": { + "id": "tencent/hy3-preview", + "name": "Hy3 preview", + "family": "Hy", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.025 }, - "limit": { "context": 1048576, "output": 65536 } + "release_date": "2026-04-20", + "last_updated": "2026-04-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 0.066, + "output": 0.26, + "cache_read": 0.029, + "cache_write": 0.029 + } }, - "gemini-3.1-flash-image-preview": { - "id": "gemini-3.1-flash-image-preview", - "name": "Gemini 3.1 Flash Image (Preview)", - "family": "gemini-flash", - "attachment": true, + "poolside/laguna-m.1:free": { + "id": "poolside/laguna-m.1:free", + "name": "Laguna M.1", + "attachment": false, "reasoning": true, - "tool_call": false, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-02-26", - "last_updated": "2026-02-26", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text", "image"] }, + "release_date": "2026-04-28", + "last_updated": "2026-04-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 60 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "gemini-2.5-flash-image": { - "id": "gemini-2.5-flash-image", - "name": "Gemini 2.5 Flash Image", - "family": "gemini-flash", - "attachment": true, + "poolside/laguna-xs.2:free": { + "id": "poolside/laguna-xs.2:free", + "name": "Laguna XS.2", + "attachment": false, "reasoning": true, - "tool_call": false, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-08-26", - "last_updated": "2025-08-26", - "modalities": { "input": ["text", "image"], "output": ["text", "image"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 30, "cache_read": 0.075 }, - "limit": { "context": 32768, "output": 32768 } + "release_date": "2026-04-28", + "last_updated": "2026-04-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "gemini-flash-latest": { - "id": "gemini-flash-latest", - "name": "Gemini Flash Latest", - "family": "gemini-flash", - "attachment": true, + "prime-intellect/intellect-3": { + "id": "prime-intellect/intellect-3", + "name": "Intellect 3", + "family": "glm", + "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 2.5, "cache_read": 0.075, "input_audio": 1 }, - "limit": { "context": 1048576, "output": 65536 } - }, - "gemma-3-12b-it": { - "id": "gemma-3-12b-it", - "name": "Gemma 3 12B", - "family": "gemma", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, "knowledge": "2024-10", - "release_date": "2025-03-13", - "last_updated": "2025-03-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-01-15", + "last_updated": "2025-01-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 32768, "output": 8192 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.2, + "output": 1.1 + } }, - "gemini-live-2.5-flash-preview-native-audio": { - "id": "gemini-live-2.5-flash-preview-native-audio", - "name": "Gemini Live 2.5 Flash Preview Native Audio", - "family": "gemini-flash", + "nvidia/nemotron-3-super-120b-a12b": { + "id": "nvidia/nemotron-3-super-120b-a12b", + "name": "Nemotron 3 Super", + "family": "nemotron", "attachment": false, "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2025-01", - "release_date": "2025-06-17", - "last_updated": "2025-09-18", - "modalities": { "input": ["text", "audio", "video"], "output": ["text", "audio"] }, - "open_weights": false, - "cost": { "input": 0.5, "output": 2, "input_audio": 3, "output_audio": 12 }, - "limit": { "context": 131072, "output": 65536 } + "temperature": true, + "knowledge": "2024-04", + "release_date": "2026-03-11", + "last_updated": "2026-03-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.1, + "output": 0.5 + } }, - "gemini-embedding-001": { - "id": "gemini-embedding-001", - "name": "Gemini Embedding 001", - "family": "gemini", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "knowledge": "2025-05", - "release_date": "2025-05-20", - "last_updated": "2025-05-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.15, "output": 0 }, - "limit": { "context": 2048, "output": 3072 } - }, - "gemini-live-2.5-flash": { - "id": "gemini-live-2.5-flash", - "name": "Gemini Live 2.5 Flash", - "family": "gemini-flash", + "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free": { + "id": "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free", + "name": "Nemotron 3 Nano Omni (free)", + "family": "nemotron", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-09-01", - "last_updated": "2025-09-01", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text", "audio"] }, - "open_weights": false, - "cost": { "input": 0.5, "output": 2, "input_audio": 3, "output_audio": 12 }, - "limit": { "context": 128000, "output": 8000 } + "release_date": "2026-04-28", + "last_updated": "2026-04-28", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gemini-2.5-flash-image-preview": { - "id": "gemini-2.5-flash-image-preview", - "name": "Gemini 2.5 Flash Image (Preview)", - "family": "gemini-flash", - "attachment": true, - "reasoning": true, - "tool_call": false, - "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-08-26", - "last_updated": "2025-08-26", - "modalities": { "input": ["text", "image"], "output": ["text", "image"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 30, "cache_read": 0.075 }, - "limit": { "context": 32768, "output": 32768 } - } - } - }, - "cloudferro-sherlock": { - "id": "cloudferro-sherlock", - "env": ["CLOUDFERRO_SHERLOCK_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api-sherlock.cloudferro.com/openai/v1/", - "name": "CloudFerro Sherlock", - "doc": "https://docs.sherlock.cloudferro.com/", - "models": { - "openai/gpt-oss-120b": { - "id": "openai/gpt-oss-120b", - "name": "OpenAI GPT OSS 120B", - "family": "gpt-oss", + "nvidia/nemotron-3-nano-30b-a3b:free": { + "id": "nvidia/nemotron-3-nano-30b-a3b:free", + "name": "Nemotron 3 Nano 30B A3B (free)", + "family": "nemotron", "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-08-28", - "last_updated": "2025-08-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-11", + "release_date": "2025-12-14", + "last_updated": "2026-01-31", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 2.92, "output": 2.92 }, - "limit": { "context": 131000, "output": 131000 } + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "meta-llama/Llama-3.3-70B-Instruct": { - "id": "meta-llama/Llama-3.3-70B-Instruct", - "name": "Llama 3.3 70B Instruct", - "family": "llama", + "nvidia/nemotron-nano-9b-v2:free": { + "id": "nvidia/nemotron-nano-9b-v2:free", + "name": "Nemotron Nano 9B V2 (free)", + "family": "nemotron", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-10-09", - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-09", + "release_date": "2025-09-05", + "last_updated": "2025-08-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 2.92, "output": 2.92 }, - "limit": { "context": 70000, "output": 70000 } + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "MiniMaxAI/MiniMax-M2.5": { - "id": "MiniMaxAI/MiniMax-M2.5", - "name": "MiniMax-M2.5", - "family": "minimax", + "nvidia/nemotron-3-super-120b-a12b:free": { + "id": "nvidia/nemotron-3-super-120b-a12b:free", + "name": "Nemotron 3 Super (free)", + "family": "nemotron", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2026-01", - "release_date": "2026-03-05", - "last_updated": "2026-03-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2026-03-11", + "last_updated": "2026-03-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 196000, "output": 196000 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "speakleash/Bielik-11B-v3.0-Instruct": { - "id": "speakleash/Bielik-11B-v3.0-Instruct", - "name": "Bielik 11B v3.0 Instruct", + "nvidia/nemotron-nano-9b-v2": { + "id": "nvidia/nemotron-nano-9b-v2", + "name": "nvidia-nemotron-nano-9b-v2", + "family": "nemotron", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-03-13", - "last_updated": "2025-03-13", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-09", + "release_date": "2025-08-18", + "last_updated": "2025-08-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.67, "output": 0.67 }, - "limit": { "context": 32000, "output": 32000 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.04, + "output": 0.16 + } }, - "speakleash/Bielik-11B-v2.6-Instruct": { - "id": "speakleash/Bielik-11B-v2.6-Instruct", - "name": "Bielik 11B v2.6 Instruct", + "nvidia/nemotron-nano-12b-v2-vl:free": { + "id": "nvidia/nemotron-nano-12b-v2-vl:free", + "name": "Nemotron Nano 12B 2 VL (free)", + "family": "nemotron", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-03-13", - "last_updated": "2025-03-13", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-11", + "release_date": "2025-10-28", + "last_updated": "2026-01-31", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.67, "output": 0.67 }, - "limit": { "context": 32000, "output": 32000 } - } - } - }, - "google-vertex-anthropic": { - "id": "google-vertex-anthropic", - "env": ["GOOGLE_VERTEX_PROJECT", "GOOGLE_VERTEX_LOCATION", "GOOGLE_APPLICATION_CREDENTIALS"], - "npm": "@ai-sdk/google-vertex/anthropic", - "name": "Vertex (Anthropic)", - "doc": "https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/claude", - "models": { - "claude-opus-4-5@20251101": { - "id": "claude-opus-4-5@20251101", - "name": "Claude Opus 4.5", - "family": "claude-opus", - "attachment": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "inception/mercury-edit-2": { + "id": "inception/mercury-edit-2", + "name": "Mercury Edit 2", + "attachment": false, "reasoning": true, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-11-24", - "last_updated": "2025-11-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2026-03-30", + "last_updated": "2026-03-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.25, + "output": 0.75, + "cache_read": 0.025 + } }, - "claude-haiku-4-5@20251001": { - "id": "claude-haiku-4-5@20251001", - "name": "Claude Haiku 4.5", - "family": "claude-haiku", - "attachment": true, + "inception/mercury-2": { + "id": "inception/mercury-2", + "name": "Mercury 2", + "family": "mercury", + "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-02-28", - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2026-03-04", + "last_updated": "2026-03-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.1, "cache_write": 1.25 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 128000, + "output": 50000 + }, + "cost": { + "input": 0.25, + "output": 0.75, + "cache_read": 0.025 + } }, - "claude-3-5-sonnet@20241022": { - "id": "claude-3-5-sonnet@20241022", - "name": "Claude Sonnet 3.5 v2", - "family": "claude-sonnet", + "openai/gpt-5.1-codex-max": { + "id": "openai/gpt-5.1-codex-max", + "name": "GPT-5.1-Codex-Max", + "family": "gpt-codex", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-04-30", - "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 8192 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.1, + "output": 9, + "cache_read": 0.11 + } }, - "claude-3-7-sonnet@20250219": { - "id": "claude-3-7-sonnet@20250219", - "name": "Claude Sonnet 3.7", - "family": "claude-sonnet", + "openai/gpt-5.2-chat": { + "id": "openai/gpt-5.2-chat", + "name": "GPT-5.2 Chat", + "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-10-31", - "release_date": "2025-02-19", - "last_updated": "2025-02-19", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "claude-opus-4-1@20250805": { - "id": "claude-opus-4-1@20250805", - "name": "Claude Opus 4.1", - "family": "claude-opus", - "attachment": true, + "openai/gpt-oss-120b:exacto": { + "id": "openai/gpt-oss-120b:exacto", + "name": "GPT OSS 120B (exacto)", + "family": "gpt-oss", + "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-03-31", "release_date": "2025-08-05", "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.05, + "output": 0.24 + } }, - "claude-3-5-haiku@20241022": { - "id": "claude-3-5-haiku@20241022", - "name": "Claude Haiku 3.5", - "family": "claude-haiku", + "openai/gpt-5-chat": { + "id": "openai/gpt-5-chat", + "name": "GPT-5 Chat (latest)", + "family": "gpt-codex", "attachment": true, - "reasoning": false, - "tool_call": true, + "reasoning": true, + "tool_call": false, + "structured_output": true, "temperature": true, - "knowledge": "2024-07-31", - "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2024-09-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.8, "output": 4, "cache_read": 0.08, "cache_write": 1 }, - "limit": { "context": 200000, "output": 8192 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, - "claude-opus-4@20250514": { - "id": "claude-opus-4@20250514", - "name": "Claude Opus 4", - "family": "claude-opus", + "openai/gpt-5.2-pro": { + "id": "openai/gpt-5.2-pro", + "name": "GPT-5.2 Pro", + "family": "gpt-pro", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 21, + "output": 168 + } }, - "claude-sonnet-4-6@default": { - "id": "claude-sonnet-4-6@default", - "name": "Claude Sonnet 4.6", - "family": "claude-sonnet", + "openai/gpt-5-mini": { + "id": "openai/gpt-5-mini", + "name": "GPT-5 Mini", + "family": "gpt-mini", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-08", - "release_date": "2026-02-17", - "last_updated": "2026-02-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2024-10-01", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { - "input": 3, - "output": 15, - "cache_read": 0.3, - "cache_write": 3.75, - "context_over_200k": { "input": 6, "output": 22.5, "cache_read": 0.6, "cache_write": 7.5 } + "limit": { + "context": 400000, + "output": 128000 }, - "limit": { "context": 200000, "output": 64000 } + "cost": { + "input": 0.25, + "output": 2 + } }, - "claude-sonnet-4@20250514": { - "id": "claude-sonnet-4@20250514", - "name": "Claude Sonnet 4", - "family": "claude-sonnet", + "openai/gpt-5-nano": { + "id": "openai/gpt-5-nano", + "name": "GPT-5 Nano", + "family": "gpt-nano", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2024-10-01", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.05, + "output": 0.4 + } }, - "claude-sonnet-4-5@20250929": { - "id": "claude-sonnet-4-5@20250929", - "name": "Claude Sonnet 4.5", - "family": "claude-sonnet", + "openai/gpt-5.3-codex": { + "id": "openai/gpt-5.3-codex", + "name": "GPT-5.3-Codex", + "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-02-24", + "last_updated": "2026-02-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "claude-opus-4-6@default": { - "id": "claude-opus-4-6@default", - "name": "Claude Opus 4.6", - "family": "claude-opus", + "openai/gpt-5.2": { + "id": "openai/gpt-5.2", + "name": "GPT-5.2", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-05", - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { - "input": 5, - "output": 25, - "cache_read": 0.5, - "cache_write": 6.25, - "context_over_200k": { "input": 10, "output": 37.5, "cache_read": 1, "cache_write": 12.5 } + "limit": { + "context": 400000, + "output": 128000 }, - "limit": { "context": 1000000, "output": 128000 } - } - } - }, - "google-vertex": { - "id": "google-vertex", - "env": ["GOOGLE_VERTEX_PROJECT", "GOOGLE_VERTEX_LOCATION", "GOOGLE_APPLICATION_CREDENTIALS"], - "npm": "@ai-sdk/google-vertex", - "name": "Vertex", - "doc": "https://cloud.google.com/vertex-ai/generative-ai/docs/models", - "models": { - "gemini-2.5-flash-lite": { - "id": "gemini-2.5-flash-lite", - "name": "Gemini 2.5 Flash Lite", - "family": "gemini-flash-lite", - "attachment": true, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } + }, + "openai/gpt-oss-20b:free": { + "id": "openai/gpt-oss-20b:free", + "name": "gpt-oss-20b (free)", + "family": "gpt-oss", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.025 }, - "limit": { "context": 1048576, "output": 65536 } + "release_date": "2025-08-05", + "last_updated": "2026-01-31", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gemini-2.5-flash-lite-preview-09-2025": { - "id": "gemini-2.5-flash-lite-preview-09-2025", - "name": "Gemini 2.5 Flash Lite Preview 09-25", - "family": "gemini-flash-lite", + "openai/gpt-4o-mini": { + "id": "openai/gpt-4o-mini", + "name": "GPT-4o-mini", + "family": "gpt-mini", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.025 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.6, + "cache_read": 0.08 + } }, - "gemini-2.5-flash-preview-04-17": { - "id": "gemini-2.5-flash-preview-04-17", - "name": "Gemini 2.5 Flash Preview 04-17", - "family": "gemini-flash", + "openai/gpt-5.4-mini": { + "id": "openai/gpt-5.4-mini", + "name": "GPT-5.4 Mini", + "family": "gpt-mini", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-04-17", - "last_updated": "2025-04-17", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.6, "cache_read": 0.0375 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.75, + "output": 4.5, + "cache_read": 0.075 + } }, - "gemini-3.1-pro-preview": { - "id": "gemini-3.1-pro-preview", - "name": "Gemini 3.1 Pro Preview", - "family": "gemini-pro", + "openai/gpt-5.1-chat": { + "id": "openai/gpt-5.1-chat", + "name": "GPT-5.1 Chat", + "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-02-19", - "last_updated": "2026-02-19", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { - "input": 2, - "output": 12, - "cache_read": 0.2, - "context_over_200k": { "input": 4, "output": 18, "cache_read": 0.4 } + "limit": { + "context": 128000, + "output": 16384 }, - "limit": { "context": 1048576, "output": 65536 } + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "gemini-2.5-flash-preview-05-20": { - "id": "gemini-2.5-flash-preview-05-20", - "name": "Gemini 2.5 Flash Preview 05-20", - "family": "gemini-flash", + "openai/o4-mini": { + "id": "openai/o4-mini", + "name": "o4 Mini", + "family": "o-mini", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-05-20", - "last_updated": "2025-05-20", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "knowledge": "2024-06", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.6, "cache_read": 0.0375 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.28 + } }, - "gemini-3-pro-preview": { - "id": "gemini-3-pro-preview", - "name": "Gemini 3 Pro Preview", - "family": "gemini-pro", + "openai/gpt-5.4-nano": { + "id": "openai/gpt-5.4-nano", + "name": "GPT-5.4 Nano", + "family": "gpt-nano", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-11-18", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { - "input": 2, - "output": 12, - "cache_read": 0.2, - "context_over_200k": { "input": 4, "output": 18, "cache_read": 0.4 } + "limit": { + "context": 400000, + "output": 128000 }, - "limit": { "context": 1048576, "output": 65536 } + "cost": { + "input": 0.2, + "output": 1.25, + "cache_read": 0.02 + } }, - "gemini-2.5-pro-preview-06-05": { - "id": "gemini-2.5-pro-preview-06-05", - "name": "Gemini 2.5 Pro Preview 06-05", - "family": "gemini-pro", + "openai/gpt-5.2-codex": { + "id": "openai/gpt-5.2-codex", + "name": "GPT-5.2-Codex", + "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-06-05", - "last_updated": "2025-06-05", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-01-14", + "last_updated": "2026-01-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.31 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "gemini-2.5-pro-preview-05-06": { - "id": "gemini-2.5-pro-preview-05-06", - "name": "Gemini 2.5 Pro Preview 05-06", - "family": "gemini-pro", + "openai/gpt-5.1-codex-mini": { + "id": "openai/gpt-5.1-codex-mini", + "name": "GPT-5.1-Codex-Mini", + "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-05-06", - "last_updated": "2025-05-06", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.31 }, - "limit": { "context": 1048576, "output": 65536 } - }, - "gemini-2.0-flash-lite": { - "id": "gemini-2.0-flash-lite", - "name": "Gemini 2.0 Flash Lite", - "family": "gemini-flash-lite", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-06", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.075, "output": 0.3 }, - "limit": { "context": 1048576, "output": 8192 } + "limit": { + "context": 400000, + "output": 100000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.025 + } }, - "gemini-3-flash-preview": { - "id": "gemini-3-flash-preview", - "name": "Gemini 3 Flash Preview", - "family": "gemini-flash", + "openai/gpt-5-image": { + "id": "openai/gpt-5-image", + "name": "GPT-5 Image", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, + "knowledge": "2024-10-01", + "release_date": "2025-10-14", + "last_updated": "2025-10-14", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text", "image"] + }, "open_weights": false, - "cost": { - "input": 0.5, - "output": 3, - "cache_read": 0.05, - "context_over_200k": { "input": 0.5, "output": 3, "cache_read": 0.05 } + "limit": { + "context": 400000, + "output": 128000 }, - "limit": { "context": 1048576, "output": 65536 } + "cost": { + "input": 5, + "output": 10, + "cache_read": 1.25 + } }, - "gemini-2.5-pro": { - "id": "gemini-2.5-pro", - "name": "Gemini 2.5 Pro", - "family": "gemini-pro", + "openai/gpt-5.1": { + "id": "openai/gpt-5.1", + "name": "GPT-5.1", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-03-20", - "last_updated": "2025-06-05", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.31 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "gemini-2.5-flash": { - "id": "gemini-2.5-flash", - "name": "Gemini 2.5 Flash", - "family": "gemini-flash", + "openai/gpt-5.4-pro": { + "id": "openai/gpt-5.4-pro", + "name": "GPT-5.4 Pro", + "family": "gpt-pro", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "structured_output": false, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 2.5, "cache_read": 0.075, "cache_write": 0.383 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 30, + "output": 180, + "cache_read": 30 + } }, - "gemini-3.1-pro-preview-customtools": { - "id": "gemini-3.1-pro-preview-customtools", - "name": "Gemini 3.1 Pro Preview Custom Tools", - "family": "gemini-pro", + "openai/gpt-5-codex": { + "id": "openai/gpt-5-codex", + "name": "GPT-5 Codex", + "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-02-19", - "last_updated": "2026-02-19", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, + "knowledge": "2024-10-01", + "release_date": "2025-09-15", + "last_updated": "2025-09-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { - "input": 2, - "output": 12, - "cache_read": 0.2, - "context_over_200k": { "input": 4, "output": 18, "cache_read": 0.4 } + "limit": { + "context": 400000, + "output": 128000 }, - "limit": { "context": 1048576, "output": 65536 } + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "gemini-2.5-flash-preview-09-2025": { - "id": "gemini-2.5-flash-preview-09-2025", - "name": "Gemini 2.5 Flash Preview 09-25", - "family": "gemini-flash", - "attachment": true, + "openai/gpt-oss-20b": { + "id": "openai/gpt-oss-20b", + "name": "GPT OSS 20B", + "family": "gpt-oss", + "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 2.5, "cache_read": 0.075, "cache_write": 0.383 }, - "limit": { "context": 1048576, "output": 65536 } + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.05, + "output": 0.2 + } }, - "gemini-2.0-flash": { - "id": "gemini-2.0-flash", - "name": "Gemini 2.0 Flash", - "family": "gemini-flash", + "openai/gpt-5-pro": { + "id": "openai/gpt-5-pro", + "name": "GPT-5 Pro", + "family": "gpt-pro", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-06", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-10-06", + "last_updated": "2025-10-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.6, "cache_read": 0.025 }, - "limit": { "context": 1048576, "output": 8192 } + "limit": { + "context": 400000, + "output": 272000 + }, + "cost": { + "input": 15, + "output": 120 + } }, - "gemini-2.5-flash-lite-preview-06-17": { - "id": "gemini-2.5-flash-lite-preview-06-17", - "name": "Gemini 2.5 Flash Lite Preview 06-17", - "family": "gemini-flash-lite", - "attachment": true, + "openai/gpt-oss-120b:free": { + "id": "openai/gpt-oss-120b:free", + "name": "gpt-oss-120b (free)", + "family": "gpt-oss", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.025 }, - "limit": { "context": 65536, "output": 65536 } + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gemini-flash-lite-latest": { - "id": "gemini-flash-lite-latest", - "name": "Gemini Flash-Lite Latest", - "family": "gemini-flash-lite", + "openai/gpt-5": { + "id": "openai/gpt-5", + "name": "GPT-5", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "knowledge": "2024-10-01", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.025 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, - "gemini-flash-latest": { - "id": "gemini-flash-latest", - "name": "Gemini Flash Latest", - "family": "gemini-flash", - "attachment": true, + "openai/gpt-oss-safeguard-20b": { + "id": "openai/gpt-oss-safeguard-20b", + "name": "GPT OSS Safeguard 20B", + "family": "gpt-oss", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 2.5, "cache_read": 0.075, "cache_write": 0.383 }, - "limit": { "context": 1048576, "output": 65536 } - }, - "gemini-embedding-001": { - "id": "gemini-embedding-001", - "name": "Gemini Embedding 001", - "family": "gemini", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "knowledge": "2025-05", - "release_date": "2025-05-20", - "last_updated": "2025-05-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-10-29", + "last_updated": "2025-10-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0 }, - "limit": { "context": 2048, "output": 3072 } + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.075, + "output": 0.3 + } }, - "openai/gpt-oss-20b-maas": { - "id": "openai/gpt-oss-20b-maas", - "name": "GPT OSS 20B", + "openai/gpt-oss-120b": { + "id": "openai/gpt-oss-120b", + "name": "GPT OSS 120B", "family": "gpt-oss", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, "release_date": "2025-08-05", "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.07, "output": 0.25 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.072, + "output": 0.28 + } }, - "openai/gpt-oss-120b-maas": { - "id": "openai/gpt-oss-120b-maas", - "name": "GPT OSS 120B", - "family": "gpt-oss", - "attachment": false, + "openai/gpt-4.1": { + "id": "openai/gpt-4.1", + "name": "GPT-4.1", + "family": "gpt", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } + }, + "openai/gpt-4.1-mini": { + "id": "openai/gpt-4.1-mini", + "name": "GPT-4.1 Mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.4, + "output": 1.6, + "cache_read": 0.1 + } + }, + "openai/gpt-5.1-codex": { + "id": "openai/gpt-5.1-codex", + "name": "GPT-5.1-Codex", + "family": "gpt-codex", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.09, "output": 0.36 }, - "limit": { "context": 131072, "output": 32768 } + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "zai-org/glm-4.7-maas": { - "id": "zai-org/glm-4.7-maas", + "z-ai/glm-4.7": { + "id": "z-ai/glm-4.7", "name": "GLM-4.7", "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "interleaved": { + "field": "reasoning_details" + }, "structured_output": true, "temperature": true, "knowledge": "2025-04", - "release_date": "2026-01-06", - "last_updated": "2026-01-06", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 2.2 }, - "limit": { "context": 200000, "output": 128000 }, - "provider": { - "npm": "@ai-sdk/openai-compatible", - "api": "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 2.2, + "cache_read": 0.11 } }, - "zai-org/glm-5-maas": { - "id": "zai-org/glm-5-maas", - "name": "GLM-5", - "family": "glm", + "z-ai/glm-4.5-air:free": { + "id": "z-ai/glm-4.5-air:free", + "name": "GLM 4.5 Air (free)", + "family": "glm-air", "attachment": false, "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "tool_call": false, "temperature": true, - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1, "output": 3.2, "cache_read": 0.1 }, - "limit": { "context": 202752, "output": 131072 }, - "provider": { - "npm": "@ai-sdk/openai-compatible", - "api": "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" + "limit": { + "context": 128000, + "output": 96000 + }, + "cost": { + "input": 0, + "output": 0 } }, - "deepseek-ai/deepseek-v3.1-maas": { - "id": "deepseek-ai/deepseek-v3.1-maas", - "name": "DeepSeek V3.1", - "family": "deepseek", + "z-ai/glm-5": { + "id": "z-ai/glm-5", + "name": "GLM-5", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, "temperature": true, - "release_date": "2025-08-28", - "last_updated": "2025-08-28", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 1.7 }, - "limit": { "context": 163840, "output": 32768 }, - "provider": { - "npm": "@ai-sdk/openai-compatible", - "api": "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" + "limit": { + "context": 202752, + "output": 131000 + }, + "cost": { + "input": 1, + "output": 3.2, + "cache_read": 0.2 } }, - "qwen/qwen3-235b-a22b-instruct-2507-maas": { - "id": "qwen/qwen3-235b-a22b-instruct-2507-maas", - "name": "Qwen3 235B A22B Instruct", - "family": "qwen", + "z-ai/glm-5.1": { + "id": "z-ai/glm-5.1", + "name": "GLM-5.1", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, "temperature": true, - "release_date": "2025-08-13", - "last_updated": "2025-08-13", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-07", + "last_updated": "2026-04-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.22, "output": 0.88 }, - "limit": { "context": 262144, "output": 16384 }, - "provider": { - "npm": "@ai-sdk/openai-compatible", - "api": "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" + "limit": { + "context": 202752, + "output": 131072 + }, + "cost": { + "input": 1.4, + "output": 4.4, + "cache_read": 0.26 } }, - "meta/llama-3.3-70b-instruct-maas": { - "id": "meta/llama-3.3-70b-instruct-maas", - "name": "Llama 3.3 70B Instruct", - "family": "llama", + "z-ai/glm-4.5": { + "id": "z-ai/glm-4.5", + "name": "GLM 4.5", + "family": "glm", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2025-04-29", - "last_updated": "2025-04-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.72, "output": 0.72 }, - "limit": { "context": 128000, "output": 8192 }, - "provider": { - "npm": "@ai-sdk/openai-compatible", - "api": "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" + "limit": { + "context": 128000, + "output": 96000 + }, + "cost": { + "input": 0.6, + "output": 2.2 } }, - "meta/llama-4-maverick-17b-128e-instruct-maas": { - "id": "meta/llama-4-maverick-17b-128e-instruct-maas", - "name": "Llama 4 Maverick 17B 128E Instruct", - "family": "llama", - "attachment": true, - "reasoning": false, + "z-ai/glm-4.6:exacto": { + "id": "z-ai/glm-4.6:exacto", + "name": "GLM 4.6 (exacto)", + "family": "glm", + "attachment": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-04-29", - "last_updated": "2025-04-29", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-09", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.35, "output": 1.15 }, - "limit": { "context": 524288, "output": 8192 }, - "provider": { - "npm": "@ai-sdk/openai-compatible", - "api": "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 0.6, + "output": 1.9, + "cache_read": 0.11 } - } - } - }, - "chutes": { - "id": "chutes", - "env": ["CHUTES_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://llm.chutes.ai/v1", - "name": "Chutes", - "doc": "https://llm.chutes.ai/v1/models", - "models": { - "unsloth/gemma-3-27b-it": { - "id": "unsloth/gemma-3-27b-it", - "name": "gemma 3 27b it", - "family": "unsloth", + }, + "z-ai/glm-4.5-air": { + "id": "z-ai/glm-4.5-air", + "name": "GLM 4.5 Air", + "family": "glm-air", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.04, "output": 0.15, "cache_read": 0.02 }, - "limit": { "context": 128000, "output": 65536 } + "limit": { + "context": 128000, + "output": 96000 + }, + "cost": { + "input": 0.2, + "output": 1.1 + } }, - "unsloth/gemma-3-4b-it": { - "id": "unsloth/gemma-3-4b-it", - "name": "gemma 3 4b it", - "family": "unsloth", + "z-ai/glm-5-turbo": { + "id": "z-ai/glm-5-turbo", + "name": "GLM-5-Turbo", + "family": "glm", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.01, "output": 0.03 }, - "limit": { "context": 96000, "output": 96000 } + "release_date": "2026-03-16", + "last_updated": "2026-03-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 202752, + "output": 131072 + }, + "cost": { + "input": 0.96, + "output": 3.2, + "cache_read": 0.192, + "cache_write": 0 + } }, - "unsloth/Mistral-Nemo-Instruct-2407": { - "id": "unsloth/Mistral-Nemo-Instruct-2407", - "name": "Mistral Nemo Instruct 2407", - "family": "unsloth", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.02, "output": 0.04, "cache_read": 0.01 }, - "limit": { "context": 131072, "output": 131072 } - }, - "unsloth/Llama-3.2-3B-Instruct": { - "id": "unsloth/Llama-3.2-3B-Instruct", - "name": "Llama 3.2 3B Instruct", - "family": "unsloth", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2025-02-12", - "last_updated": "2025-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.01, "output": 0.01, "cache_read": 0.005 }, - "limit": { "context": 16384, "output": 16384 } - }, - "unsloth/Llama-3.2-1B-Instruct": { - "id": "unsloth/Llama-3.2-1B-Instruct", - "name": "Llama 3.2 1B Instruct", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.01, "output": 0.01, "cache_read": 0.005 }, - "limit": { "context": 32768, "output": 8192 } - }, - "unsloth/Mistral-Small-24B-Instruct-2501": { - "id": "unsloth/Mistral-Small-24B-Instruct-2501", - "name": "Mistral Small 24B Instruct 2501", - "family": "unsloth", - "attachment": false, - "reasoning": false, + "z-ai/glm-4.5v": { + "id": "z-ai/glm-4.5v", + "name": "GLM 4.5V", + "family": "glm", + "attachment": true, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.03, "output": 0.11 }, - "limit": { "context": 32768, "output": 32768 } - }, - "unsloth/gemma-3-12b-it": { - "id": "unsloth/gemma-3-12b-it", - "name": "gemma 3 12b it", - "family": "unsloth", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-08-11", + "last_updated": "2025-08-11", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.03, "output": 0.1 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 64000, + "output": 16384 + }, + "cost": { + "input": 0.6, + "output": 1.8 + } }, - "openai/gpt-oss-120b-TEE": { - "id": "openai/gpt-oss-120b-TEE", - "name": "gpt oss 120b TEE", - "family": "gpt-oss", + "z-ai/glm-4.6": { + "id": "z-ai/glm-4.6", + "name": "GLM 4.6", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-09", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.04, "output": 0.18 }, - "limit": { "context": 131072, "output": 65536 } + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 0.6, + "output": 2.2, + "cache_read": 0.11 + } }, - "openai/gpt-oss-20b": { - "id": "openai/gpt-oss-20b", - "name": "gpt oss 20b", - "family": "gpt-oss", + "z-ai/glm-4.7-flash": { + "id": "z-ai/glm-4.7-flash", + "name": "GLM-4.7-Flash", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "interleaved": { + "field": "reasoning_details" + }, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01-19", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.02, "output": 0.1 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 200000, + "output": 65535 + }, + "cost": { + "input": 0.07, + "output": 0.4 + } }, - "NousResearch/Hermes-4-405B-FP8-TEE": { - "id": "NousResearch/Hermes-4-405B-FP8-TEE", - "name": "Hermes 4 405B FP8 TEE", - "family": "nousresearch", + "sourceful/riverflow-v2-standard-preview": { + "id": "sourceful/riverflow-v2-standard-preview", + "name": "Riverflow V2 Standard Preview", + "family": "sourceful", "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-06", + "release_date": "2025-12-08", + "last_updated": "2026-01-28", + "modalities": { + "input": ["text", "image"], + "output": ["image"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 131072, "output": 65536 } + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "NousResearch/Hermes-4-14B": { - "id": "NousResearch/Hermes-4-14B", - "name": "Hermes 4 14B", - "family": "nousresearch", + "sourceful/riverflow-v2-fast-preview": { + "id": "sourceful/riverflow-v2-fast-preview", + "name": "Riverflow V2 Fast Preview", + "family": "sourceful", "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-06", + "release_date": "2025-12-08", + "last_updated": "2026-01-28", + "modalities": { + "input": ["text", "image"], + "output": ["image"] + }, "open_weights": true, - "cost": { "input": 0.01, "output": 0.05 }, - "limit": { "context": 40960, "output": 40960 } + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "NousResearch/Hermes-4.3-36B": { - "id": "NousResearch/Hermes-4.3-36B", - "name": "Hermes 4.3 36B", - "family": "nousresearch", + "sourceful/riverflow-v2-max-preview": { + "id": "sourceful/riverflow-v2-max-preview", + "name": "Riverflow V2 Max Preview", + "family": "sourceful", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-06", + "release_date": "2025-12-08", + "last_updated": "2026-01-28", + "modalities": { + "input": ["text", "image"], + "output": ["image"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.39 }, - "limit": { "context": 32768, "output": 8192 } + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "NousResearch/DeepHermes-3-Mistral-24B-Preview": { - "id": "NousResearch/DeepHermes-3-Mistral-24B-Preview", - "name": "DeepHermes 3 Mistral 24B Preview", - "family": "nousresearch", + "minimax/minimax-m2.7": { + "id": "minimax/minimax-m2.7", + "name": "MiniMax M2.7", + "family": "minimax", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.02, "output": 0.1 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.06, + "cache_write": 0.375 + } }, - "NousResearch/Hermes-4-70B": { - "id": "NousResearch/Hermes-4-70B", - "name": "Hermes 4 70B", - "family": "nousresearch", + "minimax/minimax-m2": { + "id": "minimax/minimax-m2", + "name": "MiniMax M2", + "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "interleaved": { + "field": "reasoning_details" + }, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-10-23", + "last_updated": "2025-10-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.11, "output": 0.38 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 196600, + "output": 118000 + }, + "cost": { + "input": 0.28, + "output": 1.15, + "cache_read": 0.28, + "cache_write": 1.15 + } }, - "zai-org/GLM-4.6-TEE": { - "id": "zai-org/GLM-4.6-TEE", - "name": "GLM 4.6 TEE", - "family": "glm", - "attachment": false, + "minimax/minimax-01": { + "id": "minimax/minimax-01", + "name": "MiniMax-01", + "family": "minimax", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-01-15", + "last_updated": "2025-01-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.4, "output": 1.7, "cache_read": 0.2 }, - "limit": { "context": 202752, "output": 65536 } + "limit": { + "context": 1000000, + "output": 1000000 + }, + "cost": { + "input": 0.2, + "output": 1.1 + } }, - "zai-org/GLM-4.5-Air": { - "id": "zai-org/GLM-4.5-Air", - "name": "GLM 4.5 Air", - "family": "glm", + "minimax/minimax-m2.1": { + "id": "minimax/minimax-m2.1", + "name": "MiniMax M2.1", + "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "interleaved": { + "field": "reasoning_details" + }, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.05, "output": 0.22 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "zai-org/GLM-4.6V": { - "id": "zai-org/GLM-4.6V", - "name": "GLM 4.6V", - "family": "glm", + "minimax/minimax-m2.5:free": { + "id": "minimax/minimax-m2.5:free", + "name": "MiniMax M2.5 (free)", + "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "interleaved": { + "field": "reasoning_details" + }, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 0.9, "cache_read": 0.15 }, - "limit": { "context": 131072, "output": 65536 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "zai-org/GLM-4.7-TEE": { - "id": "zai-org/GLM-4.7-TEE", - "name": "GLM 4.7 TEE", - "family": "glm", + "minimax/minimax-m1": { + "id": "minimax/minimax-m1", + "name": "MiniMax M1", + "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.4, "output": 1.5 }, - "limit": { "context": 202752, "output": 65535 } + "limit": { + "context": 1000000, + "output": 40000 + }, + "cost": { + "input": 0.4, + "output": 2.2 + } }, - "zai-org/GLM-4.6-FP8": { - "id": "zai-org/GLM-4.6-FP8", - "name": "GLM 4.6 FP8", + "minimax/minimax-m2.5": { + "id": "minimax/minimax-m2.5", + "name": "MiniMax M2.5", + "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_details" + }, "structured_output": true, "temperature": true, - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 202752, "output": 65535 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.03 + } }, - "zai-org/GLM-4.7-Flash": { - "id": "zai-org/GLM-4.7-Flash", - "name": "GLM 4.7 Flash", + "qwen/qwen3-coder-plus": { + "id": "qwen/qwen3-coder-plus", + "name": "Qwen3 Coder Plus", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-09-23", + "last_updated": "2025-09-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.06, "output": 0.35 }, - "limit": { "context": 202752, "output": 65535 } + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.65, + "output": 3.25, + "cache_read": 0.13, + "cache_write": 0.8125 + } }, - "zai-org/GLM-4.5-TEE": { - "id": "zai-org/GLM-4.5-TEE", - "name": "GLM 4.5 TEE", - "family": "glm", - "attachment": false, + "qwen/qwen3.5-397b-a17b": { + "id": "qwen/qwen3.5-397b-a17b", + "name": "Qwen3.5 397B A17B", + "family": "qwen", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-02-16", + "last_updated": "2026-02-16", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.35, "output": 1.55 }, - "limit": { "context": 131072, "output": 65536 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.6, + "output": 3.6 + } }, - "zai-org/GLM-4.5-FP8": { - "id": "zai-org/GLM-4.5-FP8", - "name": "GLM 4.5 FP8", - "attachment": false, - "reasoning": true, - "tool_call": true, + "qwen/qwen2.5-vl-72b-instruct": { + "id": "qwen/qwen2.5-vl-72b-instruct", + "name": "Qwen2.5 VL 72B Instruct", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": false, "structured_output": true, "temperature": true, - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-02-01", + "last_updated": "2025-02-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 131072, "output": 65536 } + "limit": { + "context": 32768, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "zai-org/GLM-5-TEE": { - "id": "zai-org/GLM-5-TEE", - "name": "GLM 5 TEE", - "family": "glm", + "qwen/qwen-plus": { + "id": "qwen/qwen-plus", + "name": "Qwen: Qwen-Plus", + "family": "qwen", "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": false, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-01-25", + "last_updated": "2025-01-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 32768 + }, + "cost": { + "input": 0.26, + "output": 0.78, + "cache_read": 0.052, + "cache_write": 0.325 + } + }, + "qwen/qwen3.5-flash-02-23": { + "id": "qwen/qwen3.5-flash-02-23", + "name": "Qwen: Qwen3.5-Flash", + "family": "qwen", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "release_date": "2026-02-14", - "last_updated": "2026-02-14", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.95, "output": 3.15, "cache_read": 0.475 }, - "limit": { "context": 202752, "output": 65535 } + "release_date": "2026-02-25", + "last_updated": "2026-02-25", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.065, + "output": 0.26 + } }, - "zai-org/GLM-5-Turbo": { - "id": "zai-org/GLM-5-Turbo", - "name": "GLM 5 Turbo", - "family": "glm", - "attachment": false, + "qwen/qwen3.6-plus": { + "id": "qwen/qwen3.6-plus", + "name": "Qwen3.6 Plus", + "family": "qwen", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "release_date": "2026-03-11", - "last_updated": "2026-03-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.49, "output": 1.96, "cache_read": 0.245 }, - "limit": { "context": 202752, "output": 65535 } + "knowledge": "2025-04", + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.325, + "output": 1.95, + "cache_read": 0.0325, + "cache_write": 0.40625 + } }, - "zai-org/GLM-4.7-FP8": { - "id": "zai-org/GLM-4.7-FP8", - "name": "GLM 4.7 FP8", + "qwen/qwen3-max": { + "id": "qwen/qwen3-max", + "name": "Qwen3 Max", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 202752, "output": 65535 } + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 1.2, + "output": 6, + "cache_read": 0.156, + "cache_write": 0.975 + } }, - "nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16": { - "id": "nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16", - "name": "NVIDIA Nemotron 3 Nano 30B A3B BF16", - "family": "nemotron", + "qwen/qwen3-coder:exacto": { + "id": "qwen/qwen3-coder:exacto", + "name": "Qwen3 Coder (exacto)", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.06, "output": 0.24 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.38, + "output": 1.53 + } }, - "rednote-hilab/dots.ocr": { - "id": "rednote-hilab/dots.ocr", - "name": "dots.ocr", - "family": "rednote", + "qwen/qwen3-30b-a3b-instruct-2507": { + "id": "qwen/qwen3-30b-a3b-instruct-2507", + "name": "Qwen3 30B A3B Instruct 2507", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-29", + "last_updated": "2025-07-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.01, "output": 0.01, "cache_read": 0.005 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.2, + "output": 0.8 + } }, - "miromind-ai/MiroThinker-v1.5-235B": { - "id": "miromind-ai/MiroThinker-v1.5-235B", - "name": "MiroThinker V1.5 235B", - "attachment": false, + "qwen/qwen-3.6-27b": { + "id": "qwen/qwen-3.6-27b", + "name": "Qwen3.6 27B", + "family": "qwen", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2026-01-10", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.15 }, - "limit": { "context": 262144, "output": 8192 } - }, - "MiniMaxAI/MiniMax-M2.5-TEE": { - "id": "MiniMaxAI/MiniMax-M2.5-TEE", - "name": "MiniMax M2.5 TEE", - "family": "minimax", - "attachment": false, - "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "release_date": "2026-02-15", - "last_updated": "2026-02-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.1, "cache_read": 0.15 }, - "limit": { "context": 196608, "output": 65536 } + "limit": { + "context": 262144, + "output": 81920 + }, + "cost": { + "input": 0.195, + "output": 1.56 + } }, - "MiniMaxAI/MiniMax-M2.1-TEE": { - "id": "MiniMaxAI/MiniMax-M2.1-TEE", - "name": "MiniMax M2.1 TEE", - "family": "minimax", + "qwen/qwen3-235b-a22b-thinking-2507": { + "id": "qwen/qwen3-235b-a22b-thinking-2507", + "name": "Qwen3 235B A22B Thinking 2507", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-25", + "last_updated": "2025-07-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.27, "output": 1.12 }, - "limit": { "context": 196608, "output": 65536 } + "limit": { + "context": 262144, + "output": 81920 + }, + "cost": { + "input": 0.078, + "output": 0.312 + } }, - "deepseek-ai/DeepSeek-R1-Distill-Llama-70B": { - "id": "deepseek-ai/DeepSeek-R1-Distill-Llama-70B", - "name": "DeepSeek R1 Distill Llama 70B", - "family": "deepseek-thinking", + "qwen/qwen3-next-80b-a3b-thinking": { + "id": "qwen/qwen3-next-80b-a3b-thinking", + "name": "Qwen3 Next 80B A3B Thinking", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-09-11", + "last_updated": "2025-09-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.03, "output": 0.11 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.14, + "output": 1.4 + } }, - "deepseek-ai/DeepSeek-V3.1-Terminus-TEE": { - "id": "deepseek-ai/DeepSeek-V3.1-Terminus-TEE", - "name": "DeepSeek V3.1 Terminus TEE", - "family": "deepseek", + "qwen/qwen3-30b-a3b-thinking-2507": { + "id": "qwen/qwen3-30b-a3b-thinking-2507", + "name": "Qwen3 30B A3B Thinking 2507", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-29", + "last_updated": "2025-07-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.23, "output": 0.9 }, - "limit": { "context": 163840, "output": 65536 } + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.2, + "output": 0.8 + } }, - "deepseek-ai/DeepSeek-R1-0528-TEE": { - "id": "deepseek-ai/DeepSeek-R1-0528-TEE", - "name": "DeepSeek R1 0528 TEE", - "family": "deepseek-thinking", + "qwen/qwen3-coder-flash": { + "id": "qwen/qwen3-coder-flash", + "name": "Qwen3 Coder Flash", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, + "structured_output": false, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.4, "output": 1.75 }, - "limit": { "context": 163840, "output": 65536 } + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 66536 + }, + "cost": { + "input": 0.3, + "output": 1.5, + "cache_read": 0.039, + "cache_write": 0.24375 + } }, - "deepseek-ai/DeepSeek-V3-0324-TEE": { - "id": "deepseek-ai/DeepSeek-V3-0324-TEE", - "name": "DeepSeek V3 0324 TEE", - "family": "deepseek", + "qwen/qwen3-next-80b-a3b-instruct": { + "id": "qwen/qwen3-next-80b-a3b-instruct", + "name": "Qwen3 Next 80B A3B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.19, "output": 0.87, "cache_read": 0.095 }, - "limit": { "context": 163840, "output": 65536 } - }, - "deepseek-ai/DeepSeek-V3.2-TEE": { - "id": "deepseek-ai/DeepSeek-V3.2-TEE", - "name": "DeepSeek V3.2 TEE", - "family": "deepseek", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, - "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.28, "output": 0.42, "cache_read": 0.14 }, - "limit": { "context": 131072, "output": 65536 } - }, - "deepseek-ai/DeepSeek-V3.2-Speciale-TEE": { - "id": "deepseek-ai/DeepSeek-V3.2-Speciale-TEE", - "name": "DeepSeek V3.2 Speciale TEE", - "family": "deepseek", - "attachment": false, - "reasoning": true, - "tool_call": false, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, - "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-09-11", + "last_updated": "2025-09-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.27, "output": 0.41 }, - "limit": { "context": 163840, "output": 65536 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.14, + "output": 1.4 + } }, - "deepseek-ai/DeepSeek-R1-TEE": { - "id": "deepseek-ai/DeepSeek-R1-TEE", - "name": "DeepSeek R1 TEE", - "family": "deepseek-thinking", + "qwen/qwen-2.5-coder-32b-instruct": { + "id": "qwen/qwen-2.5-coder-32b-instruct", + "name": "Qwen2.5 Coder 32B Instruct", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": false, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2024-11-11", + "last_updated": "2024-11-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 163840, "output": 163840 } + "limit": { + "context": 32768, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "deepseek-ai/DeepSeek-V3.1-TEE": { - "id": "deepseek-ai/DeepSeek-V3.1-TEE", - "name": "DeepSeek V3.1 TEE", - "family": "deepseek", + "qwen/qwen3-coder-30b-a3b-instruct": { + "id": "qwen/qwen3-coder-30b-a3b-instruct", + "name": "Qwen3 Coder 30B A3B Instruct", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-31", + "last_updated": "2025-07-31", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.8 }, - "limit": { "context": 163840, "output": 65536 } + "limit": { + "context": 160000, + "output": 65536 + }, + "cost": { + "input": 0.07, + "output": 0.27 + } }, - "deepseek-ai/DeepSeek-V3": { - "id": "deepseek-ai/DeepSeek-V3", - "name": "DeepSeek V3", - "family": "deepseek", + "qwen/qwen3-coder": { + "id": "qwen/qwen3-coder", + "name": "Qwen3 Coder", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 163840, "output": 163840 } + "limit": { + "context": 262144, + "output": 66536 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "Qwen/Qwen3-30B-A3B": { - "id": "Qwen/Qwen3-30B-A3B", - "name": "Qwen3 30B A3B", + "qwen/qwen3.5-plus-02-15": { + "id": "qwen/qwen3.5-plus-02-15", + "name": "Qwen3.5 Plus 2026-02-15", "family": "qwen", - "attachment": false, + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.06, "output": 0.22 }, - "limit": { "context": 40960, "output": 40960 } + "knowledge": "2025-04", + "release_date": "2026-02-16", + "last_updated": "2026-02-16", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.4, + "output": 2.4 + } }, - "Qwen/Qwen2.5-Coder-32B-Instruct": { - "id": "Qwen/Qwen2.5-Coder-32B-Instruct", - "name": "Qwen2.5 Coder 32B Instruct", + "qwen/qwen3-235b-a22b-07-25": { + "id": "qwen/qwen3-235b-a22b-07-25", + "name": "Qwen3 235B A22B Instruct 2507", "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-04-28", + "last_updated": "2025-07-21", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.03, "output": 0.11 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0.15, + "output": 0.85 + } }, - "Qwen/Qwen2.5-VL-72B-Instruct-TEE": { - "id": "Qwen/Qwen2.5-VL-72B-Instruct-TEE", - "name": "Qwen2.5 VL 72B Instruct TEE", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": false, + "google/gemini-2.5-pro-preview-05-06": { + "id": "google/gemini-2.5-pro-preview-05-06", + "name": "Gemini 2.5 Pro Preview 05-06", + "family": "gemini-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 32768, "output": 32768 } + "knowledge": "2025-01", + "release_date": "2025-05-06", + "last_updated": "2025-05-06", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.31 + } }, - "Qwen/Qwen3Guard-Gen-0.6B": { - "id": "Qwen/Qwen3Guard-Gen-0.6B", - "name": "Qwen3Guard Gen 0.6B", - "family": "qwen", - "attachment": false, + "google/gemini-3.1-pro-preview-customtools": { + "id": "google/gemini-3.1-pro-preview-customtools", + "name": "Gemini 3.1 Pro Preview Custom Tools", + "family": "gemini-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_details" + }, + "structured_output": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-02-19", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12, + "reasoning": 12, + "tiers": [ + { + "input": 4, + "output": 18, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 4, + "output": 18, + "cache_read": 0.4 + } + } + }, + "google/gemma-3-4b-it:free": { + "id": "google/gemma-3-4b-it:free", + "name": "Gemma 3 4B (free)", + "family": "gemma", + "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": false, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.01, "output": 0.01, "cache_read": 0.005 }, - "limit": { "context": 32768, "output": 8192 } + "limit": { + "context": 32768, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Qwen/Qwen3-32B": { - "id": "Qwen/Qwen3-32B", - "name": "Qwen3 32B", - "family": "qwen", - "attachment": false, + "google/gemini-2.5-flash-lite-preview-09-2025": { + "id": "google/gemini-2.5-flash-lite-preview-09-2025", + "name": "Gemini 2.5 Flash Lite Preview 09-25", + "family": "gemini-flash-lite", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.08, "output": 0.24, "cache_read": 0.04 }, - "limit": { "context": 40960, "output": 40960 } + "knowledge": "2025-01", + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.025 + } }, - "Qwen/Qwen3-14B": { - "id": "Qwen/Qwen3-14B", - "name": "Qwen3 14B", - "family": "qwen", - "attachment": false, - "reasoning": true, + "google/gemini-2.0-flash-001": { + "id": "google/gemini-2.0-flash-001", + "name": "Gemini 2.0 Flash", + "family": "gemini-flash", + "attachment": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.05, "output": 0.22 }, - "limit": { "context": 40960, "output": 40960 } + "knowledge": "2024-06", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.025 + } }, - "Qwen/Qwen3-Coder-Next": { - "id": "Qwen/Qwen3-Coder-Next", - "name": "Qwen3 Coder Next", - "family": "qwen", - "attachment": false, + "google/gemma-3n-e4b-it": { + "id": "google/gemma-3n-e4b-it", + "name": "Gemma 3n 4B", + "family": "gemma", + "attachment": true, "reasoning": false, - "tool_call": true, - "structured_output": true, + "tool_call": false, "temperature": true, - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-06", + "release_date": "2025-05-20", + "last_updated": "2025-05-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.07, "output": 0.3 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.02, + "output": 0.04 + } }, - "Qwen/Qwen3-235B-A22B": { - "id": "Qwen/Qwen3-235B-A22B", - "name": "Qwen3 235B A22B", - "family": "qwen", - "attachment": false, + "google/gemini-3.1-flash-lite-preview": { + "id": "google/gemini-3.1-flash-lite-preview", + "name": "Gemini 3.1 Flash Lite Preview", + "family": "gemini-flash-lite", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-03", + "last_updated": "2026-03-03", + "modalities": { + "input": ["text", "image", "video", "pdf", "audio"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.25, + "output": 1.5, + "reasoning": 1.5, + "cache_read": 0.025, + "cache_write": 0.083, + "input_audio": 0.5, + "output_audio": 0.5 + } + }, + "google/gemma-3n-e4b-it:free": { + "id": "google/gemma-3n-e4b-it:free", + "name": "Gemma 3n 4B (free)", + "family": "gemma", + "attachment": true, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2024-06", + "release_date": "2025-05-20", + "last_updated": "2025-05-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 40960, "output": 40960 } + "limit": { + "context": 8192, + "output": 2000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Qwen/Qwen3-235B-A22B-Thinking-2507": { - "id": "Qwen/Qwen3-235B-A22B-Thinking-2507", - "name": "Qwen3 235B A22B Thinking 2507", - "family": "qwen", - "attachment": false, + "google/gemini-3.1-pro-preview": { + "id": "google/gemini-3.1-pro-preview", + "name": "Gemini 3.1 Pro Preview", + "family": "gemini-pro", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "interleaved": { + "field": "reasoning_details" + }, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.11, "output": 0.6 }, - "limit": { "context": 262144, "output": 262144 } + "knowledge": "2025-01", + "release_date": "2026-02-19", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12, + "reasoning": 12, + "tiers": [ + { + "input": 4, + "output": 18, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 4, + "output": 18, + "cache_read": 0.4 + } + } }, - "Qwen/Qwen3-Next-80B-A3B-Instruct": { - "id": "Qwen/Qwen3-Next-80B-A3B-Instruct", - "name": "Qwen3 Next 80B A3B Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, + "google/gemini-3-flash-preview": { + "id": "google/gemini-3-flash-preview", + "name": "Gemini 3 Flash Preview", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_details" + }, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.8 }, - "limit": { "context": 262144, "output": 262144 } + "knowledge": "2025-01", + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.05 + } }, - "Qwen/Qwen3.5-397B-A17B-TEE": { - "id": "Qwen/Qwen3.5-397B-A17B-TEE", - "name": "Qwen3.5 397B A17B TEE", - "family": "qwen", + "google/gemini-3-pro-preview": { + "id": "google/gemini-3-pro-preview", + "name": "Gemini 3 Pro Preview", + "family": "gemini-pro", "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "interleaved": { + "field": "reasoning_details" + }, "structured_output": true, "temperature": true, - "release_date": "2026-02-18", - "last_updated": "2026-02-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.39, "output": 2.34, "cache_read": 0.195 }, - "limit": { "context": 262144, "output": 65536 } + "knowledge": "2025-01", + "release_date": "2025-11-18", + "last_updated": "2025-11", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1050000, + "output": 66000 + }, + "cost": { + "input": 2, + "output": 12 + } }, - "Qwen/Qwen2.5-VL-32B-Instruct": { - "id": "Qwen/Qwen2.5-VL-32B-Instruct", - "name": "Qwen2.5 VL 32B Instruct", - "family": "qwen", - "attachment": false, + "google/gemma-3n-e2b-it:free": { + "id": "google/gemma-3n-e2b-it:free", + "name": "Gemma 3n 2B (free)", + "family": "gemma", + "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-06", + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.05, "output": 0.22 }, - "limit": { "context": 16384, "output": 16384 } + "limit": { + "context": 8192, + "output": 2000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8-TEE": { - "id": "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8-TEE", - "name": "Qwen3 Coder 480B A35B Instruct FP8 TEE", - "family": "qwen", + "google/gemma-2-9b-it": { + "id": "google/gemma-2-9b-it", + "name": "Gemma 2 9B", + "family": "gemma", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, + "tool_call": false, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-06", + "release_date": "2024-06-28", + "last_updated": "2024-06-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.22, "output": 0.95, "cache_read": 0.11 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 0.03, + "output": 0.09 + } }, - "Qwen/Qwen3-30B-A3B-Instruct-2507": { - "id": "Qwen/Qwen3-30B-A3B-Instruct-2507", - "name": "Qwen3 30B A3B Instruct 2507", - "family": "qwen", - "attachment": false, - "reasoning": false, + "google/gemma-4-31b-it": { + "id": "google/gemma-4-31b-it", + "name": "Gemma 4 31B", + "family": "gemma", + "attachment": true, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.08, "output": 0.33 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.14, + "output": 0.4 + } }, - "Qwen/Qwen3-235B-A22B-Instruct-2507-TEE": { - "id": "Qwen/Qwen3-235B-A22B-Instruct-2507-TEE", - "name": "Qwen3 235B A22B Instruct 2507 TEE", - "family": "qwen", - "attachment": false, - "reasoning": false, + "google/gemini-2.5-pro-preview-06-05": { + "id": "google/gemini-2.5-pro-preview-06-05", + "name": "Gemini 2.5 Pro Preview 06-05", + "family": "gemini-pro", + "attachment": true, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.08, "output": 0.55, "cache_read": 0.04 }, - "limit": { "context": 262144, "output": 65536 } + "knowledge": "2025-01", + "release_date": "2025-06-05", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.31 + } }, - "Qwen/Qwen3-VL-235B-A22B-Instruct": { - "id": "Qwen/Qwen3-VL-235B-A22B-Instruct", - "name": "Qwen3 VL 235B A22B Instruct", - "family": "qwen", - "attachment": false, + "google/gemma-3-12b-it": { + "id": "google/gemma-3-12b-it", + "name": "Gemma 3 12B", + "family": "gemma", + "attachment": true, "reasoning": false, - "tool_call": true, + "tool_call": false, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.03, + "output": 0.1 + } }, - "Qwen/Qwen2.5-72B-Instruct": { - "id": "Qwen/Qwen2.5-72B-Instruct", - "name": "Qwen2.5 72B Instruct", - "family": "qwen", - "attachment": false, + "google/gemma-3-27b-it:free": { + "id": "google/gemma-3-27b-it:free", + "name": "Gemma 3 27B (free)", + "family": "gemma", + "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-03-12", + "last_updated": "2025-03-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.13, "output": 0.52 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "chutesai/Mistral-Small-3.2-24B-Instruct-2506": { - "id": "chutesai/Mistral-Small-3.2-24B-Instruct-2506", - "name": "Mistral Small 3.2 24B Instruct 2506", - "family": "chutesai", - "attachment": false, - "reasoning": false, + "google/gemini-2.5-flash": { + "id": "google/gemini-2.5-flash", + "name": "Gemini 2.5 Flash", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.06, "output": 0.18 }, - "limit": { "context": 131072, "output": 131072 } + "knowledge": "2025-01", + "release_date": "2025-07-17", + "last_updated": "2025-07-17", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.0375 + } }, - "chutesai/Mistral-Small-3.1-24B-Instruct-2503": { - "id": "chutesai/Mistral-Small-3.1-24B-Instruct-2503", - "name": "Mistral Small 3.1 24B Instruct 2503", - "family": "chutesai", - "attachment": false, - "reasoning": false, - "tool_call": true, + "google/gemini-3.1-flash-image-preview": { + "id": "google/gemini-3.1-flash-image-preview", + "name": "Gemini 3.1 Flash Image Preview (Nano Banana 2)", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, + "tool_call": false, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.03, "output": 0.11, "cache_read": 0.015 }, - "limit": { "context": 131072, "output": 131072 } + "knowledge": "2025-01", + "release_date": "2026-02-26", + "last_updated": "2026-02-26", + "modalities": { + "input": ["text", "image"], + "output": ["text", "image"] + }, + "open_weights": false, + "limit": { + "context": 65536, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 3 + } }, - "moonshotai/Kimi-K2-Thinking-TEE": { - "id": "moonshotai/Kimi-K2-Thinking-TEE", - "name": "Kimi K2 Thinking TEE", - "family": "kimi-thinking", - "attachment": false, + "google/gemma-4-31b-it:free": { + "id": "google/gemma-4-31b-it:free", + "name": "Gemma 4 31B (free)", + "family": "gemma", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.4, "output": 1.75 }, - "limit": { "context": 262144, "output": 65535 } + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "moonshotai/Kimi-K2-Instruct-0905": { - "id": "moonshotai/Kimi-K2-Instruct-0905", - "name": "Kimi K2 Instruct 0905", - "family": "kimi", - "attachment": false, + "google/gemma-3-12b-it:free": { + "id": "google/gemma-3-12b-it:free", + "name": "Gemma 3 12B (free)", + "family": "gemma", + "attachment": true, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.39, "output": 1.9, "cache_read": 0.195 }, - "limit": { "context": 262144, "output": 262144 } - }, - "moonshotai/Kimi-K2.5-TEE": { - "id": "moonshotai/Kimi-K2.5-TEE", - "name": "Kimi K2.5 TEE", - "family": "kimi", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, + "tool_call": false, "temperature": true, "knowledge": "2024-10", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 3 }, - "limit": { "context": 262144, "output": 65535 } + "limit": { + "context": 32768, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "OpenGVLab/InternVL3-78B-TEE": { - "id": "OpenGVLab/InternVL3-78B-TEE", - "name": "InternVL3 78B TEE", - "family": "opengvlab", - "attachment": false, + "google/gemma-3-4b-it": { + "id": "google/gemma-3-4b-it", + "name": "Gemma 3 4B", + "family": "gemma", + "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": true, "temperature": true, - "release_date": "2025-01-06", - "last_updated": "2026-01-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.39 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 96000, + "output": 96000 + }, + "cost": { + "input": 0.01703, + "output": 0.06815 + } }, - "XiaomiMiMo/MiMo-V2-Flash": { - "id": "XiaomiMiMo/MiMo-V2-Flash", - "name": "MiMo V2 Flash", - "family": "mimo", - "attachment": false, + "google/gemini-2.5-flash-preview-09-2025": { + "id": "google/gemini-2.5-flash-preview-09-2025", + "name": "Gemini 2.5 Flash Preview 09-25", + "family": "gemini-flash", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": false, + "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.031 + } + }, + "google/gemma-3-27b-it": { + "id": "google/gemma-3-27b-it", + "name": "Gemma 3 27B", + "family": "gemma", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-03-12", + "last_updated": "2025-03-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.09, "output": 0.29 }, - "limit": { "context": 262144, "output": 32000 } + "limit": { + "context": 96000, + "output": 96000 + }, + "cost": { + "input": 0.04, + "output": 0.15 + } }, - "tngtech/TNG-R1T-Chimera-TEE": { - "id": "tngtech/TNG-R1T-Chimera-TEE", - "name": "TNG R1T Chimera TEE", - "family": "tngtech", - "attachment": false, + "google/gemma-4-26b-a4b-it": { + "id": "google/gemma-4-26b-a4b-it", + "name": "Gemma 4 26B A4B", + "family": "gemma", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2026-04-03", + "last_updated": "2026-04-03", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.25, "output": 0.85 }, - "limit": { "context": 163840, "output": 65536 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.13, + "output": 0.4 + } }, - "tngtech/TNG-R1T-Chimera-Turbo": { - "id": "tngtech/TNG-R1T-Chimera-Turbo", - "name": "TNG R1T Chimera Turbo", - "attachment": false, + "google/gemma-4-26b-a4b-it:free": { + "id": "google/gemma-4-26b-a4b-it:free", + "name": "Gemma 4 26B A4B (free)", + "family": "gemma", + "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2026-04-03", + "last_updated": "2026-04-03", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.22, "output": 0.6 }, - "limit": { "context": 163840, "output": 65536 } + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "tngtech/DeepSeek-R1T-Chimera": { - "id": "tngtech/DeepSeek-R1T-Chimera", - "name": "DeepSeek R1T Chimera", - "family": "tngtech", - "attachment": false, + "google/gemini-2.5-flash-lite": { + "id": "google/gemini-2.5-flash-lite", + "name": "Gemini 2.5 Flash Lite", + "family": "gemini-flash-lite", + "attachment": true, "reasoning": true, - "tool_call": false, - "interleaved": { "field": "reasoning_content" }, + "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 163840, "output": 163840 } + "knowledge": "2025-01", + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.025 + } }, - "tngtech/DeepSeek-TNG-R1T2-Chimera": { - "id": "tngtech/DeepSeek-TNG-R1T2-Chimera", - "name": "DeepSeek TNG R1T2 Chimera", - "family": "tngtech", - "attachment": false, + "moonshotai/kimi-k2.5": { + "id": "moonshotai/kimi-k2.5", + "name": "Kimi K2.5", + "family": "kimi", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "interleaved": { + "field": "reasoning_details" + }, "structured_output": true, "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.25, "output": 0.85 }, - "limit": { "context": 163840, "output": 163840 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 3, + "cache_read": 0.1 + } }, - "mistralai/Devstral-2-123B-Instruct-2512-TEE": { - "id": "mistralai/Devstral-2-123B-Instruct-2512-TEE", - "name": "Devstral 2 123B Instruct 2512 TEE", + "moonshotai/kimi-k2-0905": { + "id": "moonshotai/kimi-k2-0905", + "name": "Kimi K2 Instruct 0905", + "family": "kimi", "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2026-01-10", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.05, "output": 0.22 }, - "limit": { "context": 262144, "output": 65536 } - } - } - }, - "lmstudio": { - "id": "lmstudio", - "env": ["LMSTUDIO_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "http://127.0.0.1:1234/v1", - "name": "LMStudio", - "doc": "https://lmstudio.ai/models", - "models": { - "openai/gpt-oss-20b": { - "id": "openai/gpt-oss-20b", - "name": "GPT OSS 20B", - "family": "gpt-oss", - "attachment": false, + "limit": { + "context": 262144, + "output": 16384 + }, + "cost": { + "input": 0.6, + "output": 2.5 + } + }, + "moonshotai/kimi-k2.6": { + "id": "moonshotai/kimi-k2.6", + "name": "Kimi K2.6", + "family": "kimi", + "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_details" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-20", + "last_updated": "2026-04-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.95, + "output": 4, + "cache_read": 0.16 + } }, - "qwen/qwen3-coder-30b": { - "id": "qwen/qwen3-coder-30b", - "name": "Qwen3 Coder 30B", - "family": "qwen", + "moonshotai/kimi-k2-0905:exacto": { + "id": "moonshotai/kimi-k2-0905:exacto", + "name": "Kimi K2 Instruct 0905 (exacto)", + "family": "kimi", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 262144, + "output": 16384 + }, + "cost": { + "input": 0.6, + "output": 2.5 + } }, - "qwen/qwen3-30b-a3b-2507": { - "id": "qwen/qwen3-30b-a3b-2507", - "name": "Qwen3 30B A3B 2507", - "family": "qwen", + "moonshotai/kimi-k2": { + "id": "moonshotai/kimi-k2", + "name": "Kimi K2", + "family": "kimi", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-30", - "last_updated": "2025-07-30", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-07-11", + "last_updated": "2025-07-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 16384 } - } - } - }, - "kimi-for-coding": { - "id": "kimi-for-coding", - "env": ["KIMI_API_KEY"], - "npm": "@ai-sdk/anthropic", - "api": "https://api.kimi.com/coding/v1", - "name": "Kimi For Coding", - "doc": "https://www.kimi.com/coding/docs/en/third-party-agents.html", - "models": { - "kimi-k2-thinking": { - "id": "kimi-k2-thinking", + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.55, + "output": 2.2 + } + }, + "moonshotai/kimi-k2-thinking": { + "id": "moonshotai/kimi-k2-thinking", "name": "Kimi K2 Thinking", "family": "kimi-thinking", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_details" + }, "structured_output": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-11", - "last_updated": "2025-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-08", + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 262144, "output": 32768 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 2.5, + "cache_read": 0.15 + } }, - "k2p5": { - "id": "k2p5", - "name": "Kimi K2.5", - "family": "kimi-thinking", - "attachment": false, + "anthropic/claude-opus-4.1": { + "id": "anthropic/claude-opus-4.1", + "name": "Claude Opus 4.1", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 262144, "output": 32768 } - } - } - }, - "alibaba-cn": { - "id": "alibaba-cn", - "env": ["DASHSCOPE_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://dashscope.aliyuncs.com/compatible-mode/v1", - "name": "Alibaba (China)", - "doc": "https://www.alibabacloud.com/help/en/model-studio/models", - "models": { - "qwen-math-plus": { - "id": "qwen-math-plus", - "name": "Qwen Math Plus", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-08-16", - "last_updated": "2024-09-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-03-31", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.574, "output": 1.721 }, - "limit": { "context": 4096, "output": 3072 } - }, - "qwen2-5-72b-instruct": { - "id": "qwen2-5-72b-instruct", - "name": "Qwen2.5 72B Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-09", - "last_updated": "2024-09", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.574, "output": 1.721 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "qwen3-coder-30b-a3b-instruct": { - "id": "qwen3-coder-30b-a3b-instruct", - "name": "Qwen3-Coder 30B-A3B Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, + "anthropic/claude-3.7-sonnet": { + "id": "anthropic/claude-3.7-sonnet", + "name": "Claude Sonnet 3.7", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.216, "output": 0.861 }, - "limit": { "context": 262144, "output": 65536 } + "knowledge": "2024-01", + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "qwen3-8b": { - "id": "qwen3-8b", - "name": "Qwen3 8B", - "family": "qwen", - "attachment": false, + "anthropic/claude-opus-4.6": { + "id": "anthropic/claude-opus-4.6", + "name": "Claude Opus 4.6", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.072, "output": 0.287, "reasoning": 0.717 }, - "limit": { "context": 131072, "output": 8192 } - }, - "qwen-mt-plus": { - "id": "qwen-mt-plus", - "name": "Qwen-MT Plus", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-01", - "last_updated": "2025-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.259, "output": 0.775 }, - "limit": { "context": 16384, "output": 8192 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25, + "tiers": [ + { + "input": 10, + "output": 37.5, + "cache_read": 1, + "cache_write": 12.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 10, + "output": 37.5, + "cache_read": 1, + "cache_write": 12.5 + } + } }, - "qwen3.5-plus": { - "id": "qwen3.5-plus", - "name": "Qwen3.5 Plus", - "family": "qwen", - "attachment": false, + "anthropic/claude-opus-4.7": { + "id": "anthropic/claude-opus-4.7", + "name": "Claude Opus 4.7", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-02-16", - "last_updated": "2026-02-16", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.573, "output": 3.44, "reasoning": 3.44 }, - "limit": { "context": 1000000, "output": 65536 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25, + "tiers": [ + { + "input": 10, + "output": 37.5, + "cache_read": 1, + "cache_write": 12.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 10, + "output": 37.5, + "cache_read": 1, + "cache_write": 12.5 + } + } }, - "deepseek-v3-2-exp": { - "id": "deepseek-v3-2-exp", - "name": "DeepSeek V3.2 Exp", - "family": "deepseek", - "attachment": false, - "reasoning": false, + "anthropic/claude-sonnet-4": { + "id": "anthropic/claude-sonnet-4", + "name": "Claude Sonnet 4", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.287, "output": 0.431 }, - "limit": { "context": 131072, "output": 65536 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75, + "tiers": [ + { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5 + } + } }, - "deepseek-r1-distill-llama-70b": { - "id": "deepseek-r1-distill-llama-70b", - "name": "DeepSeek R1 Distill Llama 70B", - "family": "deepseek-thinking", - "attachment": false, + "anthropic/claude-sonnet-4.5": { + "id": "anthropic/claude-sonnet-4.5", + "name": "Claude Sonnet 4.5", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.287, "output": 0.861 }, - "limit": { "context": 32768, "output": 16384 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75, + "tiers": [ + { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5 + } + } }, - "qwen2-5-omni-7b": { - "id": "qwen2-5-omni-7b", - "name": "Qwen2.5-Omni 7B", - "family": "qwen", - "attachment": false, - "reasoning": false, + "anthropic/claude-opus-4.5": { + "id": "anthropic/claude-opus-4.5", + "name": "Claude Opus 4.5", + "family": "claude-opus", + "attachment": true, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-12", - "last_updated": "2024-12", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text", "audio"] }, - "open_weights": true, - "cost": { "input": 0.087, "output": 0.345, "input_audio": 5.448 }, - "limit": { "context": 32768, "output": 2048 } - }, - "qwen-plus-character": { - "id": "qwen-plus-character", - "name": "Qwen Plus Character", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-01", - "last_updated": "2024-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-05-30", + "release_date": "2025-11-24", + "last_updated": "2025-11-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.115, "output": 0.287 }, - "limit": { "context": 32768, "output": 4096 } + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "qwen-turbo": { - "id": "qwen-turbo", - "name": "Qwen Turbo", - "family": "qwen", - "attachment": false, + "anthropic/claude-haiku-4.5": { + "id": "anthropic/claude-haiku-4.5", + "name": "Claude Haiku 4.5", + "family": "claude-haiku", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-11-01", - "last_updated": "2025-07-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.044, "output": 0.087, "reasoning": 0.431 }, - "limit": { "context": 1000000, "output": 16384 } - }, - "qwen-vl-max": { - "id": "qwen-vl-max", - "name": "Qwen-VL Max", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-04-08", - "last_updated": "2025-08-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.23, "output": 0.574 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } }, - "qwen-doc-turbo": { - "id": "qwen-doc-turbo", - "name": "Qwen Doc Turbo", - "family": "qwen", - "attachment": false, - "reasoning": false, + "anthropic/claude-sonnet-4.6": { + "id": "anthropic/claude-sonnet-4.6", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-01", - "last_updated": "2024-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-02-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.087, "output": 0.144 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75, + "tiers": [ + { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5 + } + } }, - "qwq-32b": { - "id": "qwq-32b", - "name": "QwQ 32B", - "family": "qwen", + "deepseek/deepseek-v4-flash": { + "id": "deepseek/deepseek-v4-flash", + "name": "DeepSeek V4 Flash", + "family": "deepseek-flash", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-12", - "last_updated": "2024-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.287, "output": 0.861 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 1048576, + "output": 393216 + }, + "cost": { + "input": 0.14, + "output": 0.28, + "cache_read": 0.028 + } }, - "kimi-k2-thinking": { - "id": "kimi-k2-thinking", - "name": "Moonshot Kimi K2 Thinking", - "family": "kimi", + "deepseek/deepseek-v4-pro": { + "id": "deepseek/deepseek-v4-pro", + "name": "DeepSeek V4 Pro", + "family": "deepseek-thinking", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, "temperature": true, - "release_date": "2025-11-06", - "last_updated": "2025-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.574, "output": 2.294 }, - "limit": { "context": 262144, "output": 16384 } + "limit": { + "context": 1048576, + "output": 393216 + }, + "cost": { + "input": 1.74, + "output": 3.48, + "cache_read": 0.145 + } }, - "qwen-omni-turbo-realtime": { - "id": "qwen-omni-turbo-realtime", - "name": "Qwen-Omni Turbo Realtime", - "family": "qwen", - "attachment": false, - "reasoning": false, + "x-ai/grok-4.3": { + "id": "x-ai/grok-4.3", + "name": "Grok 4.3", + "family": "grok", + "attachment": true, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-05-08", - "last_updated": "2025-05-08", - "modalities": { "input": ["text", "image", "audio"], "output": ["text", "audio"] }, + "release_date": "2026-05-01", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.23, "output": 0.918, "input_audio": 3.584, "output_audio": 7.168 }, - "limit": { "context": 32768, "output": 2048 } + "limit": { + "context": 1000000, + "output": 1000000 + }, + "cost": { + "input": 1.25, + "output": 2.5, + "cache_read": 0.2, + "context_over_200k": { + "input": 2.5, + "output": 5, + "cache_read": 0.4 + }, + "tiers": [ + { + "input": 2.5, + "output": 5, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ] + } }, - "deepseek-r1": { - "id": "deepseek-r1", - "name": "DeepSeek R1", - "family": "deepseek-thinking", - "attachment": false, + "openai/gpt-5.5": { + "id": "openai/gpt-5.5", + "name": "GPT-5.5", + "family": "gpt", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-12-01", + "release_date": "2026-04-23", + "last_updated": "2026-04-23", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.574, "output": 2.294 }, - "limit": { "context": 131072, "output": 16384 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 30, + "cache_read": 0.5, + "context_over_200k": { + "input": 10, + "output": 45, + "cache_read": 1 + }, + "tiers": [ + { + "input": 10, + "output": 45, + "cache_read": 1, + "tier": { + "type": "context", + "size": 272000 + } + } + ] + } }, - "qwen-vl-plus": { - "id": "qwen-vl-plus", - "name": "Qwen-VL Plus", - "family": "qwen", - "attachment": false, - "reasoning": false, + "openai/gpt-5.4": { + "id": "openai/gpt-5.4", + "name": "GPT-5.4", + "family": "gpt", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-01-25", - "last_updated": "2025-08-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.115, "output": 0.287 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 2.5, + "output": 15, + "cache_read": 0.25, + "context_over_200k": { + "input": 5, + "output": 22.5, + "cache_read": 0.5 + }, + "tiers": [ + { + "input": 5, + "output": 22.5, + "cache_read": 0.5, + "tier": { + "type": "context", + "size": 272000 + } + } + ] + } }, - "qwen-max": { - "id": "qwen-max", - "name": "Qwen Max", - "family": "qwen", - "attachment": false, - "reasoning": false, + "openai/gpt-5.5-pro": { + "id": "openai/gpt-5.5-pro", + "name": "GPT-5.5 Pro", + "family": "gpt-pro", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-04-03", - "last_updated": "2025-01-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-12-01", + "release_date": "2026-04-23", + "last_updated": "2026-04-23", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.345, "output": 1.377 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 30, + "output": 180, + "context_over_200k": { + "input": 60, + "output": 270 + }, + "tiers": [ + { + "input": 60, + "output": 270, + "tier": { + "type": "context", + "size": 272000 + } + } + ] + } }, - "qvq-max": { - "id": "qvq-max", - "name": "QVQ Max", - "family": "qvq", - "attachment": false, + "google/gemini-2.5-pro": { + "id": "google/gemini-2.5-pro", + "name": "Gemini 2.5 Pro", + "family": "gemini-pro", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-03-25", - "last_updated": "2025-03-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.147, "output": 4.588 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125, + "context_over_200k": { + "input": 2.5, + "output": 15, + "cache_read": 0.25 + }, + "tiers": [ + { + "input": 2.5, + "output": 15, + "cache_read": 0.25, + "tier": { + "type": "context", + "size": 200000 + } + } + ] + } }, - "qwen-long": { - "id": "qwen-long", - "name": "Qwen Long", - "family": "qwen", - "attachment": false, - "reasoning": false, + "anthropic/claude-opus-4": { + "id": "anthropic/claude-opus-4", + "name": "Claude Opus 4", + "family": "claude-opus", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-01-25", - "last_updated": "2025-01-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.072, "output": 0.287 }, - "limit": { "context": 10000000, "output": 8192 } + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "qwen-deep-research": { - "id": "qwen-deep-research", - "name": "Qwen Deep Research", - "family": "qwen", - "attachment": false, + "anthropic/claude-3.5-haiku": { + "id": "anthropic/claude-3.5-haiku", + "name": "Claude Haiku 3.5", + "family": "claude-haiku", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-01", - "last_updated": "2024-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-07-31", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 7.742, "output": 23.367 }, - "limit": { "context": 1000000, "output": 32768 } + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 0.8, + "output": 4, + "cache_read": 0.08, + "cache_write": 1 + } }, - "moonshot-kimi-k2-instruct": { - "id": "moonshot-kimi-k2-instruct", - "name": "Moonshot Kimi K2 Instruct", - "family": "kimi", + "xiaomi/mimo-v2.5-pro": { + "id": "xiaomi/mimo-v2.5-pro", + "name": "Xiaomi: MiMo-V2.5-Pro", + "family": "mimo", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": false, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.574, "output": 2.294 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 1, + "output": 3, + "cache_read": 0.2, + "context_over_200k": { + "input": 2, + "output": 6, + "cache_read": 0.4 + }, + "tiers": [ + { + "input": 2, + "output": 6, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 256000 + } + } + ] + } }, - "kimi-k2.5": { - "id": "kimi-k2.5", - "name": "Moonshot Kimi K2.5", - "family": "kimi", - "attachment": false, + "xiaomi/mimo-v2-omni": { + "id": "xiaomi/mimo-v2-omni", + "name": "Xiaomi: MiMo-V2-Omni", + "family": "mimo", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": false, + "interleaved": { + "field": "reasoning_details" + }, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.574, "output": 2.411 }, - "limit": { "context": 262144, "output": 32768 } + "knowledge": "2024-12", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0.4, + "output": 2, + "cache_read": 0.08 + } }, - "qwen2-5-coder-32b-instruct": { - "id": "qwen2-5-coder-32b-instruct", - "name": "Qwen2.5-Coder 32B Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, + "xiaomi/mimo-v2.5": { + "id": "xiaomi/mimo-v2.5", + "name": "Xiaomi: MiMo-V2.5", + "family": "mimo", + "attachment": true, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_details" + }, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-11", - "last_updated": "2024-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.287, "output": 0.861 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 0.4, + "output": 2, + "cache_read": 0.08, + "context_over_200k": { + "input": 0.8, + "output": 4, + "cache_read": 0.16 + }, + "tiers": [ + { + "input": 0.8, + "output": 4, + "cache_read": 0.16, + "tier": { + "type": "context", + "size": 256000 + } + } + ] + } }, - "deepseek-v3": { - "id": "deepseek-v3", - "name": "DeepSeek V3", - "family": "deepseek", + "xiaomi/mimo-v2-pro": { + "id": "xiaomi/mimo-v2-pro", + "name": "Xiaomi: MiMo-V2-Pro", + "family": "mimo", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_details" + }, "temperature": true, - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.287, "output": 1.147 }, - "limit": { "context": 65536, "output": 8192 } + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 1, + "output": 3, + "cache_read": 0.2, + "context_over_200k": { + "input": 2, + "output": 6, + "cache_read": 0.4 + }, + "tiers": [ + { + "input": 2, + "output": 6, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 256000 + } + } + ] + } }, - "qwq-plus": { - "id": "qwq-plus", - "name": "QwQ Plus", - "family": "qwen", + "xiaomi/mimo-v2-flash": { + "id": "xiaomi/mimo-v2-flash", + "name": "Xiaomi: MiMo-V2-Flash", + "family": "mimo", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_details" + }, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-03-05", - "last_updated": "2025-03-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.23, "output": 0.574 }, - "limit": { "context": 131072, "output": 8192 } - }, - "qwen3-omni-flash": { - "id": "qwen3-omni-flash", - "name": "Qwen3-Omni Flash", - "family": "qwen", + "knowledge": "2024-12-01", + "release_date": "2025-12-16", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.3, + "cache_read": 0.01 + } + } + } + }, + "fireworks-ai": { + "id": "fireworks-ai", + "env": ["FIREWORKS_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.fireworks.ai/inference/v1/", + "name": "Fireworks AI", + "doc": "https://fireworks.ai/docs/", + "models": { + "accounts/fireworks/models/glm-5p1": { + "id": "accounts/fireworks/models/glm-5p1", + "name": "GLM 5.1", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text", "audio"] }, - "open_weights": false, - "cost": { "input": 0.058, "output": 0.23, "input_audio": 3.584, "output_audio": 7.168 }, - "limit": { "context": 65536, "output": 16384 } + "release_date": "2026-04-01", + "last_updated": "2026-04-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202800, + "output": 131072 + }, + "cost": { + "input": 1.4, + "output": 4.4, + "cache_read": 0.26 + } }, - "qwen2-5-coder-7b-instruct": { - "id": "qwen2-5-coder-7b-instruct", - "name": "Qwen2.5-Coder 7B Instruct", - "family": "qwen", + "accounts/fireworks/models/deepseek-v3p2": { + "id": "accounts/fireworks/models/deepseek-v3p2", + "name": "DeepSeek V3.2", + "family": "deepseek", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-11", - "last_updated": "2024-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-09", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.144, "output": 0.287 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 160000, + "output": 160000 + }, + "cost": { + "input": 0.56, + "output": 1.68, + "cache_read": 0.28 + } }, - "deepseek-r1-distill-qwen-1-5b": { - "id": "deepseek-r1-distill-qwen-1-5b", - "name": "DeepSeek R1 Distill Qwen 1.5B", - "family": "qwen", + "accounts/fireworks/models/minimax-m2p5": { + "id": "accounts/fireworks/models/minimax-m2p5", + "name": "MiniMax-M2.5", + "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 32768, "output": 16384 } + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 196608, + "output": 196608 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.03 + } }, - "deepseek-r1-distill-qwen-14b": { - "id": "deepseek-r1-distill-qwen-14b", - "name": "DeepSeek R1 Distill Qwen 14B", - "family": "qwen", + "accounts/fireworks/models/glm-4p5-air": { + "id": "accounts/fireworks/models/glm-4p5-air", + "name": "GLM 4.5 Air", + "family": "glm-air", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.144, "output": 0.431 }, - "limit": { "context": 32768, "output": 16384 } + "knowledge": "2025-04", + "release_date": "2025-08-01", + "last_updated": "2025-08-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.22, + "output": 0.88 + } }, - "qwen3-14b": { - "id": "qwen3-14b", - "name": "Qwen3 14B", - "family": "qwen", + "accounts/fireworks/models/glm-5": { + "id": "accounts/fireworks/models/glm-5", + "name": "GLM 5", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.144, "output": 0.574, "reasoning": 1.434 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 202752, + "output": 131072 + }, + "cost": { + "input": 1, + "output": 3.2, + "cache_read": 0.5 + } }, - "qwen-plus": { - "id": "qwen-plus", - "name": "Qwen Plus", - "family": "qwen", + "accounts/fireworks/models/deepseek-v3p1": { + "id": "accounts/fireworks/models/deepseek-v3p1", + "name": "DeepSeek V3.1", + "family": "deepseek", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-01-25", - "last_updated": "2025-09-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.115, "output": 0.287, "reasoning": 1.147 }, - "limit": { "context": 1000000, "output": 32768 } + "knowledge": "2025-07", + "release_date": "2025-08-21", + "last_updated": "2025-08-21", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 163840, + "output": 163840 + }, + "cost": { + "input": 0.56, + "output": 1.68 + } }, - "deepseek-r1-distill-qwen-7b": { - "id": "deepseek-r1-distill-qwen-7b", - "name": "DeepSeek R1 Distill Qwen 7B", - "family": "qwen", + "accounts/fireworks/models/kimi-k2p6": { + "id": "accounts/fireworks/models/kimi-k2p6", + "name": "Kimi K2.6", + "family": "kimi-thinking", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.072, "output": 0.144 }, - "limit": { "context": 32768, "output": 16384 } + "release_date": "2026-04-17", + "last_updated": "2026-04-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.95, + "output": 4, + "cache_read": 0.16 + } }, - "qwen2-5-7b-instruct": { - "id": "qwen2-5-7b-instruct", - "name": "Qwen2.5 7B Instruct", - "family": "qwen", + "accounts/fireworks/models/kimi-k2-instruct": { + "id": "accounts/fireworks/models/kimi-k2-instruct", + "name": "Kimi K2 Instruct", + "family": "kimi", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-09", - "last_updated": "2024-09", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.072, "output": 0.144 }, - "limit": { "context": 131072, "output": 8192 } - }, - "qwen2-5-32b-instruct": { - "id": "qwen2-5-32b-instruct", - "name": "Qwen2.5 32B Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-09", - "last_updated": "2024-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-07-11", + "last_updated": "2025-07-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.287, "output": 0.861 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1, + "output": 3 + } }, - "qwen3-omni-flash-realtime": { - "id": "qwen3-omni-flash-realtime", - "name": "Qwen3-Omni Flash Realtime", + "accounts/fireworks/models/qwen3p6-plus": { + "id": "accounts/fireworks/models/qwen3p6-plus", + "name": "Qwen 3.6 Plus", "family": "qwen", - "attachment": false, - "reasoning": false, + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text", "image", "audio"], "output": ["text", "audio"] }, + "release_date": "2026-04-04", + "last_updated": "2026-04-04", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.23, "output": 0.918, "input_audio": 3.584, "output_audio": 7.168 }, - "limit": { "context": 65536, "output": 16384 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.1 + } }, - "qwen-math-turbo": { - "id": "qwen-math-turbo", - "name": "Qwen Math Turbo", - "family": "qwen", + "accounts/fireworks/models/minimax-m2p1": { + "id": "accounts/fireworks/models/minimax-m2p1", + "name": "MiniMax-M2.1", + "family": "minimax", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-09-19", - "last_updated": "2024-09-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.287, "output": 0.861 }, - "limit": { "context": 4096, "output": 3072 } + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 200000, + "output": 200000 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.03 + } }, - "tongyi-intent-detect-v3": { - "id": "tongyi-intent-detect-v3", - "name": "Tongyi Intent Detect V3", - "family": "yi", + "accounts/fireworks/models/minimax-m2p7": { + "id": "accounts/fireworks/models/minimax-m2p7", + "name": "MiniMax-M2.7", + "family": "minimax", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-01", - "last_updated": "2024-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.058, "output": 0.144 }, - "limit": { "context": 8192, "output": 1024 } + "release_date": "2026-04-12", + "last_updated": "2026-04-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 196608, + "output": 196608 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.03 + } }, - "qwen3-coder-480b-a35b-instruct": { - "id": "qwen3-coder-480b-a35b-instruct", - "name": "Qwen3-Coder 480B-A35B Instruct", - "family": "qwen", + "accounts/fireworks/models/glm-4p7": { + "id": "accounts/fireworks/models/glm-4p7", + "name": "GLM 4.7", + "family": "glm", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.861, "output": 3.441 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 198000, + "output": 198000 + }, + "cost": { + "input": 0.6, + "output": 2.2, + "cache_read": 0.3 + } }, - "qwen3-next-80b-a3b-thinking": { - "id": "qwen3-next-80b-a3b-thinking", - "name": "Qwen3-Next 80B-A3B (Thinking)", - "family": "qwen", + "accounts/fireworks/models/glm-4p5": { + "id": "accounts/fireworks/models/glm-4p5", + "name": "GLM 4.5", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, "knowledge": "2025-04", - "release_date": "2025-09", - "last_updated": "2025-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-07-29", + "last_updated": "2025-07-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.144, "output": 1.434 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.55, + "output": 2.19 + } }, - "MiniMax-M2.5": { - "id": "MiniMax-M2.5", - "name": "MiniMax-M2.5", - "family": "minimax", + "accounts/fireworks/models/kimi-k2p5": { + "id": "accounts/fireworks/models/kimi-k2p5", + "name": "Kimi K2.5", + "family": "kimi-thinking", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.6, + "output": 3, + "cache_read": 0.1 + } }, - "qwen3-vl-30b-a3b": { - "id": "qwen3-vl-30b-a3b", - "name": "Qwen3-VL 30B-A3B", - "family": "qwen", + "accounts/fireworks/models/gpt-oss-20b": { + "id": "accounts/fireworks/models/gpt-oss-20b", + "name": "GPT OSS 20B", + "family": "gpt-oss", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.108, "output": 0.431, "reasoning": 1.076 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.05, + "output": 0.2 + } }, - "qwen3-next-80b-a3b-instruct": { - "id": "qwen3-next-80b-a3b-instruct", - "name": "Qwen3-Next 80B-A3B Instruct", - "family": "qwen", + "accounts/fireworks/models/gpt-oss-120b": { + "id": "accounts/fireworks/models/gpt-oss-120b", + "name": "GPT OSS 120B", + "family": "gpt-oss", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09", - "last_updated": "2025-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.144, "output": 0.574 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "deepseek-r1-distill-qwen-32b": { - "id": "deepseek-r1-distill-qwen-32b", - "name": "DeepSeek R1 Distill Qwen 32B", - "family": "qwen", + "accounts/fireworks/models/kimi-k2-thinking": { + "id": "accounts/fireworks/models/kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "family": "kimi-thinking", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.287, "output": 0.861 }, - "limit": { "context": 32768, "output": 16384 } + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.6, + "output": 2.5, + "cache_read": 0.3 + } }, - "qwen-mt-turbo": { - "id": "qwen-mt-turbo", - "name": "Qwen-MT Turbo", - "family": "qwen", + "accounts/fireworks/routers/kimi-k2p5-turbo": { + "id": "accounts/fireworks/routers/kimi-k2p5-turbo", + "name": "Kimi K2.5 Turbo", + "family": "kimi-thinking", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-01", - "last_updated": "2025-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.101, "output": 0.28 }, - "limit": { "context": 16384, "output": 8192 } + "knowledge": "2025-01", + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "qwen3-vl-plus": { - "id": "qwen3-vl-plus", - "name": "Qwen3-VL Plus", - "family": "qwen", + "accounts/fireworks/models/deepseek-v4-pro": { + "id": "accounts/fireworks/models/deepseek-v4-pro", + "name": "DeepSeek V4 Pro", + "family": "deepseek-thinking", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-23", - "last_updated": "2025-09-23", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.143353, "output": 1.433525, "reasoning": 4.300576 }, - "limit": { "context": 262144, "output": 32768 } - }, - "deepseek-v3-1": { - "id": "deepseek-v3-1", - "name": "DeepSeek V3.1", - "family": "deepseek", + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 384000 + }, + "cost": { + "input": 1.74, + "output": 3.48, + "cache_read": 0.15 + } + } + } + }, + "kimi-for-coding": { + "id": "kimi-for-coding", + "env": ["KIMI_API_KEY"], + "npm": "@ai-sdk/anthropic", + "api": "https://api.kimi.com/coding/v1", + "name": "Kimi For Coding", + "doc": "https://www.kimi.com/coding/docs/en/third-party-agents.html", + "models": { + "k2p6": { + "id": "k2p6", + "name": "Kimi K2.6", + "family": "kimi-thinking", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.574, "output": 1.721 }, - "limit": { "context": 131072, "output": 65536 } + "knowledge": "2025-01", + "release_date": "2026-04", + "last_updated": "2026-04", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "qwen3-235b-a22b": { - "id": "qwen3-235b-a22b", - "name": "Qwen3 235B-A22B", - "family": "qwen", + "k2p5": { + "id": "k2p5", + "name": "Kimi K2.5", + "family": "kimi-thinking", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.287, "output": 1.147, "reasoning": 2.868 }, - "limit": { "context": 131072, "output": 16384 } + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "qwen2-5-vl-7b-instruct": { - "id": "qwen2-5-vl-7b-instruct", - "name": "Qwen2.5-VL 7B Instruct", - "family": "qwen", + "kimi-k2-thinking": { + "id": "kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "family": "kimi-thinking", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-09", - "last_updated": "2024-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-07", + "release_date": "2025-11", + "last_updated": "2025-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.287, "output": 0.717 }, - "limit": { "context": 131072, "output": 8192 } - }, - "glm-5": { - "id": "glm-5", - "name": "GLM-5", + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + } + } + }, + "moark": { + "id": "moark", + "env": ["MOARK_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://moark.com/v1", + "name": "Moark", + "doc": "https://moark.com/docs/openapi/v1#tag/%E6%96%87%E6%9C%AC%E7%94%9F%E6%88%90", + "models": { + "GLM-4.7": { + "id": "GLM-4.7", + "name": "GLM-4.7", "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.86, "output": 3.15 }, - "limit": { "context": 202752, "output": 16384 } - }, - "qwen-vl-ocr": { - "id": "qwen-vl-ocr", - "name": "Qwen-VL OCR", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": false, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-10-28", - "last_updated": "2025-04-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.717, "output": 0.717 }, - "limit": { "context": 34096, "output": 4096 } + "knowledge": "2025-04", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 3.5, + "output": 14 + } }, - "qwen-omni-turbo": { - "id": "qwen-omni-turbo", - "name": "Qwen-Omni Turbo", - "family": "qwen", + "MiniMax-M2.1": { + "id": "MiniMax-M2.1", + "name": "MiniMax-M2.1", + "family": "minimax", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-01-19", - "last_updated": "2025-03-26", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text", "audio"] }, - "open_weights": false, - "cost": { "input": 0.058, "output": 0.23, "input_audio": 3.584, "output_audio": 7.168 }, - "limit": { "context": 32768, "output": 2048 } - }, - "qwen3.5-397b-a17b": { - "id": "qwen3.5-397b-a17b", - "name": "Qwen3.5 397B-A17B", - "family": "qwen", + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 2.1, + "output": 8.4 + } + } + } + }, + "opencode-go": { + "id": "opencode-go", + "env": ["OPENCODE_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://opencode.ai/zen/go/v1", + "name": "OpenCode Go", + "doc": "https://opencode.ai/docs/zen", + "models": { + "minimax-m2.7": { + "id": "minimax-m2.7", + "name": "MiniMax M2.7", + "family": "minimax-m2.7", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-02-16", - "last_updated": "2026-02-16", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.43, "output": 2.58, "reasoning": 2.58 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 204800, + "output": 131072 + }, + "provider": { + "npm": "@ai-sdk/anthropic" + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.06 + } }, - "qwen-flash": { - "id": "qwen-flash", - "name": "Qwen Flash", - "family": "qwen", - "attachment": false, + "kimi-k2.5": { + "id": "kimi-k2.5", + "name": "Kimi K2.5", + "family": "kimi-k2.5", + "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.022, "output": 0.216 }, - "limit": { "context": 1000000, "output": 32768 } + "knowledge": "2024-10", + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.6, + "output": 3, + "cache_read": 0.1 + } }, - "qwen2-5-math-7b-instruct": { - "id": "qwen2-5-math-7b-instruct", - "name": "Qwen2.5-Math 7B Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, + "mimo-v2.5-pro": { + "id": "mimo-v2.5-pro", + "name": "MiMo V2.5 Pro", + "family": "mimo-v2.5-pro", + "attachment": true, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-09", - "last_updated": "2024-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.144, "output": 0.287 }, - "limit": { "context": 4096, "output": 3072 } + "limit": { + "context": 1048576, + "output": 128000 + }, + "cost": { + "input": 1, + "output": 3, + "cache_read": 0.2, + "tiers": [ + { + "input": 2, + "output": 6, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 256000 + } + } + ], + "context_over_200k": { + "input": 2, + "output": 6, + "cache_read": 0.4 + } + } }, - "deepseek-r1-0528": { - "id": "deepseek-r1-0528", - "name": "DeepSeek R1 0528", - "family": "deepseek-thinking", + "glm-5": { + "id": "glm-5", + "name": "GLM-5", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-05-28", - "last_updated": "2025-05-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.574, "output": 2.294 }, - "limit": { "context": 131072, "output": 16384 } + "knowledge": "2025-04", + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202752, + "output": 32768 + }, + "cost": { + "input": 1, + "output": 3.2, + "cache_read": 0.2 + } }, - "qwen3-max": { - "id": "qwen3-max", - "name": "Qwen3 Max", - "family": "qwen", - "attachment": false, - "reasoning": false, + "mimo-v2-omni": { + "id": "mimo-v2-omni", + "name": "MiMo V2 Omni", + "family": "mimo-v2-omni", + "attachment": true, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-23", - "last_updated": "2025-09-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.861, "output": 3.441 }, - "limit": { "context": 262144, "output": 65536 } + "knowledge": "2024-12", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text", "image", "audio", "pdf"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 128000 + }, + "status": "deprecated", + "cost": { + "input": 0.4, + "output": 2, + "cache_read": 0.08 + } }, - "qwen2-5-vl-72b-instruct": { - "id": "qwen2-5-vl-72b-instruct", - "name": "Qwen2.5-VL 72B Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, + "mimo-v2.5": { + "id": "mimo-v2.5", + "name": "MiMo V2.5", + "family": "mimo-v2.5", + "attachment": true, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-09", - "last_updated": "2024-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 2.294, "output": 6.881 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 0.4, + "output": 2, + "cache_read": 0.08, + "tiers": [ + { + "input": 0.8, + "output": 4, + "cache_read": 0.16, + "tier": { + "type": "context", + "size": 256000 + } + } + ], + "context_over_200k": { + "input": 0.8, + "output": 4, + "cache_read": 0.16 + } + } }, - "qwen3-32b": { - "id": "qwen3-32b", - "name": "Qwen3 32B", - "family": "qwen", - "attachment": false, + "qwen3.6-plus": { + "id": "qwen3.6-plus", + "name": "Qwen3.6 Plus", + "family": "qwen3.6", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.287, "output": 1.147, "reasoning": 2.868 }, - "limit": { "context": 131072, "output": 16384 } - }, - "qwen2-5-math-72b-instruct": { - "id": "qwen2-5-math-72b-instruct", - "name": "Qwen2.5-Math 72B Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-09", - "last_updated": "2024-09", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.574, "output": 1.721 }, - "limit": { "context": 4096, "output": 3072 } - }, - "deepseek-r1-distill-llama-8b": { - "id": "deepseek-r1-distill-llama-8b", - "name": "DeepSeek R1 Distill Llama 8B", - "family": "deepseek-thinking", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 32768, "output": 16384 } - }, - "qwen3-asr-flash": { - "id": "qwen3-asr-flash", - "name": "Qwen3-ASR Flash", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "knowledge": "2024-04", - "release_date": "2025-09-08", - "last_updated": "2025-09-08", - "modalities": { "input": ["audio"], "output": ["text"] }, + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.032, "output": 0.032 }, - "limit": { "context": 53248, "output": 4096 } + "limit": { + "context": 262144, + "output": 65536 + }, + "provider": { + "npm": "@ai-sdk/anthropic" + }, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.05, + "cache_write": 0.625 + } }, - "qwen3-coder-flash": { - "id": "qwen3-coder-flash", - "name": "Qwen3 Coder Flash", - "family": "qwen", + "glm-5.1": { + "id": "glm-5.1", + "name": "GLM-5.1", + "family": "glm", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, "knowledge": "2025-04", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.144, "output": 0.574 }, - "limit": { "context": 1000000, "output": 65536 } - }, - "qwen2-5-14b-instruct": { - "id": "qwen2-5-14b-instruct", - "name": "Qwen2.5 14B Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-09", - "last_updated": "2024-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-07", + "last_updated": "2026-04-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.144, "output": 0.431 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 202752, + "output": 32768 + }, + "cost": { + "input": 1.4, + "output": 4.4, + "cache_read": 0.26 + } }, - "qwen3-vl-235b-a22b": { - "id": "qwen3-vl-235b-a22b", - "name": "Qwen3-VL 235B-A22B", - "family": "qwen", + "deepseek-v4-flash": { + "id": "deepseek-v4-flash", + "name": "DeepSeek V4 Flash", + "family": "deepseek-flash", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.286705, "output": 1.14682, "reasoning": 2.867051 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 1000000, + "output": 384000 + }, + "cost": { + "input": 0.14, + "output": 0.28, + "cache_read": 0.0028 + } }, - "qwen3.5-flash": { - "id": "qwen3.5-flash", - "name": "Qwen3.5 Flash", - "family": "qwen", + "kimi-k2.6": { + "id": "kimi-k2.6", + "name": "Kimi K2.6", + "family": "kimi-k2.6", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-02-23", - "last_updated": "2026-02-23", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.172, "output": 1.72, "reasoning": 1.72 }, - "limit": { "context": 1000000, "output": 65536 } + "knowledge": "2024-10", + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.95, + "output": 4, + "cache_read": 0.16 + } }, - "qwen3-coder-plus": { - "id": "qwen3-coder-plus", - "name": "Qwen3 Coder Plus", - "family": "qwen", + "deepseek-v4-pro": { + "id": "deepseek-v4-pro", + "name": "DeepSeek V4 Pro", + "family": "deepseek-thinking", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1, "output": 5 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 1000000, + "output": 384000 + }, + "cost": { + "input": 1.74, + "output": 3.48, + "cache_read": 0.0145 + } }, - "MiniMax/MiniMax-M2.5": { - "id": "MiniMax/MiniMax-M2.5", + "minimax-m2.5": { + "id": "minimax-m2.5", "name": "MiniMax M2.5", - "family": "minimax", + "family": "minimax-m2.5", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, + "knowledge": "2025-01", "release_date": "2026-02-12", "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.301, "output": 1.205 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 204800, + "output": 65536 + }, + "provider": { + "npm": "@ai-sdk/anthropic" + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.03 + } }, - "kimi/kimi-k2.5": { - "id": "kimi/kimi-k2.5", - "name": "kimi/kimi-k2.5", - "family": "kimi", - "attachment": false, + "mimo-v2-pro": { + "id": "mimo-v2-pro", + "name": "MiMo V2 Pro", + "family": "mimo-v2-pro", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, - "temperature": false, - "knowledge": "2025-01", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 3, "cache_read": 0.1 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 1048576, + "output": 128000 + }, + "status": "deprecated", + "cost": { + "input": 1, + "output": 3, + "cache_read": 0.2, + "tiers": [ + { + "input": 2, + "output": 6, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 256000 + } + } + ], + "context_over_200k": { + "input": 2, + "output": 6, + "cache_read": 0.4 + } + } }, - "siliconflow/deepseek-v3.1-terminus": { - "id": "siliconflow/deepseek-v3.1-terminus", - "name": "siliconflow/deepseek-v3.1-terminus", - "family": "deepseek", - "attachment": false, + "qwen3.5-plus": { + "id": "qwen3.5-plus", + "name": "Qwen3.5 Plus", + "family": "qwen3.5", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-09-29", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.27, "output": 1 }, - "limit": { "context": 163840, "output": 65536 } - }, - "siliconflow/deepseek-v3-0324": { - "id": "siliconflow/deepseek-v3-0324", - "name": "siliconflow/deepseek-v3-0324", - "family": "deepseek", - "attachment": false, - "reasoning": false, - "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-12-26", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-02-16", + "last_updated": "2026-02-16", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 1 }, - "limit": { "context": 163840, "output": 163840 } - }, - "siliconflow/deepseek-r1-0528": { - "id": "siliconflow/deepseek-r1-0528", - "name": "siliconflow/deepseek-r1-0528", - "family": "deepseek-thinking", + "limit": { + "context": 262144, + "output": 65536 + }, + "provider": { + "npm": "@ai-sdk/anthropic" + }, + "cost": { + "input": 0.2, + "output": 1.2, + "cache_read": 0.02, + "cache_write": 0.25 + } + } + } + }, + "databricks": { + "id": "databricks", + "env": ["DATABRICKS_HOST", "DATABRICKS_TOKEN"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://${DATABRICKS_HOST}/ai-gateway/mlflow/v1", + "name": "Databricks", + "doc": "https://docs.databricks.com/aws/en/machine-learning/foundation-models/", + "models": { + "databricks-gpt-oss-120b": { + "id": "databricks-gpt-oss-120b", + "name": "GPT OSS 120B", + "family": "gpt-oss", "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-05-28", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.5, "output": 2.18 }, - "limit": { "context": 163840, "output": 32768 } + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.072, + "output": 0.28 + } }, - "siliconflow/deepseek-v3.2": { - "id": "siliconflow/deepseek-v3.2", - "name": "siliconflow/deepseek-v3.2", - "family": "deepseek", + "databricks-gpt-oss-20b": { + "id": "databricks-gpt-oss-20b", + "name": "GPT OSS 20B", + "family": "gpt-oss", "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-12-03", - "last_updated": "2025-12-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.27, "output": 0.42 }, - "limit": { "context": 163840, "output": 65536 } - } - } - }, - "requesty": { - "id": "requesty", - "env": ["REQUESTY_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://router.requesty.ai/v1", - "name": "Requesty", - "doc": "https://requesty.ai/solution/llm-routing/models", - "models": { - "openai/gpt-5.2-codex": { - "id": "openai/gpt-5.2-codex", - "name": "GPT-5.2-Codex", - "family": "gpt-codex", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2025-08-31", - "release_date": "2026-01-14", - "last_updated": "2026-01-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "output": 128000 } + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.05, + "output": 0.2 + } }, - "openai/gpt-5.1-codex-mini": { - "id": "openai/gpt-5.1-codex-mini", - "name": "GPT-5.1-Codex-Mini", - "family": "gpt-codex", + "databricks-claude-haiku-4-5": { + "id": "databricks-claude-haiku-4-5", + "name": "Claude Haiku 4.5 (latest)", + "family": "claude-haiku", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.025 }, - "limit": { "context": 400000, "output": 100000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } }, - "openai/gpt-5.4-pro": { - "id": "openai/gpt-5.4-pro", - "name": "GPT-5.4 Pro", - "family": "gpt-pro", + "databricks-claude-sonnet-4-6": { + "id": "databricks-claude-sonnet-4-6", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": false, - "temperature": false, + "temperature": true, "knowledge": "2025-08-31", - "release_date": "2026-03-05", - "last_updated": "2026-03-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2026-02-17", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 30, "output": 180, "cache_read": 30 }, - "limit": { "context": 1050000, "input": 922000, "output": 128000 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "openai/gpt-5-pro": { - "id": "openai/gpt-5-pro", - "name": "GPT-5 Pro", - "family": "gpt-pro", + "databricks-gemini-3-pro": { + "id": "databricks-gemini-3-pro", + "name": "Gemini 3 Pro Preview", + "family": "gemini-pro", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-10-06", - "last_updated": "2025-10-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-11-18", + "last_updated": "2025-11-18", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 120 }, - "limit": { "context": 400000, "output": 272000 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2, + "context_over_200k": { + "input": 4, + "output": 18, + "cache_read": 0.4 + }, + "tiers": [ + { + "input": 4, + "output": 18, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ] + } }, - "openai/gpt-5": { - "id": "openai/gpt-5", - "name": "GPT-5", - "family": "gpt", + "databricks-gemini-3-1-pro": { + "id": "databricks-gemini-3-1-pro", + "name": "Gemini 3.1 Pro Preview Custom Tools", + "family": "gemini-pro", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "audio", "image", "video"], "output": ["text", "audio", "image"] }, + "structured_output": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-02-19", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.13 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2, + "context_over_200k": { + "input": 4, + "output": 18, + "cache_read": 0.4 + }, + "tiers": [ + { + "input": 4, + "output": 18, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ] + } }, - "openai/gpt-5.3-codex": { - "id": "openai/gpt-5.3-codex", - "name": "GPT-5.3-Codex", - "family": "gpt-codex", + "databricks-gpt-5-4-mini": { + "id": "databricks-gpt-5-4-mini", + "name": "GPT-5.4 mini", + "family": "gpt-mini", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": false, "knowledge": "2025-08-31", - "release_date": "2026-02-24", - "last_updated": "2026-02-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "experimental": { + "modes": { + "fast": { + "cost": { + "input": 1.5, + "output": 9, + "cache_read": 0.15 + }, + "provider": { + "body": { + "service_tier": "priority" + } + } + } + } + }, + "cost": { + "input": 0.75, + "output": 4.5, + "cache_read": 0.075 + } }, - "openai/gpt-5-mini": { - "id": "openai/gpt-5-mini", - "name": "GPT-5 Mini", - "family": "gpt-mini", + "databricks-claude-opus-4-6": { + "id": "databricks-claude-opus-4-6", + "name": "Claude Opus 4.6", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2024-05-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.03 }, - "limit": { "context": 128000, "output": 32000 } - }, - "openai/gpt-4o-mini": { - "id": "openai/gpt-4o-mini", - "name": "GPT-4o Mini", - "family": "gpt-mini", - "attachment": true, - "reasoning": false, - "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-07-18", - "last_updated": "2024-07-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.6, "cache_read": 0.08 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "experimental": { + "modes": { + "fast": { + "cost": { + "input": 30, + "output": 150, + "cache_read": 3, + "cache_write": 37.5 + }, + "provider": { + "body": { + "speed": "fast" + }, + "headers": { + "anthropic-beta": "fast-mode-2026-02-01" + } + } + } + } + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "openai/gpt-5.1-codex-max": { - "id": "openai/gpt-5.1-codex-max", - "name": "GPT-5.1-Codex-Max", - "family": "gpt-codex", + "databricks-gemini-2-5-pro": { + "id": "databricks-gemini-2-5-pro", + "name": "Gemini 2.5 Pro", + "family": "gemini-pro", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.1, "output": 9, "cache_read": 0.11 }, - "limit": { "context": 400000, "output": 128000 } - }, - "openai/gpt-4.1": { - "id": "openai/gpt-4.1", - "name": "GPT-4.1", - "family": "gpt", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8, "cache_read": 0.5 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125, + "context_over_200k": { + "input": 2.5, + "output": 15, + "cache_read": 0.25 + }, + "tiers": [ + { + "input": 2.5, + "output": 15, + "cache_read": 0.25, + "tier": { + "type": "context", + "size": 200000 + } + } + ] + } }, - "openai/gpt-5.1-chat": { - "id": "openai/gpt-5.1-chat", - "name": "GPT-5.1 Chat", - "family": "gpt-codex", + "databricks-gpt-5-nano": { + "id": "databricks-gpt-5-nano", + "name": "GPT-5 Nano", + "family": "gpt-nano", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": true, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.05, + "output": 0.4, + "cache_read": 0.005 + } }, - "openai/gpt-5.4": { - "id": "openai/gpt-5.4", + "databricks-gpt-5-4": { + "id": "databricks-gpt-5-4", "name": "GPT-5.4", "family": "gpt", "attachment": true, @@ -19258,52 +28842,139 @@ "knowledge": "2025-08-31", "release_date": "2026-03-05", "last_updated": "2026-03-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "experimental": { + "modes": { + "fast": { + "cost": { + "input": 5, + "output": 30, + "cache_read": 0.5 + }, + "provider": { + "body": { + "service_tier": "priority" + } + } + } + } + }, "cost": { "input": 2.5, "output": 15, "cache_read": 0.25, - "context_over_200k": { "input": 5, "output": 22.5, "cache_read": 0.5 } - }, - "limit": { "context": 1050000, "input": 922000, "output": 128000 } + "context_over_200k": { + "input": 5, + "output": 22.5, + "cache_read": 0.5 + }, + "tiers": [ + { + "input": 5, + "output": 22.5, + "cache_read": 0.5, + "tier": { + "type": "context", + "size": 272000 + } + } + ] + } }, - "openai/gpt-5-chat": { - "id": "openai/gpt-5-chat", - "name": "GPT-5 Chat (latest)", - "family": "gpt-codex", + "databricks-gemini-3-1-flash-lite": { + "id": "databricks-gemini-3-1-flash-lite", + "name": "Gemini 3.1 Flash Lite Preview", + "family": "gemini-flash-lite", "attachment": true, "reasoning": true, - "tool_call": false, + "tool_call": true, "structured_output": true, "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-03-03", + "last_updated": "2026-03-03", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.25, + "output": 1.5, + "cache_read": 0.025, + "input_audio": 0.5 + } + }, + "databricks-gpt-5": { + "id": "databricks-gpt-5", + "name": "GPT-5", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, "knowledge": "2024-09-30", "release_date": "2025-08-07", "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "openai/gpt-5.2-chat": { - "id": "openai/gpt-5.2-chat", - "name": "GPT-5.2 Chat", - "family": "gpt-codex", + "databricks-claude-opus-4-1": { + "id": "databricks-claude-opus-4-1", + "name": "Claude Opus 4.1 (latest)", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "openai/gpt-5.2": { - "id": "openai/gpt-5.2", + "databricks-gpt-5-2": { + "id": "databricks-gpt-5-2", "name": "GPT-5.2", "family": "gpt", "attachment": true, @@ -19314,240 +28985,326 @@ "knowledge": "2025-08-31", "release_date": "2025-12-11", "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "openai/gpt-5.1": { - "id": "openai/gpt-5.1", - "name": "GPT-5.1", + "databricks-gpt-5-5": { + "id": "databricks-gpt-5-5", + "name": "GPT-5.5", "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": true, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-12-01", + "release_date": "2026-04-23", + "last_updated": "2026-04-23", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "experimental": { + "modes": { + "fast": { + "cost": { + "input": 12.5, + "output": 75, + "cache_read": 1.25 + }, + "provider": { + "body": { + "service_tier": "priority" + } + } + } + } + }, + "cost": { + "input": 5, + "output": 30, + "cache_read": 0.5, + "context_over_200k": { + "input": 10, + "output": 45, + "cache_read": 1 + }, + "tiers": [ + { + "input": 10, + "output": 45, + "cache_read": 1, + "tier": { + "type": "context", + "size": 272000 + } + } + ] + } }, - "openai/gpt-4.1-mini": { - "id": "openai/gpt-4.1-mini", - "name": "GPT-4.1 Mini", - "family": "gpt-mini", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.4, "output": 1.6, "cache_read": 0.1 }, - "limit": { "context": 1047576, "output": 32768 } - }, - "openai/gpt-5-nano": { - "id": "openai/gpt-5-nano", - "name": "GPT-5 Nano", - "family": "gpt-nano", + "databricks-gemini-3-flash": { + "id": "databricks-gemini-3-flash", + "name": "Gemini 3 Flash Preview", + "family": "gemini-flash", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2024-05-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.05, "output": 0.4, "cache_read": 0.01 }, - "limit": { "context": 16000, "output": 4000 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.05, + "input_audio": 1 + } }, - "openai/gpt-5-image": { - "id": "openai/gpt-5-image", - "name": "GPT-5 Image", - "family": "gpt", + "databricks-claude-opus-4-5": { + "id": "databricks-claude-opus-4-5", + "name": "Claude Opus 4.5 (latest)", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2024-10-01", - "release_date": "2025-10-14", - "last_updated": "2025-10-14", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text", "image"] }, + "knowledge": "2025-03-31", + "release_date": "2025-11-24", + "last_updated": "2025-11-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 10, "cache_read": 1.25 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "openai/gpt-5-codex": { - "id": "openai/gpt-5-codex", - "name": "GPT-5 Codex", - "family": "gpt-codex", + "databricks-gpt-5-mini": { + "id": "databricks-gpt-5-mini", + "name": "GPT-5 Mini", + "family": "gpt-mini", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": true, - "knowledge": "2024-10-01", - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.025 + } }, - "openai/o4-mini": { - "id": "openai/o4-mini", - "name": "o4 Mini", - "family": "o-mini", + "databricks-claude-sonnet-4": { + "id": "databricks-claude-sonnet-4", + "name": "Claude Sonnet 4.5", + "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-06", - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.28 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "openai/gpt-5.1-codex": { - "id": "openai/gpt-5.1-codex", - "name": "GPT-5.1-Codex", - "family": "gpt-codex", + "databricks-gpt-5-1": { + "id": "databricks-gpt-5-1", + "name": "GPT-5.1", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": true, + "temperature": false, "knowledge": "2024-09-30", "release_date": "2025-11-13", "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } - }, - "openai/gpt-5.2-pro": { - "id": "openai/gpt-5.2-pro", - "name": "GPT-5.2 Pro", - "family": "gpt-pro", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 21, "output": 168 }, - "limit": { "context": 400000, "output": 128000 } - }, - "anthropic/claude-opus-4-5": { - "id": "anthropic/claude-opus-4-5", - "name": "Claude Opus 4.5", - "family": "claude-opus", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-11-24", - "last_updated": "2025-11-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.13 + } }, - "anthropic/claude-opus-4-6": { - "id": "anthropic/claude-opus-4-6", - "name": "Claude Opus 4.6", + "databricks-claude-opus-4-7": { + "id": "databricks-claude-opus-4-7", + "name": "Claude Opus 4.7", "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2025-05-30", - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": false, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "experimental": { + "modes": { + "fast": { + "cost": { + "input": 30, + "output": 150, + "cache_read": 3, + "cache_write": 37.5 + }, + "provider": { + "body": { + "speed": "fast" + }, + "headers": { + "anthropic-beta": "fast-mode-2026-02-01" + } + } + } + } + }, "cost": { "input": 5, "output": 25, "cache_read": 0.5, - "cache_write": 6.25, - "context_over_200k": { "input": 10, "output": 37.5, "cache_read": 1, "cache_write": 12.5 } - }, - "limit": { "context": 1000000, "output": 128000 } + "cache_write": 6.25 + } }, - "anthropic/claude-sonnet-4-6": { - "id": "anthropic/claude-sonnet-4-6", - "name": "Claude Sonnet 4.6", - "family": "claude-sonnet", + "databricks-gemini-2-5-flash": { + "id": "databricks-gemini-2-5-flash", + "name": "Gemini 2.5 Flash", + "family": "gemini-flash", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2026-02-17", - "last_updated": "2026-02-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { - "input": 3, - "output": 15, - "cache_read": 0.3, - "cache_write": 3.75, - "context_over_200k": { "input": 6, "output": 22.5, "cache_read": 0.6, "cache_write": 7.5 } + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] }, - "limit": { "context": 1000000, "output": 128000 } - }, - "anthropic/claude-opus-4-1": { - "id": "anthropic/claude-opus-4-1", - "name": "Claude Opus 4.1", - "family": "claude-opus", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.03, + "input_audio": 1 + } }, - "anthropic/claude-sonnet-4": { - "id": "anthropic/claude-sonnet-4", - "name": "Claude Sonnet 4", - "family": "claude-sonnet", + "databricks-gpt-5-4-nano": { + "id": "databricks-gpt-5-4-nano", + "name": "GPT-5.4 nano", + "family": "gpt-nano", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.2, + "output": 1.25, + "cache_read": 0.02 + } }, - "anthropic/claude-sonnet-4-5": { - "id": "anthropic/claude-sonnet-4-5", - "name": "Claude Sonnet 4.5", + "databricks-claude-sonnet-4-5": { + "id": "databricks-claude-sonnet-4-5", + "name": "Claude Sonnet 4.5 (latest)", "family": "claude-sonnet", "attachment": true, "reasoning": true, @@ -19556,16796 +29313,24901 @@ "knowledge": "2025-07-31", "release_date": "2025-09-29", "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 1000000, "output": 64000 } - }, - "anthropic/claude-haiku-4-5": { - "id": "anthropic/claude-haiku-4-5", - "name": "Claude Haiku 4.5", - "family": "claude-haiku", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-02-01", - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.1, "cache_write": 1.25 }, - "limit": { "context": 200000, "output": 62000 } - }, - "anthropic/claude-opus-4": { - "id": "anthropic/claude-opus-4", - "name": "Claude Opus 4", - "family": "claude-opus", - "attachment": true, - "reasoning": true, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } + } + } + }, + "io-net": { + "id": "io-net", + "env": ["IOINTELLIGENCE_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.intelligence.io.solutions/api/v1", + "name": "IO.NET", + "doc": "https://io.net/docs/guides/intelligence/io-intelligence", + "models": { + "Intel/Qwen3-Coder-480B-A35B-Instruct-int4-mixed-ar": { + "id": "Intel/Qwen3-Coder-480B-A35B-Instruct-int4-mixed-ar", + "name": "Qwen 3 Coder 480B", + "family": "qwen", + "attachment": false, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "knowledge": "2024-12", + "release_date": "2025-01-15", + "last_updated": "2025-01-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 106000, + "output": 4096 + }, + "cost": { + "input": 0.22, + "output": 0.95, + "cache_read": 0.11, + "cache_write": 0.44 + } }, - "anthropic/claude-3-7-sonnet": { - "id": "anthropic/claude-3-7-sonnet", - "name": "Claude Sonnet 3.7", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, + "Qwen/Qwen3-Next-80B-A3B-Instruct": { + "id": "Qwen/Qwen3-Next-80B-A3B-Instruct", + "name": "Qwen 3 Next 80B Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-01", - "release_date": "2025-02-19", - "last_updated": "2025-02-19", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "knowledge": "2024-12", + "release_date": "2025-01-10", + "last_updated": "2025-01-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 4096 + }, + "cost": { + "input": 0.1, + "output": 0.8, + "cache_read": 0.05, + "cache_write": 0.2 + } }, - "xai/grok-4-fast": { - "id": "xai/grok-4-fast", - "name": "Grok 4 Fast", - "family": "grok", - "attachment": true, + "Qwen/Qwen3-235B-A22B-Thinking-2507": { + "id": "Qwen/Qwen3-235B-A22B-Thinking-2507", + "name": "Qwen 3 235B Thinking", + "family": "qwen", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-09-19", - "last_updated": "2025-09-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05, "cache_write": 0.2 }, - "limit": { "context": 2000000, "output": 64000 } + "knowledge": "2024-12", + "release_date": "2025-07-01", + "last_updated": "2025-07-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 4096 + }, + "cost": { + "input": 0.11, + "output": 0.6, + "cache_read": 0.055, + "cache_write": 0.22 + } }, - "xai/grok-4": { - "id": "xai/grok-4", - "name": "Grok 4", - "family": "grok", - "attachment": true, - "reasoning": true, + "Qwen/Qwen2.5-VL-32B-Instruct": { + "id": "Qwen/Qwen2.5-VL-32B-Instruct", + "name": "Qwen 2.5 VL 32B Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-09-09", - "last_updated": "2025-09-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.75, "cache_write": 3 }, - "limit": { "context": 256000, "output": 64000 } + "knowledge": "2024-09", + "release_date": "2024-11-01", + "last_updated": "2024-11-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32000, + "output": 4096 + }, + "cost": { + "input": 0.05, + "output": 0.22, + "cache_read": 0.025, + "cache_write": 0.1 + } }, - "google/gemini-3-pro-preview": { - "id": "google/gemini-3-pro-preview", - "name": "Gemini 3 Pro", - "family": "gemini-pro", - "attachment": true, - "reasoning": true, + "zai-org/GLM-4.6": { + "id": "zai-org/GLM-4.6", + "name": "GLM 4.6", + "family": "glm", + "attachment": false, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-11-18", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2024-11-15", + "last_updated": "2024-11-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 12, "cache_read": 0.2, "cache_write": 4.5 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 200000, + "output": 4096 + }, + "cost": { + "input": 0.4, + "output": 1.75, + "cache_read": 0.2, + "cache_write": 0.8 + } }, - "google/gemini-3-flash-preview": { - "id": "google/gemini-3-flash-preview", - "name": "Gemini 3 Flash", - "attachment": true, - "reasoning": true, + "mistralai/Magistral-Small-2506": { + "id": "mistralai/Magistral-Small-2506", + "name": "Magistral Small 2506", + "family": "magistral-small", + "attachment": false, + "reasoning": false, "tool_call": true, "temperature": true, "knowledge": "2025-01", - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "release_date": "2025-06-01", + "last_updated": "2025-06-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 3, "cache_read": 0.05, "cache_write": 1 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.5, + "output": 1.5, + "cache_read": 0.25, + "cache_write": 1 + } }, - "google/gemini-2.5-pro": { - "id": "google/gemini-2.5-pro", - "name": "Gemini 2.5 Pro", - "family": "gemini-pro", - "attachment": true, - "reasoning": true, + "mistralai/Mistral-Large-Instruct-2411": { + "id": "mistralai/Mistral-Large-Instruct-2411", + "name": "Mistral Large Instruct 2411", + "family": "mistral-large", + "attachment": false, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2024-11-01", + "last_updated": "2024-11-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.31, "cache_write": 2.375 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 2, + "output": 6, + "cache_read": 1, + "cache_write": 4 + } }, - "google/gemini-2.5-flash": { - "id": "google/gemini-2.5-flash", - "name": "Gemini 2.5 Flash", - "family": "gemini-flash", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 2.5, "cache_read": 0.075, "cache_write": 0.55 }, - "limit": { "context": 1048576, "output": 65536 } - } - } - }, - "friendli": { - "id": "friendli", - "env": ["FRIENDLI_TOKEN"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.friendli.ai/serverless/v1", - "name": "Friendli", - "doc": "https://friendli.ai/docs/guides/serverless_endpoints/introduction", - "models": { - "zai-org/GLM-4.7": { - "id": "zai-org/GLM-4.7", - "name": "GLM 4.7", - "family": "glm", + "mistralai/Mistral-Nemo-Instruct-2407": { + "id": "mistralai/Mistral-Nemo-Instruct-2407", + "name": "Mistral Nemo Instruct 2407", + "family": "mistral-nemo", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, "temperature": true, - "release_date": "2025-12-22", - "last_updated": "2026-01-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-05", + "release_date": "2024-07-01", + "last_updated": "2024-07-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "limit": { "context": 202752, "output": 202752 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.02, + "output": 0.04, + "cache_read": 0.01, + "cache_write": 0.04 + } }, - "zai-org/GLM-5": { - "id": "zai-org/GLM-5", - "name": "GLM 5", - "family": "glm", + "mistralai/Devstral-Small-2505": { + "id": "mistralai/Devstral-Small-2505", + "name": "Devstral Small 2505", + "family": "devstral", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1, "output": 3.2 }, - "limit": { "context": 202752, "output": 202752 } + "knowledge": "2024-12", + "release_date": "2025-05-01", + "last_updated": "2025-05-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.05, + "output": 0.22, + "cache_read": 0.025, + "cache_write": 0.1 + } }, - "meta-llama/Llama-3.1-8B-Instruct": { - "id": "meta-llama/Llama-3.1-8B-Instruct", - "name": "Llama 3.1 8B Instruct", + "meta-llama/Llama-3.3-70B-Instruct": { + "id": "meta-llama/Llama-3.3-70B-Instruct", + "name": "Llama 3.3 70B Instruct", "family": "llama", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-08-01", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2023-12", + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.1 }, - "limit": { "context": 131072, "output": 8000 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.13, + "output": 0.38, + "cache_read": 0.065, + "cache_write": 0.26 + } }, - "meta-llama/Llama-3.3-70B-Instruct": { - "id": "meta-llama/Llama-3.3-70B-Instruct", - "name": "Llama 3.3 70B Instruct", + "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8": { + "id": "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8", + "name": "Llama 4 Maverick 17B 128E Instruct", "family": "llama", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-08-01", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2025-01-15", + "last_updated": "2025-01-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 0.6 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 430000, + "output": 4096 + }, + "cost": { + "input": 0.15, + "output": 0.6, + "cache_read": 0.075, + "cache_write": 0.3 + } }, - "MiniMaxAI/MiniMax-M2.1": { - "id": "MiniMaxAI/MiniMax-M2.1", - "name": "MiniMax M2.1", + "meta-llama/Llama-3.2-90B-Vision-Instruct": { + "id": "meta-llama/Llama-3.2-90B-Vision-Instruct", + "name": "Llama 3.2 90B Vision Instruct", + "family": "llama", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, "temperature": true, - "release_date": "2026-01-13", - "last_updated": "2026-01-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2023-12", + "release_date": "2024-09-25", + "last_updated": "2024-09-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 196608, "output": 196608 } + "limit": { + "context": 16000, + "output": 4096 + }, + "cost": { + "input": 0.35, + "output": 0.4, + "cache_read": 0.175, + "cache_write": 0.7 + } }, - "MiniMaxAI/MiniMax-M2.5": { - "id": "MiniMaxAI/MiniMax-M2.5", - "name": "MiniMax M2.5", - "family": "minimax", + "deepseek-ai/DeepSeek-R1-0528": { + "id": "deepseek-ai/DeepSeek-R1-0528", + "name": "DeepSeek R1", + "family": "deepseek-thinking", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-07", + "release_date": "2025-01-20", + "last_updated": "2025-05-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 196608, "output": 196608 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 2, + "output": 8.75, + "cache_read": 1, + "cache_write": 4 + } }, - "Qwen/Qwen3-235B-A22B-Instruct-2507": { - "id": "Qwen/Qwen3-235B-A22B-Instruct-2507", - "name": "Qwen3 235B A22B Instruct 2507", - "family": "qwen", + "openai/gpt-oss-20b": { + "id": "openai/gpt-oss-20b", + "name": "GPT-OSS 20B", + "family": "gpt-oss", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-07-29", - "last_updated": "2026-01-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.8 }, - "limit": { "context": 262144, "output": 262144 } - } - } - }, - "302ai": { - "id": "302ai", - "env": ["302AI_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.302.ai/v1", - "name": "302.AI", - "doc": "https://doc.302.ai", - "models": { - "qwen3-235b-a22b-instruct-2507": { - "id": "qwen3-235b-a22b-instruct-2507", - "name": "qwen3-235b-a22b-instruct-2507", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-30", - "last_updated": "2025-07-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.29, "output": 1.143 }, - "limit": { "context": 128000, "output": 65536 } + "limit": { + "context": 64000, + "output": 4096 + }, + "cost": { + "input": 0.03, + "output": 0.14, + "cache_read": 0.015, + "cache_write": 0.06 + } }, - "claude-opus-4-5-20251101": { - "id": "claude-opus-4-5-20251101", - "name": "claude-opus-4-5-20251101", - "attachment": true, + "openai/gpt-oss-120b": { + "id": "openai/gpt-oss-120b", + "name": "GPT-OSS 120B", + "family": "gpt-oss", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-11-25", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 5, "output": 25 }, - "limit": { "context": 200000, "output": 64000 } + "knowledge": "2024-10", + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 4096 + }, + "cost": { + "input": 0.04, + "output": 0.4, + "cache_read": 0.02, + "cache_write": 0.08 + } }, - "deepseek-v3.2-thinking": { - "id": "deepseek-v3.2-thinking", - "name": "DeepSeek-V3.2-Thinking", + "moonshotai/Kimi-K2-Thinking": { + "id": "moonshotai/Kimi-K2-Thinking", + "name": "Kimi K2 Thinking", + "family": "kimi-thinking", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.29, "output": 0.43 }, - "limit": { "context": 128000, "output": 128000 } - }, - "gpt-5-pro": { - "id": "gpt-5-pro", - "name": "gpt-5-pro", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-10-08", - "last_updated": "2025-10-08", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-08", + "release_date": "2024-11-01", + "last_updated": "2024-11-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 120 }, - "limit": { "context": 400000, "output": 272000 } + "limit": { + "context": 32768, + "output": 4096 + }, + "cost": { + "input": 0.55, + "output": 2.25, + "cache_read": 0.275, + "cache_write": 1.1 + } }, - "gemini-2.5-flash-lite-preview-09-2025": { - "id": "gemini-2.5-flash-lite-preview-09-2025", - "name": "gemini-2.5-flash-lite-preview-09-2025", - "attachment": true, + "moonshotai/Kimi-K2-Instruct-0905": { + "id": "moonshotai/Kimi-K2-Instruct-0905", + "name": "Kimi K2 Instruct", + "family": "kimi", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-09-26", - "last_updated": "2025-09-26", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-08", + "release_date": "2024-09-05", + "last_updated": "2024-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.4 }, - "limit": { "context": 1000000, "output": 65536 } - }, - "kimi-k2-thinking": { - "id": "kimi-k2-thinking", - "name": "kimi-k2-thinking", + "limit": { + "context": 32768, + "output": 4096 + }, + "cost": { + "input": 0.39, + "output": 1.9, + "cache_read": 0.195, + "cache_write": 0.78 + } + } + } + }, + "alibaba-cn": { + "id": "alibaba-cn", + "env": ["DASHSCOPE_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://dashscope.aliyuncs.com/compatible-mode/v1", + "name": "Alibaba (China)", + "doc": "https://www.alibabacloud.com/help/en/model-studio/models", + "models": { + "qwen3-235b-a22b": { + "id": "qwen3-235b-a22b", + "name": "Qwen3 235B-A22B", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.575, "output": 2.3 }, - "limit": { "context": 262144, "output": 262144 } + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.287, + "output": 1.147, + "reasoning": 2.868 + } }, - "qwen-max-latest": { - "id": "qwen-max-latest", - "name": "Qwen-Max-Latest", + "qwen-plus-character": { + "id": "qwen-plus-character", + "name": "Qwen Plus Character", "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-11", - "release_date": "2024-04-03", - "last_updated": "2025-01-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2024-01", + "last_updated": "2024-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.343, "output": 1.372 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 32768, + "output": 4096 + }, + "cost": { + "input": 0.115, + "output": 0.287 + } }, - "gpt-5.2-chat-latest": { - "id": "gpt-5.2-chat-latest", - "name": "gpt-5.2-chat-latest", - "attachment": true, + "qwen2-5-math-7b-instruct": { + "id": "qwen2-5-math-7b-instruct", + "name": "Qwen2.5-Math 7B Instruct", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-12-12", - "last_updated": "2025-12-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2024-04", + "release_date": "2024-09", + "last_updated": "2024-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 4096, + "output": 3072 + }, + "cost": { + "input": 0.144, + "output": 0.287 + } }, - "gpt-5": { - "id": "gpt-5", - "name": "gpt-5", - "attachment": true, - "reasoning": false, + "kimi-k2.5": { + "id": "kimi-k2.5", + "name": "Moonshot Kimi K2.5", + "family": "kimi", + "attachment": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": false, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-08-08", - "last_updated": "2025-08-08", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 400000, "output": 128000 } + "knowledge": "2025-01", + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0.574, + "output": 2.411 + } }, - "grok-4.1": { - "id": "grok-4.1", - "name": "grok-4.1", - "attachment": true, + "qwen-doc-turbo": { + "id": "qwen-doc-turbo", + "name": "Qwen Doc Turbo", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-11-18", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2024-01", + "last_updated": "2024-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 10 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.087, + "output": 0.144 + } }, - "chatgpt-4o-latest": { - "id": "chatgpt-4o-latest", - "name": "chatgpt-4o-latest", - "family": "gpt", - "attachment": true, + "qwen-vl-ocr": { + "id": "qwen-vl-ocr", + "name": "Qwen-VL OCR", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": false, "temperature": true, - "knowledge": "2023-09", - "release_date": "2024-08-08", - "last_updated": "2024-08-08", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2024-10-28", + "last_updated": "2025-04-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 15 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 34096, + "output": 4096 + }, + "cost": { + "input": 0.717, + "output": 0.717 + } }, - "gemini-3-pro-preview": { - "id": "gemini-3-pro-preview", - "name": "gemini-3-pro-preview", - "attachment": true, + "qwen-omni-turbo-realtime": { + "id": "qwen-omni-turbo-realtime", + "name": "Qwen-Omni Turbo Realtime", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-11-19", - "last_updated": "2025-11-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2025-05-08", + "last_updated": "2025-05-08", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text", "audio"] + }, "open_weights": false, - "cost": { "input": 2, "output": 12 }, - "limit": { "context": 1000000, "output": 64000 } + "limit": { + "context": 32768, + "output": 2048 + }, + "cost": { + "input": 0.23, + "output": 0.918, + "input_audio": 3.584, + "output_audio": 7.168 + } }, - "MiniMax-M1": { - "id": "MiniMax-M1", - "name": "MiniMax-M1", - "family": "minimax", + "qwen3-8b": { + "id": "qwen3-8b", + "name": "Qwen3 8B", + "family": "qwen", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-06-16", - "last_updated": "2025-06-16", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.132, "output": 1.254 }, - "limit": { "context": 1000000, "output": 128000 } + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.072, + "output": 0.287, + "reasoning": 0.717 + } }, - "gpt-4o": { - "id": "gpt-4o", - "name": "gpt-4o", - "family": "gpt", - "attachment": true, - "reasoning": false, + "qwen3.5-397b-a17b": { + "id": "qwen3.5-397b-a17b", + "name": "Qwen3.5 397B-A17B", + "family": "qwen", + "attachment": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2023-09", - "release_date": "2024-05-13", - "last_updated": "2024-05-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2025-04", + "release_date": "2026-02-16", + "last_updated": "2026-02-16", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.43, + "output": 2.58, + "reasoning": 2.58 + } }, - "grok-4-fast-non-reasoning": { - "id": "grok-4-fast-non-reasoning", - "name": "grok-4-fast-non-reasoning", - "attachment": true, + "qwen-math-turbo": { + "id": "qwen-math-turbo", + "name": "Qwen Math Turbo", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-09-23", - "last_updated": "2025-09-23", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2024-09-19", + "last_updated": "2024-09-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 4096, + "output": 3072 + }, + "cost": { + "input": 0.287, + "output": 0.861 + } }, - "kimi-k2-thinking-turbo": { - "id": "kimi-k2-thinking-turbo", - "name": "kimi-k2-thinking-turbo", + "qwq-plus": { + "id": "qwq-plus", + "name": "QwQ Plus", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2025-03-05", + "last_updated": "2025-03-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.265, "output": 9.119 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.23, + "output": 0.574 + } }, - "kimi-k2-0905-preview": { - "id": "kimi-k2-0905-preview", - "name": "kimi-k2-0905-preview", + "qwen-vl-plus": { + "id": "qwen-vl-plus", + "name": "Qwen-VL Plus", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.632, "output": 2.53 }, - "limit": { "context": 262144, "output": 262144 } - }, - "ministral-14b-2512": { - "id": "ministral-14b-2512", - "name": "ministral-14b-2512", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-12-16", - "last_updated": "2025-12-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2024-01-25", + "last_updated": "2025-08-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.33, "output": 0.33 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.115, + "output": 0.287 + } }, - "gpt-5-mini": { - "id": "gpt-5-mini", - "name": "gpt-5-mini", - "attachment": true, - "reasoning": false, + "glm-5": { + "id": "glm-5", + "name": "GLM-5", + "family": "glm", + "attachment": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-08-08", - "last_updated": "2025-08-08", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 202752, + "output": 16384 + }, + "cost": { + "input": 0.86, + "output": 3.15 + } }, - "deepseek-chat": { - "id": "deepseek-chat", - "name": "Deepseek-Chat", - "family": "deepseek", + "deepseek-r1-distill-llama-70b": { + "id": "deepseek-r1-distill-llama-70b", + "name": "DeepSeek R1 Distill Llama 70B", + "family": "deepseek-thinking", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2024-11-29", - "last_updated": "2024-11-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.29, "output": 0.43 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 32768, + "output": 16384 + }, + "cost": { + "input": 0.287, + "output": 0.861 + } }, - "claude-sonnet-4-5-20250929": { - "id": "claude-sonnet-4-5-20250929", - "name": "claude-sonnet-4-5-20250929", - "attachment": true, - "reasoning": false, + "qwen3-32b": { + "id": "qwen3-32b", + "name": "Qwen3 32B", + "family": "qwen", + "attachment": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 200000, "output": 64000 } + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.287, + "output": 1.147, + "reasoning": 2.868 + } }, - "doubao-seed-1-6-thinking-250715": { - "id": "doubao-seed-1-6-thinking-250715", - "name": "doubao-seed-1-6-thinking-250715", - "attachment": true, + "MiniMax-M2.5": { + "id": "MiniMax-M2.5", + "name": "MiniMax-M2.5", + "family": "minimax", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-07-15", - "last_updated": "2025-07-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.121, "output": 1.21 }, - "limit": { "context": 256000, "output": 16000 } + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "qwen3-30b-a3b": { - "id": "qwen3-30b-a3b", - "name": "Qwen3-30B-A3B", + "qwen-max": { + "id": "qwen-max", + "name": "Qwen Max", "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04-29", - "last_updated": "2025-04-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2024-04-03", + "last_updated": "2025-01-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.11, "output": 1.08 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.345, + "output": 1.377 + } }, "qwen-plus": { "id": "qwen-plus", - "name": "Qwen-Plus", + "name": "Qwen Plus", "family": "qwen", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2024-01-25", + "last_updated": "2025-09-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.12, "output": 1.2 }, - "limit": { "context": 1000000, "output": 32768 } + "limit": { + "context": 1000000, + "output": 32768 + }, + "cost": { + "input": 0.115, + "output": 0.287, + "reasoning": 1.147 + } }, - "gpt-4.1": { - "id": "gpt-4.1", - "name": "gpt-4.1", - "family": "gpt", - "attachment": true, + "qwen-omni-turbo": { + "id": "qwen-omni-turbo", + "name": "Qwen-Omni Turbo", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-01-19", + "last_updated": "2025-03-26", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text", "audio"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8 }, - "limit": { "context": 1000000, "output": 32768 } + "limit": { + "context": 32768, + "output": 2048 + }, + "cost": { + "input": 0.058, + "output": 0.23, + "input_audio": 3.584, + "output_audio": 7.168 + } }, - "qwen3-max-2025-09-23": { - "id": "qwen3-max-2025-09-23", - "name": "qwen3-max-2025-09-23", + "qwen-flash": { + "id": "qwen-flash", + "name": "Qwen Flash", + "family": "qwen", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-24", - "last_updated": "2025-09-24", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.86, "output": 3.43 }, - "limit": { "context": 258048, "output": 65536 } + "limit": { + "context": 1000000, + "output": 32768 + }, + "cost": { + "input": 0.022, + "output": 0.216 + } }, - "gpt-5.1-chat-latest": { - "id": "gpt-5.1-chat-latest", - "name": "gpt-5.1-chat-latest", - "attachment": true, + "qwen2-5-vl-7b-instruct": { + "id": "qwen2-5-vl-7b-instruct", + "name": "Qwen2.5-VL 7B Instruct", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 128000, "output": 16384 } - }, - "gemini-2.0-flash-lite": { - "id": "gemini-2.0-flash-lite", - "name": "gemini-2.0-flash-lite", - "family": "gemini-flash-lite", - "attachment": true, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-06-16", - "last_updated": "2025-06-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.075, "output": 0.3 }, - "limit": { "context": 2000000, "output": 8192 } + "knowledge": "2024-04", + "release_date": "2024-09", + "last_updated": "2024-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.287, + "output": 0.717 + } }, - "claude-sonnet-4-5-20250929-thinking": { - "id": "claude-sonnet-4-5-20250929-thinking", - "name": "claude-sonnet-4-5-20250929-thinking", - "attachment": true, + "deepseek-r1": { + "id": "deepseek-r1", + "name": "DeepSeek R1", + "family": "deepseek-thinking", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.574, + "output": 2.294 + } }, - "grok-4-1-fast-non-reasoning": { - "id": "grok-4-1-fast-non-reasoning", - "name": "grok-4-1-fast-non-reasoning", + "qwen3.5-flash": { + "id": "qwen3.5-flash", + "name": "Qwen3.5 Flash", + "family": "qwen", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-11-20", - "last_updated": "2025-11-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-02-23", + "last_updated": "2026-02-23", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.172, + "output": 1.72, + "reasoning": 1.72 + } }, - "gemini-2.5-flash-nothink": { - "id": "gemini-2.5-flash-nothink", - "name": "gemini-2.5-flash-nothink", - "family": "gemini-flash", - "attachment": true, - "reasoning": false, + "qwen3.6-plus": { + "id": "qwen3.6-plus", + "name": "Qwen3.6 Plus", + "family": "qwen", + "attachment": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-06-24", - "last_updated": "2025-06-24", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 2.5 }, - "limit": { "context": 1000000, "output": 65536 } + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.05, + "cache_write": 0.625, + "tiers": [ + { + "input": 2, + "output": 6, + "cache_read": 0.2, + "cache_write": 2.5, + "tier": { + "type": "context", + "size": 256000 + } + } + ], + "context_over_200k": { + "input": 2, + "output": 6, + "cache_read": 0.2, + "cache_write": 2.5 + } + } }, - "glm-4.5": { - "id": "glm-4.5", - "name": "GLM-4.5", + "qwen3-max": { + "id": "qwen3-max", + "name": "Qwen3 Max", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-07-29", - "last_updated": "2025-07-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-09-23", + "last_updated": "2025-09-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.286, "output": 1.142 }, - "limit": { "context": 128000, "output": 98304 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.861, + "output": 3.441 + } }, - "gpt-5-thinking": { - "id": "gpt-5-thinking", - "name": "gpt-5-thinking", - "attachment": true, + "glm-5.1": { + "id": "glm-5.1", + "name": "GLM-5.1", + "family": "glm", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-08-08", - "last_updated": "2025-08-08", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 400000, "output": 128000 } + "release_date": "2026-04-14", + "last_updated": "2026-04-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202752, + "output": 128000 + }, + "cost": { + "input": 0.87, + "output": 3.48, + "cache_read": 0.17 + } }, - "deepseek-reasoner": { - "id": "deepseek-reasoner", - "name": "Deepseek-Reasoner", - "family": "deepseek-thinking", + "qwen3-omni-flash": { + "id": "qwen3-omni-flash", + "name": "Qwen3-Omni Flash", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2025-09-15", + "last_updated": "2025-09-15", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text", "audio"] + }, "open_weights": false, - "cost": { "input": 0.29, "output": 0.43 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 65536, + "output": 16384 + }, + "cost": { + "input": 0.058, + "output": 0.23, + "input_audio": 3.584, + "output_audio": 7.168 + } }, - "MiniMax-M2.1": { - "id": "MiniMax-M2.1", - "name": "MiniMax-M2.1", + "deepseek-v3-1": { + "id": "deepseek-v3-1", + "name": "DeepSeek V3.1", + "family": "deepseek", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-12-19", - "last_updated": "2025-12-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 1000000, "output": 131072 } + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.574, + "output": 1.721 + } }, - "glm-4.6": { - "id": "glm-4.6", - "name": "glm-4.6", + "qwen2-5-72b-instruct": { + "id": "qwen2-5-72b-instruct", + "name": "Qwen2.5 72B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.286, "output": 1.142 }, - "limit": { "context": 200000, "output": 131072 } - }, - "gemini-3-flash-preview": { - "id": "gemini-3-flash-preview", - "name": "gemini-3-flash-preview", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-12-18", - "last_updated": "2025-12-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.5, "output": 3 }, - "limit": { "context": 1000000, "output": 65536 } - }, - "glm-4.6v": { - "id": "glm-4.6v", - "name": "GLM-4.6V", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-12-08", - "last_updated": "2025-12-08", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.145, "output": 0.43 }, - "limit": { "context": 128000, "output": 32768 } + "knowledge": "2024-04", + "release_date": "2024-09", + "last_updated": "2024-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.574, + "output": 1.721 + } }, - "claude-opus-4-5-20251101-thinking": { - "id": "claude-opus-4-5-20251101-thinking", - "name": "claude-opus-4-5-20251101-thinking", - "attachment": true, + "qwen3-vl-235b-a22b": { + "id": "qwen3-vl-235b-a22b", + "name": "Qwen3-VL 235B-A22B", + "family": "qwen", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-11-25", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 5, "output": 25 }, - "limit": { "context": 200000, "output": 64000 } + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.286705, + "output": 1.14682, + "reasoning": 2.867051 + } }, - "qwen3-coder-480b-a35b-instruct": { - "id": "qwen3-coder-480b-a35b-instruct", - "name": "qwen3-coder-480b-a35b-instruct", + "qwen-math-plus": { + "id": "qwen-math-plus", + "name": "Qwen Math Plus", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2024-08-16", + "last_updated": "2024-09-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.86, "output": 3.43 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 4096, + "output": 3072 + }, + "cost": { + "input": 0.574, + "output": 1.721 + } }, - "doubao-seed-code-preview-251028": { - "id": "doubao-seed-code-preview-251028", - "name": "doubao-seed-code-preview-251028", - "attachment": true, + "qwen2-5-coder-32b-instruct": { + "id": "qwen2-5-coder-32b-instruct", + "name": "Qwen2.5-Coder 32B Instruct", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-11-11", - "last_updated": "2025-11-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.17, "output": 1.14 }, - "limit": { "context": 256000, "output": 32000 } + "knowledge": "2024-04", + "release_date": "2024-11", + "last_updated": "2024-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.287, + "output": 0.861 + } }, - "gemini-2.5-pro": { - "id": "gemini-2.5-pro", - "name": "gemini-2.5-pro", - "family": "gemini-pro", - "attachment": true, + "qwen3-asr-flash": { + "id": "qwen3-asr-flash", + "name": "Qwen3-ASR Flash", + "family": "qwen", + "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "temperature": false, + "knowledge": "2024-04", + "release_date": "2025-09-08", + "last_updated": "2025-09-08", + "modalities": { + "input": ["audio"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 1000000, "output": 65536 } + "limit": { + "context": 53248, + "output": 4096 + }, + "cost": { + "input": 0.032, + "output": 0.032 + } }, - "claude-opus-4-1-20250805": { - "id": "claude-opus-4-1-20250805", - "name": "claude-opus-4-1-20250805", - "attachment": true, + "qwen-deep-research": { + "id": "qwen-deep-research", + "name": "Qwen Deep Research", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2024-01", + "last_updated": "2024-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 1000000, + "output": 32768 + }, + "cost": { + "input": 7.742, + "output": 23.367 + } }, - "gemini-2.5-flash": { - "id": "gemini-2.5-flash", - "name": "gemini-2.5-flash", - "family": "gemini-flash", - "attachment": true, - "reasoning": false, + "qwen3-next-80b-a3b-thinking": { + "id": "qwen3-next-80b-a3b-thinking", + "name": "Qwen3-Next 80B-A3B (Thinking)", + "family": "qwen", + "attachment": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 2.5 }, - "limit": { "context": 1000000, "output": 65536 } + "knowledge": "2025-04", + "release_date": "2025-09", + "last_updated": "2025-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.144, + "output": 1.434 + } }, - "gpt-5.2": { - "id": "gpt-5.2", - "name": "gpt-5.2", - "attachment": true, + "qwen-mt-plus": { + "id": "qwen-mt-plus", + "name": "Qwen-MT Plus", + "family": "qwen", + "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-12-12", - "last_updated": "2025-12-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2025-01", + "last_updated": "2025-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 16384, + "output": 8192 + }, + "cost": { + "input": 0.259, + "output": 0.775 + } }, - "grok-4-1-fast-reasoning": { - "id": "grok-4-1-fast-reasoning", - "name": "grok-4-1-fast-reasoning", - "attachment": true, + "deepseek-r1-distill-qwen-32b": { + "id": "deepseek-r1-distill-qwen-32b", + "name": "DeepSeek R1 Distill Qwen 32B", + "family": "qwen", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-11-20", - "last_updated": "2025-11-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 32768, + "output": 16384 + }, + "cost": { + "input": 0.287, + "output": 0.861 + } }, - "gpt-5.1": { - "id": "gpt-5.1", - "name": "gpt-5.1", - "attachment": true, + "qwen-vl-max": { + "id": "qwen-vl-max", + "name": "Qwen-VL Max", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2024-04-08", + "last_updated": "2025-08-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.23, + "output": 0.574 + } }, - "gemini-2.5-flash-preview-09-2025": { - "id": "gemini-2.5-flash-preview-09-2025", - "name": "gemini-2.5-flash-preview-09-2025", - "attachment": true, + "qwen3-coder-flash": { + "id": "qwen3-coder-flash", + "name": "Qwen3 Coder Flash", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-09-26", - "last_updated": "2025-09-26", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 2.5 }, - "limit": { "context": 1000000, "output": 65536 } + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.144, + "output": 0.574 + } }, - "doubao-seed-1-8-251215": { - "id": "doubao-seed-1-8-251215", - "name": "doubao-seed-1-8-251215", - "attachment": true, - "reasoning": false, + "deepseek-r1-distill-qwen-7b": { + "id": "deepseek-r1-distill-qwen-7b", + "name": "DeepSeek R1 Distill Qwen 7B", + "family": "qwen", + "attachment": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-12-18", - "last_updated": "2025-12-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.114, "output": 0.286 }, - "limit": { "context": 224000, "output": 64000 } + "limit": { + "context": 32768, + "output": 16384 + }, + "cost": { + "input": 0.072, + "output": 0.144 + } }, - "gpt-4.1-mini": { - "id": "gpt-4.1-mini", - "name": "gpt-4.1-mini", - "family": "gpt-mini", - "attachment": true, + "qwen2-5-7b-instruct": { + "id": "qwen2-5-7b-instruct", + "name": "Qwen2.5 7B Instruct", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.4, "output": 1.6 }, - "limit": { "context": 1000000, "output": 32768 } + "release_date": "2024-09", + "last_updated": "2024-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.072, + "output": 0.144 + } }, - "qwen3-235b-a22b": { - "id": "qwen3-235b-a22b", - "name": "Qwen3-235B-A22B", + "qwen2-5-14b-instruct": { + "id": "qwen2-5-14b-instruct", + "name": "Qwen2.5 14B Instruct", "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04-29", - "last_updated": "2025-04-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.29, "output": 2.86 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2024-04", + "release_date": "2024-09", + "last_updated": "2024-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.144, + "output": 0.431 + } }, - "grok-4-fast-reasoning": { - "id": "grok-4-fast-reasoning", - "name": "grok-4-fast-reasoning", - "attachment": true, - "reasoning": true, - "tool_call": true, + "tongyi-intent-detect-v3": { + "id": "tongyi-intent-detect-v3", + "name": "Tongyi Intent Detect V3", + "family": "yi", + "attachment": false, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-09-23", - "last_updated": "2025-09-23", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2024-01", + "last_updated": "2024-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 8192, + "output": 1024 + }, + "cost": { + "input": 0.058, + "output": 0.144 + } }, - "MiniMax-M2": { - "id": "MiniMax-M2", - "name": "MiniMax-M2", + "qwq-32b": { + "id": "qwq-32b", + "name": "QwQ 32B", + "family": "qwen", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-10-26", - "last_updated": "2025-10-26", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.33, "output": 1.32 }, - "limit": { "context": 1000000, "output": 128000 } - }, - "gemini-2.5-flash-image": { - "id": "gemini-2.5-flash-image", - "name": "gemini-2.5-flash-image", - "attachment": true, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-10-08", - "last_updated": "2025-10-08", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 30 }, - "limit": { "context": 32768, "output": 32768 } + "knowledge": "2024-04", + "release_date": "2024-12", + "last_updated": "2024-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.287, + "output": 0.861 + } }, - "glm-4.5v": { - "id": "glm-4.5v", - "name": "GLM-4.5V", - "attachment": true, + "moonshot-kimi-k2-instruct": { + "id": "moonshot-kimi-k2-instruct", + "name": "Moonshot Kimi K2 Instruct", + "family": "kimi", + "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-07-29", - "last_updated": "2025-07-29", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.29, "output": 0.86 }, - "limit": { "context": 64000, "output": 16384 } + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.574, + "output": 2.294 + } }, - "claude-haiku-4-5-20251001": { - "id": "claude-haiku-4-5-20251001", - "name": "claude-haiku-4-5-20251001", - "attachment": true, + "qwen2-5-32b-instruct": { + "id": "qwen2-5-32b-instruct", + "name": "Qwen2.5 32B Instruct", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-10-16", - "last_updated": "2025-10-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1, "output": 5 }, - "limit": { "context": 200000, "output": 64000 } + "knowledge": "2024-04", + "release_date": "2024-09", + "last_updated": "2024-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.287, + "output": 0.861 + } }, - "glm-4.7": { - "id": "glm-4.7", - "name": "glm-4.7", + "qwen3-next-80b-a3b-instruct": { + "id": "qwen3-next-80b-a3b-instruct", + "name": "Qwen3-Next 80B-A3B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.286, "output": 1.142 }, - "limit": { "context": 200000, "output": 131072 } + "knowledge": "2025-04", + "release_date": "2025-09", + "last_updated": "2025-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.144, + "output": 0.574 + } }, - "qwen-flash": { - "id": "qwen-flash", - "name": "Qwen-Flash", + "qwen3-omni-flash-realtime": { + "id": "qwen3-omni-flash-realtime", + "name": "Qwen3-Omni Flash Realtime", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2025-09-15", + "last_updated": "2025-09-15", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text", "audio"] + }, "open_weights": false, - "cost": { "input": 0.022, "output": 0.22 }, - "limit": { "context": 1000000, "output": 32768 } + "limit": { + "context": 65536, + "output": 16384 + }, + "cost": { + "input": 0.23, + "output": 0.918, + "input_audio": 3.584, + "output_audio": 7.168 + } }, - "gpt-4.1-nano": { - "id": "gpt-4.1-nano", - "name": "gpt-4.1-nano", - "family": "gpt-nano", + "kimi-k2.6": { + "id": "kimi-k2.6", + "name": "Moonshot Kimi K2.6", + "family": "kimi", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": false, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4 }, - "limit": { "context": 1000000, "output": 32768 } + "knowledge": "2025-01", + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 16384 + }, + "cost": { + "input": 0.929, + "output": 3.858 + } }, - "deepseek-v3.2": { - "id": "deepseek-v3.2", - "name": "deepseek-v3.2", + "qwen3-vl-30b-a3b": { + "id": "qwen3-vl-30b-a3b", + "name": "Qwen3-VL 30B-A3B", + "family": "qwen", "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.29, "output": 0.43 }, - "limit": { "context": 128000, "output": 8192 } - }, - "doubao-seed-1-6-vision-250815": { - "id": "doubao-seed-1-6-vision-250815", - "name": "doubao-seed-1-6-vision-250815", - "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.114, "output": 1.143 }, - "limit": { "context": 256000, "output": 32000 } + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.108, + "output": 0.431, + "reasoning": 1.076 + } }, - "claude-opus-4-1-20250805-thinking": { - "id": "claude-opus-4-1-20250805-thinking", - "name": "claude-opus-4-1-20250805-thinking", - "attachment": true, + "qwen3-vl-plus": { + "id": "qwen3-vl-plus", + "name": "Qwen3-VL Plus", + "family": "qwen", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-05-27", - "last_updated": "2025-05-27", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-09-23", + "last_updated": "2025-09-23", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0.143353, + "output": 1.433525, + "reasoning": 4.300576 + } }, - "gemini-3-pro-image-preview": { - "id": "gemini-3-pro-image-preview", - "name": "gemini-3-pro-image-preview", - "attachment": true, + "deepseek-v3-2-exp": { + "id": "deepseek-v3-2-exp", + "name": "DeepSeek V3.2 Exp", + "family": "deepseek", + "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-11-20", - "last_updated": "2025-11-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 120 }, - "limit": { "context": 32768, "output": 64000 } + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.287, + "output": 0.431 + } }, - "mistral-large-2512": { - "id": "mistral-large-2512", - "name": "mistral-large-2512", - "attachment": true, + "qwen3-coder-480b-a35b-instruct": { + "id": "qwen3-coder-480b-a35b-instruct", + "name": "Qwen3-Coder 480B-A35B Instruct", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-12-16", - "last_updated": "2025-12-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.1, "output": 3.3 }, - "limit": { "context": 128000, "output": 262144 } - } - } - }, - "novita-ai": { - "id": "novita-ai", - "env": ["NOVITA_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.novita.ai/openai", - "name": "NovitaAI", - "doc": "https://novita.ai/docs/guides/introduction", - "models": { - "paddlepaddle/paddleocr-vl": { - "id": "paddlepaddle/paddleocr-vl", - "name": "PaddleOCR-VL", - "attachment": true, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-10-22", - "last_updated": "2025-10-22", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.02, "output": 0.02 }, - "limit": { "context": 16384, "output": 16384 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.861, + "output": 3.441 + } }, - "openai/gpt-oss-120b": { - "id": "openai/gpt-oss-120b", - "name": "OpenAI GPT OSS 120B", - "attachment": true, + "deepseek-r1-distill-qwen-1-5b": { + "id": "deepseek-r1-distill-qwen-1-5b", + "name": "DeepSeek R1 Distill Qwen 1.5B", + "family": "qwen", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-08-06", - "last_updated": "2025-08-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.05, "output": 0.25 }, - "limit": { "context": 131072, "output": 32768 } - }, - "openai/gpt-oss-20b": { - "id": "openai/gpt-oss-20b", - "name": "OpenAI: GPT OSS 20B", - "attachment": true, - "reasoning": true, - "tool_call": false, - "structured_output": true, "temperature": true, - "release_date": "2025-08-06", - "last_updated": "2025-08-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.04, "output": 0.15 }, - "limit": { "context": 131072, "output": 32768 } + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "microsoft/wizardlm-2-8x22b": { - "id": "microsoft/wizardlm-2-8x22b", - "name": "Wizardlm 2 8x22B", + "qwen3-coder-30b-a3b-instruct": { + "id": "qwen3-coder-30b-a3b-instruct", + "name": "Qwen3-Coder 30B-A3B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "release_date": "2024-04-24", - "last_updated": "2024-04-24", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.62, "output": 0.62 }, - "limit": { "context": 65535, "output": 8000 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.216, + "output": 0.861 + } }, - "kwaipilot/kat-coder": { - "id": "kwaipilot/kat-coder", - "name": "KAT-Coder-Pro V1(Free)", + "qwen2-5-coder-7b-instruct": { + "id": "qwen2-5-coder-7b-instruct", + "name": "Qwen2.5-Coder 7B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2024-11", + "last_updated": "2024-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 256000, "output": 32000 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.144, + "output": 0.287 + } }, - "kwaipilot/kat-coder-pro": { - "id": "kwaipilot/kat-coder-pro", - "name": "Kat Coder Pro", + "qwen-turbo": { + "id": "qwen-turbo", + "name": "Qwen Turbo", + "family": "qwen", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-01-05", - "last_updated": "2026-01-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.06 }, - "limit": { "context": 256000, "output": 128000 } + "knowledge": "2024-04", + "release_date": "2024-11-01", + "last_updated": "2025-07-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 16384 + }, + "cost": { + "input": 0.044, + "output": 0.087, + "reasoning": 0.431 + } }, - "sao10k/l3-8b-lunaris": { - "id": "sao10k/l3-8b-lunaris", - "name": "Sao10k L3 8B Lunaris\t", + "qwen-mt-turbo": { + "id": "qwen-mt-turbo", + "name": "Qwen-MT Turbo", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": true, "temperature": true, - "release_date": "2024-11-28", - "last_updated": "2024-11-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.05, "output": 0.05 }, - "limit": { "context": 8192, "output": 8192 } + "knowledge": "2024-04", + "release_date": "2025-01", + "last_updated": "2025-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 16384, + "output": 8192 + }, + "cost": { + "input": 0.101, + "output": 0.28 + } }, - "sao10k/l3-70b-euryale-v2.1": { - "id": "sao10k/l3-70b-euryale-v2.1", - "name": "L3 70B Euryale V2.1\t", + "qwen2-5-math-72b-instruct": { + "id": "qwen2-5-math-72b-instruct", + "name": "Qwen2.5-Math 72B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2024-06-18", - "last_updated": "2024-06-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2024-09", + "last_updated": "2024-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1.48, "output": 1.48 }, - "limit": { "context": 8192, "output": 8192 } + "limit": { + "context": 4096, + "output": 3072 + }, + "cost": { + "input": 0.574, + "output": 1.721 + } }, - "sao10k/l31-70b-euryale-v2.2": { - "id": "sao10k/l31-70b-euryale-v2.2", - "name": "L31 70B Euryale V2.2", + "qwen3.6-max-preview": { + "id": "qwen3.6-max-preview", + "name": "Qwen3.6 Max Preview", + "family": "qwen", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-09-19", - "last_updated": "2024-09-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1.48, "output": 1.48 }, - "limit": { "context": 8192, "output": 8192 } + "release_date": "2026-04-20", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 245800, + "output": 65536 + }, + "cost": { + "input": 1.32, + "output": 7.9, + "cache_read": 0.132 + } }, - "sao10k/L3-8B-Stheno-v3.2": { - "id": "sao10k/L3-8B-Stheno-v3.2", - "name": "L3 8B Stheno V3.2", + "qwen2-5-omni-7b": { + "id": "qwen2-5-omni-7b", + "name": "Qwen2.5-Omni 7B", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2024-11-29", - "last_updated": "2024-11-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2024-12", + "last_updated": "2024-12", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text", "audio"] + }, "open_weights": true, - "cost": { "input": 0.05, "output": 0.05 }, - "limit": { "context": 8192, "output": 32000 } + "limit": { + "context": 32768, + "output": 2048 + }, + "cost": { + "input": 0.087, + "output": 0.345, + "input_audio": 5.448 + } }, - "deepseek/deepseek-r1-turbo": { - "id": "deepseek/deepseek-r1-turbo", - "name": "DeepSeek R1 (Turbo)\t", + "qwen3.5-plus": { + "id": "qwen3.5-plus", + "name": "Qwen3.5 Plus", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-03-05", - "last_updated": "2025-03-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.7, "output": 2.5 }, - "limit": { "context": 64000, "output": 16000 } + "knowledge": "2025-04", + "release_date": "2026-02-16", + "last_updated": "2026-02-16", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.573, + "output": 3.44, + "reasoning": 3.44 + } }, - "deepseek/deepseek-v3.1-terminus": { - "id": "deepseek/deepseek-v3.1-terminus", - "name": "Deepseek V3.1 Terminus", - "family": "deepseek", + "deepseek-r1-distill-qwen-14b": { + "id": "deepseek-r1-distill-qwen-14b", + "name": "DeepSeek R1 Distill Qwen 14B", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-09-22", - "last_updated": "2025-09-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.27, "output": 1, "cache_read": 0.135 }, - "limit": { "context": 131072, "output": 32768 } + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "output": 16384 + }, + "cost": { + "input": 0.144, + "output": 0.431 + } }, - "deepseek/deepseek-r1-distill-llama-70b": { - "id": "deepseek/deepseek-r1-distill-llama-70b", - "name": "DeepSeek R1 Distill LLama 70B", - "family": "deepseek-thinking", + "qwen2-5-vl-72b-instruct": { + "id": "qwen2-5-vl-72b-instruct", + "name": "Qwen2.5-VL 72B Instruct", + "family": "qwen", "attachment": false, - "reasoning": true, - "tool_call": false, - "structured_output": true, + "reasoning": false, + "tool_call": true, "temperature": true, - "release_date": "2025-01-27", - "last_updated": "2025-01-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2024-09", + "last_updated": "2024-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.8, "output": 0.8 }, - "limit": { "context": 8192, "output": 8192 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 2.294, + "output": 6.881 + } }, - "deepseek/deepseek-v3-0324": { - "id": "deepseek/deepseek-v3-0324", - "name": "DeepSeek V3 0324", + "deepseek-v3": { + "id": "deepseek-v3", + "name": "DeepSeek V3", "family": "deepseek", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-03-25", - "last_updated": "2025-03-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.27, "output": 1.12, "cache_read": 0.135 }, - "limit": { "context": 163840, "output": 163840 } + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 65536, + "output": 8192 + }, + "cost": { + "input": 0.287, + "output": 1.147 + } }, - "deepseek/deepseek-prover-v2-671b": { - "id": "deepseek/deepseek-prover-v2-671b", - "name": "Deepseek Prover V2 671B", + "deepseek-r1-0528": { + "id": "deepseek-r1-0528", + "name": "DeepSeek R1 0528", + "family": "deepseek-thinking", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-04-30", - "last_updated": "2025-04-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.7, "output": 2.5 }, - "limit": { "context": 160000, "output": 160000 } + "release_date": "2025-05-28", + "last_updated": "2025-05-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.574, + "output": 2.294 + } }, - "deepseek/deepseek-r1-0528-qwen3-8b": { - "id": "deepseek/deepseek-r1-0528-qwen3-8b", - "name": "DeepSeek R1 0528 Qwen3 8B", + "qvq-max": { + "id": "qvq-max", + "name": "QVQ Max", + "family": "qvq", "attachment": false, "reasoning": true, - "tool_call": false, + "tool_call": true, "temperature": true, - "release_date": "2025-05-29", - "last_updated": "2025-05-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.06, "output": 0.09 }, - "limit": { "context": 128000, "output": 32000 } - }, - "deepseek/deepseek-ocr-2": { - "id": "deepseek/deepseek-ocr-2", - "name": "deepseek/deepseek-ocr-2", - "attachment": true, - "reasoning": false, - "tool_call": false, - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2025-03-25", + "last_updated": "2025-03-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 1.147, + "output": 4.588 + } + }, + "kimi-k2-thinking": { + "id": "kimi-k2-thinking", + "name": "Moonshot Kimi K2 Thinking", + "family": "kimi", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": true, + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.03, "output": 0.03 }, - "limit": { "context": 8192, "output": 8192 } + "limit": { + "context": 262144, + "output": 16384 + }, + "cost": { + "input": 0.574, + "output": 2.294 + } }, - "deepseek/deepseek-v3-turbo": { - "id": "deepseek/deepseek-v3-turbo", - "name": "DeepSeek V3 (Turbo)\t", + "qwen3-14b": { + "id": "qwen3-14b", + "name": "Qwen3 14B", + "family": "qwen", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-03-05", - "last_updated": "2025-03-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.4, "output": 1.3 }, - "limit": { "context": 64000, "output": 16000 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.144, + "output": 0.574, + "reasoning": 1.434 + } }, - "deepseek/deepseek-v3.2-exp": { - "id": "deepseek/deepseek-v3.2-exp", - "name": "Deepseek V3.2 Exp", + "deepseek-r1-distill-llama-8b": { + "id": "deepseek-r1-distill-llama-8b", + "name": "DeepSeek R1 Distill Llama 8B", + "family": "deepseek-thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "qwen-long": { + "id": "qwen-long", + "name": "Qwen Long", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-01-25", + "last_updated": "2025-01-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 10000000, + "output": 8192 + }, + "cost": { + "input": 0.072, + "output": 0.287 + } + }, + "kimi/kimi-k2.5": { + "id": "kimi/kimi-k2.5", + "name": "kimi/kimi-k2.5", + "family": "kimi", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, + "temperature": false, + "knowledge": "2025-01", + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 3, + "cache_read": 0.1 + } + }, + "MiniMax/MiniMax-M2.7": { + "id": "MiniMax/MiniMax-M2.7", + "name": "MiniMax-M2.7", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.27, "output": 0.41 }, - "limit": { "context": 163840, "output": 65536 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.06, + "cache_write": 0.375 + } }, - "deepseek/deepseek-ocr": { - "id": "deepseek/deepseek-ocr", - "name": "DeepSeek-OCR", - "attachment": true, + "siliconflow/deepseek-v3-0324": { + "id": "siliconflow/deepseek-v3-0324", + "name": "siliconflow/deepseek-v3-0324", + "family": "deepseek", + "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-10-24", - "last_updated": "2025-10-24", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.03, "output": 0.03 }, - "limit": { "context": 8192, "output": 8192 } + "release_date": "2024-12-26", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 163840, + "output": 163840 + }, + "cost": { + "input": 0.25, + "output": 1 + } }, - "deepseek/deepseek-v3.1": { - "id": "deepseek/deepseek-v3.1", - "name": "DeepSeek V3.1", + "siliconflow/deepseek-v3.2": { + "id": "siliconflow/deepseek-v3.2", + "name": "siliconflow/deepseek-v3.2", "family": "deepseek", "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-08-21", - "last_updated": "2025-08-21", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.27, "output": 1, "cache_read": 0.135 }, - "limit": { "context": 131072, "output": 32768 } + "release_date": "2025-12-03", + "last_updated": "2025-12-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 163840, + "output": 65536 + }, + "cost": { + "input": 0.27, + "output": 0.42 + } }, - "deepseek/deepseek-r1-0528": { - "id": "deepseek/deepseek-r1-0528", - "name": "DeepSeek R1 0528", + "siliconflow/deepseek-r1-0528": { + "id": "siliconflow/deepseek-r1-0528", + "name": "siliconflow/deepseek-r1-0528", "family": "deepseek-thinking", "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2024-07", "release_date": "2025-05-28", - "last_updated": "2025-05-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.7, "output": 2.5, "cache_read": 0.35 }, - "limit": { "context": 163840, "output": 32768 } + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 163840, + "output": 32768 + }, + "cost": { + "input": 0.5, + "output": 2.18 + } }, - "deepseek/deepseek-v3.2": { - "id": "deepseek/deepseek-v3.2", - "name": "Deepseek V3.2", + "siliconflow/deepseek-v3.1-terminus": { + "id": "siliconflow/deepseek-v3.1-terminus", + "name": "siliconflow/deepseek-v3.1-terminus", "family": "deepseek", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.269, "output": 0.4, "cache_read": 0.1345 }, - "limit": { "context": 163840, "output": 65536 } + "release_date": "2025-09-29", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 163840, + "output": 65536 + }, + "cost": { + "input": 0.27, + "output": 1 + } }, - "zai-org/glm-4.7-flash": { - "id": "zai-org/glm-4.7-flash", - "name": "GLM-4.7-Flash", - "family": "glm", + "qwen3-coder-plus": { + "id": "qwen3-coder-plus", + "name": "Qwen3 Coder Plus", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, "knowledge": "2025-04", - "release_date": "2026-01-19", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.07, "output": 0.4, "cache_read": 0.01 }, - "limit": { "context": 200000, "output": 128000 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1, + "output": 5 + } }, - "zai-org/autoglm-phone-9b-multilingual": { - "id": "zai-org/autoglm-phone-9b-multilingual", - "name": "AutoGLM-Phone-9B-Multilingual", - "attachment": true, - "reasoning": false, - "tool_call": false, + "deepseek-v4-flash": { + "id": "deepseek-v4-flash", + "name": "DeepSeek V4 Flash", + "family": "deepseek-flash", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-12-10", - "last_updated": "2025-12-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.035, "output": 0.138 }, - "limit": { "context": 65536, "output": 65536 } + "limit": { + "context": 1000000, + "output": 384000 + }, + "cost": { + "input": 0.14, + "output": 0.28, + "cache_read": 0.028 + } }, - "zai-org/glm-4.5": { - "id": "zai-org/glm-4.5", - "name": "GLM-4.5", - "family": "glm", + "deepseek-v4-pro": { + "id": "deepseek-v4-pro", + "name": "DeepSeek V4 Pro", + "family": "deepseek-thinking", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 2.2, "cache_read": 0.11 }, - "limit": { "context": 131072, "output": 98304 } - }, - "zai-org/glm-4.6": { - "id": "zai-org/glm-4.6", - "name": "GLM 4.6", - "family": "glm", + "limit": { + "context": 1000000, + "output": 384000 + }, + "cost": { + "input": 1.74, + "output": 3.48, + "cache_read": 0.145 + } + } + } + }, + "firepass": { + "id": "firepass", + "env": ["FIREPASS_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.fireworks.ai/inference/v1/", + "name": "Fireworks (Firepass)", + "doc": "https://docs.fireworks.ai/firepass", + "models": { + "accounts/fireworks/routers/kimi-k2p6-turbo": { + "id": "accounts/fireworks/routers/kimi-k2p6-turbo", + "name": "Kimi K2.6 Turbo", + "family": "kimi-thinking", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-17", + "last_updated": "2026-04-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.55, "output": 2.2, "cache_read": 0.11 }, - "limit": { "context": 204800, "output": 131072 } - }, - "zai-org/glm-4.6v": { - "id": "zai-org/glm-4.6v", - "name": "GLM 4.6V", - "family": "glmv", - "attachment": true, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } + } + } + }, + "minimax-cn-coding-plan": { + "id": "minimax-cn-coding-plan", + "env": ["MINIMAX_API_KEY"], + "npm": "@ai-sdk/anthropic", + "api": "https://api.minimaxi.com/anthropic/v1", + "name": "MiniMax Coding Plan (minimaxi.com)", + "doc": "https://platform.minimaxi.com/docs/coding-plan/intro", + "models": { + "MiniMax-M2": { + "id": "MiniMax-M2", + "name": "MiniMax-M2", + "family": "minimax", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-08", - "last_updated": "2025-12-08", - "modalities": { "input": ["text", "video", "image"], "output": ["text"] }, + "release_date": "2025-10-27", + "last_updated": "2025-10-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 0.9, "cache_read": 0.055 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 196608, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "zai-org/glm-5": { - "id": "zai-org/glm-5", - "name": "GLM-5", - "family": "glm", + "MiniMax-M2.5": { + "id": "MiniMax-M2.5", + "name": "MiniMax-M2.5", + "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, "temperature": true, - "release_date": "2026-02-11", + "release_date": "2026-02-12", "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1, "output": 3.2, "cache_read": 0.2 }, - "limit": { "context": 202800, "output": 131072 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "zai-org/glm-4.5-air": { - "id": "zai-org/glm-4.5-air", - "name": "GLM 4.5 Air", - "family": "glm-air", + "MiniMax-M2.7": { + "id": "MiniMax-M2.7", + "name": "MiniMax-M2.7", + "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-10-13", - "last_updated": "2025-10-13", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.13, "output": 0.85 }, - "limit": { "context": 131072, "output": 98304 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "zai-org/glm-4.5v": { - "id": "zai-org/glm-4.5v", - "name": "GLM 4.5V", - "family": "glmv", - "attachment": true, + "MiniMax-M2.7-highspeed": { + "id": "MiniMax-M2.7-highspeed", + "name": "MiniMax-M2.7-highspeed", + "family": "minimax", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-08-11", - "last_updated": "2025-08-11", - "modalities": { "input": ["text", "video", "image"], "output": ["text"] }, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 1.8, "cache_read": 0.11 }, - "limit": { "context": 65536, "output": 16384 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "zai-org/glm-4.7": { - "id": "zai-org/glm-4.7", - "name": "GLM-4.7", - "family": "glm", + "MiniMax-M2.1": { + "id": "MiniMax-M2.1", + "name": "MiniMax-M2.1", + "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, "temperature": true, - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 2.2, "cache_read": 0.11 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gryphe/mythomax-l2-13b": { - "id": "gryphe/mythomax-l2-13b", - "name": "Mythomax L2 13B", + "MiniMax-M2.5-highspeed": { + "id": "MiniMax-M2.5-highspeed", + "name": "MiniMax-M2.5-highspeed", + "family": "minimax", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2024-04-25", - "last_updated": "2024-04-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-13", + "last_updated": "2026-02-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.09, "output": 0.09 }, - "limit": { "context": 4096, "output": 3200 } - }, - "google/gemma-3-27b-it": { - "id": "google/gemma-3-27b-it", - "name": "Gemma 3 27B", - "family": "gemma", + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + } + } + }, + "jiekou": { + "id": "jiekou", + "env": ["JIEKOU_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.jiekou.ai/openai", + "name": "Jiekou.AI", + "doc": "https://docs.jiekou.ai/docs/support/quickstart?utm_source=github_models.dev", + "models": { + "gpt-5.1-codex-max": { + "id": "gpt-5.1-codex-max", + "name": "gpt-5.1-codex-max", + "family": "gpt-codex", "attachment": true, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-03-25", - "last_updated": "2025-03-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.119, "output": 0.2 }, - "limit": { "context": 98304, "output": 16384 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.125, + "output": 9 + } }, - "skywork/r1v4-lite": { - "id": "skywork/r1v4-lite", - "name": "Skywork R1V4-Lite", - "family": "skywork", + "grok-4-1-fast-reasoning": { + "id": "grok-4-1-fast-reasoning", + "name": "grok-4-1-fast-reasoning", + "family": "grok", "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-11-18", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.6 }, - "limit": { "context": 262144, "output": 65536 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 2000000 + }, + "cost": { + "input": 0.18, + "output": 0.45 + } }, - "baidu/ernie-4.5-21B-a3b-thinking": { - "id": "baidu/ernie-4.5-21B-a3b-thinking", - "name": "ERNIE-4.5-21B-A3B-Thinking", - "family": "ernie", - "attachment": false, - "reasoning": true, - "tool_call": false, + "claude-opus-4-5-20251101": { + "id": "claude-opus-4-5-20251101", + "name": "claude-opus-4-5-20251101", + "family": "claude-opus", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-09-19", - "last_updated": "2025-09-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.07, "output": 0.28 }, - "limit": { "context": 131072, "output": 65536 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 65536 + }, + "cost": { + "input": 4.5, + "output": 22.5 + } }, - "baidu/ernie-4.5-vl-28b-a3b-thinking": { - "id": "baidu/ernie-4.5-vl-28b-a3b-thinking", - "name": "ERNIE-4.5-VL-28B-A3B-Thinking", + "gemini-2.5-flash-lite-preview-09-2025": { + "id": "gemini-2.5-flash-lite-preview-09-2025", + "name": "gemini-2.5-flash-lite-preview-09-2025", + "family": "gemini-flash-lite", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-11-26", - "last_updated": "2025-11-26", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.39, "output": 0.39 }, - "limit": { "context": 131072, "output": 65536 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.09, + "output": 0.36 + } }, - "baidu/ernie-4.5-vl-28b-a3b": { - "id": "baidu/ernie-4.5-vl-28b-a3b", - "name": "ERNIE 4.5 VL 28B A3B", + "gpt-5.2-pro": { + "id": "gpt-5.2-pro", + "name": "gpt-5.2-pro", + "family": "gpt-pro", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-06-30", - "last_updated": "2025-06-30", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1.4, "output": 5.6 }, - "limit": { "context": 30000, "output": 8000 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 18.9, + "output": 151.2 + } }, - "baidu/ernie-4.5-21B-a3b": { - "id": "baidu/ernie-4.5-21B-a3b", - "name": "ERNIE 4.5 21B A3B", - "family": "ernie", - "attachment": false, + "gemini-3-flash-preview": { + "id": "gemini-3-flash-preview", + "name": "gemini-3-flash-preview", + "family": "gemini-flash", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-06-30", - "last_updated": "2025-06-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.07, "output": 0.28 }, - "limit": { "context": 120000, "output": 8000 } - }, - "baidu/ernie-4.5-300b-a47b-paddle": { - "id": "baidu/ernie-4.5-300b-a47b-paddle", - "name": "ERNIE 4.5 300B A47B", - "attachment": false, - "reasoning": false, - "tool_call": false, "structured_output": true, "temperature": true, - "release_date": "2025-06-30", - "last_updated": "2025-06-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.28, "output": 1.1 }, - "limit": { "context": 123000, "output": 12000 } - }, - "baidu/ernie-4.5-vl-424b-a47b": { - "id": "baidu/ernie-4.5-vl-424b-a47b", - "name": "ERNIE 4.5 VL 424B A47B", - "attachment": true, - "reasoning": true, - "tool_call": false, - "temperature": true, - "release_date": "2025-06-30", - "last_updated": "2025-06-30", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.42, "output": 1.25 }, - "limit": { "context": 123000, "output": 16000 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 3 + } }, - "minimaxai/minimax-m1-80k": { - "id": "minimaxai/minimax-m1-80k", - "name": "MiniMax M1", - "family": "minimax", - "attachment": false, + "gpt-5-mini": { + "id": "gpt-5-mini", + "name": "gpt-5-mini", + "family": "gpt-mini", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.55, "output": 2.2 }, - "limit": { "context": 1000000, "output": 40000 } - }, - "meta-llama/llama-3.3-70b-instruct": { - "id": "meta-llama/llama-3.3-70b-instruct", - "name": "Llama 3.3 70B Instruct", - "family": "llama", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-12-07", - "last_updated": "2024-12-07", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.135, "output": 0.4 }, - "limit": { "context": 131072, "output": 120000 } - }, - "meta-llama/llama-3.1-8b-instruct": { - "id": "meta-llama/llama-3.1-8b-instruct", - "name": "Llama 3.1 8B Instruct", - "family": "llama", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2024-07-24", - "last_updated": "2024-07-24", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.02, "output": 0.05 }, - "limit": { "context": 16384, "output": 16384 } - }, - "meta-llama/llama-4-scout-17b-16e-instruct": { - "id": "meta-llama/llama-4-scout-17b-16e-instruct", - "name": "Llama 4 Scout Instruct", - "attachment": true, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-04-06", - "last_updated": "2025-04-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.18, "output": 0.59 }, - "limit": { "context": 131072, "output": 131072 } - }, - "meta-llama/llama-3-8b-instruct": { - "id": "meta-llama/llama-3-8b-instruct", - "name": "Llama 3 8B Instruct", - "family": "llama", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2024-04-25", - "last_updated": "2024-04-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.04, "output": 0.04 }, - "limit": { "context": 8192, "output": 8192 } - }, - "meta-llama/llama-3-70b-instruct": { - "id": "meta-llama/llama-3-70b-instruct", - "name": "Llama3 70B Instruct", - "family": "llama", - "attachment": false, - "reasoning": false, - "tool_call": false, "structured_output": true, "temperature": true, - "release_date": "2024-04-25", - "last_updated": "2024-04-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.51, "output": 0.74 }, - "limit": { "context": 8192, "output": 8000 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.225, + "output": 1.8 + } }, - "meta-llama/llama-4-maverick-17b-128e-instruct-fp8": { - "id": "meta-llama/llama-4-maverick-17b-128e-instruct-fp8", - "name": "Llama 4 Maverick Instruct", + "gpt-5-nano": { + "id": "gpt-5-nano", + "name": "gpt-5-nano", + "family": "gpt-nano", "attachment": true, "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-04-06", - "last_updated": "2025-04-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.27, "output": 0.85 }, - "limit": { "context": 1048576, "output": 8192 } - }, - "nousresearch/hermes-2-pro-llama-3-8b": { - "id": "nousresearch/hermes-2-pro-llama-3-8b", - "name": "Hermes 2 Pro Llama 3 8B", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2024-06-27", - "last_updated": "2024-06-27", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.14, "output": 0.14 }, - "limit": { "context": 8192, "output": 8192 } - }, - "minimax/minimax-m2": { - "id": "minimax/minimax-m2", - "name": "MiniMax-M2", - "family": "minimax", - "attachment": false, - "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "structured_output": true, "temperature": true, - "release_date": "2025-10-27", - "last_updated": "2025-10-27", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.03 }, - "limit": { "context": 204800, "output": 131072 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.045, + "output": 0.36 + } }, - "minimax/minimax-m2.1": { - "id": "minimax/minimax-m2.1", - "name": "Minimax M2.1", - "family": "minimax", - "attachment": false, + "gemini-3-pro-preview": { + "id": "gemini-3-pro-preview", + "name": "gemini-3-pro-preview", + "family": "gemini-pro", + "attachment": true, "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.03 }, - "limit": { "context": 204800, "output": 131072 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.8, + "output": 10.8 + } }, - "minimax/minimax-m2.5": { - "id": "minimax/minimax-m2.5", - "name": "MiniMax M2.5", - "family": "minimax", - "attachment": false, - "reasoning": true, + "gemini-2.5-flash-preview-05-20": { + "id": "gemini-2.5-flash-preview-05-20", + "name": "gemini-2.5-flash-preview-05-20", + "family": "gemini-flash", + "attachment": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.03 }, - "limit": { "context": 204800, "output": 131100 } + "limit": { + "context": 1048576, + "output": 200000 + }, + "cost": { + "input": 0.135, + "output": 3.15 + } }, - "qwen/qwen3-coder-30b-a3b-instruct": { - "id": "qwen/qwen3-coder-30b-a3b-instruct", - "name": "Qwen3 Coder 30b A3B Instruct", - "attachment": false, + "claude-sonnet-4-5-20250929": { + "id": "claude-sonnet-4-5-20250929", + "name": "claude-sonnet-4-5-20250929", + "family": "claude-sonnet", + "attachment": true, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-10-09", - "last_updated": "2025-10-09", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.07, "output": 0.27 }, - "limit": { "context": 160000, "output": 32768 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 2.7, + "output": 13.5 + } }, - "qwen/qwen3-235b-a22b-instruct-2507": { - "id": "qwen/qwen3-235b-a22b-instruct-2507", - "name": "Qwen3 235B A22B Instruct 2507", - "family": "qwen", - "attachment": false, + "gemini-2.5-pro": { + "id": "gemini-2.5-pro", + "name": "gemini-2.5-pro", + "family": "gemini-pro", + "attachment": true, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-22", - "last_updated": "2025-07-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.09, "output": 0.58 }, - "limit": { "context": 131072, "output": 16384 } - }, - "qwen/qwen-mt-plus": { - "id": "qwen/qwen-mt-plus", - "name": "Qwen MT Plus", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-09-03", - "last_updated": "2025-09-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.25, "output": 0.75 }, - "limit": { "context": 16384, "output": 8192 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65535 + }, + "cost": { + "input": 1.125, + "output": 9 + } }, - "qwen/qwen3-vl-235b-a22b-instruct": { - "id": "qwen/qwen3-vl-235b-a22b-instruct", - "name": "Qwen3 VL 235B A22B Instruct", + "grok-4-1-fast-non-reasoning": { + "id": "grok-4-1-fast-non-reasoning", + "name": "grok-4-1-fast-non-reasoning", + "family": "grok", "attachment": true, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-09-24", - "last_updated": "2025-09-24", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.5 }, - "limit": { "context": 131072, "output": 32768 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 2000000 + }, + "cost": { + "input": 0.18, + "output": 0.45 + } }, - "qwen/qwen3-coder-next": { - "id": "qwen/qwen3-coder-next", - "name": "Qwen3 Coder Next", - "family": "qwen", - "attachment": false, + "gpt-5.2": { + "id": "gpt-5.2", + "name": "gpt-5.2", + "family": "gpt", + "attachment": true, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2026-02-03", - "last_updated": "2026-02-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 1.5 }, - "limit": { "context": 262144, "output": 65536 } - }, - "qwen/qwen3-8b-fp8": { - "id": "qwen/qwen3-8b-fp8", - "name": "Qwen3 8B", - "attachment": false, - "reasoning": true, - "tool_call": false, - "temperature": true, - "release_date": "2025-04-29", - "last_updated": "2025-04-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.035, "output": 0.138 }, - "limit": { "context": 128000, "output": 20000 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.575, + "output": 12.6 + } }, - "qwen/qwen3-omni-30b-a3b-instruct": { - "id": "qwen/qwen3-omni-30b-a3b-instruct", - "name": "Qwen3 Omni 30B A3B Instruct", - "family": "qwen", + "o4-mini": { + "id": "o4-mini", + "name": "o4-mini", + "family": "o", "attachment": true, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-09-24", - "last_updated": "2025-09-24", - "modalities": { "input": ["text", "video", "audio", "image"], "output": ["text", "audio"] }, - "open_weights": true, - "cost": { "input": 0.25, "output": 0.97, "input_audio": 2.2, "output_audio": 1.788 }, - "limit": { "context": 65536, "output": 16384 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4 + } }, - "qwen/qwen2.5-7b-instruct": { - "id": "qwen/qwen2.5-7b-instruct", - "name": "Qwen2.5 7B Instruct", - "attachment": false, + "gemini-2.5-pro-preview-06-05": { + "id": "gemini-2.5-pro-preview-06-05", + "name": "gemini-2.5-pro-preview-06-05", + "family": "gemini-pro", + "attachment": true, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.07, "output": 0.07 }, - "limit": { "context": 32000, "output": 32000 } - }, - "qwen/qwen3-30b-a3b-fp8": { - "id": "qwen/qwen3-30b-a3b-fp8", - "name": "Qwen3 30B A3B", - "attachment": false, - "reasoning": true, - "tool_call": false, - "temperature": true, - "release_date": "2025-04-29", - "last_updated": "2025-04-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.09, "output": 0.45 }, - "limit": { "context": 40960, "output": 20000 } - }, - "qwen/qwen3-235b-a22b-fp8": { - "id": "qwen/qwen3-235b-a22b-fp8", - "name": "Qwen3 235B A22B", - "attachment": false, - "reasoning": true, - "tool_call": false, - "temperature": true, - "release_date": "2025-04-29", - "last_updated": "2025-04-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.8 }, - "limit": { "context": 40960, "output": 20000 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 200000 + }, + "cost": { + "input": 1.125, + "output": 9 + } }, - "qwen/qwen2.5-vl-72b-instruct": { - "id": "qwen/qwen2.5-vl-72b-instruct", - "name": "Qwen2.5 VL 72B Instruct", - "family": "qwen", + "gemini-2.5-flash-lite-preview-06-17": { + "id": "gemini-2.5-flash-lite-preview-06-17", + "name": "gemini-2.5-flash-lite-preview-06-17", + "family": "gemini-flash-lite", "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-03-25", - "last_updated": "2025-03-25", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.8, "output": 0.8 }, - "limit": { "context": 32768, "output": 32768 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "video", "image", "audio"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65535 + }, + "cost": { + "input": 0.09, + "output": 0.36 + } }, - "qwen/qwen3-vl-8b-instruct": { - "id": "qwen/qwen3-vl-8b-instruct", - "name": "qwen/qwen3-vl-8b-instruct", + "gpt-5.2-codex": { + "id": "gpt-5.2-codex", + "name": "gpt-5.2-codex", + "family": "gpt-codex", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-10-17", - "last_updated": "2025-10-17", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.08, "output": 0.5 }, - "limit": { "context": 131072, "output": 32768 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14 + } }, - "qwen/qwen3-coder-480b-a35b-instruct": { - "id": "qwen/qwen3-coder-480b-a35b-instruct", - "name": "Qwen3 Coder 480B A35B Instruct", - "family": "qwen", - "attachment": false, + "gemini-2.5-flash": { + "id": "gemini-2.5-flash", + "name": "gemini-2.5-flash", + "family": "gemini-flash", + "attachment": true, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.3 }, - "limit": { "context": 262144, "output": 65536 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65535 + }, + "cost": { + "input": 0.27, + "output": 2.25 + } }, - "qwen/qwen3-next-80b-a3b-thinking": { - "id": "qwen/qwen3-next-80b-a3b-thinking", - "name": "Qwen3 Next 80B A3B Thinking", - "attachment": false, + "gpt-5.1-codex-mini": { + "id": "gpt-5.1-codex-mini", + "name": "gpt-5.1-codex-mini", + "family": "gpt-codex", + "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-09-10", - "last_updated": "2025-09-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 1.5 }, - "limit": { "context": 131072, "output": 32768 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.225, + "output": 1.8 + } }, - "qwen/qwen3-vl-30b-a3b-instruct": { - "id": "qwen/qwen3-vl-30b-a3b-instruct", - "name": "qwen/qwen3-vl-30b-a3b-instruct", + "grok-code-fast-1": { + "id": "grok-code-fast-1", + "name": "grok-code-fast-1", + "family": "grok", "attachment": true, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-10-11", - "last_updated": "2025-10-11", - "modalities": { "input": ["text", "video", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.7 }, - "limit": { "context": 131072, "output": 32768 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.18, + "output": 1.35 + } }, - "qwen/qwen3-235b-a22b-thinking-2507": { - "id": "qwen/qwen3-235b-a22b-thinking-2507", - "name": "Qwen3 235B A22b Thinking 2507", - "family": "qwen", - "attachment": false, + "gpt-5.1": { + "id": "gpt-5.1", + "name": "gpt-5.1", + "family": "gpt", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-25", - "last_updated": "2025-07-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 3 }, - "limit": { "context": 131072, "output": 32768 } + "release_date": "2026-02", + "last_updated": "2026-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.125, + "output": 9 + } }, - "qwen/qwen3-next-80b-a3b-instruct": { - "id": "qwen/qwen3-next-80b-a3b-instruct", - "name": "Qwen3 Next 80B A3B Instruct", - "attachment": false, + "grok-4-fast-reasoning": { + "id": "grok-4-fast-reasoning", + "name": "grok-4-fast-reasoning", + "family": "grok", + "attachment": true, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-09-10", - "last_updated": "2025-09-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 1.5 }, - "limit": { "context": 131072, "output": 32768 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 2000000 + }, + "cost": { + "input": 0.18, + "output": 0.45 + } }, - "qwen/qwen3-omni-30b-a3b-thinking": { - "id": "qwen/qwen3-omni-30b-a3b-thinking", - "name": "Qwen3 Omni 30B A3B Thinking", + "o3-mini": { + "id": "o3-mini", + "name": "o3-mini", + "family": "o", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-09-24", - "last_updated": "2025-09-24", - "modalities": { "input": ["text", "audio", "video", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.25, "output": 0.97, "input_audio": 2.2, "output_audio": 1.788 }, - "limit": { "context": 65536, "output": 16384 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 1.1, + "output": 4.4 + } }, - "qwen/qwen3-vl-30b-a3b-thinking": { - "id": "qwen/qwen3-vl-30b-a3b-thinking", - "name": "qwen/qwen3-vl-30b-a3b-thinking", + "grok-4-0709": { + "id": "grok-4-0709", + "name": "grok-4-0709", + "family": "grok", "attachment": true, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-10-11", - "last_updated": "2025-10-11", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 1 }, - "limit": { "context": 131072, "output": 32768 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 8192 + }, + "cost": { + "input": 2.7, + "output": 13.5 + } }, - "qwen/qwen3-32b-fp8": { - "id": "qwen/qwen3-32b-fp8", - "name": "Qwen3 32B", - "attachment": false, - "reasoning": true, - "tool_call": false, + "gpt-5-codex": { + "id": "gpt-5-codex", + "name": "gpt-5-codex", + "family": "gpt-codex", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-04-29", - "last_updated": "2025-04-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.45 }, - "limit": { "context": 40960, "output": 20000 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.125, + "output": 9 + } }, - "qwen/qwen3.5-397b-a17b": { - "id": "qwen/qwen3.5-397b-a17b", - "name": "Qwen3.5-397B-A17B", - "family": "qwen", + "claude-opus-4-1-20250805": { + "id": "claude-opus-4-1-20250805", + "name": "claude-opus-4-1-20250805", + "family": "claude-opus", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2026-02-17", - "last_updated": "2026-02-17", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 3.6 }, - "limit": { "context": 262144, "output": 64000 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 13.5, + "output": 67.5 + } }, - "qwen/qwen3-max": { - "id": "qwen/qwen3-max", - "name": "Qwen3 Max", - "family": "qwen", - "attachment": false, + "claude-haiku-4-5-20251001": { + "id": "claude-haiku-4-5-20251001", + "name": "claude-haiku-4-5-20251001", + "family": "claude-haiku", + "attachment": true, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-24", - "last_updated": "2025-09-24", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.11, "output": 8.45 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 20000, + "output": 64000 + }, + "cost": { + "input": 0.9, + "output": 4.5 + } }, - "qwen/qwen3-4b-fp8": { - "id": "qwen/qwen3-4b-fp8", - "name": "Qwen3 4B", - "attachment": false, - "reasoning": true, - "tool_call": false, + "claude-sonnet-4-20250514": { + "id": "claude-sonnet-4-20250514", + "name": "claude-sonnet-4-20250514", + "family": "claude-sonnet", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-04-29", - "last_updated": "2025-04-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.03, "output": 0.03 }, - "limit": { "context": 128000, "output": 20000 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 2.7, + "output": 13.5 + } }, - "qwen/qwen3-vl-235b-a22b-thinking": { - "id": "qwen/qwen3-vl-235b-a22b-thinking", - "name": "Qwen3 VL 235B A22B Thinking", + "claude-opus-4-6": { + "id": "claude-opus-4-6", + "name": "claude-opus-4-6", + "family": "claude-opus", "attachment": true, "reasoning": true, - "tool_call": false, - "temperature": true, - "release_date": "2025-09-24", - "last_updated": "2025-09-24", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.98, "output": 3.95 }, - "limit": { "context": 131072, "output": 32768 } - }, - "qwen/qwen-2.5-72b-instruct": { - "id": "qwen/qwen-2.5-72b-instruct", - "name": "Qwen 2.5 72B Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-10-15", - "last_updated": "2024-10-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.38, "output": 0.4 }, - "limit": { "context": 32000, "output": 8192 } + "knowledge": "2025-05-31", + "release_date": "2026-02", + "last_updated": "2026-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25 + } }, - "baichuan/baichuan-m2-32b": { - "id": "baichuan/baichuan-m2-32b", - "name": "baichuan-m2-32b", - "family": "baichuan", - "attachment": false, + "o3": { + "id": "o3", + "name": "o3", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-08-13", - "last_updated": "2025-08-13", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.07, "output": 0.07 }, - "limit": { "context": 131072, "output": 131072 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 10, + "output": 40 + } }, - "moonshotai/kimi-k2-thinking": { - "id": "moonshotai/kimi-k2-thinking", - "name": "Kimi K2 Thinking", - "family": "kimi", - "attachment": false, + "gpt-5-pro": { + "id": "gpt-5-pro", + "name": "gpt-5-pro", + "family": "gpt-pro", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "release_date": "2025-11-07", - "last_updated": "2025-11-07", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.5 }, - "limit": { "context": 262144, "output": 262144 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 272000 + }, + "cost": { + "input": 13.5, + "output": 108 + } }, - "moonshotai/kimi-k2.5": { - "id": "moonshotai/kimi-k2.5", - "name": "Kimi K2.5", - "family": "kimi", + "gemini-2.5-flash-lite": { + "id": "gemini-2.5-flash-lite", + "name": "gemini-2.5-flash-lite", + "family": "gemini-flash-lite", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 3, "cache_read": 0.1 }, - "limit": { "context": 262144, "output": 262144 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65535 + }, + "cost": { + "input": 0.09, + "output": 0.36 + } }, - "moonshotai/kimi-k2-0905": { - "id": "moonshotai/kimi-k2-0905", - "name": "Kimi K2 0905", - "family": "kimi", - "attachment": false, + "gpt-5-chat-latest": { + "id": "gpt-5-chat-latest", + "name": "gpt-5-chat-latest", + "family": "gpt", + "attachment": true, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.5 }, - "limit": { "context": 262144, "output": 262144 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.125, + "output": 9 + } }, - "moonshotai/kimi-k2-instruct": { - "id": "moonshotai/kimi-k2-instruct", - "name": "Kimi K2 Instruct", - "attachment": false, + "claude-opus-4-20250514": { + "id": "claude-opus-4-20250514", + "name": "claude-opus-4-20250514", + "family": "claude-opus", + "attachment": true, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-07-11", - "last_updated": "2025-07-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.57, "output": 2.3 }, - "limit": { "context": 131072, "output": 131072 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 13.5, + "output": 67.5 + } }, - "xiaomimimo/mimo-v2-flash": { - "id": "xiaomimimo/mimo-v2-flash", - "name": "XiaomiMiMo/MiMo-V2-Flash", - "family": "mimo", - "attachment": false, + "gpt-5.1-codex": { + "id": "gpt-5.1-codex", + "name": "gpt-5.1-codex", + "family": "gpt-codex", + "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-12-19", - "last_updated": "2025-12-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.3, "cache_read": 0.3 }, - "limit": { "context": 262144, "output": 32000 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.125, + "output": 9 + } }, - "mistralai/mistral-nemo": { - "id": "mistralai/mistral-nemo", - "name": "Mistral Nemo", - "family": "mistral-nemo", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2024-07-30", - "last_updated": "2024-07-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.04, "output": 0.17 }, - "limit": { "context": 60288, "output": 16000 } - } - } - }, - "cortecs": { - "id": "cortecs", - "env": ["CORTECS_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.cortecs.ai/v1", - "name": "Cortecs", - "doc": "https://api.cortecs.ai/v1/models", - "models": { - "claude-4-6-sonnet": { - "id": "claude-4-6-sonnet", - "name": "Claude Sonnet 4.6", - "family": "claude-sonnet", + "grok-4-fast-non-reasoning": { + "id": "grok-4-fast-non-reasoning", + "name": "grok-4-fast-non-reasoning", + "family": "grok", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-08", - "release_date": "2026-02-17", - "last_updated": "2026-03-13", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3.59, "output": 17.92 }, - "limit": { "context": 1000000, "output": 1000000 } + "limit": { + "context": 2000000, + "output": 2000000 + }, + "cost": { + "input": 0.18, + "output": 0.45 + } }, - "deepseek-v3-0324": { - "id": "deepseek-v3-0324", + "deepseek/deepseek-v3-0324": { + "id": "deepseek/deepseek-v3-0324", "name": "DeepSeek V3 0324", "family": "deepseek", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-03-24", - "last_updated": "2025-03-24", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.551, "output": 1.654 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 163840, + "output": 163840 + }, + "cost": { + "input": 0.28, + "output": 1.14 + } }, - "kimi-k2-thinking": { - "id": "kimi-k2-thinking", - "name": "Kimi K2 Thinking", - "attachment": true, + "deepseek/deepseek-v3.1": { + "id": "deepseek/deepseek-v3.1", + "name": "DeepSeek V3.1", + "family": "deepseek", + "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "structured_output": true, "temperature": true, - "knowledge": "2025-12", - "release_date": "2025-12-08", - "last_updated": "2025-12-08", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.656, "output": 2.731 }, - "limit": { "context": 262000, "output": 262000 } + "limit": { + "context": 163840, + "output": 32768 + }, + "cost": { + "input": 0.27, + "output": 1 + } }, - "devstral-2512": { - "id": "devstral-2512", - "name": "Devstral 2 2512", + "deepseek/deepseek-r1-0528": { + "id": "deepseek/deepseek-r1-0528", + "name": "DeepSeek R1 0528", + "family": "deepseek-thinking", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-12", - "release_date": "2025-12-09", - "last_updated": "2025-12-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262000, "output": 262000 } + "limit": { + "context": 163840, + "output": 32768 + }, + "cost": { + "input": 0.7, + "output": 2.5 + } }, - "kimi-k2.5": { - "id": "kimi-k2.5", - "name": "Kimi K2.5", - "family": "kimi-thinking", + "zai-org/glm-4.7": { + "id": "zai-org/glm-4.7", + "name": "GLM-4.7", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.55, "output": 2.76 }, - "limit": { "context": 256000, "output": 256000 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 2.2 + } }, - "llama-3.1-405b-instruct": { - "id": "llama-3.1-405b-instruct", - "name": "Llama 3.1 405B Instruct", - "family": "llama", + "zai-org/glm-4.5": { + "id": "zai-org/glm-4.5", + "name": "GLM-4.5", + "family": "glm", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 131072, + "output": 98304 + }, + "cost": { + "input": 0.6, + "output": 2.2 + } }, - "glm-4.7-flash": { - "id": "glm-4.7-flash", + "zai-org/glm-4.5v": { + "id": "zai-org/glm-4.5v", + "name": "GLM 4.5V", + "family": "glmv", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 65536, + "output": 16384 + }, + "cost": { + "input": 0.6, + "output": 1.8 + } + }, + "zai-org/glm-4.7-flash": { + "id": "zai-org/glm-4.7-flash", "name": "GLM-4.7-Flash", "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-08-08", - "last_updated": "2025-08-08", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.09, "output": 0.53 }, - "limit": { "context": 203000, "output": 203000 } + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 0.07, + "output": 0.4 + } }, - "gpt-4.1": { - "id": "gpt-4.1", - "name": "GPT 4.1", - "family": "gpt", + "minimaxai/minimax-m1-80k": { + "id": "minimaxai/minimax-m1-80k", + "name": "MiniMax M1", + "family": "minimax", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-06", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.354, "output": 9.417 }, - "limit": { "context": 1047576, "output": 32768 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 40000 + }, + "cost": { + "input": 0.55, + "output": 2.2 + } }, - "minimax-m2": { - "id": "minimax-m2", - "name": "MiniMax-M2", - "family": "minimax", + "xiaomimimo/mimo-v2-flash": { + "id": "xiaomimimo/mimo-v2-flash", + "name": "XiaomiMiMo/MiMo-V2-Flash", + "family": "mimo", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "structured_output": true, "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-10-27", - "last_updated": "2025-10-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.39, "output": 1.57 }, - "limit": { "context": 400000, "output": 400000 } + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gpt-oss-120b": { - "id": "gpt-oss-120b", - "name": "GPT Oss 120b", - "family": "gpt-oss", - "attachment": false, - "reasoning": false, + "baidu/ernie-4.5-vl-424b-a47b": { + "id": "baidu/ernie-4.5-vl-424b-a47b", + "name": "ERNIE 4.5 VL 424B A47B", + "family": "ernie", + "attachment": true, + "reasoning": true, "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-01", - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 123000, + "output": 16000 + }, + "cost": { + "input": 0.42, + "output": 1.25 + } }, - "glm-4.5": { - "id": "glm-4.5", - "name": "GLM 4.5", - "family": "glm", + "baidu/ernie-4.5-300b-a47b-paddle": { + "id": "baidu/ernie-4.5-300b-a47b-paddle", + "name": "ERNIE 4.5 300B A47B", + "family": "ernie", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-29", - "last_updated": "2025-07-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.67, "output": 2.46 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 123000, + "output": 12000 + }, + "cost": { + "input": 0.28, + "output": 1.1 + } }, - "minimax-m2.1": { - "id": "minimax-m2.1", - "name": "MiniMax-M2.1", + "minimax/minimax-m2.1": { + "id": "minimax/minimax-m2.1", + "name": "Minimax M2.1", "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "structured_output": true, "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.34, "output": 1.34 }, - "limit": { "context": 196000, "output": 196000 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "qwen3-coder-480b-a35b-instruct": { - "id": "qwen3-coder-480b-a35b-instruct", - "name": "Qwen3 Coder 480B A35B Instruct", + "qwen/qwen3-235b-a22b-instruct-2507": { + "id": "qwen/qwen3-235b-a22b-instruct-2507", + "name": "Qwen3 235B A22B Instruct 2507", "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-07-25", - "last_updated": "2025-07-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.441, "output": 1.984 }, - "limit": { "context": 262000, "output": 262000 } + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.8 + } }, - "qwen3-next-80b-a3b-thinking": { - "id": "qwen3-next-80b-a3b-thinking", - "name": "Qwen3 Next 80B A3B Thinking", + "qwen/qwen3-32b-fp8": { + "id": "qwen/qwen3-32b-fp8", + "name": "Qwen3 32B", + "family": "qwen", "attachment": false, "reasoning": true, - "tool_call": true, + "tool_call": false, + "structured_output": false, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-11", - "last_updated": "2025-09-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.164, "output": 1.311 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 40960, + "output": 20000 + }, + "cost": { + "input": 0.1, + "output": 0.45 + } }, - "gemini-2.5-pro": { - "id": "gemini-2.5-pro", - "name": "Gemini 2.5 Pro", - "family": "gemini-pro", + "qwen/qwen3-235b-a22b-thinking-2507": { + "id": "qwen/qwen3-235b-a22b-thinking-2507", + "name": "Qwen3 235B A22b Thinking 2507", + "family": "qwen", "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-03-20", - "last_updated": "2025-06-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.654, "output": 11.024 }, - "limit": { "context": 1048576, "output": 65535 } - }, - "claude-opus4-5": { - "id": "claude-opus4-5", - "name": "Claude Opus 4.5", - "family": "claude-opus", - "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-11-24", - "last_updated": "2025-11-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 5.98, "output": 29.89 }, - "limit": { "context": 200000, "output": 200000 } - }, - "nova-pro-v1": { - "id": "nova-pro-v1", - "name": "Nova Pro 1.0", - "family": "nova-pro", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-12-03", - "last_updated": "2024-12-03", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.016, "output": 4.061 }, - "limit": { "context": 300000, "output": 5000 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 3 + } }, - "claude-sonnet-4": { - "id": "claude-sonnet-4", - "name": "Claude Sonnet 4", - "family": "claude-sonnet", + "qwen/qwen3-next-80b-a3b-thinking": { + "id": "qwen/qwen3-next-80b-a3b-thinking", + "name": "Qwen3 Next 80B A3B Thinking", + "family": "qwen", "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3.307, "output": 16.536 }, - "limit": { "context": 200000, "output": 64000 } - }, - "intellect-3": { - "id": "intellect-3", - "name": "INTELLECT 3", - "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-11", - "release_date": "2025-11-26", - "last_updated": "2025-11-26", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.219, "output": 1.202 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 65536, + "output": 65536 + }, + "cost": { + "input": 0.15, + "output": 1.5 + } }, - "glm-4.5-air": { - "id": "glm-4.5-air", - "name": "GLM 4.5 Air", - "family": "glm-air", + "qwen/qwen3-next-80b-a3b-instruct": { + "id": "qwen/qwen3-next-80b-a3b-instruct", + "name": "Qwen3 Next 80B A3B Instruct", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-08-01", - "last_updated": "2025-08-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.22, "output": 1.34 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 65536, + "output": 65536 + }, + "cost": { + "input": 0.15, + "output": 1.5 + } }, - "glm-4.7": { - "id": "glm-4.7", - "name": "GLM 4.7", - "family": "glm", + "qwen/qwen3-30b-a3b-fp8": { + "id": "qwen/qwen3-30b-a3b-fp8", + "name": "Qwen3 30B A3B", + "family": "qwen", "attachment": false, "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "tool_call": false, + "structured_output": false, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.45, "output": 2.23 }, - "limit": { "context": 198000, "output": 198000 } + "limit": { + "context": 40960, + "output": 20000 + }, + "cost": { + "input": 0.09, + "output": 0.45 + } }, - "devstral-small-2512": { - "id": "devstral-small-2512", - "name": "Devstral Small 2 2512", + "qwen/qwen3-coder-next": { + "id": "qwen/qwen3-coder-next", + "name": "qwen/qwen3-coder-next", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-12", - "release_date": "2025-12-09", - "last_updated": "2025-12-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-02", + "last_updated": "2026-02", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262000, "output": 262000 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.2, + "output": 1.5 + } }, - "qwen3-32b": { - "id": "qwen3-32b", - "name": "Qwen3 32B", + "qwen/qwen3-coder-480b-a35b-instruct": { + "id": "qwen/qwen3-coder-480b-a35b-instruct", + "name": "Qwen3 Coder 480B A35B Instruct", "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-04-29", - "last_updated": "2025-04-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.099, "output": 0.33 }, - "limit": { "context": 16384, "output": 16384 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.29, + "output": 1.2 + } }, - "claude-opus4-6": { - "id": "claude-opus4-6", - "name": "Claude Opus 4.6", - "family": "claude-opus", - "attachment": true, + "qwen/qwen3-235b-a22b-fp8": { + "id": "qwen/qwen3-235b-a22b-fp8", + "name": "Qwen3 235B A22B", + "family": "qwen", + "attachment": false, "reasoning": true, - "tool_call": true, + "tool_call": false, + "structured_output": false, "temperature": true, - "knowledge": "2025-05", - "release_date": "2026-02-05", - "last_updated": "2026-03-13", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 5.98, "output": 29.89 }, - "limit": { "context": 1000000, "output": 1000000 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 40960, + "output": 20000 + }, + "cost": { + "input": 0.2, + "output": 0.8 + } }, - "claude-haiku-4-5": { - "id": "claude-haiku-4-5", - "name": "Claude Haiku 4.5", - "family": "claude-haiku", + "moonshotai/kimi-k2.5": { + "id": "moonshotai/kimi-k2.5", + "name": "Kimi K2.5", + "family": "kimi", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-02-28", - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.09, "output": 5.43 }, - "limit": { "context": 200000, "output": 200000 } - }, - "minimax-m2.5": { - "id": "minimax-m2.5", - "name": "MiniMax-M2.5", - "family": "minimax", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.32, "output": 1.18 }, - "limit": { "context": 196608, "output": 196608 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 3 + } }, - "kimi-k2-instruct": { - "id": "kimi-k2-instruct", + "moonshotai/kimi-k2-instruct": { + "id": "moonshotai/kimi-k2-instruct", "name": "Kimi K2 Instruct", "family": "kimi", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-07-11", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.551, "output": 2.646 }, - "limit": { "context": 131000, "output": 131000 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.57, + "output": 2.3 + } }, - "claude-4-5-sonnet": { - "id": "claude-4-5-sonnet", - "name": "Claude 4.5 Sonnet", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, + "moonshotai/kimi-k2-0905": { + "id": "moonshotai/kimi-k2-0905", + "name": "Kimi K2 0905", + "family": "kimi", + "attachment": false, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3.259, "output": 16.296 }, - "limit": { "context": 200000, "output": 200000 } + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 2.5 + } } } }, - "siliconflow-cn": { - "id": "siliconflow-cn", - "env": ["SILICONFLOW_CN_API_KEY"], + "bailing": { + "id": "bailing", + "env": ["BAILING_API_TOKEN"], "npm": "@ai-sdk/openai-compatible", - "api": "https://api.siliconflow.cn/v1", - "name": "SiliconFlow (China)", - "doc": "https://cloud.siliconflow.com/models", + "api": "https://api.tbox.cn/api/llm/v1/chat/completions", + "name": "Bailing", + "doc": "https://alipaytbox.yuque.com/sxs0ba/ling/intro", "models": { - "THUDM/GLM-4-9B-0414": { - "id": "THUDM/GLM-4-9B-0414", - "name": "THUDM/GLM-4-9B-0414", - "family": "glm", + "Ring-1T": { + "id": "Ring-1T", + "name": "Ring-1T", + "family": "ring", + "attachment": false, + "reasoning": true, + "tool_call": false, + "temperature": true, + "knowledge": "2024-06", + "release_date": "2025-10", + "last_updated": "2025-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32000 + }, + "cost": { + "input": 0.57, + "output": 2.29 + } + }, + "Ling-1T": { + "id": "Ling-1T", + "name": "Ling-1T", + "family": "ling", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-04-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.086, "output": 0.086 }, - "limit": { "context": 33000, "output": 33000 } - }, - "THUDM/GLM-4-32B-0414": { - "id": "THUDM/GLM-4-32B-0414", - "name": "THUDM/GLM-4-32B-0414", - "family": "glm", + "knowledge": "2024-06", + "release_date": "2025-10", + "last_updated": "2025-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32000 + }, + "cost": { + "input": 0.57, + "output": 2.29 + } + } + } + }, + "iflowcn": { + "id": "iflowcn", + "env": ["IFLOW_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://apis.iflow.cn/v1", + "name": "iFlow", + "doc": "https://platform.iflow.cn/en/docs", + "models": { + "qwen3-coder-plus": { + "id": "qwen3-coder-plus", + "name": "Qwen3-Coder-Plus", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-04-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.27, "output": 0.27 }, - "limit": { "context": 33000, "output": 33000 } + "knowledge": "2025-04", + "release_date": "2025-07-01", + "last_updated": "2025-07-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "THUDM/GLM-Z1-9B-0414": { - "id": "THUDM/GLM-Z1-9B-0414", - "name": "THUDM/GLM-Z1-9B-0414", - "family": "glm-z", + "qwen3-32b": { + "id": "qwen3-32b", + "name": "Qwen3-32B", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-04-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.086, "output": 0.086 }, - "limit": { "context": 131000, "output": 131000 } + "knowledge": "2024-10", + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "THUDM/GLM-Z1-32B-0414": { - "id": "THUDM/GLM-Z1-32B-0414", - "name": "THUDM/GLM-Z1-32B-0414", - "family": "glm-z", + "deepseek-r1": { + "id": "deepseek-r1", + "name": "DeepSeek-R1", + "family": "deepseek-thinking", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-04-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.14, "output": 0.57 }, - "limit": { "context": 131000, "output": 131000 } + "knowledge": "2024-12", + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "zai-org/GLM-4.6": { - "id": "zai-org/GLM-4.6", - "name": "zai-org/GLM-4.6", - "family": "glm", + "qwen3-max": { + "id": "qwen3-max", + "name": "Qwen3-Max", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-10-04", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 1.9 }, - "limit": { "context": 205000, "output": 205000 } + "limit": { + "context": 256000, + "output": 32000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "zai-org/GLM-4.5V": { - "id": "zai-org/GLM-4.5V", - "name": "zai-org/GLM-4.5V", - "family": "glm", - "attachment": true, + "qwen3-235b-a22b-instruct": { + "id": "qwen3-235b-a22b-instruct", + "name": "Qwen3-235B-A22B-Instruct", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-08-13", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.14, "output": 0.86 }, - "limit": { "context": 66000, "output": 66000 } + "knowledge": "2025-04", + "release_date": "2025-07-01", + "last_updated": "2025-07-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "zai-org/GLM-4.6V": { - "id": "zai-org/GLM-4.6V", - "name": "zai-org/GLM-4.6V", - "family": "glm", - "attachment": true, + "qwen3-235b-a22b-thinking-2507": { + "id": "qwen3-235b-a22b-thinking-2507", + "name": "Qwen3-235B-A22B-Thinking", + "family": "qwen", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": false, "temperature": true, - "release_date": "2025-12-07", - "last_updated": "2025-12-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 0.9 }, - "limit": { "context": 131000, "output": 131000 } + "knowledge": "2025-04", + "release_date": "2025-07-01", + "last_updated": "2025-07-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "zai-org/GLM-4.5-Air": { - "id": "zai-org/GLM-4.5-Air", - "name": "zai-org/GLM-4.5-Air", - "family": "glm-air", + "kimi-k2-0905": { + "id": "kimi-k2-0905", + "name": "Kimi-K2-0905", + "family": "kimi", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-07-28", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.14, "output": 0.86 }, - "limit": { "context": 131000, "output": 131000 } + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "stepfun-ai/Step-3.5-Flash": { - "id": "stepfun-ai/Step-3.5-Flash", - "name": "stepfun-ai/Step-3.5-Flash", - "family": "step", + "glm-4.6": { + "id": "glm-4.6", + "name": "GLM-4.6", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2024-12-01", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 262000, "output": 262000 } + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Pro/zai-org/GLM-4.7": { - "id": "Pro/zai-org/GLM-4.7", - "name": "Pro/zai-org/GLM-4.7", - "family": "glm", - "attachment": false, - "reasoning": true, + "qwen3-vl-plus": { + "id": "qwen3-vl-plus", + "name": "Qwen3-VL-Plus", + "family": "qwen", + "attachment": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, "temperature": true, - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.6, "output": 2.2 }, - "limit": { "context": 205000, "output": 205000 } - }, - "Pro/zai-org/GLM-5": { - "id": "Pro/zai-org/GLM-5", - "name": "Pro/zai-org/GLM-5", - "family": "glm", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, - "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1, "output": 3.2 }, - "limit": { "context": 205000, "output": 205000 } - }, - "Pro/MiniMaxAI/MiniMax-M2.1": { - "id": "Pro/MiniMaxAI/MiniMax-M2.1", - "name": "Pro/MiniMaxAI/MiniMax-M2.1", - "family": "minimax", - "attachment": false, - "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 197000, "output": 131000 } + "limit": { + "context": 256000, + "output": 32000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Pro/MiniMaxAI/MiniMax-M2.5": { - "id": "Pro/MiniMaxAI/MiniMax-M2.5", - "name": "Pro/MiniMaxAI/MiniMax-M2.5", - "family": "minimax", + "deepseek-v3.2": { + "id": "deepseek-v3.2", + "name": "DeepSeek-V3.2-Exp", + "family": "deepseek", "attachment": false, "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, "temperature": true, - "release_date": "2026-02-13", - "last_updated": "2026-02-13", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 1.22 }, - "limit": { "context": 192000, "output": 131000 } + "knowledge": "2024-12", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Pro/deepseek-ai/DeepSeek-R1": { - "id": "Pro/deepseek-ai/DeepSeek-R1", - "name": "Pro/deepseek-ai/DeepSeek-R1", - "family": "deepseek-thinking", + "qwen3-235b": { + "id": "qwen3-235b", + "name": "Qwen3-235B-A22B", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-05-28", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.5, "output": 2.18 }, - "limit": { "context": 164000, "output": 164000 } + "knowledge": "2024-10", + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Pro/deepseek-ai/DeepSeek-V3.1-Terminus": { - "id": "Pro/deepseek-ai/DeepSeek-V3.1-Terminus", - "name": "Pro/deepseek-ai/DeepSeek-V3.1-Terminus", - "family": "deepseek", + "kimi-k2": { + "id": "kimi-k2", + "name": "Kimi-K2", + "family": "kimi", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-09-29", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.27, "output": 1 }, - "limit": { "context": 164000, "output": 164000 } + "limit": { + "context": 128000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Pro/deepseek-ai/DeepSeek-V3.2": { - "id": "Pro/deepseek-ai/DeepSeek-V3.2", - "name": "Pro/deepseek-ai/DeepSeek-V3.2", - "family": "deepseek", + "qwen3-max-preview": { + "id": "qwen3-max-preview", + "name": "Qwen3-Max-Preview", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-12-03", - "last_updated": "2025-12-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.27, "output": 0.42 }, - "limit": { "context": 164000, "output": 164000 } + "limit": { + "context": 256000, + "output": 32000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Pro/deepseek-ai/DeepSeek-V3": { - "id": "Pro/deepseek-ai/DeepSeek-V3", - "name": "Pro/deepseek-ai/DeepSeek-V3", + "deepseek-v3": { + "id": "deepseek-v3", + "name": "DeepSeek-V3", "family": "deepseek", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, + "knowledge": "2024-10", "release_date": "2024-12-26", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 1 }, - "limit": { "context": 164000, "output": 164000 } - }, - "Pro/moonshotai/Kimi-K2.5": { - "id": "Pro/moonshotai/Kimi-K2.5", - "name": "Pro/moonshotai/Kimi-K2.5", - "family": "kimi", - "attachment": false, + "last_updated": "2024-12-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32000 + }, + "cost": { + "input": 0, + "output": 0 + } + } + } + }, + "v0": { + "id": "v0", + "env": ["V0_API_KEY"], + "npm": "@ai-sdk/vercel", + "name": "v0", + "doc": "https://sdk.vercel.ai/providers/ai-sdk-providers/vercel", + "models": { + "v0-1.5-lg": { + "id": "v0-1.5-lg", + "name": "v0-1.5-lg", + "family": "v0", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.55, "output": 3 }, - "limit": { "context": 262000, "output": 262000 } - }, - "Pro/moonshotai/Kimi-K2-Instruct-0905": { - "id": "Pro/moonshotai/Kimi-K2-Instruct-0905", - "name": "Pro/moonshotai/Kimi-K2-Instruct-0905", - "family": "kimi", - "attachment": false, - "reasoning": false, - "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-09-08", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-06-09", + "last_updated": "2025-06-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 262000, "output": 262000 } + "limit": { + "context": 512000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75 + } }, - "Pro/moonshotai/Kimi-K2-Thinking": { - "id": "Pro/moonshotai/Kimi-K2-Thinking", - "name": "Pro/moonshotai/Kimi-K2-Thinking", - "family": "kimi-thinking", - "attachment": false, + "v0-1.0-md": { + "id": "v0-1.0-md", + "name": "v0-1.0-md", + "family": "v0", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-11-07", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.55, "output": 2.5 }, - "limit": { "context": 262000, "output": 262000 } + "limit": { + "context": 128000, + "output": 32000 + }, + "cost": { + "input": 3, + "output": 15 + } }, - "baidu/ERNIE-4.5-300B-A47B": { - "id": "baidu/ERNIE-4.5-300B-A47B", - "name": "baidu/ERNIE-4.5-300B-A47B", - "family": "ernie", - "attachment": false, - "reasoning": false, + "v0-1.5-md": { + "id": "v0-1.5-md", + "name": "v0-1.5-md", + "family": "v0", + "attachment": true, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-07-02", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-06-09", + "last_updated": "2025-06-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.28, "output": 1.1 }, - "limit": { "context": 131000, "output": 131000 } - }, - "PaddlePaddle/PaddleOCR-VL-1.5": { - "id": "PaddlePaddle/PaddleOCR-VL-1.5", - "name": "PaddlePaddle/PaddleOCR-VL-1.5", - "attachment": true, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2026-01-29", - "last_updated": "2026-01-29", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 16384, "output": 16384 } - }, - "PaddlePaddle/PaddleOCR-VL": { - "id": "PaddlePaddle/PaddleOCR-VL", - "name": "PaddlePaddle/PaddleOCR-VL", - "attachment": true, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-10-16", - "last_updated": "2025-10-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 16384, "output": 16384 } - }, - "deepseek-ai/DeepSeek-OCR": { - "id": "deepseek-ai/DeepSeek-OCR", - "name": "deepseek-ai/DeepSeek-OCR", + "limit": { + "context": 128000, + "output": 32000 + }, + "cost": { + "input": 3, + "output": 15 + } + } + } + }, + "huggingface": { + "id": "huggingface", + "env": ["HF_TOKEN"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://router.huggingface.co/v1", + "name": "Hugging Face", + "doc": "https://huggingface.co/docs/inference-providers", + "models": { + "Qwen/Qwen3.5-397B-A17B": { + "id": "Qwen/Qwen3.5-397B-A17B", + "name": "Qwen3.5-397B-A17B", + "family": "qwen", "attachment": true, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-10-20", - "last_updated": "2025-10-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-02-01", + "last_updated": "2026-02-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 8192, "output": 8192 } + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0.6, + "output": 3.6 + } }, - "deepseek-ai/DeepSeek-V3": { - "id": "deepseek-ai/DeepSeek-V3", - "name": "deepseek-ai/DeepSeek-V3", - "family": "deepseek", + "Qwen/Qwen3-Coder-Next": { + "id": "Qwen/Qwen3-Coder-Next", + "name": "Qwen3-Coder-Next", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2024-12-26", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 1 }, - "limit": { "context": 164000, "output": 164000 } - }, - "deepseek-ai/DeepSeek-V3.2": { - "id": "deepseek-ai/DeepSeek-V3.2", - "name": "deepseek-ai/DeepSeek-V3.2", - "family": "deepseek", - "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-12-03", - "last_updated": "2025-12-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.27, "output": 0.42 }, - "limit": { "context": 164000, "output": 164000 } + "knowledge": "2025-04", + "release_date": "2026-02-03", + "last_updated": "2026-02-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.2, + "output": 1.5 + } }, - "deepseek-ai/DeepSeek-R1-Distill-Qwen-14B": { - "id": "deepseek-ai/DeepSeek-R1-Distill-Qwen-14B", - "name": "deepseek-ai/DeepSeek-R1-Distill-Qwen-14B", + "Qwen/Qwen3-Next-80B-A3B-Instruct": { + "id": "Qwen/Qwen3-Next-80B-A3B-Instruct", + "name": "Qwen3-Next-80B-A3B-Instruct", "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-01-20", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.1 }, - "limit": { "context": 131000, "output": 131000 } + "knowledge": "2025-04", + "release_date": "2025-09-11", + "last_updated": "2025-09-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 66536 + }, + "cost": { + "input": 0.25, + "output": 1 + } }, - "deepseek-ai/DeepSeek-V3.1-Terminus": { - "id": "deepseek-ai/DeepSeek-V3.1-Terminus", - "name": "deepseek-ai/DeepSeek-V3.1-Terminus", - "family": "deepseek", + "Qwen/Qwen3-Embedding-8B": { + "id": "Qwen/Qwen3-Embedding-8B", + "name": "Qwen 3 Embedding 8B", + "family": "qwen", "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-09-29", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.27, "output": 1 }, - "limit": { "context": 164000, "output": 164000 } + "reasoning": false, + "tool_call": false, + "temperature": false, + "knowledge": "2024-12", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32000, + "output": 4096 + }, + "cost": { + "input": 0.01, + "output": 0 + } }, - "deepseek-ai/DeepSeek-R1": { - "id": "deepseek-ai/DeepSeek-R1", - "name": "deepseek-ai/DeepSeek-R1", - "family": "deepseek-thinking", + "Qwen/Qwen3-235B-A22B-Thinking-2507": { + "id": "Qwen/Qwen3-235B-A22B-Thinking-2507", + "name": "Qwen3-235B-A22B-Thinking-2507", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-05-28", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.5, "output": 2.18 }, - "limit": { "context": 164000, "output": 164000 } + "knowledge": "2025-04", + "release_date": "2025-07-25", + "last_updated": "2025-07-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 3 + } }, - "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B": { - "id": "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B", - "name": "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B", + "Qwen/Qwen3-Next-80B-A3B-Thinking": { + "id": "Qwen/Qwen3-Next-80B-A3B-Thinking", + "name": "Qwen3-Next-80B-A3B-Thinking", "family": "qwen", "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-01-20", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.18, "output": 0.18 }, - "limit": { "context": 131000, "output": 131000 } - }, - "deepseek-ai/deepseek-vl2": { - "id": "deepseek-ai/deepseek-vl2", - "name": "deepseek-ai/deepseek-vl2", - "family": "deepseek", - "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-12-13", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.15, "output": 0.15 }, - "limit": { "context": 4000, "output": 4000 } + "knowledge": "2025-04", + "release_date": "2025-09-11", + "last_updated": "2025-09-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 2 + } }, - "ByteDance-Seed/Seed-OSS-36B-Instruct": { - "id": "ByteDance-Seed/Seed-OSS-36B-Instruct", - "name": "ByteDance-Seed/Seed-OSS-36B-Instruct", - "family": "seed", + "Qwen/Qwen3-Embedding-4B": { + "id": "Qwen/Qwen3-Embedding-4B", + "name": "Qwen 3 Embedding 4B", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-09-04", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.21, "output": 0.57 }, - "limit": { "context": 262000, "output": 262000 } + "tool_call": false, + "temperature": false, + "knowledge": "2024-12", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32000, + "output": 2048 + }, + "cost": { + "input": 0.01, + "output": 0 + } }, - "Qwen/Qwen3.5-35B-A3B": { - "id": "Qwen/Qwen3.5-35B-A3B", - "name": "Qwen/Qwen3.5-35B-A3B", + "Qwen/Qwen3-Coder-480B-A35B-Instruct": { + "id": "Qwen/Qwen3-Coder-480B-A35B-Instruct", + "name": "Qwen3-Coder-480B-A35B-Instruct", "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, "knowledge": "2025-04", - "release_date": "2026-02-25", - "last_updated": "2026-02-25", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.23, "output": 1.86 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 262144, + "output": 66536 + }, + "cost": { + "input": 2, + "output": 2 + } }, - "Qwen/Qwen3.5-397B-A17B": { - "id": "Qwen/Qwen3.5-397B-A17B", - "name": "Qwen/Qwen3.5-397B-A17B", - "family": "qwen", + "zai-org/GLM-4.7-Flash": { + "id": "zai-org/GLM-4.7-Flash", + "name": "GLM-4.7-Flash", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, "knowledge": "2025-04", - "release_date": "2026-02-16", - "last_updated": "2026-02-16", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2025-08-08", + "last_updated": "2025-08-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.29, "output": 1.74 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Qwen/Qwen3.5-122B-A10B": { - "id": "Qwen/Qwen3.5-122B-A10B", - "name": "Qwen/Qwen3.5-122B-A10B", - "family": "qwen", + "zai-org/GLM-4.7": { + "id": "zai-org/GLM-4.7", + "name": "GLM-4.7", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, "knowledge": "2025-04", - "release_date": "2026-02-26", - "last_updated": "2026-02-26", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.29, "output": 2.32 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 2.2, + "cache_read": 0.11 + } }, - "Qwen/Qwen3.5-9B": { - "id": "Qwen/Qwen3.5-9B", - "name": "Qwen/Qwen3.5-9B", - "family": "qwen", + "zai-org/GLM-5.1": { + "id": "zai-org/GLM-5.1", + "name": "GLM-5.1", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-03-03", - "last_updated": "2026-03-03", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2026-04-03", + "last_updated": "2026-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.22, "output": 1.74 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 202752, + "output": 131072 + }, + "cost": { + "input": 1, + "output": 3.2, + "cache_read": 0.2 + } }, - "Qwen/Qwen3.5-27B": { - "id": "Qwen/Qwen3.5-27B", - "name": "Qwen/Qwen3.5-27B", - "family": "qwen", + "zai-org/GLM-5": { + "id": "zai-org/GLM-5", + "name": "GLM-5", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-02-25", - "last_updated": "2026-02-25", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.26, "output": 2.09 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 202752, + "output": 131072 + }, + "cost": { + "input": 1, + "output": 3.2, + "cache_read": 0.2 + } }, - "Qwen/Qwen3.5-4B": { - "id": "Qwen/Qwen3.5-4B", - "name": "Qwen/Qwen3.5-4B", - "family": "qwen", + "XiaomiMiMo/MiMo-V2-Flash": { + "id": "XiaomiMiMo/MiMo-V2-Flash", + "name": "MiMo-V2-Flash", + "family": "mimo", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-03-03", - "last_updated": "2026-03-03", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2025-12-16", + "last_updated": "2025-12-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 262144, + "output": 4096 + }, + "cost": { + "input": 0.1, + "output": 0.3 + } }, - "Qwen/Qwen3-235B-A22B-Instruct-2507": { - "id": "Qwen/Qwen3-235B-A22B-Instruct-2507", - "name": "Qwen/Qwen3-235B-A22B-Instruct-2507", - "family": "qwen", + "deepseek-ai/DeepSeek-R1-0528": { + "id": "deepseek-ai/DeepSeek-R1-0528", + "name": "DeepSeek-R1-0528", + "family": "deepseek-thinking", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-07-23", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.09, "output": 0.6 }, - "limit": { "context": 262000, "output": 262000 } + "knowledge": "2025-05", + "release_date": "2025-05-28", + "last_updated": "2025-05-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 163840, + "output": 163840 + }, + "cost": { + "input": 3, + "output": 5 + } }, - "Qwen/Qwen2.5-32B-Instruct": { - "id": "Qwen/Qwen2.5-32B-Instruct", - "name": "Qwen/Qwen2.5-32B-Instruct", - "family": "qwen", + "deepseek-ai/DeepSeek-V3.2": { + "id": "deepseek-ai/DeepSeek-V3.2", + "name": "DeepSeek-V3.2", + "family": "deepseek", "attachment": false, - "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2024-09-19", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.18, "output": 0.18 }, - "limit": { "context": 33000, "output": 4000 } - }, - "Qwen/Qwen3-VL-32B-Thinking": { - "id": "Qwen/Qwen3-VL-32B-Thinking", - "name": "Qwen/Qwen3-VL-32B-Thinking", - "family": "qwen", - "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-10-21", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 1.5 }, - "limit": { "context": 262000, "output": 262000 } + "knowledge": "2024-07", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 163840, + "output": 65536 + }, + "cost": { + "input": 0.28, + "output": 0.4 + } }, - "Qwen/Qwen2.5-72B-Instruct": { - "id": "Qwen/Qwen2.5-72B-Instruct", - "name": "Qwen/Qwen2.5-72B-Instruct", - "family": "qwen", + "moonshotai/Kimi-K2-Thinking": { + "id": "moonshotai/Kimi-K2-Thinking", + "name": "Kimi-K2-Thinking", + "family": "kimi-thinking", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2024-09-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.59, "output": 0.59 }, - "limit": { "context": 33000, "output": 4000 } + "knowledge": "2024-08", + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 2.5, + "cache_read": 0.15 + } }, - "Qwen/Qwen3-VL-235B-A22B-Instruct": { - "id": "Qwen/Qwen3-VL-235B-A22B-Instruct", - "name": "Qwen/Qwen3-VL-235B-A22B-Instruct", - "family": "qwen", + "moonshotai/Kimi-K2.6": { + "id": "moonshotai/Kimi-K2.6", + "name": "Kimi-K2.6", + "family": "kimi", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-10-04", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 1.5 }, - "limit": { "context": 262000, "output": 262000 } + "knowledge": "2025-01", + "release_date": "2026-04-20", + "last_updated": "2026-04-20", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.95, + "output": 4, + "cache_read": 0.16 + } }, - "Qwen/Qwen2.5-7B-Instruct": { - "id": "Qwen/Qwen2.5-7B-Instruct", - "name": "Qwen/Qwen2.5-7B-Instruct", - "family": "qwen", + "moonshotai/Kimi-K2-Instruct": { + "id": "moonshotai/Kimi-K2-Instruct", + "name": "Kimi-K2-Instruct", + "family": "kimi", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2024-09-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.05, "output": 0.05 }, - "limit": { "context": 33000, "output": 4000 } - }, - "Qwen/Qwen3-Omni-30B-A3B-Instruct": { - "id": "Qwen/Qwen3-Omni-30B-A3B-Instruct", - "name": "Qwen/Qwen3-Omni-30B-A3B-Instruct", - "family": "qwen", - "attachment": true, - "reasoning": false, - "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-10-04", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image", "audio"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4 }, - "limit": { "context": 66000, "output": 66000 } + "knowledge": "2024-10", + "release_date": "2025-07-14", + "last_updated": "2025-07-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 1, + "output": 3 + } }, - "Qwen/Qwen3-30B-A3B-Instruct-2507": { - "id": "Qwen/Qwen3-30B-A3B-Instruct-2507", - "name": "Qwen/Qwen3-30B-A3B-Instruct-2507", - "family": "qwen", + "moonshotai/Kimi-K2-Instruct-0905": { + "id": "moonshotai/Kimi-K2-Instruct-0905", + "name": "Kimi-K2-Instruct-0905", + "family": "kimi", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-07-30", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.09, "output": 0.3 }, - "limit": { "context": 262000, "output": 262000 } + "knowledge": "2024-10", + "release_date": "2025-09-04", + "last_updated": "2025-09-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 16384 + }, + "cost": { + "input": 1, + "output": 3 + } }, - "Qwen/Qwen3-VL-32B-Instruct": { - "id": "Qwen/Qwen3-VL-32B-Instruct", - "name": "Qwen/Qwen3-VL-32B-Instruct", - "family": "qwen", + "moonshotai/Kimi-K2.5": { + "id": "moonshotai/Kimi-K2.5", + "name": "Kimi-K2.5", + "family": "kimi", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-10-21", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.6 }, - "limit": { "context": 262000, "output": 262000 } + "knowledge": "2025-01", + "release_date": "2026-01-01", + "last_updated": "2026-01-01", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 3, + "cache_read": 0.1 + } }, - "Qwen/Qwen3-Coder-480B-A35B-Instruct": { - "id": "Qwen/Qwen3-Coder-480B-A35B-Instruct", - "name": "Qwen/Qwen3-Coder-480B-A35B-Instruct", - "family": "qwen", + "MiniMaxAI/MiniMax-M2.5": { + "id": "MiniMaxAI/MiniMax-M2.5", + "name": "MiniMax-M2.5", + "family": "minimax", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-07-31", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 1 }, - "limit": { "context": 262000, "output": 262000 } + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.03 + } }, - "Qwen/QwQ-32B": { - "id": "Qwen/QwQ-32B", - "name": "Qwen/QwQ-32B", - "family": "qwen", + "MiniMaxAI/MiniMax-M2.7": { + "id": "MiniMaxAI/MiniMax-M2.7", + "name": "MiniMax-M2.7", + "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, "temperature": true, - "release_date": "2025-03-06", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.15, "output": 0.58 }, - "limit": { "context": 131000, "output": 131000 } + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.06 + } }, - "Qwen/Qwen3-8B": { - "id": "Qwen/Qwen3-8B", - "name": "Qwen/Qwen3-8B", - "family": "qwen", + "MiniMaxAI/MiniMax-M2.1": { + "id": "MiniMaxAI/MiniMax-M2.1", + "name": "MiniMax-M2.1", + "family": "minimax", "attachment": false, - "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-04-30", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.06, "output": 0.06 }, - "limit": { "context": 131000, "output": 131000 } - }, - "Qwen/Qwen3-VL-8B-Instruct": { - "id": "Qwen/Qwen3-VL-8B-Instruct", - "name": "Qwen/Qwen3-VL-8B-Instruct", - "family": "qwen", - "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-10-15", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.18, "output": 0.68 }, - "limit": { "context": 262000, "output": 262000 } + "knowledge": "2025-10", + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "Qwen/Qwen3-Coder-30B-A3B-Instruct": { - "id": "Qwen/Qwen3-Coder-30B-A3B-Instruct", - "name": "Qwen/Qwen3-Coder-30B-A3B-Instruct", - "family": "qwen", + "deepseek-ai/DeepSeek-V4-Pro": { + "id": "deepseek-ai/DeepSeek-V4-Pro", + "name": "DeepSeek V4 Pro", + "family": "deepseek-thinking", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, "temperature": true, - "release_date": "2025-08-01", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.07, "output": 0.28 }, - "limit": { "context": 262000, "output": 262000 } - }, - "Qwen/Qwen2.5-VL-32B-Instruct": { - "id": "Qwen/Qwen2.5-VL-32B-Instruct", - "name": "Qwen/Qwen2.5-VL-32B-Instruct", - "family": "qwen", - "attachment": true, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1048576, + "output": 393216 + }, + "cost": { + "input": 1.74, + "output": 3.48, + "cache_read": 0.145 + } + } + } + }, + "zenmux": { + "id": "zenmux", + "env": ["ZENMUX_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://zenmux.ai/api/v1", + "name": "ZenMux", + "doc": "https://docs.zenmux.ai", + "models": { + "deepseek/deepseek-chat": { + "id": "deepseek/deepseek-chat", + "name": "DeepSeek-V3.2 (Non-thinking Mode)", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-03-24", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.27, "output": 0.27 }, - "limit": { "context": 131000, "output": 131000 } + "limit": { + "context": 128000, + "output": 64000 + }, + "cost": { + "input": 0.28, + "output": 0.42, + "cache_read": 0.03 + } }, - "Qwen/Qwen3-VL-30B-A3B-Thinking": { - "id": "Qwen/Qwen3-VL-30B-A3B-Thinking", - "name": "Qwen/Qwen3-VL-30B-A3B-Thinking", - "family": "qwen", - "attachment": true, + "deepseek/deepseek-v3.2-exp": { + "id": "deepseek/deepseek-v3.2-exp", + "name": "DeepSeek-V3.2-Exp", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-10-11", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.29, "output": 1 }, - "limit": { "context": 262000, "output": 262000 } - }, - "Qwen/Qwen3-Omni-30B-A3B-Captioner": { - "id": "Qwen/Qwen3-Omni-30B-A3B-Captioner", - "name": "Qwen/Qwen3-Omni-30B-A3B-Captioner", - "family": "qwen", - "attachment": true, - "reasoning": false, - "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-10-04", - "last_updated": "2025-11-25", - "modalities": { "input": ["audio"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.4 }, - "limit": { "context": 66000, "output": 66000 } + "limit": { + "context": 163000, + "output": 64000 + }, + "cost": { + "input": 0.22, + "output": 0.33 + } }, - "Qwen/Qwen3-VL-8B-Thinking": { - "id": "Qwen/Qwen3-VL-8B-Thinking", - "name": "Qwen/Qwen3-VL-8B-Thinking", - "family": "qwen", - "attachment": true, + "deepseek/deepseek-v3.2": { + "id": "deepseek/deepseek-v3.2", + "name": "DeepSeek V3.2", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-10-15", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-12-05", + "last_updated": "2025-12-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.18, "output": 2 }, - "limit": { "context": 262000, "output": 262000 } + "limit": { + "context": 128000, + "output": 64000 + }, + "cost": { + "input": 0.28, + "output": 0.43 + } }, - "Qwen/Qwen2.5-VL-72B-Instruct": { - "id": "Qwen/Qwen2.5-VL-72B-Instruct", - "name": "Qwen/Qwen2.5-VL-72B-Instruct", - "family": "qwen", - "attachment": true, - "reasoning": false, + "inclusionai/ring-1t": { + "id": "inclusionai/ring-1t", + "name": "Ring-1T", + "attachment": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-01-28", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-10-12", + "last_updated": "2025-10-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.59, "output": 0.59 }, - "limit": { "context": 131000, "output": 4000 } + "limit": { + "context": 128000, + "output": 64000 + }, + "cost": { + "input": 0.56, + "output": 2.24, + "cache_read": 0.11 + } }, - "Qwen/Qwen3-Next-80B-A3B-Instruct": { - "id": "Qwen/Qwen3-Next-80B-A3B-Instruct", - "name": "Qwen/Qwen3-Next-80B-A3B-Instruct", - "family": "qwen", + "inclusionai/ling-1t": { + "id": "inclusionai/ling-1t", + "name": "Ling-1T", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-09-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-10-09", + "last_updated": "2025-10-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.14, "output": 1.4 }, - "limit": { "context": 262000, "output": 262000 } + "limit": { + "context": 128000, + "output": 64000 + }, + "cost": { + "input": 0.56, + "output": 2.24, + "cache_read": 0.11 + } }, - "Qwen/Qwen3-235B-A22B-Thinking-2507": { - "id": "Qwen/Qwen3-235B-A22B-Thinking-2507", - "name": "Qwen/Qwen3-235B-A22B-Thinking-2507", - "family": "qwen", + "stepfun/step-3.5-flash-free": { + "id": "stepfun/step-3.5-flash-free", + "name": "Step 3.5 Flash (Free)", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-07-28", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2026-02-02", + "last_updated": "2026-02-02", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.13, "output": 0.6 }, - "limit": { "context": 262000, "output": 262000 } + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Qwen/Qwen2.5-72B-Instruct-128K": { - "id": "Qwen/Qwen2.5-72B-Instruct-128K", - "name": "Qwen/Qwen2.5-72B-Instruct-128K", - "family": "qwen", + "stepfun/step-3.5-flash": { + "id": "stepfun/step-3.5-flash", + "name": "Step 3.5 Flash", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-09-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2026-02-02", + "last_updated": "2026-02-02", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.59, "output": 0.59 }, - "limit": { "context": 131000, "output": 4000 } + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 0.1, + "output": 0.3 + } }, - "Qwen/Qwen3-14B": { - "id": "Qwen/Qwen3-14B", - "name": "Qwen/Qwen3-14B", - "family": "qwen", - "attachment": false, - "reasoning": false, + "stepfun/step-3": { + "id": "stepfun/step-3", + "name": "Step-3", + "attachment": true, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-04-30", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-07-31", + "last_updated": "2025-07-31", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.07, "output": 0.28 }, - "limit": { "context": 131000, "output": 131000 } + "limit": { + "context": 65536, + "output": 64000 + }, + "cost": { + "input": 0.21, + "output": 0.57 + } }, - "Qwen/Qwen3-32B": { - "id": "Qwen/Qwen3-32B", - "name": "Qwen/Qwen3-32B", - "family": "qwen", + "kuaishou/kat-coder-pro-v2": { + "id": "kuaishou/kat-coder-pro-v2", + "name": "KAT-Coder-Pro-V2", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-04-30", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-30", + "last_updated": "2026-03-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.14, "output": 0.57 }, - "limit": { "context": 131000, "output": 131000 } + "limit": { + "context": 256000, + "output": 80000 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.06 + } }, - "Qwen/Qwen2.5-14B-Instruct": { - "id": "Qwen/Qwen2.5-14B-Instruct", - "name": "Qwen/Qwen2.5-14B-Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, + "x-ai/grok-4-fast": { + "id": "x-ai/grok-4-fast", + "name": "Grok 4 Fast", + "attachment": true, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-09-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-09-19", + "last_updated": "2025-09-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.1 }, - "limit": { "context": 33000, "output": 4000 } + "limit": { + "context": 2000000, + "output": 64000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } }, - "Qwen/Qwen3-30B-A3B-Thinking-2507": { - "id": "Qwen/Qwen3-30B-A3B-Thinking-2507", - "name": "Qwen/Qwen3-30B-A3B-Thinking-2507", - "family": "qwen", + "x-ai/grok-code-fast-1": { + "id": "x-ai/grok-code-fast-1", + "name": "Grok Code Fast 1", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-07-31", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-08-26", + "last_updated": "2025-08-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.09, "output": 0.3 }, - "limit": { "context": 262000, "output": 131000 } + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 0.2, + "output": 1.5, + "cache_read": 0.02 + } }, - "Qwen/Qwen3-VL-235B-A22B-Thinking": { - "id": "Qwen/Qwen3-VL-235B-A22B-Thinking", - "name": "Qwen/Qwen3-VL-235B-A22B-Thinking", - "family": "qwen", + "x-ai/grok-4.1-fast-non-reasoning": { + "id": "x-ai/grok-4.1-fast-non-reasoning", + "name": "Grok 4.1 Fast Non Reasoning", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-10-04", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-11-20", + "last_updated": "2025-11-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.45, "output": 3.5 }, - "limit": { "context": 262000, "output": 262000 } + "limit": { + "context": 2000000, + "output": 64000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } }, - "Qwen/Qwen3-VL-30B-A3B-Instruct": { - "id": "Qwen/Qwen3-VL-30B-A3B-Instruct", - "name": "Qwen/Qwen3-VL-30B-A3B-Instruct", - "family": "qwen", + "x-ai/grok-4": { + "id": "x-ai/grok-4", + "name": "Grok 4", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-10-05", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.29, "output": 1 }, - "limit": { "context": 262000, "output": 262000 } + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.75 + } }, - "Qwen/Qwen3-Next-80B-A3B-Thinking": { - "id": "Qwen/Qwen3-Next-80B-A3B-Thinking", - "name": "Qwen/Qwen3-Next-80B-A3B-Thinking", - "family": "qwen", - "attachment": false, + "x-ai/grok-4.1-fast": { + "id": "x-ai/grok-4.1-fast", + "name": "Grok 4.1 Fast", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-09-25", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-11-20", + "last_updated": "2025-11-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.14, "output": 0.57 }, - "limit": { "context": 262000, "output": 262000 } + "limit": { + "context": 2000000, + "output": 64000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } }, - "Qwen/Qwen3-Omni-30B-A3B-Thinking": { - "id": "Qwen/Qwen3-Omni-30B-A3B-Thinking", - "name": "Qwen/Qwen3-Omni-30B-A3B-Thinking", - "family": "qwen", + "x-ai/grok-4.2-fast": { + "id": "x-ai/grok-4.2-fast", + "name": "Grok 4.2 Fast", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-10-04", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image", "audio"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-03-20", + "last_updated": "2026-03-20", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.4 }, - "limit": { "context": 66000, "output": 66000 } + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 3, + "output": 9 + } }, - "Qwen/Qwen2.5-Coder-32B-Instruct": { - "id": "Qwen/Qwen2.5-Coder-32B-Instruct", - "name": "Qwen/Qwen2.5-Coder-32B-Instruct", - "family": "qwen", - "attachment": false, + "x-ai/grok-4.2-fast-non-reasoning": { + "id": "x-ai/grok-4.2-fast-non-reasoning", + "name": "Grok 4.2 Fast Non Reasoning", + "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2024-11-11", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.18, "output": 0.18 }, - "limit": { "context": 33000, "output": 4000 } - }, - "ascend-tribe/pangu-pro-moe": { - "id": "ascend-tribe/pangu-pro-moe", - "name": "ascend-tribe/pangu-pro-moe", - "family": "pangu", - "attachment": false, - "reasoning": true, - "tool_call": false, - "structured_output": true, "temperature": true, - "release_date": "2025-07-02", - "last_updated": "2026-01-16", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-03-20", + "last_updated": "2026-03-20", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.6 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 3, + "output": 9 + } }, - "inclusionAI/Ling-mini-2.0": { - "id": "inclusionAI/Ling-mini-2.0", - "name": "inclusionAI/Ling-mini-2.0", - "family": "ling", - "attachment": false, + "openai/gpt-5.3-chat": { + "id": "openai/gpt-5.3-chat", + "name": "GPT-5.3 Chat", + "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-09-10", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-03-20", + "last_updated": "2026-03-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.07, "output": 0.28 }, - "limit": { "context": 131000, "output": 131000 } + "limit": { + "context": 128000, + "output": 16380 + }, + "provider": { + "npm": "@ai-sdk/openai", + "api": "https://zenmux.ai/api/v1" + }, + "cost": { + "input": 1.75, + "output": 14 + } }, - "inclusionAI/Ring-flash-2.0": { - "id": "inclusionAI/Ring-flash-2.0", - "name": "inclusionAI/Ring-flash-2.0", - "family": "ring", - "attachment": false, + "openai/gpt-5.2-pro": { + "id": "openai/gpt-5.2-pro", + "name": "GPT-5.2-Pro", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-09-29", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.14, "output": 0.57 }, - "limit": { "context": 131000, "output": 131000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai", + "api": "https://zenmux.ai/api/v1" + }, + "cost": { + "input": 21, + "output": 168 + } }, - "inclusionAI/Ling-flash-2.0": { - "id": "inclusionAI/Ling-flash-2.0", - "name": "inclusionAI/Ling-flash-2.0", - "family": "ling", - "attachment": false, - "reasoning": false, + "openai/gpt-5.3-codex": { + "id": "openai/gpt-5.3-codex", + "name": "GPT-5.3 Codex", + "attachment": true, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-09-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-03-20", + "last_updated": "2026-03-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.14, "output": 0.57 }, - "limit": { "context": 131000, "output": 131000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai", + "api": "https://zenmux.ai/api/v1" + }, + "cost": { + "input": 1.75, + "output": 14 + } }, - "moonshotai/Kimi-K2-Thinking": { - "id": "moonshotai/Kimi-K2-Thinking", - "name": "moonshotai/Kimi-K2-Thinking", - "family": "kimi-thinking", - "attachment": false, + "openai/gpt-5.2": { + "id": "openai/gpt-5.2", + "name": "GPT-5.2", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-11-07", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-01-01", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["image", "text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.55, "output": 2.5 }, - "limit": { "context": 262000, "output": 262000 } + "limit": { + "context": 400000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/openai", + "api": "https://zenmux.ai/api/v1" + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.17 + } }, - "moonshotai/Kimi-K2-Instruct-0905": { - "id": "moonshotai/Kimi-K2-Instruct-0905", - "name": "moonshotai/Kimi-K2-Instruct-0905", - "family": "kimi", - "attachment": false, + "openai/gpt-5.4-mini": { + "id": "openai/gpt-5.4-mini", + "name": "GPT-5.4 Mini", + "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-09-08", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-03-20", + "last_updated": "2026-03-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 262000, "output": 262000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai", + "api": "https://zenmux.ai/api/v1" + }, + "cost": { + "input": 0.75, + "output": 4.5 + } }, - "tencent/Hunyuan-A13B-Instruct": { - "id": "tencent/Hunyuan-A13B-Instruct", - "name": "tencent/Hunyuan-A13B-Instruct", - "family": "hunyuan", - "attachment": false, + "openai/gpt-5.1-chat": { + "id": "openai/gpt-5.1-chat", + "name": "GPT-5.1 Chat", + "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-06-30", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["pdf", "image", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.14, "output": 0.57 }, - "limit": { "context": 131000, "output": 131000 } + "limit": { + "context": 128000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/openai", + "api": "https://zenmux.ai/api/v1" + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.12 + } }, - "tencent/Hunyuan-MT-7B": { - "id": "tencent/Hunyuan-MT-7B", - "name": "tencent/Hunyuan-MT-7B", - "family": "hunyuan", + "openai/gpt-5.4-nano": { + "id": "openai/gpt-5.4-nano", + "name": "GPT-5.4 Nano", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-09-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-03-20", + "last_updated": "2026-03-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 33000, "output": 33000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai", + "api": "https://zenmux.ai/api/v1" + }, + "cost": { + "input": 0.2, + "output": 1.25 + } }, - "Kwaipilot/KAT-Dev": { - "id": "Kwaipilot/KAT-Dev", - "name": "Kwaipilot/KAT-Dev", - "family": "kat-coder", - "attachment": false, - "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-09-27", - "last_updated": "2026-01-16", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.6 }, - "limit": { "context": 128000, "output": 128000 } - } - } - }, - "evroc": { - "id": "evroc", - "env": ["EVROC_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://models.think.evroc.com/v1", - "name": "evroc", - "doc": "https://docs.evroc.com/products/think/overview.html", - "models": { - "openai/gpt-oss-120b": { - "id": "openai/gpt-oss-120b", - "name": "GPT OSS 120B", - "family": "gpt-oss", - "attachment": false, + "openai/gpt-5.2-codex": { + "id": "openai/gpt-5.2-codex", + "name": "GPT-5.2-Codex", + "attachment": true, "reasoning": true, "tool_call": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.24, "output": 0.94 }, - "limit": { "context": 65536, "output": 65536 } - }, - "openai/whisper-large-v3": { - "id": "openai/whisper-large-v3", - "name": "Whisper 3 Large", - "family": "whisper", - "attachment": false, - "reasoning": false, - "tool_call": false, - "release_date": "2024-10-01", - "last_updated": "2024-10-01", - "modalities": { "input": ["audio"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.00236, "output": 0.00236, "output_audio": 2.36 }, - "limit": { "context": 448, "output": 4096 } - }, - "microsoft/Phi-4-multimodal-instruct": { - "id": "microsoft/Phi-4-multimodal-instruct", - "name": "Phi-4 15B", - "family": "phi", - "attachment": false, - "reasoning": false, - "tool_call": false, - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.24, "output": 0.47 }, - "limit": { "context": 32000, "output": 32000 } - }, - "nvidia/Llama-3.3-70B-Instruct-FP8": { - "id": "nvidia/Llama-3.3-70B-Instruct-FP8", - "name": "Llama 3.3 70B", - "family": "llama", - "attachment": false, - "reasoning": false, - "tool_call": false, - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1.18, "output": 1.18 }, - "limit": { "context": 131072, "output": 32768 } - }, - "intfloat/multilingual-e5-large-instruct": { - "id": "intfloat/multilingual-e5-large-instruct", - "name": "E5 Multi-Lingual Large Embeddings 0.6B", - "family": "text-embedding", - "attachment": false, - "reasoning": false, - "tool_call": false, - "release_date": "2024-06-01", - "last_updated": "2024-06-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.12, "output": 0.12 }, - "limit": { "context": 512, "output": 512 } - }, - "KBLab/kb-whisper-large": { - "id": "KBLab/kb-whisper-large", - "name": "KB Whisper", - "family": "whisper", - "attachment": false, - "reasoning": false, - "tool_call": false, - "release_date": "2024-10-01", - "last_updated": "2024-10-01", - "modalities": { "input": ["audio"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.00236, "output": 0.00236, "output_audio": 2.36 }, - "limit": { "context": 448, "output": 448 } - }, - "Qwen/Qwen3-VL-30B-A3B-Instruct": { - "id": "Qwen/Qwen3-VL-30B-A3B-Instruct", - "name": "Qwen3 VL 30B", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": true, - "release_date": "2025-07-30", - "last_updated": "2025-07-30", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.24, "output": 0.94 }, - "limit": { "context": 100000, "output": 100000 } - }, - "Qwen/Qwen3-30B-A3B-Instruct-2507-FP8": { - "id": "Qwen/Qwen3-30B-A3B-Instruct-2507-FP8", - "name": "Qwen3 30B 2507", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": true, - "release_date": "2025-07-30", - "last_updated": "2025-07-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.35, "output": 1.42 }, - "limit": { "context": 64000, "output": 64000 } - }, - "Qwen/Qwen3-Embedding-8B": { - "id": "Qwen/Qwen3-Embedding-8B", - "name": "Qwen3 Embedding 8B", - "family": "text-embedding", - "attachment": false, - "reasoning": false, - "tool_call": false, - "release_date": "2025-07-30", - "last_updated": "2025-07-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.12, "output": 0.12 }, - "limit": { "context": 40960, "output": 40960 } + "temperature": false, + "knowledge": "2025-01-01", + "release_date": "2026-01-15", + "last_updated": "2026-01-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/openai", + "api": "https://zenmux.ai/api/v1" + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.17 + } }, - "moonshotai/Kimi-K2.5": { - "id": "moonshotai/Kimi-K2.5", - "name": "Kimi K2.5", - "family": "kimi", - "attachment": false, + "openai/gpt-5.1-codex-mini": { + "id": "openai/gpt-5.1-codex-mini", + "name": "GPT-5.1-Codex-Mini", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1.47, "output": 5.9 }, - "limit": { "context": 262144, "output": 262144 } - }, - "mistralai/devstral-small-2-24b-instruct-2512": { - "id": "mistralai/devstral-small-2-24b-instruct-2512", - "name": "Devstral Small 2 24B Instruct 2512", - "family": "devstral", - "attachment": false, - "reasoning": false, - "tool_call": true, - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.12, "output": 0.47 }, - "limit": { "context": 32768, "output": 32768 } - }, - "mistralai/Magistral-Small-2509": { - "id": "mistralai/Magistral-Small-2509", - "name": "Magistral Small 1.2 24B", - "family": "magistral-small", - "attachment": false, - "reasoning": false, - "tool_call": false, - "release_date": "2025-06-01", - "last_updated": "2025-06-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.59, "output": 2.36 }, - "limit": { "context": 131072, "output": 131072 } + "temperature": true, + "knowledge": "2025-01-01", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/openai", + "api": "https://zenmux.ai/api/v1" + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.03 + } }, - "mistralai/Voxtral-Small-24B-2507": { - "id": "mistralai/Voxtral-Small-24B-2507", - "name": "Voxtral Small 24B", - "family": "voxtral", - "attachment": false, - "reasoning": false, - "tool_call": false, - "release_date": "2025-03-01", - "last_updated": "2025-03-01", - "modalities": { "input": ["audio", "text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.00236, "output": 0.00236, "output_audio": 2.36 }, - "limit": { "context": 32000, "output": 32000 } - } - } - }, - "kilo": { - "id": "kilo", - "env": ["KILO_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.kilo.ai/api/gateway", - "name": "Kilo Gateway", - "doc": "https://kilo.ai", - "models": { - "giga-potato": { - "id": "giga-potato", - "name": "Giga Potato (free)", + "openai/gpt-5.1": { + "id": "openai/gpt-5.1", + "name": "GPT-5.1", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-08-27", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["image", "text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 256000, "output": 32000 } + "limit": { + "context": 400000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/openai", + "api": "https://zenmux.ai/api/v1" + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.12 + } }, - "corethink:free": { - "id": "corethink:free", - "name": "CoreThink (free)", - "attachment": false, - "reasoning": false, + "openai/gpt-5.4-pro": { + "id": "openai/gpt-5.4-pro", + "name": "GPT-5.4 Pro", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-08-27", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-03-20", + "last_updated": "2026-03-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 78000, "output": 8192 } + "limit": { + "context": 1050000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai", + "api": "https://zenmux.ai/api/v1" + }, + "cost": { + "input": 45, + "output": 225 + } }, - "giga-potato-thinking": { - "id": "giga-potato-thinking", - "name": "Giga Potato Thinking (free)", + "openai/gpt-5-codex": { + "id": "openai/gpt-5-codex", + "name": "GPT-5 Codex", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-08-27", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-09-23", + "last_updated": "2025-09-23", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 256000, "output": 32000 } + "limit": { + "context": 400000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/openai", + "api": "https://zenmux.ai/api/v1" + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.12 + } }, - "morph-warp-grep-v2": { - "id": "morph-warp-grep-v2", - "name": "Morph: WarpGrep V2", - "attachment": false, - "reasoning": false, + "openai/gpt-5.4": { + "id": "openai/gpt-5.4", + "name": "GPT-5.4", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-08-27", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-03-20", + "last_updated": "2026-03-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 256000, "output": 32000 } - }, - "eleutherai/llemma_7b": { - "id": "eleutherai/llemma_7b", - "name": "EleutherAI: Llemma 7b", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-04-14", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.8, "output": 1.2 }, - "limit": { "context": 4096, "output": 4096 } + "limit": { + "context": 1050000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai", + "api": "https://zenmux.ai/api/v1" + }, + "cost": { + "input": 3.75, + "output": 18.75 + } }, - "meituan/longcat-flash-chat": { - "id": "meituan/longcat-flash-chat", - "name": "Meituan: LongCat Flash Chat", - "attachment": false, - "reasoning": false, + "openai/gpt-5": { + "id": "openai/gpt-5", + "name": "GPT-5", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-08-30", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.8, "cache_read": 0.2 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 400000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/openai", + "api": "https://zenmux.ai/api/v1" + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.12 + } }, - "openai/gpt-5.2-codex": { - "id": "openai/gpt-5.2-codex", - "name": "OpenAI: GPT-5.2-Codex", + "openai/gpt-5.1-codex": { + "id": "openai/gpt-5.1-codex", + "name": "GPT-5.1-Codex", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2026-01-14", - "last_updated": "2026-01-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01-01", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 400000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/openai", + "api": "https://zenmux.ai/api/v1" + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.12 + } }, - "openai/o1-pro": { - "id": "openai/o1-pro", - "name": "OpenAI: o1-pro", - "attachment": true, + "z-ai/glm-4.7-flash-free": { + "id": "z-ai/glm-4.7-flash-free", + "name": "GLM 4.7 Flash (Free)", + "attachment": false, "reasoning": true, - "tool_call": false, - "temperature": false, - "release_date": "2025-03-19", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2025-01-01", + "release_date": "2026-01-19", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 150, "output": 600 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "openai/gpt-5.1-codex-mini": { - "id": "openai/gpt-5.1-codex-mini", - "name": "OpenAI: GPT-5.1-Codex-Mini", + "z-ai/glm-5v-turbo": { + "id": "z-ai/glm-5v-turbo", + "name": "GLM 5V Turbo", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "release_date": "2026-04-01", + "last_updated": "2026-04-01", + "modalities": { + "input": ["text", "image", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.025 }, - "limit": { "context": 400000, "output": 100000 } + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 0.726, + "output": 3.1946, + "cache_read": 0.1743 + } }, - "openai/gpt-5.4-pro": { - "id": "openai/gpt-5.4-pro", - "name": "OpenAI: GPT-5.4 Pro", - "attachment": true, + "z-ai/glm-4.7": { + "id": "z-ai/glm-4.7", + "name": "GLM 4.7", + "attachment": false, "reasoning": true, "tool_call": true, - "release_date": "2026-03-06", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2025-01-01", + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 30, "output": 180 }, - "limit": { "context": 1050000, "output": 128000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 0.28, + "output": 1.14, + "cache_read": 0.06 + } }, - "openai/gpt-3.5-turbo-16k": { - "id": "openai/gpt-3.5-turbo-16k", - "name": "OpenAI: GPT-3.5 Turbo 16k", + "z-ai/glm-5": { + "id": "z-ai/glm-5", + "name": "GLM 5", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2023-08-28", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 4 }, - "limit": { "context": 16385, "output": 4096 } + "knowledge": "2025-01-01", + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 0.58, + "output": 2.6, + "cache_read": 0.14 + } }, - "openai/gpt-4o:extended": { - "id": "openai/gpt-4o:extended", - "name": "OpenAI: GPT-4o (extended)", - "attachment": true, - "reasoning": false, + "z-ai/glm-4.7-flashx": { + "id": "z-ai/glm-4.7-flashx", + "name": "GLM 4.7 FlashX", + "attachment": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2024-05-13", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2026-01-19", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 6, "output": 18 }, - "limit": { "context": 128000, "output": 64000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 0.07, + "output": 0.42, + "cache_read": 0.01 + } }, - "openai/o3-mini": { - "id": "openai/o3-mini", - "name": "OpenAI: o3 Mini", + "z-ai/glm-4.6v-flash-free": { + "id": "z-ai/glm-4.6v-flash-free", + "name": "GLM 4.6V Flash (Free)", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2024-12-20", - "last_updated": "2026-03-15", - "modalities": { "input": ["pdf", "text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01-01", + "release_date": "2025-12-08", + "last_updated": "2025-12-08", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.55 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "openai/gpt-4-1106-preview": { - "id": "openai/gpt-4-1106-preview", - "name": "OpenAI: GPT-4 Turbo (older v1106)", + "z-ai/glm-5.1": { + "id": "z-ai/glm-5.1", + "name": "GLM-5.1", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2023-11-06", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-03", + "last_updated": "2026-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 10, "output": 30 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 0.8781, + "output": 3.5126, + "cache_read": 0.1903 + } }, - "openai/gpt-5-pro": { - "id": "openai/gpt-5-pro", - "name": "OpenAI: GPT-5 Pro", + "z-ai/glm-4.6v-flash": { + "id": "z-ai/glm-4.6v-flash", + "name": "GLM 4.6V FlashX", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-10-06", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01-01", + "release_date": "2025-12-08", + "last_updated": "2025-12-08", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 120 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 0.02, + "output": 0.21, + "cache_read": 0.0043 + } }, - "openai/gpt-3.5-turbo-0613": { - "id": "openai/gpt-3.5-turbo-0613", - "name": "OpenAI: GPT-3.5 Turbo (older v0613)", + "z-ai/glm-4.5": { + "id": "z-ai/glm-4.5", + "name": "GLM 4.5", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2023-06-13", - "last_updated": "2023-06-13", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-07-25", + "last_updated": "2025-07-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 2 }, - "limit": { "context": 4095, "output": 4096 } + "limit": { + "context": 128000, + "output": 64000 + }, + "cost": { + "input": 0.35, + "output": 1.54, + "cache_read": 0.07 + } }, - "openai/gpt-5-image-mini": { - "id": "openai/gpt-5-image-mini", - "name": "OpenAI: GPT-5 Image Mini", - "attachment": true, + "z-ai/glm-4.5-air": { + "id": "z-ai/glm-4.5-air", + "name": "GLM 4.5 Air", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-10-16", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["image", "text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-07-25", + "last_updated": "2025-07-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 2 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 128000, + "output": 64000 + }, + "cost": { + "input": 0.11, + "output": 0.56, + "cache_read": 0.02 + } }, - "openai/gpt-5": { - "id": "openai/gpt-5", - "name": "OpenAI: GPT-5", + "z-ai/glm-5-turbo": { + "id": "z-ai/glm-5-turbo", + "name": "GLM 5 Turbo", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-08-07", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01-01", + "release_date": "2026-03-20", + "last_updated": "2026-03-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 0.88, + "output": 3.48 + } }, - "openai/gpt-4-0314": { - "id": "openai/gpt-4-0314", - "name": "OpenAI: GPT-4 (older v0314)", + "z-ai/glm-4.6": { + "id": "z-ai/glm-4.6", + "name": "GLM 4.6", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2023-05-28", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 30, "output": 60 }, - "limit": { "context": 8191, "output": 4096 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 0.35, + "output": 1.54, + "cache_read": 0.07 + } }, - "openai/gpt-audio": { - "id": "openai/gpt-audio", - "name": "OpenAI: GPT Audio", - "attachment": false, - "reasoning": false, - "tool_call": false, + "z-ai/glm-4.6v": { + "id": "z-ai/glm-4.6v", + "name": "GLM 4.6V", + "attachment": true, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2026-01-20", - "last_updated": "2026-03-15", - "modalities": { "input": ["audio", "text"], "output": ["audio", "text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-12-08", + "last_updated": "2025-12-08", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 0.14, + "output": 0.42, + "cache_read": 0.03 + } }, - "openai/gpt-4-turbo": { - "id": "openai/gpt-4-turbo", - "name": "OpenAI: GPT-4 Turbo", + "volcengine/doubao-seed-2.0-code": { + "id": "volcengine/doubao-seed-2.0-code", + "name": "Doubao Seed 2.0 Code", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2023-09-13", - "last_updated": "2024-04-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2026-03-20", + "last_updated": "2026-03-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 10, "output": 30 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 256000, + "output": 32000 + }, + "cost": { + "input": 0.9, + "output": 4.48 + } }, - "openai/gpt-4o": { - "id": "openai/gpt-4o", - "name": "OpenAI: GPT-4o", + "volcengine/doubao-seed-code": { + "id": "volcengine/doubao-seed-code", + "name": "Doubao-Seed-Code", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2024-05-13", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-11-11", + "last_updated": "2025-11-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 10, "cache_read": 1.25 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 0.17, + "output": 1.12, + "cache_read": 0.03 + } }, - "openai/gpt-5.3-codex": { - "id": "openai/gpt-5.3-codex", - "name": "OpenAI: GPT-5.3-Codex", + "volcengine/doubao-seed-2.0-mini": { + "id": "volcengine/doubao-seed-2.0-mini", + "name": "Doubao-Seed-2.0-mini", "attachment": true, "reasoning": true, "tool_call": true, - "release_date": "2026-02-25", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2026-02-14", + "release_date": "2026-02-14", + "last_updated": "2026-02-14", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 0.03, + "output": 0.28, + "cache_read": 0.01, + "cache_write": 0.0024 + } }, - "openai/o3-mini-high": { - "id": "openai/o3-mini-high", - "name": "OpenAI: o3 Mini High", + "volcengine/doubao-seed-2.0-lite": { + "id": "volcengine/doubao-seed-2.0-lite", + "name": "Doubao-Seed-2.0-lite", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-01-31", - "last_updated": "2026-03-15", - "modalities": { "input": ["pdf", "text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2026-02-14", + "release_date": "2026-02-14", + "last_updated": "2026-02-14", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.55 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 0.09, + "output": 0.51, + "cache_read": 0.02, + "cache_write": 0.0024 + } }, - "openai/gpt-5-mini": { - "id": "openai/gpt-5-mini", - "name": "OpenAI: GPT-5 Mini", + "volcengine/doubao-seed-1.8": { + "id": "volcengine/doubao-seed-1.8", + "name": "Doubao-Seed-1.8", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-08-07", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01-01", + "release_date": "2025-12-18", + "last_updated": "2025-12-18", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.025 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 0.11, + "output": 0.28, + "cache_read": 0.02, + "cache_write": 0.0024 + } }, - "openai/gpt-4-turbo-preview": { - "id": "openai/gpt-4-turbo-preview", - "name": "OpenAI: GPT-4 Turbo Preview", - "attachment": false, - "reasoning": false, + "volcengine/doubao-seed-2.0-pro": { + "id": "volcengine/doubao-seed-2.0-pro", + "name": "Doubao-Seed-2.0-pro", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2024-01-25", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2026-02-14", + "release_date": "2026-02-14", + "last_updated": "2026-02-14", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 10, "output": 30 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 0.45, + "output": 2.24, + "cache_read": 0.09, + "cache_write": 0.0024 + } }, - "openai/gpt-4o-mini": { - "id": "openai/gpt-4o-mini", - "name": "OpenAI: GPT-4o-mini", + "baidu/ernie-5.0-thinking-preview": { + "id": "baidu/ernie-5.0-thinking-preview", + "name": "ERNIE 5.0", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2024-07-18", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2026-01-22", + "last_updated": "2026-01-22", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.6, "cache_read": 0.075 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 128000, + "output": 64000 + }, + "cost": { + "input": 0.84, + "output": 3.37 + } }, - "openai/gpt-5.1-codex-max": { - "id": "openai/gpt-5.1-codex-max", - "name": "OpenAI: GPT-5.1-Codex-Max", + "minimax/minimax-m2.7": { + "id": "minimax/minimax-m2.7", + "name": "MiniMax M2.7", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01-01", + "release_date": "2026-03-20", + "last_updated": "2026-03-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 204800, + "output": 131070 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://zenmux.ai/api/anthropic/v1" + }, + "cost": { + "input": 0.3055, + "output": 1.2219 + } }, - "openai/gpt-4.1": { - "id": "openai/gpt-4.1", - "name": "OpenAI: GPT-4.1", + "minimax/minimax-m2.7-highspeed": { + "id": "minimax/minimax-m2.7-highspeed", + "name": "MiniMax M2.7 highspeed", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-04-14", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2026-03-20", + "last_updated": "2026-03-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8, "cache_read": 0.5 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 204800, + "output": 131070 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://zenmux.ai/api/anthropic/v1" + }, + "cost": { + "input": 0.611, + "output": 2.4439 + } }, - "openai/gpt-3.5-turbo": { - "id": "openai/gpt-3.5-turbo", - "name": "OpenAI: GPT-3.5 Turbo", + "minimax/minimax-m2": { + "id": "minimax/minimax-m2", + "name": "MiniMax M2", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2023-03-01", - "last_updated": "2023-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-10-27", + "last_updated": "2025-10-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 1.5 }, - "limit": { "context": 16385, "output": 4096 } + "limit": { + "context": 204000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://zenmux.ai/api/anthropic/v1" + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.03, + "cache_write": 0.38 + } }, - "openai/gpt-3.5-turbo-instruct": { - "id": "openai/gpt-3.5-turbo-instruct", - "name": "OpenAI: GPT-3.5 Turbo Instruct", + "minimax/minimax-m2.1": { + "id": "minimax/minimax-m2.1", + "name": "MiniMax M2.1", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2023-03-01", - "last_updated": "2023-09-21", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.5, "output": 2 }, - "limit": { "context": 4095, "output": 4096 } + "limit": { + "context": 204000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://zenmux.ai/api/anthropic/v1" + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.03, + "cache_write": 0.38 + } }, - "openai/gpt-oss-120b": { - "id": "openai/gpt-oss-120b", - "name": "OpenAI: gpt-oss-120b", + "minimax/minimax-m2.5-lightning": { + "id": "minimax/minimax-m2.5-lightning", + "name": "MiniMax M2.5 highspeed", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.039, "output": 0.19 }, - "limit": { "context": 131072, "output": 26215 } + "knowledge": "2025-01-01", + "release_date": "2026-02-13", + "last_updated": "2026-02-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 204800, + "output": 131072 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://zenmux.ai/api/anthropic/v1" + }, + "cost": { + "input": 0.6, + "output": 4.8, + "cache_read": 0.06, + "cache_write": 0.75 + } }, - "openai/gpt-5.1-chat": { - "id": "openai/gpt-5.1-chat", - "name": "OpenAI: GPT-5.1 Chat", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2025-11-13", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 128000, "output": 16384 } - }, - "openai/gpt-5.4": { - "id": "openai/gpt-5.4", - "name": "OpenAI: GPT-5.4", - "attachment": true, + "minimax/minimax-m2.5": { + "id": "minimax/minimax-m2.5", + "name": "MiniMax M2.5", + "attachment": false, "reasoning": true, "tool_call": true, - "release_date": "2026-03-06", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.5, "output": 15 }, - "limit": { "context": 1050000, "output": 128000 } - }, - "openai/o1": { - "id": "openai/o1", - "name": "OpenAI: o1", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": false, - "release_date": "2024-12-05", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01-01", + "release_date": "2026-02-13", + "last_updated": "2026-02-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 60, "cache_read": 7.5 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 204800, + "output": 131072 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://zenmux.ai/api/anthropic/v1" + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.03, + "cache_write": 0.375 + } }, - "openai/gpt-4o-audio-preview": { - "id": "openai/gpt-4o-audio-preview", - "name": "OpenAI: GPT-4o Audio", + "qwen/qwen3-coder-plus": { + "id": "qwen/qwen3-coder-plus", + "name": "Qwen3-Coder-Plus", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-08-15", - "last_updated": "2026-03-15", - "modalities": { "input": ["audio", "text"], "output": ["audio", "text"] }, - "open_weights": false, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 128000, "output": 16384 } - }, - "openai/o3": { - "id": "openai/o3", - "name": "OpenAI: o3", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-04-16", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8, "cache_read": 0.5 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } }, - "openai/gpt-5-chat": { - "id": "openai/gpt-5-chat", - "name": "OpenAI: GPT-5 Chat", + "qwen/qwen3.5-flash": { + "id": "qwen/qwen3.5-flash", + "name": "Qwen3.5 Flash", "attachment": true, "reasoning": false, - "tool_call": false, - "temperature": false, - "release_date": "2025-08-07", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01-01", + "release_date": "2026-03-20", + "last_updated": "2026-03-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 1020000, + "output": 1020000 + }, + "cost": { + "input": 0.1, + "output": 0.4 + } }, - "openai/gpt-4o-search-preview": { - "id": "openai/gpt-4o-search-preview", - "name": "OpenAI: GPT-4o Search Preview", + "qwen/qwen3.6-plus": { + "id": "qwen/qwen3.6-plus", + "name": "Qwen3.6-Plus", "attachment": false, - "reasoning": false, - "tool_call": false, - "release_date": "2025-03-13", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 128000, "output": 16384 } - }, - "openai/o4-mini-high": { - "id": "openai/o4-mini-high", - "name": "OpenAI: o4 Mini High", - "attachment": true, "reasoning": true, "tool_call": true, - "release_date": "2025-04-17", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.1, "output": 4.4 }, - "limit": { "context": 200000, "output": 100000 } - }, - "openai/gpt-4o-2024-05-13": { - "id": "openai/gpt-4o-2024-05-13", - "name": "OpenAI: GPT-4o (2024-05-13)", - "attachment": true, - "reasoning": false, - "tool_call": true, "temperature": true, - "release_date": "2024-05-13", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "release_date": "2026-03-30", + "last_updated": "2026-03-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 15 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.05, + "cache_write": 0.625, + "tiers": [ + { + "input": 2, + "output": 6, + "cache_read": 0.2, + "cache_write": 2.5, + "tier": { + "type": "context", + "size": 256000 + } + } + ], + "context_over_200k": { + "input": 2, + "output": 6, + "cache_read": 0.2, + "cache_write": 2.5 + } + } }, - "openai/gpt-4": { - "id": "openai/gpt-4", - "name": "OpenAI: GPT-4", + "qwen/qwen3-max": { + "id": "qwen/qwen3-max", + "name": "Qwen3-Max-Thinking", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2023-03-14", - "last_updated": "2024-04-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2026-01-23", + "last_updated": "2026-01-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 30, "output": 60 }, - "limit": { "context": 8191, "output": 4096 } + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 1.2, + "output": 6 + } }, - "openai/gpt-5.3-chat": { - "id": "openai/gpt-5.3-chat", - "name": "OpenAI: GPT-5.3 Chat", + "qwen/qwen3.5-plus": { + "id": "qwen/qwen3.5-plus", + "name": "Qwen3.5 Plus", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "release_date": "2026-03-04", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01-01", + "release_date": "2026-03-20", + "last_updated": "2026-03-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 0.8, + "output": 4.8 + } }, - "openai/gpt-4o-2024-11-20": { - "id": "openai/gpt-4o-2024-11-20", - "name": "OpenAI: GPT-4o (2024-11-20)", + "google/gemini-3.1-flash-lite-preview": { + "id": "google/gemini-3.1-flash-lite-preview", + "name": "Gemini 3.1 Flash Lite Preview", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2024-11-20", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "release_date": "2025-03-20", + "last_updated": "2025-03-20", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 10, "cache_read": 1.25 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 1050000, + "output": 65530 + }, + "cost": { + "input": 0.25, + "output": 1.5 + } }, - "openai/gpt-5.2-chat": { - "id": "openai/gpt-5.2-chat", - "name": "OpenAI: GPT-5.2 Chat", + "google/gemini-3.1-pro-preview": { + "id": "google/gemini-3.1-pro-preview", + "name": "Gemini 3.1 Pro Preview", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-12-11", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2026-02-19", + "release_date": "2026-02-19", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text", "image", "pdf", "audio", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 1048000, + "output": 64000 + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2, + "cache_write": 4.5 + } }, - "openai/gpt-5.2": { - "id": "openai/gpt-5.2", - "name": "OpenAI: GPT-5.2", + "google/gemini-3-flash-preview": { + "id": "google/gemini-3-flash-preview", + "name": "Gemini 3 Flash Preview", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-12-11", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01-01", + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text", "image", "pdf", "audio"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 1048000, + "output": 64000 + }, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.05, + "cache_write": 1 + } }, - "openai/o4-mini-deep-research": { - "id": "openai/o4-mini-deep-research", - "name": "OpenAI: o4 Mini Deep Research", + "google/gemini-2.5-pro": { + "id": "google/gemini-2.5-pro", + "name": "Gemini 2.5 Pro", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2024-06-26", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 8, "cache_read": 0.5 }, - "limit": { "context": 200000, "output": 100000 } - }, - "openai/gpt-audio-mini": { - "id": "openai/gpt-audio-mini", - "name": "OpenAI: GPT Audio Mini", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2026-01-20", - "last_updated": "2026-03-15", - "modalities": { "input": ["audio", "text"], "output": ["audio", "text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["pdf", "image", "text", "audio", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.6, "output": 2.4 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 1048000, + "output": 64000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.31, + "cache_write": 4.5 + } }, - "openai/gpt-5.1": { - "id": "openai/gpt-5.1", - "name": "OpenAI: GPT-5.1", + "google/gemini-2.5-flash": { + "id": "google/gemini-2.5-flash", + "name": "Gemini 2.5 Flash", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-11-13", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } - }, - "openai/gpt-4o-mini-search-preview": { - "id": "openai/gpt-4o-mini-search-preview", - "name": "OpenAI: GPT-4o-mini Search Preview", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "release_date": "2025-01", - "last_updated": "2025-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01-01", + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["pdf", "image", "text", "audio"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 1048000, + "output": 64000 + }, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.07, + "cache_write": 1 + } }, - "openai/gpt-4.1-mini": { - "id": "openai/gpt-4.1-mini", - "name": "OpenAI: GPT-4.1 Mini", + "google/gemini-2.5-flash-lite": { + "id": "google/gemini-2.5-flash-lite", + "name": "Gemini 2.5 Flash Lite", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-04-14", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-07-22", + "last_updated": "2025-07-22", + "modalities": { + "input": ["pdf", "image", "text", "audio"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 1.6, "cache_read": 0.1 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 1048000, + "output": 64000 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.03, + "cache_write": 1 + } }, - "openai/gpt-4o-mini-2024-07-18": { - "id": "openai/gpt-4o-mini-2024-07-18", - "name": "OpenAI: GPT-4o-mini (2024-07-18)", + "sapiens-ai/agnes-1.5-lite": { + "id": "sapiens-ai/agnes-1.5-lite", + "name": "Agnes 1.5 Lite", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2024-07-18", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 128000, "output": 16384 } - }, - "openai/gpt-5-nano": { - "id": "openai/gpt-5-nano", - "name": "OpenAI: GPT-5 Nano", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2025-08-07", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "release_date": "2026-03-26", + "last_updated": "2026-03-26", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.05, "output": 0.4, "cache_read": 0.005 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.12, + "output": 0.6 + } }, - "openai/gpt-oss-safeguard-20b": { - "id": "openai/gpt-oss-safeguard-20b", - "name": "OpenAI: gpt-oss-safeguard-20b", + "sapiens-ai/agnes-1.5-pro": { + "id": "sapiens-ai/agnes-1.5-pro", + "name": "Agnes 1.5 Pro", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-10-29", - "last_updated": "2025-10-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-21", + "last_updated": "2026-03-21", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.075, "output": 0.3, "cache_read": 0.037 }, - "limit": { "context": 131072, "output": 65536 } + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.16, + "output": 0.8 + } }, - "openai/o3-pro": { - "id": "openai/o3-pro", - "name": "OpenAI: o3 Pro", + "moonshotai/kimi-k2.5": { + "id": "moonshotai/kimi-k2.5", + "name": "Kimi K2.5", "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": false, - "release_date": "2025-04-16", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 20, "output": 80 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 262000, + "output": 64000 + }, + "cost": { + "input": 0.58, + "output": 3.02, + "cache_read": 0.1 + } }, - "openai/gpt-oss-20b": { - "id": "openai/gpt-oss-20b", - "name": "OpenAI: gpt-oss-20b", + "moonshotai/kimi-k2-thinking-turbo": { + "id": "moonshotai/kimi-k2-thinking-turbo", + "name": "Kimi K2 Thinking Turbo", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.03, "output": 0.14 }, - "limit": { "context": 131072, "output": 26215 } + "knowledge": "2025-01-01", + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 64000 + }, + "cost": { + "input": 1.15, + "output": 8, + "cache_read": 0.15 + } }, - "openai/gpt-4o-2024-08-06": { - "id": "openai/gpt-4o-2024-08-06", - "name": "OpenAI: GPT-4o (2024-08-06)", - "attachment": true, + "moonshotai/kimi-k2-0905": { + "id": "moonshotai/kimi-k2-0905", + "name": "Kimi K2 0905", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2024-08-06", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-09-04", + "last_updated": "2025-09-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 10, "cache_read": 1.25 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 262000, + "output": 64000 + }, + "cost": { + "input": 0.6, + "output": 2.5, + "cache_read": 0.15 + } }, - "openai/gpt-4.1-nano": { - "id": "openai/gpt-4.1-nano", - "name": "OpenAI: GPT-4.1 Nano", + "moonshotai/kimi-k2.6": { + "id": "moonshotai/kimi-k2.6", + "name": "Kimi K2.6", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2025-04-14", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.025 }, - "limit": { "context": 1047576, "output": 32768 } + "interleaved": { + "field": "reasoning_content" + }, + "temperature": false, + "knowledge": "2025-01-01", + "release_date": "2026-04-20", + "last_updated": "2026-04-20", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262140, + "output": 262140 + }, + "cost": { + "input": 0.95, + "output": 4, + "cache_read": 0.16 + } }, - "openai/gpt-5-image": { - "id": "openai/gpt-5-image", - "name": "OpenAI: GPT-5 Image", - "attachment": true, + "moonshotai/kimi-k2-thinking": { + "id": "moonshotai/kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-10-14", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["image", "text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 10, "output": 10 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 262000, + "output": 64000 + }, + "cost": { + "input": 0.6, + "output": 2.5, + "cache_read": 0.15 + } }, - "openai/gpt-5-codex": { - "id": "openai/gpt-5-codex", - "name": "OpenAI: GPT-5 Codex", + "anthropic/claude-opus-4.1": { + "id": "anthropic/claude-opus-4.1", + "name": "Claude Opus 4.1", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01-01", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["image", "text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://zenmux.ai/api/anthropic/v1" + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "openai/o4-mini": { - "id": "openai/o4-mini", - "name": "OpenAI: o4 Mini", + "anthropic/claude-3.7-sonnet": { + "id": "anthropic/claude-3.7-sonnet", + "name": "Claude 3.7 Sonnet", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-04-16", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01-01", + "release_date": "2025-02-24", + "last_updated": "2025-02-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.275 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://zenmux.ai/api/anthropic/v1" + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "openai/o3-deep-research": { - "id": "openai/o3-deep-research", - "name": "OpenAI: o3 Deep Research", + "anthropic/claude-opus-4.6": { + "id": "anthropic/claude-opus-4.6", + "name": "Claude Opus 4.6", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2024-06-26", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "knowledge": "2025-05-31", + "release_date": "2026-02-06", + "last_updated": "2026-02-06", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 10, "output": 40, "cache_read": 2.5 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://zenmux.ai/api/anthropic/v1" + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "openai/gpt-5.1-codex": { - "id": "openai/gpt-5.1-codex", - "name": "OpenAI: GPT-5.1-Codex", + "anthropic/claude-opus-4.7": { + "id": "anthropic/claude-opus-4.7", + "name": "Claude Opus 4.7", "attachment": true, "reasoning": true, "tool_call": true, "temperature": false, - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://zenmux.ai/api/anthropic/v1" + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "openai/gpt-5.2-pro": { - "id": "openai/gpt-5.2-pro", - "name": "OpenAI: GPT-5.2 Pro", + "anthropic/claude-sonnet-4": { + "id": "anthropic/claude-sonnet-4", + "name": "Claude Sonnet 4", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "release_date": "2025-12-11", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01-01", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["image", "text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 21, "output": 168 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://zenmux.ai/api/anthropic/v1" + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "prime-intellect/intellect-3": { - "id": "prime-intellect/intellect-3", - "name": "Prime Intellect: INTELLECT-3", - "attachment": false, + "anthropic/claude-sonnet-4.5": { + "id": "anthropic/claude-sonnet-4.5", + "name": "Claude Sonnet 4.5", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-11-26", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 1.1 }, - "limit": { "context": 131072, "output": 131072 } - }, - "microsoft/phi-4": { - "id": "microsoft/phi-4", - "name": "Microsoft: Phi 4", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.06, "output": 0.14 }, - "limit": { "context": 16384, "output": 16384 } - }, - "microsoft/wizardlm-2-8x22b": { - "id": "microsoft/wizardlm-2-8x22b", - "name": "WizardLM-2 8x22B", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2024-04-24", - "last_updated": "2024-04-24", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.62, "output": 0.62 }, - "limit": { "context": 65535, "output": 8000 } - }, - "cohere/command-r-08-2024": { - "id": "cohere/command-r-08-2024", - "name": "Cohere: Command R (08-2024)", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2024-08-30", - "last_updated": "2024-08-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 128000, "output": 4000 } - }, - "cohere/command-r-plus-08-2024": { - "id": "cohere/command-r-plus-08-2024", - "name": "Cohere: Command R+ (08-2024)", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2024-08-30", - "last_updated": "2024-08-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 128000, "output": 4000 } - }, - "cohere/command-r7b-12-2024": { - "id": "cohere/command-r7b-12-2024", - "name": "Cohere: Command R7B (12-2024)", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2024-02-27", - "last_updated": "2024-02-27", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.0375, "output": 0.15 }, - "limit": { "context": 128000, "output": 4000 } - }, - "cohere/command-a": { - "id": "cohere/command-a", - "name": "Cohere: Command A", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-03-13", - "last_updated": "2025-03-13", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 256000, "output": 8192 } - }, - "kwaipilot/kat-coder-pro": { - "id": "kwaipilot/kat-coder-pro", - "name": "Kwaipilot: KAT-Coder-Pro V1", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2025-09-30", - "last_updated": "2025-10-24", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.207, "output": 0.828, "cache_read": 0.0414 }, - "limit": { "context": 256000, "output": 128000 } - }, - "switchpoint/router": { - "id": "switchpoint/router", - "name": "Switchpoint Router", - "attachment": false, - "reasoning": true, - "tool_call": false, - "temperature": true, - "release_date": "2025-07-12", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.85, "output": 3.4 }, - "limit": { "context": 131072, "output": 32768 } - }, - "morph/morph-v3-large": { - "id": "morph/morph-v3-large", - "name": "Morph: Morph V3 Large", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2024-08-15", - "last_updated": "2024-08-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.9, "output": 1.9 }, - "limit": { "context": 262144, "output": 131072 } - }, - "morph/morph-v3-fast": { - "id": "morph/morph-v3-fast", - "name": "Morph: Morph V3 Fast", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2024-08-15", - "last_updated": "2024-08-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.8, "output": 1.2 }, - "limit": { "context": 81920, "output": 38000 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://zenmux.ai/api/anthropic/v1" + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "x-ai/grok-4-fast": { - "id": "x-ai/grok-4-fast", - "name": "xAI: Grok 4 Fast", + "anthropic/claude-opus-4.5": { + "id": "anthropic/claude-opus-4.5", + "name": "Claude Opus 4.5", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-08-19", - "last_updated": "2025-08-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-11-24", + "last_updated": "2025-11-24", + "modalities": { + "input": ["pdf", "image", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://zenmux.ai/api/anthropic/v1" + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "x-ai/grok-4.20-beta": { - "id": "x-ai/grok-4.20-beta", - "name": "xAI: Grok 4.20 Beta", + "anthropic/claude-opus-4": { + "id": "anthropic/claude-opus-4", + "name": "Claude Opus 4", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2026-03-12", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["image", "text", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 6 }, - "limit": { "context": 2000000, "output": 32768 } + "limit": { + "context": 200000, + "output": 32000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://zenmux.ai/api/anthropic/v1" + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "x-ai/grok-4.1-fast": { - "id": "x-ai/grok-4.1-fast", - "name": "xAI: Grok 4.1 Fast", + "anthropic/claude-3.5-haiku": { + "id": "anthropic/claude-3.5-haiku", + "name": "Claude 3.5 Haiku", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-11-19", - "last_updated": "2025-11-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2024-11-04", + "last_updated": "2024-11-04", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://zenmux.ai/api/anthropic/v1" + }, + "cost": { + "input": 0.8, + "output": 4, + "cache_read": 0.08, + "cache_write": 1 + } }, - "x-ai/grok-4": { - "id": "x-ai/grok-4", - "name": "xAI: Grok 4", + "anthropic/claude-haiku-4.5": { + "id": "anthropic/claude-haiku-4.5", + "name": "Claude Haiku 4.5", "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["image", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.75 }, - "limit": { "context": 256000, "output": 51200 } - }, - "x-ai/grok-code-fast-1": { - "id": "x-ai/grok-code-fast-1", - "name": "xAI: Grok Code Fast 1", - "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-08-26", - "last_updated": "2025-08-26", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01-01", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 1.5, "cache_read": 0.02 }, - "limit": { "context": 256000, "output": 10000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://zenmux.ai/api/anthropic/v1" + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } }, - "x-ai/grok-4.20-multi-agent-beta": { - "id": "x-ai/grok-4.20-multi-agent-beta", - "name": "xAI: Grok 4.20 Multi-Agent Beta", + "anthropic/claude-sonnet-4.6": { + "id": "anthropic/claude-sonnet-4.6", + "name": "Claude Sonnet 4.6", "attachment": true, "reasoning": true, - "tool_call": false, - "temperature": true, - "release_date": "2026-03-12", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 6 }, - "limit": { "context": 2000000, "output": 32768 } - }, - "x-ai/grok-3-mini": { - "id": "x-ai/grok-3-mini", - "name": "xAI: Grok 3 Mini", - "attachment": false, - "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-02-18", + "last_updated": "2026-02-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 0.5, "cache_read": 0.075 }, - "limit": { "context": 131072, "output": 26215 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://zenmux.ai/api/anthropic/v1" + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "x-ai/grok-3-beta": { - "id": "x-ai/grok-3-beta", - "name": "xAI: Grok 3 Beta", + "deepseek/deepseek-v4-flash": { + "id": "deepseek/deepseek-v4-flash", + "name": "DeepSeek V4 Flash", + "family": "deepseek-flash", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.75 }, - "limit": { "context": 131072, "output": 26215 } + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 384000 + }, + "cost": { + "input": 0.14, + "output": 0.28, + "cache_read": 0.028 + } }, - "x-ai/grok-code-fast-1:optimized:free": { - "id": "x-ai/grok-code-fast-1:optimized:free", - "name": "xAI: Grok Code Fast 1 Optimized (experimental, free)", + "deepseek/deepseek-v4-pro": { + "id": "deepseek/deepseek-v4-pro", + "name": "DeepSeek V4 Pro", + "family": "deepseek-thinking", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-08-27", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 256000, "output": 10000 } + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 384000 + }, + "cost": { + "input": 1.74, + "output": 3.48, + "cache_read": 0.145 + } }, - "x-ai/grok-3": { - "id": "x-ai/grok-3", - "name": "xAI: Grok 3", + "tencent/hy3-preview": { + "id": "tencent/hy3-preview", + "name": "Hy3 preview", + "family": "Hy", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.75 }, - "limit": { "context": 131072, "output": 26215 } + "release_date": "2026-04-20", + "last_updated": "2026-04-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 0.172, + "output": 0.572, + "cache_read": 0.058, + "cache_write": 0 + } }, - "x-ai/grok-3-mini-beta": { - "id": "x-ai/grok-3-mini-beta", - "name": "xAI: Grok 3 Mini Beta", - "attachment": false, + "openai/gpt-5.5": { + "id": "openai/gpt-5.5", + "name": "GPT-5.5", + "family": "gpt", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-12-01", + "release_date": "2026-04-23", + "last_updated": "2026-04-23", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 0.5, "cache_read": 0.075 }, - "limit": { "context": 131072, "output": 26215 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "experimental": { + "modes": { + "fast": { + "cost": { + "input": 12.5, + "output": 75, + "cache_read": 1.25 + }, + "provider": { + "body": { + "service_tier": "priority" + } + } + } + } + }, + "cost": { + "input": 5, + "output": 30, + "cache_read": 0.5, + "context_over_200k": { + "input": 10, + "output": 45, + "cache_read": 1 + }, + "tiers": [ + { + "input": 10, + "output": 45, + "cache_read": 1, + "tier": { + "type": "context", + "size": 272000 + } + } + ] + } }, - "anthropic/claude-opus-4.6": { - "id": "anthropic/claude-opus-4.6", - "name": "Anthropic: Claude Opus 4.6", + "openai/gpt-5.5-pro": { + "id": "openai/gpt-5.5-pro", + "name": "GPT-5.5 Pro", + "family": "gpt-pro", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-12-01", + "release_date": "2026-04-23", + "last_updated": "2026-04-23", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 1000000, "output": 128000 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 30, + "output": 180, + "context_over_200k": { + "input": 60, + "output": 270 + }, + "tiers": [ + { + "input": 60, + "output": 270, + "tier": { + "type": "context", + "size": 272000 + } + } + ] + } }, - "anthropic/claude-haiku-4.5": { - "id": "anthropic/claude-haiku-4.5", - "name": "Anthropic: Claude Haiku 4.5", - "attachment": true, + "xiaomi/mimo-v2.5-pro": { + "id": "xiaomi/mimo-v2.5-pro", + "name": "MiMo-V2.5-Pro", + "family": "mimo", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.1, "cache_write": 1.25 }, - "limit": { "context": 200000, "output": 64000 } + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 1, + "output": 3, + "cache_read": 0.2, + "context_over_200k": { + "input": 2, + "output": 6, + "cache_read": 0.4 + }, + "tiers": [ + { + "input": 2, + "output": 6, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 256000 + } + } + ] + } }, - "anthropic/claude-3.7-sonnet:thinking": { - "id": "anthropic/claude-3.7-sonnet:thinking", - "name": "Anthropic: Claude 3.7 Sonnet (thinking)", + "xiaomi/mimo-v2-omni": { + "id": "xiaomi/mimo-v2-omni", + "name": "MiMo V2 Omni", + "family": "mimo", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-02-19", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 265000, + "output": 265000 + }, + "cost": { + "input": 0.4, + "output": 2, + "cache_read": 0.08 + } }, - "anthropic/claude-opus-4.1": { - "id": "anthropic/claude-opus-4.1", - "name": "Anthropic: Claude Opus 4.1", + "xiaomi/mimo-v2.5": { + "id": "xiaomi/mimo-v2.5", + "name": "MiMo-V2.5", + "family": "mimo", "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 0.4, + "output": 2, + "cache_read": 0.08, + "context_over_200k": { + "input": 0.8, + "output": 4, + "cache_read": 0.16 + }, + "tiers": [ + { + "input": 0.8, + "output": 4, + "cache_read": 0.16, + "tier": { + "type": "context", + "size": 256000 + } + } + ] + } }, - "anthropic/claude-3.7-sonnet": { - "id": "anthropic/claude-3.7-sonnet", - "name": "Anthropic: Claude 3.7 Sonnet", - "attachment": true, + "xiaomi/mimo-v2-pro": { + "id": "xiaomi/mimo-v2-pro", + "name": "MiMo V2 Pro", + "family": "mimo", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-02-19", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 1000000, + "output": 256000 + }, + "cost": { + "input": 1, + "output": 3, + "cache_read": 0.2, + "context_over_200k": { + "input": 2, + "output": 6, + "cache_read": 0.4 + }, + "tiers": [ + { + "input": 2, + "output": 6, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 256000 + } + } + ] + } }, - "anthropic/claude-sonnet-4.6": { - "id": "anthropic/claude-sonnet-4.6", - "name": "Anthropic: Claude Sonnet 4.6", - "attachment": true, + "xiaomi/mimo-v2-flash": { + "id": "xiaomi/mimo-v2-flash", + "name": "MiMo-V2-Flash", + "family": "mimo", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2026-02-17", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 1000000, "output": 128000 } - }, - "anthropic/claude-sonnet-4": { - "id": "anthropic/claude-sonnet-4", - "name": "Anthropic: Claude Sonnet 4", - "attachment": true, + "knowledge": "2024-12-01", + "release_date": "2025-12-16", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.3, + "cache_read": 0.01 + } + } + } + }, + "upstage": { + "id": "upstage", + "env": ["UPSTAGE_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.upstage.ai/v1/solar", + "name": "Upstage", + "doc": "https://developers.upstage.ai/docs/apis/chat", + "models": { + "solar-pro2": { + "id": "solar-pro2", + "name": "solar-pro2", + "family": "solar-pro", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-05-22", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "knowledge": "2025-03", + "release_date": "2025-05-20", + "last_updated": "2025-05-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 65536, + "output": 8192 + }, + "cost": { + "input": 0.25, + "output": 0.25 + } }, - "anthropic/claude-3.5-haiku": { - "id": "anthropic/claude-3.5-haiku", - "name": "Anthropic: Claude 3.5 Haiku", - "attachment": true, + "solar-mini": { + "id": "solar-mini", + "name": "solar-mini", + "family": "solar-mini", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-09", + "release_date": "2024-06-12", + "last_updated": "2025-04-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.8, "output": 4, "cache_read": 0.08, "cache_write": 1 }, - "limit": { "context": 200000, "output": 8192 } + "limit": { + "context": 32768, + "output": 4096 + }, + "cost": { + "input": 0.15, + "output": 0.15 + } }, - "anthropic/claude-opus-4.5": { - "id": "anthropic/claude-opus-4.5", - "name": "Anthropic: Claude Opus 4.5", - "attachment": true, + "solar-pro3": { + "id": "solar-pro3", + "name": "solar-pro3", + "family": "solar-pro", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-11-24", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, + "knowledge": "2025-03", + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 200000, "output": 64000 } - }, - "anthropic/claude-3.5-sonnet": { - "id": "anthropic/claude-3.5-sonnet", - "name": "Anthropic: Claude 3.5 Sonnet", - "attachment": true, - "reasoning": false, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.25, + "output": 0.25 + } + } + } + }, + "novita-ai": { + "id": "novita-ai", + "env": ["NOVITA_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.novita.ai/openai", + "name": "NovitaAI", + "doc": "https://novita.ai/docs/guides/introduction", + "models": { + "deepseek/deepseek-r1-turbo": { + "id": "deepseek/deepseek-r1-turbo", + "name": "DeepSeek R1 (Turbo)\t", + "attachment": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2024-10-22", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 6, "output": 30 }, - "limit": { "context": 200000, "output": 8192 } + "release_date": "2025-03-05", + "last_updated": "2025-03-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 64000, + "output": 16000 + }, + "cost": { + "input": 0.7, + "output": 2.5 + } }, - "anthropic/claude-3-haiku": { - "id": "anthropic/claude-3-haiku", - "name": "Anthropic: Claude 3 Haiku", - "attachment": true, + "deepseek/deepseek-v3-0324": { + "id": "deepseek/deepseek-v3-0324", + "name": "DeepSeek V3 0324", + "family": "deepseek", + "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-03-07", - "last_updated": "2024-03-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 1.25, "cache_read": 0.03, "cache_write": 0.3 }, - "limit": { "context": 200000, "output": 4096 } - }, - "anthropic/claude-sonnet-4.5": { - "id": "anthropic/claude-sonnet-4.5", - "name": "Anthropic: Claude Sonnet 4.5", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2025-09-29", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 1000000, "output": 64000 } + "knowledge": "2024-07", + "release_date": "2025-03-25", + "last_updated": "2025-03-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 163840, + "output": 163840 + }, + "cost": { + "input": 0.27, + "output": 1.12, + "cache_read": 0.135 + } }, - "anthropic/claude-opus-4": { - "id": "anthropic/claude-opus-4", - "name": "Anthropic: Claude Opus 4", + "deepseek/deepseek-ocr-2": { + "id": "deepseek/deepseek-ocr-2", + "name": "deepseek/deepseek-ocr-2", "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2025-05-22", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } - }, - "alpindale/goliath-120b": { - "id": "alpindale/goliath-120b", - "name": "Goliath 120B", - "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2023-11-10", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 3.75, "output": 7.5 }, - "limit": { "context": 6144, "output": 1024 } - }, - "relace/relace-search": { - "id": "relace/relace-search", - "name": "Relace: Relace Search", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2025-12-09", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1, "output": 3 }, - "limit": { "context": 256000, "output": 128000 } - }, - "relace/relace-apply-3": { - "id": "relace/relace-apply-3", - "name": "Relace: Relace Apply 3", - "attachment": false, - "reasoning": false, - "tool_call": false, - "release_date": "2025-09-26", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.85, "output": 1.25 }, - "limit": { "context": 256000, "output": 128000 } + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 0.03, + "output": 0.03 + } }, - "sao10k/l3.1-70b-hanami-x1": { - "id": "sao10k/l3.1-70b-hanami-x1", - "name": "Sao10K: Llama 3.1 70B Hanami x1", - "attachment": false, + "deepseek/deepseek-ocr": { + "id": "deepseek/deepseek-ocr", + "name": "DeepSeek-OCR", + "attachment": true, "reasoning": false, "tool_call": false, + "structured_output": true, "temperature": true, - "release_date": "2025-01-08", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-10-24", + "last_updated": "2025-10-24", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 3, "output": 3 }, - "limit": { "context": 16000, "output": 16000 } + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 0.03, + "output": 0.03 + } }, - "sao10k/l3-lunaris-8b": { - "id": "sao10k/l3-lunaris-8b", - "name": "Sao10K: Llama 3 8B Lunaris", + "deepseek/deepseek-r1-distill-llama-70b": { + "id": "deepseek/deepseek-r1-distill-llama-70b", + "name": "DeepSeek R1 Distill LLama 70B", + "family": "deepseek-thinking", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": false, + "structured_output": true, "temperature": true, - "release_date": "2024-08-13", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-01-27", + "last_updated": "2025-01-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.04, "output": 0.05 }, - "limit": { "context": 8192, "output": 8192 } + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 0.8, + "output": 0.8 + } }, - "sao10k/l3.3-euryale-70b": { - "id": "sao10k/l3.3-euryale-70b", - "name": "Sao10K: Llama 3.3 Euryale 70B", + "deepseek/deepseek-prover-v2-671b": { + "id": "deepseek/deepseek-prover-v2-671b", + "name": "Deepseek Prover V2 671B", "attachment": false, "reasoning": false, "tool_call": false, "temperature": true, - "release_date": "2024-12-18", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.65, "output": 0.75 }, - "limit": { "context": 131072, "output": 16384 } - }, - "sao10k/l3.1-euryale-70b": { - "id": "sao10k/l3.1-euryale-70b", - "name": "Sao10K: Llama 3.1 Euryale 70B v2.2", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2024-08-28", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.85, "output": 0.85 }, - "limit": { "context": 131072, "output": 16384 } - }, - "sao10k/l3-euryale-70b": { - "id": "sao10k/l3-euryale-70b", - "name": "Sao10k: Llama 3 Euryale 70B v2.1", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2024-06-18", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-04-30", + "last_updated": "2025-04-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1.48, "output": 1.48 }, - "limit": { "context": 8192, "output": 8192 } + "limit": { + "context": 160000, + "output": 160000 + }, + "cost": { + "input": 0.7, + "output": 2.5 + } }, - "upstage/solar-pro-3": { - "id": "upstage/solar-pro-3", - "name": "Upstage: Solar Pro 3", + "deepseek/deepseek-r1-0528-qwen3-8b": { + "id": "deepseek/deepseek-r1-0528-qwen3-8b", + "name": "DeepSeek R1 0528 Qwen3 8B", "attachment": false, "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2026-01-27", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 128000, "output": 32768 } - }, - "mancer/weaver": { - "id": "mancer/weaver", - "name": "Mancer: Weaver (alpha)", - "attachment": false, - "reasoning": false, "tool_call": false, "temperature": true, - "release_date": "2023-08-02", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.75, "output": 1 }, - "limit": { "context": 8000, "output": 2000 } - }, - "deepseek/deepseek-v3.1-terminus": { - "id": "deepseek/deepseek-v3.1-terminus", - "name": "DeepSeek: DeepSeek V3.1 Terminus", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2025-09-22", - "last_updated": "2025-09-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-05-29", + "last_updated": "2025-05-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.21, "output": 0.79, "cache_read": 0.13 }, - "limit": { "context": 163840, "output": 32768 } + "limit": { + "context": 128000, + "output": 32000 + }, + "cost": { + "input": 0.06, + "output": 0.09 + } }, - "deepseek/deepseek-r1-distill-llama-70b": { - "id": "deepseek/deepseek-r1-distill-llama-70b", - "name": "DeepSeek: R1 Distill Llama 70B", + "deepseek/deepseek-r1-distill-qwen-32b": { + "id": "deepseek/deepseek-r1-distill-qwen-32b", + "name": "DeepSeek R1 Distill Qwen 32B", + "family": "deepseek-thinking", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": false, "temperature": true, - "release_date": "2025-01-23", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.7, "output": 0.8, "cache_read": 0.015 }, - "limit": { "context": 131072, "output": 16384 } - }, - "deepseek/deepseek-r1": { - "id": "deepseek/deepseek-r1", - "name": "DeepSeek: R1", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, "release_date": "2025-01-20", "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.7, "output": 2.5 }, - "limit": { "context": 64000, "output": 16000 } - }, - "deepseek/deepseek-chat": { - "id": "deepseek/deepseek-chat", - "name": "DeepSeek: DeepSeek V3", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2024-12-01", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.32, "output": 0.89, "cache_read": 0.15 }, - "limit": { "context": 163840, "output": 163840 } + "limit": { + "context": 64000, + "output": 32000 + }, + "cost": { + "input": 0.3, + "output": 0.3 + } }, "deepseek/deepseek-v3.2-exp": { "id": "deepseek/deepseek-v3.2-exp", - "name": "DeepSeek: DeepSeek V3.2 Exp", + "name": "Deepseek V3.2 Exp", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-01-01", + "release_date": "2025-09-29", "last_updated": "2025-09-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.27, "output": 0.41 }, - "limit": { "context": 163840, "output": 65536 } + "limit": { + "context": 163840, + "output": 65536 + }, + "cost": { + "input": 0.27, + "output": 0.41 + } }, - "deepseek/deepseek-chat-v3.1": { - "id": "deepseek/deepseek-chat-v3.1", - "name": "DeepSeek: DeepSeek V3.1", + "deepseek/deepseek-v3.1": { + "id": "deepseek/deepseek-v3.1", + "name": "DeepSeek V3.1", + "family": "deepseek", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, "release_date": "2025-08-21", "last_updated": "2025-08-21", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.75 }, - "limit": { "context": 32768, "output": 7168 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.27, + "output": 1, + "cache_read": 0.135 + } }, - "deepseek/deepseek-v3.2-speciale": { - "id": "deepseek/deepseek-v3.2-speciale", - "name": "DeepSeek: DeepSeek V3.2 Speciale", + "deepseek/deepseek-v3.2": { + "id": "deepseek/deepseek-v3.2", + "name": "Deepseek V3.2", + "family": "deepseek", "attachment": false, "reasoning": true, - "tool_call": false, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, "release_date": "2025-12-01", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.4, "output": 1.2, "cache_read": 0.135 }, - "limit": { "context": 163840, "output": 163840 } + "limit": { + "context": 163840, + "output": 65536 + }, + "cost": { + "input": 0.269, + "output": 0.4, + "cache_read": 0.1345 + } }, - "deepseek/deepseek-r1-distill-qwen-32b": { - "id": "deepseek/deepseek-r1-distill-qwen-32b", - "name": "DeepSeek: R1 Distill Qwen 32B", + "deepseek/deepseek-v3-turbo": { + "id": "deepseek/deepseek-v3-turbo", + "name": "DeepSeek V3 (Turbo)\t", "attachment": false, - "reasoning": true, - "tool_call": false, + "reasoning": false, + "tool_call": true, "temperature": true, - "release_date": "2025-01-01", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-03-05", + "last_updated": "2025-03-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.29, "output": 0.29 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 64000, + "output": 16000 + }, + "cost": { + "input": 0.4, + "output": 1.3 + } }, - "deepseek/deepseek-chat-v3-0324": { - "id": "deepseek/deepseek-chat-v3-0324", - "name": "DeepSeek: DeepSeek V3 0324", + "deepseek/deepseek-r1-distill-qwen-14b": { + "id": "deepseek/deepseek-r1-distill-qwen-14b", + "name": "DeepSeek R1 Distill Qwen 14B", + "family": "deepseek-thinking", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "release_date": "2025-03-24", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.77, "cache_read": 0.095 }, - "limit": { "context": 163840, "output": 65536 } + "limit": { + "context": 32768, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.15 + } }, "deepseek/deepseek-r1-0528": { "id": "deepseek/deepseek-r1-0528", - "name": "DeepSeek: R1 0528", + "name": "DeepSeek R1 0528", + "family": "deepseek-thinking", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, + "knowledge": "2024-07", "release_date": "2025-05-28", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "last_updated": "2025-05-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.45, "output": 2.15, "cache_read": 0.2 }, - "limit": { "context": 163840, "output": 65536 } + "limit": { + "context": 163840, + "output": 32768 + }, + "cost": { + "input": 0.7, + "output": 2.5, + "cache_read": 0.35 + } }, - "deepseek/deepseek-v3.2": { - "id": "deepseek/deepseek-v3.2", - "name": "DeepSeek: DeepSeek V3.2", + "deepseek/deepseek-v3.1-terminus": { + "id": "deepseek/deepseek-v3.1-terminus", + "name": "Deepseek V3.1 Terminus", + "family": "deepseek", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-12-01", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-09-22", + "last_updated": "2025-09-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.26, "output": 0.38, "cache_read": 0.125 }, - "limit": { "context": 163840, "output": 65536 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.27, + "output": 1, + "cache_read": 0.135 + } }, - "nvidia/llama-3.1-nemotron-70b-instruct": { - "id": "nvidia/llama-3.1-nemotron-70b-instruct", - "name": "NVIDIA: Llama 3.1 Nemotron 70B Instruct", + "inclusionai/ling-2.6-1t": { + "id": "inclusionai/ling-2.6-1t", + "name": "Ling-2.6-1T", + "family": "ling", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-10-12", - "last_updated": "2024-10-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.2, "output": 1.2 }, - "limit": { "context": 131072, "output": 16384 } + "release_date": "2026-04-23", + "last_updated": "2026-04-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "nvidia/llama-3.3-nemotron-super-49b-v1.5": { - "id": "nvidia/llama-3.3-nemotron-super-49b-v1.5", - "name": "NVIDIA: Llama 3.3 Nemotron Super 49B V1.5", + "inclusionai/ling-2.6-flash": { + "id": "inclusionai/ling-2.6-flash", + "name": "Ling-2.6-flash", + "family": "ling", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-03-16", - "last_updated": "2025-03-16", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4 }, - "limit": { "context": 131072, "output": 26215 } + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0.1, + "output": 0.3, + "cache_read": 0.02 + } }, - "nvidia/nemotron-nano-12b-v2-vl": { - "id": "nvidia/nemotron-nano-12b-v2-vl", - "name": "NVIDIA: Nemotron Nano 12B 2 VL", + "paddlepaddle/paddleocr-vl": { + "id": "paddlepaddle/paddleocr-vl", + "name": "PaddleOCR-VL", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": false, "temperature": true, - "release_date": "2025-10-28", - "last_updated": "2026-01-31", - "modalities": { "input": ["image", "text", "video"], "output": ["text"] }, + "release_date": "2025-10-22", + "last_updated": "2025-10-22", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.6 }, - "limit": { "context": 131072, "output": 26215 } + "limit": { + "context": 16384, + "output": 16384 + }, + "cost": { + "input": 0.02, + "output": 0.02 + } }, - "nvidia/nemotron-nano-9b-v2": { - "id": "nvidia/nemotron-nano-9b-v2", - "name": "NVIDIA: Nemotron Nano 9B V2", + "nousresearch/hermes-2-pro-llama-3-8b": { + "id": "nousresearch/hermes-2-pro-llama-3-8b", + "name": "Hermes 2 Pro Llama 3 8B", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, + "structured_output": true, "temperature": true, - "release_date": "2025-08-18", - "last_updated": "2025-08-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-06-27", + "last_updated": "2024-06-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.04, "output": 0.16 }, - "limit": { "context": 131072, "output": 26215 } + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 0.14, + "output": 0.14 + } }, - "nvidia/nemotron-3-super-120b-a12b:free": { - "id": "nvidia/nemotron-3-super-120b-a12b:free", - "name": "NVIDIA: Nemotron 3 Super (free)", + "zai-org/glm-4.7": { + "id": "zai-org/glm-4.7", + "name": "GLM-4.7", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2026-03-12", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 2.2, + "cache_read": 0.11 + } }, - "nvidia/nemotron-3-nano-30b-a3b": { - "id": "nvidia/nemotron-3-nano-30b-a3b", - "name": "NVIDIA: Nemotron 3 Nano 30B A3B", + "zai-org/glm-5": { + "id": "zai-org/glm-5", + "name": "GLM-5", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2024-12", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.05, "output": 0.2 }, - "limit": { "context": 262144, "output": 52429 } - }, - "gryphe/mythomax-l2-13b": { - "id": "gryphe/mythomax-l2-13b", - "name": "MythoMax 13B", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2024-04-25", - "last_updated": "2024-04-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-11", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.06, "output": 0.06 }, - "limit": { "context": 4096, "output": 4096 } + "limit": { + "context": 202800, + "output": 131072 + }, + "cost": { + "input": 1, + "output": 3.2, + "cache_read": 0.2 + } }, - "z-ai/glm-4.7-flash": { - "id": "z-ai/glm-4.7-flash", - "name": "Z.ai: GLM 4.7 Flash", + "zai-org/glm-5.1": { + "id": "zai-org/glm-5.1", + "name": "GLM-5.1", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2026-01-19", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-27", + "last_updated": "2026-03-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.06, "output": 0.4, "cache_read": 0.01 }, - "limit": { "context": 202752, "output": 40551 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 1.4, + "output": 4.4, + "cache_read": 0.26 + } }, - "z-ai/glm-4.5": { - "id": "z-ai/glm-4.5", - "name": "Z.ai: GLM 4.5", + "zai-org/glm-4.5": { + "id": "zai-org/glm-4.5", + "name": "GLM-4.5", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, "release_date": "2025-07-28", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 2.2, "cache_read": 0.175 }, - "limit": { "context": 131072, "output": 98304 } + "limit": { + "context": 131072, + "output": 98304 + }, + "cost": { + "input": 0.6, + "output": 2.2, + "cache_read": 0.11 + } }, - "z-ai/glm-4.6": { - "id": "z-ai/glm-4.6", - "name": "Z.ai: GLM 4.6", + "zai-org/glm-4.5-air": { + "id": "zai-org/glm-4.5-air", + "name": "GLM 4.5 Air", + "family": "glm-air", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-09-30", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-10-13", + "last_updated": "2025-10-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.39, "output": 1.9, "cache_read": 0.175 }, - "limit": { "context": 204800, "output": 204800 } + "limit": { + "context": 131072, + "output": 98304 + }, + "cost": { + "input": 0.13, + "output": 0.85 + } }, - "z-ai/glm-4.6v": { - "id": "z-ai/glm-4.6v", - "name": "Z.ai: GLM 4.6V", + "zai-org/glm-4.5v": { + "id": "zai-org/glm-4.5v", + "name": "GLM 4.5V", + "family": "glmv", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-09-30", - "last_updated": "2026-01-10", - "modalities": { "input": ["image", "text", "video"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-08-11", + "last_updated": "2025-08-11", + "modalities": { + "input": ["text", "video", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 0.9 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 65536, + "output": 16384 + }, + "cost": { + "input": 0.6, + "output": 1.8, + "cache_read": 0.11 + } }, - "z-ai/glm-5": { - "id": "z-ai/glm-5", - "name": "Z.ai: GLM 5", + "zai-org/glm-4.6": { + "id": "zai-org/glm-4.6", + "name": "GLM 4.6", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.72, "output": 2.3 }, - "limit": { "context": 202752, "output": 131072 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.55, + "output": 2.2, + "cache_read": 0.11 + } }, - "z-ai/glm-4.5-air": { - "id": "z-ai/glm-4.5-air", - "name": "Z.ai: GLM 4.5 Air", - "attachment": false, + "zai-org/glm-4.6v": { + "id": "zai-org/glm-4.6v", + "name": "GLM 4.6V", + "family": "glmv", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-12-08", + "last_updated": "2025-12-08", + "modalities": { + "input": ["text", "video", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.13, "output": 0.85, "cache_read": 0.025 }, - "limit": { "context": 131072, "output": 98304 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.3, + "output": 0.9, + "cache_read": 0.055 + } }, - "z-ai/glm-4.5v": { - "id": "z-ai/glm-4.5v", - "name": "Z.ai: GLM 4.5V", - "attachment": true, + "zai-org/glm-4.7-flash": { + "id": "zai-org/glm-4.7-flash", + "name": "GLM-4.7-Flash", + "family": "glm", + "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-08-11", - "last_updated": "2025-08-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-01-19", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 1.8, "cache_read": 0.11 }, - "limit": { "context": 65536, "output": 16384 } + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 0.07, + "output": 0.4, + "cache_read": 0.01 + } }, - "z-ai/glm-4.7": { - "id": "z-ai/glm-4.7", - "name": "Z.ai: GLM 4.7", - "attachment": false, - "reasoning": true, - "tool_call": true, + "zai-org/autoglm-phone-9b-multilingual": { + "id": "zai-org/autoglm-phone-9b-multilingual", + "name": "AutoGLM-Phone-9B-Multilingual", + "attachment": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "release_date": "2025-12-22", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-10", + "last_updated": "2025-12-10", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.38, "output": 1.98, "cache_read": 0.2 }, - "limit": { "context": 202752, "output": 65535 } + "limit": { + "context": 65536, + "output": 65536 + }, + "cost": { + "input": 0.035, + "output": 0.138 + } }, - "z-ai/glm-4-32b": { - "id": "z-ai/glm-4-32b", - "name": "Z.ai: GLM 4 32B ", + "mistralai/mistral-nemo": { + "id": "mistralai/mistral-nemo", + "name": "Mistral Nemo", + "family": "mistral-nemo", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, + "structured_output": true, "temperature": true, - "release_date": "2025-07-25", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-07-30", + "last_updated": "2024-07-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.1 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 60288, + "output": 16000 + }, + "cost": { + "input": 0.04, + "output": 0.17 + } }, - "nex-agi/deepseek-v3.1-nex-n1": { - "id": "nex-agi/deepseek-v3.1-nex-n1", - "name": "Nex AGI: DeepSeek V3.1 Nex N1", + "baichuan/baichuan-m2-32b": { + "id": "baichuan/baichuan-m2-32b", + "name": "baichuan-m2-32b", + "family": "baichuan", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, + "structured_output": false, "temperature": true, - "release_date": "2025-01-01", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.27, "output": 1 }, - "limit": { "context": 131072, "output": 163840 } + "knowledge": "2024-12", + "release_date": "2025-08-13", + "last_updated": "2025-08-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.07, + "output": 0.07 + } }, - "allenai/olmo-3.1-32b-instruct": { - "id": "allenai/olmo-3.1-32b-instruct", - "name": "AllenAI: Olmo 3.1 32B Instruct", - "attachment": false, + "meta-llama/llama-4-scout-17b-16e-instruct": { + "id": "meta-llama/llama-4-scout-17b-16e-instruct", + "name": "Llama 4 Scout Instruct", + "attachment": true, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "release_date": "2026-01-07", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-04-06", + "last_updated": "2025-04-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.6 }, - "limit": { "context": 65536, "output": 32768 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.18, + "output": 0.59 + } }, - "allenai/olmo-2-0325-32b-instruct": { - "id": "allenai/olmo-2-0325-32b-instruct", - "name": "AllenAI: Olmo 2 32B Instruct", + "meta-llama/llama-3.3-70b-instruct": { + "id": "meta-llama/llama-3.3-70b-instruct", + "name": "Llama 3.3 70B Instruct", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": false, - "release_date": "2025-03-15", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-12-07", + "last_updated": "2024-12-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.05, "output": 0.2 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 131072, + "output": 120000 + }, + "cost": { + "input": 0.135, + "output": 0.4 + } }, - "allenai/olmo-3-32b-think": { - "id": "allenai/olmo-3-32b-think", - "name": "AllenAI: Olmo 3 32B Think", + "meta-llama/llama-3.2-3b-instruct": { + "id": "meta-llama/llama-3.2-3b-instruct", + "name": "Llama 3.2 3B Instruct", + "family": "llama", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": false, "temperature": true, - "release_date": "2025-11-22", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-09-18", + "last_updated": "2024-09-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.5 }, - "limit": { "context": 65536, "output": 65536 } + "limit": { + "context": 32768, + "output": 32000 + }, + "cost": { + "input": 0.03, + "output": 0.05 + } }, - "allenai/olmo-3-7b-think": { - "id": "allenai/olmo-3-7b-think", - "name": "AllenAI: Olmo 3 7B Think", + "meta-llama/llama-3-8b-instruct": { + "id": "meta-llama/llama-3-8b-instruct", + "name": "Llama 3 8B Instruct", + "family": "llama", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": false, "temperature": true, - "release_date": "2025-11-22", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-04-25", + "last_updated": "2024-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.12, "output": 0.2 }, - "limit": { "context": 65536, "output": 65536 } + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 0.04, + "output": 0.04 + } }, - "allenai/olmo-3.1-32b-think": { - "id": "allenai/olmo-3.1-32b-think", - "name": "AllenAI: Olmo 3.1 32B Think", + "meta-llama/llama-3.1-8b-instruct": { + "id": "meta-llama/llama-3.1-8b-instruct", + "name": "Llama 3.1 8B Instruct", + "family": "llama", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": false, "temperature": true, - "release_date": "2025-12-17", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-07-24", + "last_updated": "2024-07-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.5 }, - "limit": { "context": 65536, "output": 65536 } + "limit": { + "context": 16384, + "output": 16384 + }, + "cost": { + "input": 0.02, + "output": 0.05 + } }, - "allenai/olmo-3-7b-instruct": { - "id": "allenai/olmo-3-7b-instruct", - "name": "AllenAI: Olmo 3 7B Instruct", + "meta-llama/llama-3-70b-instruct": { + "id": "meta-llama/llama-3-70b-instruct", + "name": "Llama3 70B Instruct", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": false, + "structured_output": true, "temperature": true, - "release_date": "2025-11-22", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-04-25", + "last_updated": "2024-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.2 }, - "limit": { "context": 65536, "output": 65536 } + "limit": { + "context": 8192, + "output": 8000 + }, + "cost": { + "input": 0.51, + "output": 0.74 + } }, - "allenai/molmo-2-8b": { - "id": "allenai/molmo-2-8b", - "name": "AllenAI: Molmo2 8B", + "meta-llama/llama-4-maverick-17b-128e-instruct-fp8": { + "id": "meta-llama/llama-4-maverick-17b-128e-instruct-fp8", + "name": "Llama 4 Maverick Instruct", "attachment": true, "reasoning": false, "tool_call": false, "temperature": true, - "release_date": "2026-01-09", - "last_updated": "2026-01-31", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2025-04-06", + "last_updated": "2025-04-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 36864, "output": 36864 } - }, - "google/gemini-2.5-flash-lite": { - "id": "google/gemini-2.5-flash-lite", - "name": "Google: Gemini 2.5 Flash Lite", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2025-06-17", - "last_updated": "2026-03-15", - "modalities": { "input": ["audio", "image", "pdf", "text", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "reasoning": 0.4, "cache_read": 0.01, "cache_write": 0.083333 }, - "limit": { "context": 1048576, "output": 65535 } - }, - "google/gemini-2.5-flash-lite-preview-09-2025": { - "id": "google/gemini-2.5-flash-lite-preview-09-2025", - "name": "Google: Gemini 2.5 Flash Lite Preview 09-2025", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2025-09-25", - "last_updated": "2026-03-15", - "modalities": { "input": ["audio", "image", "pdf", "text", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "reasoning": 0.4, "cache_read": 0.01, "cache_write": 0.083333 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 1048576, + "output": 8192 + }, + "cost": { + "input": 0.27, + "output": 0.85 + } }, - "google/gemma-2-9b-it": { - "id": "google/gemma-2-9b-it", - "name": "Google: Gemma 2 9B", + "gryphe/mythomax-l2-13b": { + "id": "gryphe/mythomax-l2-13b", + "name": "Mythomax L2 13B", "attachment": false, "reasoning": false, "tool_call": false, "temperature": true, - "release_date": "2024-06-28", - "last_updated": "2024-06-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-04-25", + "last_updated": "2024-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.03, "output": 0.09 }, - "limit": { "context": 8192, "output": 1639 } - }, - "google/gemini-3.1-pro-preview": { - "id": "google/gemini-3.1-pro-preview", - "name": "Google: Gemini 3.1 Pro Preview", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2026-02-19", - "last_updated": "2026-03-15", - "modalities": { "input": ["audio", "image", "pdf", "text", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 12, "reasoning": 12 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 4096, + "output": 3200 + }, + "cost": { + "input": 0.09, + "output": 0.09 + } }, - "google/gemini-3-pro-preview": { - "id": "google/gemini-3-pro-preview", - "name": "Google: Gemini 3 Pro Preview", - "attachment": true, - "reasoning": true, + "sao10k/l31-70b-euryale-v2.2": { + "id": "sao10k/l31-70b-euryale-v2.2", + "name": "L31 70B Euryale V2.2", + "attachment": false, + "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-11-18", - "last_updated": "2026-03-15", - "modalities": { "input": ["audio", "image", "pdf", "text", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 12, "reasoning": 12, "cache_read": 0.2, "cache_write": 0.375 }, - "limit": { "context": 1048576, "output": 65536 } + "release_date": "2024-09-19", + "last_updated": "2024-09-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 1.48, + "output": 1.48 + } }, - "google/gemma-3-27b-it": { - "id": "google/gemma-3-27b-it", - "name": "Google: Gemma 3 27B", - "attachment": true, + "sao10k/l3-70b-euryale-v2.1": { + "id": "sao10k/l3-70b-euryale-v2.1", + "name": "L3 70B Euryale V2.1\t", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-03-12", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "release_date": "2024-06-18", + "last_updated": "2024-06-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.03, "output": 0.11, "cache_read": 0.02 }, - "limit": { "context": 128000, "output": 65536 } + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 1.48, + "output": 1.48 + } }, - "google/gemma-3-4b-it": { - "id": "google/gemma-3-4b-it", - "name": "Google: Gemma 3 4B", - "attachment": true, + "sao10k/l3-8b-lunaris": { + "id": "sao10k/l3-8b-lunaris", + "name": "Sao10k L3 8B Lunaris\t", + "attachment": false, "reasoning": false, "tool_call": false, + "structured_output": true, "temperature": true, - "release_date": "2025-03-13", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "release_date": "2024-11-28", + "last_updated": "2024-11-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.04, "output": 0.08 }, - "limit": { "context": 131072, "output": 19200 } + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 0.05, + "output": 0.05 + } }, - "google/gemma-3n-e4b-it": { - "id": "google/gemma-3n-e4b-it", - "name": "Google: Gemma 3n 4B", + "microsoft/wizardlm-2-8x22b": { + "id": "microsoft/wizardlm-2-8x22b", + "name": "Wizardlm 2 8x22B", "attachment": false, "reasoning": false, "tool_call": false, "temperature": true, - "release_date": "2025-05-20", - "last_updated": "2025-05-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-04-24", + "last_updated": "2024-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.02, "output": 0.04 }, - "limit": { "context": 32768, "output": 6554 } + "limit": { + "context": 65535, + "output": 8000 + }, + "cost": { + "input": 0.62, + "output": 0.62 + } }, - "google/gemini-2.5-pro-preview-05-06": { - "id": "google/gemini-2.5-pro-preview-05-06", - "name": "Google: Gemini 2.5 Pro Preview 05-06", + "openai/gpt-oss-20b": { + "id": "openai/gpt-oss-20b", + "name": "OpenAI: GPT OSS 20B", "attachment": true, "reasoning": true, - "tool_call": true, + "tool_call": false, + "structured_output": true, "temperature": true, - "release_date": "2025-05-06", - "last_updated": "2026-03-15", - "modalities": { "input": ["audio", "image", "pdf", "text", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "reasoning": 10, "cache_read": 0.125, "cache_write": 0.375 }, - "limit": { "context": 1048576, "output": 65535 } + "release_date": "2025-08-06", + "last_updated": "2025-08-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.04, + "output": 0.15 + } }, - "google/gemini-2.0-flash-001": { - "id": "google/gemini-2.0-flash-001", - "name": "Google: Gemini 2.0 Flash", + "openai/gpt-oss-120b": { + "id": "openai/gpt-oss-120b", + "name": "OpenAI GPT OSS 120B", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-12-11", - "last_updated": "2026-03-15", - "modalities": { "input": ["audio", "image", "pdf", "text", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.025, "cache_write": 0.083333 }, - "limit": { "context": 1048576, "output": 8192 } + "release_date": "2025-08-06", + "last_updated": "2025-08-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.05, + "output": 0.25 + } }, - "google/gemini-2.0-flash-lite-001": { - "id": "google/gemini-2.0-flash-lite-001", - "name": "Google: Gemini 2.0 Flash Lite", - "attachment": true, - "reasoning": false, + "minimaxai/minimax-m1-80k": { + "id": "minimaxai/minimax-m1-80k", + "name": "MiniMax M1", + "family": "minimax", + "attachment": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2024-12-11", - "last_updated": "2026-03-15", - "modalities": { "input": ["audio", "image", "pdf", "text", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.075, "output": 0.3 }, - "limit": { "context": 1048576, "output": 8192 } + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 40000 + }, + "cost": { + "input": 0.55, + "output": 2.2 + } }, - "google/gemini-3-flash-preview": { - "id": "google/gemini-3-flash-preview", - "name": "Google: Gemini 3 Flash Preview", - "attachment": true, - "reasoning": true, + "Sao10K/L3-8B-Stheno-v3.2": { + "id": "Sao10K/L3-8B-Stheno-v3.2", + "name": "L3 8B Stheno V3.2", + "family": "llama", + "attachment": false, + "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-12-17", - "last_updated": "2026-03-15", - "modalities": { "input": ["audio", "image", "pdf", "text", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.5, "output": 3, "reasoning": 3, "cache_read": 0.05, "cache_write": 0.083333 }, - "limit": { "context": 1048576, "output": 65536 } + "release_date": "2024-11-29", + "last_updated": "2024-11-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 32000 + }, + "cost": { + "input": 0.05, + "output": 0.05 + } }, - "google/gemini-2.5-pro-preview": { - "id": "google/gemini-2.5-pro-preview", - "name": "Google: Gemini 2.5 Pro Preview 06-05", - "attachment": true, + "xiaomimimo/mimo-v2-flash": { + "id": "xiaomimimo/mimo-v2-flash", + "name": "XiaomiMiMo/MiMo-V2-Flash", + "family": "mimo", + "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-06-05", - "last_updated": "2026-03-15", - "modalities": { "input": ["audio", "image", "pdf", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "reasoning": 10, "cache_read": 0.125, "cache_write": 0.375 }, - "limit": { "context": 1048576, "output": 65536 } + "knowledge": "2024-12", + "release_date": "2025-12-19", + "last_updated": "2025-12-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 32000 + }, + "cost": { + "input": 0.1, + "output": 0.3, + "cache_read": 0.3 + } }, - "google/gemini-2.5-pro": { - "id": "google/gemini-2.5-pro", - "name": "Google: Gemini 2.5 Pro", + "baidu/ernie-4.5-vl-28b-a3b-thinking": { + "id": "baidu/ernie-4.5-vl-28b-a3b-thinking", + "name": "ERNIE-4.5-VL-28B-A3B-Thinking", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-03-20", - "last_updated": "2026-03-15", - "modalities": { "input": ["audio", "image", "pdf", "text", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "reasoning": 10, "cache_read": 0.125, "cache_write": 0.375 }, - "limit": { "context": 1048576, "output": 65536 } + "release_date": "2025-11-26", + "last_updated": "2025-11-26", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.39, + "output": 0.39 + } }, - "google/gemini-2.5-flash": { - "id": "google/gemini-2.5-flash", - "name": "Google: Gemini 2.5 Flash", + "baidu/ernie-4.5-vl-424b-a47b": { + "id": "baidu/ernie-4.5-vl-424b-a47b", + "name": "ERNIE 4.5 VL 424B A47B", "attachment": true, "reasoning": true, - "tool_call": true, + "tool_call": false, "temperature": true, - "release_date": "2025-07-17", - "last_updated": "2026-03-15", - "modalities": { "input": ["audio", "image", "pdf", "text", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 2.5, "reasoning": 2.5, "cache_read": 0.03, "cache_write": 0.083333 }, - "limit": { "context": 1048576, "output": 65535 } + "release_date": "2025-06-30", + "last_updated": "2025-06-30", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 123000, + "output": 16000 + }, + "cost": { + "input": 0.42, + "output": 1.25 + } }, - "google/gemini-3.1-pro-preview-customtools": { - "id": "google/gemini-3.1-pro-preview-customtools", - "name": "Google: Gemini 3.1 Pro Preview Custom Tools", - "attachment": true, - "reasoning": true, + "baidu/ernie-4.5-21B-a3b": { + "id": "baidu/ernie-4.5-21B-a3b", + "name": "ERNIE 4.5 21B A3B", + "family": "ernie", + "attachment": false, + "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2026-02-26", - "last_updated": "2026-03-15", - "modalities": { "input": ["audio", "image", "pdf", "text", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 12, "reasoning": 12 }, - "limit": { "context": 1048576, "output": 65536 } + "knowledge": "2025-03", + "release_date": "2025-06-30", + "last_updated": "2025-06-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 120000, + "output": 8000 + }, + "cost": { + "input": 0.07, + "output": 0.28 + } }, - "google/gemma-2-27b-it": { - "id": "google/gemma-2-27b-it", - "name": "Google: Gemma 2 27B", + "baidu/ernie-4.5-300b-a47b-paddle": { + "id": "baidu/ernie-4.5-300b-a47b-paddle", + "name": "ERNIE 4.5 300B A47B", "attachment": false, "reasoning": false, "tool_call": false, + "structured_output": true, "temperature": true, - "release_date": "2024-06-24", - "last_updated": "2024-06-24", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-06-30", + "last_updated": "2025-06-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.65, "output": 0.65 }, - "limit": { "context": 8192, "output": 2048 } + "limit": { + "context": 123000, + "output": 12000 + }, + "cost": { + "input": 0.28, + "output": 1.1 + } }, - "google/gemini-3.1-flash-lite-preview": { - "id": "google/gemini-3.1-flash-lite-preview", - "name": "Google: Gemini 3.1 Flash Lite Preview", - "attachment": true, + "baidu/ernie-4.5-21B-a3b-thinking": { + "id": "baidu/ernie-4.5-21B-a3b-thinking", + "name": "ERNIE-4.5-21B-A3B-Thinking", + "family": "ernie", + "attachment": false, "reasoning": true, - "tool_call": true, + "tool_call": false, "temperature": true, - "release_date": "2026-03-03", - "last_updated": "2026-03-15", - "modalities": { "input": ["audio", "image", "pdf", "text", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 1.5, "reasoning": 1.5 }, - "limit": { "context": 1048576, "output": 65536 } + "knowledge": "2025-03", + "release_date": "2025-09-19", + "last_updated": "2025-09-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.07, + "output": 0.28 + } }, - "google/gemini-3.1-flash-image-preview": { - "id": "google/gemini-3.1-flash-image-preview", - "name": "Google: Nano Banana 2 (Gemini 3.1 Flash Image Preview)", + "baidu/ernie-4.5-vl-28b-a3b": { + "id": "baidu/ernie-4.5-vl-28b-a3b", + "name": "ERNIE 4.5 VL 28B A3B", "attachment": true, "reasoning": true, - "tool_call": false, + "tool_call": true, "temperature": true, - "release_date": "2026-02-26", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["image", "text"] }, - "open_weights": false, - "cost": { "input": 0.5, "output": 3 }, - "limit": { "context": 65536, "output": 65536 } - }, - "google/gemini-2.5-flash-image": { - "id": "google/gemini-2.5-flash-image", - "name": "Google: Nano Banana (Gemini 2.5 Flash Image)", - "attachment": true, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-10-08", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["image", "text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 2.5 }, - "limit": { "context": 32768, "output": 32768 } + "release_date": "2025-06-30", + "last_updated": "2025-06-30", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 30000, + "output": 8000 + }, + "cost": { + "input": 1.4, + "output": 5.6 + } }, - "google/gemma-3-12b-it": { - "id": "google/gemma-3-12b-it", - "name": "Google: Gemma 3 12B", - "attachment": true, - "reasoning": false, - "tool_call": false, + "minimax/minimax-m2.7": { + "id": "minimax/minimax-m2.7", + "name": "MiniMax M2.7", + "family": "minimax-m2.7", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-03-13", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.04, "output": 0.13, "cache_read": 0.015 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.06 + } }, - "google/gemini-3-pro-image-preview": { - "id": "google/gemini-3-pro-image-preview", - "name": "Google: Nano Banana Pro (Gemini 3 Pro Image Preview)", - "attachment": true, + "minimax/minimax-m2": { + "id": "minimax/minimax-m2", + "name": "MiniMax-M2", + "family": "minimax", + "attachment": false, "reasoning": true, - "tool_call": false, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-11-20", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["image", "text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 12, "reasoning": 12 }, - "limit": { "context": 65536, "output": 32768 } + "release_date": "2025-10-27", + "last_updated": "2025-10-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.03 + } }, - "undi95/remm-slerp-l2-13b": { - "id": "undi95/remm-slerp-l2-13b", - "name": "ReMM SLERP 13B", + "minimax/minimax-m2.1": { + "id": "minimax/minimax-m2.1", + "name": "Minimax M2.1", + "family": "minimax", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2023-07-22", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.45, "output": 0.65 }, - "limit": { "context": 6144, "output": 4096 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.03 + } }, - "amazon/nova-lite-v1": { - "id": "amazon/nova-lite-v1", - "name": "Amazon: Nova Lite 1.0", - "attachment": true, - "reasoning": false, + "minimax/minimax-m2.5": { + "id": "minimax/minimax-m2.5", + "name": "MiniMax M2.5", + "family": "minimax", + "attachment": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2024-12-06", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.06, "output": 0.24 }, - "limit": { "context": 300000, "output": 5120 } + "limit": { + "context": 204800, + "output": 131100 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.03 + } }, - "amazon/nova-2-lite-v1": { - "id": "amazon/nova-2-lite-v1", - "name": "Amazon: Nova 2 Lite", - "attachment": true, + "minimax/minimax-m2.5-highspeed": { + "id": "minimax/minimax-m2.5-highspeed", + "name": "MiniMax M2.5 Highspeed", + "family": "minimax-m2.5", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2024-12-01", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "pdf", "text", "video"], "output": ["text"] }, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 2.5 }, - "limit": { "context": 1000000, "output": 65535 } + "limit": { + "context": 204800, + "output": 131100 + }, + "cost": { + "input": 0.6, + "output": 2.4, + "cache_read": 0.03 + } }, - "amazon/nova-micro-v1": { - "id": "amazon/nova-micro-v1", - "name": "Amazon: Nova Micro 1.0", + "qwen/qwen2.5-7b-instruct": { + "id": "qwen/qwen2.5-7b-instruct", + "name": "Qwen2.5 7B Instruct", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-12-06", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.035, "output": 0.14 }, - "limit": { "context": 128000, "output": 5120 } + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32000, + "output": 32000 + }, + "cost": { + "input": 0.07, + "output": 0.07 + } }, - "amazon/nova-pro-v1": { - "id": "amazon/nova-pro-v1", - "name": "Amazon: Nova Pro 1.0", + "qwen/qwen3.5-122b-a10b": { + "id": "qwen/qwen3.5-122b-a10b", + "name": "Qwen3.5-122B-A10B", + "family": "qwen", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-12-03", - "last_updated": "2024-12-03", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.8, "output": 3.2 }, - "limit": { "context": 300000, "output": 5120 } + "release_date": "2026-02-26", + "last_updated": "2026-02-26", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.4, + "output": 3.2 + } }, - "amazon/nova-premier-v1": { - "id": "amazon/nova-premier-v1", - "name": "Amazon: Nova Premier 1.0", + "qwen/qwen3.5-27b": { + "id": "qwen/qwen3.5-27b", + "name": "Qwen3.5-27B", + "family": "qwen", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-11-01", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.5, "output": 12.5 }, - "limit": { "context": 1000000, "output": 32000 } + "release_date": "2026-02-26", + "last_updated": "2026-02-26", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.4 + } }, - "baidu/ernie-4.5-21b-a3b": { - "id": "baidu/ernie-4.5-21b-a3b", - "name": "Baidu: ERNIE 4.5 21B A3B", + "qwen/qwen3-235b-a22b-instruct-2507": { + "id": "qwen/qwen3-235b-a22b-instruct-2507", + "name": "Qwen3 235B A22B Instruct 2507", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-06-30", - "last_updated": "2025-06-30", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-22", + "last_updated": "2025-07-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.07, "output": 0.28 }, - "limit": { "context": 120000, "output": 8000 } + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.09, + "output": 0.58 + } }, - "baidu/ernie-4.5-300b-a47b": { - "id": "baidu/ernie-4.5-300b-a47b", - "name": "Baidu: ERNIE 4.5 300B A47B ", - "attachment": false, + "qwen/qwen3-omni-30b-a3b-instruct": { + "id": "qwen/qwen3-omni-30b-a3b-instruct", + "name": "Qwen3 Omni 30B A3B Instruct", + "family": "qwen", + "attachment": true, "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-06-30", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.28, "output": 1.1 }, - "limit": { "context": 123000, "output": 12000 } - }, - "baidu/ernie-4.5-21b-a3b-thinking": { - "id": "baidu/ernie-4.5-21b-a3b-thinking", - "name": "Baidu: ERNIE 4.5 21B A3B Thinking", - "attachment": false, - "reasoning": true, - "tool_call": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-09-19", - "last_updated": "2025-09-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2025-09-24", + "last_updated": "2025-09-24", + "modalities": { + "input": ["text", "video", "audio", "image"], + "output": ["text", "audio"] + }, "open_weights": true, - "cost": { "input": 0.07, "output": 0.28 }, - "limit": { "context": 131072, "output": 65536 } + "limit": { + "context": 65536, + "output": 16384 + }, + "cost": { + "input": 0.25, + "output": 0.97, + "input_audio": 2.2, + "output_audio": 1.788 + } }, - "baidu/ernie-4.5-vl-28b-a3b": { - "id": "baidu/ernie-4.5-vl-28b-a3b", - "name": "Baidu: ERNIE 4.5 VL 28B A3B", + "qwen/qwen3.5-397b-a17b": { + "id": "qwen/qwen3.5-397b-a17b", + "name": "Qwen3.5-397B-A17B", + "family": "qwen", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-06-30", - "last_updated": "2025-06-30", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-02-17", + "last_updated": "2026-02-17", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.14, "output": 0.56 }, - "limit": { "context": 30000, "output": 8000 } + "limit": { + "context": 262144, + "output": 64000 + }, + "cost": { + "input": 0.6, + "output": 3.6 + } }, - "baidu/ernie-4.5-vl-424b-a47b": { - "id": "baidu/ernie-4.5-vl-424b-a47b", - "name": "Baidu: ERNIE 4.5 VL 424B A47B ", + "qwen/qwen2.5-vl-72b-instruct": { + "id": "qwen/qwen2.5-vl-72b-instruct", + "name": "Qwen2.5 VL 72B Instruct", + "family": "qwen", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": false, "temperature": true, - "release_date": "2025-06-30", - "last_updated": "2026-01", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "release_date": "2025-03-25", + "last_updated": "2025-03-25", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.42, "output": 1.25 }, - "limit": { "context": 123000, "output": 16000 } + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.8, + "output": 0.8 + } }, - "ibm-granite/granite-4.0-h-micro": { - "id": "ibm-granite/granite-4.0-h-micro", - "name": "IBM: Granite 4.0 Micro", - "attachment": false, - "reasoning": false, + "qwen/qwen3-vl-235b-a22b-thinking": { + "id": "qwen/qwen3-vl-235b-a22b-thinking", + "name": "Qwen3 VL 235B A22B Thinking", + "attachment": true, + "reasoning": true, "tool_call": false, "temperature": true, - "release_date": "2025-10-20", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-09-24", + "last_updated": "2025-09-24", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.017, "output": 0.11 }, - "limit": { "context": 131000, "output": 32768 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.98, + "output": 3.95 + } }, - "kilo/auto": { - "id": "kilo/auto", - "name": "Kilo: Auto", + "qwen/qwen3-vl-30b-a3b-thinking": { + "id": "qwen/qwen3-vl-30b-a3b-thinking", + "name": "qwen/qwen3-vl-30b-a3b-thinking", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-06-01", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 5, "output": 25 }, - "limit": { "context": 1000000, "output": 128000 } + "release_date": "2025-10-11", + "last_updated": "2025-10-11", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.2, + "output": 1 + } }, - "kilo/auto-free": { - "id": "kilo/auto-free", - "name": "Deprecated Kilo Auto Free", - "attachment": false, + "qwen/qwen3-omni-30b-a3b-thinking": { + "id": "qwen/qwen3-omni-30b-a3b-thinking", + "name": "Qwen3 Omni 30B A3B Thinking", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-03-15", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 204800, "output": 131072 } + "release_date": "2025-09-24", + "last_updated": "2025-09-24", + "modalities": { + "input": ["text", "audio", "video", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 65536, + "output": 16384 + }, + "cost": { + "input": 0.25, + "output": 0.97, + "input_audio": 2.2, + "output_audio": 1.788 + } }, - "kilo/auto-small": { - "id": "kilo/auto-small", - "name": "Deprecated Kilo Auto Small", + "qwen/qwen3-vl-8b-instruct": { + "id": "qwen/qwen3-vl-8b-instruct", + "name": "qwen/qwen3-vl-8b-instruct", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-03-15", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.05, "output": 0.4 }, - "limit": { "context": 400000, "output": 128000 } + "release_date": "2025-10-17", + "last_updated": "2025-10-17", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.08, + "output": 0.5 + } }, - "meta-llama/llama-3.3-70b-instruct": { - "id": "meta-llama/llama-3.3-70b-instruct", - "name": "Meta: Llama 3.3 70B Instruct", + "qwen/qwen3-max": { + "id": "qwen/qwen3-max", + "name": "Qwen3 Max", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-08-01", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.32 }, - "limit": { "context": 131072, "output": 16384 } + "knowledge": "2025-04", + "release_date": "2025-09-24", + "last_updated": "2025-09-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 2.11, + "output": 8.45 + } }, - "meta-llama/llama-3.2-1b-instruct": { - "id": "meta-llama/llama-3.2-1b-instruct", - "name": "Meta: Llama 3.2 1B Instruct", + "qwen/qwen3-32b-fp8": { + "id": "qwen/qwen3-32b-fp8", + "name": "Qwen3 32B", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": false, "temperature": true, - "release_date": "2024-09-18", - "last_updated": "2026-01-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-04-29", + "last_updated": "2025-04-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.027, "output": 0.2 }, - "limit": { "context": 60000, "output": 12000 } + "limit": { + "context": 40960, + "output": 20000 + }, + "cost": { + "input": 0.1, + "output": 0.45 + } }, - "meta-llama/llama-guard-4-12b": { - "id": "meta-llama/llama-guard-4-12b", - "name": "Meta: Llama Guard 4 12B", - "attachment": true, - "reasoning": false, + "qwen/qwen3-4b-fp8": { + "id": "qwen/qwen3-4b-fp8", + "name": "Qwen3 4B", + "attachment": false, + "reasoning": true, "tool_call": false, "temperature": true, - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "release_date": "2025-04-29", + "last_updated": "2025-04-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.18, "output": 0.18 }, - "limit": { "context": 163840, "output": 32768 } + "limit": { + "context": 128000, + "output": 20000 + }, + "cost": { + "input": 0.03, + "output": 0.03 + } }, - "meta-llama/llama-3.1-405b-instruct": { - "id": "meta-llama/llama-3.1-405b-instruct", - "name": "Meta: Llama 3.1 405B Instruct", + "qwen/qwen3-235b-a22b-thinking-2507": { + "id": "qwen/qwen3-235b-a22b-thinking-2507", + "name": "Qwen3 235B A22b Thinking 2507", + "family": "qwen", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2024-07-16", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-25", + "last_updated": "2025-07-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 4, "output": 4 }, - "limit": { "context": 131000, "output": 26200 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.3, + "output": 3 + } }, - "meta-llama/llama-3.1-8b-instruct": { - "id": "meta-llama/llama-3.1-8b-instruct", - "name": "Meta: Llama 3.1 8B Instruct", + "qwen/qwen3-next-80b-a3b-thinking": { + "id": "qwen/qwen3-next-80b-a3b-thinking", + "name": "Qwen3 Next 80B A3B Thinking", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-07-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-09-10", + "last_updated": "2025-09-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.02, "output": 0.05 }, - "limit": { "context": 16384, "output": 16384 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.15, + "output": 1.5 + } }, - "meta-llama/llama-3.2-11b-vision-instruct": { - "id": "meta-llama/llama-3.2-11b-vision-instruct", - "name": "Meta: Llama 3.2 11B Vision Instruct", - "attachment": true, + "qwen/qwen-mt-plus": { + "id": "qwen/qwen-mt-plus", + "name": "Qwen MT Plus", + "attachment": false, "reasoning": false, "tool_call": false, "temperature": true, - "release_date": "2024-09-25", - "last_updated": "2024-09-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-09-03", + "last_updated": "2025-09-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.049, "output": 0.049 }, - "limit": { "context": 131072, "output": 16384 } + "limit": { + "context": 16384, + "output": 8192 + }, + "cost": { + "input": 0.25, + "output": 0.75 + } }, - "meta-llama/llama-4-scout": { - "id": "meta-llama/llama-4-scout", - "name": "Meta: Llama 4 Scout", - "attachment": true, + "qwen/qwen3-next-80b-a3b-instruct": { + "id": "qwen/qwen3-next-80b-a3b-instruct", + "name": "Qwen3 Next 80B A3B Instruct", + "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-09-10", + "last_updated": "2025-09-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.08, "output": 0.3 }, - "limit": { "context": 327680, "output": 16384 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.15, + "output": 1.5 + } }, - "meta-llama/llama-3-8b-instruct": { - "id": "meta-llama/llama-3-8b-instruct", - "name": "Meta: Llama 3 8B Instruct", + "qwen/qwen3-30b-a3b-fp8": { + "id": "qwen/qwen3-30b-a3b-fp8", + "name": "Qwen3 30B A3B", + "attachment": false, + "reasoning": true, + "tool_call": false, + "temperature": true, + "release_date": "2025-04-29", + "last_updated": "2025-04-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 40960, + "output": 20000 + }, + "cost": { + "input": 0.09, + "output": 0.45 + } + }, + "qwen/qwen3-coder-next": { + "id": "qwen/qwen3-coder-next", + "name": "Qwen3 Coder Next", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-04-25", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-03", + "last_updated": "2026-02-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.03, "output": 0.04 }, - "limit": { "context": 8192, "output": 16384 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.2, + "output": 1.5 + } }, - "meta-llama/llama-3-70b-instruct": { - "id": "meta-llama/llama-3-70b-instruct", - "name": "Meta: Llama 3 70B Instruct", + "qwen/qwen3-coder-480b-a35b-instruct": { + "id": "qwen/qwen3-coder-480b-a35b-instruct", + "name": "Qwen3 Coder 480B A35B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.51, "output": 0.74 }, - "limit": { "context": 8192, "output": 8000 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 1.3 + } }, - "meta-llama/llama-4-maverick": { - "id": "meta-llama/llama-4-maverick", - "name": "Meta: Llama 4 Maverick", + "qwen/qwen3-vl-30b-a3b-instruct": { + "id": "qwen/qwen3-vl-30b-a3b-instruct", + "name": "qwen/qwen3-vl-30b-a3b-instruct", "attachment": true, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-04-05", - "last_updated": "2025-12-24", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-10-11", + "last_updated": "2025-10-11", + "modalities": { + "input": ["text", "video", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 1048576, "output": 16384 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.2, + "output": 0.7 + } }, - "meta-llama/llama-guard-3-8b": { - "id": "meta-llama/llama-guard-3-8b", - "name": "Llama Guard 3 8B", + "qwen/qwen3-coder-30b-a3b-instruct": { + "id": "qwen/qwen3-coder-30b-a3b-instruct", + "name": "Qwen3 Coder 30b A3B Instruct", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-04-18", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-10-09", + "last_updated": "2025-10-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.02, "output": 0.06 }, - "limit": { "context": 131072, "output": 26215 } + "limit": { + "context": 160000, + "output": 32768 + }, + "cost": { + "input": 0.07, + "output": 0.27 + } }, - "meta-llama/llama-3.2-3b-instruct": { - "id": "meta-llama/llama-3.2-3b-instruct", - "name": "Meta: Llama 3.2 3B Instruct", + "qwen/qwen3-235b-a22b-fp8": { + "id": "qwen/qwen3-235b-a22b-fp8", + "name": "Qwen3 235B A22B", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": false, "temperature": true, - "release_date": "2024-09-18", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-04-29", + "last_updated": "2025-04-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.051, "output": 0.34 }, - "limit": { "context": 80000, "output": 16384 } + "limit": { + "context": 40960, + "output": 20000 + }, + "cost": { + "input": 0.2, + "output": 0.8 + } }, - "meta-llama/llama-3.1-70b-instruct": { - "id": "meta-llama/llama-3.1-70b-instruct", - "name": "Meta: Llama 3.1 70B Instruct", + "qwen/qwen3-8b-fp8": { + "id": "qwen/qwen3-8b-fp8", + "name": "Qwen3 8B", "attachment": false, - "reasoning": false, - "tool_call": true, + "reasoning": true, + "tool_call": false, "temperature": true, - "release_date": "2024-07-16", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-04-29", + "last_updated": "2025-04-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.4, "output": 0.4 }, - "limit": { "context": 131072, "output": 26215 } + "limit": { + "context": 128000, + "output": 20000 + }, + "cost": { + "input": 0.035, + "output": 0.138 + } }, - "meta-llama/llama-3.1-405b": { - "id": "meta-llama/llama-3.1-405b", - "name": "Meta: Llama 3.1 405B (base)", - "attachment": false, + "qwen/qwen3-vl-235b-a22b-instruct": { + "id": "qwen/qwen3-vl-235b-a22b-instruct", + "name": "Qwen3 VL 235B A22B Instruct", + "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-08-02", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-09-24", + "last_updated": "2025-09-24", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 4, "output": 4 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.3, + "output": 1.5 + } }, - "openrouter/hunter-alpha": { - "id": "openrouter/hunter-alpha", - "name": "Hunter Alpha", + "qwen/qwen-2.5-72b-instruct": { + "id": "qwen/qwen-2.5-72b-instruct", + "name": "Qwen 2.5 72B Instruct", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-03-12", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 1048576, "output": 32000 } + "knowledge": "2024-04", + "release_date": "2024-10-15", + "last_updated": "2024-10-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32000, + "output": 8192 + }, + "cost": { + "input": 0.38, + "output": 0.4 + } }, - "openrouter/free": { - "id": "openrouter/free", - "name": "Free Models Router", + "qwen/qwen3.5-35b-a3b": { + "id": "qwen/qwen3.5-35b-a3b", + "name": "Qwen3.5-35B-A3B", + "family": "qwen", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-02-01", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 200000, "output": 32768 } + "release_date": "2026-02-26", + "last_updated": "2026-02-26", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.25, + "output": 2 + } }, - "openrouter/bodybuilder": { - "id": "openrouter/bodybuilder", - "name": "Body Builder (beta)", + "kwaipilot/kat-coder-pro": { + "id": "kwaipilot/kat-coder-pro", + "name": "Kat Coder Pro", "attachment": false, "reasoning": false, - "tool_call": false, - "release_date": "2026-03-15", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 32768 }, - "status": "beta" - }, - "openrouter/auto": { - "id": "openrouter/auto", - "name": "Auto Router", - "attachment": true, - "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-03-15", - "last_updated": "2026-03-15", - "modalities": { "input": ["audio", "image", "pdf", "text", "video"], "output": ["image", "text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 2000000, "output": 32768 } + "release_date": "2026-01-05", + "last_updated": "2026-01-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 128000 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.06 + } }, - "openrouter/healer-alpha": { - "id": "openrouter/healer-alpha", - "name": "Healer Alpha", + "google/gemma-4-31b-it": { + "id": "google/gemma-4-31b-it", + "name": "Gemma 4 31B", + "family": "gemma", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-03-12", - "last_updated": "2026-03-15", - "modalities": { "input": ["audio", "image", "text", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 32000 } - }, - "perplexity/sonar-deep-research": { - "id": "perplexity/sonar-deep-research", - "name": "Perplexity: Sonar Deep Research", - "attachment": false, - "reasoning": true, - "tool_call": false, - "temperature": true, - "release_date": "2025-01-27", - "last_updated": "2025-01-27", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 8 }, - "limit": { "context": 128000, "output": 25600 } + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0.14, + "output": 0.4 + } }, - "perplexity/sonar": { - "id": "perplexity/sonar", - "name": "Perplexity: Sonar", + "google/gemma-3-12b-it": { + "id": "google/gemma-3-12b-it", + "name": "Gemma 3 12B", + "family": "gemma", "attachment": true, "reasoning": false, "tool_call": false, "temperature": true, - "release_date": "2024-01-01", - "last_updated": "2025-09-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1, "output": 1 }, - "limit": { "context": 127072, "output": 25415 } + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.05, + "output": 0.1 + } }, - "perplexity/sonar-reasoning-pro": { - "id": "perplexity/sonar-reasoning-pro", - "name": "Perplexity: Sonar Reasoning Pro", + "google/gemma-3-27b-it": { + "id": "google/gemma-3-27b-it", + "name": "Gemma 3 27B", + "family": "gemma", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": false, "temperature": true, - "release_date": "2024-01-01", - "last_updated": "2025-09-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 8 }, - "limit": { "context": 128000, "output": 25600 } + "release_date": "2025-03-25", + "last_updated": "2025-03-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 98304, + "output": 16384 + }, + "cost": { + "input": 0.119, + "output": 0.2 + } }, - "perplexity/sonar-pro": { - "id": "perplexity/sonar-pro", - "name": "Perplexity: Sonar Pro", + "google/gemma-4-26b-a4b-it": { + "id": "google/gemma-4-26b-a4b-it", + "name": "Gemma 4 26B A4B", + "family": "gemma", "attachment": true, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-01-01", - "last_updated": "2025-09-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 200000, "output": 8000 } + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0.13, + "output": 0.4 + } }, - "perplexity/sonar-pro-search": { - "id": "perplexity/sonar-pro-search", - "name": "Perplexity: Sonar Pro Search", + "moonshotai/kimi-k2.5": { + "id": "moonshotai/kimi-k2.5", + "name": "Kimi K2.5", + "family": "kimi", "attachment": true, "reasoning": true, - "tool_call": false, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-10-31", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 200000, "output": 8000 } + "knowledge": "2025-01", + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 3, + "cache_read": 0.1 + } }, - "essentialai/rnj-1-instruct": { - "id": "essentialai/rnj-1-instruct", - "name": "EssentialAI: Rnj 1 Instruct", + "moonshotai/kimi-k2-instruct": { + "id": "moonshotai/kimi-k2-instruct", + "name": "Kimi K2 Instruct", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-12-05", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-07-11", + "last_updated": "2025-07-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.15 }, - "limit": { "context": 32768, "output": 6554 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.57, + "output": 2.3 + } }, - "arcee-ai/coder-large": { - "id": "arcee-ai/coder-large", - "name": "Arcee AI: Coder Large", + "moonshotai/kimi-k2-0905": { + "id": "moonshotai/kimi-k2-0905", + "name": "Kimi K2 0905", + "family": "kimi", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-05-06", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.5, "output": 0.8 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 2.5 + } }, - "arcee-ai/trinity-large-preview:free": { - "id": "arcee-ai/trinity-large-preview:free", - "name": "Arcee AI: Trinity Large Preview (free)", + "moonshotai/kimi-k2-thinking": { + "id": "moonshotai/kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "family": "kimi", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2026-01-28", - "last_updated": "2026-01-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-11-07", + "last_updated": "2025-11-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131000, "output": 26200 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 2.5 + } }, - "arcee-ai/virtuoso-large": { - "id": "arcee-ai/virtuoso-large", - "name": "Arcee AI: Virtuoso Large", + "deepseek/deepseek-v4-flash": { + "id": "deepseek/deepseek-v4-flash", + "name": "DeepSeek V4 Flash", + "family": "deepseek-flash", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-05-06", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.75, "output": 1.2 }, - "limit": { "context": 131072, "output": 64000 } + "limit": { + "context": 1048576, + "output": 393216 + }, + "cost": { + "input": 0.14, + "output": 0.28, + "cache_read": 0.028 + } }, - "arcee-ai/trinity-mini": { - "id": "arcee-ai/trinity-mini", - "name": "Arcee AI: Trinity Mini", + "deepseek/deepseek-v4-pro": { + "id": "deepseek/deepseek-v4-pro", + "name": "DeepSeek V4 Pro", + "family": "deepseek-thinking", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-12", - "last_updated": "2026-01-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.045, "output": 0.15 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 1048576, + "output": 393216 + }, + "cost": { + "input": 1.69, + "output": 3.38, + "cache_read": 0.13 + } }, - "arcee-ai/spotlight": { - "id": "arcee-ai/spotlight", - "name": "Arcee AI: Spotlight", + "moonshotai/kimi-k2.6": { + "id": "moonshotai/kimi-k2.6", + "name": "Kimi K2.6", + "family": "kimi-k2.6", "attachment": true, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-05-06", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.18, "output": 0.18 }, - "limit": { "context": 131072, "output": 65537 } - }, - "arcee-ai/maestro-reasoning": { - "id": "arcee-ai/maestro-reasoning", - "name": "Arcee AI: Maestro Reasoning", + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.95, + "output": 4, + "cache_read": 0.16 + } + } + } + }, + "xiaomi-token-plan-cn": { + "id": "xiaomi-token-plan-cn", + "env": ["XIAOMI_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://token-plan-cn.xiaomimimo.com/v1", + "name": "Xiaomi Token Plan (China)", + "doc": "https://platform.xiaomimimo.com/#/docs", + "models": { + "mimo-v2-tts": { + "id": "mimo-v2-tts", + "name": "MiMo-V2-TTS", + "family": "mimo", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-05-06", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["audio"] + }, "open_weights": true, - "cost": { "input": 0.9, "output": 3.3 }, - "limit": { "context": 131072, "output": 32000 } - }, - "bytedance/ui-tars-1.5-7b": { - "id": "bytedance/ui-tars-1.5-7b", - "name": "ByteDance: UI-TARS 7B ", - "attachment": true, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-07-23", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.2 }, - "limit": { "context": 128000, "output": 2048 } + "limit": { + "context": 8192, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "kilo-auto/free": { - "id": "kilo-auto/free", - "name": "Kilo Auto Free", + "mimo-v2.5-pro": { + "id": "mimo-v2.5-pro", + "name": "MiMo-V2.5-Pro", + "family": "mimo", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2026-03-15", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 204800, "output": 131072 } + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "kilo-auto/balanced": { - "id": "kilo-auto/balanced", - "name": "Kilo Auto Balanced", - "attachment": false, + "mimo-v2-omni": { + "id": "mimo-v2-omni", + "name": "MiMo-V2-Omni", + "family": "mimo", + "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2026-03-15", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.6, "output": 3 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "kilo-auto/small": { - "id": "kilo-auto/small", - "name": "Kilo Auto Small", + "mimo-v2.5": { + "id": "mimo-v2.5", + "name": "MiMo-V2.5", + "family": "mimo", "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2026-03-15", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.05, "output": 0.4 }, - "limit": { "context": 400000, "output": 128000 } + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "kilo-auto/frontier": { - "id": "kilo-auto/frontier", - "name": "Kilo Auto Frontier", - "attachment": true, + "mimo-v2-pro": { + "id": "mimo-v2-pro", + "name": "MiMo-V2-Pro", + "family": "mimo", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2026-03-15", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25 }, - "limit": { "context": 1000000, "output": 128000 } + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "nousresearch/hermes-2-pro-llama-3-8b": { - "id": "nousresearch/hermes-2-pro-llama-3-8b", - "name": "NousResearch: Hermes 2 Pro - Llama-3 8B", + "mimo-v2-flash": { + "id": "mimo-v2-flash", + "name": "MiMo-V2-Flash", + "family": "mimo", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2024-05-27", - "last_updated": "2024-06-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-12-01", + "release_date": "2025-12-16", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.14, "output": 0.14 }, - "limit": { "context": 8192, "output": 8192 } - }, - "nousresearch/hermes-4-70b": { - "id": "nousresearch/hermes-4-70b", - "name": "Nous: Hermes 4 70B", + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } + } + } + }, + "wandb": { + "id": "wandb", + "env": ["WANDB_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.inference.wandb.ai/v1", + "name": "Weights & Biases", + "doc": "https://docs.wandb.ai/guides/integrations/inference/", + "models": { + "Qwen/Qwen3-30B-A3B-Instruct-2507": { + "id": "Qwen/Qwen3-30B-A3B-Instruct-2507", + "name": "Qwen3 30B A3B Instruct 2507", + "family": "qwen", "attachment": false, - "reasoning": true, - "tool_call": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-08-25", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-07-29", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.13, "output": 0.4, "cache_read": 0.055 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.1, + "output": 0.3 + } }, - "nousresearch/hermes-3-llama-3.1-70b": { - "id": "nousresearch/hermes-3-llama-3.1-70b", - "name": "Nous: Hermes 3 70B Instruct", + "Qwen/Qwen3-235B-A22B-Instruct-2507": { + "id": "Qwen/Qwen3-235B-A22B-Instruct-2507", + "name": "Qwen3 235B A22B Instruct 2507", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-08-18", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-04-28", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 0.3 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } }, - "nousresearch/hermes-4-405b": { - "id": "nousresearch/hermes-4-405b", - "name": "Nous: Hermes 4 405B", + "Qwen/Qwen3-235B-A22B-Thinking-2507": { + "id": "Qwen/Qwen3-235B-A22B-Thinking-2507", + "name": "Qwen3-235B-A22B-Thinking-2507", + "family": "qwen", "attachment": false, "reasoning": true, - "tool_call": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-08-25", - "last_updated": "2025-08-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-25", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1, "output": 3 }, - "limit": { "context": 131072, "output": 26215 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } }, - "nousresearch/hermes-3-llama-3.1-405b": { - "id": "nousresearch/hermes-3-llama-3.1-405b", - "name": "Nous: Hermes 3 405B Instruct", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2024-08-16", - "last_updated": "2024-08-16", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1, "output": 1 }, - "limit": { "context": 131072, "output": 16384 } - }, - "minimax/minimax-m2-her": { - "id": "minimax/minimax-m2-her", - "name": "MiniMax: MiniMax M2-her", + "Qwen/Qwen3-Coder-480B-A35B-Instruct": { + "id": "Qwen/Qwen3-Coder-480B-A35B-Instruct", + "name": "Qwen3-Coder-480B-A35B-Instruct", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2026-01-23", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 65536, "output": 2048 } - }, - "minimax/minimax-01": { - "id": "minimax/minimax-01", - "name": "MiniMax: MiniMax-01", - "attachment": true, - "reasoning": false, - "tool_call": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-01-15", - "last_updated": "2025-01-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 1.1 }, - "limit": { "context": 1000192, "output": 1000192 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 1, + "output": 1.5 + } }, - "minimax/minimax-m2": { - "id": "minimax/minimax-m2", - "name": "MiniMax: MiniMax M2", + "zai-org/GLM-5-FP8": { + "id": "zai-org/GLM-5-FP8", + "name": "GLM 5", + "family": "glm", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-10-23", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-11", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.255, "output": 1, "cache_read": 0.03 }, - "limit": { "context": 196608, "output": 196608 } + "limit": { + "context": 200000, + "output": 200000 + }, + "cost": { + "input": 1, + "output": 3.2 + } }, - "minimax/minimax-m2.1": { - "id": "minimax/minimax-m2.1", - "name": "MiniMax: MiniMax M2.1", + "meta-llama/Llama-4-Scout-17B-16E-Instruct": { + "id": "meta-llama/Llama-4-Scout-17B-16E-Instruct", + "name": "Llama 4 Scout 17B 16E Instruct", + "family": "llama", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2025-01-31", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.27, "output": 0.95, "cache_read": 0.03 }, - "limit": { "context": 196608, "output": 39322 } + "limit": { + "context": 64000, + "output": 64000 + }, + "cost": { + "input": 0.17, + "output": 0.66 + } }, - "minimax/minimax-m2.5": { - "id": "minimax/minimax-m2.5", - "name": "MiniMax: MiniMax M2.5", + "meta-llama/Llama-3.3-70B-Instruct": { + "id": "meta-llama/Llama-3.3-70B-Instruct", + "name": "Llama-3.3-70B-Instruct", + "family": "llama", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2023-12", + "release_date": "2024-12-06", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.25, "output": 1.2, "cache_read": 0.029 }, - "limit": { "context": 196608, "output": 196608 } + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.71, + "output": 0.71 + } }, - "minimax/minimax-m1": { - "id": "minimax/minimax-m1", - "name": "MiniMax: MiniMax M1", + "meta-llama/Llama-3.1-8B-Instruct": { + "id": "meta-llama/Llama-3.1-8B-Instruct", + "name": "Meta-Llama-3.1-8B-Instruct", + "family": "llama", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2023-12", + "release_date": "2024-07-23", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.4, "output": 2.2 }, - "limit": { "context": 1000000, "output": 40000 } + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.22, + "output": 0.22 + } }, - "minimax/minimax-m2.5:free": { - "id": "minimax/minimax-m2.5:free", - "name": "MiniMax: MiniMax M2.5 (free)", + "meta-llama/Llama-3.1-70B-Instruct": { + "id": "meta-llama/Llama-3.1-70B-Instruct", + "name": "Llama 3.1 70B", + "family": "llama", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-07-23", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.8, + "output": 0.8 + } }, - "qwen/qwen3-coder-30b-a3b-instruct": { - "id": "qwen/qwen3-coder-30b-a3b-instruct", - "name": "Qwen: Qwen3 Coder 30B A3B Instruct", + "OpenPipe/Qwen3-14B-Instruct": { + "id": "OpenPipe/Qwen3-14B-Instruct", + "name": "OpenPipe Qwen3 14B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-07-31", - "last_updated": "2025-07-31", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-04-29", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.07, "output": 0.27 }, - "limit": { "context": 160000, "output": 32768 } + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.05, + "output": 0.22 + } }, - "qwen/qwen3-8b": { - "id": "qwen/qwen3-8b", - "name": "Qwen: Qwen3 8B", + "microsoft/Phi-4-mini-instruct": { + "id": "microsoft/Phi-4-mini-instruct", + "name": "Phi-4-mini-instruct", + "family": "phi", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-04", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2023-10", + "release_date": "2024-12-11", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.05, "output": 0.4, "cache_read": 0.05 }, - "limit": { "context": 40960, "output": 8192 } + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.08, + "output": 0.35 + } }, - "qwen/qwen3.5-9b": { - "id": "qwen/qwen3.5-9b", - "name": "Qwen: Qwen3.5-9B", - "attachment": true, - "reasoning": true, + "nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-FP8": { + "id": "nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-FP8", + "name": "NVIDIA Nemotron 3 Super 120B", + "family": "nemotron", + "attachment": false, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-03-10", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text", "video"], "output": ["text"] }, + "release_date": "2026-03-11", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.05, "output": 0.15 }, - "limit": { "context": 256000, "output": 32768 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.2, + "output": 0.8 + } }, - "qwen/qwen-turbo": { - "id": "qwen/qwen-turbo", - "name": "Qwen: Qwen-Turbo", + "deepseek-ai/DeepSeek-V3.1": { + "id": "deepseek-ai/DeepSeek-V3.1", + "name": "DeepSeek V3.1", + "family": "deepseek", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-11-01", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.0325, "output": 0.13, "cache_read": 0.01 }, - "limit": { "context": 131072, "output": 8192 } + "release_date": "2025-08-21", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 161000, + "output": 161000 + }, + "cost": { + "input": 0.55, + "output": 1.65 + } }, - "qwen/qwen-vl-max": { - "id": "qwen/qwen-vl-max", - "name": "Qwen: Qwen VL Max", - "attachment": true, + "openai/gpt-oss-20b": { + "id": "openai/gpt-oss-20b", + "name": "gpt-oss-20b", + "family": "gpt-oss", + "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-04-08", - "last_updated": "2025-08-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.8, "output": 3.2 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.05, + "output": 0.2 + } }, - "qwen/qwen3-vl-235b-a22b-instruct": { - "id": "qwen/qwen3-vl-235b-a22b-instruct", - "name": "Qwen: Qwen3 VL 235B A22B Instruct", - "attachment": true, + "openai/gpt-oss-120b": { + "id": "openai/gpt-oss-120b", + "name": "gpt-oss-120b", + "family": "gpt-oss", + "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-09-23", - "last_updated": "2026-01-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.88, "cache_read": 0.11 }, - "limit": { "context": 262144, "output": 52429 } + "release_date": "2025-08-05", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "qwen/qwq-32b": { - "id": "qwen/qwq-32b", - "name": "Qwen: QwQ 32B", - "attachment": false, + "moonshotai/Kimi-K2.5": { + "id": "moonshotai/Kimi-K2.5", + "name": "Kimi K2.5", + "family": "kimi", + "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2024-11-28", - "last_updated": "2025-04-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01-27", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.4 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.5, + "output": 2.85 + } }, - "qwen/qwen3-coder-next": { - "id": "qwen/qwen3-coder-next", - "name": "Qwen: Qwen3 Coder Next", + "MiniMaxAI/MiniMax-M2.5": { + "id": "MiniMaxAI/MiniMax-M2.5", + "name": "MiniMax M2.5", + "family": "minimax", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-02-02", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-12", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.12, "output": 0.75, "cache_read": 0.035 }, - "limit": { "context": 262144, "output": 65536 } - }, - "qwen/qwen-vl-plus": { - "id": "qwen/qwen-vl-plus", - "name": "Qwen: Qwen VL Plus", - "attachment": true, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2024-01-25", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1365, "output": 0.4095, "cache_read": 0.042 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 196608, + "output": 196608 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "qwen/qwen-max": { - "id": "qwen/qwen-max", - "name": "Qwen: Qwen-Max ", + "zai-org/GLM-5.1": { + "id": "zai-org/GLM-5.1", + "name": "GLM-5.1", + "family": "glm", "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2024-04-03", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.04, "output": 4.16, "cache_read": 0.32 }, - "limit": { "context": 32768, "output": 8192 } - }, - "qwen/qwen3.5-flash-02-23": { - "id": "qwen/qwen3.5-flash-02-23", - "name": "Qwen: Qwen3.5-Flash", - "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2026-02-26", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.4 }, - "limit": { "context": 1000000, "output": 65536 } - }, - "qwen/qwen3-vl-32b-instruct": { - "id": "qwen/qwen3-vl-32b-instruct", - "name": "Qwen: Qwen3 VL 32B Instruct", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2025-10-21", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-03-27", + "last_updated": "2026-03-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.104, "output": 0.416 }, - "limit": { "context": 131072, "output": 32768 } - }, - "qwen/qwen2.5-coder-7b-instruct": { - "id": "qwen/qwen2.5-coder-7b-instruct", - "name": "Qwen: Qwen2.5 Coder 7B Instruct", + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 1.4, + "output": 4.4, + "cache_read": 0.26, + "cache_write": 0 + } + } + } + }, + "chutes": { + "id": "chutes", + "env": ["CHUTES_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://llm.chutes.ai/v1", + "name": "Chutes", + "doc": "https://llm.chutes.ai/v1/models", + "models": { + "NousResearch/DeepHermes-3-Mistral-24B-Preview": { + "id": "NousResearch/DeepHermes-3-Mistral-24B-Preview", + "name": "DeepHermes 3 Mistral 24B Preview", + "family": "nousresearch", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-09-17", - "last_updated": "2024-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.03, "output": 0.09 }, - "limit": { "context": 32768, "output": 6554 } + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.0245, + "output": 0.0978, + "cache_read": 0.01225 + } }, - "qwen/qwen3-14b": { - "id": "qwen/qwen3-14b", - "name": "Qwen: Qwen3 14B", + "NousResearch/Hermes-4-14B": { + "id": "NousResearch/Hermes-4-14B", + "name": "Hermes 4 14B", + "family": "nousresearch", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-04", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.06, "output": 0.24, "cache_read": 0.025 }, - "limit": { "context": 40960, "output": 40960 } + "limit": { + "context": 40960, + "output": 40960 + }, + "cost": { + "input": 0.0136, + "output": 0.0543, + "cache_read": 0.0068 + } }, - "qwen/qwen3-30b-a3b-thinking-2507": { - "id": "qwen/qwen3-30b-a3b-thinking-2507", - "name": "Qwen: Qwen3 30B A3B Thinking 2507", + "Qwen/Qwen3-30B-A3B": { + "id": "Qwen/Qwen3-30B-A3B", + "name": "Qwen3 30B A3B", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-07-29", - "last_updated": "2025-07-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.051, "output": 0.34 }, - "limit": { "context": 32768, "output": 6554 } + "limit": { + "context": 40960, + "output": 40960 + }, + "cost": { + "input": 0.06, + "output": 0.22, + "cache_read": 0.03 + } }, - "qwen/qwen3.5-plus-02-15": { - "id": "qwen/qwen3.5-plus-02-15", - "name": "Qwen: Qwen3.5 Plus 2026-02-15", - "attachment": true, + "Qwen/Qwen3-32B-TEE": { + "id": "Qwen/Qwen3-32B-TEE", + "name": "Qwen3 32B TEE", + "family": "qwen", + "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-02-15", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.26, "output": 1.56 }, - "limit": { "context": 1000000, "output": 65536 } + "release_date": "2026-04-25", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 40960, + "output": 40960 + }, + "cost": { + "input": 0.08, + "output": 0.24, + "cache_read": 0.04 + } }, - "qwen/qwen3.5-35b-a3b": { - "id": "qwen/qwen3.5-35b-a3b", - "name": "Qwen: Qwen3.5-35B-A3B", + "Qwen/Qwen3.6-27B-TEE": { + "id": "Qwen/Qwen3.6-27B-TEE", + "name": "Qwen3.6 27B TEE", + "family": "qwen", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-02-26", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text", "video"], "output": ["text"] }, + "release_date": "2026-04-25", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1625, "output": 1.3 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.195, + "output": 1.56, + "cache_read": 0.0975 + } }, - "qwen/qwen3.5-122b-a10b": { - "id": "qwen/qwen3.5-122b-a10b", - "name": "Qwen: Qwen3.5-122B-A10B", - "attachment": true, - "reasoning": true, - "tool_call": true, + "Qwen/Qwen2.5-Coder-32B-Instruct": { + "id": "Qwen/Qwen2.5-Coder-32B-Instruct", + "name": "Qwen2.5 Coder 32B Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": true, "temperature": true, - "release_date": "2026-02-26", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text", "video"], "output": ["text"] }, + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.26, "output": 2.08 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.0272, + "output": 0.1087, + "cache_read": 0.0136 + } }, - "qwen/qwen3-30b-a3b": { - "id": "qwen/qwen3-30b-a3b", - "name": "Qwen: Qwen3 30B A3B", + "Qwen/Qwen3Guard-Gen-0.6B": { + "id": "Qwen/Qwen3Guard-Gen-0.6B", + "name": "Qwen3Guard Gen 0.6B", + "family": "qwen", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "release_date": "2025-04", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.08, "output": 0.28, "cache_read": 0.03 }, - "limit": { "context": 40960, "output": 40960 } + "limit": { + "context": 32768, + "output": 8192 + }, + "cost": { + "input": 0.01, + "output": 0.0109, + "cache_read": 0.005 + } }, - "qwen/qwen-plus": { - "id": "qwen/qwen-plus", - "name": "Qwen: Qwen-Plus", + "Qwen/Qwen3-Next-80B-A3B-Instruct": { + "id": "Qwen/Qwen3-Next-80B-A3B-Instruct", + "name": "Qwen3 Next 80B A3B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-01-25", - "last_updated": "2025-09-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.4, "output": 1.2, "cache_read": 0.08 }, - "limit": { "context": 1000000, "output": 32768 } + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.1, + "output": 0.8, + "cache_read": 0.05 + } }, - "qwen/qwen3-vl-8b-thinking": { - "id": "qwen/qwen3-vl-8b-thinking", - "name": "Qwen: Qwen3 VL 8B Thinking", - "attachment": true, - "reasoning": true, + "Qwen/Qwen3-235B-A22B-Instruct-2507-TEE": { + "id": "Qwen/Qwen3-235B-A22B-Instruct-2507-TEE", + "name": "Qwen3 235B A22B Instruct 2507 TEE", + "family": "qwen", + "attachment": false, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-10-15", - "last_updated": "2025-11-25", - "modalities": { "input": ["image", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.117, "output": 1.365 }, - "limit": { "context": 131072, "output": 32768 } + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.6, + "cache_read": 0.05 + } }, - "qwen/qwen3-coder": { - "id": "qwen/qwen3-coder", - "name": "Qwen: Qwen3 Coder 480B A35B", + "Qwen/Qwen3-Coder-Next-TEE": { + "id": "Qwen/Qwen3-Coder-Next-TEE", + "name": "Qwen3 Coder Next TEE", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-25", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.22, "output": 1, "cache_read": 0.022 }, - "limit": { "context": 262144, "output": 52429 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.12, + "output": 0.75, + "cache_read": 0.06 + } }, - "qwen/qwen3.5-27b": { - "id": "qwen/qwen3.5-27b", - "name": "Qwen: Qwen3.5-27B", - "attachment": true, + "Qwen/Qwen3-235B-A22B-Thinking-2507": { + "id": "Qwen/Qwen3-235B-A22B-Thinking-2507", + "name": "Qwen3 235B A22B Thinking 2507", + "family": "qwen", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2026-02-26", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text", "video"], "output": ["text"] }, + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.195, "output": 1.56 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.11, + "output": 0.6, + "cache_read": 0.055 + } }, - "qwen/qwen2.5-vl-32b-instruct": { - "id": "qwen/qwen2.5-vl-32b-instruct", - "name": "Qwen: Qwen2.5 VL 32B Instruct", + "Qwen/Qwen2.5-VL-32B-Instruct": { + "id": "Qwen/Qwen2.5-VL-32B-Instruct", + "name": "Qwen2.5 VL 32B Instruct", + "family": "qwen", "attachment": true, "reasoning": false, "tool_call": false, + "structured_output": true, "temperature": true, - "release_date": "2025-03-24", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.6, "cache_read": 0.025 }, - "limit": { "context": 128000, "output": 16384 } - }, - "qwen/qwen-2.5-7b-instruct": { - "id": "qwen/qwen-2.5-7b-instruct", - "name": "Qwen: Qwen2.5 7B Instruct", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2024-09", - "last_updated": "2025-04-16", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.04, "output": 0.1 }, - "limit": { "context": 32768, "output": 6554 } + "limit": { + "context": 16384, + "output": 16384 + }, + "cost": { + "input": 0.0543, + "output": 0.2174, + "cache_read": 0.02715 + } }, - "qwen/qwen-plus-2025-07-28:thinking": { - "id": "qwen/qwen-plus-2025-07-28:thinking", - "name": "Qwen: Qwen Plus 0728 (thinking)", - "attachment": false, + "Qwen/Qwen3.5-397B-A17B-TEE": { + "id": "Qwen/Qwen3.5-397B-A17B-TEE", + "name": "Qwen3.5 397B A17B TEE", + "family": "qwen", + "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-09-09", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-18", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.26, "output": 0.78 }, - "limit": { "context": 1000000, "output": 32768 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.39, + "output": 2.34, + "cache_read": 0.195 + } }, - "qwen/qwen2.5-vl-72b-instruct": { - "id": "qwen/qwen2.5-vl-72b-instruct", - "name": "Qwen: Qwen2.5 VL 72B Instruct", - "attachment": true, + "Qwen/Qwen2.5-72B-Instruct": { + "id": "Qwen/Qwen2.5-72B-Instruct", + "name": "Qwen2.5 72B Instruct", + "family": "qwen", + "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-02-01", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.8, "output": 0.8, "cache_read": 0.075 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.2989, + "output": 1.1957, + "cache_read": 0.14945 + } }, - "qwen/qwen3-235b-a22b-2507": { - "id": "qwen/qwen3-235b-a22b-2507", - "name": "Qwen: Qwen3 235B A22B Instruct 2507", + "zai-org/GLM-5.1-TEE": { + "id": "zai-org/GLM-5.1-TEE", + "name": "GLM 5.1 TEE", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-04", - "last_updated": "2026-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-08", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.071, "output": 0.1 }, - "limit": { "context": 262144, "output": 52429 } + "limit": { + "context": 202752, + "output": 65535 + }, + "cost": { + "input": 1.05, + "output": 3.5, + "cache_read": 0.525 + } }, - "qwen/qwen3-vl-8b-instruct": { - "id": "qwen/qwen3-vl-8b-instruct", - "name": "Qwen: Qwen3 VL 8B Instruct", - "attachment": true, - "reasoning": false, + "zai-org/GLM-4.7-FP8": { + "id": "zai-org/GLM-4.7-FP8", + "name": "GLM 4.7 FP8", + "family": "glm", + "attachment": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-10-15", - "last_updated": "2025-11-25", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "release_date": "2026-01-27", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.08, "output": 0.5 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 202752, + "output": 65535 + }, + "cost": { + "input": 0.2989, + "output": 1.1957, + "cache_read": 0.14945 + } }, - "qwen/qwen3-next-80b-a3b-thinking": { - "id": "qwen/qwen3-next-80b-a3b-thinking", - "name": "Qwen: Qwen3 Next 80B A3B Thinking", + "zai-org/GLM-5-TEE": { + "id": "zai-org/GLM-5-TEE", + "name": "GLM 5 TEE", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-09-11", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-14", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.0975, "output": 0.78 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 202752, + "output": 65535 + }, + "cost": { + "input": 0.95, + "output": 2.55, + "cache_read": 0.475 + } }, - "qwen/qwen3-vl-30b-a3b-instruct": { - "id": "qwen/qwen3-vl-30b-a3b-instruct", - "name": "Qwen: Qwen3 VL 30B A3B Instruct", - "attachment": true, - "reasoning": false, + "zai-org/GLM-4.7-TEE": { + "id": "zai-org/GLM-4.7-TEE", + "name": "GLM 4.7 TEE", + "family": "glm", + "attachment": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-10-05", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.13, "output": 0.52 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 202752, + "output": 65535 + }, + "cost": { + "input": 0.39, + "output": 1.75, + "cache_read": 0.195 + } }, - "qwen/qwen3-235b-a22b-thinking-2507": { - "id": "qwen/qwen3-235b-a22b-thinking-2507", - "name": "Qwen: Qwen3 235B A22B Thinking 2507", - "attachment": false, + "zai-org/GLM-4.6V": { + "id": "zai-org/GLM-4.6V", + "name": "GLM 4.6V", + "family": "glm", + "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-07-25", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.11, "output": 0.6 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 0.9, + "cache_read": 0.15 + } }, - "qwen/qwen3-max-thinking": { - "id": "qwen/qwen3-max-thinking", - "name": "Qwen: Qwen3 Max Thinking", + "zai-org/GLM-5-Turbo": { + "id": "zai-org/GLM-5-Turbo", + "name": "GLM 5 Turbo", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2026-01-23", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.78, "output": 3.9 }, - "limit": { "context": 262144, "output": 32768 } + "release_date": "2026-03-11", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202752, + "output": 65535 + }, + "cost": { + "input": 0.4891, + "output": 1.9565, + "cache_read": 0.24455 + } }, - "qwen/qwen3-next-80b-a3b-instruct": { - "id": "qwen/qwen3-next-80b-a3b-instruct", - "name": "Qwen: Qwen3 Next 80B A3B Instruct", + "XiaomiMiMo/MiMo-V2-Flash-TEE": { + "id": "XiaomiMiMo/MiMo-V2-Flash-TEE", + "name": "MiMo V2 Flash TEE", + "family": "mimo", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-09-11", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-25", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.09, "output": 1.1 }, - "limit": { "context": 131072, "output": 52429 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.09, + "output": 0.29, + "cache_read": 0.045 + } }, - "qwen/qwen3-235b-a22b": { - "id": "qwen/qwen3-235b-a22b", - "name": "Qwen: Qwen3 235B A22B", + "deepseek-ai/DeepSeek-R1-Distill-Llama-70B": { + "id": "deepseek-ai/DeepSeek-R1-Distill-Llama-70B", + "name": "DeepSeek R1 Distill Llama 70B", + "family": "deepseek-thinking", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2024-12-01", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.455, "output": 1.82, "cache_read": 0.15 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.0272, + "output": 0.1087, + "cache_read": 0.0136 + } }, - "qwen/qwen3-vl-30b-a3b-thinking": { - "id": "qwen/qwen3-vl-30b-a3b-thinking", - "name": "Qwen: Qwen3 VL 30B A3B Thinking", - "attachment": true, + "deepseek-ai/DeepSeek-V3.1-TEE": { + "id": "deepseek-ai/DeepSeek-V3.1-TEE", + "name": "DeepSeek V3.1 TEE", + "family": "deepseek", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-10-11", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.13, "output": 1.56 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 163840, + "output": 65536 + }, + "cost": { + "input": 0.27, + "output": 1, + "cache_read": 0.135 + } }, - "qwen/qwen-plus-2025-07-28": { - "id": "qwen/qwen-plus-2025-07-28", - "name": "Qwen: Qwen Plus 0728", + "deepseek-ai/DeepSeek-V3-0324-TEE": { + "id": "deepseek-ai/DeepSeek-V3-0324-TEE", + "name": "DeepSeek V3 0324 TEE", + "family": "deepseek", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-09-09", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.26, "output": 0.78 }, - "limit": { "context": 1000000, "output": 32768 } - }, - "qwen/qwen3.5-397b-a17b": { - "id": "qwen/qwen3.5-397b-a17b", - "name": "Qwen: Qwen3.5 397B A17B", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2026-02-15", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.39, "output": 2.34 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 163840, + "output": 65536 + }, + "cost": { + "input": 0.25, + "output": 1, + "cache_read": 0.125 + } }, - "qwen/qwen3-coder-plus": { - "id": "qwen/qwen3-coder-plus", - "name": "Qwen: Qwen3 Coder Plus", + "deepseek-ai/DeepSeek-R1-0528-TEE": { + "id": "deepseek-ai/DeepSeek-R1-0528-TEE", + "name": "DeepSeek R1 0528 TEE", + "family": "deepseek-thinking", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-07-01", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.65, "output": 3.25, "cache_read": 0.2 }, - "limit": { "context": 1000000, "output": 65536 } - }, - "qwen/qwen3-max": { - "id": "qwen/qwen3-max", - "name": "Qwen: Qwen3 Max", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2025-09-05", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.2, "output": 6, "cache_read": 0.24 }, - "limit": { "context": 262144, "output": 32768 } + "limit": { + "context": 163840, + "output": 65536 + }, + "cost": { + "input": 0.45, + "output": 2.15, + "cache_read": 0.225 + } }, - "qwen/qwen3-32b": { - "id": "qwen/qwen3-32b", - "name": "Qwen: Qwen3 32B", + "deepseek-ai/DeepSeek-V3.2-TEE": { + "id": "deepseek-ai/DeepSeek-V3.2-TEE", + "name": "DeepSeek V3.2 TEE", + "family": "deepseek", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2024-12-01", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.08, "output": 0.24, "cache_read": 0.04 }, - "limit": { "context": 40960, "output": 40960 } + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.28, + "output": 0.42, + "cache_read": 0.14 + } }, - "qwen/qwen3-vl-235b-a22b-thinking": { - "id": "qwen/qwen3-vl-235b-a22b-thinking", - "name": "Qwen: Qwen3 VL 235B A22B Thinking", - "attachment": true, + "openai/gpt-oss-120b-TEE": { + "id": "openai/gpt-oss-120b-TEE", + "name": "gpt oss 120b TEE", + "family": "gpt-oss", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-09-24", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.26, "output": 2.6 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.09, + "output": 0.36, + "cache_read": 0.045 + } }, - "qwen/qwen-2.5-72b-instruct": { - "id": "qwen/qwen-2.5-72b-instruct", - "name": "Qwen2.5 72B Instruct", - "attachment": false, + "unsloth/gemma-3-12b-it": { + "id": "unsloth/gemma-3-12b-it", + "name": "gemma 3 12b it", + "family": "unsloth", + "attachment": true, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "release_date": "2024-09", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.12, "output": 0.39 }, - "limit": { "context": 32768, "output": 16384 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.03, + "output": 0.1, + "cache_read": 0.015 + } }, - "qwen/qwen3-coder-flash": { - "id": "qwen/qwen3-coder-flash", - "name": "Qwen: Qwen3 Coder Flash", + "unsloth/Llama-3.2-3B-Instruct": { + "id": "unsloth/Llama-3.2-3B-Instruct", + "name": "Llama 3.2 3B Instruct", + "family": "unsloth", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "release_date": "2025-07-23", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.195, "output": 0.975, "cache_read": 0.06 }, - "limit": { "context": 1000000, "output": 65536 } + "release_date": "2025-02-12", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 16384, + "output": 16384 + }, + "cost": { + "input": 0.01, + "output": 0.0136, + "cache_read": 0.005 + } }, - "qwen/qwen-2.5-vl-7b-instruct": { - "id": "qwen/qwen-2.5-vl-7b-instruct", - "name": "Qwen: Qwen2.5-VL 7B Instruct", + "unsloth/gemma-3-4b-it": { + "id": "unsloth/gemma-3-4b-it", + "name": "gemma 3 4b it", + "family": "unsloth", "attachment": true, "reasoning": false, "tool_call": false, + "structured_output": true, "temperature": true, - "release_date": "2024-08-28", - "last_updated": "2024-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 32768, "output": 6554 } + "limit": { + "context": 96000, + "output": 96000 + }, + "cost": { + "input": 0.01, + "output": 0.0272, + "cache_read": 0.005 + } }, - "qwen/qwen-2.5-coder-32b-instruct": { - "id": "qwen/qwen-2.5-coder-32b-instruct", - "name": "Qwen2.5 Coder 32B Instruct", + "unsloth/Llama-3.2-1B-Instruct": { + "id": "unsloth/Llama-3.2-1B-Instruct", + "name": "Llama 3.2 1B Instruct", + "family": "unsloth", "attachment": false, "reasoning": false, "tool_call": false, "temperature": true, - "release_date": "2024-11-11", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01-27", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.2, "cache_read": 0.015 }, - "limit": { "context": 32768, "output": 8192 } + "limit": { + "context": 16384, + "output": 8192 + }, + "cost": { + "input": 0.01, + "output": 0.0109, + "cache_read": 0.005 + } }, - "qwen/qwen3-30b-a3b-instruct-2507": { - "id": "qwen/qwen3-30b-a3b-instruct-2507", - "name": "Qwen: Qwen3 30B A3B Instruct 2507", + "unsloth/Mistral-Nemo-Instruct-2407": { + "id": "unsloth/Mistral-Nemo-Instruct-2407", + "name": "Mistral Nemo Instruct 2407", + "family": "unsloth", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, + "structured_output": true, "temperature": true, - "release_date": "2025-07-29", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.09, "output": 0.3, "cache_read": 0.04 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.02, + "output": 0.04, + "cache_read": 0.01 + } }, - "xiaomi/mimo-v2-flash": { - "id": "xiaomi/mimo-v2-flash", - "name": "Xiaomi: MiMo-V2-Flash", - "attachment": false, - "reasoning": true, + "unsloth/gemma-3-27b-it": { + "id": "unsloth/gemma-3-27b-it", + "name": "gemma 3 27b it", + "family": "unsloth", + "attachment": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-12-14", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.09, "output": 0.29, "cache_read": 0.045 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 128000, + "output": 65536 + }, + "cost": { + "input": 0.0272, + "output": 0.1087, + "cache_read": 0.0136 + } }, - "stepfun/step-3.5-flash": { - "id": "stepfun/step-3.5-flash", - "name": "StepFun: Step 3.5 Flash", - "attachment": false, + "google/gemma-4-31B-turbo-TEE": { + "id": "google/gemma-4-31B-turbo-TEE", + "name": "gemma 4 31B turbo TEE", + "family": "gemma", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-01-29", - "last_updated": "2026-01-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-25", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.3, "cache_read": 0.02 }, - "limit": { "context": 256000, "output": 256000 } + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.13, + "output": 0.38, + "cache_read": 0.065 + } }, - "stepfun/step-3.5-flash:free": { - "id": "stepfun/step-3.5-flash:free", - "name": "StepFun: Step 3.5 Flash (free)", - "attachment": false, + "moonshotai/Kimi-K2.6-TEE": { + "id": "moonshotai/Kimi-K2.6-TEE", + "name": "Kimi K2.6 TEE", + "family": "kimi", + "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2026-01-29", - "last_updated": "2026-01-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-12", + "release_date": "2026-04-20", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 256000, "output": 256000 } + "limit": { + "context": 262144, + "output": 65535 + }, + "cost": { + "input": 0.95, + "output": 4, + "cache_read": 0.475 + } }, - "alfredpros/codellama-7b-instruct-solidity": { - "id": "alfredpros/codellama-7b-instruct-solidity", - "name": "AlfredPros: CodeLLaMa 7B Instruct Solidity", - "attachment": false, - "reasoning": false, - "tool_call": false, + "moonshotai/Kimi-K2.5-TEE": { + "id": "moonshotai/Kimi-K2.5-TEE", + "name": "Kimi K2.5 TEE", + "family": "kimi", + "attachment": true, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-04-14", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2026-01-27", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.8, "output": 1.2 }, - "limit": { "context": 4096, "output": 4096 } + "limit": { + "context": 262144, + "output": 65535 + }, + "cost": { + "input": 0.44, + "output": 2, + "cache_read": 0.22 + } }, - "ai21/jamba-large-1.7": { - "id": "ai21/jamba-large-1.7", - "name": "AI21: Jamba Large 1.7", + "MiniMaxAI/MiniMax-M2.5-TEE": { + "id": "MiniMaxAI/MiniMax-M2.5-TEE", + "name": "MiniMax M2.5 TEE", + "family": "minimax", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-08-09", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 8 }, - "limit": { "context": 256000, "output": 4096 } + "release_date": "2026-02-15", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 196608, + "output": 65536 + }, + "cost": { + "input": 0.15, + "output": 1.2, + "cache_read": 0.075 + } }, - "liquid/lfm-2.2-6b": { - "id": "liquid/lfm-2.2-6b", - "name": "LiquidAI: LFM2-2.6B", - "attachment": false, + "rednote-hilab/dots.ocr": { + "id": "rednote-hilab/dots.ocr", + "name": "dots.ocr", + "family": "rednote", + "attachment": true, "reasoning": false, "tool_call": false, + "structured_output": true, "temperature": true, - "release_date": "2025-10-20", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-29", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.01, "output": 0.02 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.01, + "output": 0.0109, + "cache_read": 0.005 + } }, - "liquid/lfm2-8b-a1b": { - "id": "liquid/lfm2-8b-a1b", - "name": "LiquidAI: LFM2-8B-A1B", + "tngtech/DeepSeek-TNG-R1T2-Chimera-TEE": { + "id": "tngtech/DeepSeek-TNG-R1T2-Chimera-TEE", + "name": "DeepSeek TNG R1T2 Chimera TEE", + "family": "deepseek", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-10-20", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-25", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.01, "output": 0.02 }, - "limit": { "context": 32768, "output": 32768 } - }, - "liquid/lfm-2-24b-a2b": { - "id": "liquid/lfm-2-24b-a2b", - "name": "LiquidAI: LFM2-24B-A2B", + "limit": { + "context": 163840, + "output": 163840 + }, + "cost": { + "input": 0.3, + "output": 1.1, + "cache_read": 0.15 + } + } + } + }, + "dinference": { + "id": "dinference", + "env": ["DINFERENCE_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.dinference.com/v1", + "name": "DInference", + "doc": "https://dinference.com", + "models": { + "gpt-oss-120b": { + "id": "gpt-oss-120b", + "name": "GPT OSS 120B", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "release_date": "2026-02-26", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08", + "last_updated": "2025-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.03, "output": 0.12 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.0675, + "output": 0.27 + } }, - "aion-labs/aion-2.0": { - "id": "aion-labs/aion-2.0", - "name": "AionLabs: Aion-2.0", - "attachment": false, - "reasoning": true, - "tool_call": false, - "temperature": true, - "release_date": "2026-02-24", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.8, "output": 1.6 }, - "limit": { "context": 131072, "output": 32768 } - }, - "aion-labs/aion-rp-llama-3.1-8b": { - "id": "aion-labs/aion-rp-llama-3.1-8b", - "name": "AionLabs: Aion-RP 1.0 (8B)", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-02-05", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.8, "output": 1.6 }, - "limit": { "context": 32768, "output": 32768 } - }, - "aion-labs/aion-1.0-mini": { - "id": "aion-labs/aion-1.0-mini", - "name": "AionLabs: Aion-1.0-Mini", - "attachment": false, - "reasoning": true, - "tool_call": false, - "temperature": true, - "release_date": "2025-02-05", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.7, "output": 1.4 }, - "limit": { "context": 131072, "output": 32768 } - }, - "aion-labs/aion-1.0": { - "id": "aion-labs/aion-1.0", - "name": "AionLabs: Aion-1.0", - "attachment": false, - "reasoning": true, - "tool_call": false, - "temperature": true, - "release_date": "2025-02-05", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 4, "output": 8 }, - "limit": { "context": 131072, "output": 32768 } - }, - "moonshotai/kimi-k2-thinking": { - "id": "moonshotai/kimi-k2-thinking", - "name": "MoonshotAI: Kimi K2 Thinking", + "glm-4.7": { + "id": "glm-4.7", + "name": "GLM-4.7", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-11-06", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.47, "output": 2, "cache_read": 0.2 }, - "limit": { "context": 131072, "output": 65535 } + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 0.45, + "output": 1.65 + } }, - "moonshotai/kimi-k2.5": { - "id": "moonshotai/kimi-k2.5", - "name": "MoonshotAI: Kimi K2.5", - "attachment": true, + "glm-5": { + "id": "glm-5", + "name": "GLM-5", + "family": "glm", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2026-01-27", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.45, "output": 2.2 }, - "limit": { "context": 262144, "output": 65535 } + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 0.75, + "output": 2.4 + } }, - "moonshotai/kimi-k2-0905": { - "id": "moonshotai/kimi-k2-0905", - "name": "MoonshotAI: Kimi K2 0905", + "glm-5.1": { + "id": "glm-5.1", + "name": "GLM-5.1", + "family": "glm", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.4, "output": 2, "cache_read": 0.15 }, - "limit": { "context": 131072, "output": 26215 } + "release_date": "2026-03-27", + "last_updated": "2026-03-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 3.89 + } }, - "moonshotai/kimi-k2": { - "id": "moonshotai/kimi-k2", - "name": "MoonshotAI: Kimi K2 0711", + "minimax-m2.5": { + "id": "minimax-m2.5", + "name": "MiniMax-M2.5", + "family": "minimax", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-07-11", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.55, "output": 2.2 }, - "limit": { "context": 131000, "output": 26215 } - }, - "tencent/hunyuan-a13b-instruct": { - "id": "tencent/hunyuan-a13b-instruct", - "name": "Tencent: Hunyuan A13B Instruct", + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 0.22, + "output": 0.88 + } + } + } + }, + "vivgrid": { + "id": "vivgrid", + "env": ["VIVGRID_API_KEY"], + "npm": "@ai-sdk/openai", + "api": "https://api.vivgrid.com/v1", + "name": "Vivgrid", + "doc": "https://docs.vivgrid.com/models", + "models": { + "gpt-5.1-codex-max": { + "id": "gpt-5.1-codex-max", + "name": "GPT-5.1 Codex Max", + "family": "gpt-codex", "attachment": false, "reasoning": true, - "tool_call": false, - "temperature": true, - "release_date": "2025-06-30", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.14, "output": 0.57 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "alibaba/tongyi-deepresearch-30b-a3b": { - "id": "alibaba/tongyi-deepresearch-30b-a3b", - "name": "Tongyi DeepResearch 30B A3B", - "attachment": false, + "gemini-3.1-flash-lite-preview": { + "id": "gemini-3.1-flash-lite-preview", + "name": "Gemini 3.1 Flash Lite Preview", + "family": "gemini-flash-lite", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-09-18", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2026-03-03", + "last_updated": "2026-03-03", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.09, "output": 0.45 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "provider": { + "npm": "@ai-sdk/openai-compatible" + }, + "cost": { + "input": 0.25, + "output": 1.5, + "cache_read": 0.025, + "cache_write": 1 + } }, - "bytedance-seed/seed-2.0-mini": { - "id": "bytedance-seed/seed-2.0-mini", - "name": "ByteDance Seed: Seed-2.0-Mini", + "gemini-3.1-pro-preview": { + "id": "gemini-3.1-pro-preview", + "name": "Gemini 3.1 Pro Preview", + "family": "gemini-pro", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-02-27", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.4 }, - "limit": { "context": 262144, "output": 131072 } + "knowledge": "2025-01", + "release_date": "2026-02-19", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "provider": { + "npm": "@ai-sdk/openai-compatible" + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2, + "tiers": [ + { + "input": 4, + "output": 18, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 4, + "output": 18, + "cache_read": 0.4 + } + } }, - "bytedance-seed/seed-1.6-flash": { - "id": "bytedance-seed/seed-1.6-flash", - "name": "ByteDance Seed: Seed 1.6 Flash", + "gpt-5-mini": { + "id": "gpt-5-mini", + "name": "GPT-5 Mini", + "family": "gpt-mini", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.075, "output": 0.3 }, - "limit": { "context": 262144, "output": 32768 } + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 272000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai-compatible" + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.03 + } }, - "bytedance-seed/seed-1.6": { - "id": "bytedance-seed/seed-1.6", - "name": "ByteDance Seed: Seed 1.6", - "attachment": true, + "gpt-5.3-codex": { + "id": "gpt-5.3-codex", + "name": "GPT-5.3 Codex", + "family": "gpt-codex", + "attachment": false, "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2025-09", - "last_updated": "2025-09", - "modalities": { "input": ["image", "text", "video"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-02-24", + "last_updated": "2026-02-24", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2 }, - "limit": { "context": 262144, "output": 32768 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "bytedance-seed/seed-2.0-lite": { - "id": "bytedance-seed/seed-2.0-lite", - "name": "ByteDance Seed: Seed-2.0-Lite", + "gpt-5.4-mini": { + "id": "gpt-5.4-mini", + "name": "GPT-5.4 Mini", + "family": "gpt-mini", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2026-03-10", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.25, "output": 2 }, - "limit": { "context": 262144, "output": 131072 } + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai-compatible" + }, + "cost": { + "input": 0.75, + "output": 4.5, + "cache_read": 0.075 + } }, - "inflection/inflection-3-pi": { - "id": "inflection/inflection-3-pi", - "name": "Inflection: Inflection 3 Pi", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2024-10-11", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "gpt-5.4-nano": { + "id": "gpt-5.4-nano", + "name": "GPT-5.4 Nano", + "family": "gpt-nano", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 8000, "output": 1024 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai-compatible" + }, + "cost": { + "input": 0.2, + "output": 1.25, + "cache_read": 0.02 + } }, - "inflection/inflection-3-productivity": { - "id": "inflection/inflection-3-productivity", - "name": "Inflection: Inflection 3 Productivity", + "gpt-5.2-codex": { + "id": "gpt-5.2-codex", + "name": "GPT-5.2 Codex", + "family": "gpt-codex", "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2024-10-11", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-01-14", + "last_updated": "2026-01-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 8000, "output": 1024 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "writer/palmyra-x5": { - "id": "writer/palmyra-x5", - "name": "Writer: Palmyra X5", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-04-28", - "last_updated": "2025-04-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "gpt-5.4": { + "id": "gpt-5.4", + "name": "GPT-5.4", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.6, "output": 6 }, - "limit": { "context": 1040000, "output": 8192 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai-compatible" + }, + "cost": { + "input": 2.5, + "output": 15, + "cache_read": 0.25 + } }, - "inception/mercury-2": { - "id": "inception/mercury-2", - "name": "Inception: Mercury 2", + "deepseek-v3.2": { + "id": "deepseek-v3.2", + "name": "DeepSeek-V3.2", + "family": "deepseek", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2026-02-24", - "last_updated": "2026-02-24", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 0.75, "cache_read": 0.025 }, - "limit": { "context": 128000, "output": 50000 } + "knowledge": "2024-07", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai-compatible" + }, + "cost": { + "input": 0.28, + "output": 0.42 + } }, - "inception/mercury-coder": { - "id": "inception/mercury-coder", - "name": "Inception: Mercury Coder", + "gpt-5.1-codex": { + "id": "gpt-5.1-codex", + "name": "GPT-5.1 Codex", + "family": "gpt-codex", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2025-02-26", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 0.75 }, - "limit": { "context": 128000, "output": 32000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "inception/mercury": { - "id": "inception/mercury", - "name": "Inception: Mercury", - "attachment": false, - "reasoning": false, + "gpt-5.5": { + "id": "gpt-5.5", + "name": "GPT-5.5", + "family": "gpt", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2025-06-26", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-12-01", + "release_date": "2026-04-23", + "last_updated": "2026-04-23", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 0.75 }, - "limit": { "context": 128000, "output": 32000 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai-compatible" + }, + "cost": { + "input": 5, + "output": 30, + "cache_read": 0.5, + "context_over_200k": { + "input": 10, + "output": 45, + "cache_read": 1 + }, + "tiers": [ + { + "input": 10, + "output": 45, + "cache_read": 1, + "tier": { + "type": "context", + "size": 272000 + } + } + ] + } }, - "anthracite-org/magnum-v4-72b": { - "id": "anthracite-org/magnum-v4-72b", - "name": "Magnum v4 72B", + "deepseek-v4-pro": { + "id": "deepseek-v4-pro", + "name": "DeepSeek V4 Pro", + "family": "deepseek-thinking", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2024-10-22", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 3, "output": 5 }, - "limit": { "context": 16384, "output": 2048 } - }, - "thedrummer/skyfall-36b-v2": { - "id": "thedrummer/skyfall-36b-v2", - "name": "TheDrummer: Skyfall 36B V2", - "attachment": false, - "reasoning": false, - "tool_call": false, + "limit": { + "context": 1000000, + "output": 384000 + }, + "provider": { + "npm": "@ai-sdk/openai-compatible" + }, + "cost": { + "input": 1.74, + "output": 3.48, + "cache_read": 0.145 + } + } + } + }, + "deepinfra": { + "id": "deepinfra", + "env": ["DEEPINFRA_API_KEY"], + "npm": "@ai-sdk/deepinfra", + "name": "Deep Infra", + "doc": "https://deepinfra.com/models", + "models": { + "Qwen/Qwen3.5-397B-A17B": { + "id": "Qwen/Qwen3.5-397B-A17B", + "name": "Qwen 3.5 397B A17B", + "family": "qwen", + "attachment": true, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-03-11", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2026-02-01", + "last_updated": "2026-04-20", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.55, "output": 0.8 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 262144, + "output": 81920 + }, + "cost": { + "input": 0.54, + "output": 3.4 + } }, - "thedrummer/rocinante-12b": { - "id": "thedrummer/rocinante-12b", - "name": "TheDrummer: Rocinante 12B", - "attachment": false, - "reasoning": false, + "Qwen/Qwen3.5-35B-A3B": { + "id": "Qwen/Qwen3.5-35B-A3B", + "name": "Qwen 3.5 35B A3B", + "family": "qwen", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2024-09-30", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2026-02-01", + "last_updated": "2026-04-20", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.17, "output": 0.43 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 262144, + "output": 81920 + }, + "cost": { + "input": 0.2, + "output": 0.95 + } }, - "thedrummer/cydonia-24b-v4.1": { - "id": "thedrummer/cydonia-24b-v4.1", - "name": "TheDrummer: Cydonia 24B V4.1", + "Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo": { + "id": "Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo", + "name": "Qwen3 Coder 480B A35B Instruct Turbo", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "release_date": "2025-09-27", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 0.5 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 262144, + "output": 66536 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "thedrummer/unslopnemo-12b": { - "id": "thedrummer/unslopnemo-12b", - "name": "TheDrummer: UnslopNemo 12B", + "Qwen/Qwen3-Coder-480B-A35B-Instruct": { + "id": "Qwen/Qwen3-Coder-480B-A35B-Instruct", + "name": "Qwen3 Coder 480B A35B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2024-11-09", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.4, "output": 0.4 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 262144, + "output": 66536 + }, + "cost": { + "input": 0.4, + "output": 1.6 + } }, - "tngtech/deepseek-r1t2-chimera": { - "id": "tngtech/deepseek-r1t2-chimera", - "name": "TNG: DeepSeek R1T2 Chimera", - "attachment": false, + "Qwen/Qwen3.6-35B-A3B": { + "id": "Qwen/Qwen3.6-35B-A3B", + "name": "Qwen3.6 35B A3B", + "family": "qwen", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-07-08", - "last_updated": "2025-07-08", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-01", + "last_updated": "2026-04-01", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.25, "output": 0.85, "cache_read": 0.125 }, - "limit": { "context": 163840, "output": 163840 } + "limit": { + "context": 262144, + "output": 81920 + }, + "cost": { + "input": 0.2, + "output": 1 + } }, - "deepcogito/cogito-v2.1-671b": { - "id": "deepcogito/cogito-v2.1-671b", - "name": "Deep Cogito: Cogito v2.1 671B", + "zai-org/GLM-4.7-Flash": { + "id": "zai-org/GLM-4.7-Flash", + "name": "GLM-4.7-Flash", + "family": "glm-flash", "attachment": false, "reasoning": true, - "tool_call": false, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-11-14", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-01-19", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1.25, "output": 1.25 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 202752, + "output": 16384 + }, + "cost": { + "input": 0.06, + "output": 0.4 + } }, - "mistralai/mistral-medium-3.1": { - "id": "mistralai/mistral-medium-3.1", - "name": "Mistral: Mistral Medium 3.1", - "attachment": true, + "zai-org/GLM-4.5": { + "id": "zai-org/GLM-4.5", + "name": "GLM-4.5", + "family": "glm", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-08-12", - "last_updated": "2025-08-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 131072, "output": 26215 } + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 98304 + }, + "status": "deprecated", + "cost": { + "input": 0.6, + "output": 2.2 + } }, - "mistralai/mixtral-8x22b-instruct": { - "id": "mistralai/mixtral-8x22b-instruct", - "name": "Mistral: Mixtral 8x22B Instruct", + "zai-org/GLM-4.7": { + "id": "zai-org/GLM-4.7", + "name": "GLM-4.7", + "family": "glm", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2024-04-17", - "last_updated": "2024-04-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 2, "output": 6 }, - "limit": { "context": 65536, "output": 13108 } + "limit": { + "context": 202752, + "output": 16384 + }, + "cost": { + "input": 0.43, + "output": 1.75, + "cache_read": 0.08 + } }, - "mistralai/devstral-medium": { - "id": "mistralai/devstral-medium", - "name": "Mistral: Devstral Medium", + "zai-org/GLM-5.1": { + "id": "zai-org/GLM-5.1", + "name": "GLM-5.1", + "family": "glm", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-07-10", - "last_updated": "2025-07-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-04-07", + "last_updated": "2026-04-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 131072, "output": 26215 } + "limit": { + "context": 202752, + "output": 16384 + }, + "cost": { + "input": 1.4, + "output": 4.4, + "cache_read": 0.26 + } }, - "mistralai/mistral-7b-instruct-v0.1": { - "id": "mistralai/mistral-7b-instruct-v0.1", - "name": "Mistral: Mistral 7B Instruct v0.1", + "zai-org/GLM-5": { + "id": "zai-org/GLM-5", + "name": "GLM-5", + "family": "glm", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.11, "output": 0.19 }, - "limit": { "context": 2824, "output": 565 } + "knowledge": "2025-12", + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202752, + "output": 16384 + }, + "cost": { + "input": 0.8, + "output": 2.56, + "cache_read": 0.16 + } }, - "mistralai/mistral-medium-3": { - "id": "mistralai/mistral-medium-3", - "name": "Mistral: Mistral Medium 3", + "zai-org/GLM-4.6V": { + "id": "zai-org/GLM-4.6V", + "name": "GLM-4.6V", + "family": "glm", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-05-07", - "last_updated": "2025-05-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 131072, "output": 26215 } + "knowledge": "2025-04", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 0.9 + } }, - "mistralai/devstral-2512": { - "id": "mistralai/devstral-2512", - "name": "Mistral: Devstral 2 2512", + "zai-org/GLM-4.6": { + "id": "zai-org/GLM-4.6", + "name": "GLM-4.6", + "family": "glm", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-09-12", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.4, "output": 2, "cache_read": 0.025 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.43, + "output": 1.74, + "cache_read": 0.08 + } }, - "mistralai/mixtral-8x7b-instruct": { - "id": "mistralai/mixtral-8x7b-instruct", - "name": "Mistral: Mixtral 8x7B Instruct", + "meta-llama/Llama-4-Scout-17B-16E-Instruct": { + "id": "meta-llama/Llama-4-Scout-17B-16E-Instruct", + "name": "Llama 4 Scout 17B", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": true, - "temperature": true, - "release_date": "2023-12-10", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.54, "output": 0.54 }, - "limit": { "context": 32768, "output": 16384 } + "limit": { + "context": 10000000, + "output": 16384 + }, + "cost": { + "input": 0.08, + "output": 0.3 + } }, - "mistralai/mistral-small-24b-instruct-2501": { - "id": "mistralai/mistral-small-24b-instruct-2501", - "name": "Mistral: Mistral Small 3", + "meta-llama/Llama-3.1-8B-Instruct": { + "id": "meta-llama/Llama-3.1-8B-Instruct", + "name": "Llama 3.1 8B", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": true, - "temperature": true, - "release_date": "2025-12-29", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.05, "output": 0.08 }, - "limit": { "context": 32768, "output": 16384 } + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.02, + "output": 0.05 + } }, - "mistralai/ministral-8b-2512": { - "id": "mistralai/ministral-8b-2512", - "name": "Mistral: Ministral 3 8B 2512", - "attachment": true, + "meta-llama/Llama-3.1-70B-Instruct": { + "id": "meta-llama/Llama-3.1-70B-Instruct", + "name": "Llama 3.1 70B", + "family": "llama", + "attachment": false, "reasoning": false, "tool_call": true, - "temperature": true, - "release_date": "2025-12-02", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.15 }, - "limit": { "context": 262144, "output": 32768 } - }, - "mistralai/ministral-14b-2512": { - "id": "mistralai/ministral-14b-2512", - "name": "Mistral: Ministral 3 14B 2512", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2025-12-16", - "last_updated": "2025-12-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 262144, "output": 52429 } + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.4, + "output": 0.4 + } }, - "mistralai/mistral-large-2411": { - "id": "mistralai/mistral-large-2411", - "name": "Mistral Large 2411", + "meta-llama/Llama-3.1-8B-Instruct-Turbo": { + "id": "meta-llama/Llama-3.1-8B-Instruct-Turbo", + "name": "Llama 3.1 8B Turbo", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": true, - "temperature": true, - "release_date": "2024-07-24", - "last_updated": "2024-11-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 2, "output": 6 }, - "limit": { "context": 131072, "output": 26215 } + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.02, + "output": 0.03 + } }, - "mistralai/codestral-2508": { - "id": "mistralai/codestral-2508", - "name": "Mistral: Codestral 2508", + "meta-llama/Llama-3.3-70B-Instruct-Turbo": { + "id": "meta-llama/Llama-3.3-70B-Instruct-Turbo", + "name": "Llama 3.3 70B Turbo", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": true, - "temperature": true, - "release_date": "2025-08-01", - "last_updated": "2025-08-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 0.9 }, - "limit": { "context": 256000, "output": 51200 } + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.1, + "output": 0.32 + } }, - "mistralai/mistral-large-2407": { - "id": "mistralai/mistral-large-2407", - "name": "Mistral Large 2407", + "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8": { + "id": "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8", + "name": "Llama 4 Maverick 17B FP8", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": true, - "temperature": true, - "release_date": "2024-11-19", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 2, "output": 6 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 1000000, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "mistralai/devstral-small": { - "id": "mistralai/devstral-small", - "name": "Mistral: Devstral Small 1.1", + "meta-llama/Llama-3.1-70B-Instruct-Turbo": { + "id": "meta-llama/Llama-3.1-70B-Instruct-Turbo", + "name": "Llama 3.1 70B Turbo", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": true, - "temperature": true, - "release_date": "2025-05-07", - "last_updated": "2025-07-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 131072, "output": 26215 } + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.4, + "output": 0.4 + } }, - "mistralai/mistral-small-creative": { - "id": "mistralai/mistral-small-creative", - "name": "Mistral: Mistral Small Creative", + "deepseek-ai/DeepSeek-R1-0528": { + "id": "deepseek-ai/DeepSeek-R1-0528", + "name": "DeepSeek-R1-0528", "attachment": false, - "reasoning": false, - "tool_call": true, - "release_date": "2025-12-17", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 32768, "output": 32768 } + "reasoning": true, + "tool_call": false, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-05-28", + "last_updated": "2025-05-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 163840, + "output": 64000 + }, + "cost": { + "input": 0.5, + "output": 2.15, + "cache_read": 0.35 + } }, - "mistralai/voxtral-small-24b-2507": { - "id": "mistralai/voxtral-small-24b-2507", - "name": "Mistral: Voxtral Small 24B 2507", + "deepseek-ai/DeepSeek-V3.2": { + "id": "deepseek-ai/DeepSeek-V3.2", + "name": "DeepSeek-V3.2", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-07-01", - "last_updated": "2025-07-01", - "modalities": { "input": ["text", "audio"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 32000, "output": 6400 } + "knowledge": "2024-12", + "release_date": "2025-12-02", + "last_updated": "2025-12-02", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 163840, + "output": 64000 + }, + "cost": { + "input": 0.26, + "output": 0.38, + "cache_read": 0.13 + } }, - "mistralai/mistral-nemo": { - "id": "mistralai/mistral-nemo", - "name": "Mistral: Mistral Nemo", + "openai/gpt-oss-20b": { + "id": "openai/gpt-oss-20b", + "name": "GPT OSS 20B", + "family": "gpt-oss", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2024-07-01", - "last_updated": "2024-07-30", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.02, "output": 0.04 }, - "limit": { "context": 131072, "output": 16384 } + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.03, + "output": 0.14 + } }, - "mistralai/mistral-large": { - "id": "mistralai/mistral-large", - "name": "Mistral Large", + "openai/gpt-oss-120b": { + "id": "openai/gpt-oss-120b", + "name": "GPT OSS 120B", + "family": "gpt-oss", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2024-07-24", - "last_updated": "2025-12-02", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 2, "output": 6 }, - "limit": { "context": 128000, "output": 25600 } + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.05, + "output": 0.24 + } }, - "mistralai/ministral-3b-2512": { - "id": "mistralai/ministral-3b-2512", - "name": "Mistral: Ministral 3 3B 2512", - "attachment": true, - "reasoning": false, + "moonshotai/Kimi-K2-Thinking": { + "id": "moonshotai/Kimi-K2-Thinking", + "name": "Kimi K2 Thinking", + "family": "kimi-thinking", + "attachment": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-12-02", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-11-06", + "last_updated": "2025-11-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.1 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.47, + "output": 2 + } }, - "mistralai/mistral-small-3.2-24b-instruct": { - "id": "mistralai/mistral-small-3.2-24b-instruct", - "name": "Mistral: Mistral Small 3.2 24B", + "moonshotai/Kimi-K2.6": { + "id": "moonshotai/Kimi-K2.6", + "name": "Kimi K2.6", + "family": "kimi", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-06-20", - "last_updated": "2025-06-20", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.06, "output": 0.18, "cache_read": 0.03 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 262144, + "output": 16384 + }, + "cost": { + "input": 0.75, + "output": 3.5, + "cache_read": 0.15 + } }, - "mistralai/pixtral-large-2411": { - "id": "mistralai/pixtral-large-2411", - "name": "Mistral: Pixtral Large 2411", - "attachment": true, + "moonshotai/Kimi-K2-Instruct": { + "id": "moonshotai/Kimi-K2-Instruct", + "name": "Kimi K2", + "family": "kimi", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2024-11-19", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-07-11", + "last_updated": "2025-07-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 2, "output": 6 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.5, + "output": 2 + } }, - "mistralai/mistral-saba": { - "id": "mistralai/mistral-saba", - "name": "Mistral: Saba", + "moonshotai/Kimi-K2-Instruct-0905": { + "id": "moonshotai/Kimi-K2-Instruct-0905", + "name": "Kimi K2 0905", + "family": "kimi", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-02-17", - "last_updated": "2026-03-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.6 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.4, + "output": 2, + "cache_read": 0.15 + } }, - "mistralai/mistral-small-3.1-24b-instruct": { - "id": "mistralai/mistral-small-3.1-24b-instruct", - "name": "Mistral: Mistral Small 3.1 24B", + "moonshotai/Kimi-K2.5": { + "id": "moonshotai/Kimi-K2.5", + "name": "Kimi K2.5", + "family": "kimi", "attachment": true, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-03-17", - "last_updated": "2026-03-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.35, "output": 0.56, "cache_read": 0.015 }, - "limit": { "context": 128000, "output": 131072 } + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0.5, + "output": 2.8 + } }, - "mistralai/mistral-large-2512": { - "id": "mistralai/mistral-large-2512", - "name": "Mistral: Mistral Large 3 2512", - "attachment": true, - "reasoning": false, + "MiniMaxAI/MiniMax-M2": { + "id": "MiniMaxAI/MiniMax-M2", + "name": "MiniMax M2", + "family": "minimax", + "attachment": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2024-11-01", - "last_updated": "2025-12-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.5, "output": 1.5 }, - "limit": { "context": 262144, "output": 52429 } - } - } - }, - "kuae-cloud-coding-plan": { - "id": "kuae-cloud-coding-plan", - "env": ["KUAE_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://coding-plan-endpoint.kuaecloud.net/v1", - "name": "KUAE Cloud Coding Plan", - "doc": "https://docs.mthreads.com/kuaecloud/kuaecloud-doc-online/coding_plan/", - "models": { - "GLM-4.7": { - "id": "GLM-4.7", - "name": "GLM-4.7", - "family": "glm", + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0.254, + "output": 1.02 + } + }, + "MiniMaxAI/MiniMax-M2.5": { + "id": "MiniMaxAI/MiniMax-M2.5", + "name": "MiniMax M2.5", + "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-06", + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 204800, "output": 131072 } - } - } - }, - "modelscope": { - "id": "modelscope", - "env": ["MODELSCOPE_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api-inference.modelscope.cn/v1", - "name": "ModelScope", - "doc": "https://modelscope.cn/docs/model-service/API-Inference/intro", - "models": { - "ZhipuAI/GLM-4.5": { - "id": "ZhipuAI/GLM-4.5", - "name": "GLM-4.5", - "family": "glm", + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.27, + "output": 0.95, + "cache_read": 0.03, + "cache_write": 0.375 + } + }, + "MiniMaxAI/MiniMax-M2.1": { + "id": "MiniMaxAI/MiniMax-M2.1", + "name": "MiniMax M2.1", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-06", + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 98304 } + "limit": { + "context": 196608, + "output": 196608 + }, + "cost": { + "input": 0.28, + "output": 1.2 + } }, - "ZhipuAI/GLM-4.6": { - "id": "ZhipuAI/GLM-4.6", - "name": "GLM-4.6", - "family": "glm", + "anthropic/claude-3-7-sonnet-latest": { + "id": "anthropic/claude-3-7-sonnet-latest", + "name": "Claude Sonnet 3.7 (Latest)", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10-31", + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3.3, + "output": 16.5, + "cache_read": 0.33 + } + }, + "anthropic/claude-4-opus": { + "id": "anthropic/claude-4-opus", + "name": "Claude Opus 4", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-06-12", + "last_updated": "2025-06-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 16.5, + "output": 82.5 + } + }, + "deepseek-ai/DeepSeek-V4-Flash": { + "id": "deepseek-ai/DeepSeek-V4-Flash", + "name": "DeepSeek V4 Flash", + "family": "deepseek-flash", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 202752, "output": 98304 } + "limit": { + "context": 1000000, + "output": 384000 + }, + "cost": { + "input": 0.14, + "output": 0.28, + "cache_read": 0.028 + } }, - "Qwen/Qwen3-30B-A3B-Thinking-2507": { - "id": "Qwen/Qwen3-30B-A3B-Thinking-2507", - "name": "Qwen3 30B A3B Thinking 2507", - "family": "qwen", + "deepseek-ai/DeepSeek-V4-Pro": { + "id": "deepseek-ai/DeepSeek-V4-Pro", + "name": "DeepSeek V4 Pro", + "family": "deepseek-thinking", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-30", - "last_updated": "2025-07-30", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 32768 } + "limit": { + "context": 65536, + "output": 65536 + }, + "cost": { + "input": 1.74, + "output": 3.48, + "cache_read": 0.145 + } }, - "Qwen/Qwen3-235B-A22B-Thinking-2507": { - "id": "Qwen/Qwen3-235B-A22B-Thinking-2507", - "name": "Qwen3-235B-A22B-Thinking-2507", - "family": "qwen", + "google/gemma-4-26B-A4B-it": { + "id": "google/gemma-4-26B-A4B-it", + "name": "Gemma 4 26B", + "family": "gemma", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-25", - "last_updated": "2025-07-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 131072 } + "limit": { + "context": 256000, + "output": 8192 + }, + "cost": { + "input": 0.07, + "output": 0.34 + } }, - "Qwen/Qwen3-Coder-30B-A3B-Instruct": { - "id": "Qwen/Qwen3-Coder-30B-A3B-Instruct", - "name": "Qwen3 Coder 30B A3B Instruct", - "family": "qwen", + "google/gemma-4-31B-it": { + "id": "google/gemma-4-31B-it", + "name": "Gemma 4 31B", + "family": "gemma", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-31", - "last_updated": "2025-07-31", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 256000, + "output": 8192 + }, + "cost": { + "input": 0.13, + "output": 0.38 + } }, - "Qwen/Qwen3-30B-A3B-Instruct-2507": { - "id": "Qwen/Qwen3-30B-A3B-Instruct-2507", - "name": "Qwen3 30B A3B Instruct 2507", - "family": "qwen", + "xiaomi/mimo-v2.5-pro": { + "id": "xiaomi/mimo-v2.5-pro", + "name": "MiMo-V2.5-Pro", + "family": "mimo", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-30", - "last_updated": "2025-07-30", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 16384 } + "limit": { + "context": 1048576, + "output": 16384 + }, + "cost": { + "input": 1, + "output": 3, + "cache_read": 0.2, + "context_over_200k": { + "input": 2, + "output": 6, + "cache_read": 0.4 + }, + "tiers": [ + { + "input": 2, + "output": 6, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 256000 + } + } + ] + } }, - "Qwen/Qwen3-235B-A22B-Instruct-2507": { - "id": "Qwen/Qwen3-235B-A22B-Instruct-2507", - "name": "Qwen3 235B A22B Instruct 2507", - "family": "qwen", - "attachment": false, - "reasoning": false, + "xiaomi/mimo-v2.5": { + "id": "xiaomi/mimo-v2.5", + "name": "MiMo-V2.5", + "family": "mimo", + "attachment": true, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04-28", - "last_updated": "2025-07-21", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 131072 } + "limit": { + "context": 262144, + "output": 16384 + }, + "cost": { + "input": 0.4, + "output": 2, + "cache_read": 0.08, + "context_over_200k": { + "input": 0.8, + "output": 4, + "cache_read": 0.16 + }, + "tiers": [ + { + "input": 0.8, + "output": 4, + "cache_read": 0.16, + "tier": { + "type": "context", + "size": 256000 + } + } + ] + } } } }, - "openrouter": { - "id": "openrouter", - "env": ["OPENROUTER_API_KEY"], - "npm": "@openrouter/ai-sdk-provider", - "api": "https://openrouter.ai/api/v1", - "name": "OpenRouter", - "doc": "https://openrouter.ai/models", + "qiniu-ai": { + "id": "qiniu-ai", + "env": ["QINIU_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.qnaigc.com/v1", + "name": "Qiniu", + "doc": "https://developer.qiniu.com/aitokenapi", "models": { - "openai/gpt-5.2-codex": { - "id": "openai/gpt-5.2-codex", - "name": "GPT-5.2-Codex", - "family": "gpt-codex", - "attachment": true, - "reasoning": true, + "qwen3-235b-a22b": { + "id": "qwen3-235b-a22b", + "name": "Qwen 3 235B A22B", + "attachment": false, + "reasoning": false, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-08-31", - "release_date": "2026-01-14", - "last_updated": "2026-01-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 128000, + "output": 32000 + } }, - "openai/gpt-5.1-codex-mini": { - "id": "openai/gpt-5.1-codex-mini", - "name": "GPT-5.1-Codex-Mini", - "family": "gpt-codex", + "doubao-seed-1.6-flash": { + "id": "doubao-seed-1.6-flash", + "name": "Doubao-Seed 1.6 Flash", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-08-15", + "last_updated": "2025-08-15", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.025 }, - "limit": { "context": 400000, "output": 100000 } + "limit": { + "context": 256000, + "output": 32000 + } }, - "openai/gpt-5.4-pro": { - "id": "openai/gpt-5.4-pro", - "name": "GPT-5.4 Pro", - "family": "gpt-pro", + "qwen3-235b-a22b-instruct-2507": { + "id": "qwen3-235b-a22b-instruct-2507", + "name": "Qwen3 235b A22B Instruct 2507", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": false, + "temperature": true, + "release_date": "2025-08-12", + "last_updated": "2025-08-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 64000 + } + }, + "doubao-seed-2.0-code": { + "id": "doubao-seed-2.0-code", + "name": "Doubao Seed 2.0 Code", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": false, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-05", - "last_updated": "2026-03-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": true, + "release_date": "2026-02-14", + "last_updated": "2026-02-14", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 30, "output": 180, "cache_read": 30 }, - "limit": { "context": 1050000, "input": 922000, "output": 128000 } + "limit": { + "context": 256000, + "output": 128000 + } }, - "openai/gpt-oss-120b:free": { - "id": "openai/gpt-oss-120b:free", - "name": "gpt-oss-120b (free)", - "family": "gpt-oss", + "deepseek-v3-0324": { + "id": "deepseek-v3-0324", + "name": "DeepSeek-V3-0324", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": false, "temperature": true, "release_date": "2025-08-05", "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 32768 } + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16000 + } }, - "openai/gpt-oss-120b:exacto": { - "id": "openai/gpt-oss-120b:exacto", - "name": "GPT OSS 120B (exacto)", - "family": "gpt-oss", + "doubao-1.5-thinking-pro": { + "id": "doubao-1.5-thinking-pro", + "name": "Doubao 1.5 Thinking Pro", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, "release_date": "2025-08-05", "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.05, "output": 0.24 }, - "limit": { "context": 131072, "output": 32768 } + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16000 + } }, - "openai/gpt-5.4-mini": { - "id": "openai/gpt-5.4-mini", - "name": "GPT-5.4 Mini", - "family": "gpt-mini", + "claude-3.7-sonnet": { + "id": "claude-3.7-sonnet", + "name": "Claude 3.7 Sonnet", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-08-31", - "release_date": "2026-03-17", - "last_updated": "2026-03-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 7.5e-7, "output": 0.0000045, "cache_read": 7.5e-8 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 200000, + "output": 128000 + } }, - "openai/gpt-5-pro": { - "id": "openai/gpt-5-pro", - "name": "GPT-5 Pro", - "family": "gpt-pro", + "qwen3.5-397b-a17b": { + "id": "qwen3.5-397b-a17b", + "name": "Qwen3.5 397B A17B", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-10-06", - "last_updated": "2025-10-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": false, + "temperature": true, + "release_date": "2026-02-22", + "last_updated": "2026-02-22", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 120 }, - "limit": { "context": 400000, "output": 272000 } + "limit": { + "context": 256000, + "output": 64000 + } }, - "openai/gpt-5": { - "id": "openai/gpt-5", - "name": "GPT-5", - "family": "gpt", + "qwen-vl-max-2025-01-25": { + "id": "qwen-vl-max-2025-01-25", + "name": "Qwen VL-MAX-2025-01-25", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-10-01", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 128000, + "output": 4096 + } }, - "openai/gpt-5.3-codex": { - "id": "openai/gpt-5.3-codex", - "name": "GPT-5.3-Codex", - "family": "gpt-codex", - "attachment": true, + "qwen3-32b": { + "id": "qwen3-32b", + "name": "Qwen3 32B", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-02-24", - "last_updated": "2026-02-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "structured_output": false, + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 40000, + "output": 4096 + } }, - "openai/gpt-5-mini": { - "id": "openai/gpt-5-mini", - "name": "GPT-5 Mini", - "family": "gpt-mini", - "attachment": true, - "reasoning": true, + "doubao-1.5-pro-32k": { + "id": "doubao-1.5-pro-32k", + "name": "Doubao 1.5 Pro 32k", + "attachment": false, + "reasoning": false, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-10-01", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 128000, + "output": 12000 + } }, - "openai/gpt-4o-mini": { - "id": "openai/gpt-4o-mini", - "name": "GPT-4o-mini", - "family": "gpt-mini", + "qwen2.5-vl-72b-instruct": { + "id": "qwen2.5-vl-72b-instruct", + "name": "Qwen 2.5 VL 72B Instruct", "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-07-18", - "last_updated": "2024-07-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.6, "cache_read": 0.08 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 128000, + "output": 8192 + } }, - "openai/gpt-5.1-codex-max": { - "id": "openai/gpt-5.1-codex-max", - "name": "GPT-5.1-Codex-Max", - "family": "gpt-codex", + "gemini-2.0-flash": { + "id": "gemini-2.0-flash", + "name": "Gemini 2.0 Flash", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 9, "cache_read": 0.11 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 1048576, + "output": 8192 + } }, - "openai/gpt-4.1": { - "id": "openai/gpt-4.1", - "name": "GPT-4.1", - "family": "gpt", + "qwen3-vl-30b-a3b-thinking": { + "id": "qwen3-vl-30b-a3b-thinking", + "name": "Qwen3-Vl 30b A3b Thinking", "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-02-09", + "last_updated": "2026-02-09", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8, "cache_read": 0.5 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 128000, + "output": 32000 + } }, - "openai/gpt-oss-120b": { - "id": "openai/gpt-oss-120b", - "name": "GPT OSS 120B", - "family": "gpt-oss", - "attachment": false, + "gemini-3.0-pro-image-preview": { + "id": "gemini-3.0-pro-image-preview", + "name": "Gemini 3.0 Pro Image Preview", + "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "temperature": true, + "release_date": "2025-11-20", + "last_updated": "2025-11-20", + "modalities": { + "input": ["text", "image"], + "output": ["text", "image"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "output": 8192 + } + }, + "gemini-2.5-pro": { + "id": "gemini-2.5-pro", + "name": "Gemini 2.5 Pro", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, "release_date": "2025-08-05", "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.072, "output": 0.28 }, - "limit": { "context": 131072, "output": 32768 } + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + } }, - "openai/gpt-5.1-chat": { - "id": "openai/gpt-5.1-chat", - "name": "GPT-5.1 Chat", - "family": "gpt-codex", + "claude-4.5-opus": { + "id": "claude-4.5-opus", + "name": "Claude 4.5 Opus", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-11-25", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 200000, + "output": 200000 + } }, - "openai/gpt-5.4": { - "id": "openai/gpt-5.4", - "name": "GPT-5.4", - "family": "gpt", - "attachment": true, + "deepseek-r1": { + "id": "deepseek-r1", + "name": "DeepSeek-R1", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-05", - "last_updated": "2026-03-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { - "input": 2.5, - "output": 15, - "cache_read": 0.25, - "context_over_200k": { "input": 5, "output": 22.5, "cache_read": 0.5 } + "structured_output": false, + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] }, - "limit": { "context": 1050000, "input": 922000, "output": 128000 } + "open_weights": false, + "limit": { + "context": 128000, + "output": 32000 + } }, - "openai/gpt-oss-20b:free": { - "id": "openai/gpt-oss-20b:free", - "name": "gpt-oss-20b (free)", - "family": "gpt-oss", - "attachment": false, + "claude-4.0-opus": { + "id": "claude-4.0-opus", + "name": "Claude 4.0 Opus", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": false, "temperature": true, "release_date": "2025-08-05", - "last_updated": "2026-01-31", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 32768 } + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + } }, - "openai/gpt-5-chat": { - "id": "openai/gpt-5-chat", - "name": "GPT-5 Chat (latest)", - "family": "gpt-codex", + "claude-4.5-haiku": { + "id": "claude-4.5-haiku", + "name": "Claude 4.5 Haiku", "attachment": true, "reasoning": true, - "tool_call": false, - "structured_output": true, + "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-09-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-10-16", + "last_updated": "2025-10-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 200000, + "output": 64000 + } }, - "openai/gpt-5.4-nano": { - "id": "openai/gpt-5.4-nano", - "name": "GPT-5.4 Nano", - "family": "gpt-nano", - "attachment": true, + "qwen3-max": { + "id": "qwen3-max", + "name": "Qwen3 Max", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-08-31", - "release_date": "2026-03-17", - "last_updated": "2026-03-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-09-24", + "last_updated": "2025-09-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2e-7, "output": 0.00000125, "cache_read": 2e-8 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 262144, + "output": 65536 + } }, - "openai/gpt-5.2-chat": { - "id": "openai/gpt-5.2-chat", - "name": "GPT-5.2 Chat", - "family": "gpt-codex", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 128000, "output": 16384 } - }, - "openai/gpt-5.2": { - "id": "openai/gpt-5.2", - "name": "GPT-5.2", - "family": "gpt", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "output": 128000 } - }, - "openai/gpt-5.1": { - "id": "openai/gpt-5.1", - "name": "GPT-5.1", - "family": "gpt", + "gemini-3.0-flash-preview": { + "id": "gemini-3.0-flash-preview", + "name": "Gemini 3.0 Flash Preview", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-12-18", + "last_updated": "2025-12-18", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 1000000, + "output": 64000 + } }, - "openai/gpt-4.1-mini": { - "id": "openai/gpt-4.1-mini", - "name": "GPT-4.1 Mini", - "family": "gpt-mini", + "gemini-2.5-flash-image": { + "id": "gemini-2.5-flash-image", + "name": "Gemini 2.5 Flash Image", "attachment": true, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.4, "output": 1.6, "cache_read": 0.1 }, - "limit": { "context": 1047576, "output": 32768 } - }, - "openai/gpt-5-nano": { - "id": "openai/gpt-5-nano", - "name": "GPT-5 Nano", - "family": "gpt-nano", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2024-10-01", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.05, "output": 0.4 }, - "limit": { "context": 400000, "output": 128000 } - }, - "openai/gpt-oss-safeguard-20b": { - "id": "openai/gpt-oss-safeguard-20b", - "name": "GPT OSS Safeguard 20B", - "family": "gpt-oss", - "attachment": false, - "reasoning": true, - "tool_call": true, + "tool_call": false, + "structured_output": false, "temperature": true, - "release_date": "2025-10-29", - "last_updated": "2025-10-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-10-22", + "last_updated": "2025-10-22", + "modalities": { + "input": ["text", "image"], + "output": ["image"] + }, "open_weights": false, - "cost": { "input": 0.075, "output": 0.3 }, - "limit": { "context": 131072, "output": 65536 } + "limit": { + "context": 32768, + "output": 8192 + } }, - "openai/gpt-oss-20b": { - "id": "openai/gpt-oss-20b", - "name": "GPT OSS 20B", - "family": "gpt-oss", + "glm-4.5": { + "id": "glm-4.5", + "name": "GLM 4.5", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, "release_date": "2025-08-05", "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.05, "output": 0.2 }, - "limit": { "context": 131072, "output": 32768 } + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 98304 + } }, - "openai/gpt-5-image": { - "id": "openai/gpt-5-image", - "name": "GPT-5 Image", - "family": "gpt", + "claude-3.5-sonnet": { + "id": "claude-3.5-sonnet", + "name": "Claude 3.5 Sonnet", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-10-01", - "release_date": "2025-10-14", - "last_updated": "2025-10-14", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text", "image"] }, + "release_date": "2025-09-09", + "last_updated": "2025-09-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 10, "cache_read": 1.25 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 200000, + "output": 8200 + } }, - "openai/gpt-5-codex": { - "id": "openai/gpt-5-codex", - "name": "GPT-5 Codex", - "family": "gpt-codex", + "claude-4.0-sonnet": { + "id": "claude-4.0-sonnet", + "name": "Claude 4.0 Sonnet", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-10-01", - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 200000, + "output": 64000 + } }, - "openai/o4-mini": { - "id": "openai/o4-mini", - "name": "o4 Mini", - "family": "o-mini", - "attachment": true, - "reasoning": true, + "qwen3-30b-a3b-instruct-2507": { + "id": "qwen3-30b-a3b-instruct-2507", + "name": "Qwen3 30b A3b Instruct 2507", + "attachment": false, + "reasoning": false, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-06", - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-02-04", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.28 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 128000, + "output": 32000 + } }, - "openai/gpt-5.1-codex": { - "id": "openai/gpt-5.1-codex", - "name": "GPT-5.1-Codex", - "family": "gpt-codex", + "doubao-seed-1.6-thinking": { + "id": "doubao-seed-1.6-thinking", + "name": "Doubao-Seed 1.6 Thinking", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-08-15", + "last_updated": "2025-08-15", + "modalities": { + "input": ["image", "text", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 256000, + "output": 32000 + } }, - "openai/gpt-5.2-pro": { - "id": "openai/gpt-5.2-pro", - "name": "GPT-5.2 Pro", - "family": "gpt-pro", + "gemini-2.5-flash": { + "id": "gemini-2.5-flash", + "name": "Gemini 2.5 Flash", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": false, + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 21, "output": 168 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 1048576, + "output": 64000 + } }, - "prime-intellect/intellect-3": { - "id": "prime-intellect/intellect-3", - "name": "Intellect 3", - "family": "glm", + "qwen3-235b-a22b-thinking-2507": { + "id": "qwen3-235b-a22b-thinking-2507", + "name": "Qwen3 235B A22B Thinking 2507", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-01-15", - "last_updated": "2025-01-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 1.1 }, - "limit": { "context": 131072, "output": 8192 } + "release_date": "2025-08-12", + "last_updated": "2025-08-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 4096 + } }, - "x-ai/grok-4-fast": { - "id": "x-ai/grok-4-fast", - "name": "Grok 4 Fast", - "family": "grok", + "qwen3-next-80b-a3b-thinking": { + "id": "qwen3-next-80b-a3b-thinking", + "name": "Qwen3 Next 80B A3B Thinking", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-08-19", - "last_updated": "2025-08-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-09-12", + "last_updated": "2025-09-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05, "cache_write": 0.05 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 131072, + "output": 32768 + } }, - "x-ai/grok-4.20-beta": { - "id": "x-ai/grok-4.20-beta", - "name": "Grok 4.20 Beta", - "family": "grok", - "attachment": true, + "qwen3-30b-a3b-thinking-2507": { + "id": "qwen3-30b-a3b-thinking-2507", + "name": "Qwen3 30b A3b Thinking 2507", + "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": false, "temperature": true, - "release_date": "2026-03-12", - "last_updated": "2026-03-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-02-04", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 6, "cache_read": 0.2, "context_over_200k": { "input": 4, "output": 12 } }, - "limit": { "context": 2000000, "output": 30000 }, - "status": "beta" + "limit": { + "context": 126000, + "output": 32000 + } }, - "x-ai/grok-4.1-fast": { - "id": "x-ai/grok-4.1-fast", - "name": "Grok 4.1 Fast", - "family": "grok", + "glm-4.5-air": { + "id": "glm-4.5-air", + "name": "GLM 4.5 Air", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-11-19", - "last_updated": "2025-11-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05, "cache_write": 0.05 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 131000, + "output": 4096 + } }, - "x-ai/grok-4": { - "id": "x-ai/grok-4", - "name": "Grok 4", - "family": "grok", + "deepseek-v3.1": { + "id": "deepseek-v3.1", + "name": "DeepSeek-V3.1", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-19", + "last_updated": "2025-08-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.75, "cache_write": 15 }, - "limit": { "context": 256000, "output": 64000 } + "limit": { + "context": 128000, + "output": 32000 + } }, - "x-ai/grok-code-fast-1": { - "id": "x-ai/grok-code-fast-1", - "name": "Grok Code Fast 1", - "family": "grok", + "qwen3-30b-a3b": { + "id": "qwen3-30b-a3b", + "name": "Qwen3 30B A3B", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-08", - "release_date": "2025-08-26", - "last_updated": "2025-08-26", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 1.5, "cache_read": 0.02 }, - "limit": { "context": 256000, "output": 10000 } + "limit": { + "context": 40000, + "output": 4096 + } }, - "x-ai/grok-4.20-multi-agent-beta": { - "id": "x-ai/grok-4.20-multi-agent-beta", - "name": "Grok 4.20 Multi - Agent Beta", - "family": "grok", + "claude-4.1-opus": { + "id": "claude-4.1-opus", + "name": "Claude 4.1 Opus", "attachment": true, "reasoning": true, - "tool_call": false, - "temperature": true, - "release_date": "2026-03-12", - "last_updated": "2026-03-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 6, "cache_read": 0.2, "context_over_200k": { "input": 4, "output": 12 } }, - "limit": { "context": 2000000, "output": 30000 }, - "status": "beta" - }, - "x-ai/grok-3-mini": { - "id": "x-ai/grok-3-mini", - "name": "Grok 3 Mini", - "family": "grok", - "attachment": false, - "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-06", + "last_updated": "2025-08-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 0.5, "cache_read": 0.075, "cache_write": 0.5 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 200000, + "output": 32000 + } }, - "x-ai/grok-3-beta": { - "id": "x-ai/grok-3-beta", - "name": "Grok 3 Beta", - "family": "grok", - "attachment": false, - "reasoning": false, + "doubao-seed-2.0-mini": { + "id": "doubao-seed-2.0-mini", + "name": "Doubao Seed 2.0 Mini", + "attachment": true, + "reasoning": true, "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-14", + "last_updated": "2026-02-14", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.75, "cache_write": 15 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 256000, + "output": 32000 + } }, - "x-ai/grok-3": { - "id": "x-ai/grok-3", - "name": "Grok 3", - "family": "grok", + "qwen3-next-80b-a3b-instruct": { + "id": "qwen3-next-80b-a3b-instruct", + "name": "Qwen3 Next 80B A3B Instruct", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-09-12", + "last_updated": "2025-09-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.75, "cache_write": 15 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 131072, + "output": 32768 + } }, - "x-ai/grok-3-mini-beta": { - "id": "x-ai/grok-3-mini-beta", - "name": "Grok 3 Mini Beta", - "family": "grok", - "attachment": false, + "doubao-seed-1.6": { + "id": "doubao-seed-1.6", + "name": "Doubao-Seed 1.6", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-15", + "last_updated": "2025-08-15", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 0.5, "cache_read": 0.075, "cache_write": 0.5 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 256000, + "output": 32000 + } }, - "anthropic/claude-opus-4.6": { - "id": "anthropic/claude-opus-4.6", - "name": "Claude Opus 4.6", - "family": "claude-opus", + "qwen2.5-vl-7b-instruct": { + "id": "qwen2.5-vl-7b-instruct", + "name": "Qwen 2.5 VL 7B Instruct", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-05-30", - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { - "input": 5, - "output": 25, - "cache_read": 0.5, - "cache_write": 6.25, - "context_over_200k": { "input": 10, "output": 37.5, "cache_read": 1, "cache_write": 12.5 } + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] }, - "limit": { "context": 1000000, "output": 128000 } + "open_weights": false, + "limit": { + "context": 128000, + "output": 8192 + } }, - "anthropic/claude-haiku-4.5": { - "id": "anthropic/claude-haiku-4.5", - "name": "Claude Haiku 4.5", - "family": "claude-haiku", + "kling-v2-6": { + "id": "kling-v2-6", + "name": "Kling-V2 6", "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, + "reasoning": false, + "tool_call": false, + "structured_output": false, "temperature": true, - "knowledge": "2025-02-28", - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2026-01-13", + "last_updated": "2026-01-13", + "modalities": { + "input": ["text", "image", "video"], + "output": ["video"] + }, "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.1, "cache_write": 1.25 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 99999999, + "output": 99999999 + } }, - "anthropic/claude-opus-4.1": { - "id": "anthropic/claude-opus-4.1", - "name": "Claude Opus 4.1", - "family": "claude-opus", - "attachment": true, + "MiniMax-M1": { + "id": "MiniMax-M1", + "name": "MiniMax M1", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-03-31", "release_date": "2025-08-05", "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 1000000, + "output": 80000 + } }, - "anthropic/claude-3.7-sonnet": { - "id": "anthropic/claude-3.7-sonnet", - "name": "Claude Sonnet 3.7", - "family": "claude-sonnet", + "gemini-3.0-pro-preview": { + "id": "gemini-3.0-pro-preview", + "name": "Gemini 3.0 Pro Preview", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-01", - "release_date": "2025-02-19", - "last_updated": "2025-02-19", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-11-19", + "last_updated": "2025-11-19", + "modalities": { + "input": ["text", "image", "video", "pdf", "audio"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 128000 } + "limit": { + "context": 1000000, + "output": 64000 + } }, - "anthropic/claude-sonnet-4.6": { - "id": "anthropic/claude-sonnet-4.6", - "name": "Claude Sonnet 4.6", - "family": "claude-sonnet", + "doubao-seed-2.0-lite": { + "id": "doubao-seed-2.0-lite", + "name": "Doubao Seed 2.0 Lite", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "release_date": "2026-02-17", - "last_updated": "2026-02-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { - "input": 3, - "output": 15, - "cache_read": 0.3, - "cache_write": 3.75, - "context_over_200k": { "input": 6, "output": 22.5, "cache_read": 0.6, "cache_write": 7.5 } + "release_date": "2026-02-14", + "last_updated": "2026-02-14", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] }, - "limit": { "context": 1000000, "output": 128000 } + "open_weights": false, + "limit": { + "context": 256000, + "output": 32000 + } }, - "anthropic/claude-sonnet-4": { - "id": "anthropic/claude-sonnet-4", - "name": "Claude Sonnet 4", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, + "qwen3-coder-480b-a35b-instruct": { + "id": "qwen3-coder-480b-a35b-instruct", + "name": "Qwen3 Coder 480B A35B Instruct", + "attachment": false, + "reasoning": false, "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { - "input": 3, - "output": 15, - "cache_read": 0.3, - "cache_write": 3.75, - "context_over_200k": { "input": 6, "output": 22.5, "cache_read": 0.6, "cache_write": 7.5 } + "release_date": "2025-08-14", + "last_updated": "2025-08-14", + "modalities": { + "input": ["text"], + "output": ["text"] }, - "limit": { "context": 200000, "output": 64000 } + "open_weights": false, + "limit": { + "context": 262000, + "output": 4096 + } }, - "anthropic/claude-3.5-haiku": { - "id": "anthropic/claude-3.5-haiku", - "name": "Claude Haiku 3.5", - "family": "claude-haiku", + "claude-3.5-haiku": { + "id": "claude-3.5-haiku", + "name": "Claude 3.5 Haiku", "attachment": true, "reasoning": false, "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-07-31", - "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-08-26", + "last_updated": "2025-08-26", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.8, "output": 4, "cache_read": 0.08, "cache_write": 1 }, - "limit": { "context": 200000, "output": 8192 } + "limit": { + "context": 200000, + "output": 8192 + } }, - "anthropic/claude-opus-4.5": { - "id": "anthropic/claude-opus-4.5", - "name": "Claude Opus 4.5", - "family": "claude-opus", - "attachment": true, + "gpt-oss-20b": { + "id": "gpt-oss-20b", + "name": "gpt-oss-20b", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-05-30", - "release_date": "2025-11-24", - "last_updated": "2025-11-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 200000, "output": 32000 } + "release_date": "2025-08-06", + "last_updated": "2025-08-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 4096 + } }, - "anthropic/claude-sonnet-4.5": { - "id": "anthropic/claude-sonnet-4.5", - "name": "Claude Sonnet 4.5", - "family": "claude-sonnet", - "attachment": true, + "qwen-turbo": { + "id": "qwen-turbo", + "name": "Qwen-Turbo", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { - "input": 3, - "output": 15, - "cache_read": 0.3, - "cache_write": 3.75, - "context_over_200k": { "input": 6, "output": 22.5, "cache_read": 0.6, "cache_write": 7.5 } + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] }, - "limit": { "context": 1000000, "output": 64000 } + "open_weights": false, + "limit": { + "context": 1000000, + "output": 4096 + } }, - "anthropic/claude-opus-4": { - "id": "anthropic/claude-opus-4", - "name": "Claude Opus 4", - "family": "claude-opus", - "attachment": true, - "reasoning": true, + "kimi-k2": { + "id": "kimi-k2", + "name": "Kimi K2", + "attachment": false, + "reasoning": false, "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 128000, + "output": 128000 + } }, - "deepseek/deepseek-v3.1-terminus": { - "id": "deepseek/deepseek-v3.1-terminus", - "name": "DeepSeek V3.1 Terminus", - "family": "deepseek", - "attachment": false, - "reasoning": true, + "gemini-2.5-flash-lite": { + "id": "gemini-2.5-flash-lite", + "name": "Gemini 2.5 Flash Lite", + "attachment": true, + "reasoning": false, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-09-22", - "last_updated": "2025-09-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.27, "output": 1 }, - "limit": { "context": 131072, "output": 65536 } + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 64000 + } }, - "deepseek/deepseek-r1-distill-llama-70b": { - "id": "deepseek/deepseek-r1-distill-llama-70b", - "name": "DeepSeek R1 Distill Llama 70B", - "family": "deepseek-thinking", + "qwen3-max-preview": { + "id": "qwen3-max-preview", + "name": "Qwen3 Max Preview", "attachment": false, - "reasoning": true, - "tool_call": false, - "structured_output": true, + "reasoning": false, + "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-01-23", - "last_updated": "2025-01-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 8192, "output": 8192 } + "release_date": "2025-09-06", + "last_updated": "2025-09-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 64000 + } }, - "deepseek/deepseek-v3.1-terminus:exacto": { - "id": "deepseek/deepseek-v3.1-terminus:exacto", - "name": "DeepSeek V3.1 Terminus (exacto)", - "family": "deepseek", + "gpt-oss-120b": { + "id": "gpt-oss-120b", + "name": "gpt-oss-120b", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-09-22", - "last_updated": "2025-09-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.27, "output": 1 }, - "limit": { "context": 131072, "output": 65536 } + "release_date": "2025-08-06", + "last_updated": "2025-08-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 4096 + } }, - "deepseek/deepseek-chat-v3.1": { - "id": "deepseek/deepseek-chat-v3.1", - "name": "DeepSeek-V3.1", - "family": "deepseek", - "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, + "doubao-1.5-vision-pro": { + "id": "doubao-1.5-vision-pro", + "name": "Doubao 1.5 Vision Pro", + "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": false, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-08-21", - "last_updated": "2025-08-21", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.8 }, - "limit": { "context": 163840, "output": 163840 } + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16000 + } }, - "deepseek/deepseek-v3.2-speciale": { - "id": "deepseek/deepseek-v3.2-speciale", - "name": "DeepSeek V3.2 Speciale", - "family": "deepseek", - "attachment": false, + "claude-4.5-sonnet": { + "id": "claude-4.5-sonnet", + "name": "Claude 4.5 Sonnet", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.27, "output": 0.41 }, - "limit": { "context": 163840, "output": 65536 } + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + } }, - "deepseek/deepseek-chat-v3-0324": { - "id": "deepseek/deepseek-chat-v3-0324", - "name": "DeepSeek V3 0324", - "family": "deepseek", + "deepseek-v3": { + "id": "deepseek-v3", + "name": "DeepSeek-V3", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-03-24", - "last_updated": "2025-03-24", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 16384, "output": 8192 } + "release_date": "2025-08-13", + "last_updated": "2025-08-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16000 + } }, - "deepseek/deepseek-v3.2": { - "id": "deepseek/deepseek-v3.2", - "name": "DeepSeek V3.2", - "family": "deepseek", + "deepseek-r1-0528": { + "id": "deepseek-r1-0528", + "name": "DeepSeek-R1-0528", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.28, "output": 0.4 }, - "limit": { "context": 163840, "output": 65536 } + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 32000 + } }, - "nvidia/nemotron-nano-9b-v2:free": { - "id": "nvidia/nemotron-nano-9b-v2:free", - "name": "Nemotron Nano 9B V2 (free)", - "family": "nemotron", - "attachment": false, + "gemini-2.0-flash-lite": { + "id": "gemini-2.0-flash-lite", + "name": "Gemini 2.0 Flash Lite", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-09", - "release_date": "2025-09-05", - "last_updated": "2025-08-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 128000 } + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 8192 + } }, - "nvidia/nemotron-3-super-120b-a12b": { - "id": "nvidia/nemotron-3-super-120b-a12b", - "name": "Nemotron 3 Super", - "family": "nemotron", + "qwen-max-2025-01-25": { + "id": "qwen-max-2025-01-25", + "name": "Qwen2.5-Max-2025-01-25", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-04", - "release_date": "2026-03-11", - "last_updated": "2026-03-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.5 }, - "limit": { "context": 262144, "output": 262144 } + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 4096 + } }, - "nvidia/nemotron-nano-12b-v2-vl:free": { - "id": "nvidia/nemotron-nano-12b-v2-vl:free", - "name": "Nemotron Nano 12B 2 VL (free)", - "family": "nemotron", - "attachment": false, + "doubao-seed-2.0-pro": { + "id": "doubao-seed-2.0-pro", + "name": "Doubao Seed 2.0 Pro", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-11", - "release_date": "2025-10-28", - "last_updated": "2026-01-31", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 128000 } + "release_date": "2026-02-14", + "last_updated": "2026-02-14", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 128000 + } }, - "nvidia/nemotron-nano-9b-v2": { - "id": "nvidia/nemotron-nano-9b-v2", - "name": "nvidia-nemotron-nano-9b-v2", - "family": "nemotron", + "deepseek/deepseek-v3.2-exp-thinking": { + "id": "deepseek/deepseek-v3.2-exp-thinking", + "name": "DeepSeek/DeepSeek-V3.2-Exp-Thinking", "attachment": false, "reasoning": true, - "tool_call": true, + "tool_call": false, + "structured_output": false, "temperature": true, - "knowledge": "2024-09", - "release_date": "2025-08-18", - "last_updated": "2025-08-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.04, "output": 0.16 }, - "limit": { "context": 131072, "output": 131072 } + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 32000 + } }, - "nvidia/nemotron-3-super-120b-a12b:free": { - "id": "nvidia/nemotron-3-super-120b-a12b:free", - "name": "Nemotron 3 Super (free)", - "family": "nemotron", + "deepseek/deepseek-v3.1-terminus-thinking": { + "id": "deepseek/deepseek-v3.1-terminus-thinking", + "name": "DeepSeek/DeepSeek-V3.1-Terminus-Thinking", "attachment": false, "reasoning": true, - "tool_call": true, + "tool_call": false, + "structured_output": false, "temperature": true, - "knowledge": "2024-04", - "release_date": "2026-03-11", - "last_updated": "2026-03-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 262144 } + "release_date": "2025-09-22", + "last_updated": "2025-09-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 32000 + } }, - "nvidia/nemotron-3-nano-30b-a3b:free": { - "id": "nvidia/nemotron-3-nano-30b-a3b:free", - "name": "Nemotron 3 Nano 30B A3B (free)", - "family": "nemotron", + "deepseek/deepseek-v3.2-exp": { + "id": "deepseek/deepseek-v3.2-exp", + "name": "DeepSeek/DeepSeek-V3.2-Exp", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-11", - "release_date": "2025-12-14", - "last_updated": "2026-01-31", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 256000, "output": 256000 } + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 32000 + } }, - "z-ai/glm-4.7-flash": { - "id": "z-ai/glm-4.7-flash", - "name": "GLM-4.7-Flash", - "family": "glm", + "deepseek/deepseek-v3.2-251201": { + "id": "deepseek/deepseek-v3.2-251201", + "name": "Deepseek/DeepSeek-V3.2", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_details" }, - "structured_output": true, + "structured_output": false, "temperature": true, - "release_date": "2026-01-19", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.07, "output": 0.4 }, - "limit": { "context": 200000, "output": 65535 } + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 32000 + } }, - "z-ai/glm-4.5": { - "id": "z-ai/glm-4.5", - "name": "GLM 4.5", - "family": "glm", + "deepseek/deepseek-math-v2": { + "id": "deepseek/deepseek-math-v2", + "name": "Deepseek/Deepseek-Math-V2", "attachment": false, "reasoning": true, - "tool_call": true, - "structured_output": true, + "tool_call": false, + "structured_output": false, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.2 }, - "limit": { "context": 128000, "output": 96000 } + "release_date": "2025-12-04", + "last_updated": "2025-12-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 160000, + "output": 160000 + } }, - "z-ai/glm-4.6": { - "id": "z-ai/glm-4.6", - "name": "GLM 4.6", - "family": "glm", + "deepseek/deepseek-v3.1-terminus": { + "id": "deepseek/deepseek-v3.1-terminus", + "name": "DeepSeek/DeepSeek-V3.1-Terminus", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-09", - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.2, "cache_read": 0.11 }, - "limit": { "context": 200000, "output": 128000 } + "release_date": "2025-09-22", + "last_updated": "2025-09-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 32000 + } }, - "z-ai/glm-4.5-air:free": { - "id": "z-ai/glm-4.5-air:free", - "name": "GLM 4.5 Air (free)", - "family": "glm-air", - "attachment": false, - "reasoning": true, + "stepfun-ai/gelab-zero-4b-preview": { + "id": "stepfun-ai/gelab-zero-4b-preview", + "name": "Stepfun-Ai/Gelab Zero 4b Preview", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": false, + "temperature": true, + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "output": 4096 + } + }, + "stepfun/step-3.5-flash": { + "id": "stepfun/step-3.5-flash", + "name": "Stepfun/Step-3.5 Flash", + "attachment": true, + "reasoning": false, "tool_call": false, + "structured_output": false, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 96000 } + "release_date": "2026-02-02", + "last_updated": "2026-02-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 64000, + "output": 4096 + } }, - "z-ai/glm-5": { - "id": "z-ai/glm-5", - "name": "GLM-5", - "family": "glm", - "attachment": false, + "x-ai/grok-4-fast": { + "id": "x-ai/grok-4-fast", + "name": "x-AI/Grok-4-Fast", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, + "structured_output": false, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1, "output": 3.2, "cache_read": 0.2 }, - "limit": { "context": 202752, "output": 131000 } + "release_date": "2025-09-20", + "last_updated": "2025-09-20", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 2000000 + } }, - "z-ai/glm-4.5-air": { - "id": "z-ai/glm-4.5-air", - "name": "GLM 4.5 Air", - "family": "glm-air", + "x-ai/grok-code-fast-1": { + "id": "x-ai/grok-code-fast-1", + "name": "x-AI/Grok-Code-Fast 1", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 1.1 }, - "limit": { "context": 128000, "output": 96000 } + "release_date": "2025-09-02", + "last_updated": "2025-09-02", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 10000 + } }, - "z-ai/glm-4.5v": { - "id": "z-ai/glm-4.5v", - "name": "GLM 4.5V", - "family": "glm", + "x-ai/grok-4-fast-reasoning": { + "id": "x-ai/grok-4-fast-reasoning", + "name": "X-Ai/Grok-4-Fast-Reasoning", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-08-11", - "last_updated": "2025-08-11", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 1.8 }, - "limit": { "context": 64000, "output": 16384 } + "release_date": "2025-12-18", + "last_updated": "2025-12-18", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 2000000 + } }, - "z-ai/glm-4.7": { - "id": "z-ai/glm-4.7", - "name": "GLM-4.7", - "family": "glm", - "attachment": false, + "x-ai/grok-4.1-fast-non-reasoning": { + "id": "x-ai/grok-4.1-fast-non-reasoning", + "name": "X-Ai/Grok 4.1 Fast Non Reasoning", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_details" }, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.2, "cache_read": 0.11 }, - "limit": { "context": 204800, "output": 131072 } + "release_date": "2025-12-19", + "last_updated": "2025-12-19", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 2000000 + } }, - "z-ai/glm-4.6:exacto": { - "id": "z-ai/glm-4.6:exacto", - "name": "GLM 4.6 (exacto)", - "family": "glm", + "x-ai/grok-4.1-fast": { + "id": "x-ai/grok-4.1-fast", + "name": "x-AI/Grok-4.1-Fast", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-09", - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 1.9, "cache_read": 0.11 }, - "limit": { "context": 200000, "output": 128000 } + "release_date": "2025-11-20", + "last_updated": "2025-11-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 2000000 + } }, - "sourceful/riverflow-v2-standard-preview": { - "id": "sourceful/riverflow-v2-standard-preview", - "name": "Riverflow V2 Standard Preview", - "family": "sourceful", - "attachment": false, - "reasoning": false, - "tool_call": false, + "x-ai/grok-4-fast-non-reasoning": { + "id": "x-ai/grok-4-fast-non-reasoning", + "name": "X-Ai/Grok-4-Fast-Non-Reasoning", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-12-08", - "last_updated": "2026-01-28", - "modalities": { "input": ["text", "image"], "output": ["image"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 8192, "output": 8192 } - }, - "sourceful/riverflow-v2-fast-preview": { - "id": "sourceful/riverflow-v2-fast-preview", - "name": "Riverflow V2 Fast Preview", - "family": "sourceful", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-12-08", - "last_updated": "2026-01-28", - "modalities": { "input": ["text", "image"], "output": ["image"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 8192, "output": 8192 } - }, - "sourceful/riverflow-v2-max-preview": { - "id": "sourceful/riverflow-v2-max-preview", - "name": "Riverflow V2 Max Preview", - "family": "sourceful", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-12-08", - "last_updated": "2026-01-28", - "modalities": { "input": ["text", "image"], "output": ["image"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 8192, "output": 8192 } - }, - "cognitivecomputations/dolphin-mistral-24b-venice-edition:free": { - "id": "cognitivecomputations/dolphin-mistral-24b-venice-edition:free", - "name": "Uncensored (free)", - "family": "mistral", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-07-09", - "last_updated": "2026-01-31", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 32768, "output": 32768 } + "release_date": "2025-12-18", + "last_updated": "2025-12-18", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 2000000 + } }, - "google/gemini-2.5-flash-lite": { - "id": "google/gemini-2.5-flash-lite", - "name": "Gemini 2.5 Flash Lite", - "family": "gemini-flash-lite", + "x-ai/grok-4.1-fast-reasoning": { + "id": "x-ai/grok-4.1-fast-reasoning", + "name": "X-Ai/Grok 4.1 Fast Reasoning", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "release_date": "2025-12-19", + "last_updated": "2025-12-19", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.025 }, - "limit": { "context": 1048576, "output": 65536 } - }, - "google/gemma-3-12b-it:free": { - "id": "google/gemma-3-12b-it:free", - "name": "Gemma 3 12B (free)", - "family": "gemma", - "attachment": true, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-03-13", - "last_updated": "2025-03-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 32768, "output": 8192 } + "limit": { + "context": 20000000, + "output": 2000000 + } }, - "google/gemini-2.5-flash-lite-preview-09-2025": { - "id": "google/gemini-2.5-flash-lite-preview-09-2025", - "name": "Gemini 2.5 Flash Lite Preview 09-25", - "family": "gemini-flash-lite", + "openai/gpt-5.2": { + "id": "openai/gpt-5.2", + "name": "OpenAI/GPT-5.2", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.025 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 400000, + "output": 128000 + } }, - "google/gemma-2-9b-it": { - "id": "google/gemma-2-9b-it", - "name": "Gemma 2 9B", - "family": "gemma", + "openai/gpt-5": { + "id": "openai/gpt-5", + "name": "OpenAI/GPT-5", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-06", - "release_date": "2024-06-28", - "last_updated": "2024-06-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.03, "output": 0.09 }, - "limit": { "context": 8192, "output": 8192 } + "release_date": "2025-09-19", + "last_updated": "2025-09-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + } }, - "google/gemini-3.1-pro-preview": { - "id": "google/gemini-3.1-pro-preview", - "name": "Gemini 3.1 Pro Preview", - "family": "gemini-pro", - "attachment": true, + "z-ai/glm-4.7": { + "id": "z-ai/glm-4.7", + "name": "Z-Ai/GLM 4.7", + "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_details" }, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-02-19", - "last_updated": "2026-02-19", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { - "input": 2, - "output": 12, - "reasoning": 12, - "context_over_200k": { "input": 4, "output": 18, "cache_read": 0.4 } + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] }, - "limit": { "context": 1048576, "output": 65536 } + "open_weights": false, + "limit": { + "context": 200000, + "output": 200000 + } }, - "google/gemini-3-pro-preview": { - "id": "google/gemini-3-pro-preview", - "name": "Gemini 3 Pro Preview", - "family": "gemini-pro", - "attachment": true, + "z-ai/glm-5": { + "id": "z-ai/glm-5", + "name": "Z-Ai/GLM 5", + "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_details" }, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-11-18", - "last_updated": "2025-11", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 12 }, - "limit": { "context": 1050000, "output": 66000 } + "limit": { + "context": 200000, + "output": 128000 + } }, - "google/gemma-3-27b-it": { - "id": "google/gemma-3-27b-it", - "name": "Gemma 3 27B", - "family": "gemma", + "z-ai/autoglm-phone-9b": { + "id": "z-ai/autoglm-phone-9b", + "name": "Z-Ai/Autoglm Phone 9b", "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-03-12", - "last_updated": "2025-03-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.04, "output": 0.15 }, - "limit": { "context": 96000, "output": 96000 } + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 12800, + "output": 4096 + } }, - "google/gemma-3-4b-it": { - "id": "google/gemma-3-4b-it", - "name": "Gemma 3 4B", - "family": "gemma", - "attachment": true, + "z-ai/glm-4.6": { + "id": "z-ai/glm-4.6", + "name": "Z-AI/GLM 4.6", + "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-03-13", - "last_updated": "2025-03-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.01703, "output": 0.06815 }, - "limit": { "context": 96000, "output": 96000 } + "release_date": "2025-10-11", + "last_updated": "2025-10-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 200000 + } }, - "google/gemma-3n-e4b-it": { - "id": "google/gemma-3n-e4b-it", - "name": "Gemma 3n 4B", - "family": "gemma", - "attachment": true, - "reasoning": false, - "tool_call": false, + "minimax/minimax-m2": { + "id": "minimax/minimax-m2", + "name": "Minimax/Minimax-M2", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-06", - "release_date": "2025-05-20", - "last_updated": "2025-05-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.02, "output": 0.04 }, - "limit": { "context": 32768, "output": 32768 } + "release_date": "2025-10-28", + "last_updated": "2025-10-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 128000 + } }, - "google/gemini-2.5-pro-preview-06-05": { - "id": "google/gemini-2.5-pro-preview-06-05", - "name": "Gemini 2.5 Pro Preview 06-05", - "family": "gemini-pro", - "attachment": true, + "minimax/minimax-m2.1": { + "id": "minimax/minimax-m2.1", + "name": "Minimax/Minimax-M2.1", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-06-05", - "last_updated": "2025-06-05", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.31 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 204800, + "output": 128000 + } }, - "google/gemma-3-4b-it:free": { - "id": "google/gemma-3-4b-it:free", - "name": "Gemma 3 4B (free)", - "family": "gemma", - "attachment": true, - "reasoning": false, - "tool_call": false, + "minimax/minimax-m2.5": { + "id": "minimax/minimax-m2.5", + "name": "Minimax/Minimax-M2.5", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-03-13", - "last_updated": "2025-03-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 32768, "output": 8192 } + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 204800, + "output": 128000 + } }, - "google/gemini-2.5-pro-preview-05-06": { - "id": "google/gemini-2.5-pro-preview-05-06", - "name": "Gemini 2.5 Pro Preview 05-06", - "family": "gemini-pro", - "attachment": true, + "minimax/minimax-m2.5-highspeed": { + "id": "minimax/minimax-m2.5-highspeed", + "name": "Minimax/Minimax-M2.5 Highspeed", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-05-06", - "last_updated": "2025-05-06", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "release_date": "2026-02-14", + "last_updated": "2026-02-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.31 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 204800, + "output": 128000 + } }, - "google/gemini-2.0-flash-001": { - "id": "google/gemini-2.0-flash-001", - "name": "Gemini 2.0 Flash", - "family": "gemini-flash", + "moonshotai/kimi-k2.5": { + "id": "moonshotai/kimi-k2.5", + "name": "Moonshotai/Kimi-K2.5", "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-06", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "release_date": "2026-01-28", + "last_updated": "2026-01-28", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.025 }, - "limit": { "context": 1048576, "output": 8192 } + "limit": { + "context": 256000, + "output": 256000 + } }, - "google/gemma-3-27b-it:free": { - "id": "google/gemma-3-27b-it:free", - "name": "Gemma 3 27B (free)", - "family": "gemma", - "attachment": true, + "moonshotai/kimi-k2-0905": { + "id": "moonshotai/kimi-k2-0905", + "name": "Kimi K2 0905", + "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-03-12", - "last_updated": "2025-03-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 8192 } + "release_date": "2025-09-08", + "last_updated": "2025-09-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 100000 + } }, - "google/gemini-3-flash-preview": { - "id": "google/gemini-3-flash-preview", - "name": "Gemini 3 Flash Preview", - "family": "gemini-flash", - "attachment": true, - "reasoning": true, + "moonshotai/kimi-k2-thinking": { + "id": "moonshotai/kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "attachment": false, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_details" }, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "release_date": "2025-11-07", + "last_updated": "2025-11-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 3, "cache_read": 0.05 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 256000, + "output": 100000 + } }, - "google/gemini-2.5-pro": { - "id": "google/gemini-2.5-pro", - "name": "Gemini 2.5 Pro", - "family": "gemini-pro", - "attachment": true, - "reasoning": true, + "meituan/longcat-flash-chat": { + "id": "meituan/longcat-flash-chat", + "name": "Meituan/Longcat-Flash-Chat", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "temperature": true, + "release_date": "2025-11-05", + "last_updated": "2025-11-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 131072 + } + }, + "meituan/longcat-flash-lite": { + "id": "meituan/longcat-flash-lite", + "name": "Meituan/Longcat-Flash-Lite", + "attachment": false, + "reasoning": false, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-03-20", - "last_updated": "2025-06-05", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "release_date": "2026-02-06", + "last_updated": "2026-02-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.31 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 256000, + "output": 320000 + } }, - "google/gemini-2.5-flash": { - "id": "google/gemini-2.5-flash", - "name": "Gemini 2.5 Flash", - "family": "gemini-flash", - "attachment": true, + "mimo-v2-flash": { + "id": "mimo-v2-flash", + "name": "Mimo-V2-Flash", + "family": "mimo", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-07-17", - "last_updated": "2025-07-17", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 2.5, "cache_read": 0.0375 }, - "limit": { "context": 1048576, "output": 65536 } + "knowledge": "2024-12-01", + "release_date": "2025-12-16", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.1, + "output": 0.3, + "cache_read": 0.01 + } }, - "google/gemini-3.1-pro-preview-customtools": { - "id": "google/gemini-3.1-pro-preview-customtools", - "name": "Gemini 3.1 Pro Preview Custom Tools", - "family": "gemini-pro", - "attachment": true, + "xiaomi/mimo-v2-flash": { + "id": "xiaomi/mimo-v2-flash", + "name": "Xiaomi/Mimo-V2-Flash", + "family": "mimo", + "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_details" }, - "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-02-19", - "last_updated": "2026-02-19", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, + "knowledge": "2024-12-01", + "release_date": "2025-12-16", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 256000 + }, "cost": { - "input": 2, - "output": 12, - "reasoning": 12, - "context_over_200k": { "input": 4, "output": 18, "cache_read": 0.4 } + "input": 0.1, + "output": 0.3, + "cache_read": 0.01 + } + } + } + }, + "kilo": { + "id": "kilo", + "env": ["KILO_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.kilo.ai/api/gateway", + "name": "Kilo Gateway", + "doc": "https://kilo.ai", + "models": { + "rekaai/reka-edge": { + "id": "rekaai/reka-edge", + "name": "Reka Edge", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-20", + "last_updated": "2026-04-11", + "modalities": { + "input": ["image", "text", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 16384, + "output": 16384 }, - "limit": { "context": 1048576, "output": 65536 } + "cost": { + "input": 0.1, + "output": 0.1 + } }, - "google/gemini-2.5-flash-preview-09-2025": { - "id": "google/gemini-2.5-flash-preview-09-2025", - "name": "Gemini 2.5 Flash Preview 09-25", - "family": "gemini-flash", - "attachment": true, + "rekaai/reka-flash-3": { + "id": "rekaai/reka-flash-3", + "name": "Reka Flash 3", + "attachment": false, "reasoning": true, + "tool_call": false, + "temperature": true, + "release_date": "2025-03-12", + "last_updated": "2026-04-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 65536, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.2 + } + }, + "ai21/jamba-large-1.7": { + "id": "ai21/jamba-large-1.7", + "name": "AI21: Jamba Large 1.7", + "attachment": false, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "release_date": "2025-08-09", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 2.5, "cache_read": 0.031 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 256000, + "output": 4096 + }, + "cost": { + "input": 2, + "output": 8 + } }, - "google/gemini-3.1-flash-lite-preview": { - "id": "google/gemini-3.1-flash-lite-preview", - "name": "Gemini 3.1 Flash Lite Preview", - "family": "gemini-flash-lite", - "attachment": true, + "alibaba/tongyi-deepresearch-30b-a3b": { + "id": "alibaba/tongyi-deepresearch-30b-a3b", + "name": "Tongyi DeepResearch 30B A3B", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-03-03", - "last_updated": "2026-03-03", - "modalities": { "input": ["text", "image", "video", "pdf", "audio"], "output": ["text"] }, + "release_date": "2025-09-18", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { - "input": 0.25, - "output": 1.5, - "reasoning": 1.5, - "cache_read": 0.025, - "cache_write": 0.083, - "input_audio": 0.5, - "output_audio": 0.5 + "limit": { + "context": 131072, + "output": 131072 }, - "limit": { "context": 1048576, "output": 65536 } + "cost": { + "input": 0.09, + "output": 0.45 + } }, - "google/gemma-3-12b-it": { - "id": "google/gemma-3-12b-it", - "name": "Gemma 3 12B", - "family": "gemma", - "attachment": true, + "inflection/inflection-3-pi": { + "id": "inflection/inflection-3-pi", + "name": "Inflection: Inflection 3 Pi", + "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-03-13", - "last_updated": "2025-03-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.03, "output": 0.1 }, - "limit": { "context": 131072, "output": 131072 } + "release_date": "2024-10-11", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8000, + "output": 1024 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "google/gemma-3n-e2b-it:free": { - "id": "google/gemma-3n-e2b-it:free", - "name": "Gemma 3n 2B (free)", - "family": "gemma", - "attachment": true, + "inflection/inflection-3-productivity": { + "id": "inflection/inflection-3-productivity", + "name": "Inflection: Inflection 3 Productivity", + "attachment": false, "reasoning": false, "tool_call": false, "temperature": true, - "knowledge": "2024-06", - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 8192, "output": 2000 } + "release_date": "2024-10-11", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8000, + "output": 1024 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "google/gemma-3n-e4b-it:free": { - "id": "google/gemma-3n-e4b-it:free", - "name": "Gemma 3n 4B (free)", - "family": "gemma", - "attachment": true, + "liquid/lfm-2-24b-a2b": { + "id": "liquid/lfm-2-24b-a2b", + "name": "LiquidAI: LFM2-24B-A2B", + "attachment": false, "reasoning": false, "tool_call": false, "temperature": true, - "knowledge": "2024-06", - "release_date": "2025-05-20", - "last_updated": "2025-05-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-26", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 8192, "output": 2000 } + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.03, + "output": 0.12 + } }, - "meta-llama/llama-3.2-11b-vision-instruct": { - "id": "meta-llama/llama-3.2-11b-vision-instruct", - "name": "Llama 3.2 11B Vision Instruct", - "family": "llama", - "attachment": true, + "writer/palmyra-x5": { + "id": "writer/palmyra-x5", + "name": "Writer: Palmyra X5", + "attachment": false, "reasoning": false, "tool_call": false, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-09-25", - "last_updated": "2024-09-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 8192 } + "release_date": "2025-04-28", + "last_updated": "2025-04-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1040000, + "output": 8192 + }, + "cost": { + "input": 0.6, + "output": 6 + } }, - "meta-llama/llama-3.2-3b-instruct:free": { - "id": "meta-llama/llama-3.2-3b-instruct:free", - "name": "Llama 3.2 3B Instruct (free)", - "family": "llama", - "attachment": true, + "ibm-granite/granite-4.1-8b": { + "id": "ibm-granite/granite-4.1-8b", + "name": "IBM: Granite 4.1 8B", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-30", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.05, + "output": 0.1, + "cache_read": 0.05 + } + }, + "ibm-granite/granite-4.0-h-micro": { + "id": "ibm-granite/granite-4.0-h-micro", + "name": "IBM: Granite 4.0 Micro", + "attachment": false, "reasoning": false, "tool_call": false, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-09-25", - "last_updated": "2024-09-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-10-20", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 131000, + "output": 32768 + }, + "cost": { + "input": 0.017, + "output": 0.11 + } }, - "meta-llama/llama-3.3-70b-instruct:free": { - "id": "meta-llama/llama-3.3-70b-instruct:free", - "name": "Llama 3.3 70B Instruct (free)", - "family": "llama", + "essentialai/rnj-1-instruct": { + "id": "essentialai/rnj-1-instruct", + "name": "EssentialAI: Rnj 1 Instruct", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-05", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 32768, + "output": 6554 + }, + "cost": { + "input": 0.15, + "output": 0.15 + } }, - "openrouter/free": { - "id": "openrouter/free", - "name": "Free Models Router", + "perplexity/sonar-pro": { + "id": "perplexity/sonar-pro", + "name": "Perplexity: Sonar Pro", "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "release_date": "2026-02-01", - "last_updated": "2026-02-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2024-01-01", + "last_updated": "2025-09-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 200000, "input": 200000, "output": 8000 } + "limit": { + "context": 200000, + "output": 8000 + }, + "cost": { + "input": 3, + "output": 15 + } }, - "arcee-ai/trinity-mini:free": { - "id": "arcee-ai/trinity-mini:free", - "name": "Trinity Mini", - "family": "trinity-mini", + "perplexity/sonar-deep-research": { + "id": "perplexity/sonar-deep-research", + "name": "Perplexity: Sonar Deep Research", "attachment": false, + "reasoning": true, + "tool_call": false, + "temperature": true, + "release_date": "2025-01-27", + "last_updated": "2025-01-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 25600 + }, + "cost": { + "input": 2, + "output": 8 + } + }, + "perplexity/sonar": { + "id": "perplexity/sonar", + "name": "Perplexity: Sonar", + "attachment": true, "reasoning": false, + "tool_call": false, + "temperature": true, + "release_date": "2024-01-01", + "last_updated": "2025-09-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 127072, + "output": 25415 + }, + "cost": { + "input": 1, + "output": 1 + } + }, + "perplexity/sonar-pro-search": { + "id": "perplexity/sonar-pro-search", + "name": "Perplexity: Sonar Pro Search", + "attachment": true, + "reasoning": true, + "tool_call": false, + "temperature": true, + "release_date": "2025-10-31", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8000 + }, + "cost": { + "input": 3, + "output": 15 + } + }, + "perplexity/sonar-reasoning-pro": { + "id": "perplexity/sonar-reasoning-pro", + "name": "Perplexity: Sonar Reasoning Pro", + "attachment": true, + "reasoning": true, + "tool_call": false, + "temperature": true, + "release_date": "2024-01-01", + "last_updated": "2025-09-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 25600 + }, + "cost": { + "input": 2, + "output": 8 + } + }, + "deepseek/deepseek-chat-v3.1": { + "id": "deepseek/deepseek-chat-v3.1", + "name": "DeepSeek: DeepSeek V3.1", + "attachment": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-06", - "release_date": "2026-01-28", - "last_updated": "2026-01-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-21", + "last_updated": "2025-08-21", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 32768, + "output": 7168 + }, + "cost": { + "input": 0.15, + "output": 0.75 + } }, - "arcee-ai/trinity-large-preview:free": { - "id": "arcee-ai/trinity-large-preview:free", - "name": "Trinity Large Preview", - "family": "trinity", + "deepseek/deepseek-chat": { + "id": "deepseek/deepseek-chat", + "name": "DeepSeek: DeepSeek V3", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-06", - "release_date": "2026-01-28", - "last_updated": "2026-01-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-01", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 163840, + "output": 163840 + }, + "cost": { + "input": 0.32, + "output": 0.89, + "cache_read": 0.15 + } }, - "nousresearch/hermes-4-70b": { - "id": "nousresearch/hermes-4-70b", - "name": "Hermes 4 70B", - "family": "hermes", + "deepseek/deepseek-r1-distill-llama-70b": { + "id": "deepseek/deepseek-r1-distill-llama-70b", + "name": "DeepSeek: R1 Distill Llama 70B", "attachment": false, "reasoning": true, - "tool_call": true, - "structured_output": true, + "tool_call": false, "temperature": true, - "knowledge": "2023-12", - "release_date": "2025-08-25", - "last_updated": "2025-08-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-01-23", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.13, "output": 0.4 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.7, + "output": 0.8, + "cache_read": 0.015 + } }, - "nousresearch/hermes-4-405b": { - "id": "nousresearch/hermes-4-405b", - "name": "Hermes 4 405B", - "family": "hermes", + "deepseek/deepseek-r1": { + "id": "deepseek/deepseek-r1", + "name": "DeepSeek: R1", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2025-08-25", - "last_updated": "2025-08-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1, "output": 3 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 64000, + "output": 16000 + }, + "cost": { + "input": 0.7, + "output": 2.5 + } }, - "nousresearch/hermes-3-llama-3.1-405b:free": { - "id": "nousresearch/hermes-3-llama-3.1-405b:free", - "name": "Hermes 3 405B Instruct (free)", - "family": "hermes", + "deepseek/deepseek-v3.2-speciale": { + "id": "deepseek/deepseek-v3.2-speciale", + "name": "DeepSeek: DeepSeek V3.2 Speciale", "attachment": false, "reasoning": true, "tool_call": false, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-08-16", - "last_updated": "2024-08-16", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 131072 } - }, - "minimax/minimax-01": { - "id": "minimax/minimax-01", - "name": "MiniMax-01", - "family": "minimax", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2025-01-15", - "last_updated": "2025-01-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-12-01", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 1.1 }, - "limit": { "context": 1000000, "output": 1000000 } + "limit": { + "context": 163840, + "output": 163840 + }, + "cost": { + "input": 0.4, + "output": 1.2, + "cache_read": 0.135 + } }, - "minimax/minimax-m2": { - "id": "minimax/minimax-m2", - "name": "MiniMax M2", - "family": "minimax", + "deepseek/deepseek-r1-distill-qwen-32b": { + "id": "deepseek/deepseek-r1-distill-qwen-32b", + "name": "DeepSeek: R1 Distill Qwen 32B", "attachment": false, "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_details" }, - "structured_output": true, + "tool_call": false, "temperature": true, - "release_date": "2025-10-23", - "last_updated": "2025-10-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-01-01", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.28, "output": 1.15, "cache_read": 0.28, "cache_write": 1.15 }, - "limit": { "context": 196600, "output": 118000 } + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.29, + "output": 0.29 + } }, - "minimax/minimax-m2.1": { - "id": "minimax/minimax-m2.1", - "name": "MiniMax M2.1", - "family": "minimax", + "deepseek/deepseek-v3.2-exp": { + "id": "deepseek/deepseek-v3.2-exp", + "name": "DeepSeek: DeepSeek V3.2 Exp", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_details" }, - "structured_output": true, "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-01-01", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 163840, + "output": 65536 + }, + "cost": { + "input": 0.27, + "output": 0.41 + } }, - "minimax/minimax-m2.7": { - "id": "minimax/minimax-m2.7", - "name": "MiniMax M2.7", - "family": "minimax", + "deepseek/deepseek-v4-flash": { + "id": "deepseek/deepseek-v4-flash", + "name": "DeepSeek: DeepSeek V4 Flash", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.06, "cache_write": 0.375 }, - "limit": { "context": 204800, "output": 131072 } + "release_date": "2026-04-24", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 384000 + }, + "cost": { + "input": 0.14, + "output": 0.28, + "cache_read": 0.0028 + } }, - "minimax/minimax-m2.5": { - "id": "minimax/minimax-m2.5", - "name": "MiniMax M2.5", - "family": "minimax", + "deepseek/deepseek-v4-pro": { + "id": "deepseek/deepseek-v4-pro", + "name": "DeepSeek: DeepSeek V4 Pro", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_details" }, - "structured_output": true, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.03 }, - "limit": { "context": 204800, "output": 131072 } + "release_date": "2026-04-24", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 384000 + }, + "cost": { + "input": 0.435, + "output": 0.87, + "cache_read": 0.003625 + } }, - "minimax/minimax-m1": { - "id": "minimax/minimax-m1", - "name": "MiniMax M1", - "family": "minimax", + "deepseek/deepseek-v3.2": { + "id": "deepseek/deepseek-v3.2", + "name": "DeepSeek: DeepSeek V3.2", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-01", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.4, "output": 2.2 }, - "limit": { "context": 1000000, "output": 40000 } + "limit": { + "context": 163840, + "output": 65536 + }, + "cost": { + "input": 0.26, + "output": 0.38, + "cache_read": 0.125 + } }, - "qwen/qwen3-coder-30b-a3b-instruct": { - "id": "qwen/qwen3-coder-30b-a3b-instruct", - "name": "Qwen3 Coder 30B A3B Instruct", - "family": "qwen", + "deepseek/deepseek-chat-v3-0324": { + "id": "deepseek/deepseek-chat-v3-0324", + "name": "DeepSeek: DeepSeek V3 0324", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-31", - "last_updated": "2025-07-31", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-03-24", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.07, "output": 0.27 }, - "limit": { "context": 160000, "output": 65536 } + "limit": { + "context": 163840, + "output": 65536 + }, + "cost": { + "input": 0.2, + "output": 0.77, + "cache_read": 0.095 + } }, - "qwen/qwen3-235b-a22b-07-25": { - "id": "qwen/qwen3-235b-a22b-07-25", - "name": "Qwen3 235B A22B Instruct 2507", - "family": "qwen", + "deepseek/deepseek-r1-0528": { + "id": "deepseek/deepseek-r1-0528", + "name": "DeepSeek: R1 0528", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04-28", - "last_updated": "2025-07-21", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-05-28", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.85 }, - "limit": { "context": 262144, "output": 131072 } + "limit": { + "context": 163840, + "output": 65536 + }, + "cost": { + "input": 0.45, + "output": 2.15, + "cache_read": 0.2 + } }, - "qwen/qwen3-30b-a3b-thinking-2507": { - "id": "qwen/qwen3-30b-a3b-thinking-2507", - "name": "Qwen3 30B A3B Thinking 2507", - "family": "qwen", + "deepseek/deepseek-v3.1-terminus": { + "id": "deepseek/deepseek-v3.1-terminus", + "name": "DeepSeek: DeepSeek V3.1 Terminus", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-29", - "last_updated": "2025-07-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-09-22", + "last_updated": "2025-09-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.8 }, - "limit": { "context": 262000, "output": 262000 } + "limit": { + "context": 163840, + "output": 32768 + }, + "cost": { + "input": 0.21, + "output": 0.79, + "cache_read": 0.13 + } }, - "qwen/qwen3.5-plus-02-15": { - "id": "qwen/qwen3.5-plus-02-15", - "name": "Qwen3.5 Plus 2026-02-15", - "family": "qwen", + "openrouter/auto": { + "id": "openrouter/auto", + "name": "Auto Router", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-02-16", - "last_updated": "2026-02-16", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2026-03-15", + "last_updated": "2026-03-15", + "modalities": { + "input": ["audio", "image", "pdf", "text", "video"], + "output": ["image", "text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 2.4 }, - "limit": { "context": 1000000, "output": 65536 } + "limit": { + "context": 2000000, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "qwen/qwen3-coder": { - "id": "qwen/qwen3-coder", - "name": "Qwen3 Coder", - "family": "qwen", + "openrouter/bodybuilder": { + "id": "openrouter/bodybuilder", + "name": "Body Builder (beta)", "attachment": false, "reasoning": false, + "tool_call": false, + "release_date": "2026-03-15", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 32768 + }, + "status": "beta", + "cost": { + "input": 0, + "output": 0 + } + }, + "openrouter/owl-alpha": { + "id": "openrouter/owl-alpha", + "name": "Owl Alpha", + "attachment": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 262144, "output": 66536 } + "release_date": "2026-04-28", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048756, + "output": 262144 + }, + "status": "alpha", + "cost": { + "input": 0, + "output": 0 + } }, - "qwen/qwen3-4b:free": { - "id": "qwen/qwen3-4b:free", - "name": "Qwen3 4B (free)", - "family": "qwen", + "openrouter/pareto-code": { + "id": "openrouter/pareto-code", + "name": "Pareto Code Router", "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2026-04-21", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "openrouter/free": { + "id": "openrouter/free", + "name": "Free Models Router", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04-30", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 40960, "output": 40960 } + "release_date": "2026-02-01", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "qwen/qwen3-coder:free": { - "id": "qwen/qwen3-coder:free", - "name": "Qwen3 Coder 480B A35B Instruct (free)", - "family": "qwen", + "inclusionai/ling-2.6-1t:free": { + "id": "inclusionai/ling-2.6-1t:free", + "name": "inclusionAI: Ling-2.6-1T (free)", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 66536 } + "release_date": "2026-04-23", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "qwen/qwen2.5-vl-72b-instruct": { - "id": "qwen/qwen2.5-vl-72b-instruct", - "name": "Qwen2.5 VL 72B Instruct", - "family": "qwen", - "attachment": true, + "inclusionai/ling-2.6-flash": { + "id": "inclusionai/ling-2.6-flash", + "name": "inclusionAI: Ling-2.6 Flash", + "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": true, + "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-02-01", - "last_updated": "2025-02-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 32768, "output": 8192 } + "release_date": "2026-04-21", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0.08, + "output": 0.24, + "cache_read": 0.016 + } }, - "qwen/qwen3-next-80b-a3b-thinking": { - "id": "qwen/qwen3-next-80b-a3b-thinking", - "name": "Qwen3 Next 80B A3B Thinking", - "family": "qwen", + "arcee-ai/trinity-mini": { + "id": "arcee-ai/trinity-mini", + "name": "Arcee AI: Trinity Mini", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-11", - "last_updated": "2025-09-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.14, "output": 1.4 }, - "limit": { "context": 262144, "output": 262144 } + "release_date": "2025-12", + "last_updated": "2026-01-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.045, + "output": 0.15 + } }, - "qwen/qwen3-235b-a22b-thinking-2507": { - "id": "qwen/qwen3-235b-a22b-thinking-2507", - "name": "Qwen3 235B A22B Thinking 2507", - "family": "qwen", + "arcee-ai/virtuoso-large": { + "id": "arcee-ai/virtuoso-large", + "name": "Arcee AI: Virtuoso Large", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-25", - "last_updated": "2025-07-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-05-06", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.078, "output": 0.312 }, - "limit": { "context": 262144, "output": 81920 } + "limit": { + "context": 131072, + "output": 64000 + }, + "cost": { + "input": 0.75, + "output": 1.2 + } }, - "qwen/qwen3-next-80b-a3b-instruct:free": { - "id": "qwen/qwen3-next-80b-a3b-instruct:free", - "name": "Qwen3 Next 80B A3B Instruct (free)", - "family": "qwen", + "arcee-ai/trinity-large-thinking": { + "id": "arcee-ai/trinity-large-thinking", + "name": "Arcee AI: Trinity Large Thinking", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-11", - "last_updated": "2025-09-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-01", + "last_updated": "2026-04-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.22, + "output": 0.85 + } }, - "qwen/qwen3-next-80b-a3b-instruct": { - "id": "qwen/qwen3-next-80b-a3b-instruct", - "name": "Qwen3 Next 80B A3B Instruct", - "family": "qwen", + "arcee-ai/spotlight": { + "id": "arcee-ai/spotlight", + "name": "Arcee AI: Spotlight", + "attachment": true, + "reasoning": false, + "tool_call": false, + "temperature": true, + "release_date": "2025-05-06", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 65537 + }, + "cost": { + "input": 0.18, + "output": 0.18 + } + }, + "arcee-ai/maestro-reasoning": { + "id": "arcee-ai/maestro-reasoning", + "name": "Arcee AI: Maestro Reasoning", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-11", - "last_updated": "2025-09-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-05-06", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.14, "output": 1.4 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 131072, + "output": 32000 + }, + "cost": { + "input": 0.9, + "output": 3.3 + } }, - "qwen/qwen3.6-plus-preview:free": { - "id": "qwen/qwen3.6-plus-preview:free", - "name": "Qwen3.6 Plus Preview (free)", - "family": "qwen", + "arcee-ai/coder-large": { + "id": "arcee-ai/coder-large", + "name": "Arcee AI: Coder Large", "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "release_date": "2026-03-30", - "last_updated": "2026-03-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 1000000, "output": 65536 } + "release_date": "2025-05-06", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.5, + "output": 0.8 + } }, - "qwen/qwen3-coder:exacto": { - "id": "qwen/qwen3-coder:exacto", - "name": "Qwen3 Coder (exacto)", - "family": "qwen", + "arcee-ai/trinity-large-preview": { + "id": "arcee-ai/trinity-large-preview", + "name": "Arcee AI: Trinity Large Preview", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.38, "output": 1.53 }, - "limit": { "context": 131072, "output": 32768 } + "release_date": "2026-01-28", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 32768 + }, + "cost": { + "input": 0.15, + "output": 0.45 + } }, - "qwen/qwen3.5-397b-a17b": { - "id": "qwen/qwen3.5-397b-a17b", - "name": "Qwen3.5 397B A17B", - "family": "qwen", - "attachment": true, + "deepcogito/cogito-v2.1-671b": { + "id": "deepcogito/cogito-v2.1-671b", + "name": "Deep Cogito: Cogito v2.1 671B", + "attachment": false, "reasoning": true, - "tool_call": true, - "structured_output": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-02-16", - "last_updated": "2026-02-16", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2025-11-14", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 3.6 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 1.25, + "output": 1.25 + } }, - "qwen/qwen3-max": { - "id": "qwen/qwen3-max", - "name": "Qwen3 Max", - "family": "qwen", + "upstage/solar-pro-3": { + "id": "upstage/solar-pro-3", + "name": "Upstage: Solar Pro 3", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01-27", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.2, "output": 6 }, - "limit": { "context": 262144, "output": 32768 } + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "qwen/qwen3-coder-flash": { - "id": "qwen/qwen3-coder-flash", - "name": "Qwen3 Coder Flash", - "family": "qwen", + "nex-agi/deepseek-v3.1-nex-n1": { + "id": "nex-agi/deepseek-v3.1-nex-n1", + "name": "Nex AGI: DeepSeek V3.1 Nex N1", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": false, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-01-01", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 1.5 }, - "limit": { "context": 128000, "output": 66536 } - }, - "qwen/qwen-2.5-coder-32b-instruct": { - "id": "qwen/qwen-2.5-coder-32b-instruct", - "name": "Qwen2.5 Coder 32B Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-11-11", - "last_updated": "2024-11-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 32768, "output": 8192 } + "limit": { + "context": 131072, + "output": 163840 + }, + "cost": { + "input": 0.27, + "output": 1 + } }, - "qwen/qwen3-30b-a3b-instruct-2507": { - "id": "qwen/qwen3-30b-a3b-instruct-2507", - "name": "Qwen3 30B A3B Instruct 2507", - "family": "qwen", - "attachment": false, - "reasoning": false, + "bytedance-seed/seed-1.6": { + "id": "bytedance-seed/seed-1.6", + "name": "ByteDance Seed: Seed 1.6", + "attachment": true, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-29", - "last_updated": "2025-07-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.8 }, - "limit": { "context": 262000, "output": 262000 } + "release_date": "2025-09", + "last_updated": "2025-09", + "modalities": { + "input": ["image", "text", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0.25, + "output": 2 + } }, - "xiaomi/mimo-v2-pro": { - "id": "xiaomi/mimo-v2-pro", - "name": "MiMo-V2-Pro", - "family": "mimo", - "attachment": false, + "bytedance-seed/seed-2.0-lite": { + "id": "bytedance-seed/seed-2.0-lite", + "name": "ByteDance Seed: Seed-2.0-Lite", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_details" }, - "structured_output": true, "temperature": true, - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-10", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1, "output": 3 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0.25, + "output": 2 + } }, - "xiaomi/mimo-v2-omni": { - "id": "xiaomi/mimo-v2-omni", - "name": "MiMo-V2-Omni", - "family": "mimo", + "bytedance-seed/seed-1.6-flash": { + "id": "bytedance-seed/seed-1.6-flash", + "name": "ByteDance Seed: Seed 1.6 Flash", "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_details" }, - "structured_output": true, "temperature": true, - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { "input": ["text", "image", "video", "audio"], "output": ["text"] }, + "release_date": "2025-12-23", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0.075, + "output": 0.3 + } }, - "xiaomi/mimo-v2-flash": { - "id": "xiaomi/mimo-v2-flash", - "name": "MiMo-V2-Flash", - "family": "mimo", - "attachment": false, + "bytedance-seed/seed-2.0-mini": { + "id": "bytedance-seed/seed-2.0-mini", + "name": "ByteDance Seed: Seed-2.0-Mini", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-12-14", - "last_updated": "2025-12-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-27", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.3, "cache_read": 0.01 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0.1, + "output": 0.4 + } }, - "black-forest-labs/flux.2-pro": { - "id": "black-forest-labs/flux.2-pro", - "name": "FLUX.2 Pro", - "family": "flux", + "mancer/weaver": { + "id": "mancer/weaver", + "name": "Mancer: Weaver (alpha)", "attachment": false, "reasoning": false, "tool_call": false, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-11-25", - "last_updated": "2026-01-31", - "modalities": { "input": ["image", "text"], "output": ["image"] }, + "release_date": "2023-08-02", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 46864, "output": 46864 } + "limit": { + "context": 8000, + "output": 2000 + }, + "cost": { + "input": 0.75, + "output": 1 + } }, - "black-forest-labs/flux.2-max": { - "id": "black-forest-labs/flux.2-max", - "name": "FLUX.2 Max", - "family": "flux", + "anthracite-org/magnum-v4-72b": { + "id": "anthracite-org/magnum-v4-72b", + "name": "Magnum v4 72B", "attachment": false, "reasoning": false, "tool_call": false, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-12-16", - "last_updated": "2026-01-31", - "modalities": { "input": ["image", "text"], "output": ["image"] }, + "release_date": "2024-10-22", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 16384, + "output": 2048 + }, + "cost": { + "input": 3, + "output": 5 + } + }, + "~google/gemini-pro-latest": { + "id": "~google/gemini-pro-latest", + "name": "Google: Gemini Pro Latest", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-27", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 46864, "output": 46864 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2, + "cache_write": 0.375 + } }, - "black-forest-labs/flux.2-klein-4b": { - "id": "black-forest-labs/flux.2-klein-4b", - "name": "FLUX.2 Klein 4B", - "family": "flux", - "attachment": false, - "reasoning": false, - "tool_call": false, + "~google/gemini-flash-latest": { + "id": "~google/gemini-flash-latest", + "name": "Google: Gemini Flash Latest", + "attachment": true, + "reasoning": true, + "tool_call": true, "temperature": true, - "knowledge": "2025-06", - "release_date": "2026-01-14", - "last_updated": "2026-01-31", - "modalities": { "input": ["image", "text"], "output": ["image"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 40960, "output": 40960 } + "release_date": "2026-04-27", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.05, + "cache_write": 0.08333333333333334 + } }, - "black-forest-labs/flux.2-flex": { - "id": "black-forest-labs/flux.2-flex", - "name": "FLUX.2 Flex", - "family": "flux", + "kilo-auto/balanced": { + "id": "kilo-auto/balanced", + "name": "Kilo Auto Balanced", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-11-25", - "last_updated": "2026-01-31", - "modalities": { "input": ["image", "text"], "output": ["image"] }, + "release_date": "2026-03-15", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 67344, "output": 67344 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 3 + } }, - "stepfun/step-3.5-flash": { - "id": "stepfun/step-3.5-flash", - "name": "Step 3.5 Flash", - "family": "step", - "attachment": false, + "kilo-auto/frontier": { + "id": "kilo-auto/frontier", + "name": "Kilo Auto Frontier", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-01-29", - "last_updated": "2026-01-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.3, "cache_read": 0.02 }, - "limit": { "context": 256000, "output": 256000 } + "release_date": "2026-03-15", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25 + } }, - "stepfun/step-3.5-flash:free": { - "id": "stepfun/step-3.5-flash:free", - "name": "Step 3.5 Flash (free)", - "family": "step", + "kilo-auto/small": { + "id": "kilo-auto/small", + "name": "Kilo Auto Small", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-15", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.05, + "output": 0.4 + } + }, + "kilo-auto/free": { + "id": "kilo-auto/free", + "name": "Kilo Auto Free", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-01-29", - "last_updated": "2026-01-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 256000, "output": 256000 } + "release_date": "2026-03-15", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "liquid/lfm-2.5-1.2b-instruct:free": { - "id": "liquid/lfm-2.5-1.2b-instruct:free", - "name": "LFM2.5-1.2B-Instruct (free)", - "family": "liquid", + "undi95/remm-slerp-l2-13b": { + "id": "undi95/remm-slerp-l2-13b", + "name": "ReMM SLERP 13B", "attachment": false, "reasoning": false, "tool_call": false, "temperature": true, - "knowledge": "2025-06", - "release_date": "2026-01-20", - "last_updated": "2026-01-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2023-07-22", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 6144, + "output": 4096 + }, + "cost": { + "input": 0.45, + "output": 0.65 + } }, - "liquid/lfm-2.5-1.2b-thinking:free": { - "id": "liquid/lfm-2.5-1.2b-thinking:free", - "name": "LFM2.5-1.2B-Thinking (free)", - "family": "liquid", + "allenai/olmo-3-32b-think": { + "id": "allenai/olmo-3-32b-think", + "name": "AllenAI: Olmo 3 32B Think", "attachment": false, "reasoning": true, "tool_call": false, "temperature": true, - "knowledge": "2025-06", - "release_date": "2026-01-20", - "last_updated": "2026-01-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-11-22", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 65536, + "output": 65536 + }, + "cost": { + "input": 0.15, + "output": 0.5 + } }, - "moonshotai/kimi-k2-thinking": { - "id": "moonshotai/kimi-k2-thinking", - "name": "Kimi K2 Thinking", - "family": "kimi-thinking", + "nousresearch/hermes-2-pro-llama-3-8b": { + "id": "nousresearch/hermes-2-pro-llama-3-8b", + "name": "NousResearch: Hermes 2 Pro - Llama-3 8B", "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_details" }, - "structured_output": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-11-06", - "last_updated": "2025-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-05-27", + "last_updated": "2024-06-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 2.5, "cache_read": 0.15 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 0.14, + "output": 0.14 + } }, - "moonshotai/kimi-k2.5": { - "id": "moonshotai/kimi-k2.5", - "name": "Kimi K2.5", - "family": "kimi", - "attachment": true, + "nousresearch/hermes-4-405b": { + "id": "nousresearch/hermes-4-405b", + "name": "Nous: Hermes 4 405B", + "attachment": false, "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_details" }, - "structured_output": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2025-08-25", + "last_updated": "2025-08-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 3, "cache_read": 0.1 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 131072, + "output": 26215 + }, + "cost": { + "input": 1, + "output": 3 + } }, - "moonshotai/kimi-k2-0905": { - "id": "moonshotai/kimi-k2-0905", - "name": "Kimi K2 Instruct 0905", - "family": "kimi", + "nousresearch/hermes-3-llama-3.1-70b": { + "id": "nousresearch/hermes-3-llama-3.1-70b", + "name": "Nous: Hermes 3 70B Instruct", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-08-18", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 2.5 }, - "limit": { "context": 262144, "output": 16384 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.3, + "output": 0.3 + } }, - "moonshotai/kimi-k2": { - "id": "moonshotai/kimi-k2", - "name": "Kimi K2", - "family": "kimi", + "nousresearch/hermes-4-70b": { + "id": "nousresearch/hermes-4-70b", + "name": "Nous: Hermes 4 70B", "attachment": false, - "reasoning": false, - "tool_call": true, + "reasoning": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-07-11", - "last_updated": "2025-07-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-25", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.55, "output": 2.2 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.13, + "output": 0.4, + "cache_read": 0.055 + } }, - "moonshotai/kimi-k2-0905:exacto": { - "id": "moonshotai/kimi-k2-0905:exacto", - "name": "Kimi K2 Instruct 0905 (exacto)", - "family": "kimi", - "attachment": false, + "nousresearch/hermes-3-llama-3.1-405b": { + "id": "nousresearch/hermes-3-llama-3.1-405b", + "name": "Nous: Hermes 3 405B Instruct", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-08-16", + "last_updated": "2024-08-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 2.5 }, - "limit": { "context": 262144, "output": 16384 } + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 1, + "output": 1 + } }, - "moonshotai/kimi-k2:free": { - "id": "moonshotai/kimi-k2:free", - "name": "Kimi K2 (free)", - "family": "kimi", + "morph/morph-v3-fast": { + "id": "morph/morph-v3-fast", + "name": "Morph: Morph V3 Fast", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-11", - "last_updated": "2025-07-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 32800, "output": 32800 } + "release_date": "2024-08-15", + "last_updated": "2024-08-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 81920, + "output": 38000 + }, + "cost": { + "input": 0.8, + "output": 1.2 + } }, - "bytedance-seed/seedream-4.5": { - "id": "bytedance-seed/seedream-4.5", - "name": "Seedream 4.5", - "family": "seed", + "morph/morph-v3-large": { + "id": "morph/morph-v3-large", + "name": "Morph: Morph V3 Large", "attachment": false, "reasoning": false, "tool_call": false, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-12-23", - "last_updated": "2026-01-31", - "modalities": { "input": ["image", "text"], "output": ["image"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 4096, "output": 4096 } + "release_date": "2024-08-15", + "last_updated": "2024-08-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0.9, + "output": 1.9 + } }, - "inception/mercury-2": { - "id": "inception/mercury-2", - "name": "Mercury 2", - "family": "mercury", + "stepfun/step-3.5-flash:free": { + "id": "stepfun/step-3.5-flash:free", + "name": "StepFun: Step 3.5 Flash (free)", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-03-04", - "last_updated": "2026-03-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-26", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 0.75, "cache_read": 0.025 }, - "limit": { "context": 128000, "output": 50000 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "inception/mercury-coder": { - "id": "inception/mercury-coder", - "name": "Mercury Coder", - "family": "mercury", + "stepfun/step-3.5-flash": { + "id": "stepfun/step-3.5-flash", + "name": "StepFun: Step 3.5 Flash", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-01-29", + "last_updated": "2026-01-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.1, + "output": 0.3, + "cache_read": 0.02 + } + }, + "alpindale/goliath-120b": { + "id": "alpindale/goliath-120b", + "name": "Goliath 120B", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "release_date": "2023-11-10", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 6144, + "output": 1024 + }, + "cost": { + "input": 3.75, + "output": 7.5 + } + }, + "mistralai/mistral-nemo": { + "id": "mistralai/mistral-nemo", + "name": "Mistral: Mistral Nemo", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-04-30", - "last_updated": "2025-04-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 0.75, "cache_read": 0.025 }, - "limit": { "context": 128000, "output": 32000 } + "release_date": "2024-07-01", + "last_updated": "2024-07-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.02, + "output": 0.04 + } }, - "inception/mercury": { - "id": "inception/mercury", - "name": "Mercury", - "family": "mercury", + "mistralai/mistral-saba": { + "id": "mistralai/mistral-saba", + "name": "Mistral: Saba", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-06-26", - "last_updated": "2025-06-26", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 0.75, "cache_read": 0.025 }, - "limit": { "context": 128000, "output": 32000 } + "release_date": "2025-02-17", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.2, + "output": 0.6 + } }, - "mistralai/mistral-medium-3.1": { - "id": "mistralai/mistral-medium-3.1", - "name": "Mistral Medium 3.1", - "family": "mistral-medium", + "mistralai/mistral-large-2512": { + "id": "mistralai/mistral-large-2512", + "name": "Mistral: Mistral Large 3 2512", "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-05", - "release_date": "2025-08-12", - "last_updated": "2025-08-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 262144, "output": 262144 } + "release_date": "2024-11-01", + "last_updated": "2025-12-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 52429 + }, + "cost": { + "input": 0.5, + "output": 1.5 + } }, - "mistralai/devstral-small-2505": { - "id": "mistralai/devstral-small-2505", - "name": "Devstral Small", - "family": "devstral", + "mistralai/devstral-medium": { + "id": "mistralai/devstral-medium", + "name": "Mistral: Devstral Medium", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-05", - "release_date": "2025-05-07", - "last_updated": "2025-05-07", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-07-10", + "last_updated": "2025-07-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.06, "output": 0.12 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 131072, + "output": 26215 + }, + "cost": { + "input": 0.4, + "output": 2 + } }, - "mistralai/mistral-small-2603": { - "id": "mistralai/mistral-small-2603", - "name": "Mistral Small 4", - "family": "mistral-small", + "mistralai/mistral-small-3.1-24b-instruct": { + "id": "mistralai/mistral-small-3.1-24b-instruct", + "name": "Mistral: Mistral Small 3.1 24B", "attachment": true, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-06", - "release_date": "2026-03-16", - "last_updated": "2026-03-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-03-17", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 128000, + "output": 131072 + }, + "cost": { + "input": 0.35, + "output": 0.56, + "cache_read": 0.015 + } }, - "mistralai/mistral-medium-3": { - "id": "mistralai/mistral-medium-3", - "name": "Mistral Medium 3", - "family": "mistral-medium", + "mistralai/mistral-medium-3-5": { + "id": "mistralai/mistral-medium-3-5", + "name": "Mistral: Mistral Medium 3.5", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-05", - "release_date": "2025-05-07", - "last_updated": "2025-05-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-04-30", + "last_updated": "2026-05-07", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 1.5, + "output": 7.5 + } + }, + "mistralai/pixtral-large-2411": { + "id": "mistralai/pixtral-large-2411", + "name": "Mistral: Pixtral Large 2411", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2024-11-19", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 6 + } }, "mistralai/devstral-2512": { "id": "mistralai/devstral-2512", - "name": "Devstral 2 2512", - "family": "devstral", + "name": "Mistral: Devstral 2 2512", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-12", "release_date": "2025-09-12", - "last_updated": "2025-09-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.4, + "output": 2, + "cache_read": 0.025 + } }, "mistralai/codestral-2508": { "id": "mistralai/codestral-2508", - "name": "Codestral 2508", - "family": "codestral", + "name": "Mistral: Codestral 2508", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-05", "release_date": "2025-08-01", "last_updated": "2025-08-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 0.9 }, - "limit": { "context": 256000, "output": 256000 } + "limit": { + "context": 256000, + "output": 51200 + }, + "cost": { + "input": 0.3, + "output": 0.9 + } }, - "mistralai/devstral-medium-2507": { - "id": "mistralai/devstral-medium-2507", - "name": "Devstral Medium", - "family": "devstral", + "mistralai/mistral-small-24b-instruct-2501": { + "id": "mistralai/mistral-small-24b-instruct-2501", + "name": "Mistral: Mistral Small 3", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-05", - "release_date": "2025-07-10", - "last_updated": "2025-07-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-29", + "last_updated": "2026-01-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 32768, + "output": 16384 + }, + "cost": { + "input": 0.05, + "output": 0.08 + } }, - "mistralai/devstral-small-2507": { - "id": "mistralai/devstral-small-2507", - "name": "Devstral Small 1.1", - "family": "devstral", + "mistralai/mistral-large-2411": { + "id": "mistralai/mistral-large-2411", + "name": "Mistral Large 2411", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-05", - "release_date": "2025-07-10", - "last_updated": "2025-07-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-07-24", + "last_updated": "2024-11-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 131072, + "output": 26215 + }, + "cost": { + "input": 2, + "output": 6 + } }, - "mistralai/mistral-small-3.2-24b-instruct": { - "id": "mistralai/mistral-small-3.2-24b-instruct", - "name": "Mistral Small 3.2 24B Instruct", - "family": "mistral-small", - "attachment": true, + "mistralai/mixtral-8x22b-instruct": { + "id": "mistralai/mixtral-8x22b-instruct", + "name": "Mistral: Mixtral 8x22B Instruct", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-06-20", - "last_updated": "2025-06-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2024-04-17", + "last_updated": "2024-04-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 96000, "output": 8192 } + "limit": { + "context": 65536, + "output": 13108 + }, + "cost": { + "input": 2, + "output": 6 + } }, - "mistralai/mistral-small-3.1-24b-instruct": { - "id": "mistralai/mistral-small-3.1-24b-instruct", - "name": "Mistral Small 3.1 24B Instruct", - "family": "mistral-small", - "attachment": true, + "mistralai/mistral-large-2407": { + "id": "mistralai/mistral-large-2407", + "name": "Mistral Large 2407", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-03-17", - "last_updated": "2025-03-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2024-11-19", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 8192 } - } - } - }, - "zenmux": { - "id": "zenmux", - "env": ["ZENMUX_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://zenmux.ai/api/v1", - "name": "ZenMux", - "doc": "https://docs.zenmux.ai", - "models": { - "openai/gpt-5.2-codex": { - "id": "openai/gpt-5.2-codex", - "name": "GPT-5.2-Codex", + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 6 + } + }, + "mistralai/ministral-8b-2512": { + "id": "mistralai/ministral-8b-2512", + "name": "Mistral: Ministral 3 8B 2512", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "temperature": false, - "knowledge": "2025-01-01", - "release_date": "2026-01-15", - "last_updated": "2026-01-15", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.17 }, - "limit": { "context": 400000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/openai", "api": "https://zenmux.ai/api/v1" } + "temperature": true, + "release_date": "2025-12-02", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0.15, + "output": 0.15 + } }, - "openai/gpt-5.1-codex-mini": { - "id": "openai/gpt-5.1-codex-mini", - "name": "GPT-5.1-Codex-Mini", + "mistralai/mistral-medium-3.1": { + "id": "mistralai/mistral-medium-3.1", + "name": "Mistral: Mistral Medium 3.1", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "release_date": "2025-08-12", + "last_updated": "2025-08-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.03 }, - "limit": { "context": 400000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/openai", "api": "https://zenmux.ai/api/v1" } + "limit": { + "context": 131072, + "output": 26215 + }, + "cost": { + "input": 0.4, + "output": 2 + } }, - "openai/gpt-5.4-pro": { - "id": "openai/gpt-5.4-pro", - "name": "GPT-5.4 Pro", + "mistralai/mistral-small-2603": { + "id": "mistralai/mistral-small-2603", + "name": "Mistral: Mistral Small 4", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-08-31", - "release_date": "2026-03-20", - "last_updated": "2026-03-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 45, "output": 225 }, - "limit": { "context": 1050000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai", "api": "https://zenmux.ai/api/v1" } + "release_date": "2026-03-16", + "last_updated": "2026-04-11", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.15, + "output": 0.6, + "cache_read": 0.015 + } }, - "openai/gpt-5.4-mini": { - "id": "openai/gpt-5.4-mini", - "name": "GPT-5.4 Mini", + "mistralai/ministral-3b-2512": { + "id": "mistralai/ministral-3b-2512", + "name": "Mistral: Ministral 3 3B 2512", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-08-31", - "release_date": "2026-03-20", - "last_updated": "2026-03-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.75, "output": 4.5 }, - "limit": { "context": 400000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai", "api": "https://zenmux.ai/api/v1" } + "release_date": "2025-12-02", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } }, - "openai/gpt-5": { - "id": "openai/gpt-5", - "name": "GPT-5", - "attachment": true, - "reasoning": true, + "mistralai/voxtral-small-24b-2507": { + "id": "mistralai/voxtral-small-24b-2507", + "name": "Mistral: Voxtral Small 24B 2507", + "attachment": false, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.12 }, - "limit": { "context": 400000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/openai", "api": "https://zenmux.ai/api/v1" } + "release_date": "2025-07-01", + "last_updated": "2025-07-01", + "modalities": { + "input": ["text", "audio"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32000, + "output": 6400 + }, + "cost": { + "input": 0.1, + "output": 0.3 + } }, - "openai/gpt-5.3-codex": { - "id": "openai/gpt-5.3-codex", - "name": "GPT-5.3 Codex", - "attachment": true, - "reasoning": true, + "mistralai/mixtral-8x7b-instruct": { + "id": "mistralai/mixtral-8x7b-instruct", + "name": "Mistral: Mixtral 8x7B Instruct", + "attachment": false, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-08-31", - "release_date": "2026-03-20", - "last_updated": "2026-03-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14 }, - "limit": { "context": 400000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai", "api": "https://zenmux.ai/api/v1" } + "release_date": "2023-12-10", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 16384 + }, + "cost": { + "input": 0.54, + "output": 0.54 + } }, - "openai/gpt-5.1-chat": { - "id": "openai/gpt-5.1-chat", - "name": "GPT-5.1 Chat", + "mistralai/mistral-medium-3": { + "id": "mistralai/mistral-medium-3", + "name": "Mistral: Mistral Medium 3", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["pdf", "image", "text"], "output": ["text"] }, + "release_date": "2025-05-07", + "last_updated": "2025-05-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.12 }, - "limit": { "context": 128000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/openai", "api": "https://zenmux.ai/api/v1" } + "limit": { + "context": 131072, + "output": 26215 + }, + "cost": { + "input": 0.4, + "output": 2 + } }, - "openai/gpt-5.4": { - "id": "openai/gpt-5.4", - "name": "GPT-5.4", + "mistralai/mistral-small-3.2-24b-instruct": { + "id": "mistralai/mistral-small-3.2-24b-instruct", + "name": "Mistral: Mistral Small 3.2 24B", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-08-31", - "release_date": "2026-03-20", - "last_updated": "2026-03-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3.75, "output": 18.75 }, - "limit": { "context": 1050000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai", "api": "https://zenmux.ai/api/v1" } + "release_date": "2025-06-20", + "last_updated": "2025-06-20", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.06, + "output": 0.18, + "cache_read": 0.03 + } }, - "openai/gpt-5.4-nano": { - "id": "openai/gpt-5.4-nano", - "name": "GPT-5.4 Nano", + "mistralai/devstral-small": { + "id": "mistralai/devstral-small", + "name": "Mistral: Devstral Small 1.1", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-08-31", - "release_date": "2026-03-20", - "last_updated": "2026-03-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 1.25 }, - "limit": { "context": 400000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai", "api": "https://zenmux.ai/api/v1" } + "release_date": "2025-05-07", + "last_updated": "2025-07-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 26215 + }, + "cost": { + "input": 0.1, + "output": 0.3 + } }, - "openai/gpt-5.3-chat": { - "id": "openai/gpt-5.3-chat", - "name": "GPT-5.3 Chat", - "attachment": true, + "mistralai/mistral-large": { + "id": "mistralai/mistral-large", + "name": "Mistral Large", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-08-31", - "release_date": "2026-03-20", - "last_updated": "2026-03-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-07-24", + "last_updated": "2025-12-02", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 25600 + }, + "cost": { + "input": 2, + "output": 6 + } + }, + "mistralai/mistral-7b-instruct-v0.1": { + "id": "mistralai/mistral-7b-instruct-v0.1", + "name": "Mistral: Mistral 7B Instruct v0.1", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "release_date": "2025-04-03", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14 }, - "limit": { "context": 128000, "output": 16380 }, - "provider": { "npm": "@ai-sdk/openai", "api": "https://zenmux.ai/api/v1" } + "limit": { + "context": 2824, + "output": 565 + }, + "cost": { + "input": 0.11, + "output": 0.19 + } }, - "openai/gpt-5.2": { - "id": "openai/gpt-5.2", - "name": "GPT-5.2", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2025-01-01", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["image", "text", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.17 }, - "limit": { "context": 400000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/openai", "api": "https://zenmux.ai/api/v1" } - }, - "openai/gpt-5.1": { - "id": "openai/gpt-5.1", - "name": "GPT-5.1", + "mistralai/ministral-14b-2512": { + "id": "mistralai/ministral-14b-2512", + "name": "Mistral: Ministral 3 14B 2512", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["image", "text", "pdf"], "output": ["text"] }, + "release_date": "2025-12-16", + "last_updated": "2025-12-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.12 }, - "limit": { "context": 400000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/openai", "api": "https://zenmux.ai/api/v1" } + "limit": { + "context": 262144, + "output": 52429 + }, + "cost": { + "input": 0.2, + "output": 0.2 + } }, - "openai/gpt-5-codex": { - "id": "openai/gpt-5-codex", - "name": "GPT-5 Codex", + "~anthropic/claude-haiku-latest": { + "id": "~anthropic/claude-haiku-latest", + "name": "Anthropic: Claude Haiku Latest", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-09-23", - "last_updated": "2025-09-23", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-04-27", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.12 }, - "limit": { "context": 400000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/openai", "api": "https://zenmux.ai/api/v1" } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } }, - "openai/gpt-5.1-codex": { - "id": "openai/gpt-5.1-codex", - "name": "GPT-5.1-Codex", + "~anthropic/claude-sonnet-latest": { + "id": "~anthropic/claude-sonnet-latest", + "name": "Anthropic: Claude Sonnet Latest", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-04-27", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.12 }, - "limit": { "context": 400000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/openai", "api": "https://zenmux.ai/api/v1" } + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "openai/gpt-5.2-pro": { - "id": "openai/gpt-5.2-pro", - "name": "GPT-5.2-Pro", + "~anthropic/claude-opus-latest": { + "id": "~anthropic/claude-opus-latest", + "name": "Anthropic: Claude Opus Latest", "attachment": true, "reasoning": true, "tool_call": true, "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 21, "output": 168 }, - "limit": { "context": 400000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai", "api": "https://zenmux.ai/api/v1" } - }, - "x-ai/grok-4-fast": { - "id": "x-ai/grok-4-fast", - "name": "Grok 4 Fast", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-09-19", - "last_updated": "2025-09-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-04-16", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 64000 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "x-ai/grok-4.1-fast": { - "id": "x-ai/grok-4.1-fast", - "name": "Grok 4.1 Fast", - "attachment": true, - "reasoning": true, + "meta-llama/llama-3.3-70b-instruct": { + "id": "meta-llama/llama-3.3-70b-instruct", + "name": "Meta: Llama 3.3 70B Instruct", + "attachment": false, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-11-20", - "last_updated": "2025-11-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 64000 } + "release_date": "2024-08-01", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.1, + "output": 0.32 + } }, - "x-ai/grok-4": { - "id": "x-ai/grok-4", - "name": "Grok 4", + "meta-llama/llama-4-scout": { + "id": "meta-llama/llama-4-scout", + "name": "Meta: Llama 4 Scout", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["image", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.75 }, - "limit": { "context": 256000, "output": 64000 } + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 327680, + "output": 16384 + }, + "cost": { + "input": 0.08, + "output": 0.3 + } }, - "x-ai/grok-code-fast-1": { - "id": "x-ai/grok-code-fast-1", - "name": "Grok Code Fast 1", + "meta-llama/llama-guard-3-8b": { + "id": "meta-llama/llama-guard-3-8b", + "name": "Llama Guard 3 8B", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-08-26", - "last_updated": "2025-08-26", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 1.5, "cache_read": 0.02 }, - "limit": { "context": 256000, "output": 64000 } + "release_date": "2024-04-18", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 26215 + }, + "cost": { + "input": 0.02, + "output": 0.06 + } }, - "x-ai/grok-4.1-fast-non-reasoning": { - "id": "x-ai/grok-4.1-fast-non-reasoning", - "name": "Grok 4.1 Fast Non Reasoning", + "meta-llama/llama-4-maverick": { + "id": "meta-llama/llama-4-maverick", + "name": "Meta: Llama 4 Maverick", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-11-20", - "last_updated": "2025-11-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 64000 } + "release_date": "2025-04-05", + "last_updated": "2025-12-24", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1048576, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "x-ai/grok-4.2-fast": { - "id": "x-ai/grok-4.2-fast", - "name": "Grok 4.2 Fast", + "meta-llama/llama-3.2-11b-vision-instruct": { + "id": "meta-llama/llama-3.2-11b-vision-instruct", + "name": "Meta: Llama 3.2 11B Vision Instruct", "attachment": true, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-08-31", - "release_date": "2026-03-20", - "last_updated": "2026-03-20", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 9 }, - "limit": { "context": 2000000, "output": 30000 } + "release_date": "2024-09-25", + "last_updated": "2024-09-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.049, + "output": 0.049 + } }, - "x-ai/grok-4.2-fast-non-reasoning": { - "id": "x-ai/grok-4.2-fast-non-reasoning", - "name": "Grok 4.2 Fast Non Reasoning", + "meta-llama/llama-guard-4-12b": { + "id": "meta-llama/llama-guard-4-12b", + "name": "Meta: Llama Guard 4 12B", "attachment": true, "reasoning": false, + "tool_call": false, + "temperature": true, + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 163840, + "output": 32768 + }, + "cost": { + "input": 0.18, + "output": 0.18 + } + }, + "meta-llama/llama-3.1-70b-instruct": { + "id": "meta-llama/llama-3.1-70b-instruct", + "name": "Meta: Llama 3.1 70B Instruct", + "attachment": false, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-08-31", - "release_date": "2026-03-20", - "last_updated": "2026-03-20", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 9 }, - "limit": { "context": 2000000, "output": 30000 } + "release_date": "2024-07-16", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 26215 + }, + "cost": { + "input": 0.4, + "output": 0.4 + } }, - "anthropic/claude-opus-4.6": { - "id": "anthropic/claude-opus-4.6", - "name": "Claude Opus 4.6", - "attachment": true, - "reasoning": true, + "meta-llama/llama-3.2-1b-instruct": { + "id": "meta-llama/llama-3.2-1b-instruct", + "name": "Meta: Llama 3.2 1B Instruct", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "release_date": "2024-09-18", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 60000, + "output": 12000 + }, + "cost": { + "input": 0.027, + "output": 0.2 + } + }, + "meta-llama/llama-3.2-3b-instruct": { + "id": "meta-llama/llama-3.2-3b-instruct", + "name": "Meta: Llama 3.2 3B Instruct", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "release_date": "2024-09-18", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 80000, + "output": 16384 + }, + "cost": { + "input": 0.051, + "output": 0.34 + } + }, + "meta-llama/llama-3-8b-instruct": { + "id": "meta-llama/llama-3-8b-instruct", + "name": "Meta: Llama 3 8B Instruct", + "attachment": false, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2026-02-06", - "last_updated": "2026-02-06", - "modalities": { "input": ["image", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 1000000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/anthropic", "api": "https://zenmux.ai/api/anthropic/v1" } + "release_date": "2024-04-25", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 16384 + }, + "cost": { + "input": 0.03, + "output": 0.04 + } }, - "anthropic/claude-haiku-4.5": { - "id": "anthropic/claude-haiku-4.5", - "name": "Claude Haiku 4.5", - "attachment": true, + "meta-llama/llama-3.1-8b-instruct": { + "id": "meta-llama/llama-3.1-8b-instruct", + "name": "Meta: Llama 3.1 8B Instruct", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["image", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.1, "cache_write": 1.25 }, - "limit": { "context": 200000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/anthropic", "api": "https://zenmux.ai/api/anthropic/v1" } + "release_date": "2024-07-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 16384, + "output": 16384 + }, + "cost": { + "input": 0.02, + "output": 0.05 + } }, - "anthropic/claude-opus-4.1": { - "id": "anthropic/claude-opus-4.1", - "name": "Claude Opus 4.1", + "meta-llama/llama-3-70b-instruct": { + "id": "meta-llama/llama-3-70b-instruct", + "name": "Meta: Llama 3 70B Instruct", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 8000 + }, + "cost": { + "input": 0.51, + "output": 0.74 + } + }, + "x-ai/grok-4.20": { + "id": "x-ai/grok-4.20", + "name": "xAI: Grok 4.20", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["image", "text", "pdf"], "output": ["text"] }, + "release_date": "2026-03-31", + "last_updated": "2026-04-11", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/anthropic", "api": "https://zenmux.ai/api/anthropic/v1" } + "limit": { + "context": 2000000, + "output": 2000000 + }, + "cost": { + "input": 2, + "output": 6, + "cache_read": 0.2 + } }, - "anthropic/claude-3.7-sonnet": { - "id": "anthropic/claude-3.7-sonnet", - "name": "Claude 3.7 Sonnet", - "attachment": true, + "x-ai/grok-code-fast-1:optimized:free": { + "id": "x-ai/grok-code-fast-1:optimized:free", + "name": "xAI: Grok Code Fast 1 Optimized (experimental, free)", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-02-24", - "last_updated": "2025-02-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-08-27", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/anthropic", "api": "https://zenmux.ai/api/anthropic/v1" } + "limit": { + "context": 256000, + "output": 10000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "anthropic/claude-sonnet-4.6": { - "id": "anthropic/claude-sonnet-4.6", - "name": "Claude Sonnet 4.6", + "x-ai/grok-4.3": { + "id": "x-ai/grok-4.3", + "name": "xAI: Grok 4.3", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2026-02-18", - "last_updated": "2026-02-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-05-01", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 1000000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/anthropic", "api": "https://zenmux.ai/api/anthropic/v1" } + "limit": { + "context": 1000000, + "output": 4096 + }, + "cost": { + "input": 1.25, + "output": 2.5, + "cache_read": 0.2 + } }, - "anthropic/claude-sonnet-4": { - "id": "anthropic/claude-sonnet-4", - "name": "Claude Sonnet 4", + "x-ai/grok-4-fast": { + "id": "x-ai/grok-4-fast", + "name": "xAI: Grok 4 Fast", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["image", "text", "pdf"], "output": ["text"] }, + "release_date": "2025-08-19", + "last_updated": "2025-08-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 1000000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/anthropic", "api": "https://zenmux.ai/api/anthropic/v1" } + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } }, - "anthropic/claude-3.5-haiku": { - "id": "anthropic/claude-3.5-haiku", - "name": "Claude 3.5 Haiku", - "attachment": true, - "reasoning": false, + "x-ai/grok-code-fast-1": { + "id": "x-ai/grok-code-fast-1", + "name": "xAI: Grok Code Fast 1", + "attachment": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2024-11-04", - "last_updated": "2024-11-04", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-08-26", + "last_updated": "2025-08-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.8, "output": 4, "cache_read": 0.08, "cache_write": 1 }, - "limit": { "context": 200000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/anthropic", "api": "https://zenmux.ai/api/anthropic/v1" } + "limit": { + "context": 256000, + "output": 10000 + }, + "cost": { + "input": 0.2, + "output": 1.5, + "cache_read": 0.02 + } }, - "anthropic/claude-opus-4.5": { - "id": "anthropic/claude-opus-4.5", - "name": "Claude Opus 4.5", - "attachment": true, - "reasoning": true, + "x-ai/grok-3-beta": { + "id": "x-ai/grok-3-beta", + "name": "xAI: Grok 3 Beta", + "attachment": false, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-11-24", - "last_updated": "2025-11-24", - "modalities": { "input": ["pdf", "image", "text"], "output": ["text"] }, + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 200000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/anthropic", "api": "https://zenmux.ai/api/anthropic/v1" } + "limit": { + "context": 131072, + "output": 26215 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.75 + } }, - "anthropic/claude-sonnet-4.5": { - "id": "anthropic/claude-sonnet-4.5", - "name": "Claude Sonnet 4.5", + "x-ai/grok-4": { + "id": "x-ai/grok-4", + "name": "xAI: Grok 4", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 1000000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/anthropic", "api": "https://zenmux.ai/api/anthropic/v1" } + "limit": { + "context": 256000, + "output": 51200 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.75 + } }, - "anthropic/claude-opus-4": { - "id": "anthropic/claude-opus-4", - "name": "Claude Opus 4", - "attachment": true, + "x-ai/grok-3-mini": { + "id": "x-ai/grok-3-mini", + "name": "xAI: Grok 3 Mini", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["image", "text", "pdf"], "output": ["text"] }, + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 }, - "provider": { "npm": "@ai-sdk/anthropic", "api": "https://zenmux.ai/api/anthropic/v1" } + "limit": { + "context": 131072, + "output": 26215 + }, + "cost": { + "input": 0.3, + "output": 0.5, + "cache_read": 0.075 + } }, - "volcengine/doubao-seed-2.0-lite": { - "id": "volcengine/doubao-seed-2.0-lite", - "name": "Doubao-Seed-2.0-lite", + "x-ai/grok-4.1-fast": { + "id": "x-ai/grok-4.1-fast", + "name": "xAI: Grok 4.1 Fast", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2026-02-14", - "release_date": "2026-02-14", - "last_updated": "2026-02-14", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2025-11-19", + "last_updated": "2025-11-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.09, "output": 0.51, "cache_read": 0.02, "cache_write": 0.0024 }, - "limit": { "context": 256000, "output": 64000 } + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } }, - "volcengine/doubao-seed-2.0-mini": { - "id": "volcengine/doubao-seed-2.0-mini", - "name": "Doubao-Seed-2.0-mini", - "attachment": true, + "x-ai/grok-3-mini-beta": { + "id": "x-ai/grok-3-mini-beta", + "name": "xAI: Grok 3 Mini Beta", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2026-02-14", - "release_date": "2026-02-14", - "last_updated": "2026-02-14", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.03, "output": 0.28, "cache_read": 0.01, "cache_write": 0.0024 }, - "limit": { "context": 256000, "output": 64000 } + "limit": { + "context": 131072, + "output": 26215 + }, + "cost": { + "input": 0.3, + "output": 0.5, + "cache_read": 0.075 + } }, - "volcengine/doubao-seed-2.0-pro": { - "id": "volcengine/doubao-seed-2.0-pro", - "name": "Doubao-Seed-2.0-pro", + "x-ai/grok-4.20-multi-agent": { + "id": "x-ai/grok-4.20-multi-agent", + "name": "xAI: Grok 4.20 Multi-Agent", "attachment": true, "reasoning": true, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2026-02-14", - "release_date": "2026-02-14", - "last_updated": "2026-02-14", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2026-03-31", + "last_updated": "2026-04-11", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.45, "output": 2.24, "cache_read": 0.09, "cache_write": 0.0024 }, - "limit": { "context": 256000, "output": 64000 } + "limit": { + "context": 2000000, + "output": 2000000 + }, + "cost": { + "input": 2, + "output": 6, + "cache_read": 0.2 + } }, - "volcengine/doubao-seed-2.0-code": { - "id": "volcengine/doubao-seed-2.0-code", - "name": "Doubao Seed 2.0 Code", - "attachment": true, + "x-ai/grok-3": { + "id": "x-ai/grok-3", + "name": "xAI: Grok 3", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2026-03-20", - "last_updated": "2026-03-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.9, "output": 4.48 }, - "limit": { "context": 256000, "output": 32000 } + "limit": { + "context": 131072, + "output": 26215 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.75 + } }, - "volcengine/doubao-seed-1.8": { - "id": "volcengine/doubao-seed-1.8", - "name": "Doubao-Seed-1.8", - "attachment": true, + "tencent/hy3-preview:free": { + "id": "tencent/hy3-preview:free", + "name": "Tencent: Hy3 Preview (free)", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-12-18", - "last_updated": "2025-12-18", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2026-04-22", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.11, "output": 0.28, "cache_read": 0.02, "cache_write": 0.0024 }, - "limit": { "context": 256000, "output": 64000 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "volcengine/doubao-seed-code": { - "id": "volcengine/doubao-seed-code", - "name": "Doubao-Seed-Code", - "attachment": true, + "tencent/hunyuan-a13b-instruct": { + "id": "tencent/hunyuan-a13b-instruct", + "name": "Tencent: Hunyuan A13B Instruct", + "attachment": false, "reasoning": true, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-11-11", - "last_updated": "2025-11-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-06-30", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.17, "output": 1.12, "cache_read": 0.03 }, - "limit": { "context": 256000, "output": 64000 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.14, + "output": 0.57 + } }, - "deepseek/deepseek-chat": { - "id": "deepseek/deepseek-chat", - "name": "DeepSeek-V3.2 (Non-thinking Mode)", + "gryphe/mythomax-l2-13b": { + "id": "gryphe/mythomax-l2-13b", + "name": "MythoMax 13B", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.28, "output": 0.42, "cache_read": 0.03 }, - "limit": { "context": 128000, "output": 64000 } + "release_date": "2024-04-25", + "last_updated": "2024-04-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 4096, + "output": 4096 + }, + "cost": { + "input": 0.06, + "output": 0.06 + } }, - "deepseek/deepseek-v3.2-exp": { - "id": "deepseek/deepseek-v3.2-exp", - "name": "DeepSeek-V3.2-Exp", + "sao10k/l3-euryale-70b": { + "id": "sao10k/l3-euryale-70b", + "name": "Sao10k: Llama 3 Euryale 70B v2.1", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.22, "output": 0.33 }, - "limit": { "context": 163000, "output": 64000 } + "release_date": "2024-06-18", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 1.48, + "output": 1.48 + } }, - "deepseek/deepseek-v3.2": { - "id": "deepseek/deepseek-v3.2", - "name": "DeepSeek V3.2", + "sao10k/l3-lunaris-8b": { + "id": "sao10k/l3-lunaris-8b", + "name": "Sao10K: Llama 3 8B Lunaris", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-12-05", - "last_updated": "2025-12-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.28, "output": 0.43 }, - "limit": { "context": 128000, "output": 64000 } + "release_date": "2024-08-13", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 0.04, + "output": 0.05 + } }, - "z-ai/glm-4.7-flash-free": { - "id": "z-ai/glm-4.7-flash-free", - "name": "GLM 4.7 Flash (Free)", + "sao10k/l3.3-euryale-70b": { + "id": "sao10k/l3.3-euryale-70b", + "name": "Sao10K: Llama 3.3 Euryale 70B", "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2026-01-19", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 200000, "output": 64000 } - }, - "z-ai/glm-5-turbo": { - "id": "z-ai/glm-5-turbo", - "name": "GLM 5 Turbo", - "attachment": true, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2026-03-20", - "last_updated": "2026-03-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.88, "output": 3.48 }, - "limit": { "context": 200000, "output": 128000 } + "release_date": "2024-12-18", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.65, + "output": 0.75 + } }, - "z-ai/glm-4.5": { - "id": "z-ai/glm-4.5", - "name": "GLM 4.5", + "sao10k/l3.1-70b-hanami-x1": { + "id": "sao10k/l3.1-70b-hanami-x1", + "name": "Sao10K: Llama 3.1 70B Hanami x1", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-07-25", - "last_updated": "2025-07-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.35, "output": 1.54, "cache_read": 0.07 }, - "limit": { "context": 128000, "output": 64000 } + "release_date": "2025-01-08", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 16000, + "output": 16000 + }, + "cost": { + "input": 3, + "output": 3 + } }, - "z-ai/glm-4.7-flashx": { - "id": "z-ai/glm-4.7-flashx", - "name": "GLM 4.7 FlashX", + "sao10k/l3.1-euryale-70b": { + "id": "sao10k/l3.1-euryale-70b", + "name": "Sao10K: Llama 3.1 Euryale 70B v2.2", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2026-01-19", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.07, "output": 0.42, "cache_read": 0.01 }, - "limit": { "context": 200000, "output": 64000 } + "release_date": "2024-08-28", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.85, + "output": 0.85 + } }, - "z-ai/glm-4.6": { - "id": "z-ai/glm-4.6", - "name": "GLM 4.6", + "microsoft/wizardlm-2-8x22b": { + "id": "microsoft/wizardlm-2-8x22b", + "name": "WizardLM-2 8x22B", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.35, "output": 1.54, "cache_read": 0.07 }, - "limit": { "context": 200000, "output": 64000 } - }, - "z-ai/glm-4.6v": { - "id": "z-ai/glm-4.6v", - "name": "GLM 4.6V", - "attachment": true, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-12-08", - "last_updated": "2025-12-08", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.14, "output": 0.42, "cache_read": 0.03 }, - "limit": { "context": 200000, "output": 64000 } + "release_date": "2024-04-24", + "last_updated": "2024-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 65535, + "output": 8000 + }, + "cost": { + "input": 0.62, + "output": 0.62 + } }, - "z-ai/glm-5": { - "id": "z-ai/glm-5", - "name": "GLM 5", + "microsoft/phi-4-mini-instruct": { + "id": "microsoft/phi-4-mini-instruct", + "name": "Microsoft: Phi 4 Mini Instruct", "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "reasoning": false, + "tool_call": false, + "structured_output": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-10-17", + "last_updated": "2026-05-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.58, "output": 2.6, "cache_read": 0.14 }, - "limit": { "context": 200000, "output": 128000 } + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.08, + "output": 0.35, + "cache_read": 0.08 + } }, - "z-ai/glm-4.5-air": { - "id": "z-ai/glm-4.5-air", - "name": "GLM 4.5 Air", + "microsoft/phi-4": { + "id": "microsoft/phi-4", + "name": "Microsoft: Phi 4", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-07-25", - "last_updated": "2025-07-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.11, "output": 0.56, "cache_read": 0.02 }, - "limit": { "context": 128000, "output": 64000 } + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 16384, + "output": 16384 + }, + "cost": { + "input": 0.06, + "output": 0.14 + } }, - "z-ai/glm-4.7": { - "id": "z-ai/glm-4.7", - "name": "GLM 4.7", + "poolside/laguna-m.1:free": { + "id": "poolside/laguna-m.1:free", + "name": "Poolside: Laguna M.1 (free)", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-28", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.28, "output": 1.14, "cache_read": 0.06 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "z-ai/glm-4.6v-flash-free": { - "id": "z-ai/glm-4.6v-flash-free", - "name": "GLM 4.6V Flash (Free)", - "attachment": true, + "poolside/laguna-xs.2:free": { + "id": "poolside/laguna-xs.2:free", + "name": "Poolside: Laguna XS.2 (free)", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-12-08", - "last_updated": "2025-12-08", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2026-04-28", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "z-ai/glm-4.6v-flash": { - "id": "z-ai/glm-4.6v-flash", - "name": "GLM 4.6V FlashX", - "attachment": true, - "reasoning": true, + "cohere/command-r7b-12-2024": { + "id": "cohere/command-r7b-12-2024", + "name": "Cohere: Command R7B (12-2024)", + "attachment": false, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-12-08", - "last_updated": "2025-12-08", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.02, "output": 0.21, "cache_read": 0.0043 }, - "limit": { "context": 200000, "output": 64000 } + "release_date": "2024-02-27", + "last_updated": "2024-02-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4000 + }, + "cost": { + "input": 0.0375, + "output": 0.15 + } }, - "inclusionai/ring-1t": { - "id": "inclusionai/ring-1t", - "name": "Ring-1T", + "cohere/command-a": { + "id": "cohere/command-a", + "name": "Cohere: Command A", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-10-12", - "last_updated": "2025-10-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.56, "output": 2.24, "cache_read": 0.11 }, - "limit": { "context": 128000, "output": 64000 } + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 8192 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "inclusionai/ling-1t": { - "id": "inclusionai/ling-1t", - "name": "Ling-1T", + "cohere/command-r-plus-08-2024": { + "id": "cohere/command-r-plus-08-2024", + "name": "Cohere: Command R+ (08-2024)", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-10-09", - "last_updated": "2025-10-09", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.56, "output": 2.24, "cache_read": 0.11 }, - "limit": { "context": 128000, "output": 64000 } + "release_date": "2024-08-30", + "last_updated": "2024-08-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4000 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "google/gemini-2.5-flash-lite": { - "id": "google/gemini-2.5-flash-lite", - "name": "Gemini 2.5 Flash Lite", - "attachment": true, + "cohere/command-r-08-2024": { + "id": "cohere/command-r-08-2024", + "name": "Cohere: Command R (08-2024)", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-07-22", - "last_updated": "2025-07-22", - "modalities": { "input": ["pdf", "image", "text", "audio"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.03, "cache_write": 1 }, - "limit": { "context": 1048000, "output": 64000 } + "release_date": "2024-08-30", + "last_updated": "2024-08-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4000 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "google/gemini-3.1-pro-preview": { - "id": "google/gemini-3.1-pro-preview", - "name": "Gemini 3.1 Pro Preview", - "attachment": true, + "prime-intellect/intellect-3": { + "id": "prime-intellect/intellect-3", + "name": "Prime Intellect: INTELLECT-3", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2026-02-19", - "release_date": "2026-02-19", - "last_updated": "2026-02-19", - "modalities": { "input": ["text", "image", "pdf", "audio", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 12, "cache_read": 0.2, "cache_write": 4.5 }, - "limit": { "context": 1048000, "output": 64000 } + "release_date": "2025-11-26", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.2, + "output": 1.1 + } }, - "google/gemini-3-pro-preview": { - "id": "google/gemini-3-pro-preview", - "name": "Gemini 3 Pro Preview", - "attachment": true, + "nvidia/llama-3.3-nemotron-super-49b-v1.5": { + "id": "nvidia/llama-3.3-nemotron-super-49b-v1.5", + "name": "NVIDIA: Llama 3.3 Nemotron Super 49B V1.5", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-11-18", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image", "pdf", "audio", "video"], "output": ["text"] }, + "release_date": "2025-03-16", + "last_updated": "2025-03-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 12, "cache_read": 0.2, "cache_write": 4.5 }, - "limit": { "context": 1048000, "output": 64000 } + "limit": { + "context": 131072, + "output": 26215 + }, + "cost": { + "input": 0.1, + "output": 0.4 + } }, - "google/gemini-3-flash-preview": { - "id": "google/gemini-3-flash-preview", - "name": "Gemini 3 Flash Preview", - "attachment": true, + "nvidia/nemotron-3-super-120b-a12b": { + "id": "nvidia/nemotron-3-super-120b-a12b", + "name": "NVIDIA: Nemotron 3 Super", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text", "image", "pdf", "audio"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.5, "output": 3, "cache_read": 0.05, "cache_write": 1 }, - "limit": { "context": 1048000, "output": 64000 } + "release_date": "2026-03-11", + "last_updated": "2026-04-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.1, + "output": 0.5, + "cache_read": 0.1 + } }, - "google/gemini-2.5-pro": { - "id": "google/gemini-2.5-pro", - "name": "Gemini 2.5 Pro", + "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free": { + "id": "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free", + "name": "NVIDIA: Nemotron 3 Nano Omni (free)", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["pdf", "image", "text", "audio", "video"], "output": ["text"] }, + "release_date": "2026-04-28", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "audio", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.31, "cache_write": 4.5 }, - "limit": { "context": 1048000, "output": 64000 } + "limit": { + "context": 256000, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "google/gemini-2.5-flash": { - "id": "google/gemini-2.5-flash", - "name": "Gemini 2.5 Flash", - "attachment": true, + "nvidia/nemotron-3-nano-30b-a3b": { + "id": "nvidia/nemotron-3-nano-30b-a3b", + "name": "NVIDIA: Nemotron 3 Nano 30B A3B", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["pdf", "image", "text", "audio"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 2.5, "cache_read": 0.07, "cache_write": 1 }, - "limit": { "context": 1048000, "output": 64000 } - }, - "google/gemini-3.1-flash-lite-preview": { - "id": "google/gemini-3.1-flash-lite-preview", - "name": "Gemini 3.1 Flash Lite Preview", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2025-03-20", - "last_updated": "2025-03-20", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 1.5 }, - "limit": { "context": 1050000, "output": 65530 } + "release_date": "2024-12", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 52429 + }, + "cost": { + "input": 0.05, + "output": 0.2 + } }, - "baidu/ernie-5.0-thinking-preview": { - "id": "baidu/ernie-5.0-thinking-preview", - "name": "ERNIE 5.0", - "attachment": true, + "nvidia/nemotron-3-super-120b-a12b:free": { + "id": "nvidia/nemotron-3-super-120b-a12b:free", + "name": "NVIDIA: Nemotron 3 Super (free)", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2026-01-22", - "last_updated": "2026-01-22", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.84, "output": 3.37 }, - "limit": { "context": 128000, "output": 64000 } + "release_date": "2026-03-12", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "minimax/minimax-m2.5-lightning": { - "id": "minimax/minimax-m2.5-lightning", - "name": "MiniMax M2.5 highspeed", + "nvidia/nemotron-nano-9b-v2": { + "id": "nvidia/nemotron-nano-9b-v2", + "name": "NVIDIA: Nemotron Nano 9B V2", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2026-02-13", - "last_updated": "2026-02-13", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.6, "output": 4.8, "cache_read": 0.06, "cache_write": 0.75 }, - "limit": { "context": 204800, "output": 131072 }, - "provider": { "npm": "@ai-sdk/anthropic", "api": "https://zenmux.ai/api/anthropic/v1" } + "release_date": "2025-08-18", + "last_updated": "2025-08-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 26215 + }, + "cost": { + "input": 0.04, + "output": 0.16 + } }, - "minimax/minimax-m2": { - "id": "minimax/minimax-m2", - "name": "MiniMax M2", + "nvidia/llama-3.1-nemotron-70b-instruct": { + "id": "nvidia/llama-3.1-nemotron-70b-instruct", + "name": "NVIDIA: Llama 3.1 Nemotron 70B Instruct", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-10-27", - "last_updated": "2025-10-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-10-12", + "last_updated": "2024-10-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.03, "cache_write": 0.38 }, - "limit": { "context": 204000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/anthropic", "api": "https://zenmux.ai/api/anthropic/v1" } + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 1.2, + "output": 1.2 + } }, - "minimax/minimax-m2.1": { - "id": "minimax/minimax-m2.1", - "name": "MiniMax M2.1", + "inception/mercury-2": { + "id": "inception/mercury-2", + "name": "Inception: Mercury 2", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-24", + "last_updated": "2026-02-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.03, "cache_write": 0.38 }, - "limit": { "context": 204000, "output": 64000 }, - "provider": { "npm": "@ai-sdk/anthropic", "api": "https://zenmux.ai/api/anthropic/v1" } + "limit": { + "context": 128000, + "output": 50000 + }, + "cost": { + "input": 0.25, + "output": 0.75, + "cache_read": 0.025 + } }, - "minimax/minimax-m2.7": { - "id": "minimax/minimax-m2.7", - "name": "MiniMax M2.7", + "openai/gpt-5.1-codex-max": { + "id": "openai/gpt-5.1-codex-max", + "name": "OpenAI: GPT-5.1-Codex-Max", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2026-03-20", - "last_updated": "2026-03-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3055, "output": 1.2219 }, - "limit": { "context": 204800, "output": 131070 }, - "provider": { "npm": "@ai-sdk/anthropic", "api": "https://zenmux.ai/api/anthropic/v1" } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "minimax/minimax-m2.7-highspeed": { - "id": "minimax/minimax-m2.7-highspeed", - "name": "MiniMax M2.7 highspeed", + "openai/gpt-5.2-chat": { + "id": "openai/gpt-5.2-chat", + "name": "OpenAI: GPT-5.2 Chat", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2026-03-20", - "last_updated": "2026-03-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-12-11", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.611, "output": 2.4439 }, - "limit": { "context": 204800, "output": 131070 }, - "provider": { "npm": "@ai-sdk/anthropic", "api": "https://zenmux.ai/api/anthropic/v1" } - }, - "minimax/minimax-m2.5": { - "id": "minimax/minimax-m2.5", - "name": "MiniMax M2.5", + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } + }, + "openai/gpt-4o-mini-search-preview": { + "id": "openai/gpt-4o-mini-search-preview", + "name": "OpenAI: GPT-4o-mini Search Preview", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2026-02-13", - "last_updated": "2026-02-13", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-01", + "last_updated": "2025-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.03, "cache_write": 0.375 }, - "limit": { "context": 204800, "output": 131072 }, - "provider": { "npm": "@ai-sdk/anthropic", "api": "https://zenmux.ai/api/anthropic/v1" } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "qwen/qwen3.5-plus": { - "id": "qwen/qwen3.5-plus", - "name": "Qwen3.5 Plus", + "openai/gpt-5-chat": { + "id": "openai/gpt-5-chat", + "name": "OpenAI: GPT-5 Chat", "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2026-03-20", - "last_updated": "2026-03-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-08-07", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.8, "output": 4.8 }, - "limit": { "context": 1000000, "output": 64000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "qwen/qwen3-coder-plus": { - "id": "qwen/qwen3-coder-plus", - "name": "Qwen3-Coder-Plus", - "attachment": false, + "openai/gpt-4o-2024-05-13": { + "id": "openai/gpt-4o-2024-05-13", + "name": "OpenAI: GPT-4o (2024-05-13)", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-05-13", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.1, "cache_write": 1.25 }, - "limit": { "context": 1000000, "output": 64000 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 5, + "output": 15 + } }, - "qwen/qwen3-max": { - "id": "qwen/qwen3-max", - "name": "Qwen3-Max-Thinking", - "attachment": false, - "reasoning": true, + "openai/gpt-5.3-chat": { + "id": "openai/gpt-5.3-chat", + "name": "OpenAI: GPT-5.3 Chat", + "attachment": true, + "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2026-01-23", - "last_updated": "2026-01-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-04", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.2, "output": 6 }, - "limit": { "context": 256000, "output": 64000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.75, + "output": 14 + } }, - "qwen/qwen3.5-flash": { - "id": "qwen/qwen3.5-flash", - "name": "Qwen3.5 Flash", + "openai/gpt-5.2-pro": { + "id": "openai/gpt-5.2-pro", + "name": "OpenAI: GPT-5.2 Pro", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2026-03-20", - "last_updated": "2026-03-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-12-11", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.4 }, - "limit": { "context": 1020000, "output": 1020000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 21, + "output": 168 + } }, - "xiaomi/mimo-v2-flash-free": { - "id": "xiaomi/mimo-v2-flash-free", - "name": "MiMo-V2-Flash Free", + "openai/gpt-4-1106-preview": { + "id": "openai/gpt-4-1106-preview", + "name": "OpenAI: GPT-4 Turbo (older v1106)", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2023-11-06", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 262000, "output": 64000 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 10, + "output": 30 + } }, - "xiaomi/mimo-v2-pro": { - "id": "xiaomi/mimo-v2-pro", - "name": "MiMo V2 Pro", + "openai/gpt-chat-latest": { + "id": "openai/gpt-chat-latest", + "name": "OpenAI: GPT Chat Latest", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2026-03-20", - "last_updated": "2026-03-20", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "release_date": "2026-05-05", + "last_updated": "2026-05-07", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.5, "output": 4.5 }, - "limit": { "context": 1000000, "output": 256000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 30, + "cache_read": 0.5 + } }, - "xiaomi/mimo-v2-omni": { - "id": "xiaomi/mimo-v2-omni", - "name": "MiMo V2 Omni", - "attachment": true, + "openai/gpt-4o-audio-preview": { + "id": "openai/gpt-4o-audio-preview", + "name": "OpenAI: GPT-4o Audio", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2026-03-20", - "last_updated": "2026-03-20", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2025-08-15", + "last_updated": "2026-03-15", + "modalities": { + "input": ["audio", "text"], + "output": ["audio", "text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 265000, "output": 265000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "xiaomi/mimo-v2-flash": { - "id": "xiaomi/mimo-v2-flash", - "name": "MiMo-V2-Flash", - "attachment": false, + "openai/gpt-5.5": { + "id": "openai/gpt-5.5", + "name": "OpenAI: GPT-5.5", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2026-04-24", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.3, "cache_read": 0.01 }, - "limit": { "context": 262000, "output": 64000 } + "limit": { + "context": 1050000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 30, + "cache_read": 0.5 + } }, - "stepfun/step-3.5-flash-free": { - "id": "stepfun/step-3.5-flash-free", - "name": "Step 3.5 Flash (Free)", - "attachment": false, + "openai/gpt-5-mini": { + "id": "openai/gpt-5-mini", + "name": "OpenAI: GPT-5 Mini", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2026-02-02", - "last_updated": "2026-02-02", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-08-07", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 256000, "output": 64000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.025 + } }, - "stepfun/step-3": { - "id": "stepfun/step-3", - "name": "Step-3", + "openai/gpt-5-nano": { + "id": "openai/gpt-5-nano", + "name": "OpenAI: GPT-5 Nano", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-07-31", - "last_updated": "2025-07-31", - "modalities": { "input": ["image", "text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-08-07", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.21, "output": 0.57 }, - "limit": { "context": 65536, "output": 64000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.05, + "output": 0.4, + "cache_read": 0.005 + } }, - "stepfun/step-3.5-flash": { - "id": "stepfun/step-3.5-flash", - "name": "Step 3.5 Flash", - "attachment": false, - "reasoning": false, + "openai/gpt-5.3-codex": { + "id": "openai/gpt-5.3-codex", + "name": "OpenAI: GPT-5.3-Codex", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2026-02-02", - "last_updated": "2026-02-02", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-25", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 256000, "output": 64000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14 + } }, - "kuaishou/kat-coder-pro-v1-free": { - "id": "kuaishou/kat-coder-pro-v1-free", - "name": "KAT-Coder-Pro-V1 Free", + "openai/gpt-3.5-turbo-16k": { + "id": "openai/gpt-3.5-turbo-16k", + "name": "OpenAI: GPT-3.5 Turbo 16k", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-10-23", - "last_updated": "2025-10-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2023-08-28", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 256000, "output": 64000 } + "limit": { + "context": 16385, + "output": 4096 + }, + "cost": { + "input": 3, + "output": 4 + } }, - "kuaishou/kat-coder-pro-v1": { - "id": "kuaishou/kat-coder-pro-v1", - "name": "KAT-Coder-Pro-V1", - "attachment": false, + "openai/gpt-4-turbo": { + "id": "openai/gpt-4-turbo", + "name": "OpenAI: GPT-4 Turbo", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-10-23", - "last_updated": "2025-10-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2023-09-13", + "last_updated": "2024-04-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.06 }, - "limit": { "context": 256000, "output": 64000 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 10, + "output": 30 + } }, - "moonshotai/kimi-k2-thinking": { - "id": "moonshotai/kimi-k2-thinking", - "name": "Kimi K2 Thinking", - "attachment": false, + "openai/gpt-5.2": { + "id": "openai/gpt-5.2", + "name": "OpenAI: GPT-5.2", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-11-06", - "last_updated": "2025-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-12-11", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.6, "output": 2.5, "cache_read": 0.15 }, - "limit": { "context": 262000, "output": 64000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "moonshotai/kimi-k2.5": { - "id": "moonshotai/kimi-k2.5", - "name": "Kimi K2.5", + "openai/o3-pro": { + "id": "openai/o3-pro", + "name": "OpenAI: o3 Pro", "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": false, - "knowledge": "2025-01-01", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2025-04-16", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.58, "output": 3.02, "cache_read": 0.1 }, - "limit": { "context": 262000, "output": 64000 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 20, + "output": 80 + } }, - "moonshotai/kimi-k2-0905": { - "id": "moonshotai/kimi-k2-0905", - "name": "Kimi K2 0905", - "attachment": false, + "openai/o3-mini-high": { + "id": "openai/o3-mini-high", + "name": "OpenAI: o3 Mini High", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-09-04", - "last_updated": "2025-09-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.6, "output": 2.5, "cache_read": 0.15 }, - "limit": { "context": 262000, "output": 64000 } - }, - "moonshotai/kimi-k2-thinking-turbo": { - "id": "moonshotai/kimi-k2-thinking-turbo", - "name": "Kimi K2 Thinking Turbo", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2025-11-06", - "last_updated": "2025-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.15, "output": 8, "cache_read": 0.15 }, - "limit": { "context": 262000, "output": 64000 } - } - } - }, - "perplexity": { - "id": "perplexity", - "env": ["PERPLEXITY_API_KEY"], - "npm": "@ai-sdk/perplexity", - "name": "Perplexity", - "doc": "https://docs.perplexity.ai", - "models": { - "sonar-deep-research": { - "id": "sonar-deep-research", - "name": "Perplexity Sonar Deep Research", - "attachment": false, - "reasoning": true, - "tool_call": false, "temperature": false, - "knowledge": "2025-01", - "release_date": "2025-02-01", - "last_updated": "2025-09-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-01-31", + "last_updated": "2026-03-15", + "modalities": { + "input": ["pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8, "reasoning": 3 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.55 + } }, - "sonar": { - "id": "sonar", - "name": "Sonar", - "family": "sonar", - "attachment": false, + "openai/gpt-4o-mini": { + "id": "openai/gpt-4o-mini", + "name": "OpenAI: GPT-4o-mini", + "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "knowledge": "2025-09-01", - "release_date": "2024-01-01", - "last_updated": "2025-09-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-07-18", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 1 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.6, + "cache_read": 0.075 + } }, - "sonar-reasoning-pro": { - "id": "sonar-reasoning-pro", - "name": "Sonar Reasoning Pro", - "family": "sonar-reasoning", + "openai/o4-mini-deep-research": { + "id": "openai/o4-mini-deep-research", + "name": "OpenAI: o4 Mini Deep Research", "attachment": true, "reasoning": true, - "tool_call": false, + "tool_call": true, "temperature": true, - "knowledge": "2025-09-01", - "release_date": "2024-01-01", - "last_updated": "2025-09-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2024-06-26", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } }, - "sonar-pro": { - "id": "sonar-pro", - "name": "Sonar Pro", - "family": "sonar-pro", + "openai/gpt-5.4-mini": { + "id": "openai/gpt-5.4-mini", + "name": "OpenAI: GPT-5.4 Mini", "attachment": true, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2025-09-01", - "release_date": "2024-01-01", - "last_updated": "2025-09-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 200000, "output": 8192 } - } - } - }, - "privatemode-ai": { - "id": "privatemode-ai", - "env": ["PRIVATEMODE_API_KEY", "PRIVATEMODE_ENDPOINT"], - "npm": "@ai-sdk/openai-compatible", - "api": "http://localhost:8080/v1", - "name": "Privatemode AI", - "doc": "https://docs.privatemode.ai/api/overview", - "models": { - "gpt-oss-120b": { - "id": "gpt-oss-120b", - "name": "gpt-oss-120b", - "family": "gpt-oss", - "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2025-08", - "release_date": "2025-08-04", - "last_updated": "2025-08-14", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 128000 } - }, - "qwen3-embedding-4b": { - "id": "qwen3-embedding-4b", - "name": "Qwen3-Embedding 4B", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-06-06", - "last_updated": "2025-06-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 32000, "output": 2560 } - }, - "whisper-large-v3": { - "id": "whisper-large-v3", - "name": "Whisper large-v3", - "family": "whisper", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "knowledge": "2023-09", - "release_date": "2023-09-01", - "last_updated": "2023-09-01", - "modalities": { "input": ["audio"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 0, "output": 4096 } + "temperature": false, + "release_date": "2026-03-17", + "last_updated": "2026-04-11", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.75, + "output": 4.5, + "cache_read": 0.075 + } }, - "gemma-3-27b": { - "id": "gemma-3-27b", - "name": "Gemma 3 27B", - "family": "gemma", + "openai/gpt-5.1-chat": { + "id": "openai/gpt-5.1-chat", + "name": "OpenAI: GPT-5.1 Chat", "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-03-12", - "last_updated": "2025-03-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 8192 } + "temperature": false, + "release_date": "2025-11-13", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "qwen3-coder-30b-a3b": { - "id": "qwen3-coder-30b-a3b", - "name": "Qwen3-Coder 30B-A3B", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 32768 } - } - } - }, - "perplexity-agent": { - "id": "perplexity-agent", - "env": ["PERPLEXITY_API_KEY"], - "npm": "@ai-sdk/openai", - "api": "https://api.perplexity.ai/v1", - "name": "Perplexity Agent", - "doc": "https://docs.perplexity.ai/docs/agent-api/models", - "models": { - "openai/gpt-5-mini": { - "id": "openai/gpt-5-mini", - "name": "GPT-5 Mini", - "family": "gpt-mini", + "openai/o4-mini": { + "id": "openai/o4-mini", + "name": "OpenAI: o4 Mini", "attachment": true, "reasoning": true, "tool_call": true, "temperature": false, - "knowledge": "2024-05-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-04-16", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.025 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.275 + } }, - "openai/gpt-5.4": { - "id": "openai/gpt-5.4", - "name": "GPT-5.4", - "family": "gpt", + "openai/gpt-5.4-nano": { + "id": "openai/gpt-5.4-nano", + "name": "OpenAI: GPT-5.4 Nano", "attachment": true, "reasoning": true, "tool_call": true, "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-05", - "last_updated": "2026-03-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.5, "output": 15, "cache_read": 0.25 }, - "limit": { "context": 1050000, "input": 922000, "output": 128000 } - }, - "openai/gpt-5.2": { - "id": "openai/gpt-5.2", - "name": "GPT-5.2", - "family": "gpt", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-03-17", + "last_updated": "2026-04-11", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.2, + "output": 1.25, + "cache_read": 0.02 + } }, - "openai/gpt-5.1": { - "id": "openai/gpt-5.1", - "name": "GPT-5.1", - "family": "gpt", + "openai/gpt-5.2-codex": { + "id": "openai/gpt-5.2-codex", + "name": "OpenAI: GPT-5.2-Codex", "attachment": true, "reasoning": true, "tool_call": true, "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-01-14", + "last_updated": "2026-01-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "anthropic/claude-opus-4-5": { - "id": "anthropic/claude-opus-4-5", - "name": "Claude Opus 4.5", - "family": "claude-opus", + "openai/gpt-4o-mini-2024-07-18": { + "id": "openai/gpt-4o-mini-2024-07-18", + "name": "OpenAI: GPT-4o-mini (2024-07-18)", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-11-24", - "last_updated": "2025-11-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2024-07-18", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "anthropic/claude-opus-4-6": { - "id": "anthropic/claude-opus-4-6", - "name": "Claude Opus 4.6", - "family": "claude-opus", + "openai/gpt-5.1-codex-mini": { + "id": "openai/gpt-5.1-codex-mini", + "name": "OpenAI: GPT-5.1-Codex-Mini", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-05", - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5 }, - "limit": { "context": 200000, "output": 128000 } + "limit": { + "context": 400000, + "output": 100000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.025 + } }, - "anthropic/claude-sonnet-4-6": { - "id": "anthropic/claude-sonnet-4-6", - "name": "Claude Sonnet 4.6", - "family": "claude-sonnet", + "openai/gpt-4o-2024-08-06": { + "id": "openai/gpt-4o-2024-08-06", + "name": "OpenAI: GPT-4o (2024-08-06)", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-08", - "release_date": "2026-02-17", - "last_updated": "2026-02-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2024-08-06", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 10, + "cache_read": 1.25 + } }, - "anthropic/claude-sonnet-4-5": { - "id": "anthropic/claude-sonnet-4-5", - "name": "Claude Sonnet 4.5", - "family": "claude-sonnet", + "openai/gpt-5-image": { + "id": "openai/gpt-5-image", + "name": "OpenAI: GPT-5 Image", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-10-14", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["image", "text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 10, + "output": 10 + } }, - "anthropic/claude-haiku-4-5": { - "id": "anthropic/claude-haiku-4-5", - "name": "Claude Haiku 4.5", - "family": "claude-haiku", + "openai/gpt-5.1": { + "id": "openai/gpt-5.1", + "name": "OpenAI: GPT-5.1", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-02-28", - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-11-13", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.1 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "xai/grok-4-1-fast-non-reasoning": { - "id": "xai/grok-4-1-fast-non-reasoning", - "name": "Grok 4.1 Fast (Non-Reasoning)", - "family": "grok", + "openai/o1": { + "id": "openai/o1", + "name": "OpenAI: o1", "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-11-19", - "last_updated": "2025-11-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "release_date": "2024-12-05", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 30000 } - }, - "nvidia/nemotron-3-super-120b-a12b": { - "id": "nvidia/nemotron-3-super-120b-a12b", - "name": "Nemotron 3 Super 120B", - "family": "nemotron", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2026-02", - "release_date": "2026-03-11", - "last_updated": "2026-03-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.25, "output": 2.5 }, - "limit": { "context": 1000000, "output": 32000 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 15, + "output": 60, + "cache_read": 7.5 + } }, - "google/gemini-3.1-pro-preview": { - "id": "google/gemini-3.1-pro-preview", - "name": "Gemini 3.1 Pro Preview", - "family": "gemini-pro", + "openai/gpt-5.4-pro": { + "id": "openai/gpt-5.4-pro", + "name": "OpenAI: GPT-5.4 Pro", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-02-19", - "last_updated": "2026-02-19", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, + "release_date": "2026-03-06", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { - "input": 2, - "output": 12, - "cache_read": 0.2, - "context_over_200k": { "input": 4, "output": 18, "cache_read": 0.4 } + "limit": { + "context": 1050000, + "output": 128000 }, - "limit": { "context": 1048576, "output": 65536 } + "cost": { + "input": 30, + "output": 180 + } }, - "google/gemini-3-flash-preview": { - "id": "google/gemini-3-flash-preview", - "name": "Gemini 3 Flash Preview", - "family": "gemini-flash", - "attachment": true, - "reasoning": true, + "openai/gpt-3.5-turbo": { + "id": "openai/gpt-3.5-turbo", + "name": "OpenAI: GPT-3.5 Turbo", + "attachment": false, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, + "release_date": "2023-03-01", + "last_updated": "2023-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, + "limit": { + "context": 16385, + "output": 4096 + }, "cost": { "input": 0.5, - "output": 3, - "cache_read": 0.05, - "context_over_200k": { "input": 0.5, "output": 3, "cache_read": 0.05 } - }, - "limit": { "context": 1048576, "output": 65536 } + "output": 1.5 + } }, - "google/gemini-2.5-pro": { - "id": "google/gemini-2.5-pro", - "name": "Gemini 2.5 Pro", - "family": "gemini-pro", + "openai/o3-deep-research": { + "id": "openai/o3-deep-research", + "name": "OpenAI: o3 Deep Research", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-03-20", - "last_updated": "2025-06-05", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "release_date": "2024-06-26", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { - "input": 1.25, - "output": 10, - "cache_read": 0.125, - "context_over_200k": { "input": 2.5, "output": 15, "cache_read": 0.25 } + "limit": { + "context": 200000, + "output": 100000 }, - "limit": { "context": 1048576, "output": 65536 } + "cost": { + "input": 10, + "output": 40, + "cache_read": 2.5 + } }, - "google/gemini-2.5-flash": { - "id": "google/gemini-2.5-flash", - "name": "Gemini 2.5 Flash", - "family": "gemini-flash", + "openai/o3-mini": { + "id": "openai/o3-mini", + "name": "OpenAI: o3 Mini", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-03-20", - "last_updated": "2025-06-05", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "temperature": false, + "release_date": "2024-12-20", + "last_updated": "2026-03-15", + "modalities": { + "input": ["pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 2.5, "cache_read": 0.03 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.55 + } }, - "perplexity/sonar": { - "id": "perplexity/sonar", - "name": "Sonar", - "family": "sonar", + "openai/gpt-4-turbo-preview": { + "id": "openai/gpt-4-turbo-preview", + "name": "OpenAI: GPT-4 Turbo Preview", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-09-01", - "release_date": "2024-01-01", - "last_updated": "2025-09-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-01-25", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2.5, "cache_read": 0.0625 }, - "limit": { "context": 128000, "output": 8192 } - } - } - }, - "gitlab": { - "id": "gitlab", - "env": ["GITLAB_TOKEN"], - "npm": "gitlab-ai-provider", - "name": "GitLab Duo", - "doc": "https://docs.gitlab.com/user/duo_agent_platform/", - "models": { - "duo-chat-gpt-5-1": { - "id": "duo-chat-gpt-5-1", - "name": "Agentic Chat (GPT-5.1)", - "family": "gpt", + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 10, + "output": 30 + } + }, + "openai/o1-pro": { + "id": "openai/o1-pro", + "name": "OpenAI: o1-pro", "attachment": true, "reasoning": true, - "tool_call": true, - "structured_output": true, + "tool_call": false, "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2026-01-22", - "last_updated": "2026-01-22", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-03-19", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 150, + "output": 600 + } }, - "duo-chat-gpt-5-2": { - "id": "duo-chat-gpt-5-2", - "name": "Agentic Chat (GPT-5.2)", - "family": "gpt", + "openai/gpt-5.4-image-2": { + "id": "openai/gpt-5.4-image-2", + "name": "OpenAI: GPT-5.4 Image 2", "attachment": true, "reasoning": true, - "tool_call": true, - "structured_output": true, + "tool_call": false, "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-01-23", - "last_updated": "2026-01-23", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-04-21", + "last_updated": "2026-05-01", + "modalities": { + "input": ["image", "text", "pdf"], + "output": ["image", "text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 272000, + "output": 128000 + }, + "cost": { + "input": 8, + "output": 15, + "cache_read": 2 + } }, - "duo-chat-sonnet-4-6": { - "id": "duo-chat-sonnet-4-6", - "name": "Agentic Chat (Claude Sonnet 4.6)", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, + "openai/gpt-4": { + "id": "openai/gpt-4", + "name": "OpenAI: GPT-4", + "attachment": false, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-08-31", - "release_date": "2026-02-17", - "last_updated": "2026-02-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2023-03-14", + "last_updated": "2024-04-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 1000000, "output": 64000 } + "limit": { + "context": 8191, + "output": 4096 + }, + "cost": { + "input": 30, + "output": 60 + } }, - "duo-chat-opus-4-6": { - "id": "duo-chat-opus-4-6", - "name": "Agentic Chat (Claude Opus 4.6)", - "family": "claude-opus", + "openai/gpt-4-0314": { + "id": "openai/gpt-4-0314", + "name": "OpenAI: GPT-4 (older v0314)", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2023-05-28", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8191, + "output": 4096 + }, + "cost": { + "input": 30, + "output": 60 + } + }, + "openai/gpt-5-codex": { + "id": "openai/gpt-5-codex", + "name": "OpenAI: GPT-5 Codex", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-09-15", + "last_updated": "2025-09-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 1000000, "output": 64000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "duo-chat-haiku-4-5": { - "id": "duo-chat-haiku-4-5", - "name": "Agentic Chat (Claude Haiku 4.5)", - "family": "claude-haiku", + "openai/gpt-5.4": { + "id": "openai/gpt-5.4", + "name": "OpenAI: GPT-5.4", "attachment": true, "reasoning": true, "tool_call": true, + "release_date": "2026-03-06", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1050000, + "output": 128000 + }, + "cost": { + "input": 2.5, + "output": 15 + } + }, + "openai/gpt-audio": { + "id": "openai/gpt-audio", + "name": "OpenAI: GPT Audio", + "attachment": false, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-02-28", - "release_date": "2026-01-08", - "last_updated": "2026-01-08", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2026-01-20", + "last_updated": "2026-03-15", + "modalities": { + "input": ["audio", "text"], + "output": ["audio", "text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "duo-chat-gpt-5-codex": { - "id": "duo-chat-gpt-5-codex", - "name": "Agentic Chat (GPT-5 Codex)", - "family": "gpt-codex", + "openai/gpt-4o-search-preview": { + "id": "openai/gpt-4o-search-preview", + "name": "OpenAI: GPT-4o Search Preview", "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2026-01-22", - "last_updated": "2026-01-22", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "release_date": "2025-03-13", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "duo-chat-gpt-5-mini": { - "id": "duo-chat-gpt-5-mini", - "name": "Agentic Chat (GPT-5 Mini)", - "family": "gpt-mini", + "openai/gpt-4.1-nano": { + "id": "openai/gpt-4.1-nano", + "name": "OpenAI: GPT-4.1 Nano", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-05-30", - "release_date": "2026-01-22", - "last_updated": "2026-01-22", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "release_date": "2025-04-14", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.025 + } }, - "duo-chat-gpt-5-2-codex": { - "id": "duo-chat-gpt-5-2-codex", - "name": "Agentic Chat (GPT-5.2 Codex)", - "family": "gpt-codex", + "openai/o4-mini-high": { + "id": "openai/o4-mini-high", + "name": "OpenAI: o4 Mini High", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-01-22", - "last_updated": "2026-01-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-04-17", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4 + } }, - "duo-chat-gpt-5-4-mini": { - "id": "duo-chat-gpt-5-4-mini", - "name": "Agentic Chat (GPT-5.4 Mini)", - "family": "gpt-mini", + "openai/o3": { + "id": "openai/o3", + "name": "OpenAI: o3", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-17", - "last_updated": "2026-03-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-04-16", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } }, - "duo-chat-gpt-5-3-codex": { - "id": "duo-chat-gpt-5-3-codex", - "name": "Agentic Chat (GPT-5.3 Codex)", - "family": "gpt-codex", - "attachment": true, + "openai/gpt-oss-20b": { + "id": "openai/gpt-oss-20b", + "name": "OpenAI: gpt-oss-20b", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 26215 + }, + "cost": { + "input": 0.03, + "output": 0.14 + } }, - "duo-chat-gpt-5-4-nano": { - "id": "duo-chat-gpt-5-4-nano", - "name": "Agentic Chat (GPT-5.4 Nano)", - "family": "gpt-nano", + "openai/gpt-5-pro": { + "id": "openai/gpt-5-pro", + "name": "OpenAI: GPT-5 Pro", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-17", - "last_updated": "2026-03-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-10-06", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 15, + "output": 120 + } }, - "duo-chat-gpt-5-4": { - "id": "duo-chat-gpt-5-4", - "name": "Agentic Chat (GPT-5.4)", - "family": "gpt", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-05", - "last_updated": "2026-03-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 1050000, "input": 922000, "output": 128000 } - }, - "duo-chat-sonnet-4-5": { - "id": "duo-chat-sonnet-4-5", - "name": "Agentic Chat (Claude Sonnet 4.5)", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, - "tool_call": true, + "openai/gpt-audio-mini": { + "id": "openai/gpt-audio-mini", + "name": "OpenAI: GPT Audio Mini", + "attachment": false, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2026-01-08", - "last_updated": "2026-01-08", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2026-01-20", + "last_updated": "2026-03-15", + "modalities": { + "input": ["audio", "text"], + "output": ["audio", "text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.6, + "output": 2.4 + } }, - "duo-chat-opus-4-5": { - "id": "duo-chat-opus-4-5", - "name": "Agentic Chat (Claude Opus 4.5)", - "family": "claude-opus", + "openai/gpt-4o": { + "id": "openai/gpt-4o", + "name": "OpenAI: GPT-4o", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2026-01-08", - "last_updated": "2026-01-08", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2024-05-13", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 200000, "output": 64000 } - } - } - }, - "vivgrid": { - "id": "vivgrid", - "env": ["VIVGRID_API_KEY"], - "npm": "@ai-sdk/openai", - "api": "https://api.vivgrid.com/v1", - "name": "Vivgrid", - "doc": "https://docs.vivgrid.com/models", - "models": { - "gpt-5.2-codex": { - "id": "gpt-5.2-codex", - "name": "GPT-5.2 Codex", - "family": "gpt-codex", + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 10, + "cache_read": 1.25 + } + }, + "openai/gpt-3.5-turbo-0613": { + "id": "openai/gpt-3.5-turbo-0613", + "name": "OpenAI: GPT-3.5 Turbo (older v0613)", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-01-14", - "last_updated": "2026-01-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "release_date": "2023-06-13", + "last_updated": "2023-06-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 4095, + "output": 4096 + }, + "cost": { + "input": 1, + "output": 2 + } }, - "gemini-3.1-pro-preview": { - "id": "gemini-3.1-pro-preview", - "name": "Gemini 3.1 Pro Preview", - "family": "gemini-pro", + "openai/gpt-5-image-mini": { + "id": "openai/gpt-5-image-mini", + "name": "OpenAI: GPT-5 Image Mini", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-02-19", - "last_updated": "2026-02-19", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, + "release_date": "2025-10-16", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["image", "text"] + }, "open_weights": false, - "cost": { - "input": 2, - "output": 12, - "cache_read": 0.2, - "context_over_200k": { "input": 4, "output": 18, "cache_read": 0.4 } + "limit": { + "context": 400000, + "output": 128000 }, - "limit": { "context": 1048576, "output": 65536 }, - "provider": { "npm": "@ai-sdk/openai-compatible" } + "cost": { + "input": 2.5, + "output": 2 + } }, - "gpt-5-mini": { - "id": "gpt-5-mini", - "name": "GPT-5 Mini", - "family": "gpt-mini", + "openai/gpt-5": { + "id": "openai/gpt-5", + "name": "OpenAI: GPT-5", "attachment": true, "reasoning": true, "tool_call": true, "temperature": false, - "knowledge": "2024-05-30", "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.03 }, - "limit": { "context": 272000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai-compatible" } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "gpt-5.1-codex-max": { - "id": "gpt-5.1-codex-max", - "name": "GPT-5.1 Codex Max", - "family": "gpt-codex", + "openai/gpt-oss-safeguard-20b": { + "id": "openai/gpt-oss-safeguard-20b", + "name": "OpenAI: gpt-oss-safeguard-20b", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "release_date": "2025-10-29", + "last_updated": "2025-10-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.075, + "output": 0.3, + "cache_read": 0.037 + } }, - "gpt-5.4": { - "id": "gpt-5.4", - "name": "GPT-5.4", - "family": "gpt", + "openai/gpt-oss-120b": { + "id": "openai/gpt-oss-120b", + "name": "OpenAI: gpt-oss-120b", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 26215 + }, + "cost": { + "input": 0.039, + "output": 0.19 + } + }, + "openai/gpt-5.5-pro": { + "id": "openai/gpt-5.5-pro", + "name": "OpenAI: GPT-5.5 Pro", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-05", - "last_updated": "2026-03-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2026-04-24", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 15, "cache_read": 0.25 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai-compatible" } + "limit": { + "context": 1050000, + "output": 128000 + }, + "cost": { + "input": 30, + "output": 180 + } }, - "glm-5": { - "id": "glm-5", - "name": "GLM-5", - "family": "glm", + "openai/gpt-3.5-turbo-instruct": { + "id": "openai/gpt-3.5-turbo-instruct", + "name": "OpenAI: GPT-3.5 Turbo Instruct", "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1, "output": 3.2, "cache_read": 0.2 }, - "limit": { "context": 202752, "output": 131000 }, - "provider": { "npm": "@ai-sdk/openai-compatible" } + "release_date": "2023-03-01", + "last_updated": "2023-09-21", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 4095, + "output": 4096 + }, + "cost": { + "input": 1.5, + "output": 2 + } }, - "gemini-3.1-flash-lite-preview": { - "id": "gemini-3.1-flash-lite-preview", - "name": "Gemini 3.1 Flash Lite Preview", - "family": "gemini-flash-lite", + "openai/gpt-4.1": { + "id": "openai/gpt-4.1", + "name": "OpenAI: GPT-4.1", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-03-03", - "last_updated": "2026-03-03", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, + "release_date": "2025-04-14", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 1.5, "cache_read": 0.025, "cache_write": 1 }, - "limit": { "context": 1048576, "output": 65536 }, - "provider": { "npm": "@ai-sdk/openai-compatible" } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } }, - "deepseek-v3.2": { - "id": "deepseek-v3.2", - "name": "DeepSeek-V3.2", - "family": "deepseek", - "attachment": false, - "reasoning": true, + "openai/gpt-4.1-mini": { + "id": "openai/gpt-4.1-mini", + "name": "OpenAI: GPT-4.1 Mini", + "attachment": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.28, "output": 0.42 }, - "limit": { "context": 128000, "output": 128000 }, - "provider": { "npm": "@ai-sdk/openai-compatible" } + "release_date": "2025-04-14", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.4, + "output": 1.6, + "cache_read": 0.1 + } }, - "gpt-5.1-codex": { - "id": "gpt-5.1-codex", - "name": "GPT-5.1 Codex", - "family": "gpt-codex", - "attachment": false, + "openai/gpt-5.1-codex": { + "id": "openai/gpt-5.1-codex", + "name": "OpenAI: GPT-5.1-Codex", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": false, - "knowledge": "2024-09-30", "release_date": "2025-11-13", "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } - } - } - }, - "helicone": { - "id": "helicone", - "env": ["HELICONE_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://ai-gateway.helicone.ai/v1", - "name": "Helicone", - "doc": "https://helicone.ai/models", - "models": { - "qwen3-coder-30b-a3b-instruct": { - "id": "qwen3-coder-30b-a3b-instruct", - "name": "Qwen3 Coder 30B A3B Instruct", - "family": "qwen", - "attachment": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } + }, + "openai/gpt-4o-2024-11-20": { + "id": "openai/gpt-4o-2024-11-20", + "name": "OpenAI: GPT-4o (2024-11-20)", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-07-31", - "last_updated": "2025-07-31", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-11-20", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.09999999999999999, "output": 0.3 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 10, + "cache_read": 1.25 + } }, - "gemini-2.5-flash-lite": { - "id": "gemini-2.5-flash-lite", - "name": "Google Gemini 2.5 Flash Lite", - "family": "gemini-flash-lite", - "attachment": false, - "reasoning": true, + "amazon/nova-lite-v1": { + "id": "amazon/nova-lite-v1", + "name": "Amazon: Nova Lite 1.0", + "attachment": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-07-22", - "last_updated": "2025-07-22", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2024-12-06", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { - "input": 0.09999999999999999, - "output": 0.39999999999999997, - "cache_read": 0.024999999999999998, - "cache_write": 0.09999999999999999 + "limit": { + "context": 300000, + "output": 5120 }, - "limit": { "context": 1048576, "output": 65535 } + "cost": { + "input": 0.06, + "output": 0.24 + } }, - "gpt-5.1-codex-mini": { - "id": "gpt-5.1-codex-mini", - "name": "OpenAI: GPT-5.1 Codex Mini", - "family": "gpt-codex", - "attachment": false, + "amazon/nova-pro-v1": { + "id": "amazon/nova-pro-v1", + "name": "Amazon: Nova Pro 1.0", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": false, - "knowledge": "2025-01", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text", "image"], "output": ["text", "image"] }, + "temperature": true, + "release_date": "2024-12-03", + "last_updated": "2024-12-03", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.024999999999999998 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 300000, + "output": 5120 + }, + "cost": { + "input": 0.8, + "output": 3.2 + } }, - "llama-3.3-70b-versatile": { - "id": "llama-3.3-70b-versatile", - "name": "Meta Llama 3.3 70B Versatile", - "family": "llama", - "attachment": false, + "amazon/nova-premier-v1": { + "id": "amazon/nova-premier-v1", + "name": "Amazon: Nova Premier 1.0", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-11-01", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.59, "output": 0.7899999999999999 }, - "limit": { "context": 131072, "output": 32678 } + "limit": { + "context": 1000000, + "output": 32000 + }, + "cost": { + "input": 2.5, + "output": 12.5 + } }, - "claude-4.5-opus": { - "id": "claude-4.5-opus", - "name": "Anthropic: Claude Opus 4.5", - "family": "claude-opus", - "attachment": false, + "amazon/nova-2-lite-v1": { + "id": "amazon/nova-2-lite-v1", + "name": "Amazon: Nova 2 Lite", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-11", - "release_date": "2025-11-24", - "last_updated": "2025-11-24", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2024-12-01", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 1000000, + "output": 65535 + }, + "cost": { + "input": 0.3, + "output": 2.5 + } }, - "hermes-2-pro-llama-3-8b": { - "id": "hermes-2-pro-llama-3-8b", - "name": "Hermes 2 Pro Llama 3 8B", - "family": "llama", + "amazon/nova-micro-v1": { + "id": "amazon/nova-micro-v1", + "name": "Amazon: Nova Micro 1.0", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-05", - "release_date": "2024-05-27", - "last_updated": "2024-05-27", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.14, "output": 0.14 }, - "limit": { "context": 131072, "output": 131072 } - }, - "o3-mini": { - "id": "o3-mini", - "name": "OpenAI o3 Mini", - "family": "o-mini", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": false, - "knowledge": "2023-10", - "release_date": "2023-10-01", - "last_updated": "2023-10-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-06", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.55 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 128000, + "output": 5120 + }, + "cost": { + "input": 0.035, + "output": 0.14 + } }, - "deepseek-v3.1-terminus": { - "id": "deepseek-v3.1-terminus", - "name": "DeepSeek V3.1 Terminus", - "family": "deepseek", - "attachment": false, + "z-ai/glm-5v-turbo": { + "id": "z-ai/glm-5v-turbo", + "name": "Z.ai: GLM 5V Turbo", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-09", - "release_date": "2025-09-22", - "last_updated": "2025-09-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.27, "output": 1, "cache_read": 0.21600000000000003 }, - "limit": { "context": 128000, "output": 16384 } + "release_date": "2026-04-01", + "last_updated": "2026-04-11", + "modalities": { + "input": ["image", "text", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202752, + "output": 131072 + }, + "cost": { + "input": 1.2, + "output": 4, + "cache_read": 0.24 + } }, - "deepseek-r1-distill-llama-70b": { - "id": "deepseek-r1-distill-llama-70b", - "name": "DeepSeek R1 Distill Llama 70B", - "family": "deepseek-thinking", + "z-ai/glm-4.7": { + "id": "z-ai/glm-4.7", + "name": "Z.ai: GLM 4.7", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.03, "output": 0.13 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2025-12-22", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202752, + "output": 65535 + }, + "cost": { + "input": 0.38, + "output": 1.98, + "cache_read": 0.2 + } }, - "sonar-reasoning": { - "id": "sonar-reasoning", - "name": "Perplexity Sonar Reasoning", - "family": "sonar-reasoning", + "z-ai/glm-5": { + "id": "z-ai/glm-5", + "name": "Z.ai: GLM 5", "attachment": false, "reasoning": true, - "tool_call": false, + "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-01-27", - "last_updated": "2025-01-27", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1, "output": 5 }, - "limit": { "context": 127000, "output": 4096 } - }, - "gpt-5-pro": { - "id": "gpt-5-pro", - "name": "OpenAI: GPT-5 Pro", - "family": "gpt-pro", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "knowledge": "2025-01", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 15, "output": 120 }, - "limit": { "context": 128000, "output": 32768 } + "release_date": "2026-02-12", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202752, + "output": 131072 + }, + "cost": { + "input": 0.72, + "output": 2.3 + } }, - "qwen3-vl-235b-a22b-instruct": { - "id": "qwen3-vl-235b-a22b-instruct", - "name": "Qwen3 VL 235B A22B Instruct", - "family": "qwen", + "z-ai/glm-4-32b": { + "id": "z-ai/glm-4-32b", + "name": "Z.ai: GLM 4 32B ", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-09", - "release_date": "2025-09-23", - "last_updated": "2025-09-23", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 1.5 }, - "limit": { "context": 256000, "output": 16384 } + "release_date": "2025-07-25", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } }, - "kimi-k2-thinking": { - "id": "kimi-k2-thinking", - "name": "Kimi K2 Thinking", - "family": "kimi-thinking", + "z-ai/glm-5.1": { + "id": "z-ai/glm-5.1", + "name": "Z.ai: GLM 5.1", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-11", - "release_date": "2025-11-06", - "last_updated": "2025-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.48, "output": 2 }, - "limit": { "context": 256000, "output": 262144 } + "release_date": "2026-03-27", + "last_updated": "2026-03-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202752, + "output": 131072 + }, + "cost": { + "input": 1.26, + "output": 3.96 + } }, - "kimi-k2-0711": { - "id": "kimi-k2-0711", - "name": "Kimi K2 (07/11)", - "family": "kimi", + "z-ai/glm-4.5": { + "id": "z-ai/glm-4.5", + "name": "Z.ai: GLM 4.5", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.5700000000000001, "output": 2.3 }, - "limit": { "context": 131072, "output": 16384 } - }, - "gpt-5": { - "id": "gpt-5", - "name": "OpenAI GPT-5", - "family": "gpt", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": false, - "knowledge": "2025-01", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.12500000000000003 }, - "limit": { "context": 400000, "output": 128000 } + "release_date": "2025-07-28", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 98304 + }, + "cost": { + "input": 0.6, + "output": 2.2, + "cache_read": 0.175 + } }, - "llama-3.3-70b-instruct": { - "id": "llama-3.3-70b-instruct", - "name": "Meta Llama 3.3 70B Instruct", - "family": "llama", + "z-ai/glm-4.5-air": { + "id": "z-ai/glm-4.5-air", + "name": "Z.ai: GLM 4.5 Air", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.13, "output": 0.39 }, - "limit": { "context": 128000, "output": 16400 } + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 98304 + }, + "cost": { + "input": 0.13, + "output": 0.85, + "cache_read": 0.025 + } }, - "chatgpt-4o-latest": { - "id": "chatgpt-4o-latest", - "name": "OpenAI ChatGPT-4o", - "family": "gpt", + "z-ai/glm-5-turbo": { + "id": "z-ai/glm-5-turbo", + "name": "Z.ai: GLM 5 Turbo", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-08", - "release_date": "2024-08-14", - "last_updated": "2024-08-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 5, "output": 20, "cache_read": 2.5 }, - "limit": { "context": 128000, "output": 16384 } + "release_date": "2026-03-15", + "last_updated": "2026-04-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202752, + "output": 131072 + }, + "cost": { + "input": 1.2, + "output": 4, + "cache_read": 0.24 + } }, - "deepseek-v3": { - "id": "deepseek-v3", - "name": "DeepSeek V3", - "family": "deepseek", - "attachment": false, - "reasoning": false, + "z-ai/glm-4.5v": { + "id": "z-ai/glm-4.5v", + "name": "Z.ai: GLM 4.5V", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2024-12-26", - "last_updated": "2024-12-26", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.56, "output": 1.68, "cache_read": 0.07 }, - "limit": { "context": 128000, "output": 8192 } + "release_date": "2025-08-11", + "last_updated": "2025-08-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 65536, + "output": 16384 + }, + "cost": { + "input": 0.6, + "output": 1.8, + "cache_read": 0.11 + } }, - "gemma2-9b-it": { - "id": "gemma2-9b-it", - "name": "Google Gemma 2", - "family": "gemma", + "z-ai/glm-4.6": { + "id": "z-ai/glm-4.6", + "name": "Z.ai: GLM 4.6", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "knowledge": "2024-06", - "release_date": "2024-06-25", - "last_updated": "2024-06-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.01, "output": 0.03 }, - "limit": { "context": 8192, "output": 8192 } + "release_date": "2025-09-30", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 204800 + }, + "cost": { + "input": 0.39, + "output": 1.9, + "cache_read": 0.175 + } }, - "gemini-3-pro-preview": { - "id": "gemini-3-pro-preview", - "name": "Google Gemini 3 Pro Preview", - "family": "gemini-pro", - "attachment": false, + "z-ai/glm-4.6v": { + "id": "z-ai/glm-4.6v", + "name": "Z.ai: GLM 4.6V", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-11", - "release_date": "2025-11-18", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 12, "cache_read": 0.19999999999999998 }, - "limit": { "context": 1048576, "output": 65536 } + "release_date": "2025-09-30", + "last_updated": "2026-01-10", + "modalities": { + "input": ["image", "text", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 0.9 + } }, - "gpt-4o": { - "id": "gpt-4o", - "name": "OpenAI GPT-4o", - "family": "gpt", + "z-ai/glm-4.7-flash": { + "id": "z-ai/glm-4.7-flash", + "name": "Z.ai: GLM 4.7 Flash", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-05", - "release_date": "2024-05-13", - "last_updated": "2024-05-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.5, "output": 10, "cache_read": 1.25 }, - "limit": { "context": 128000, "output": 16384 } + "release_date": "2026-01-19", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202752, + "output": 40551 + }, + "cost": { + "input": 0.06, + "output": 0.4, + "cache_read": 0.01 + } }, - "grok-4-fast-non-reasoning": { - "id": "grok-4-fast-non-reasoning", - "name": "xAI Grok 4 Fast Non-Reasoning", - "family": "grok", - "attachment": false, - "reasoning": false, - "tool_call": true, + "baidu/ernie-4.5-vl-424b-a47b": { + "id": "baidu/ernie-4.5-vl-424b-a47b", + "name": "Baidu: ERNIE 4.5 VL 424B A47B ", + "attachment": true, + "reasoning": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-09", - "release_date": "2025-09-19", - "last_updated": "2025-09-19", - "modalities": { "input": ["text", "image", "audio"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.19999999999999998, "output": 0.5, "cache_read": 0.049999999999999996 }, - "limit": { "context": 2000000, "output": 2000000 } + "release_date": "2025-06-30", + "last_updated": "2026-01", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 123000, + "output": 16000 + }, + "cost": { + "input": 0.42, + "output": 1.25 + } }, - "grok-4": { - "id": "grok-4", - "name": "xAI Grok 4", - "family": "grok", - "attachment": false, - "reasoning": false, - "tool_call": true, + "baidu/qianfan-ocr-fast:free": { + "id": "baidu/qianfan-ocr-fast:free", + "name": "Baidu: Qianfan-OCR-Fast (free)", + "attachment": true, + "reasoning": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-07", - "release_date": "2024-07-09", - "last_updated": "2024-07-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-20", + "last_updated": "2026-05-01", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.75 }, - "limit": { "context": 256000, "output": 256000 } + "limit": { + "context": 65536, + "output": 28672 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "grok-code-fast-1": { - "id": "grok-code-fast-1", - "name": "xAI Grok Code Fast 1", - "family": "grok", + "baidu/cobuddy:free": { + "id": "baidu/cobuddy:free", + "name": "Baidu: CoBuddy (free)", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2024-08-25", - "last_updated": "2024-08-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2026-05-06", + "last_updated": "2026-05-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.19999999999999998, "output": 1.5, "cache_read": 0.02 }, - "limit": { "context": 256000, "output": 10000 } + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "kimi-k2-0905": { - "id": "kimi-k2-0905", - "name": "Kimi K2 (09/05)", - "family": "kimi", - "attachment": false, - "reasoning": false, + "baidu/ernie-4.5-vl-28b-a3b": { + "id": "baidu/ernie-4.5-vl-28b-a3b", + "name": "Baidu: ERNIE 4.5 VL 28B A3B", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-09", - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.5, "output": 2, "cache_read": 0.39999999999999997 }, - "limit": { "context": 262144, "output": 16384 } + "release_date": "2025-06-30", + "last_updated": "2025-06-30", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 30000, + "output": 8000 + }, + "cost": { + "input": 0.14, + "output": 0.56 + } }, - "gpt-5-mini": { - "id": "gpt-5-mini", - "name": "OpenAI GPT-5 Mini", - "family": "gpt-mini", + "baidu/ernie-4.5-21b-a3b": { + "id": "baidu/ernie-4.5-21b-a3b", + "name": "Baidu: ERNIE 4.5 21B A3B", "attachment": false, "reasoning": false, "tool_call": true, - "temperature": false, - "knowledge": "2025-01", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.024999999999999998 }, - "limit": { "context": 400000, "output": 128000 } + "temperature": true, + "release_date": "2025-06-30", + "last_updated": "2025-06-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 120000, + "output": 8000 + }, + "cost": { + "input": 0.07, + "output": 0.28 + } }, - "mistral-large-2411": { - "id": "mistral-large-2411", - "name": "Mistral-Large", - "family": "mistral-large", + "baidu/ernie-4.5-300b-a47b": { + "id": "baidu/ernie-4.5-300b-a47b", + "name": "Baidu: ERNIE 4.5 300B A47B ", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-07", - "release_date": "2024-07-24", - "last_updated": "2024-07-24", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 6 }, - "limit": { "context": 128000, "output": 32768 } + "release_date": "2025-06-30", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 123000, + "output": 12000 + }, + "cost": { + "input": 0.28, + "output": 1.1 + } }, - "ernie-4.5-21b-a3b-thinking": { - "id": "ernie-4.5-21b-a3b-thinking", - "name": "Baidu Ernie 4.5 21B A3B Thinking", - "family": "ernie", + "baidu/ernie-4.5-21b-a3b-thinking": { + "id": "baidu/ernie-4.5-21b-a3b-thinking", + "name": "Baidu: ERNIE 4.5 21B A3B Thinking", "attachment": false, "reasoning": true, "tool_call": false, "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-03-16", - "last_updated": "2025-03-16", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.07, "output": 0.28 }, - "limit": { "context": 128000, "output": 8000 } + "release_date": "2025-09-19", + "last_updated": "2025-09-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.07, + "output": 0.28 + } }, - "llama-guard-4": { - "id": "llama-guard-4", - "name": "Meta Llama Guard 4 12B", - "family": "llama", + "relace/relace-apply-3": { + "id": "relace/relace-apply-3", + "name": "Relace: Relace Apply 3", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-09-26", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.21, "output": 0.21 }, - "limit": { "context": 131072, "output": 1024 } + "limit": { + "context": 256000, + "output": 128000 + }, + "cost": { + "input": 0.85, + "output": 1.25 + } }, - "claude-sonnet-4-5-20250929": { - "id": "claude-sonnet-4-5-20250929", - "name": "Anthropic: Claude Sonnet 4.5 (20250929)", - "family": "claude-sonnet", + "relace/relace-search": { + "id": "relace/relace-search", + "name": "Relace: Relace Search", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-09", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-12-09", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.30000000000000004, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 256000, + "output": 128000 + }, + "cost": { + "input": 1, + "output": 3 + } }, - "gpt-4o-mini": { - "id": "gpt-4o-mini", - "name": "OpenAI GPT-4o-mini", - "family": "gpt-mini", + "minimax/minimax-m2.7": { + "id": "minimax/minimax-m2.7", + "name": "MiniMax: MiniMax M2.7", + "family": "minimax-m2.7", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2024-07-18", - "last_updated": "2024-07-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.15, "output": 0.6, "cache_read": 0.075 }, - "limit": { "context": 128000, "output": 16384 } + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.06 + } }, - "qwen2.5-coder-7b-fast": { - "id": "qwen2.5-coder-7b-fast", - "name": "Qwen2.5 Coder 7B fast", - "family": "qwen", + "minimax/minimax-m2": { + "id": "minimax/minimax-m2", + "name": "MiniMax: MiniMax M2", "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-10-23", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 196608, + "output": 196608 + }, + "cost": { + "input": 0.255, + "output": 1, + "cache_read": 0.03 + } + }, + "minimax/minimax-01": { + "id": "minimax/minimax-01", + "name": "MiniMax: MiniMax-01", + "attachment": true, "reasoning": false, "tool_call": false, "temperature": true, - "knowledge": "2024-09", - "release_date": "2024-09-15", - "last_updated": "2024-09-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.03, "output": 0.09 }, - "limit": { "context": 32000, "output": 8192 } + "release_date": "2025-01-15", + "last_updated": "2025-01-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000192, + "output": 1000192 + }, + "cost": { + "input": 0.2, + "output": 1.1 + } }, - "qwen3-30b-a3b": { - "id": "qwen3-30b-a3b", - "name": "Qwen3 30B A3B", - "family": "qwen", + "minimax/minimax-m2.1": { + "id": "minimax/minimax-m2.1", + "name": "MiniMax: MiniMax M2.1", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-06-01", - "last_updated": "2025-06-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.08, "output": 0.29 }, - "limit": { "context": 41000, "output": 41000 } + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 196608, + "output": 39322 + }, + "cost": { + "input": 0.27, + "output": 0.95, + "cache_read": 0.03 + } }, - "gpt-4.1": { - "id": "gpt-4.1", - "name": "OpenAI GPT-4.1", - "family": "gpt", + "minimax/minimax-m1": { + "id": "minimax/minimax-m1", + "name": "MiniMax: MiniMax M1", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 8, "cache_read": 0.5 }, - "limit": { "context": 1047576, "output": 32768 } + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 40000 + }, + "cost": { + "input": 0.4, + "output": 2.2 + } }, - "llama-3.1-8b-instruct": { - "id": "llama-3.1-8b-instruct", - "name": "Meta Llama 3.1 8B Instruct", - "family": "llama", + "minimax/minimax-m2-her": { + "id": "minimax/minimax-m2-her", + "name": "MiniMax: MiniMax M2-her", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-07", - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.02, "output": 0.049999999999999996 }, - "limit": { "context": 16384, "output": 16384 } + "release_date": "2026-01-23", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 65536, + "output": 2048 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "gpt-5.1-chat-latest": { - "id": "gpt-5.1-chat-latest", - "name": "OpenAI GPT-5.1 Chat", - "family": "gpt-codex", + "minimax/minimax-m2.5": { + "id": "minimax/minimax-m2.5", + "name": "MiniMax: MiniMax M2.5", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2025-01", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text", "image"], "output": ["text", "image"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.12500000000000003 }, - "limit": { "context": 128000, "output": 16384 } + "temperature": true, + "release_date": "2026-02-12", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 196608, + "output": 196608 + }, + "cost": { + "input": 0.25, + "output": 1.2, + "cache_read": 0.029 + } }, - "sonar-deep-research": { - "id": "sonar-deep-research", - "name": "Perplexity Sonar Deep Research", - "family": "sonar-deep-research", - "attachment": false, + "~openai/gpt-latest": { + "id": "~openai/gpt-latest", + "name": "OpenAI: GPT Latest", + "attachment": true, "reasoning": true, - "tool_call": false, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-01-27", - "last_updated": "2025-01-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": false, + "release_date": "2026-04-27", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8 }, - "limit": { "context": 127000, "output": 4096 } + "limit": { + "context": 1050000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 30, + "cache_read": 0.5 + } }, - "sonar": { - "id": "sonar", - "name": "Perplexity Sonar", - "family": "sonar", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-01-27", - "last_updated": "2025-01-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "~openai/gpt-mini-latest": { + "id": "~openai/gpt-mini-latest", + "name": "OpenAI: GPT Mini Latest", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2026-04-27", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 1 }, - "limit": { "context": 127000, "output": 4096 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.75, + "output": 4.5, + "cache_read": 0.075 + } }, - "gpt-oss-120b": { - "id": "gpt-oss-120b", - "name": "OpenAI GPT-OSS 120b", - "family": "gpt-oss", + "qwen/qwen3-235b-a22b": { + "id": "qwen/qwen3-235b-a22b", + "name": "Qwen: Qwen3 235B A22B", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-06", - "release_date": "2024-06-01", - "last_updated": "2024-06-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.04, "output": 0.16 }, - "limit": { "context": 131072, "output": 131072 } + "release_date": "2024-12-01", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.455, + "output": 1.82, + "cache_read": 0.15 + } }, - "llama-4-scout": { - "id": "llama-4-scout", - "name": "Meta Llama 4 Scout 17B 16E", - "family": "llama", - "attachment": false, - "reasoning": false, + "qwen/qwen3.5-122b-a10b": { + "id": "qwen/qwen3.5-122b-a10b", + "name": "Qwen: Qwen3.5-122B-A10B", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.08, "output": 0.3 }, - "limit": { "context": 131072, "output": 8192 } + "release_date": "2026-02-26", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.26, + "output": 2.08 + } }, - "llama-prompt-guard-2-22m": { - "id": "llama-prompt-guard-2-22m", - "name": "Meta Llama Prompt Guard 2 22M", - "family": "llama", + "qwen/qwen3-coder-plus": { + "id": "qwen/qwen3-coder-plus", + "name": "Qwen: Qwen3 Coder Plus", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-10-01", - "last_updated": "2024-10-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.01, "output": 0.01 }, - "limit": { "context": 512, "output": 2 } + "release_date": "2025-07-01", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.65, + "output": 3.25, + "cache_read": 0.2 + } }, - "qwen3-coder": { - "id": "qwen3-coder", - "name": "Qwen3 Coder 480B A35B Instruct Turbo", - "family": "qwen", - "attachment": false, - "reasoning": false, + "qwen/qwen3.6-27b": { + "id": "qwen/qwen3.6-27b", + "name": "Qwen: Qwen3.6 27B", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.22, "output": 0.95 }, - "limit": { "context": 262144, "output": 16384 } - }, - "o1": { - "id": "o1", - "name": "OpenAI: o1", - "family": "o", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "knowledge": "2025-01", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-27", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 60, "cache_read": 7.5 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 256000, + "output": 65536 + }, + "cost": { + "input": 0.325, + "output": 3.25 + } }, - "codex-mini-latest": { - "id": "codex-mini-latest", - "name": "OpenAI Codex Mini Latest", - "family": "gpt-codex-mini", - "attachment": false, - "reasoning": false, + "qwen/qwen3.5-27b": { + "id": "qwen/qwen3.5-27b", + "name": "Qwen: Qwen3.5-27B", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2025-01", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.5, "output": 6, "cache_read": 0.375 }, - "limit": { "context": 200000, "output": 100000 } + "temperature": true, + "release_date": "2026-02-26", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.195, + "output": 1.56 + } }, - "o3": { - "id": "o3", - "name": "OpenAI o3", - "family": "o", + "qwen/qwen3-235b-a22b-2507": { + "id": "qwen/qwen3-235b-a22b-2507", + "name": "Qwen: Qwen3 235B A22B Instruct 2507", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2024-06", - "release_date": "2024-06-01", - "last_updated": "2024-06-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 8, "cache_read": 0.5 }, - "limit": { "context": 200000, "output": 100000 } + "temperature": true, + "release_date": "2025-04", + "last_updated": "2026-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 52429 + }, + "cost": { + "input": 0.071, + "output": 0.1 + } }, - "grok-4-1-fast-non-reasoning": { - "id": "grok-4-1-fast-non-reasoning", - "name": "xAI Grok 4.1 Fast Non-Reasoning", - "family": "grok", + "qwen/qwen3-8b": { + "id": "qwen/qwen3-8b", + "name": "Qwen: Qwen3 8B", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-11", - "release_date": "2025-11-17", - "last_updated": "2025-11-17", - "modalities": { "input": ["text", "image"], "output": ["text", "image"] }, - "open_weights": false, - "cost": { "input": 0.19999999999999998, "output": 0.5, "cache_read": 0.049999999999999996 }, - "limit": { "context": 2000000, "output": 30000 } + "release_date": "2025-04", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 40960, + "output": 8192 + }, + "cost": { + "input": 0.05, + "output": 0.4, + "cache_read": 0.05 + } }, - "sonar-reasoning-pro": { - "id": "sonar-reasoning-pro", - "name": "Perplexity Sonar Reasoning Pro", - "family": "sonar-reasoning", - "attachment": false, + "qwen/qwen3.5-397b-a17b": { + "id": "qwen/qwen3.5-397b-a17b", + "name": "Qwen: Qwen3.5 397B A17B", + "attachment": true, "reasoning": true, - "tool_call": false, + "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-01-27", - "last_updated": "2025-01-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-15", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8 }, - "limit": { "context": 127000, "output": 4096 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.39, + "output": 2.34 + } }, - "claude-3-haiku-20240307": { - "id": "claude-3-haiku-20240307", - "name": "Anthropic: Claude 3 Haiku", - "family": "claude-haiku", - "attachment": false, + "qwen/qwen-vl-plus": { + "id": "qwen/qwen-vl-plus", + "name": "Qwen: Qwen VL Plus", + "attachment": true, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-03", - "release_date": "2024-03-07", - "last_updated": "2024-03-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2024-01-25", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 1.25, "cache_read": 0.03, "cache_write": 0.3 }, - "limit": { "context": 200000, "output": 4096 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.1365, + "output": 0.4095, + "cache_read": 0.042 + } }, - "llama-3.1-8b-instant": { - "id": "llama-3.1-8b-instant", - "name": "Meta Llama 3.1 8B Instant", - "family": "llama", + "qwen/qwen3-32b": { + "id": "qwen/qwen3-32b", + "name": "Qwen: Qwen3 32B", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2024-07-01", - "last_updated": "2024-07-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.049999999999999996, "output": 0.08 }, - "limit": { "context": 131072, "output": 32678 } + "release_date": "2024-12-01", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 40960, + "output": 40960 + }, + "cost": { + "input": 0.08, + "output": 0.24, + "cache_read": 0.04 + } }, - "deepseek-reasoner": { - "id": "deepseek-reasoner", - "name": "DeepSeek Reasoner", - "family": "deepseek-thinking", - "attachment": false, + "qwen/qwen2.5-vl-72b-instruct": { + "id": "qwen/qwen2.5-vl-72b-instruct", + "name": "Qwen: Qwen2.5 VL 72B Instruct", + "attachment": true, "reasoning": false, "tool_call": false, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.56, "output": 1.68, "cache_read": 0.07 }, - "limit": { "context": 128000, "output": 64000 } + "release_date": "2025-02-01", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.8, + "output": 0.8, + "cache_read": 0.075 + } }, - "claude-3.5-sonnet-v2": { - "id": "claude-3.5-sonnet-v2", - "name": "Anthropic: Claude 3.5 Sonnet v2", - "family": "claude-sonnet", + "qwen/qwen-max": { + "id": "qwen/qwen-max", + "name": "Qwen: Qwen-Max ", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2024-04-03", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.30000000000000004, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 8192 } + "limit": { + "context": 32768, + "output": 8192 + }, + "cost": { + "input": 1.04, + "output": 4.16, + "cache_read": 0.32 + } }, - "llama-4-maverick": { - "id": "llama-4-maverick", - "name": "Meta Llama 4 Maverick 17B 128E", - "family": "llama", + "qwen/qwen-plus": { + "id": "qwen/qwen-plus", + "name": "Qwen: Qwen-Plus", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2024-01-25", + "last_updated": "2025-09-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 1000000, + "output": 32768 + }, + "cost": { + "input": 0.4, + "output": 1.2, + "cache_read": 0.08 + } }, - "grok-3-mini": { - "id": "grok-3-mini", - "name": "xAI Grok 3 Mini", - "family": "grok", - "attachment": false, - "reasoning": false, - "tool_call": true, + "qwen/qwen3.6-35b-a3b": { + "id": "qwen/qwen3.6-35b-a3b", + "name": "Qwen: Qwen3.6 35B A3B", + "attachment": true, + "reasoning": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-06", - "release_date": "2024-06-01", - "last_updated": "2024-06-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-27", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 0.5, "cache_read": 0.075 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.1612, + "output": 0.96525, + "cache_read": 0.1612 + } }, - "gpt-4.1-mini-2025-04-14": { - "id": "gpt-4.1-mini-2025-04-14", - "name": "OpenAI GPT-4.1 Mini", - "family": "gpt-mini", - "attachment": false, + "qwen/qwen3-vl-235b-a22b-thinking": { + "id": "qwen/qwen3-vl-235b-a22b-thinking", + "name": "Qwen: Qwen3 VL 235B A22B Thinking", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-09-24", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.26, + "output": 2.6 + } + }, + "qwen/qwen3-vl-30b-a3b-thinking": { + "id": "qwen/qwen3-vl-30b-a3b-thinking", + "name": "Qwen: Qwen3 VL 30B A3B Thinking", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-10-11", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.13, + "output": 1.56 + } + }, + "qwen/qwen3-vl-8b-instruct": { + "id": "qwen/qwen3-vl-8b-instruct", + "name": "Qwen: Qwen3 VL 8B Instruct", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.39999999999999997, "output": 1.5999999999999999, "cache_read": 0.09999999999999999 }, - "limit": { "context": 1047576, "output": 32768 } + "release_date": "2025-10-15", + "last_updated": "2025-11-25", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.08, + "output": 0.5 + } }, - "claude-opus-4-1": { - "id": "claude-opus-4-1", - "name": "Anthropic: Claude Opus 4.1", - "family": "claude-opus", - "attachment": false, + "qwen/qwen3.5-flash-02-23": { + "id": "qwen/qwen3.5-flash-02-23", + "name": "Qwen: Qwen3.5-Flash", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-08", - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "release_date": "2026-02-26", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4 + } }, - "glm-4.6": { - "id": "glm-4.6", - "name": "Zai GLM-4.6", - "family": "glm", - "attachment": false, + "qwen/qwen3.6-plus": { + "id": "qwen/qwen3.6-plus", + "name": "Qwen: Qwen3.6 Plus", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2024-07-18", - "last_updated": "2024-07-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-26", + "last_updated": "2026-04-11", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.44999999999999996, "output": 1.5 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.325, + "output": 1.95, + "cache_read": 0.0325, + "cache_write": 0.40625 + } }, - "llama-3.1-8b-instruct-turbo": { - "id": "llama-3.1-8b-instruct-turbo", - "name": "Meta Llama 3.1 8B Instruct Turbo", - "family": "llama", + "qwen/qwen3-max": { + "id": "qwen/qwen3-max", + "name": "Qwen: Qwen3 Max", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-09-05", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.02, "output": 0.03 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 1.2, + "output": 6, + "cache_read": 0.24 + } }, - "claude-3.7-sonnet": { - "id": "claude-3.7-sonnet", - "name": "Anthropic: Claude 3.7 Sonnet", - "family": "claude-sonnet", + "qwen/qwen-plus-2025-07-28": { + "id": "qwen/qwen-plus-2025-07-28", + "name": "Qwen: Qwen Plus 0728", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-02", - "release_date": "2025-02-19", - "last_updated": "2025-02-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.30000000000000004, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "release_date": "2025-09-09", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 32768 + }, + "cost": { + "input": 0.26, + "output": 0.78 + } }, - "gemini-2.5-pro": { - "id": "gemini-2.5-pro", - "name": "Google Gemini 2.5 Pro", - "family": "gemini-pro", + "qwen/qwen3-30b-a3b-instruct-2507": { + "id": "qwen/qwen3-30b-a3b-instruct-2507", + "name": "Qwen: Qwen3 30B A3B Instruct 2507", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.3125, "cache_write": 1.25 }, - "limit": { "context": 1048576, "output": 65536 } + "release_date": "2025-07-29", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.09, + "output": 0.3, + "cache_read": 0.04 + } }, - "qwen3-235b-a22b-thinking": { - "id": "qwen3-235b-a22b-thinking", - "name": "Qwen3 235B A22B Thinking", - "family": "qwen", - "attachment": false, - "reasoning": true, - "tool_call": false, + "qwen/qwen3-vl-32b-instruct": { + "id": "qwen/qwen3-vl-32b-instruct", + "name": "Qwen: Qwen3 VL 32B Instruct", + "attachment": true, + "reasoning": false, + "tool_call": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-07-25", - "last_updated": "2025-07-25", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2025-10-21", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 2.9000000000000004 }, - "limit": { "context": 262144, "output": 81920 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.104, + "output": 0.416 + } }, - "claude-opus-4-1-20250805": { - "id": "claude-opus-4-1-20250805", - "name": "Anthropic: Claude Opus 4.1 (20250805)", - "family": "claude-opus", + "qwen/qwen3-235b-a22b-thinking-2507": { + "id": "qwen/qwen3-235b-a22b-thinking-2507", + "name": "Qwen: Qwen3 235B A22B Thinking 2507", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-08", - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "release_date": "2025-07-25", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.11, + "output": 0.6 + } }, - "claude-sonnet-4": { - "id": "claude-sonnet-4", - "name": "Anthropic: Claude Sonnet 4", - "family": "claude-sonnet", + "qwen/qwen3-next-80b-a3b-thinking": { + "id": "qwen/qwen3-next-80b-a3b-thinking", + "name": "Qwen: Qwen3 Next 80B A3B Thinking", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-05", - "release_date": "2025-05-14", - "last_updated": "2025-05-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.30000000000000004, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "release_date": "2025-09-11", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.0975, + "output": 0.78 + } }, - "gemini-2.5-flash": { - "id": "gemini-2.5-flash", - "name": "Google Gemini 2.5 Flash", - "family": "gemini-flash", + "qwen/qwen3-30b-a3b-thinking-2507": { + "id": "qwen/qwen3-30b-a3b-thinking-2507", + "name": "Qwen: Qwen3 30B A3B Thinking 2507", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 2.5, "cache_read": 0.075, "cache_write": 0.3 }, - "limit": { "context": 1048576, "output": 65535 } + "release_date": "2025-07-29", + "last_updated": "2025-07-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 6554 + }, + "cost": { + "input": 0.051, + "output": 0.34 + } }, - "sonar-pro": { - "id": "sonar-pro", - "name": "Perplexity Sonar Pro", - "family": "sonar-pro", + "qwen/qwen-2.5-7b-instruct": { + "id": "qwen/qwen-2.5-7b-instruct", + "name": "Qwen: Qwen2.5 7B Instruct", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-01-27", - "last_updated": "2025-01-27", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 200000, "output": 4096 } + "release_date": "2024-09", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 6554 + }, + "cost": { + "input": 0.04, + "output": 0.1 + } }, - "mistral-nemo": { - "id": "mistral-nemo", - "name": "Mistral Nemo", - "family": "mistral-nemo", - "attachment": false, + "qwen/qwen-vl-max": { + "id": "qwen/qwen-vl-max", + "name": "Qwen: Qwen VL Max", + "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2024-07-18", - "last_updated": "2024-07-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2024-04-08", + "last_updated": "2025-08-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 20, "output": 40 }, - "limit": { "context": 128000, "output": 16400 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.8, + "output": 3.2 + } }, - "qwen3-next-80b-a3b-instruct": { - "id": "qwen3-next-80b-a3b-instruct", - "name": "Qwen3 Next 80B A3B Instruct", - "family": "qwen", + "qwen/qwen3-coder-flash": { + "id": "qwen/qwen3-coder-flash", + "name": "Qwen: Qwen3 Coder Flash", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2025-07-23", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.14, "output": 1.4 }, - "limit": { "context": 262000, "output": 16384 } + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.195, + "output": 0.975, + "cache_read": 0.06 + } }, - "grok-4-1-fast-reasoning": { - "id": "grok-4-1-fast-reasoning", - "name": "xAI Grok 4.1 Fast Reasoning", - "family": "grok", + "qwen/qwen3-30b-a3b": { + "id": "qwen/qwen3-30b-a3b", + "name": "Qwen: Qwen3 30B A3B", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-11", - "release_date": "2025-11-17", - "last_updated": "2025-11-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.19999999999999998, "output": 0.5, "cache_read": 0.049999999999999996 }, - "limit": { "context": 2000000, "output": 2000000 } + "release_date": "2025-04", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 40960, + "output": 40960 + }, + "cost": { + "input": 0.08, + "output": 0.28, + "cache_read": 0.03 + } }, - "gpt-5.1": { - "id": "gpt-5.1", - "name": "OpenAI GPT-5.1", - "family": "gpt", + "qwen/qwen3-next-80b-a3b-instruct": { + "id": "qwen/qwen3-next-80b-a3b-instruct", + "name": "Qwen: Qwen3 Next 80B A3B Instruct", "attachment": false, "reasoning": false, "tool_call": true, - "temperature": false, - "knowledge": "2025-01", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text", "image"], "output": ["text", "image"] }, + "temperature": true, + "release_date": "2025-09-11", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 52429 + }, + "cost": { + "input": 0.09, + "output": 1.1 + } + }, + "qwen/qwen3.5-plus-20260420": { + "id": "qwen/qwen3.5-plus-20260420", + "name": "Qwen: Qwen3.5 Plus 2026-04-20", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-27", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.12500000000000003 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.4, + "output": 2.4 + } }, - "claude-3.5-haiku": { - "id": "claude-3.5-haiku", - "name": "Anthropic: Claude 3.5 Haiku", - "family": "claude-haiku", + "qwen/qwen3-coder-next": { + "id": "qwen/qwen3-coder-next", + "name": "Qwen: Qwen3 Coder Next", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.7999999999999999, "output": 4, "cache_read": 0.08, "cache_write": 1 }, - "limit": { "context": 200000, "output": 8192 } + "release_date": "2026-02-02", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.12, + "output": 0.75, + "cache_read": 0.035 + } }, - "mistral-small": { - "id": "mistral-small", - "name": "Mistral Small", - "family": "mistral-small", + "qwen/qwen-2.5-coder-32b-instruct": { + "id": "qwen/qwen-2.5-coder-32b-instruct", + "name": "Qwen2.5 Coder 32B Instruct", "attachment": false, "reasoning": false, "tool_call": false, "temperature": true, - "knowledge": "2024-02", - "release_date": "2024-02-26", - "last_updated": "2024-02-26", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 75, "output": 200 }, - "limit": { "context": 128000, "output": 128000 } + "release_date": "2024-11-11", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 8192 + }, + "cost": { + "input": 0.2, + "output": 0.2, + "cache_read": 0.015 + } }, - "gpt-4.1-mini": { - "id": "gpt-4.1-mini", - "name": "OpenAI GPT-4.1 Mini", - "family": "gpt-mini", - "attachment": false, + "qwen/qwen3-vl-30b-a3b-instruct": { + "id": "qwen/qwen3-vl-30b-a3b-instruct", + "name": "Qwen: Qwen3 VL 30B A3B Instruct", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.39999999999999997, "output": 1.5999999999999999, "cache_read": 0.09999999999999999 }, - "limit": { "context": 1047576, "output": 32768 } + "release_date": "2025-10-05", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.13, + "output": 0.52 + } }, - "gpt-5-chat-latest": { - "id": "gpt-5-chat-latest", - "name": "OpenAI GPT-5 Chat Latest", - "family": "gpt-codex", + "qwen/qwen3-coder-30b-a3b-instruct": { + "id": "qwen/qwen3-coder-30b-a3b-instruct", + "name": "Qwen: Qwen3 Coder 30B A3B Instruct", "attachment": false, "reasoning": false, "tool_call": true, - "temperature": false, - "knowledge": "2024-09", - "release_date": "2024-09-30", - "last_updated": "2024-09-30", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.12500000000000003 }, - "limit": { "context": 128000, "output": 16384 } + "temperature": true, + "release_date": "2025-07-31", + "last_updated": "2025-07-31", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 160000, + "output": 32768 + }, + "cost": { + "input": 0.07, + "output": 0.27 + } }, - "grok-4-fast-reasoning": { - "id": "grok-4-fast-reasoning", - "name": "xAI: Grok 4 Fast Reasoning", - "family": "grok", + "qwen/qwen3-max-thinking": { + "id": "qwen/qwen3-max-thinking", + "name": "Qwen: Qwen3 Max Thinking", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-09", - "release_date": "2025-09-01", - "last_updated": "2025-09-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-01-23", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.19999999999999998, "output": 0.5, "cache_read": 0.049999999999999996 }, - "limit": { "context": 2000000, "output": 2000000 } + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0.78, + "output": 3.9 + } }, - "gpt-5-nano": { - "id": "gpt-5-nano", - "name": "OpenAI GPT-5 Nano", - "family": "gpt-nano", + "qwen/qwen-turbo": { + "id": "qwen/qwen-turbo", + "name": "Qwen: Qwen-Turbo", "attachment": false, "reasoning": false, "tool_call": true, - "temperature": false, - "knowledge": "2025-01", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "release_date": "2024-11-01", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.049999999999999996, "output": 0.39999999999999997, "cache_read": 0.005 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.0325, + "output": 0.13, + "cache_read": 0.01 + } }, - "grok-3": { - "id": "grok-3", - "name": "xAI Grok 3", - "family": "grok", - "attachment": false, + "qwen/qwen3-vl-235b-a22b-instruct": { + "id": "qwen/qwen3-vl-235b-a22b-instruct", + "name": "Qwen: Qwen3 VL 235B A22B Instruct", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-06", - "release_date": "2024-06-01", - "last_updated": "2024-06-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.75 }, - "limit": { "context": 131072, "output": 131072 } + "release_date": "2025-09-23", + "last_updated": "2026-01-10", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 52429 + }, + "cost": { + "input": 0.2, + "output": 0.88, + "cache_read": 0.11 + } }, - "deepseek-tng-r1t2-chimera": { - "id": "deepseek-tng-r1t2-chimera", - "name": "DeepSeek TNG R1T2 Chimera", - "family": "deepseek-thinking", + "qwen/qwen3-coder": { + "id": "qwen/qwen3-coder", + "name": "Qwen: Qwen3 Coder 480B A35B", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-07-02", - "last_updated": "2025-07-02", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 52429 + }, + "cost": { + "input": 0.22, + "output": 1, + "cache_read": 0.022 + } + }, + "qwen/qwen3.5-9b": { + "id": "qwen/qwen3.5-9b", + "name": "Qwen: Qwen3.5-9B", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-10", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 32768 + }, + "cost": { + "input": 0.05, + "output": 0.15 + } + }, + "qwen/qwen3-vl-8b-thinking": { + "id": "qwen/qwen3-vl-8b-thinking", + "name": "Qwen: Qwen3 VL 8B Thinking", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-10-15", + "last_updated": "2025-11-25", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 130000, "output": 163840 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.117, + "output": 1.365 + } }, - "claude-haiku-4-5-20251001": { - "id": "claude-haiku-4-5-20251001", - "name": "Anthropic: Claude 4.5 Haiku (20251001)", - "family": "claude-haiku", + "qwen/qwen3.6-max-preview": { + "id": "qwen/qwen3.6-max-preview", + "name": "Qwen: Qwen3.6 Max Preview", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-10", - "release_date": "2025-10-01", - "last_updated": "2025-10-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-04-27", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.09999999999999999, "cache_write": 1.25 }, - "limit": { "context": 200000, "output": 8192 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 1.04, + "output": 6.24, + "cache_write": 1.3 + } }, - "claude-4.5-sonnet": { - "id": "claude-4.5-sonnet", - "name": "Anthropic: Claude Sonnet 4.5", - "family": "claude-sonnet", + "qwen/qwen-plus-2025-07-28:thinking": { + "id": "qwen/qwen-plus-2025-07-28:thinking", + "name": "Qwen: Qwen Plus 0728 (thinking)", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-09", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.30000000000000004, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "release_date": "2025-09-09", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 32768 + }, + "cost": { + "input": 0.26, + "output": 0.78 + } }, - "o3-pro": { - "id": "o3-pro", - "name": "OpenAI o3 Pro", - "family": "o-pro", + "qwen/qwen-2.5-72b-instruct": { + "id": "qwen/qwen-2.5-72b-instruct", + "name": "Qwen2.5 72B Instruct", "attachment": false, "reasoning": false, "tool_call": true, - "temperature": false, - "knowledge": "2024-06", - "release_date": "2024-06-01", - "last_updated": "2024-06-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 20, "output": 80 }, - "limit": { "context": 200000, "output": 100000 } + "temperature": true, + "release_date": "2024-09", + "last_updated": "2026-01-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 16384 + }, + "cost": { + "input": 0.12, + "output": 0.39 + } }, - "gpt-oss-20b": { - "id": "gpt-oss-20b", - "name": "OpenAI GPT-OSS 20b", - "family": "gpt-oss", + "qwen/qwen3-14b": { + "id": "qwen/qwen3-14b", + "name": "Qwen: Qwen3 14B", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-06", - "release_date": "2024-06-01", - "last_updated": "2024-06-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.049999999999999996, "output": 0.19999999999999998 }, - "limit": { "context": 131072, "output": 131072 } + "release_date": "2025-04", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 40960, + "output": 40960 + }, + "cost": { + "input": 0.06, + "output": 0.24, + "cache_read": 0.025 + } }, - "qwen3-32b": { - "id": "qwen3-32b", - "name": "Qwen3 32B", - "family": "qwen", - "attachment": false, + "qwen/qwen3.5-35b-a3b": { + "id": "qwen/qwen3.5-35b-a3b", + "name": "Qwen: Qwen3.5-35B-A3B", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04-28", - "last_updated": "2025-04-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-26", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.1625, + "output": 1.3 + } + }, + "qwen/qwen3.5-plus-02-15": { + "id": "qwen/qwen3.5-plus-02-15", + "name": "Qwen: Qwen3.5 Plus 2026-02-15", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-02-15", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.29, "output": 0.59 }, - "limit": { "context": 131072, "output": 40960 } + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.26, + "output": 1.56 + } }, - "gpt-4.1-nano": { - "id": "gpt-4.1-nano", - "name": "OpenAI GPT-4.1 Nano", - "family": "gpt-nano", - "attachment": false, - "reasoning": false, + "qwen/qwen3.6-flash": { + "id": "qwen/qwen3.6-flash", + "name": "Qwen: Qwen3.6 Flash", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-04-27", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.09999999999999999, "output": 0.39999999999999997, "cache_read": 0.024999999999999998 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.25, + "output": 1.5, + "cache_write": 0.3125 + } }, - "gemma-3-12b-it": { - "id": "gemma-3-12b-it", - "name": "Google Gemma 3 12B", - "family": "gemma", + "alfredpros/codellama-7b-instruct-solidity": { + "id": "alfredpros/codellama-7b-instruct-solidity", + "name": "AlfredPros: CodeLLaMa 7B Instruct Solidity", "attachment": false, "reasoning": false, "tool_call": false, "temperature": true, - "knowledge": "2024-12", - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.049999999999999996, "output": 0.09999999999999999 }, - "limit": { "context": 131072, "output": 8192 } + "release_date": "2025-04-14", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 4096, + "output": 4096 + }, + "cost": { + "input": 0.8, + "output": 1.2 + } }, - "claude-4.5-haiku": { - "id": "claude-4.5-haiku", - "name": "Anthropic: Claude 4.5 Haiku", - "family": "claude-haiku", + "kwaipilot/kat-coder-pro-v2": { + "id": "kwaipilot/kat-coder-pro-v2", + "name": "Kwaipilot: KAT-Coder-Pro V2", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-10", - "release_date": "2025-10-01", - "last_updated": "2025-10-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.09999999999999999, "cache_write": 1.25 }, - "limit": { "context": 200000, "output": 8192 } + "release_date": "2026-03-27", + "last_updated": "2026-04-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 80000 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.06 + } }, - "deepseek-v3.2": { - "id": "deepseek-v3.2", - "name": "DeepSeek V3.2", - "family": "deepseek", - "attachment": false, - "reasoning": false, + "google/gemini-2.5-pro-preview-05-06": { + "id": "google/gemini-2.5-pro-preview-05-06", + "name": "Google: Gemini 2.5 Pro Preview 05-06", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-09", - "release_date": "2025-09-22", - "last_updated": "2025-09-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-05-06", + "last_updated": "2026-03-15", + "modalities": { + "input": ["audio", "image", "pdf", "text", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.27, "output": 0.41 }, - "limit": { "context": 163840, "output": 65536 } + "limit": { + "context": 1048576, + "output": 65535 + }, + "cost": { + "input": 1.25, + "output": 10, + "reasoning": 10, + "cache_read": 0.125, + "cache_write": 0.375 + } }, - "llama-prompt-guard-2-86m": { - "id": "llama-prompt-guard-2-86m", - "name": "Meta Llama Prompt Guard 2 86M", - "family": "llama", - "attachment": false, + "google/lyria-3-clip-preview": { + "id": "google/lyria-3-clip-preview", + "name": "Google: Lyria 3 Clip Preview", + "attachment": true, "reasoning": false, "tool_call": false, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-10-01", - "last_updated": "2024-10-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-30", + "last_updated": "2026-04-11", + "modalities": { + "input": ["image", "text"], + "output": ["audio", "text"] + }, "open_weights": false, - "cost": { "input": 0.01, "output": 0.01 }, - "limit": { "context": 512, "output": 2 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gpt-5-codex": { - "id": "gpt-5-codex", - "name": "OpenAI: GPT-5 Codex", - "family": "gpt-codex", - "attachment": false, - "reasoning": false, + "google/gemini-3.1-pro-preview-customtools": { + "id": "google/gemini-3.1-pro-preview-customtools", + "name": "Google: Gemini 3.1 Pro Preview Custom Tools", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2025-01", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "release_date": "2026-02-26", + "last_updated": "2026-03-15", + "modalities": { + "input": ["audio", "image", "pdf", "text", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.12500000000000003 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12, + "reasoning": 12 + } }, - "o4-mini": { - "id": "o4-mini", - "name": "OpenAI o4 Mini", - "family": "o-mini", - "attachment": false, - "reasoning": false, + "google/gemini-2.5-flash-lite-preview-09-2025": { + "id": "google/gemini-2.5-flash-lite-preview-09-2025", + "name": "Google: Gemini 2.5 Flash Lite Preview 09-2025", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2024-06", - "release_date": "2024-06-01", - "last_updated": "2024-06-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "release_date": "2025-09-25", + "last_updated": "2026-03-15", + "modalities": { + "input": ["audio", "image", "pdf", "text", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.275 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "reasoning": 0.4, + "cache_read": 0.01, + "cache_write": 0.083333 + } }, - "gpt-5.1-codex": { - "id": "gpt-5.1-codex", - "name": "OpenAI: GPT-5.1 Codex", - "family": "gpt-codex", - "attachment": false, + "google/gemini-2.0-flash-001": { + "id": "google/gemini-2.0-flash-001", + "name": "Google: Gemini 2.0 Flash", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": false, - "knowledge": "2025-01", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text", "image"], "output": ["text", "image"] }, + "temperature": true, + "release_date": "2024-12-11", + "last_updated": "2026-03-15", + "modalities": { + "input": ["audio", "image", "pdf", "text", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.12500000000000003 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 1048576, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.025, + "cache_write": 0.083333 + } }, - "o1-mini": { - "id": "o1-mini", - "name": "OpenAI: o1-mini", - "family": "o-mini", - "attachment": false, + "google/lyria-3-pro-preview": { + "id": "google/lyria-3-pro-preview", + "name": "Google: Lyria 3 Pro Preview", + "attachment": true, "reasoning": false, "tool_call": false, - "temperature": false, - "knowledge": "2025-01", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "release_date": "2026-03-30", + "last_updated": "2026-04-11", + "modalities": { + "input": ["image", "text"], + "output": ["audio", "text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.55 }, - "limit": { "context": 128000, "output": 65536 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "claude-opus-4": { - "id": "claude-opus-4", - "name": "Anthropic: Claude Opus 4", - "family": "claude-opus", + "google/gemma-3n-e4b-it": { + "id": "google/gemma-3n-e4b-it", + "name": "Google: Gemma 3n 4B", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-05", - "release_date": "2025-05-14", - "last_updated": "2025-05-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } - } - } - }, - "minimax": { - "id": "minimax", - "env": ["MINIMAX_API_KEY"], - "npm": "@ai-sdk/anthropic", - "api": "https://api.minimax.io/anthropic/v1", - "name": "MiniMax (minimax.io)", - "doc": "https://platform.minimax.io/docs/guides/quickstart", - "models": { - "MiniMax-M2.7": { - "id": "MiniMax-M2.7", - "name": "MiniMax-M2.7", - "family": "minimax", - "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-05-20", + "last_updated": "2025-05-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.06, "cache_write": 0.375 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 32768, + "output": 6554 + }, + "cost": { + "input": 0.02, + "output": 0.04 + } }, - "MiniMax-M2.1": { - "id": "MiniMax-M2.1", - "name": "MiniMax-M2.1", - "family": "minimax", - "attachment": false, + "google/gemini-3.1-flash-lite-preview": { + "id": "google/gemini-3.1-flash-lite-preview", + "name": "Google: Gemini 3.1 Flash Lite Preview", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 204800, "output": 131072 } + "release_date": "2026-03-03", + "last_updated": "2026-03-15", + "modalities": { + "input": ["audio", "image", "pdf", "text", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.25, + "output": 1.5, + "reasoning": 1.5 + } }, - "MiniMax-M2.5": { - "id": "MiniMax-M2.5", - "name": "MiniMax-M2.5", - "family": "minimax", - "attachment": false, + "google/gemini-3.1-pro-preview": { + "id": "google/gemini-3.1-pro-preview", + "name": "Google: Gemini 3.1 Pro Preview", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.03, "cache_write": 0.375 }, - "limit": { "context": 204800, "output": 131072 } + "release_date": "2026-02-19", + "last_updated": "2026-03-15", + "modalities": { + "input": ["audio", "image", "pdf", "text", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12, + "reasoning": 12 + } }, - "MiniMax-M2": { - "id": "MiniMax-M2", - "name": "MiniMax-M2", - "family": "minimax", - "attachment": false, + "google/gemini-3-flash-preview": { + "id": "google/gemini-3-flash-preview", + "name": "Google: Gemini 3 Flash Preview", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-10-27", - "last_updated": "2025-10-27", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 196608, "output": 128000 } + "release_date": "2025-12-17", + "last_updated": "2026-03-15", + "modalities": { + "input": ["audio", "image", "pdf", "text", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 3, + "reasoning": 3, + "cache_read": 0.05, + "cache_write": 0.083333 + } }, - "MiniMax-M2.5-highspeed": { - "id": "MiniMax-M2.5-highspeed", - "name": "MiniMax-M2.5-highspeed", - "family": "minimax", - "attachment": false, + "google/gemini-2.5-pro": { + "id": "google/gemini-2.5-pro", + "name": "Google: Gemini 2.5 Pro", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2026-02-13", - "last_updated": "2026-02-13", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.4, "cache_read": 0.06, "cache_write": 0.375 }, - "limit": { "context": 204800, "output": 131072 } + "release_date": "2025-03-20", + "last_updated": "2026-03-15", + "modalities": { + "input": ["audio", "image", "pdf", "text", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10, + "reasoning": 10, + "cache_read": 0.125, + "cache_write": 0.375 + } }, - "MiniMax-M2.7-highspeed": { - "id": "MiniMax-M2.7-highspeed", - "name": "MiniMax-M2.7-highspeed", - "family": "minimax", - "attachment": false, + "google/gemini-3-pro-image-preview": { + "id": "google/gemini-3-pro-image-preview", + "name": "Google: Nano Banana Pro (Gemini 3 Pro Image Preview)", + "attachment": true, "reasoning": true, - "tool_call": true, + "tool_call": false, "temperature": true, - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.4, "cache_read": 0.06, "cache_write": 0.375 }, - "limit": { "context": 204800, "output": 131072 } - } - } - }, - "alibaba-coding-plan-cn": { - "id": "alibaba-coding-plan-cn", - "env": ["ALIBABA_CODING_PLAN_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://coding.dashscope.aliyuncs.com/v1", - "name": "Alibaba Coding Plan (China)", - "doc": "https://help.aliyun.com/zh/model-studio/coding-plan", - "models": { - "qwen3.5-plus": { - "id": "qwen3.5-plus", - "name": "Qwen3.5 Plus", - "family": "qwen", - "attachment": false, + "release_date": "2025-11-20", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["image", "text"] + }, + "open_weights": false, + "limit": { + "context": 65536, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 12, + "reasoning": 12 + } + }, + "google/gemma-4-31b-it": { + "id": "google/gemma-4-31b-it", + "name": "Google: Gemma 4 31B", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-02-16", - "last_updated": "2026-02-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 1000000, "output": 65536 } + "release_date": "2026-04-02", + "last_updated": "2026-04-11", + "modalities": { + "input": ["image", "text", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0.14, + "output": 0.4 + } }, - "qwen3-coder-next": { - "id": "qwen3-coder-next", - "name": "Qwen3 Coder Next", - "family": "qwen", - "attachment": false, + "google/gemini-2.5-flash-image": { + "id": "google/gemini-2.5-flash-image", + "name": "Google: Nano Banana (Gemini 2.5 Flash Image)", + "attachment": true, "reasoning": false, - "tool_call": true, - "structured_output": true, + "tool_call": false, "temperature": true, - "release_date": "2026-02-03", - "last_updated": "2026-02-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 262144, "output": 65536 } + "release_date": "2025-10-08", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["image", "text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.3, + "output": 2.5 + } }, - "kimi-k2.5": { - "id": "kimi-k2.5", - "name": "Kimi K2.5", - "family": "kimi", + "google/gemma-3-12b-it": { + "id": "google/gemma-3-12b-it", + "name": "Google: Gemma 3 12B", "attachment": true, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-03-13", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 262144, "output": 32768 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.04, + "output": 0.13, + "cache_read": 0.015 + } }, - "MiniMax-M2.5": { - "id": "MiniMax-M2.5", - "name": "MiniMax-M2.5", - "family": "minimax", - "attachment": false, + "google/gemini-2.5-flash": { + "id": "google/gemini-2.5-flash", + "name": "Google: Gemini 2.5 Flash", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 196608, "output": 24576 } + "release_date": "2025-07-17", + "last_updated": "2026-03-15", + "modalities": { + "input": ["audio", "image", "pdf", "text", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65535 + }, + "cost": { + "input": 0.3, + "output": 2.5, + "reasoning": 2.5, + "cache_read": 0.03, + "cache_write": 0.083333 + } }, - "glm-5": { - "id": "glm-5", - "name": "GLM-5", - "family": "glm", - "attachment": false, + "google/gemini-3.1-flash-image-preview": { + "id": "google/gemini-3.1-flash-image-preview", + "name": "Google: Nano Banana 2 (Gemini 3.1 Flash Image Preview)", + "attachment": true, "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "tool_call": false, "temperature": true, - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-26", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["image", "text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 202752, "output": 16384 } + "limit": { + "context": 65536, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 3 + } }, - "qwen3-coder-plus": { - "id": "qwen3-coder-plus", - "name": "Qwen3 Coder Plus", - "family": "qwen", - "attachment": false, + "google/gemma-3-4b-it": { + "id": "google/gemma-3-4b-it", + "name": "Google: Gemma 3 4B", + "attachment": true, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-03-13", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 1000000, "output": 65536 } + "limit": { + "context": 131072, + "output": 19200 + }, + "cost": { + "input": 0.04, + "output": 0.08 + } }, - "glm-4.7": { - "id": "glm-4.7", - "name": "GLM-4.7", - "family": "glm", - "attachment": false, + "google/gemini-2.5-pro-preview": { + "id": "google/gemini-2.5-pro-preview", + "name": "Google: Gemini 2.5 Pro Preview 06-05", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 202752, "output": 16384 } + "release_date": "2025-06-05", + "last_updated": "2026-03-15", + "modalities": { + "input": ["audio", "image", "pdf", "text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10, + "reasoning": 10, + "cache_read": 0.125, + "cache_write": 0.375 + } }, - "qwen3-max-2026-01-23": { - "id": "qwen3-max-2026-01-23", - "name": "Qwen3 Max", - "family": "qwen", + "google/gemma-2-27b-it": { + "id": "google/gemma-2-27b-it", + "name": "Google: Gemma 2 27B", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-01-23", - "last_updated": "2026-01-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 262144, "output": 32768 } - } - } - }, - "deepinfra": { - "id": "deepinfra", - "env": ["DEEPINFRA_API_KEY"], - "npm": "@ai-sdk/deepinfra", - "name": "Deep Infra", - "doc": "https://deepinfra.com/models", - "models": { - "openai/gpt-oss-120b": { - "id": "openai/gpt-oss-120b", - "name": "GPT OSS 120B", - "family": "gpt-oss", - "attachment": false, - "reasoning": true, + "release_date": "2024-06-24", + "last_updated": "2024-06-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 2048 + }, + "cost": { + "input": 0.65, + "output": 0.65 + } + }, + "google/gemma-3-27b-it": { + "id": "google/gemma-3-27b-it", + "name": "Google: Gemma 3 27B", + "attachment": true, + "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-03-12", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.05, "output": 0.24 }, - "limit": { "context": 131072, "output": 16384 } + "limit": { + "context": 128000, + "output": 65536 + }, + "cost": { + "input": 0.03, + "output": 0.11, + "cache_read": 0.02 + } }, - "openai/gpt-oss-20b": { - "id": "openai/gpt-oss-20b", - "name": "GPT OSS 20B", - "family": "gpt-oss", - "attachment": false, + "google/gemma-4-26b-a4b-it": { + "id": "google/gemma-4-26b-a4b-it", + "name": "Google: Gemma 4 26B A4B", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-03", + "last_updated": "2026-04-11", + "modalities": { + "input": ["image", "text", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.03, "output": 0.14 }, - "limit": { "context": 131072, "output": 16384 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.12, + "output": 0.4 + } }, - "anthropic/claude-4-opus": { - "id": "anthropic/claude-4-opus", - "name": "Claude Opus 4", - "family": "claude-opus", + "google/gemini-2.5-flash-lite": { + "id": "google/gemini-2.5-flash-lite", + "name": "Google: Gemini 2.5 Flash Lite", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-06-12", - "last_updated": "2025-06-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-06-17", + "last_updated": "2026-03-15", + "modalities": { + "input": ["audio", "image", "pdf", "text", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 16.5, "output": 82.5 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 1048576, + "output": 65535 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "reasoning": 0.4, + "cache_read": 0.01, + "cache_write": 0.083333 + } }, - "anthropic/claude-3-7-sonnet-latest": { - "id": "anthropic/claude-3-7-sonnet-latest", - "name": "Claude Sonnet 3.7 (Latest)", - "family": "claude-sonnet", + "google/gemini-2.0-flash-lite-001": { + "id": "google/gemini-2.0-flash-lite-001", + "name": "Google: Gemini 2.0 Flash Lite", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-10-31", - "release_date": "2025-03-13", - "last_updated": "2025-03-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2024-12-11", + "last_updated": "2026-03-15", + "modalities": { + "input": ["audio", "image", "pdf", "text", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3.3, "output": 16.5, "cache_read": 0.33 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 1048576, + "output": 8192 + }, + "cost": { + "input": 0.075, + "output": 0.3 + } }, - "zai-org/GLM-4.7": { - "id": "zai-org/GLM-4.7", - "name": "GLM-4.7", - "family": "glm", - "attachment": false, + "moonshotai/kimi-k2.5": { + "id": "moonshotai/kimi-k2.5", + "name": "MoonshotAI: Kimi K2.5", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01-27", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.43, "output": 1.75, "cache_read": 0.08 }, - "limit": { "context": 202752, "output": 16384 } + "limit": { + "context": 262144, + "output": 65535 + }, + "cost": { + "input": 0.45, + "output": 2.2 + } }, - "zai-org/GLM-4.6V": { - "id": "zai-org/GLM-4.6V", - "name": "GLM-4.6V", - "family": "glm", - "attachment": true, - "reasoning": true, + "moonshotai/kimi-k2-0905": { + "id": "moonshotai/kimi-k2-0905", + "name": "MoonshotAI: Kimi K2 0905", + "attachment": false, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 0.9 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 131072, + "output": 26215 + }, + "cost": { + "input": 0.4, + "output": 2, + "cache_read": 0.15 + } }, - "zai-org/GLM-4.7-Flash": { - "id": "zai-org/GLM-4.7-Flash", - "name": "GLM-4.7-Flash", - "family": "glm-flash", - "attachment": false, + "moonshotai/kimi-k2.6": { + "id": "moonshotai/kimi-k2.6", + "name": "MoonshotAI: Kimi K2.6", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-01-19", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-20", + "last_updated": "2026-05-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.06, "output": 0.4 }, - "limit": { "context": 202752, "output": 16384 } + "limit": { + "context": 262144, + "output": 65535 + }, + "cost": { + "input": 0.75, + "output": 3.5, + "cache_read": 0.375 + } }, - "zai-org/GLM-4.5": { - "id": "zai-org/GLM-4.5", - "name": "GLM-4.5", - "family": "glm", + "moonshotai/kimi-k2": { + "id": "moonshotai/kimi-k2", + "name": "MoonshotAI: Kimi K2 0711", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-07-11", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 2.2 }, - "limit": { "context": 131072, "output": 98304 }, - "status": "deprecated" + "limit": { + "context": 131000, + "output": 26215 + }, + "cost": { + "input": 0.55, + "output": 2.2 + } }, - "zai-org/GLM-5": { - "id": "zai-org/GLM-5", - "name": "GLM-5", - "family": "glm", + "moonshotai/kimi-k2-thinking": { + "id": "moonshotai/kimi-k2-thinking", + "name": "MoonshotAI: Kimi K2 Thinking", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2025-12", - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-11-06", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.8, "output": 2.56, "cache_read": 0.16 }, - "limit": { "context": 202752, "output": 16384 } + "limit": { + "context": 131072, + "output": 65535 + }, + "cost": { + "input": 0.47, + "output": 2, + "cache_read": 0.2 + } }, - "zai-org/GLM-4.6": { - "id": "zai-org/GLM-4.6", - "name": "GLM-4.6", - "family": "glm", + "aion-labs/aion-1.0": { + "id": "aion-labs/aion-1.0", + "name": "AionLabs: Aion-1.0", "attachment": false, "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "tool_call": false, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.43, "output": 1.74, "cache_read": 0.08 }, - "limit": { "context": 204800, "output": 131072 } - }, - "meta-llama/Llama-4-Scout-17B-16E-Instruct": { - "id": "meta-llama/Llama-4-Scout-17B-16E-Instruct", - "name": "Llama 4 Scout 17B", - "family": "llama", - "attachment": false, - "reasoning": false, - "tool_call": true, - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.08, "output": 0.3 }, - "limit": { "context": 10000000, "output": 16384 } + "release_date": "2025-02-05", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 4, + "output": 8 + } }, - "meta-llama/Llama-3.1-8B-Instruct": { - "id": "meta-llama/Llama-3.1-8B-Instruct", - "name": "Llama 3.1 8B", - "family": "llama", + "aion-labs/aion-rp-llama-3.1-8b": { + "id": "aion-labs/aion-rp-llama-3.1-8b", + "name": "AionLabs: Aion-RP 1.0 (8B)", "attachment": false, "reasoning": false, - "tool_call": true, - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.02, "output": 0.05 }, - "limit": { "context": 131072, "output": 16384 } + "tool_call": false, + "temperature": true, + "release_date": "2025-02-05", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.8, + "output": 1.6 + } }, - "meta-llama/Llama-3.1-8B-Instruct-Turbo": { - "id": "meta-llama/Llama-3.1-8B-Instruct-Turbo", - "name": "Llama 3.1 8B Turbo", - "family": "llama", + "aion-labs/aion-2.0": { + "id": "aion-labs/aion-2.0", + "name": "AionLabs: Aion-2.0", "attachment": false, - "reasoning": false, + "reasoning": true, + "tool_call": false, + "temperature": true, + "release_date": "2026-02-24", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.8, + "output": 1.6 + } + }, + "aion-labs/aion-1.0-mini": { + "id": "aion-labs/aion-1.0-mini", + "name": "AionLabs: Aion-1.0-Mini", + "attachment": false, + "reasoning": true, + "tool_call": false, + "temperature": true, + "release_date": "2025-02-05", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.7, + "output": 1.4 + } + }, + "~moonshotai/kimi-latest": { + "id": "~moonshotai/kimi-latest", + "name": "MoonshotAI: Kimi Latest", + "attachment": true, + "reasoning": true, "tool_call": true, - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.02, "output": 0.03 }, - "limit": { "context": 131072, "output": 16384 } + "temperature": true, + "release_date": "2026-04-27", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262142, + "output": 262142 + }, + "cost": { + "input": 0.74, + "output": 3.49, + "cache_read": 0.14 + } }, - "meta-llama/Llama-3.1-70B-Instruct-Turbo": { - "id": "meta-llama/Llama-3.1-70B-Instruct-Turbo", - "name": "Llama 3.1 70B Turbo", - "family": "llama", + "thedrummer/unslopnemo-12b": { + "id": "thedrummer/unslopnemo-12b", + "name": "TheDrummer: UnslopNemo 12B", "attachment": false, "reasoning": false, "tool_call": true, - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "release_date": "2024-11-09", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.4, "output": 0.4 }, - "limit": { "context": 131072, "output": 16384 } + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.4, + "output": 0.4 + } }, - "meta-llama/Llama-3.1-70B-Instruct": { - "id": "meta-llama/Llama-3.1-70B-Instruct", - "name": "Llama 3.1 70B", - "family": "llama", + "thedrummer/cydonia-24b-v4.1": { + "id": "thedrummer/cydonia-24b-v4.1", + "name": "TheDrummer: Cydonia 24B V4.1", "attachment": false, "reasoning": false, - "tool_call": true, - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "temperature": true, + "release_date": "2025-09-27", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.4, "output": 0.4 }, - "limit": { "context": 131072, "output": 16384 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 0.5 + } }, - "meta-llama/Llama-3.3-70B-Instruct-Turbo": { - "id": "meta-llama/Llama-3.3-70B-Instruct-Turbo", - "name": "Llama 3.3 70B Turbo", - "family": "llama", + "thedrummer/skyfall-36b-v2": { + "id": "thedrummer/skyfall-36b-v2", + "name": "TheDrummer: Skyfall 36B V2", "attachment": false, "reasoning": false, - "tool_call": true, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "temperature": true, + "release_date": "2025-03-11", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.32 }, - "limit": { "context": 131072, "output": 16384 } + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.55, + "output": 0.8 + } }, - "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8": { - "id": "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8", - "name": "Llama 4 Maverick 17B FP8", - "family": "llama", + "thedrummer/rocinante-12b": { + "id": "thedrummer/rocinante-12b", + "name": "TheDrummer: Rocinante 12B", "attachment": false, "reasoning": false, "tool_call": true, - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "release_date": "2024-09-30", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 1000000, "output": 16384 } + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.17, + "output": 0.43 + } }, - "MiniMaxAI/MiniMax-M2.1": { - "id": "MiniMaxAI/MiniMax-M2.1", - "name": "MiniMax M2.1", - "attachment": false, + "anthropic/claude-opus-4.1": { + "id": "anthropic/claude-opus-4.1", + "name": "Anthropic: Claude Opus 4.1", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.28, "output": 1.2 }, - "limit": { "context": 196608, "output": 196608 } + "release_date": "2025-08-05", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "MiniMaxAI/MiniMax-M2.5": { - "id": "MiniMaxAI/MiniMax-M2.5", - "name": "MiniMax M2.5", - "family": "minimax", - "attachment": false, + "anthropic/claude-3.7-sonnet:thinking": { + "id": "anthropic/claude-3.7-sonnet:thinking", + "name": "Anthropic: Claude 3.7 Sonnet (thinking)", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2025-06", - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.27, "output": 0.95, "cache_read": 0.03, "cache_write": 0.375 }, - "limit": { "context": 204800, "output": 131072 } + "release_date": "2025-02-19", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "MiniMaxAI/MiniMax-M2": { - "id": "MiniMaxAI/MiniMax-M2", - "name": "MiniMax M2", - "family": "minimax", - "attachment": false, + "anthropic/claude-opus-4.6-fast": { + "id": "anthropic/claude-opus-4.6-fast", + "name": "Anthropic: Claude Opus 4.6 (Fast)", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.254, "output": 1.02 }, - "limit": { "context": 262144, "output": 32768 } + "knowledge": "2025-05-31", + "release_date": "2026-04-07", + "last_updated": "2026-04-11", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 30, + "output": 150, + "cache_read": 3, + "cache_write": 37.5 + } }, - "deepseek-ai/DeepSeek-R1-0528": { - "id": "deepseek-ai/DeepSeek-R1-0528", - "name": "DeepSeek-R1-0528", - "attachment": false, + "anthropic/claude-3.7-sonnet": { + "id": "anthropic/claude-3.7-sonnet", + "name": "Anthropic: Claude 3.7 Sonnet", + "attachment": true, "reasoning": true, - "tool_call": false, - "interleaved": { "field": "reasoning_content" }, + "tool_call": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-05-28", - "last_updated": "2025-05-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-02-19", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 2.15, "cache_read": 0.35 }, - "limit": { "context": 163840, "output": 64000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "deepseek-ai/DeepSeek-V3.2": { - "id": "deepseek-ai/DeepSeek-V3.2", - "name": "DeepSeek-V3.2", - "attachment": false, + "anthropic/claude-opus-4.6": { + "id": "anthropic/claude-opus-4.6", + "name": "Anthropic: Claude Opus 4.6", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-12-02", - "last_updated": "2025-12-02", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } + }, + "anthropic/claude-opus-4.7": { + "id": "anthropic/claude-opus-4.7", + "name": "Anthropic: Claude Opus 4.7", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2026-04-16", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.26, "output": 0.38, "cache_read": 0.13 }, - "limit": { "context": 163840, "output": 64000 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo": { - "id": "Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo", - "name": "Qwen3 Coder 480B A35B Instruct Turbo", - "family": "qwen", - "attachment": false, - "reasoning": false, + "anthropic/claude-sonnet-4": { + "id": "anthropic/claude-sonnet-4", + "name": "Anthropic: Claude Sonnet 4", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 262144, "output": 66536 } + "release_date": "2025-05-22", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "Qwen/Qwen3-Coder-480B-A35B-Instruct": { - "id": "Qwen/Qwen3-Coder-480B-A35B-Instruct", - "name": "Qwen3 Coder 480B A35B Instruct", - "family": "qwen", - "attachment": false, + "anthropic/claude-sonnet-4.5": { + "id": "anthropic/claude-sonnet-4.5", + "name": "Anthropic: Claude Sonnet 4.5", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-09-29", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } + }, + "anthropic/claude-opus-4.5": { + "id": "anthropic/claude-opus-4.5", + "name": "Anthropic: Claude Opus 4.5", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-11-24", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } + }, + "anthropic/claude-3-haiku": { + "id": "anthropic/claude-3-haiku", + "name": "Anthropic: Claude 3 Haiku", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.4, "output": 1.6 }, - "limit": { "context": 262144, "output": 66536 } + "release_date": "2024-03-07", + "last_updated": "2024-03-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 4096 + }, + "cost": { + "input": 0.25, + "output": 1.25, + "cache_read": 0.03, + "cache_write": 0.3 + } }, - "moonshotai/Kimi-K2-Instruct": { - "id": "moonshotai/Kimi-K2-Instruct", - "name": "Kimi K2", - "family": "kimi", - "attachment": false, + "anthropic/claude-opus-4": { + "id": "anthropic/claude-opus-4", + "name": "Anthropic: Claude Opus 4", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-05-22", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "pdf", "text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } + }, + "anthropic/claude-3.5-haiku": { + "id": "anthropic/claude-3.5-haiku", + "name": "Anthropic: Claude 3.5 Haiku", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-07-11", - "last_updated": "2025-07-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.5, "output": 2 }, - "limit": { "context": 131072, "output": 32768 } + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 0.8, + "output": 4, + "cache_read": 0.08, + "cache_write": 1 + } }, - "moonshotai/Kimi-K2.5": { - "id": "moonshotai/Kimi-K2.5", - "name": "Kimi K2.5", - "family": "kimi", + "anthropic/claude-haiku-4.5": { + "id": "anthropic/claude-haiku-4.5", + "name": "Anthropic: Claude Haiku 4.5", "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.5, "output": 2.8 }, - "limit": { "context": 262144, "output": 32768 } + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } }, - "moonshotai/Kimi-K2-Instruct-0905": { - "id": "moonshotai/Kimi-K2-Instruct-0905", - "name": "Kimi K2 0905", - "family": "kimi", + "anthropic/claude-sonnet-4.6": { + "id": "anthropic/claude-sonnet-4.6", + "name": "Anthropic: Claude Sonnet 4.6", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 3, + "output": 15 + } + }, + "switchpoint/router": { + "id": "switchpoint/router", + "name": "Switchpoint Router", "attachment": false, + "reasoning": true, + "tool_call": false, + "temperature": true, + "release_date": "2025-07-12", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.85, + "output": 3.4 + } + }, + "bytedance/ui-tars-1.5-7b": { + "id": "bytedance/ui-tars-1.5-7b", + "name": "ByteDance: UI-TARS 7B ", + "attachment": true, "reasoning": false, + "tool_call": false, + "temperature": true, + "release_date": "2025-07-23", + "last_updated": "2026-03-15", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 2048 + }, + "cost": { + "input": 0.1, + "output": 0.2 + } + }, + "tngtech/deepseek-r1t2-chimera": { + "id": "tngtech/deepseek-r1t2-chimera", + "name": "TNG: DeepSeek R1T2 Chimera", + "attachment": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-07-08", + "last_updated": "2025-07-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.4, "output": 2, "cache_read": 0.15 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 163840, + "output": 163840 + }, + "cost": { + "input": 0.25, + "output": 0.85, + "cache_read": 0.125 + } }, - "moonshotai/Kimi-K2-Thinking": { - "id": "moonshotai/Kimi-K2-Thinking", - "name": "Kimi K2 Thinking", - "family": "kimi-thinking", + "xiaomi/mimo-v2.5-pro": { + "id": "xiaomi/mimo-v2.5-pro", + "name": "Xiaomi: MiMo V2.5 Pro", + "family": "mimo", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-11-06", - "last_updated": "2025-11-07", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.47, "output": 2 }, - "limit": { "context": 131072, "output": 32768 } - } - } - }, - "xiaomi": { - "id": "xiaomi", - "env": ["XIAOMI_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.xiaomimimo.com/v1", - "name": "Xiaomi", - "doc": "https://platform.xiaomimimo.com/#/docs", - "models": { - "mimo-v2-pro": { - "id": "mimo-v2-pro", - "name": "MiMo-V2-Pro", + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 1, + "output": 3, + "cache_read": 0.2, + "context_over_200k": { + "input": 2, + "output": 6, + "cache_read": 0.4 + }, + "tiers": [ + { + "input": 2, + "output": 6, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 256000 + } + } + ] + } + }, + "xiaomi/mimo-v2-omni": { + "id": "xiaomi/mimo-v2-omni", + "name": "Xiaomi: MiMo-V2-Omni", "family": "mimo", "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, "knowledge": "2024-12", "release_date": "2026-03-18", "last_updated": "2026-03-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1, "output": 3, "cache_read": 0.2 }, - "limit": { "context": 1000000, "output": 128000 } + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.4, + "output": 2, + "cache_read": 0.08 + } }, - "mimo-v2-omni": { - "id": "mimo-v2-omni", - "name": "MiMo-V2-Omni", + "xiaomi/mimo-v2.5": { + "id": "xiaomi/mimo-v2.5", + "name": "Xiaomi: MiMo-V2.5", "family": "mimo", "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 0.4, + "output": 2, + "cache_read": 0.08, + "context_over_200k": { + "input": 0.8, + "output": 4, + "cache_read": 0.16 + }, + "tiers": [ + { + "input": 0.8, + "output": 4, + "cache_read": 0.16, + "tier": { + "type": "context", + "size": 256000 + } + } + ] + } + }, + "xiaomi/mimo-v2-pro": { + "id": "xiaomi/mimo-v2-pro", + "name": "Xiaomi: MiMo-V2-Pro", + "family": "mimo", + "attachment": false, + "reasoning": true, + "tool_call": true, "temperature": true, "knowledge": "2024-12", "release_date": "2026-03-18", "last_updated": "2026-03-18", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.4, "output": 2, "cache_read": 0.08 }, - "limit": { "context": 256000, "output": 128000 } + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 1, + "output": 3, + "cache_read": 0.2, + "context_over_200k": { + "input": 2, + "output": 6, + "cache_read": 0.4 + }, + "tiers": [ + { + "input": 2, + "output": 6, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 256000 + } + } + ] + } }, - "mimo-v2-flash": { - "id": "mimo-v2-flash", - "name": "MiMo-V2-Flash", + "xiaomi/mimo-v2-flash": { + "id": "xiaomi/mimo-v2-flash", + "name": "Xiaomi: MiMo-V2-Flash", "family": "mimo", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, "knowledge": "2024-12-01", "release_date": "2025-12-16", "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.3, "cache_read": 0.01 }, - "limit": { "context": 256000, "output": 64000 } - } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.09, + "output": 0.29, + "cache_read": 0.045 + } + } } }, - "amazon-bedrock": { - "id": "amazon-bedrock", - "env": ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_REGION", "AWS_BEARER_TOKEN_BEDROCK"], - "npm": "@ai-sdk/amazon-bedrock", - "name": "Amazon Bedrock", - "doc": "https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html", + "sap-ai-core": { + "id": "sap-ai-core", + "env": ["AICORE_SERVICE_KEY"], + "npm": "@jerome-benoit/sap-ai-provider-v2", + "name": "SAP AI Core", + "doc": "https://help.sap.com/docs/sap-ai-core", "models": { - "google.gemma-3-27b-it": { - "id": "google.gemma-3-27b-it", - "name": "Google Gemma 3 27B Instruct", - "family": "gemma", + "anthropic--claude-4.6-opus": { + "id": "anthropic--claude-4.6-opus", + "name": "anthropic--claude-4.6-opus", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2026-02-05", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } + }, + "anthropic--claude-3-haiku": { + "id": "anthropic--claude-3-haiku", + "name": "anthropic--claude-3-haiku", + "family": "claude-haiku", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-07-27", - "last_updated": "2025-07-27", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.12, "output": 0.2 }, - "limit": { "context": 202752, "output": 8192 } + "knowledge": "2023-08-31", + "release_date": "2024-03-13", + "last_updated": "2024-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 4096 + }, + "cost": { + "input": 0.25, + "output": 1.25, + "cache_read": 0.03, + "cache_write": 0.3 + } }, - "qwen.qwen3-coder-480b-a35b-v1:0": { - "id": "qwen.qwen3-coder-480b-a35b-v1:0", - "name": "Qwen3 Coder 480B A35B Instruct", - "family": "qwen", - "attachment": false, + "anthropic--claude-3-opus": { + "id": "anthropic--claude-3-opus", + "name": "anthropic--claude-3-opus", + "family": "claude-opus", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-09-18", - "last_updated": "2025-09-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.22, "output": 1.8 }, - "limit": { "context": 131072, "output": 65536 } + "knowledge": "2023-08-31", + "release_date": "2024-02-29", + "last_updated": "2024-02-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 4096 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "moonshotai.kimi-k2.5": { - "id": "moonshotai.kimi-k2.5", - "name": "Kimi K2.5", - "family": "kimi", - "attachment": false, + "gpt-5-mini": { + "id": "gpt-5-mini", + "name": "gpt-5-mini", + "family": "gpt-mini", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": true, - "temperature": true, - "release_date": "2026-02-06", - "last_updated": "2026-02-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 3 }, - "limit": { "context": 256000, "output": 256000 } + "structured_output": true, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.025 + } }, - "meta.llama3-1-405b-instruct-v1:0": { - "id": "meta.llama3-1-405b-instruct-v1:0", - "name": "Llama 3.1 405B Instruct", - "family": "llama", - "attachment": false, - "reasoning": false, + "gpt-5-nano": { + "id": "gpt-5-nano", + "name": "gpt-5-nano", + "family": "gpt-nano", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2.4, "output": 2.4 }, - "limit": { "context": 128000, "output": 4096 } + "structured_output": true, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.05, + "output": 0.4, + "cache_read": 0.005 + } }, - "deepseek.v3.2": { - "id": "deepseek.v3.2", - "name": "DeepSeek-V3.2", - "family": "deepseek", - "attachment": false, + "gemini-2.5-pro": { + "id": "gemini-2.5-pro", + "name": "gemini-2.5-pro", + "family": "gemini-pro", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2026-02-06", - "last_updated": "2026-02-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.62, "output": 1.85 }, - "limit": { "context": 163840, "output": 81920 } + "knowledge": "2025-01", + "release_date": "2025-03-25", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "global.anthropic.claude-sonnet-4-6": { - "id": "global.anthropic.claude-sonnet-4-6", - "name": "Claude Sonnet 4.6 (Global)", + "anthropic--claude-3.7-sonnet": { + "id": "anthropic--claude-3.7-sonnet", + "name": "anthropic--claude-3.7-sonnet", "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-08", - "release_date": "2026-02-17", - "last_updated": "2026-03-18", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2024-10-31", + "release_date": "2025-02-24", + "last_updated": "2025-02-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 1000000, "output": 64000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "nvidia.nemotron-super-3-120b": { - "id": "nvidia.nemotron-super-3-120b", - "name": "NVIDIA Nemotron 3 Super 120B A12B", - "family": "nemotron", - "attachment": false, - "reasoning": true, - "tool_call": true, + "sonar-pro": { + "id": "sonar-pro", + "name": "sonar-pro", + "family": "sonar-pro", + "attachment": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "release_date": "2026-03-11", - "last_updated": "2026-03-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.65 }, - "limit": { "context": 262144, "output": 131072 } + "knowledge": "2025-09-01", + "release_date": "2024-01-01", + "last_updated": "2025-09-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15 + } }, - "minimax.minimax-m2.1": { - "id": "minimax.minimax-m2.1", - "name": "MiniMax M2.1", - "family": "minimax", - "attachment": false, + "anthropic--claude-4.5-sonnet": { + "id": "anthropic--claude-4.5-sonnet", + "name": "anthropic--claude-4.5-sonnet", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": false, "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 204800, "output": 131072 } + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "us.anthropic.claude-sonnet-4-20250514-v1:0": { - "id": "us.anthropic.claude-sonnet-4-20250514-v1:0", - "name": "Claude Sonnet 4 (US)", + "anthropic--claude-4.6-sonnet": { + "id": "anthropic--claude-4.6-sonnet", + "name": "anthropic--claude-4.6-sonnet", "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2025-08", + "release_date": "2026-02-17", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "meta.llama3-3-70b-instruct-v1:0": { - "id": "meta.llama3-3-70b-instruct-v1:0", - "name": "Llama 3.3 70B Instruct", - "family": "llama", + "sonar-deep-research": { + "id": "sonar-deep-research", + "name": "sonar-deep-research", + "family": "sonar-deep-research", "attachment": false, - "reasoning": false, + "reasoning": true, + "tool_call": false, + "temperature": false, + "knowledge": "2025-01", + "release_date": "2025-02-01", + "last_updated": "2025-09-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 8, + "reasoning": 3 + } + }, + "gemini-2.5-flash": { + "id": "gemini-2.5-flash", + "name": "gemini-2.5-flash", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.72, "output": 0.72 }, - "limit": { "context": 128000, "output": 4096 } + "knowledge": "2025-01", + "release_date": "2025-03-25", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.03, + "input_audio": 1 + } }, - "google.gemma-3-12b-it": { - "id": "google.gemma-3-12b-it", - "name": "Google Gemma 3 12B", - "family": "gemma", + "anthropic--claude-4.5-opus": { + "id": "anthropic--claude-4.5-opus", + "name": "anthropic--claude-4.5-opus", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2025-11-24", + "last_updated": "2025-11-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } + }, + "sonar": { + "id": "sonar", + "name": "sonar", + "family": "sonar", "attachment": false, "reasoning": false, "tool_call": false, "temperature": true, - "knowledge": "2024-12", - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-09-01", + "release_date": "2024-01-01", + "last_updated": "2025-09-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.049999999999999996, "output": 0.09999999999999999 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 1, + "output": 1 + } }, - "us.anthropic.claude-opus-4-1-20250805-v1:0": { - "id": "us.anthropic.claude-opus-4-1-20250805-v1:0", - "name": "Claude Opus 4.1 (US)", + "anthropic--claude-4-opus": { + "id": "anthropic--claude-4-opus", + "name": "anthropic--claude-4-opus", "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, "knowledge": "2025-03-31", - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "anthropic.claude-haiku-4-5-20251001-v1:0": { - "id": "anthropic.claude-haiku-4-5-20251001-v1:0", - "name": "Claude Haiku 4.5", - "family": "claude-haiku", + "anthropic--claude-3-sonnet": { + "id": "anthropic--claude-3-sonnet", + "name": "anthropic--claude-3-sonnet", + "family": "claude-sonnet", "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-02-28", - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.1, "cache_write": 1.25 }, - "limit": { "context": 200000, "output": 64000 } - }, - "mistral.pixtral-large-2502-v1:0": { - "id": "mistral.pixtral-large-2502-v1:0", - "name": "Pixtral Large (25.02)", - "family": "mistral", - "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-04-08", - "last_updated": "2025-04-08", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2023-08-31", + "release_date": "2024-03-04", + "last_updated": "2024-03-04", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 6 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 200000, + "output": 4096 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "anthropic.claude-3-5-sonnet-20240620-v1:0": { - "id": "anthropic.claude-3-5-sonnet-20240620-v1:0", - "name": "Claude Sonnet 3.5", + "anthropic--claude-4-sonnet": { + "id": "anthropic--claude-4-sonnet", + "name": "anthropic--claude-4-sonnet", "family": "claude-sonnet", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-06-20", - "last_updated": "2024-06-20", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 8192 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "mistral.ministral-3-8b-instruct": { - "id": "mistral.ministral-3-8b-instruct", - "name": "Ministral 3 8B", - "family": "ministral", - "attachment": false, - "reasoning": false, + "gemini-2.5-flash-lite": { + "id": "gemini-2.5-flash-lite", + "name": "gemini-2.5-flash-lite", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.15 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.025 + } }, - "us.anthropic.claude-haiku-4-5-20251001-v1:0": { - "id": "us.anthropic.claude-haiku-4-5-20251001-v1:0", - "name": "Claude Haiku 4.5 (US)", + "anthropic--claude-4.5-haiku": { + "id": "anthropic--claude-4.5-haiku", + "name": "anthropic--claude-4.5-haiku", "family": "claude-haiku", "attachment": true, "reasoning": true, @@ -36354,1053 +54216,1709 @@ "knowledge": "2025-02-28", "release_date": "2025-10-15", "last_updated": "2025-10-15", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } + }, + "gpt-5": { + "id": "gpt-5", + "name": "gpt-5", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.1, "cache_write": 1.25 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "openai.gpt-oss-120b-1:0": { - "id": "openai.gpt-oss-120b-1:0", - "name": "gpt-oss-120b", - "family": "gpt-oss", - "attachment": false, + "gpt-4.1": { + "id": "gpt-4.1", + "name": "gpt-4.1", + "family": "gpt", + "attachment": true, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } }, - "openai.gpt-oss-safeguard-120b": { - "id": "openai.gpt-oss-safeguard-120b", - "name": "GPT OSS Safeguard 120B", - "family": "gpt-oss", - "attachment": false, + "gpt-4.1-mini": { + "id": "gpt-4.1-mini", + "name": "gpt-4.1-mini", + "family": "gpt-mini", + "attachment": true, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.4, + "output": 1.6, + "cache_read": 0.1 + } }, - "anthropic.claude-3-5-sonnet-20241022-v2:0": { - "id": "anthropic.claude-3-5-sonnet-20241022-v2:0", - "name": "Claude Sonnet 3.5 v2", + "anthropic--claude-3.5-sonnet": { + "id": "anthropic--claude-3.5-sonnet", + "name": "anthropic--claude-3.5-sonnet", "family": "claude-sonnet", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-04", + "knowledge": "2024-04-30", "release_date": "2024-10-22", "last_updated": "2024-10-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 8192 } - }, - "deepseek.v3-v1:0": { - "id": "deepseek.v3-v1:0", - "name": "DeepSeek-V3.1", - "family": "deepseek", + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } + } + } + }, + "morph": { + "id": "morph", + "env": ["MORPH_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.morphllm.com/v1", + "name": "Morph", + "doc": "https://docs.morphllm.com/api-reference/introduction", + "models": { + "auto": { + "id": "auto", + "name": "Auto", + "family": "auto", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-09-18", - "last_updated": "2025-09-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.58, "output": 1.68 }, - "limit": { "context": 163840, "output": 81920 } + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-06-01", + "last_updated": "2024-06-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32000, + "output": 32000 + }, + "cost": { + "input": 0.85, + "output": 1.55 + } }, - "minimax.minimax-m2": { - "id": "minimax.minimax-m2", - "name": "MiniMax M2", - "family": "minimax", + "morph-v3-fast": { + "id": "morph-v3-fast", + "name": "Morph v3 Fast", + "family": "morph", "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2025-10-27", - "last_updated": "2025-10-27", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 204608, "output": 128000 } - }, - "qwen.qwen3-vl-235b-a22b": { - "id": "qwen.qwen3-vl-235b-a22b", - "name": "Qwen/Qwen3-VL-235B-A22B-Instruct", - "family": "qwen", - "attachment": true, "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-10-04", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": false, + "temperature": false, + "release_date": "2024-08-15", + "last_updated": "2024-08-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 1.5 }, - "limit": { "context": 262000, "output": 262000 } + "limit": { + "context": 16000, + "output": 16000 + }, + "cost": { + "input": 0.8, + "output": 1.2 + } }, - "meta.llama3-2-1b-instruct-v1:0": { - "id": "meta.llama3-2-1b-instruct-v1:0", - "name": "Llama 3.2 1B Instruct", - "family": "llama", + "morph-v3-large": { + "id": "morph-v3-large", + "name": "Morph v3 Large", + "family": "morph", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, + "temperature": false, + "release_date": "2024-08-15", + "last_updated": "2024-08-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32000, + "output": 32000 + }, + "cost": { + "input": 0.9, + "output": 1.9 + } + } + } + }, + "cloudflare-ai-gateway": { + "id": "cloudflare-ai-gateway", + "env": ["CLOUDFLARE_API_TOKEN", "CLOUDFLARE_ACCOUNT_ID", "CLOUDFLARE_GATEWAY_ID"], + "npm": "ai-gateway-provider", + "name": "Cloudflare AI Gateway", + "doc": "https://developers.cloudflare.com/ai-gateway/", + "models": { + "workers-ai/@cf/myshell-ai/melotts": { + "id": "workers-ai/@cf/myshell-ai/melotts", + "name": "MyShell MeloTTS", + "family": "melotts", + "attachment": false, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-09-25", - "last_updated": "2024-09-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.1 }, - "limit": { "context": 131000, "output": 4096 } + "release_date": "2025-11-14", + "last_updated": "2025-11-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "openai.gpt-oss-safeguard-20b": { - "id": "openai.gpt-oss-safeguard-20b", - "name": "GPT OSS Safeguard 20B", - "family": "gpt-oss", + "workers-ai/@cf/ibm-granite/granite-4.0-h-micro": { + "id": "workers-ai/@cf/ibm-granite/granite-4.0-h-micro", + "name": "IBM Granite 4.0 H Micro", + "family": "granite", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.07, "output": 0.2 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.017, + "output": 0.11 + } }, - "us.anthropic.claude-opus-4-5-20251101-v1:0": { - "id": "us.anthropic.claude-opus-4-5-20251101-v1:0", - "name": "Claude Opus 4.5 (US)", - "family": "claude-opus", - "attachment": true, - "reasoning": true, - "tool_call": true, + "workers-ai/@cf/huggingface/distilbert-sst-2-int8": { + "id": "workers-ai/@cf/huggingface/distilbert-sst-2-int8", + "name": "DistilBERT SST-2 INT8", + "family": "distilbert", + "attachment": false, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-11-24", - "last_updated": "2025-08-01", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-04-03", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.026, + "output": 0 + } }, - "nvidia.nemotron-nano-3-30b": { - "id": "nvidia.nemotron-nano-3-30b", - "name": "NVIDIA Nemotron Nano 3 30B", - "family": "nemotron", + "workers-ai/@cf/zai-org/glm-4.7-flash": { + "id": "workers-ai/@cf/zai-org/glm-4.7-flash", + "name": "GLM-4.7-Flash", + "family": "glm-flash", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-01-19", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.06, "output": 0.24 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.06, + "output": 0.4 + } }, - "anthropic.claude-opus-4-1-20250805-v1:0": { - "id": "anthropic.claude-opus-4-1-20250805-v1:0", - "name": "Claude Opus 4.1", - "family": "claude-opus", - "attachment": true, - "reasoning": true, - "tool_call": true, + "workers-ai/@cf/pipecat-ai/smart-turn-v2": { + "id": "workers-ai/@cf/pipecat-ai/smart-turn-v2", + "name": "Pipecat Smart Turn v2", + "family": "smart-turn", + "attachment": false, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-11-14", + "last_updated": "2025-11-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "eu.anthropic.claude-sonnet-4-6": { - "id": "eu.anthropic.claude-sonnet-4-6", - "name": "Claude Sonnet 4.6 (EU)", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, - "tool_call": true, + "workers-ai/@cf/mistralai/mistral-small-3.1-24b-instruct": { + "id": "workers-ai/@cf/mistralai/mistral-small-3.1-24b-instruct", + "name": "Mistral Small 3.1 24B Instruct", + "family": "mistral-small", + "attachment": false, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-08", - "release_date": "2026-02-17", - "last_updated": "2026-03-18", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-04-11", + "last_updated": "2025-04-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 1000000, "output": 64000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.35, + "output": 0.56 + } }, - "qwen.qwen3-235b-a22b-2507-v1:0": { - "id": "qwen.qwen3-235b-a22b-2507-v1:0", - "name": "Qwen3 235B A22B 2507", - "family": "qwen", + "workers-ai/@cf/facebook/bart-large-cnn": { + "id": "workers-ai/@cf/facebook/bart-large-cnn", + "name": "BART Large CNN", + "family": "bart", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-09-18", - "last_updated": "2025-09-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.22, "output": 0.88 }, - "limit": { "context": 262144, "output": 131072 } + "release_date": "2025-04-09", + "last_updated": "2025-04-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "writer.palmyra-x5-v1:0": { - "id": "writer.palmyra-x5-v1:0", - "name": "Palmyra X5", - "family": "palmyra", + "workers-ai/@cf/aisingapore/gemma-sea-lion-v4-27b-it": { + "id": "workers-ai/@cf/aisingapore/gemma-sea-lion-v4-27b-it", + "name": "Gemma SEA-LION v4 27B IT", + "family": "gemma", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "release_date": "2025-04-28", - "last_updated": "2025-04-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.6, "output": 6 }, - "limit": { "context": 1040000, "output": 8192 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.35, + "output": 0.56 + } }, - "zai.glm-5": { - "id": "zai.glm-5", - "name": "GLM-5", - "family": "glm", + "workers-ai/@cf/nvidia/nemotron-3-120b-a12b": { + "id": "workers-ai/@cf/nvidia/nemotron-3-120b-a12b", + "name": "Nemotron 3 Super 120B", + "family": "nemotron", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-11", + "last_updated": "2026-03-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1, "output": 3.2 }, - "limit": { "context": 202752, "output": 101376 } + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.5, + "output": 1.5 + } }, - "amazon.nova-micro-v1:0": { - "id": "amazon.nova-micro-v1:0", - "name": "Nova Micro", - "family": "nova-micro", + "workers-ai/@cf/deepseek-ai/deepseek-r1-distill-qwen-32b": { + "id": "workers-ai/@cf/deepseek-ai/deepseek-r1-distill-qwen-32b", + "name": "DeepSeek R1 Distill Qwen 32B", + "family": "deepseek-thinking", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-12-03", - "last_updated": "2024-12-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-04-03", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.035, "output": 0.14, "cache_read": 0.00875 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.5, + "output": 4.88 + } }, - "writer.palmyra-x4-v1:0": { - "id": "writer.palmyra-x4-v1:0", - "name": "Palmyra X4", - "family": "palmyra", + "workers-ai/@cf/openai/gpt-oss-20b": { + "id": "workers-ai/@cf/openai/gpt-oss-20b", + "name": "GPT OSS 20B", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "release_date": "2025-04-28", - "last_updated": "2025-04-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 122880, "output": 8192 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.2, + "output": 0.3 + } }, - "mistral.voxtral-mini-3b-2507": { - "id": "mistral.voxtral-mini-3b-2507", - "name": "Voxtral Mini 3B 2507", - "family": "mistral", + "workers-ai/@cf/openai/gpt-oss-120b": { + "id": "workers-ai/@cf/openai/gpt-oss-120b", + "name": "GPT OSS 120B", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["audio", "text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.04, "output": 0.04 }, - "limit": { "context": 128000, "output": 4096 } - }, - "eu.anthropic.claude-sonnet-4-5-20250929-v1:0": { - "id": "eu.anthropic.claude-sonnet-4-5-20250929-v1:0", - "name": "Claude Sonnet 4.5 (EU)", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.35, + "output": 0.75 + } }, - "mistral.mistral-large-3-675b-instruct": { - "id": "mistral.mistral-large-3-675b-instruct", - "name": "Mistral Large 3", + "workers-ai/@cf/mistral/mistral-7b-instruct-v0.1": { + "id": "workers-ai/@cf/mistral/mistral-7b-instruct-v0.1", + "name": "Mistral 7B Instruct v0.1", "family": "mistral", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2025-12-02", - "last_updated": "2025-12-02", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.5, "output": 1.5 }, - "limit": { "context": 256000, "output": 8192 } - }, - "zai.glm-4.7": { - "id": "zai.glm-4.7", - "name": "GLM-4.7", - "family": "glm", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "tool_call": false, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.2 }, - "limit": { "context": 204800, "output": 131072 } + "release_date": "2025-04-03", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.11, + "output": 0.19 + } }, - "qwen.qwen3-32b-v1:0": { - "id": "qwen.qwen3-32b-v1:0", - "name": "Qwen3 32B (dense)", - "family": "qwen", + "workers-ai/@cf/meta/llama-4-scout-17b-16e-instruct": { + "id": "workers-ai/@cf/meta/llama-4-scout-17b-16e-instruct", + "name": "Llama 4 Scout 17B 16E Instruct", + "family": "llama", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-09-18", - "last_updated": "2025-09-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 16384, "output": 16384 } - }, - "us.anthropic.claude-opus-4-6-v1": { - "id": "us.anthropic.claude-opus-4-6-v1", - "name": "Claude Opus 4.6 (US)", - "family": "claude-opus", - "attachment": true, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-05", - "release_date": "2026-02-05", - "last_updated": "2026-03-18", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 1000000, "output": 128000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.27, + "output": 0.85 + } }, - "anthropic.claude-sonnet-4-5-20250929-v1:0": { - "id": "anthropic.claude-sonnet-4-5-20250929-v1:0", - "name": "Claude Sonnet 4.5", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, - "tool_call": true, + "workers-ai/@cf/meta/llama-3-8b-instruct-awq": { + "id": "workers-ai/@cf/meta/llama-3-8b-instruct-awq", + "name": "Llama 3 8B Instruct AWQ", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-04-03", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.12, + "output": 0.27 + } }, - "meta.llama3-2-11b-instruct-v1:0": { - "id": "meta.llama3-2-11b-instruct-v1:0", - "name": "Llama 3.2 11B Instruct", + "workers-ai/@cf/meta/llama-guard-3-8b": { + "id": "workers-ai/@cf/meta/llama-guard-3-8b", + "name": "Llama Guard 3 8B", "family": "llama", - "attachment": true, + "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-09-25", - "last_updated": "2024-09-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.16, "output": 0.16 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2025-04-03", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.48, + "output": 0.03 + } }, - "global.anthropic.claude-opus-4-6-v1": { - "id": "global.anthropic.claude-opus-4-6-v1", - "name": "Claude Opus 4.6 (Global)", - "family": "claude-opus", - "attachment": true, - "reasoning": true, - "tool_call": true, + "workers-ai/@cf/meta/m2m100-1.2b": { + "id": "workers-ai/@cf/meta/m2m100-1.2b", + "name": "M2M100 1.2B", + "family": "m2m", + "attachment": false, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-05", - "release_date": "2026-02-05", - "last_updated": "2026-03-18", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-04-03", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 1000000, "output": 128000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.34, + "output": 0.34 + } }, - "global.anthropic.claude-sonnet-4-5-20250929-v1:0": { - "id": "global.anthropic.claude-sonnet-4-5-20250929-v1:0", - "name": "Claude Sonnet 4.5 (Global)", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, - "tool_call": true, + "workers-ai/@cf/meta/llama-2-7b-chat-fp16": { + "id": "workers-ai/@cf/meta/llama-2-7b-chat-fp16", + "name": "Llama 2 7B Chat FP16", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-04-03", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.56, + "output": 6.67 + } }, - "anthropic.claude-sonnet-4-20250514-v1:0": { - "id": "anthropic.claude-sonnet-4-20250514-v1:0", - "name": "Claude Sonnet 4", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, - "tool_call": true, + "workers-ai/@cf/meta/llama-3.2-11b-vision-instruct": { + "id": "workers-ai/@cf/meta/llama-3.2-11b-vision-instruct", + "name": "Llama 3.2 11B Vision Instruct", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-04-03", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.049, + "output": 0.68 + } }, - "mistral.ministral-3-3b-instruct": { - "id": "mistral.ministral-3-3b-instruct", - "name": "Ministral 3 3B", - "family": "ministral", + "workers-ai/@cf/meta/llama-3.3-70b-instruct-fp8-fast": { + "id": "workers-ai/@cf/meta/llama-3.3-70b-instruct-fp8-fast", + "name": "Llama 3.3 70B Instruct FP8 Fast", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "release_date": "2025-12-02", - "last_updated": "2025-12-02", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.1 }, - "limit": { "context": 256000, "output": 8192 } + "release_date": "2025-04-03", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.29, + "output": 2.25 + } }, - "meta.llama4-maverick-17b-instruct-v1:0": { - "id": "meta.llama4-maverick-17b-instruct-v1:0", - "name": "Llama 4 Maverick 17B Instruct", + "workers-ai/@cf/meta/llama-3.2-1b-instruct": { + "id": "workers-ai/@cf/meta/llama-3.2-1b-instruct", + "name": "Llama 3.2 1B Instruct", "family": "llama", - "attachment": true, + "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.24, "output": 0.97 }, - "limit": { "context": 1000000, "output": 16384 } + "release_date": "2025-04-03", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.027, + "output": 0.2 + } }, - "moonshot.kimi-k2-thinking": { - "id": "moonshot.kimi-k2-thinking", - "name": "Kimi K2 Thinking", - "family": "kimi-thinking", + "workers-ai/@cf/meta/llama-3.1-8b-instruct-fp8": { + "id": "workers-ai/@cf/meta/llama-3.1-8b-instruct-fp8", + "name": "Llama 3.1 8B Instruct FP8", + "family": "llama", "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "release_date": "2025-12-02", - "last_updated": "2025-12-02", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.5 }, - "limit": { "context": 256000, "output": 256000 } + "release_date": "2025-04-03", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.29 + } }, - "mistral.magistral-small-2509": { - "id": "mistral.magistral-small-2509", - "name": "Magistral Small 1.2", - "family": "magistral", + "workers-ai/@cf/meta/llama-3.2-3b-instruct": { + "id": "workers-ai/@cf/meta/llama-3.2-3b-instruct", + "name": "Llama 3.2 3B Instruct", + "family": "llama", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2025-12-02", - "last_updated": "2025-12-02", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.5, "output": 1.5 }, - "limit": { "context": 128000, "output": 40000 } - }, - "us.anthropic.claude-opus-4-20250514-v1:0": { - "id": "us.anthropic.claude-opus-4-20250514-v1:0", - "name": "Claude Opus 4 (US)", - "family": "claude-opus", - "attachment": true, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-04-03", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.051, + "output": 0.34 + } }, - "eu.anthropic.claude-sonnet-4-20250514-v1:0": { - "id": "eu.anthropic.claude-sonnet-4-20250514-v1:0", - "name": "Claude Sonnet 4 (EU)", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, - "tool_call": true, + "workers-ai/@cf/meta/llama-3.1-8b-instruct-awq": { + "id": "workers-ai/@cf/meta/llama-3.1-8b-instruct-awq", + "name": "Llama 3.1 8B Instruct AWQ", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-04-03", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.12, + "output": 0.27 + } }, - "nvidia.nemotron-nano-12b-v2": { - "id": "nvidia.nemotron-nano-12b-v2", - "name": "NVIDIA Nemotron Nano 12B v2 VL BF16", - "family": "nemotron", + "workers-ai/@cf/meta/llama-3-8b-instruct": { + "id": "workers-ai/@cf/meta/llama-3-8b-instruct", + "name": "Llama 3 8B Instruct", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-04-03", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.6 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.28, + "output": 0.83 + } }, - "zai.glm-4.7-flash": { - "id": "zai.glm-4.7-flash", - "name": "GLM-4.7-Flash", - "family": "glm-flash", + "workers-ai/@cf/meta/llama-3.1-8b-instruct": { + "id": "workers-ai/@cf/meta/llama-3.1-8b-instruct", + "name": "Llama 3.1 8B Instruct", + "family": "llama", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-01-19", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.07, "output": 0.4 }, - "limit": { "context": 200000, "output": 131072 } - }, - "mistral.voxtral-small-24b-2507": { - "id": "mistral.voxtral-small-24b-2507", - "name": "Voxtral Small 24B 2507", - "family": "mistral", - "attachment": true, "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2025-07-01", - "last_updated": "2025-07-01", - "modalities": { "input": ["text", "audio"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.35 }, - "limit": { "context": 32000, "output": 8192 } - }, - "eu.anthropic.claude-opus-4-6-v1": { - "id": "eu.anthropic.claude-opus-4-6-v1", - "name": "Claude Opus 4.6 (EU)", - "family": "claude-opus", - "attachment": true, - "reasoning": true, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-05", - "release_date": "2026-02-05", - "last_updated": "2026-03-18", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-04-03", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 1000000, "output": 128000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.28, + "output": 0.8299999999999998 + } }, - "anthropic.claude-3-7-sonnet-20250219-v1:0": { - "id": "anthropic.claude-3-7-sonnet-20250219-v1:0", - "name": "Claude Sonnet 3.7", - "family": "claude-sonnet", - "attachment": true, + "workers-ai/@cf/qwen/qwen2.5-coder-32b-instruct": { + "id": "workers-ai/@cf/qwen/qwen2.5-coder-32b-instruct", + "name": "Qwen 2.5 Coder 32B Instruct", + "family": "qwen", + "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-02-19", - "last_updated": "2025-02-19", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-04-11", + "last_updated": "2025-04-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 8192 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.66, + "output": 1 + } }, - "openai.gpt-oss-20b-1:0": { - "id": "openai.gpt-oss-20b-1:0", - "name": "gpt-oss-20b", - "family": "gpt-oss", + "workers-ai/@cf/qwen/qwen3-embedding-0.6b": { + "id": "workers-ai/@cf/qwen/qwen3-embedding-0.6b", + "name": "Qwen3 Embedding 0.6B", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-11-14", + "last_updated": "2025-11-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.07, "output": 0.3 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.012, + "output": 0 + } }, - "qwen.qwen3-coder-30b-a3b-v1:0": { - "id": "qwen.qwen3-coder-30b-a3b-v1:0", - "name": "Qwen3 Coder 30B A3B Instruct", + "workers-ai/@cf/qwen/qwq-32b": { + "id": "workers-ai/@cf/qwen/qwq-32b", + "name": "QwQ 32B", "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-09-18", - "last_updated": "2025-09-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-04-11", + "last_updated": "2025-04-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 262144, "output": 131072 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.66, + "output": 1 + } }, - "meta.llama3-1-8b-instruct-v1:0": { - "id": "meta.llama3-1-8b-instruct-v1:0", - "name": "Llama 3.1 8B Instruct", - "family": "llama", + "workers-ai/@cf/qwen/qwen3-30b-a3b-fp8": { + "id": "workers-ai/@cf/qwen/qwen3-30b-a3b-fp8", + "name": "Qwen3 30B A3B FP8", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.22, "output": 0.22 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2025-11-14", + "last_updated": "2025-11-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.051, + "output": 0.34 + } }, - "eu.anthropic.claude-haiku-4-5-20251001-v1:0": { - "id": "eu.anthropic.claude-haiku-4-5-20251001-v1:0", - "name": "Claude Haiku 4.5 (EU)", - "family": "claude-haiku", - "attachment": true, - "reasoning": true, - "tool_call": true, + "workers-ai/@cf/google/gemma-3-12b-it": { + "id": "workers-ai/@cf/google/gemma-3-12b-it", + "name": "Gemma 3 12B IT", + "family": "gemma", + "attachment": false, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-02-28", - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-04-11", + "last_updated": "2025-04-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.1, "cache_write": 1.25 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.35, + "output": 0.56 + } }, - "meta.llama3-2-90b-instruct-v1:0": { - "id": "meta.llama3-2-90b-instruct-v1:0", - "name": "Llama 3.2 90B Instruct", - "family": "llama", + "workers-ai/@cf/moonshotai/kimi-k2.5": { + "id": "workers-ai/@cf/moonshotai/kimi-k2.5", + "name": "Kimi K2.5", + "family": "kimi", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-09-25", - "last_updated": "2024-09-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.72, "output": 0.72 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.6, + "output": 3, + "cache_read": 0.1 + } }, - "anthropic.claude-opus-4-6-v1": { - "id": "anthropic.claude-opus-4-6-v1", - "name": "Claude Opus 4.6", - "family": "claude-opus", + "workers-ai/@cf/moonshotai/kimi-k2.6": { + "id": "workers-ai/@cf/moonshotai/kimi-k2.6", + "name": "Kimi K2.6", + "family": "kimi", "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2025-05", - "release_date": "2026-02-05", - "last_updated": "2026-03-18", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 1000000, "output": 128000 } + "knowledge": "2025-01", + "release_date": "2026-04-20", + "last_updated": "2026-04-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.95, + "output": 4, + "cache_read": 0.16 + } }, - "anthropic.claude-3-5-haiku-20241022-v1:0": { - "id": "anthropic.claude-3-5-haiku-20241022-v1:0", - "name": "Claude Haiku 3.5", - "family": "claude-haiku", - "attachment": true, + "workers-ai/@cf/ai4bharat/indictrans2-en-indic-1B": { + "id": "workers-ai/@cf/ai4bharat/indictrans2-en-indic-1B", + "name": "IndicTrans2 EN-Indic 1B", + "family": "indictrans", + "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-07", - "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.8, "output": 4, "cache_read": 0.08, "cache_write": 1 }, - "limit": { "context": 200000, "output": 8192 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.34, + "output": 0.34 + } }, - "meta.llama3-2-3b-instruct-v1:0": { - "id": "meta.llama3-2-3b-instruct-v1:0", - "name": "Llama 3.2 3B Instruct", - "family": "llama", + "workers-ai/@cf/pfnet/plamo-embedding-1b": { + "id": "workers-ai/@cf/pfnet/plamo-embedding-1b", + "name": "PLaMo Embedding 1B", + "family": "plamo", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-09-25", - "last_updated": "2024-09-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.15 }, - "limit": { "context": 131000, "output": 4096 } - }, - "us.anthropic.claude-sonnet-4-5-20250929-v1:0": { - "id": "us.anthropic.claude-sonnet-4-5-20250929-v1:0", - "name": "Claude Sonnet 4.5 (US)", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.019, + "output": 0 + } }, - "deepseek.r1-v1:0": { - "id": "deepseek.r1-v1:0", - "name": "DeepSeek-R1", - "family": "deepseek-thinking", + "workers-ai/@cf/baai/bge-small-en-v1.5": { + "id": "workers-ai/@cf/baai/bge-small-en-v1.5", + "name": "BGE Small EN v1.5", + "family": "bge", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-01-20", - "last_updated": "2025-05-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-04-03", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.35, "output": 5.4 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.02, + "output": 0 + } }, - "mistral.ministral-3-14b-instruct": { - "id": "mistral.ministral-3-14b-instruct", - "name": "Ministral 14B 3.0", - "family": "ministral", + "workers-ai/@cf/baai/bge-large-en-v1.5": { + "id": "workers-ai/@cf/baai/bge-large-en-v1.5", + "name": "BGE Large EN v1.5", + "family": "bge", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-04-03", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.2, + "output": 0 + } }, - "amazon.nova-lite-v1:0": { - "id": "amazon.nova-lite-v1:0", - "name": "Nova Lite", - "family": "nova-lite", - "attachment": true, + "workers-ai/@cf/baai/bge-reranker-base": { + "id": "workers-ai/@cf/baai/bge-reranker-base", + "name": "BGE Reranker Base", + "family": "bge", + "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-12-03", - "last_updated": "2024-12-03", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2025-04-09", + "last_updated": "2025-04-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.06, "output": 0.24, "cache_read": 0.015 }, - "limit": { "context": 300000, "output": 8192 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.0031, + "output": 0 + } }, - "amazon.nova-pro-v1:0": { - "id": "amazon.nova-pro-v1:0", - "name": "Nova Pro", - "family": "nova-pro", - "attachment": true, + "workers-ai/@cf/baai/bge-base-en-v1.5": { + "id": "workers-ai/@cf/baai/bge-base-en-v1.5", + "name": "BGE Base EN v1.5", + "family": "bge", + "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-12-03", - "last_updated": "2024-12-03", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2025-04-03", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.8, "output": 3.2, "cache_read": 0.2 }, - "limit": { "context": 300000, "output": 8192 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.067, + "output": 0 + } }, - "mistral.devstral-2-123b": { - "id": "mistral.devstral-2-123b", - "name": "Devstral 2 123B", - "family": "devstral", + "workers-ai/@cf/baai/bge-m3": { + "id": "workers-ai/@cf/baai/bge-m3", + "name": "BGE M3", + "family": "bge", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "release_date": "2026-02-17", - "last_updated": "2026-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 256000, "output": 8192 } + "release_date": "2025-04-03", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.012, + "output": 0 + } }, - "qwen.qwen3-next-80b-a3b": { - "id": "qwen.qwen3-next-80b-a3b", - "name": "Qwen/Qwen3-Next-80B-A3B-Instruct", - "family": "qwen", + "workers-ai/@cf/deepgram/aura-2-en": { + "id": "workers-ai/@cf/deepgram/aura-2-en", + "name": "Deepgram Aura 2 (EN)", + "family": "aura", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, + "tool_call": false, "temperature": true, - "release_date": "2025-09-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-11-14", + "last_updated": "2025-11-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.14, "output": 1.4 }, - "limit": { "context": 262000, "output": 262000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "minimax.minimax-m2.5": { - "id": "minimax.minimax-m2.5", - "name": "MiniMax M2.5", - "family": "minimax", + "workers-ai/@cf/deepgram/aura-2-es": { + "id": "workers-ai/@cf/deepgram/aura-2-es", + "name": "Deepgram Aura 2 (ES)", + "family": "aura", "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": false, + "reasoning": false, + "tool_call": false, "temperature": true, - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 196608, "output": 98304 } + "release_date": "2025-11-14", + "last_updated": "2025-11-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "anthropic.claude-3-haiku-20240307-v1:0": { - "id": "anthropic.claude-3-haiku-20240307-v1:0", - "name": "Claude Haiku 3", - "family": "claude-haiku", - "attachment": true, + "workers-ai/@cf/deepgram/nova-3": { + "id": "workers-ai/@cf/deepgram/nova-3", + "name": "Deepgram Nova 3", + "family": "nova", + "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-02", - "release_date": "2024-03-13", - "last_updated": "2024-03-13", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-11-14", + "last_updated": "2025-11-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 1.25 }, - "limit": { "context": 200000, "output": 4096 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "eu.anthropic.claude-opus-4-5-20251101-v1:0": { - "id": "eu.anthropic.claude-opus-4-5-20251101-v1:0", - "name": "Claude Opus 4.5 (EU)", - "family": "claude-opus", + "openai/gpt-5.3-codex": { + "id": "openai/gpt-5.3-codex", + "name": "GPT-5.3 Codex", + "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-11-24", - "last_updated": "2025-08-01", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "provider": { + "npm": "ai-gateway-provider" + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "meta.llama4-scout-17b-instruct-v1:0": { - "id": "meta.llama4-scout-17b-instruct-v1:0", - "name": "Llama 4 Scout 17B Instruct", - "family": "llama", + "openai/gpt-4-turbo": { + "id": "openai/gpt-4-turbo", + "name": "GPT-4 Turbo", + "family": "gpt", "attachment": true, "reasoning": false, "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.17, "output": 0.66 }, - "limit": { "context": 3500000, "output": 16384 } + "knowledge": "2023-12", + "release_date": "2023-11-06", + "last_updated": "2024-04-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 10, + "output": 30 + } }, - "amazon.nova-2-lite-v1:0": { - "id": "amazon.nova-2-lite-v1:0", - "name": "Nova 2 Lite", - "family": "nova", - "attachment": false, + "openai/gpt-5.2": { + "id": "openai/gpt-5.2", + "name": "GPT-5.2", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } + }, + "openai/o3-pro": { + "id": "openai/o3-pro", + "name": "o3-pro", + "family": "o-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2025-06-10", + "last_updated": "2025-06-10", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 20, + "output": 80 + } + }, + "openai/gpt-4o-mini": { + "id": "openai/gpt-4o-mini", + "name": "GPT-4o mini", + "family": "gpt-mini", + "attachment": true, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "knowledge": "2023-09", + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.33, "output": 2.75 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.6, + "cache_read": 0.08 + } }, - "global.anthropic.claude-opus-4-5-20251101-v1:0": { - "id": "global.anthropic.claude-opus-4-5-20251101-v1:0", - "name": "Claude Opus 4.5 (Global)", - "family": "claude-opus", + "openai/o4-mini": { + "id": "openai/o4-mini", + "name": "o4-mini", + "family": "o-mini", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-11-24", - "last_updated": "2025-08-01", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.28 + } }, - "amazon.nova-premier-v1:0": { - "id": "amazon.nova-premier-v1:0", - "name": "Nova Premier", - "family": "nova", + "openai/gpt-5.2-codex": { + "id": "openai/gpt-5.2-codex", + "name": "GPT-5.2 Codex", + "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-12-03", - "last_updated": "2024-12-03", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 12.5 }, - "limit": { "context": 1000000, "output": 16384 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "provider": { + "npm": "ai-gateway-provider" + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "anthropic.claude-sonnet-4-6": { - "id": "anthropic.claude-sonnet-4-6", - "name": "Claude Sonnet 4.6", - "family": "claude-sonnet", + "openai/gpt-5.1": { + "id": "openai/gpt-5.1", + "name": "GPT-5.1", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-08", - "release_date": "2026-02-17", - "last_updated": "2026-03-18", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 1000000, "output": 64000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.13 + } }, - "anthropic.claude-opus-4-20250514-v1:0": { - "id": "anthropic.claude-opus-4-20250514-v1:0", - "name": "Claude Opus 4", - "family": "claude-opus", + "openai/o1": { + "id": "openai/o1", + "name": "o1", + "family": "o", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2023-09", + "release_date": "2024-12-05", + "last_updated": "2024-12-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 15, + "output": 60, + "cache_read": 7.5 + } }, - "nvidia.nemotron-nano-9b-v2": { - "id": "nvidia.nemotron-nano-9b-v2", - "name": "NVIDIA Nemotron Nano 9B v2", - "family": "nemotron", + "openai/gpt-3.5-turbo": { + "id": "openai/gpt-3.5-turbo", + "name": "GPT-3.5-turbo", + "family": "gpt", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, + "structured_output": false, "temperature": true, - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2021-09-01", + "release_date": "2023-03-01", + "last_updated": "2023-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.06, "output": 0.23 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 16385, + "output": 4096 + }, + "cost": { + "input": 0.5, + "output": 1.5, + "cache_read": 1.25 + } }, - "google.gemma-3-4b-it": { - "id": "google.gemma-3-4b-it", - "name": "Gemma 3 4B IT", - "family": "gemma", + "openai/o3-mini": { + "id": "openai/o3-mini", + "name": "o3-mini", + "family": "o-mini", "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2024-12-20", + "last_updated": "2025-01-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.55 + } + }, + "openai/gpt-4": { + "id": "openai/gpt-4", + "name": "GPT-4", + "family": "gpt", + "attachment": true, "reasoning": false, "tool_call": true, + "structured_output": false, "temperature": true, - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2023-11", + "release_date": "2023-11-06", + "last_updated": "2024-04-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.04, "output": 0.08 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 30, + "output": 60 + } }, - "meta.llama3-1-70b-instruct-v1:0": { - "id": "meta.llama3-1-70b-instruct-v1:0", - "name": "Llama 3.1 70B Instruct", - "family": "llama", - "attachment": false, + "openai/gpt-5.4": { + "id": "openai/gpt-5.4", + "name": "GPT-5.4", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "provider": { + "npm": "ai-gateway-provider" + }, + "cost": { + "input": 2.5, + "output": 15, + "cache_read": 0.25 + } + }, + "openai/o3": { + "id": "openai/o3", + "name": "o3", + "family": "o", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } + }, + "openai/gpt-4o": { + "id": "openai/gpt-4o", + "name": "GPT-4o", + "family": "gpt", + "attachment": true, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.72, "output": 0.72 }, - "limit": { "context": 128000, "output": 4096 } + "knowledge": "2023-09", + "release_date": "2024-05-13", + "last_updated": "2024-08-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 10, + "cache_read": 1.25 + } }, - "global.anthropic.claude-haiku-4-5-20251001-v1:0": { - "id": "global.anthropic.claude-haiku-4-5-20251001-v1:0", - "name": "Claude Haiku 4.5 (Global)", + "openai/gpt-5.1-codex": { + "id": "openai/gpt-5.1-codex", + "name": "GPT-5.1 Codex", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } + }, + "anthropic/claude-haiku-4-5": { + "id": "anthropic/claude-haiku-4-5", + "name": "Claude Haiku 4.5 (latest)", "family": "claude-haiku", "attachment": true, "reasoning": true, @@ -37409,1626 +55927,2834 @@ "knowledge": "2025-02-28", "release_date": "2025-10-15", "last_updated": "2025-10-15", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.1, "cache_write": 1.25 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } }, - "anthropic.claude-opus-4-5-20251101-v1:0": { - "id": "anthropic.claude-opus-4-5-20251101-v1:0", - "name": "Claude Opus 4.5", + "anthropic/claude-sonnet-4-6": { + "id": "anthropic/claude-sonnet-4-6", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "interleaved": true, + "temperature": true, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-02-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 64000 + }, + "provider": { + "npm": "ai-gateway-provider" + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75, + "tiers": [ + { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5 + } + } + }, + "anthropic/claude-opus-4-7": { + "id": "anthropic/claude-opus-4-7", + "name": "Claude Opus 4.7", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2026-01", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/anthropic" + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } + }, + "anthropic/claude-opus-4-1": { + "id": "anthropic/claude-opus-4-1", + "name": "Claude Opus 4.1 (latest)", "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, "knowledge": "2025-03-31", - "release_date": "2025-11-24", - "last_updated": "2025-08-01", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "us.anthropic.claude-sonnet-4-6": { - "id": "us.anthropic.claude-sonnet-4-6", - "name": "Claude Sonnet 4.6 (US)", + "anthropic/claude-3-5-haiku": { + "id": "anthropic/claude-3-5-haiku", + "name": "Claude Haiku 3.5 (latest)", + "family": "claude-haiku", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07-31", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 0.8, + "output": 4, + "cache_read": 0.08, + "cache_write": 1 + } + }, + "anthropic/claude-3.5-sonnet": { + "id": "anthropic/claude-3.5-sonnet", + "name": "Claude Sonnet 3.5 v2", "family": "claude-sonnet", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-08", - "release_date": "2026-02-17", - "last_updated": "2026-03-18", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2024-04-30", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 1000000, "output": 64000 } + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "global.anthropic.claude-sonnet-4-20250514-v1:0": { - "id": "global.anthropic.claude-sonnet-4-20250514-v1:0", - "name": "Claude Sonnet 4 (Global)", + "anthropic/claude-sonnet-4": { + "id": "anthropic/claude-sonnet-4", + "name": "Claude Sonnet 4 (latest)", "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-04", + "knowledge": "2025-03-31", "release_date": "2025-05-22", "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } - } - } - }, - "huggingface": { - "id": "huggingface", - "env": ["HF_TOKEN"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://router.huggingface.co/v1", - "name": "Hugging Face", - "doc": "https://huggingface.co/docs/inference-providers", - "models": { - "zai-org/GLM-4.7": { - "id": "zai-org/GLM-4.7", - "name": "GLM-4.7", - "family": "glm", - "attachment": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } + }, + "anthropic/claude-opus-4-5": { + "id": "anthropic/claude-opus-4-5", + "name": "Claude Opus 4.5 (latest)", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.2, "cache_read": 0.11 }, - "limit": { "context": 204800, "output": 131072 } + "knowledge": "2025-03-31", + "release_date": "2025-11-24", + "last_updated": "2025-11-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "zai-org/GLM-4.7-Flash": { - "id": "zai-org/GLM-4.7-Flash", - "name": "GLM-4.7-Flash", - "family": "glm", - "attachment": false, - "reasoning": true, + "anthropic/claude-3-haiku": { + "id": "anthropic/claude-3-haiku", + "name": "Claude Haiku 3", + "family": "claude-haiku", + "attachment": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-08-08", - "last_updated": "2025-08-08", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 200000, "output": 128000 } + "knowledge": "2023-08-31", + "release_date": "2024-03-13", + "last_updated": "2024-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 4096 + }, + "cost": { + "input": 0.25, + "output": 1.25, + "cache_read": 0.03, + "cache_write": 0.3 + } }, - "zai-org/GLM-5": { - "id": "zai-org/GLM-5", - "name": "GLM-5", - "family": "glm", - "attachment": false, + "anthropic/claude-opus-4": { + "id": "anthropic/claude-opus-4", + "name": "Claude Opus 4 (latest)", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1, "output": 3.2, "cache_read": 0.2 }, - "limit": { "context": 202752, "output": 131072 } - }, - "MiniMaxAI/MiniMax-M2.1": { - "id": "MiniMaxAI/MiniMax-M2.1", - "name": "MiniMax-M2.1", - "family": "minimax", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2025-10", - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 204800, "output": 131072 } + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "MiniMaxAI/MiniMax-M2.5": { - "id": "MiniMaxAI/MiniMax-M2.5", - "name": "MiniMax-M2.5", - "family": "minimax", - "attachment": false, + "anthropic/claude-opus-4-6": { + "id": "anthropic/claude-opus-4-6", + "name": "Claude Opus 4.6 (latest)", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.03 }, - "limit": { "context": 204800, "output": 131072 } + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25, + "tiers": [ + { + "input": 10, + "output": 37.5, + "cache_read": 1, + "cache_write": 12.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 10, + "output": 37.5, + "cache_read": 1, + "cache_write": 12.5 + } + } }, - "deepseek-ai/DeepSeek-R1-0528": { - "id": "deepseek-ai/DeepSeek-R1-0528", - "name": "DeepSeek-R1-0528", - "family": "deepseek-thinking", - "attachment": false, - "reasoning": true, + "anthropic/claude-3.5-haiku": { + "id": "anthropic/claude-3.5-haiku", + "name": "Claude Haiku 3.5 (latest)", + "family": "claude-haiku", + "attachment": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-05", - "release_date": "2025-05-28", - "last_updated": "2025-05-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 3, "output": 5 }, - "limit": { "context": 163840, "output": 163840 } + "knowledge": "2024-07-31", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 0.8, + "output": 4, + "cache_read": 0.08, + "cache_write": 1 + } }, - "deepseek-ai/DeepSeek-V3.2": { - "id": "deepseek-ai/DeepSeek-V3.2", - "name": "DeepSeek-V3.2", - "family": "deepseek", - "attachment": false, + "anthropic/claude-sonnet-4-5": { + "id": "anthropic/claude-sonnet-4-5", + "name": "Claude Sonnet 4.5 (latest)", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.28, "output": 0.4 }, - "limit": { "context": 163840, "output": 65536 } + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "Qwen/Qwen3-Next-80B-A3B-Thinking": { - "id": "Qwen/Qwen3-Next-80B-A3B-Thinking", - "name": "Qwen3-Next-80B-A3B-Thinking", - "family": "qwen", - "attachment": false, + "anthropic/claude-3-sonnet": { + "id": "anthropic/claude-3-sonnet", + "name": "Claude Sonnet 3", + "family": "claude-sonnet", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-11", - "last_updated": "2025-09-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 2 }, - "limit": { "context": 262144, "output": 131072 } + "knowledge": "2023-08-31", + "release_date": "2024-03-04", + "last_updated": "2024-03-04", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 4096 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 0.3 + } }, - "Qwen/Qwen3-Coder-Next": { - "id": "Qwen/Qwen3-Coder-Next", - "name": "Qwen3-Coder-Next", - "family": "qwen", - "attachment": false, + "anthropic/claude-3-opus": { + "id": "anthropic/claude-3-opus", + "name": "Claude Opus 3", + "family": "claude-opus", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-02-03", - "last_updated": "2026-02-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 1.5 }, - "limit": { "context": 262144, "output": 65536 } + "knowledge": "2023-08-31", + "release_date": "2024-02-29", + "last_updated": "2024-02-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 4096 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "Qwen/Qwen3.5-397B-A17B": { - "id": "Qwen/Qwen3.5-397B-A17B", - "name": "Qwen3.5-397B-A17B", - "family": "qwen", + "openai/gpt-5.5": { + "id": "openai/gpt-5.5", + "name": "GPT-5.5", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-02-01", - "last_updated": "2026-02-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 3.6 }, - "limit": { "context": 262144, "output": 32768 } - }, - "Qwen/Qwen3-235B-A22B-Thinking-2507": { - "id": "Qwen/Qwen3-235B-A22B-Thinking-2507", - "name": "Qwen3-235B-A22B-Thinking-2507", - "family": "qwen", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-25", - "last_updated": "2025-07-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 3 }, - "limit": { "context": 262144, "output": 131072 } - }, - "Qwen/Qwen3-Next-80B-A3B-Instruct": { - "id": "Qwen/Qwen3-Next-80B-A3B-Instruct", - "name": "Qwen3-Next-80B-A3B-Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-11", - "last_updated": "2025-09-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.25, "output": 1 }, - "limit": { "context": 262144, "output": 66536 } - }, - "Qwen/Qwen3-Embedding-4B": { - "id": "Qwen/Qwen3-Embedding-4B", - "name": "Qwen 3 Embedding 4B", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": false, + "structured_output": true, "temperature": false, - "knowledge": "2024-12", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.01, "output": 0 }, - "limit": { "context": 32000, "output": 2048 } - }, - "Qwen/Qwen3-Coder-480B-A35B-Instruct": { - "id": "Qwen/Qwen3-Coder-480B-A35B-Instruct", - "name": "Qwen3-Coder-480B-A35B-Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, + "knowledge": "2025-12-01", + "release_date": "2026-04-23", + "last_updated": "2026-04-23", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 30, + "cache_read": 0.5, + "context_over_200k": { + "input": 10, + "output": 45, + "cache_read": 1 + }, + "tiers": [ + { + "input": 10, + "output": 45, + "cache_read": 1, + "tier": { + "type": "context", + "size": 272000 + } + } + ] + } + } + } + }, + "github-copilot": { + "id": "github-copilot", + "env": ["GITHUB_TOKEN"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.githubcopilot.com", + "name": "GitHub Copilot", + "doc": "https://docs.github.com/en/copilot", + "models": { + "gpt-5.1-codex-max": { + "id": "gpt-5.1-codex-max", + "name": "GPT-5.1-Codex-max", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2, "output": 2 }, - "limit": { "context": 262144, "output": 66536 } - }, - "Qwen/Qwen3-Embedding-8B": { - "id": "Qwen/Qwen3-Embedding-8B", - "name": "Qwen 3 Embedding 8B", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": false, "temperature": false, - "knowledge": "2024-12", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.01, "output": 0 }, - "limit": { "context": 32000, "output": 4096 } + "knowledge": "2024-09-30", + "release_date": "2025-12-04", + "last_updated": "2025-12-04", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 128000, + "output": 128000 + }, + "status": "deprecated", + "cost": { + "input": 0, + "output": 0 + } }, - "moonshotai/Kimi-K2-Instruct": { - "id": "moonshotai/Kimi-K2-Instruct", - "name": "Kimi-K2-Instruct", - "family": "kimi", - "attachment": false, - "reasoning": false, + "claude-opus-4.6": { + "id": "claude-opus-4.6", + "name": "Claude Opus 4.6", + "family": "claude-opus", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-07-14", - "last_updated": "2025-07-14", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1, "output": 3 }, - "limit": { "context": 131072, "output": 16384 } + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 144000, + "input": 128000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "moonshotai/Kimi-K2.5": { - "id": "moonshotai/Kimi-K2.5", - "name": "Kimi-K2.5", - "family": "kimi", + "gemini-3.1-pro-preview": { + "id": "gemini-3.1-pro-preview", + "name": "Gemini 3.1 Pro Preview", + "family": "gemini-pro", "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "structured_output": true, "temperature": true, "knowledge": "2025-01", - "release_date": "2026-01-01", - "last_updated": "2026-01-01", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 3, "cache_read": 0.1 }, - "limit": { "context": 262144, "output": 262144 } - }, - "moonshotai/Kimi-K2-Instruct-0905": { - "id": "moonshotai/Kimi-K2-Instruct-0905", - "name": "Kimi-K2-Instruct-0905", - "family": "kimi", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-09-04", - "last_updated": "2025-09-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1, "output": 3 }, - "limit": { "context": 262144, "output": 16384 } + "release_date": "2026-02-19", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "moonshotai/Kimi-K2-Thinking": { - "id": "moonshotai/Kimi-K2-Thinking", - "name": "Kimi-K2-Thinking", - "family": "kimi-thinking", - "attachment": false, + "gemini-3-flash-preview": { + "id": "gemini-3-flash-preview", + "name": "Gemini 3 Flash", + "family": "gemini-flash", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "structured_output": true, "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-11-06", - "last_updated": "2025-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.5, "cache_read": 0.15 }, - "limit": { "context": 262144, "output": 262144 } + "knowledge": "2025-01", + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "XiaomiMiMo/MiMo-V2-Flash": { - "id": "XiaomiMiMo/MiMo-V2-Flash", - "name": "MiMo-V2-Flash", - "family": "mimo", + "gpt-5.5": { + "id": "gpt-5.5", + "name": "GPT-5.5", + "family": "gpt", "attachment": false, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-12-16", - "last_updated": "2025-12-16", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 262144, "output": 4096 } - } - } - }, - "stepfun": { - "id": "stepfun", - "env": ["STEPFUN_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.stepfun.com/v1", - "name": "StepFun", - "doc": "https://platform.stepfun.com/docs/zh/overview/concept", - "models": { - "step-1-32k": { - "id": "step-1-32k", - "name": "Step 1 (32K)", - "attachment": false, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "gpt-5-mini": { + "id": "gpt-5-mini", + "name": "GPT-5-mini", + "family": "gpt-mini", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, "knowledge": "2024-06", - "release_date": "2025-01-01", - "last_updated": "2026-02-13", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-13", + "last_updated": "2025-08-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.05, "output": 9.59, "cache_read": 0.41 }, - "limit": { "context": 32768, "input": 32768, "output": 32768 } + "limit": { + "context": 264000, + "input": 128000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "step-3.5-flash": { - "id": "step-3.5-flash", - "name": "Step 3.5 Flash", - "attachment": false, + "gemini-3-pro-preview": { + "id": "gemini-3-pro-preview", + "name": "Gemini 3 Pro Preview", + "family": "gemini-pro", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, "knowledge": "2025-01", - "release_date": "2026-01-29", - "last_updated": "2026-02-13", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.096, "output": 0.288, "cache_read": 0.019 }, - "limit": { "context": 256000, "input": 256000, "output": 256000 } + "release_date": "2025-11-18", + "last_updated": "2025-11-18", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 64000 + }, + "status": "deprecated", + "cost": { + "input": 0, + "output": 0 + } }, - "step-2-16k": { - "id": "step-2-16k", - "name": "Step 2 (16K)", + "gpt-5.3-codex": { + "id": "gpt-5.3-codex", + "name": "GPT-5.3-Codex", + "family": "gpt-codex", "attachment": false, "reasoning": true, "tool_call": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-02-24", + "last_updated": "2026-02-24", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "gemini-2.5-pro": { + "id": "gemini-2.5-pro", + "name": "Gemini 2.5 Pro", + "family": "gemini-pro", + "attachment": true, + "reasoning": false, + "tool_call": true, "temperature": true, - "knowledge": "2024-06", - "release_date": "2025-01-01", - "last_updated": "2026-02-13", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5.21, "output": 16.44, "cache_read": 1.04 }, - "limit": { "context": 16384, "input": 16384, "output": 8192 } - } - } - }, - "fastrouter": { - "id": "fastrouter", - "env": ["FASTROUTER_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://go.fastrouter.ai/api/v1", - "name": "FastRouter", - "doc": "https://fastrouter.ai/models", - "models": { - "openai/gpt-5": { - "id": "openai/gpt-5", - "name": "GPT-5", + "limit": { + "context": 128000, + "input": 128000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "gpt-5.2": { + "id": "gpt-5.2", + "name": "GPT-5.2", "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-10-01", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 264000, + "input": 128000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "openai/gpt-5-mini": { - "id": "openai/gpt-5-mini", - "name": "GPT-5 Mini", + "gpt-5.4-mini": { + "id": "gpt-5.4-mini", + "name": "GPT-5.4 Mini", "family": "gpt-mini", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-10-01", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.025 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "openai/gpt-4.1": { - "id": "openai/gpt-4.1", - "name": "GPT-4.1", - "family": "gpt", + "claude-opus-4.7": { + "id": "claude-opus-4.7", + "name": "Claude Opus 4.7", + "family": "claude-opus", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8, "cache_read": 0.5 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 144000, + "input": 128000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "openai/gpt-oss-120b": { - "id": "openai/gpt-oss-120b", - "name": "GPT OSS 120B", - "family": "gpt-oss", + "gpt-5.2-codex": { + "id": "gpt-5.2-codex", + "name": "GPT-5.2-Codex", + "family": "gpt-codex", "attachment": false, "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 131072, "output": 32768 } - }, - "openai/gpt-5-nano": { - "id": "openai/gpt-5-nano", - "name": "GPT-5 Nano", - "family": "gpt-nano", + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "gpt-5.1-codex-mini": { + "id": "gpt-5.1-codex-mini", + "name": "GPT-5.1-Codex-mini", + "family": "gpt-codex", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 128000, + "output": 128000 + }, + "status": "deprecated", + "cost": { + "input": 0, + "output": 0 + } + }, + "claude-sonnet-4": { + "id": "claude-sonnet-4", + "name": "Claude Sonnet 4", + "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10-01", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.05, "output": 0.4, "cache_read": 0.005 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 216000, + "input": 128000, + "output": 16000 + }, + "status": "deprecated", + "cost": { + "input": 0, + "output": 0 + } }, - "openai/gpt-oss-20b": { - "id": "openai/gpt-oss-20b", - "name": "GPT OSS 20B", - "family": "gpt-oss", + "grok-code-fast-1": { + "id": "grok-code-fast-1", + "name": "Grok Code Fast 1", + "family": "grok", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.05, "output": 0.2 }, - "limit": { "context": 131072, "output": 65536 } + "knowledge": "2025-08", + "release_date": "2025-08-27", + "last_updated": "2025-08-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 128000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "x-ai/grok-4": { - "id": "x-ai/grok-4", - "name": "Grok 4", - "family": "grok", - "attachment": false, + "gpt-5.1": { + "id": "gpt-5.1", + "name": "GPT-5.1", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 264000, + "input": 128000, + "output": 64000 + }, + "status": "deprecated", + "cost": { + "input": 0, + "output": 0 + } + }, + "claude-sonnet-4.5": { + "id": "claude-sonnet-4.5", + "name": "Claude Sonnet 4.5", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-03-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.75, "cache_write": 15 }, - "limit": { "context": 256000, "output": 64000 } + "limit": { + "context": 144000, + "input": 128000, + "output": 32000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "anthropic/claude-opus-4.1": { - "id": "anthropic/claude-opus-4.1", + "claude-opus-41": { + "id": "claude-opus-41", "name": "Claude Opus 4.1", "family": "claude-opus", "attachment": true, "reasoning": true, - "tool_call": true, + "tool_call": false, "temperature": true, "knowledge": "2025-03-31", "release_date": "2025-08-05", "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 80000, + "output": 16000 + }, + "status": "deprecated", + "cost": { + "input": 0, + "output": 0 + } }, - "anthropic/claude-sonnet-4": { - "id": "anthropic/claude-sonnet-4", - "name": "Claude Sonnet 4", - "family": "claude-sonnet", + "claude-opus-4.5": { + "id": "claude-opus-4.5", + "name": "Claude Opus 4.5", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, "knowledge": "2025-03-31", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-11-24", + "last_updated": "2025-08-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 160000, + "input": 128000, + "output": 32000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "z-ai/glm-5": { - "id": "z-ai/glm-5", - "name": "GLM-5", - "family": "glm", + "gpt-5.4": { + "id": "gpt-5.4", + "name": "GPT-5.4", + "family": "gpt", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.95, "output": 3.15 }, - "limit": { "context": 204800, "output": 131072 } + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "google/gemini-2.5-pro": { - "id": "google/gemini-2.5-pro", - "name": "Gemini 2.5 Pro", - "family": "gemini-pro", + "gpt-4o": { + "id": "gpt-4o", + "name": "GPT-4o", + "family": "gpt", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2023-09", + "release_date": "2024-05-13", + "last_updated": "2024-05-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.31 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 128000, + "input": 64000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "google/gemini-2.5-flash": { - "id": "google/gemini-2.5-flash", - "name": "Gemini 2.5 Flash", - "family": "gemini-flash", + "gpt-5": { + "id": "gpt-5", + "name": "GPT-5", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 2.5, "cache_read": 0.0375 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 128000, + "output": 128000 + }, + "status": "deprecated", + "cost": { + "input": 0, + "output": 0 + } }, - "deepseek-ai/deepseek-r1-distill-llama-70b": { - "id": "deepseek-ai/deepseek-r1-distill-llama-70b", - "name": "DeepSeek R1 Distill Llama 70B", - "family": "deepseek-thinking", - "attachment": false, + "claude-haiku-4.5": { + "id": "claude-haiku-4.5", + "name": "Claude Haiku 4.5", + "family": "claude-haiku", + "attachment": true, "reasoning": true, - "tool_call": false, + "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-01-23", - "last_updated": "2025-01-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.03, "output": 0.14 }, - "limit": { "context": 131072, "output": 131072 } + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 144000, + "input": 128000, + "output": 32000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "qwen/qwen3-coder": { - "id": "qwen/qwen3-coder", - "name": "Qwen3 Coder", - "family": "qwen", - "attachment": false, + "gpt-4.1": { + "id": "gpt-4.1", + "name": "GPT-4.1", + "family": "gpt", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 262144, "output": 66536 } + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 64000, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "moonshotai/kimi-k2": { - "id": "moonshotai/kimi-k2", - "name": "Kimi K2", - "family": "kimi", - "attachment": false, - "reasoning": false, + "claude-sonnet-4.6": { + "id": "claude-sonnet-4.6", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-07-11", - "last_updated": "2025-07-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.55, "output": 2.2 }, - "limit": { "context": 131072, "output": 32768 } + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-02-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "input": 128000, + "output": 32000 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "gpt-5.1-codex": { + "id": "gpt-5.1-codex", + "name": "GPT-5.1-Codex", + "family": "gpt-codex", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 128000, + "output": 128000 + }, + "status": "deprecated", + "cost": { + "input": 0, + "output": 0 + } } } }, - "baseten": { - "id": "baseten", - "env": ["BASETEN_API_KEY"], + "mixlayer": { + "id": "mixlayer", + "env": ["MIXLAYER_API_KEY"], "npm": "@ai-sdk/openai-compatible", - "api": "https://inference.baseten.co/v1", - "name": "Baseten", - "doc": "https://docs.baseten.co/development/model-apis/overview", + "api": "https://models.mixlayer.ai/v1", + "name": "Mixlayer", + "doc": "https://docs.mixlayer.com", "models": { - "openai/gpt-oss-120b": { - "id": "openai/gpt-oss-120b", - "name": "GPT OSS 120B", - "family": "gpt-oss", + "qwen/qwen3.5-122b-a10b": { + "id": "qwen/qwen3.5-122b-a10b", + "name": "Qwen3.5 122B A10B", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-08", - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.5 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.4, + "output": 3.2 + } }, - "zai-org/GLM-4.7": { - "id": "zai-org/GLM-4.7", - "name": "GLM-4.7", - "family": "glm", + "qwen/qwen3.5-27b": { + "id": "qwen/qwen3.5-27b", + "name": "Qwen3.5 27B", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 2.2 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.3, + "output": 2.4 + } }, - "zai-org/GLM-5": { - "id": "zai-org/GLM-5", - "name": "GLM-5", - "family": "glm", + "qwen/qwen3.5-397b-a17b": { + "id": "qwen/qwen3.5-397b-a17b", + "name": "Qwen3.5 397B A17B", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2026-01", - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.95, "output": 3.15 }, - "limit": { "context": 202752, "output": 131072 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 3.6 + } }, - "zai-org/GLM-4.6": { - "id": "zai-org/GLM-4.6", - "name": "GLM 4.6", - "family": "glm", + "qwen/qwen3.5-9b": { + "id": "qwen/qwen3.5-9b", + "name": "Qwen3.5 9B", + "family": "qwen", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-08-31", - "release_date": "2025-09-16", - "last_updated": "2025-09-16", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 2.2 }, - "limit": { "context": 200000, "output": 200000 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.1, + "output": 0.4 + } }, - "nvidia/Nemotron-120B-A12B": { - "id": "nvidia/Nemotron-120B-A12B", - "name": "Nemotron 3 Super", - "family": "nemotron", + "qwen/qwen3.5-35b-a3b": { + "id": "qwen/qwen3.5-35b-a3b", + "name": "Qwen3.5 35B A3B", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2026-02", - "release_date": "2026-03-11", - "last_updated": "2026-03-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 0.75 }, - "limit": { "context": 262144, "output": 32678 } - }, - "MiniMaxAI/MiniMax-M2.5": { - "id": "MiniMaxAI/MiniMax-M2.5", - "name": "MiniMax-M2.5", - "family": "minimax", + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.25, + "output": 1.3 + } + } + } + }, + "xiaomi-token-plan-sgp": { + "id": "xiaomi-token-plan-sgp", + "env": ["XIAOMI_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://token-plan-sgp.xiaomimimo.com/v1", + "name": "Xiaomi Token Plan (Singapore)", + "doc": "https://platform.xiaomimimo.com/#/docs", + "models": { + "mimo-v2-tts": { + "id": "mimo-v2-tts", + "name": "MiMo-V2-TTS", + "family": "mimo", "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2026-01", - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["audio"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 204000, "output": 204000 } + "limit": { + "context": 8192, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "deepseek-ai/DeepSeek-V3.1": { - "id": "deepseek-ai/DeepSeek-V3.1", - "name": "DeepSeek V3.1", - "family": "deepseek", + "mimo-v2-flash": { + "id": "mimo-v2-flash", + "name": "MiMo-V2-Flash", + "family": "mimo", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-08-25", - "last_updated": "2025-08-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-12-01", + "release_date": "2025-12-16", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.5, "output": 1.5 }, - "limit": { "context": 164000, "output": 131000 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "deepseek-ai/DeepSeek-V3-0324": { - "id": "deepseek-ai/DeepSeek-V3-0324", - "name": "DeepSeek V3 0324", - "family": "deepseek", + "mimo-v2-pro": { + "id": "mimo-v2-pro", + "name": "MiMo-V2-Pro", + "family": "mimo", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, "knowledge": "2024-12", - "release_date": "2025-03-24", - "last_updated": "2025-03-24", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.77, "output": 0.77 }, - "limit": { "context": 164000, "output": 131000 } + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "deepseek-ai/DeepSeek-V3.2": { - "id": "deepseek-ai/DeepSeek-V3.2", - "name": "DeepSeek V3.2", - "family": "deepseek", - "attachment": false, + "mimo-v2.5": { + "id": "mimo-v2.5", + "name": "MiMo-V2.5", + "family": "mimo", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2025-10", - "release_date": "2025-12-01", - "last_updated": "2026-03-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 0.45 }, - "limit": { "context": 163800, "output": 131100 }, - "status": "deprecated" + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "moonshotai/Kimi-K2.5": { - "id": "moonshotai/Kimi-K2.5", - "name": "Kimi K2.5", - "family": "kimi", + "mimo-v2-omni": { + "id": "mimo-v2-omni", + "name": "MiMo-V2-Omni", + "family": "mimo", "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2025-12", - "release_date": "2026-01-30", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 3 }, - "limit": { "context": 262144, "output": 8192 } - }, - "moonshotai/Kimi-K2-Instruct-0905": { - "id": "moonshotai/Kimi-K2-Instruct-0905", - "name": "Kimi K2 Instruct 0905", - "family": "kimi", - "attachment": false, - "reasoning": false, - "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2025-08", - "release_date": "2025-09-05", - "last_updated": "2026-03-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.5 }, - "limit": { "context": 262144, "output": 262144 }, - "status": "deprecated" + "knowledge": "2024-12", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "moonshotai/Kimi-K2-Thinking": { - "id": "moonshotai/Kimi-K2-Thinking", - "name": "Kimi K2 Thinking", - "family": "kimi-thinking", + "mimo-v2.5-pro": { + "id": "mimo-v2.5-pro", + "name": "MiMo-V2.5-Pro", + "family": "mimo", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-11-06", - "last_updated": "2026-03-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 2.5 }, - "limit": { "context": 262144, "output": 262144 }, - "status": "deprecated" + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } } } }, - "vercel": { - "id": "vercel", - "env": ["AI_GATEWAY_API_KEY"], - "npm": "@ai-sdk/gateway", - "name": "Vercel AI Gateway", - "doc": "https://github.com/vercel/ai/tree/5eb85cc45a259553501f535b8ac79a77d0e79223/packages/gateway", + "zai": { + "id": "zai", + "env": ["ZHIPU_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.z.ai/api/paas/v4", + "name": "Z.AI", + "doc": "https://docs.z.ai/guides/overview/pricing", "models": { - "meituan/longcat-flash-thinking": { - "id": "meituan/longcat-flash-thinking", - "name": "LongCat Flash Thinking", - "family": "longcat", - "attachment": false, + "glm-5v-turbo": { + "id": "glm-5v-turbo", + "name": "GLM-5V-Turbo", + "family": "glm", + "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-09-23", - "last_updated": "2025-09-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-01", + "last_updated": "2026-04-01", + "modalities": { + "input": ["text", "image", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 1.5 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 1.2, + "output": 4, + "cache_read": 0.24, + "cache_write": 0 + } }, - "meituan/longcat-flash-thinking-2601": { - "id": "meituan/longcat-flash-thinking-2601", - "name": "LongCat Flash Thinking 2601", - "family": "longcat", + "glm-4.7": { + "id": "glm-4.7", + "name": "GLM-4.7", + "family": "glm", "attachment": false, "reasoning": true, - "tool_call": false, - "temperature": true, - "release_date": "2026-03-13", - "last_updated": "2026-03-13", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "limit": { "context": 32768, "output": 32768 } - }, - "meituan/longcat-flash-chat": { - "id": "meituan/longcat-flash-chat", - "name": "LongCat Flash Chat", - "family": "longcat", - "attachment": false, - "reasoning": false, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-08-30", - "last_updated": "2025-08-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "limit": { "context": 128000, "output": 8192 } + "knowledge": "2025-04", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 2.2, + "cache_read": 0.11, + "cache_write": 0 + } }, - "openai/gpt-5.2-codex": { - "id": "openai/gpt-5.2-codex", - "name": "GPT-5.2-Codex", - "family": "gpt-codex", - "attachment": true, + "glm-5": { + "id": "glm-5", + "name": "GLM-5", + "family": "glm", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-12", - "last_updated": "2025-12", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 1, + "output": 3.2, + "cache_read": 0.2, + "cache_write": 0 + } }, - "openai/text-embedding-3-large": { - "id": "openai/text-embedding-3-large", - "name": "text-embedding-3-large", - "family": "text-embedding", + "glm-4.7-flashx": { + "id": "glm-4.7-flashx", + "name": "GLM-4.7-FlashX", + "family": "glm-flash", "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "release_date": "2024-01-25", - "last_updated": "2024-01-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.13, "output": 0 }, - "limit": { "context": 8192, "input": 6656, "output": 1536 } - }, - "openai/gpt-5.1-codex-mini": { - "id": "openai/gpt-5.1-codex-mini", - "name": "GPT-5.1 Codex mini", - "family": "gpt", - "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-05-16", - "last_updated": "2025-05-16", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.03 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "knowledge": "2025-04", + "release_date": "2026-01-19", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 0.07, + "output": 0.4, + "cache_read": 0.01, + "cache_write": 0 + } }, - "openai/gpt-5.4-pro": { - "id": "openai/gpt-5.4-pro", - "name": "GPT 5.4 Pro", - "family": "gpt", - "attachment": true, + "glm-5.1": { + "id": "glm-5.1", + "name": "GLM-5.1", + "family": "glm", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2026-03-05", - "last_updated": "2026-03-06", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2026-03-27", + "last_updated": "2026-03-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 30, "output": 180 }, - "limit": { "context": 1050000, "input": 922000, "output": 128000 } + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 1.4, + "output": 4.4, + "cache_read": 0.26, + "cache_write": 0 + } }, - "openai/gpt-5.4-mini": { - "id": "openai/gpt-5.4-mini", - "name": "GPT 5.4 Mini", - "family": "gpt", - "attachment": true, + "glm-4.5": { + "id": "glm-4.5", + "name": "GLM-4.5", + "family": "glm", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2026-03-17", - "last_updated": "2026-03-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.75, "output": 4.5, "cache_read": 0.075 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 98304 + }, + "cost": { + "input": 0.6, + "output": 2.2, + "cache_read": 0.11, + "cache_write": 0 + } }, - "openai/gpt-5-pro": { - "id": "openai/gpt-5-pro", - "name": "GPT-5 pro", - "family": "gpt", - "attachment": true, + "glm-4.5-air": { + "id": "glm-4.5-air", + "name": "GLM-4.5-Air", + "family": "glm-air", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text", "image"] }, - "open_weights": false, - "cost": { "input": 15, "output": 120 }, - "limit": { "context": 400000, "input": 128000, "output": 272000 } + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 98304 + }, + "cost": { + "input": 0.2, + "output": 1.1, + "cache_read": 0.03, + "cache_write": 0 + } }, - "openai/gpt-5.1-thinking": { - "id": "openai/gpt-5.1-thinking", - "name": "GPT 5.1 Thinking", - "family": "gpt", - "attachment": true, + "glm-5-turbo": { + "id": "glm-5-turbo", + "name": "GLM-5-Turbo", + "family": "glm", + "attachment": false, "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2024-10", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text", "image"] }, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": true, + "release_date": "2026-03-16", + "last_updated": "2026-03-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.13 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 1.2, + "output": 4, + "cache_read": 0.24, + "cache_write": 0 + } }, - "openai/gpt-5.3-codex": { - "id": "openai/gpt-5.3-codex", - "name": "GPT 5.3 Codex", - "family": "gpt", + "glm-4.5v": { + "id": "glm-4.5v", + "name": "GLM-4.5V", + "family": "glm", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2026-02-24", - "last_updated": "2026-02-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "knowledge": "2025-04", + "release_date": "2025-08-11", + "last_updated": "2025-08-11", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 64000, + "output": 16384 + }, + "cost": { + "input": 0.6, + "output": 1.8 + } }, - "openai/gpt-5.1-codex-max": { - "id": "openai/gpt-5.1-codex-max", - "name": "GPT 5.1 Codex Max", - "family": "gpt", - "attachment": true, + "glm-4.6": { + "id": "glm-4.6", + "name": "GLM-4.6", + "family": "glm", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.13 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "knowledge": "2025-04", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 2.2, + "cache_read": 0.11, + "cache_write": 0 + } }, - "openai/codex-mini": { - "id": "openai/codex-mini", - "name": "Codex Mini", - "family": "gpt-codex-mini", + "glm-4.6v": { + "id": "glm-4.6v", + "name": "GLM-4.6V", + "family": "glm", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-05-16", - "last_updated": "2025-05-16", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.5, "output": 6, "cache_read": 0.38 }, - "limit": { "context": 200000, "input": 100000, "output": 100000 } - }, - "openai/gpt-3.5-turbo": { - "id": "openai/gpt-3.5-turbo", - "name": "GPT-3.5 Turbo", - "family": "gpt", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2021-09", - "release_date": "2023-03-01", - "last_updated": "2023-03-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.5, "output": 1.5 }, - "limit": { "context": 16385, "input": 12289, "output": 4096 } + "knowledge": "2025-04", + "release_date": "2025-12-08", + "last_updated": "2025-12-08", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.3, + "output": 0.9 + } }, - "openai/gpt-3.5-turbo-instruct": { - "id": "openai/gpt-3.5-turbo-instruct", - "name": "GPT-3.5 Turbo Instruct", - "family": "gpt", + "glm-4.5-flash": { + "id": "glm-4.5-flash", + "name": "GLM-4.5-Flash", + "family": "glm-flash", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "knowledge": "2021-09", - "release_date": "2023-03-01", - "last_updated": "2023-03-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.5, "output": 2 }, - "limit": { "context": 8192, "input": 4096, "output": 4096 } + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 98304 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "openai/gpt-oss-120b": { - "id": "openai/gpt-oss-120b", - "name": "GPT OSS 120B", - "family": "gpt-oss", + "glm-4.7-flash": { + "id": "glm-4.7-flash", + "name": "GLM-4.7-Flash", + "family": "glm-flash", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-01-19", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.5 }, - "limit": { "context": 131072, "output": 131072 } - }, - "openai/gpt-5.4": { - "id": "openai/gpt-5.4", - "name": "GPT 5.4", - "family": "gpt", - "attachment": true, + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + } + } + }, + "opencode": { + "id": "opencode", + "env": ["OPENCODE_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://opencode.ai/zen/v1", + "name": "OpenCode Zen", + "doc": "https://opencode.ai/docs/zen", + "models": { + "minimax-m2.7": { + "id": "minimax-m2.7", + "name": "MiniMax M2.7", + "family": "minimax", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2026-03-05", - "last_updated": "2026-03-06", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.5, "output": 15, "cache_read": 0.25 }, - "limit": { "context": 1050000, "input": 922000, "output": 128000 } + "knowledge": "2025-01", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.06 + } }, - "openai/gpt-5-chat": { - "id": "openai/gpt-5-chat", - "name": "GPT-5 Chat", - "family": "gpt", + "gpt-5.1-codex-max": { + "id": "gpt-5.1-codex-max", + "name": "GPT-5.1 Codex Max", + "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text", "image"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.13 }, - "limit": { "context": 128000, "input": 111616, "output": 16384 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai" + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "openai/gpt-5.4-nano": { - "id": "openai/gpt-5.4-nano", - "name": "GPT 5.4 Nano", - "family": "gpt", + "claude-haiku-4-5": { + "id": "claude-haiku-4-5", + "name": "Claude Haiku 4.5", + "family": "claude-haiku", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2026-03-17", - "last_updated": "2026-03-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.19999999999999998, "output": 1.25, "cache_read": 0.02 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/anthropic" + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } }, - "openai/gpt-5.3-chat": { - "id": "openai/gpt-5.3-chat", - "name": "GPT-5.3 Chat", - "family": "gpt", + "kimi-k2.5": { + "id": "kimi-k2.5", + "name": "Kimi K2.5", + "family": "kimi", "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2026-03-03", - "last_updated": "2026-03-06", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 128000, "input": 111616, "output": 16384 } + "knowledge": "2024-10", + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.6, + "output": 3, + "cache_read": 0.08 + } }, - "openai/text-embedding-ada-002": { - "id": "openai/text-embedding-ada-002", - "name": "text-embedding-ada-002", - "family": "text-embedding", + "glm-4.7": { + "id": "glm-4.7", + "name": "GLM-4.7", + "family": "glm", "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "release_date": "2022-12-15", - "last_updated": "2022-12-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0 }, - "limit": { "context": 8192, "input": 6656, "output": 1536 } - }, - "openai/gpt-5.2-chat": { - "id": "openai/gpt-5.2-chat", - "name": "GPT-5.2 Chat", - "family": "gpt", - "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.18 }, - "limit": { "context": 128000, "input": 111616, "output": 16384 } + "knowledge": "2025-04", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "status": "deprecated", + "cost": { + "input": 0.6, + "output": 2.2, + "cache_read": 0.1 + } }, - "openai/gpt-5.2": { - "id": "openai/gpt-5.2", - "name": "GPT-5.2", - "family": "gpt", - "attachment": true, + "glm-5": { + "id": "glm-5", + "name": "GLM-5", + "family": "glm", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.18 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "knowledge": "2025-04", + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 1, + "output": 3.2, + "cache_read": 0.2 + } }, - "openai/gpt-4o-mini-search-preview": { - "id": "openai/gpt-4o-mini-search-preview", - "name": "GPT 4o Mini Search Preview", - "family": "gpt-mini", + "glm-4.7-free": { + "id": "glm-4.7-free", + "name": "GLM-4.7 Free", + "family": "glm-free", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2023-09", - "release_date": "2025-01", - "last_updated": "2025-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 128000, "input": 111616, "output": 16384 } + "knowledge": "2025-04", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "status": "deprecated", + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "openai/gpt-5.1-instant": { - "id": "openai/gpt-5.1-instant", - "name": "GPT-5.1 Instant", - "family": "gpt", + "gemini-3.1-pro": { + "id": "gemini-3.1-pro", + "name": "Gemini 3.1 Pro Preview", + "family": "gemini-pro", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text", "image"] }, + "knowledge": "2025-01", + "release_date": "2026-02-19", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.13 }, - "limit": { "context": 128000, "input": 111616, "output": 16384 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "provider": { + "npm": "@ai-sdk/google" + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2, + "tiers": [ + { + "input": 4, + "output": 18, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 4, + "output": 18, + "cache_read": 0.4 + } + } }, - "openai/gpt-oss-safeguard-20b": { - "id": "openai/gpt-oss-safeguard-20b", - "name": "gpt-oss-safeguard-20b", - "family": "gpt-oss", - "attachment": false, + "claude-sonnet-4-6": { + "id": "claude-sonnet-4-6", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-02-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.08, "output": 0.3, "cache_read": 0.04 }, - "limit": { "context": 131072, "input": 65536, "output": 65536 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/anthropic" + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "openai/o3-pro": { - "id": "openai/o3-pro", - "name": "o3 Pro", - "family": "o-pro", + "kimi-k2.5-free": { + "id": "kimi-k2.5-free", + "name": "Kimi K2.5 Free", + "family": "kimi-free", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2024-10", - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 20, "output": 80 }, - "limit": { "context": 200000, "input": 100000, "output": 100000 } - }, - "openai/gpt-oss-20b": { - "id": "openai/gpt-oss-20b", - "name": "GPT OSS 20B", - "family": "gpt-oss", - "attachment": false, - "reasoning": true, - "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, "knowledge": "2024-10", - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.07, "output": 0.3 }, - "limit": { "context": 131072, "input": 98304, "output": 32768 } - }, - "openai/text-embedding-3-small": { - "id": "openai/text-embedding-3-small", - "name": "text-embedding-3-small", - "family": "text-embedding", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "release_date": "2024-01-25", - "last_updated": "2024-01-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.02, "output": 0 }, - "limit": { "context": 8192, "input": 6656, "output": 1536 } + "limit": { + "context": 262144, + "output": 262144 + }, + "status": "deprecated", + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "openai/o3-deep-research": { - "id": "openai/o3-deep-research", - "name": "o3-deep-research", - "family": "o", + "claude-opus-4-7": { + "id": "claude-opus-4-7", + "name": "Claude Opus 4.7", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, "temperature": false, - "knowledge": "2024-10", - "release_date": "2024-06-26", - "last_updated": "2024-06-26", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 10, "output": 40, "cache_read": 2.5 }, - "limit": { "context": 200000, "input": 100000, "output": 100000 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/anthropic" + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "openai/gpt-5.1-codex": { - "id": "openai/gpt-5.1-codex", - "name": "GPT-5.1-Codex", - "family": "gpt", + "gpt-5-nano": { + "id": "gpt-5-nano", + "name": "GPT-5 Nano", + "family": "gpt-nano", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", + "structured_output": true, + "temperature": false, + "knowledge": "2024-05-30", "release_date": "2025-08-07", "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.13 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai" + }, + "cost": { + "input": 0.05, + "output": 0.4, + "cache_read": 0.005 + } }, - "openai/gpt-5.2-pro": { - "id": "openai/gpt-5.2-pro", - "name": "GPT 5.2 ", - "family": "gpt", + "gpt-5.3-codex": { + "id": "gpt-5.3-codex", + "name": "GPT-5.3 Codex", + "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-02-24", + "last_updated": "2026-02-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 21, "output": 168 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai" + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "openai/o4-mini": { - "id": "openai/o4-mini", - "name": "o4-mini", - "family": "o-mini", + "minimax-m2.5-free": { + "id": "minimax-m2.5-free", + "name": "MiniMax M2.5 Free", + "family": "minimax-free", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "provider": { + "npm": "@ai-sdk/anthropic" + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } + }, + "ring-2.6-1t-free": { + "id": "ring-2.6-1t-free", + "name": "Ring 2.6 1T Free", + "family": "ring-1t-free", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2025-06", + "release_date": "2026-05-08", + "last_updated": "2026-05-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262000, + "output": 66000 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "gpt-5.2": { + "id": "gpt-5.2", + "name": "GPT-5.2", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": false, - "knowledge": "2024-05", - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.28 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai" + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "openai/gpt-5-codex": { - "id": "openai/gpt-5-codex", - "name": "GPT-5-Codex", - "family": "gpt-codex", + "deepseek-v4-flash-free": { + "id": "deepseek-v4-flash-free", + "name": "DeepSeek V4 Flash Free", + "family": "deepseek-flash-free", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "temperature": true, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 384000 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "openai/gpt-4.1-nano": { - "id": "openai/gpt-4.1-nano", - "name": "GPT-4.1 nano", - "family": "gpt-nano", - "attachment": true, - "reasoning": false, + "big-pickle": { + "id": "big-pickle", + "name": "Big Pickle", + "family": "big-pickle", + "attachment": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-10-17", + "last_updated": "2025-10-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.03 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "openai/gpt-5-nano": { - "id": "openai/gpt-5-nano", - "name": "GPT-5 Nano", - "family": "gpt-nano", + "claude-opus-4-1": { + "id": "claude-opus-4-1", + "name": "Claude Opus 4.1", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-05-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.05, "output": 0.4, "cache_read": 0.005 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 200000, + "output": 32000 + }, + "provider": { + "npm": "@ai-sdk/anthropic" + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "openai/gpt-4.1-mini": { - "id": "openai/gpt-4.1-mini", - "name": "GPT-4.1 mini", - "family": "gpt-mini", + "qwen3.6-plus": { + "id": "qwen3.6-plus", + "name": "Qwen3.6 Plus", + "family": "qwen3.6", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 1.6, "cache_read": 0.1 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 262144, + "output": 65536 + }, + "provider": { + "npm": "@ai-sdk/anthropic" + }, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.05, + "cache_write": 0.625 + } }, - "openai/o3": { - "id": "openai/o3", - "name": "o3", - "family": "o", + "gpt-5.4-mini": { + "id": "gpt-5.4-mini", + "name": "GPT-5.4 Mini", + "family": "gpt-mini", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": false, - "knowledge": "2024-05", - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8, "cache_read": 0.5 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai" + }, + "cost": { + "input": 0.75, + "output": 4.5, + "cache_read": 0.075 + } }, - "openai/o1": { - "id": "openai/o1", - "name": "o1", - "family": "o", + "claude-3-5-haiku": { + "id": "claude-3-5-haiku", + "name": "Claude Haiku 3.5", + "family": "claude-haiku", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07-31", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "status": "deprecated", + "provider": { + "npm": "@ai-sdk/anthropic" + }, + "cost": { + "input": 0.8, + "output": 4, + "cache_read": 0.08, + "cache_write": 1 + } + }, + "minimax-m2.1": { + "id": "minimax-m2.1", + "name": "MiniMax M2.1", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "status": "deprecated", + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.1 + } + }, + "glm-5.1": { + "id": "glm-5.1", + "name": "GLM-5.1", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2026-04-07", + "last_updated": "2026-04-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 1.4, + "output": 4.4, + "cache_read": 0.26 + } + }, + "gpt-5.4-nano": { + "id": "gpt-5.4-nano", + "name": "GPT-5.4 Nano", + "family": "gpt-nano", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": false, - "knowledge": "2023-09", - "release_date": "2024-12-05", - "last_updated": "2024-12-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 60, "cache_read": 7.5 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai" + }, + "cost": { + "input": 0.2, + "output": 1.25, + "cache_read": 0.02 + } }, - "openai/gpt-4.1": { - "id": "openai/gpt-4.1", - "name": "GPT-4.1", - "family": "gpt", + "gpt-5.2-codex": { + "id": "gpt-5.2-codex", + "name": "GPT-5.2 Codex", + "family": "gpt-codex", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-01-14", + "last_updated": "2026-01-14", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8, "cache_read": 0.5 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai" + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "openai/gpt-4o-mini": { - "id": "openai/gpt-4o-mini", - "name": "GPT-4o mini", - "family": "gpt-mini", + "gpt-5.1-codex-mini": { + "id": "gpt-5.1-codex-mini", + "name": "GPT-5.1 Codex Mini", + "family": "gpt-codex", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": true, - "knowledge": "2023-09", - "release_date": "2024-07-18", - "last_updated": "2024-07-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.6, "cache_read": 0.08 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai" + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.025 + } }, - "openai/gpt-5-mini": { - "id": "openai/gpt-5-mini", - "name": "GPT-5 Mini", - "family": "gpt-mini", + "claude-sonnet-4": { + "id": "claude-sonnet-4", + "name": "Claude Sonnet 4", + "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-05-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.025 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/anthropic" + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75, + "tiers": [ + { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5 + } + } }, - "openai/gpt-4o": { - "id": "openai/gpt-4o", - "name": "GPT-4o", - "family": "gpt", + "gemini-3-flash": { + "id": "gemini-3-flash", + "name": "Gemini 3 Flash", + "family": "gemini-flash", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2023-09", - "release_date": "2024-05-13", - "last_updated": "2024-08-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 10, "cache_read": 1.25 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "provider": { + "npm": "@ai-sdk/google" + }, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.05 + } }, - "openai/gpt-4-turbo": { - "id": "openai/gpt-4-turbo", - "name": "GPT-4 Turbo", - "family": "gpt", - "attachment": true, + "trinity-large-preview-free": { + "id": "trinity-large-preview-free", + "name": "Trinity Large Preview", + "family": "trinity", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": false, "temperature": true, - "knowledge": "2023-12", - "release_date": "2023-11-06", - "last_updated": "2024-04-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 10, "output": 30 }, - "limit": { "context": 128000, "output": 4096 } + "knowledge": "2025-06", + "release_date": "2026-01-28", + "last_updated": "2026-01-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "status": "deprecated", + "cost": { + "input": 0, + "output": 0 + } }, - "openai/gpt-5": { - "id": "openai/gpt-5", - "name": "GPT-5", + "gpt-5.1": { + "id": "gpt-5.1", + "name": "GPT-5.1", "family": "gpt", "attachment": true, "reasoning": true, @@ -39036,5966 +58762,8201 @@ "structured_output": true, "temperature": false, "knowledge": "2024-09-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai" + }, + "cost": { + "input": 1.07, + "output": 8.5, + "cache_read": 0.107 + } }, - "openai/o3-mini": { - "id": "openai/o3-mini", - "name": "o3-mini", - "family": "o-mini", - "attachment": false, + "gpt-5.4-pro": { + "id": "gpt-5.4-pro", + "name": "GPT-5.4 Pro", + "family": "gpt-pro", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": false, - "knowledge": "2024-05", - "release_date": "2024-12-20", - "last_updated": "2025-01-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.55 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai" + }, + "cost": { + "input": 30, + "output": 180, + "cache_read": 30 + } }, - "prime-intellect/intellect-3": { - "id": "prime-intellect/intellect-3", - "name": "INTELLECT 3", - "family": "intellect", + "glm-5-free": { + "id": "glm-5-free", + "name": "GLM-5 Free", + "family": "glm-free", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-11-26", - "last_updated": "2025-11-26", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 1.1 }, - "limit": { "context": 131072, "output": 131072 } - }, - "bfl/flux-pro-1.1": { - "id": "bfl/flux-pro-1.1", - "name": "FLUX1.1 [pro]", - "family": "flux", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "release_date": "2024-10", - "last_updated": "2024-10", - "modalities": { "input": ["text"], "output": ["image"] }, - "open_weights": false, - "limit": { "context": 512, "output": 0 } - }, - "bfl/flux-pro-1.1-ultra": { - "id": "bfl/flux-pro-1.1-ultra", - "name": "FLUX1.1 [pro] Ultra", - "family": "flux", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "release_date": "2024-11", - "last_updated": "2024-11", - "modalities": { "input": ["text"], "output": ["image"] }, - "open_weights": false, - "limit": { "context": 512, "output": 0 } - }, - "bfl/flux-pro-1.0-fill": { - "id": "bfl/flux-pro-1.0-fill", - "name": "FLUX.1 Fill [pro]", - "family": "flux", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "release_date": "2024-10", - "last_updated": "2024-10", - "modalities": { "input": ["text"], "output": ["image"] }, - "open_weights": false, - "limit": { "context": 512, "output": 0 } - }, - "bfl/flux-kontext-max": { - "id": "bfl/flux-kontext-max", - "name": "FLUX.1 Kontext Max", - "family": "flux", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "release_date": "2025-06", - "last_updated": "2025-06", - "modalities": { "input": ["text"], "output": ["image"] }, - "open_weights": false, - "limit": { "context": 512, "output": 0 } - }, - "bfl/flux-kontext-pro": { - "id": "bfl/flux-kontext-pro", - "name": "FLUX.1 Kontext Pro", - "family": "flux", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "release_date": "2025-06", - "last_updated": "2025-06", - "modalities": { "input": ["text"], "output": ["image"] }, - "open_weights": false, - "limit": { "context": 512, "output": 0 } - }, - "cohere/embed-v4.0": { - "id": "cohere/embed-v4.0", - "name": "Embed v4.0", - "family": "cohere-embed", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "release_date": "2025-04-15", - "last_updated": "2025-04-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.12, "output": 0 }, - "limit": { "context": 8192, "output": 1536 } + "knowledge": "2025-04", + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "status": "deprecated", + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "cohere/command-a": { - "id": "cohere/command-a", - "name": "Command A", - "family": "command", - "attachment": false, - "reasoning": false, + "claude-opus-4-5": { + "id": "claude-opus-4-5", + "name": "Claude Opus 4.5", + "family": "claude-opus", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-03-13", - "last_updated": "2025-03-13", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-03-31", + "release_date": "2025-11-24", + "last_updated": "2025-11-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 256000, "output": 8000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/anthropic" + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "kwaipilot/kat-coder-pro-v1": { - "id": "kwaipilot/kat-coder-pro-v1", - "name": "KAT-Coder-Pro V1", - "family": "kat-coder", + "minimax-m2.1-free": { + "id": "minimax-m2.1-free", + "name": "MiniMax M2.1 Free", + "family": "minimax-free", "attachment": false, "reasoning": true, - "tool_call": false, + "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-10-24", - "last_updated": "2025-10-24", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "limit": { "context": 256000, "output": 32000 } + "knowledge": "2025-01", + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "status": "deprecated", + "provider": { + "npm": "@ai-sdk/anthropic" + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "kwaipilot/kat-coder-pro-v2": { - "id": "kwaipilot/kat-coder-pro-v2", - "name": "Kat Coder Pro V2", - "family": "kat-coder", + "qwen3.6-plus-free": { + "id": "qwen3.6-plus-free", + "name": "Qwen3.6 Plus Free", + "family": "qwen-free", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2026-03-27", + "knowledge": "2024-12", + "release_date": "2026-03-30", "last_updated": "2026-03-30", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.06 }, - "limit": { "context": 256000, "output": 256000 } + "limit": { + "context": 1048576, + "output": 64000 + }, + "status": "deprecated", + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "morph/morph-v3-fast": { - "id": "morph/morph-v3-fast", - "name": "Morph v3 Fast", - "family": "morph", + "glm-4.6": { + "id": "glm-4.6", + "name": "GLM-4.6", + "family": "glm", "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "release_date": "2024-08-15", - "last_updated": "2024-08-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.8, "output": 1.2 }, - "limit": { "context": 16000, "output": 16000 } + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "status": "deprecated", + "cost": { + "input": 0.6, + "output": 2.2, + "cache_read": 0.1 + } }, - "morph/morph-v3-large": { - "id": "morph/morph-v3-large", - "name": "Morph v3 Large", - "family": "morph", + "ling-2.6-flash-free": { + "id": "ling-2.6-flash-free", + "name": "Ling 2.6 Flash Free", + "family": "ling-flash-free", "attachment": false, "reasoning": false, - "tool_call": false, - "temperature": false, - "release_date": "2024-08-15", - "last_updated": "2024-08-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.9, "output": 1.9 }, - "limit": { "context": 32000, "output": 32000 } + "tool_call": true, + "temperature": true, + "knowledge": "2025-06", + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262100, + "output": 32800 + }, + "status": "deprecated", + "cost": { + "input": 0, + "output": 0 + } }, - "anthropic/claude-opus-4.6": { - "id": "anthropic/claude-opus-4.6", - "name": "Claude Opus 4.6", - "family": "claude-opus", + "gemini-3-pro": { + "id": "gemini-3-pro", + "name": "Gemini 3 Pro", + "family": "gemini-pro", "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-05", - "release_date": "2026-02", - "last_updated": "2026-02", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-11-18", + "last_updated": "2025-11-18", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 1000000, "output": 128000 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "status": "deprecated", + "provider": { + "npm": "@ai-sdk/google" + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2, + "tiers": [ + { + "input": 4, + "output": 18, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 4, + "output": 18, + "cache_read": 0.4 + } + } }, - "anthropic/claude-haiku-4.5": { - "id": "anthropic/claude-haiku-4.5", - "name": "Claude Haiku 4.5", - "family": "claude-haiku", + "kimi-k2.6": { + "id": "kimi-k2.6", + "name": "Kimi K2.6", + "family": "kimi", "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2025-02-28", - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.1, "cache_write": 1.25 }, - "limit": { "context": 200000, "output": 64000 } + "knowledge": "2024-10", + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.95, + "output": 4, + "cache_read": 0.16 + } }, - "anthropic/claude-sonnet-4.6": { - "id": "anthropic/claude-sonnet-4.6", - "name": "Claude Sonnet 4.6", - "family": "claude-sonnet", + "gpt-5-codex": { + "id": "gpt-5-codex", + "name": "GPT-5 Codex", + "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": true, - "temperature": true, - "knowledge": "2025-08", - "release_date": "2026-02-17", - "last_updated": "2026-02-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-09-15", + "last_updated": "2025-09-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { - "input": 3, - "output": 15, - "cache_read": 0.3, - "cache_write": 3.75, - "context_over_200k": { "input": 6, "output": 22.5, "cache_read": 0.6, "cache_write": 7.5 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 }, - "limit": { "context": 1000000, "output": 128000 } + "provider": { + "npm": "@ai-sdk/openai" + }, + "cost": { + "input": 1.07, + "output": 8.5, + "cache_read": 0.107 + } }, - "anthropic/claude-opus-4.5": { - "id": "anthropic/claude-opus-4.5", - "name": "Claude Opus 4.5", - "family": "claude-opus", + "grok-code": { + "id": "grok-code", + "name": "Grok Code Fast 1", + "family": "grok", "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": true, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-11-24", - "last_updated": "2025-11-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2025-08-20", + "last_updated": "2025-08-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 256000, + "output": 256000 + }, + "status": "deprecated", + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "anthropic/claude-3.5-sonnet-20240620": { - "id": "anthropic/claude-3.5-sonnet-20240620", - "name": "Claude 3.5 Sonnet (2024-06-20)", - "family": "claude-sonnet", - "attachment": true, - "reasoning": false, + "mimo-v2-flash-free": { + "id": "mimo-v2-flash-free", + "name": "MiMo V2 Flash Free", + "family": "mimo-flash-free", + "attachment": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-06-20", - "last_updated": "2024-06-20", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2025-12-16", + "last_updated": "2025-12-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "status": "deprecated", + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } + }, + "gpt-5.3-codex-spark": { + "id": "gpt-5.3-codex-spark", + "name": "GPT-5.3 Codex Spark", + "family": "gpt-codex-spark", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 200000, "output": 8192 } + "limit": { + "context": 128000, + "input": 128000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai" + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "anthropic/claude-opus-4": { - "id": "anthropic/claude-opus-4", - "name": "Claude Opus 4", - "family": "claude-opus", - "attachment": true, + "hy3-preview-free": { + "id": "hy3-preview-free", + "name": "Hy3 preview Free", + "family": "hy3-free", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "knowledge": "2025-06", + "release_date": "2026-04-20", + "last_updated": "2026-04-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 64000 + }, + "status": "deprecated", + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "anthropic/claude-sonnet-4.5": { - "id": "anthropic/claude-sonnet-4.5", - "name": "Claude Sonnet 4.5", - "family": "claude-sonnet", - "attachment": true, + "minimax-m2.5": { + "id": "minimax-m2.5", + "name": "MiniMax M2.5", + "family": "minimax", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "knowledge": "2025-01", + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.06 + } }, - "anthropic/claude-3-haiku": { - "id": "anthropic/claude-3-haiku", - "name": "Claude Haiku 3", - "family": "claude-haiku", - "attachment": true, + "kimi-k2": { + "id": "kimi-k2", + "name": "Kimi K2", + "family": "kimi", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2023-08-31", - "release_date": "2024-03-13", - "last_updated": "2024-03-13", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 1.25, "cache_read": 0.03, "cache_write": 0.3 }, - "limit": { "context": 200000, "output": 4096 } + "knowledge": "2024-10", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "status": "deprecated", + "cost": { + "input": 0.4, + "output": 2.5, + "cache_read": 0.4 + } }, - "anthropic/claude-3.5-sonnet": { - "id": "anthropic/claude-3.5-sonnet", - "name": "Claude Sonnet 3.5 v2", + "claude-sonnet-4-5": { + "id": "claude-sonnet-4-5", + "name": "Claude Sonnet 4.5", "family": "claude-sonnet", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": true, "temperature": true, - "knowledge": "2024-04-30", - "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 8192 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/anthropic" + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75, + "tiers": [ + { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5 + } + } }, - "anthropic/claude-3.5-haiku": { - "id": "anthropic/claude-3.5-haiku", - "name": "Claude Haiku 3.5", - "family": "claude-haiku", - "attachment": true, + "qwen3-coder": { + "id": "qwen3-coder", + "name": "Qwen3 Coder", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-07-31", - "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.8, "output": 4, "cache_read": 0.08, "cache_write": 1 }, - "limit": { "context": 200000, "output": 8192 } + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "status": "deprecated", + "cost": { + "input": 0.45, + "output": 1.8 + } }, - "anthropic/claude-sonnet-4": { - "id": "anthropic/claude-sonnet-4", - "name": "Claude Sonnet 4", - "family": "claude-sonnet", + "gpt-5": { + "id": "gpt-5", + "name": "GPT-5", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai" + }, + "cost": { + "input": 1.07, + "output": 8.5, + "cache_read": 0.107 + } }, - "anthropic/claude-3.7-sonnet": { - "id": "anthropic/claude-3.7-sonnet", - "name": "Claude Sonnet 3.7", - "family": "claude-sonnet", + "qwen3.5-plus": { + "id": "qwen3.5-plus", + "name": "Qwen3.5 Plus", + "family": "qwen3.5", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10-31", - "release_date": "2025-02-19", - "last_updated": "2025-02-19", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-02-16", + "last_updated": "2026-02-16", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 262144, + "output": 65536 + }, + "provider": { + "npm": "@ai-sdk/anthropic" + }, + "cost": { + "input": 0.2, + "output": 1.2, + "cache_read": 0.02, + "cache_write": 0.25 + } }, - "anthropic/claude-opus-4.1": { - "id": "anthropic/claude-opus-4.1", - "name": "Claude Opus 4", - "family": "claude-opus", + "mimo-v2-pro-free": { + "id": "mimo-v2-pro-free", + "name": "MiMo V2 Pro Free", + "family": "mimo-pro-free", "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "knowledge": "2024-12", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1048576, + "output": 64000 + }, + "status": "deprecated", + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "anthropic/claude-3-opus": { - "id": "anthropic/claude-3-opus", - "name": "Claude Opus 3", - "family": "claude-opus", - "attachment": true, - "reasoning": false, + "nemotron-3-super-free": { + "id": "nemotron-3-super-free", + "name": "Nemotron 3 Super Free", + "family": "nemotron-free", + "attachment": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2023-08-31", - "release_date": "2024-02-29", - "last_updated": "2024-02-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 4096 } + "knowledge": "2026-02", + "release_date": "2026-03-11", + "last_updated": "2026-03-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "recraft/recraft-v2": { - "id": "recraft/recraft-v2", - "name": "Recraft V2", - "family": "recraft", - "attachment": false, - "reasoning": false, - "tool_call": false, + "gpt-5.5-pro": { + "id": "gpt-5.5-pro", + "name": "GPT-5.5 Pro", + "family": "gpt-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": false, "temperature": false, - "release_date": "2024-03", - "last_updated": "2024-03", - "modalities": { "input": ["text"], "output": ["image"] }, + "knowledge": "2025-12-01", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 512, "output": 0 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai" + }, + "cost": { + "input": 30, + "output": 180, + "cache_read": 30 + } }, - "recraft/recraft-v3": { - "id": "recraft/recraft-v3", - "name": "Recraft V3", - "family": "recraft", + "kimi-k2-thinking": { + "id": "kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "family": "kimi-thinking", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "status": "deprecated", + "cost": { + "input": 0.4, + "output": 2.5, + "cache_read": 0.4 + } + }, + "gpt-5.1-codex": { + "id": "gpt-5.1-codex", + "name": "GPT-5.1 Codex", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, "temperature": false, - "release_date": "2024-10", - "last_updated": "2024-10", - "modalities": { "input": ["text"], "output": ["image"] }, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 512, "output": 0 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai" + }, + "cost": { + "input": 1.07, + "output": 8.5, + "cache_read": 0.107 + } }, - "deepseek/deepseek-v3.1-terminus": { - "id": "deepseek/deepseek-v3.1-terminus", - "name": "DeepSeek V3.1 Terminus", - "family": "deepseek", - "attachment": false, + "mimo-v2-omni-free": { + "id": "mimo-v2-omni-free", + "name": "MiMo V2 Omni Free", + "family": "mimo-omni-free", + "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-09-22", - "last_updated": "2025-09-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text", "image", "audio", "pdf"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.27, "output": 1 }, - "limit": { "context": 131072, "output": 65536 } + "limit": { + "context": 262144, + "output": 64000 + }, + "status": "deprecated", + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "deepseek/deepseek-v3.2-thinking": { - "id": "deepseek/deepseek-v3.2-thinking", - "name": "DeepSeek V3.2 Thinking", - "family": "deepseek-thinking", - "attachment": false, + "gpt-5.5": { + "id": "gpt-5.5", + "name": "GPT-5.5", + "family": "gpt", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": true, - "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-12-01", + "release_date": "2026-04-23", + "last_updated": "2026-04-23", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.28, "output": 0.42, "cache_read": 0.03 }, - "limit": { "context": 128000, "output": 64000 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai" + }, + "cost": { + "input": 5, + "output": 30, + "cache_read": 0.5, + "context_over_200k": { + "input": 10, + "output": 45, + "cache_read": 1 + }, + "tiers": [ + { + "input": 10, + "output": 45, + "cache_read": 1, + "tier": { + "type": "context", + "size": 272000 + } + } + ] + } }, - "deepseek/deepseek-v3": { - "id": "deepseek/deepseek-v3", - "name": "DeepSeek V3 0324", - "family": "deepseek", - "attachment": false, - "reasoning": false, + "gpt-5.4": { + "id": "gpt-5.4", + "name": "GPT-5.4", + "family": "gpt", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-07", - "release_date": "2024-12-26", - "last_updated": "2024-12-26", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.77, "output": 0.77 }, - "limit": { "context": 163840, "output": 16384 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai" + }, + "cost": { + "input": 2.5, + "output": 15, + "cache_read": 0.25, + "context_over_200k": { + "input": 5, + "output": 22.5, + "cache_read": 0.5 + }, + "tiers": [ + { + "input": 5, + "output": 22.5, + "cache_read": 0.5, + "tier": { + "type": "context", + "size": 272000 + } + } + ] + } }, - "deepseek/deepseek-v3.2-exp": { - "id": "deepseek/deepseek-v3.2-exp", - "name": "DeepSeek V3.2 Exp", - "family": "deepseek", - "attachment": false, + "claude-opus-4-6": { + "id": "claude-opus-4-6", + "name": "Claude Opus 4.6", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-09", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.27, "output": 0.4 }, - "limit": { "context": 163840, "output": 163840 } - }, - "deepseek/deepseek-v3.1": { - "id": "deepseek/deepseek-v3.1", - "name": "DeepSeek-V3.1", - "family": "deepseek", + "limit": { + "context": 1000000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/anthropic" + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } + } + } + }, + "stepfun": { + "id": "stepfun", + "env": ["STEPFUN_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.stepfun.com/v1", + "name": "StepFun", + "doc": "https://platform.stepfun.com/docs/zh/overview/concept", + "models": { + "step-3.5-flash-2603": { + "id": "step-3.5-flash-2603", + "name": "Step 3.5 Flash 2603", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-08-21", - "last_updated": "2025-08-21", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 1 }, - "limit": { "context": 163840, "output": 128000 } + "knowledge": "2025-01", + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "input": 256000, + "output": 256000 + }, + "cost": { + "input": 0.1, + "output": 0.3, + "cache_read": 0.02 + } }, - "deepseek/deepseek-v3.2": { - "id": "deepseek/deepseek-v3.2", - "name": "DeepSeek V3.2", - "family": "deepseek", + "step-1-32k": { + "id": "step-1-32k", + "name": "Step 1 (32K)", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-06", + "release_date": "2025-01-01", + "last_updated": "2026-02-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.27, "output": 0.4, "cache_read": 0.22 }, - "limit": { "context": 163842, "output": 8000 } + "limit": { + "context": 32768, + "input": 32768, + "output": 32768 + }, + "cost": { + "input": 2.05, + "output": 9.59, + "cache_read": 0.41 + } }, - "deepseek/deepseek-r1": { - "id": "deepseek/deepseek-r1", - "name": "DeepSeek-R1", - "family": "deepseek-thinking", + "step-3.5-flash": { + "id": "step-3.5-flash", + "name": "Step 3.5 Flash", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-01-20", - "last_updated": "2025-05-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.35, "output": 5.4 }, - "limit": { "context": 128000, "output": 32768 } + "knowledge": "2025-01", + "release_date": "2026-01-29", + "last_updated": "2026-02-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "input": 256000, + "output": 256000 + }, + "cost": { + "input": 0.096, + "output": 0.288, + "cache_read": 0.019 + } }, - "zai/glm-4.7-flash": { - "id": "zai/glm-4.7-flash", - "name": "GLM 4.7 Flash", - "family": "glm", + "step-2-16k": { + "id": "step-2-16k", + "name": "Step 2 (16K)", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2026-03-13", - "last_updated": "2026-03-13", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-06", + "release_date": "2025-01-01", + "last_updated": "2026-02-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.07, "output": 0.39999999999999997 }, - "limit": { "context": 200000, "output": 131000 } - }, - "zai/glm-5-turbo": { - "id": "zai/glm-5-turbo", - "name": "GLM 5 Turbo", - "family": "glm", + "limit": { + "context": 16384, + "input": 16384, + "output": 8192 + }, + "cost": { + "input": 5.21, + "output": 16.44, + "cache_read": 1.04 + } + } + } + }, + "nebius": { + "id": "nebius", + "env": ["NEBIUS_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.tokenfactory.nebius.com/v1", + "name": "Nebius Token Factory", + "doc": "https://docs.tokenfactory.nebius.com/", + "models": { + "NousResearch/Hermes-4-70B": { + "id": "NousResearch/Hermes-4-70B", + "name": "Hermes-4-70B", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2026-03-15", - "last_updated": "2026-03-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.2, "output": 4, "cache_read": 0.24 }, - "limit": { "context": 202800, "output": 131100 } + "knowledge": "2025-11", + "release_date": "2026-01-30", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "input": 120000, + "output": 8192 + }, + "cost": { + "input": 0.13, + "output": 0.4, + "reasoning": 0.4, + "cache_read": 0.013, + "cache_write": 0.16 + } }, - "zai/glm-4.5": { - "id": "zai/glm-4.5", - "name": "GLM 4.5", - "family": "glm", + "NousResearch/Hermes-4-405B": { + "id": "NousResearch/Hermes-4-405B", + "name": "Hermes-4-405B", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-11", + "release_date": "2026-01-30", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 2.2 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 128000, + "input": 120000, + "output": 8192 + }, + "cost": { + "input": 1, + "output": 3, + "reasoning": 3, + "cache_read": 0.1, + "cache_write": 1.25 + } }, - "zai/glm-4.7-flashx": { - "id": "zai/glm-4.7-flashx", - "name": "GLM 4.7 FlashX", - "family": "glm-flash", + "Qwen/Qwen2.5-VL-72B-Instruct": { + "id": "Qwen/Qwen2.5-VL-72B-Instruct", + "name": "Qwen2.5-VL-72B-Instruct", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2025-01-20", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "input": 120000, + "output": 8192 + }, + "cost": { + "input": 0.25, + "output": 0.75, + "cache_read": 0.025, + "cache_write": 0.31 + } + }, + "Qwen/Qwen3.5-397B-A17B": { + "id": "Qwen/Qwen3.5-397B-A17B", + "name": "Qwen3.5-397B-A17B", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-01", - "last_updated": "2025-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-07", + "release_date": "2025-07-15", + "last_updated": "2026-05-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.06, "output": 0.4, "cache_read": 0.01 }, - "limit": { "context": 200000, "output": 128000 } + "limit": { + "context": 262144, + "input": 250000, + "output": 8192 + }, + "cost": { + "input": 0.6, + "output": 3.6, + "cache_read": 0.06, + "cache_write": 0.75 + } }, - "zai/glm-4.6": { - "id": "zai/glm-4.6", - "name": "GLM 4.6", - "family": "glm", + "Qwen/Qwen3-Embedding-8B": { + "id": "Qwen/Qwen3-Embedding-8B", + "name": "Qwen3-Embedding-8B", + "family": "text-embedding", "attachment": false, - "reasoning": true, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "temperature": false, + "knowledge": "2025-10", + "release_date": "2026-01-10", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "input": 32768, + "output": 0 + }, + "cost": { + "input": 0.01, + "output": 0 + } + }, + "Qwen/Qwen3-30B-A3B-Instruct-2507": { + "id": "Qwen/Qwen3-30B-A3B-Instruct-2507", + "name": "Qwen3-30B-A3B-Instruct-2507", + "attachment": false, + "reasoning": false, "tool_call": true, - "interleaved": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-12", + "release_date": "2026-01-28", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.45, "output": 1.8 }, - "limit": { "context": 200000, "output": 96000 } + "limit": { + "context": 128000, + "input": 120000, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 0.3, + "cache_read": 0.01, + "cache_write": 0.125 + } }, - "zai/glm-4.6v": { - "id": "zai/glm-4.6v", - "name": "GLM-4.6V", - "family": "glm", - "attachment": true, + "Qwen/Qwen3-235B-A22B-Instruct-2507": { + "id": "Qwen/Qwen3-235B-A22B-Instruct-2507", + "name": "Qwen3 235B A22B Instruct 2507", + "family": "qwen", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2025-07", + "release_date": "2025-07-25", + "last_updated": "2025-10-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 0.9, "cache_read": 0.05 }, - "limit": { "context": 128000, "output": 24000 } + "limit": { + "context": 262144, + "output": 8192 + }, + "cost": { + "input": 0.2, + "output": 0.6 + } }, - "zai/glm-5": { - "id": "zai/glm-5", - "name": "GLM-5", - "family": "glm", + "Qwen/Qwen3-32B": { + "id": "Qwen/Qwen3-32B", + "name": "Qwen3-32B", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-12", + "release_date": "2026-01-28", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1, "output": 3.2, "cache_read": 0.2 }, - "limit": { "context": 202800, "output": 131072 } + "limit": { + "context": 128000, + "input": 120000, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 0.3, + "cache_read": 0.01, + "cache_write": 0.125 + } }, - "zai/glm-4.5-air": { - "id": "zai/glm-4.5-air", - "name": "GLM 4.5 Air", - "family": "glm-air", + "Qwen/Qwen3-235B-A22B-Thinking-2507-fast": { + "id": "Qwen/Qwen3-235B-A22B-Thinking-2507-fast", + "name": "Qwen3-235B-A22B-Thinking-2507-fast", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-07", + "release_date": "2025-07-25", + "last_updated": "2026-05-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 1.1 }, - "limit": { "context": 128000, "output": 96000 } + "limit": { + "context": 8000, + "input": 7000, + "output": 8192 + }, + "cost": { + "input": 0.5, + "output": 2, + "cache_read": 0.05, + "cache_write": 0.625 + } }, - "zai/glm-4.5v": { - "id": "zai/glm-4.5v", - "name": "GLM 4.5V", - "family": "glm", - "attachment": true, + "Qwen/Qwen3.5-397B-A17B-fast": { + "id": "Qwen/Qwen3.5-397B-A17B-fast", + "name": "Qwen3.5-397B-A17B-fast", + "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-08", - "release_date": "2025-08-11", - "last_updated": "2025-08-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-07", + "release_date": "2025-07-15", + "last_updated": "2026-05-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 1.8 }, - "limit": { "context": 66000, "output": 66000 } + "limit": { + "context": 8000, + "input": 7000, + "output": 8192 + }, + "cost": { + "input": 0.6, + "output": 3.6, + "cache_read": 0.06, + "cache_write": 0.75 + } }, - "zai/glm-4.7": { - "id": "zai/glm-4.7", - "name": "GLM 4.7", - "family": "glm", + "Qwen/Qwen3-Next-80B-A3B-Thinking-fast": { + "id": "Qwen/Qwen3-Next-80B-A3B-Thinking-fast", + "name": "Qwen3-Next-80B-A3B-Thinking-fast", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.43, "output": 1.75, "cache_read": 0.08 }, - "limit": { "context": 202752, "output": 120000 } + "knowledge": "2025-07", + "release_date": "2025-07-25", + "last_updated": "2026-05-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8000, + "input": 7000, + "output": 8192 + }, + "cost": { + "input": 0.15, + "output": 1.2, + "cache_read": 0.015, + "cache_write": 0.1875 + } }, - "zai/glm-4.6v-flash": { - "id": "zai/glm-4.6v-flash", - "name": "GLM-4.6V-Flash", - "family": "glm", - "attachment": true, + "Qwen/Qwen3-Next-80B-A3B-Thinking": { + "id": "Qwen/Qwen3-Next-80B-A3B-Thinking", + "name": "Qwen3-Next-80B-A3B-Thinking", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "limit": { "context": 128000, "output": 24000 } + "knowledge": "2025-12", + "release_date": "2026-01-28", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "input": 120000, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 1.2, + "reasoning": 1.2, + "cache_read": 0.015, + "cache_write": 0.18 + } }, - "xai/grok-imagine-image": { - "id": "xai/grok-imagine-image", - "name": "Grok Imagine Image", - "family": "grok", + "PrimeIntellect/INTELLECT-3": { + "id": "PrimeIntellect/INTELLECT-3", + "name": "INTELLECT-3", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-01-28", - "last_updated": "2026-02-19", - "modalities": { "input": ["text"], "output": ["text", "image"] }, - "open_weights": false, - "limit": { "context": 0, "output": 0 } + "knowledge": "2025-10", + "release_date": "2026-01-25", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "input": 120000, + "output": 8192 + }, + "cost": { + "input": 0.2, + "output": 1.1, + "cache_read": 0.02, + "cache_write": 0.25 + } }, - "xai/grok-4.20-reasoning-beta": { - "id": "xai/grok-4.20-reasoning-beta", - "name": "Grok 4.20 Beta Reasoning", - "family": "grok", - "attachment": true, + "zai-org/GLM-5": { + "id": "zai-org/GLM-5", + "name": "GLM-5", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2026-03-11", - "last_updated": "2026-03-13", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2026-01", + "release_date": "2026-03-01", + "last_updated": "2026-03-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 6, "cache_read": 0.19999999999999998 }, - "limit": { "context": 2000000, "output": 2000000 } + "limit": { + "context": 200000, + "input": 200000, + "output": 16384 + }, + "cost": { + "input": 1, + "output": 3.2, + "cache_read": 0.1, + "cache_write": 1 + } }, - "xai/grok-4.20-non-reasoning": { - "id": "xai/grok-4.20-non-reasoning", - "name": "Grok 4.20 Non-Reasoning", - "family": "grok", - "attachment": true, + "meta-llama/Llama-3.3-70B-Instruct": { + "id": "meta-llama/Llama-3.3-70B-Instruct", + "name": "Llama-3.3-70B-Instruct", + "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-03-09", - "last_updated": "2026-03-23", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 6, "cache_read": 0.19999999999999998 }, - "limit": { "context": 2000000, "output": 2000000 } + "knowledge": "2025-08", + "release_date": "2025-12-05", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "input": 120000, + "output": 8192 + }, + "cost": { + "input": 0.13, + "output": 0.4, + "cache_read": 0.013, + "cache_write": 0.16 + } }, - "xai/grok-4.1-fast-non-reasoning": { - "id": "xai/grok-4.1-fast-non-reasoning", - "name": "Grok 4.1 Fast Non-Reasoning", - "family": "grok", + "meta-llama/Meta-Llama-3.1-8B-Instruct": { + "id": "meta-llama/Meta-Llama-3.1-8B-Instruct", + "name": "Meta-Llama-3.1-8B-Instruct", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 30000 } + "knowledge": "2024-12", + "release_date": "2024-07-23", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "input": 120000, + "output": 4096 + }, + "cost": { + "input": 0.02, + "output": 0.06, + "cache_read": 0.002, + "cache_write": 0.025 + } }, - "xai/grok-4.1-fast-reasoning": { - "id": "xai/grok-4.1-fast-reasoning", - "name": "Grok 4.1 Fast Reasoning", - "family": "grok", + "nvidia/nemotron-3-super-120b-a12b": { + "id": "nvidia/nemotron-3-super-120b-a12b", + "name": "Nemotron-3-Super-120B-A12B", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 30000 } + "knowledge": "2026-02", + "release_date": "2026-03-11", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "input": 256000, + "output": 32768 + }, + "cost": { + "input": 0.3, + "output": 0.9 + } }, - "xai/grok-4.20-multi-agent-beta": { - "id": "xai/grok-4.20-multi-agent-beta", - "name": "Grok 4.20 Multi Agent Beta", - "family": "grok", + "nvidia/Llama-3_1-Nemotron-Ultra-253B-v1": { + "id": "nvidia/Llama-3_1-Nemotron-Ultra-253B-v1", + "name": "Llama-3.1-Nemotron-Ultra-253B-v1", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-03-11", - "last_updated": "2026-03-13", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 6, "cache_read": 0.19999999999999998 }, - "limit": { "context": 2000000, "output": 2000000 } + "knowledge": "2024-12", + "release_date": "2025-01-15", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "input": 120000, + "output": 4096 + }, + "cost": { + "input": 0.6, + "output": 1.8, + "cache_read": 0.06, + "cache_write": 0.75 + } }, - "xai/grok-4.20-reasoning": { - "id": "xai/grok-4.20-reasoning", - "name": "Grok 4.20 Reasoning", - "family": "grok", - "attachment": true, - "reasoning": true, + "nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B": { + "id": "nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B", + "name": "Nemotron-3-Nano-30B-A3B", + "attachment": false, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-03-09", - "last_updated": "2026-03-23", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 6, "cache_read": 0.19999999999999998 }, - "limit": { "context": 2000000, "output": 2000000 } + "knowledge": "2025-05", + "release_date": "2025-08-10", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32000, + "input": 30000, + "output": 4096 + }, + "cost": { + "input": 0.06, + "output": 0.24, + "cache_read": 0.006, + "cache_write": 0.075 + } }, - "xai/grok-4.20-multi-agent": { - "id": "xai/grok-4.20-multi-agent", - "name": "Grok 4.20 Multi-Agent", - "family": "grok", + "nvidia/Nemotron-3-Nano-Omni": { + "id": "nvidia/Nemotron-3-Nano-Omni", + "name": "Nemotron-3-Nano-Omni", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-03-09", - "last_updated": "2026-03-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 6, "cache_read": 0.19999999999999998 }, - "limit": { "context": 2000000, "output": 2000000 } + "knowledge": "2025-01", + "release_date": "2025-01-20", + "last_updated": "2026-05-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 65536, + "input": 60000, + "output": 8192 + }, + "cost": { + "input": 0.06, + "output": 0.24, + "cache_read": 0.006, + "cache_write": 0.075 + } }, - "xai/grok-4-fast-reasoning": { - "id": "xai/grok-4-fast-reasoning", - "name": "Grok 4 Fast Reasoning", - "family": "grok", + "deepseek-ai/DeepSeek-V3.2-fast": { + "id": "deepseek-ai/DeepSeek-V3.2-fast", + "name": "DeepSeek-V3.2-fast", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 256000 } + "knowledge": "2025-01", + "release_date": "2025-01-27", + "last_updated": "2026-05-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8000, + "input": 7000, + "output": 8192 + }, + "cost": { + "input": 0.4, + "output": 2, + "cache_read": 0.04, + "cache_write": 0.5 + } }, - "xai/grok-imagine-image-pro": { - "id": "xai/grok-imagine-image-pro", - "name": "Grok Imagine Image Pro", - "family": "grok", + "deepseek-ai/DeepSeek-V3.2": { + "id": "deepseek-ai/DeepSeek-V3.2", + "name": "DeepSeek-V3.2", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2026-01-28", - "last_updated": "2026-02-19", - "modalities": { "input": ["text"], "output": ["text", "image"] }, - "open_weights": false, - "limit": { "context": 0, "output": 0 } + "knowledge": "2025-11", + "release_date": "2026-01-20", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 163000, + "input": 160000, + "output": 16384 + }, + "cost": { + "input": 0.3, + "output": 0.45, + "reasoning": 0.45, + "cache_read": 0.03, + "cache_write": 0.375 + } }, - "xai/grok-4.20-non-reasoning-beta": { - "id": "xai/grok-4.20-non-reasoning-beta", - "name": "Grok 4.20 Beta Non-Reasoning", - "family": "grok", - "attachment": true, - "reasoning": false, + "openai/gpt-oss-120b-fast": { + "id": "openai/gpt-oss-120b-fast", + "name": "gpt-oss-120b-fast", + "attachment": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-03-11", - "last_updated": "2026-03-13", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 6, "cache_read": 0.19999999999999998 }, - "limit": { "context": 2000000, "output": 2000000 } + "knowledge": "2025-06", + "release_date": "2025-06-10", + "last_updated": "2026-05-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8000, + "input": 7000, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 0.5, + "cache_read": 0.01, + "cache_write": 0.125 + } }, - "xai/grok-3": { - "id": "xai/grok-3", - "name": "Grok 3", - "family": "grok", + "openai/gpt-oss-120b": { + "id": "openai/gpt-oss-120b", + "name": "gpt-oss-120b", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.75 }, - "limit": { "context": 131072, "output": 8192 } + "knowledge": "2025-09", + "release_date": "2026-01-10", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "input": 124000, + "output": 8192 + }, + "cost": { + "input": 0.15, + "output": 0.6, + "reasoning": 0.6, + "cache_read": 0.015, + "cache_write": 0.18 + } }, - "xai/grok-3-fast": { - "id": "xai/grok-3-fast", - "name": "Grok 3 Fast", - "family": "grok", + "google/gemma-2-2b-it": { + "id": "google/gemma-2-2b-it", + "name": "Gemma-2-2b-it", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, + "structured_output": false, "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 1.25 }, - "limit": { "context": 131072, "output": 8192 } + "knowledge": "2024-06", + "release_date": "2024-07-31", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "input": 8000, + "output": 4096 + }, + "cost": { + "input": 0.02, + "output": 0.06, + "cache_read": 0.002, + "cache_write": 0.025 + } }, - "xai/grok-2-vision": { - "id": "xai/grok-2-vision", - "name": "Grok 2 Vision", - "family": "grok", + "google/gemma-3-27b-it": { + "id": "google/gemma-3-27b-it", + "name": "Gemma-3-27b-it", "attachment": true, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-08", - "release_date": "2024-08-20", - "last_updated": "2024-08-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 10, "cache_read": 2 }, - "limit": { "context": 8192, "output": 4096 } + "knowledge": "2025-10", + "release_date": "2026-01-20", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 110000, + "input": 100000, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 0.3, + "cache_read": 0.01, + "cache_write": 0.125 + } }, - "xai/grok-3-mini": { - "id": "xai/grok-3-mini", - "name": "Grok 3 Mini", - "family": "grok", - "attachment": false, + "moonshotai/Kimi-K2.5-fast": { + "id": "moonshotai/Kimi-K2.5-fast", + "name": "Kimi-K2.5-fast", + "family": "kimi", + "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 0.5, "reasoning": 0.5, "cache_read": 0.075 }, - "limit": { "context": 131072, "output": 8192 } + "knowledge": "2025-06", + "release_date": "2025-12-15", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "input": 256000, + "output": 8192 + }, + "cost": { + "input": 0.5, + "output": 2.5, + "cache_read": 0.05, + "cache_write": 0.625 + } }, - "xai/grok-3-mini-fast": { - "id": "xai/grok-3-mini-fast", - "name": "Grok 3 Mini Fast", - "family": "grok", - "attachment": false, + "moonshotai/Kimi-K2.5": { + "id": "moonshotai/Kimi-K2.5", + "name": "Kimi-K2.5", + "family": "kimi", + "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.6, "output": 4, "reasoning": 4, "cache_read": 0.15 }, - "limit": { "context": 131072, "output": 8192 } + "knowledge": "2025-06", + "release_date": "2025-12-15", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "input": 256000, + "output": 8192 + }, + "cost": { + "input": 0.5, + "output": 2.5, + "reasoning": 2.5, + "cache_read": 0.05, + "cache_write": 0.625 + } }, - "xai/grok-code-fast-1": { - "id": "xai/grok-code-fast-1", - "name": "Grok Code Fast 1", - "family": "grok", + "MiniMaxAI/MiniMax-M2.5": { + "id": "MiniMaxAI/MiniMax-M2.5", + "name": "MiniMax-M2.5", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2023-10", - "release_date": "2025-08-28", - "last_updated": "2025-08-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 1.5, "cache_read": 0.02 }, - "limit": { "context": 256000, "output": 10000 } + "knowledge": "2025-01", + "release_date": "2025-01-20", + "last_updated": "2026-05-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 196608, + "input": 190000, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.03, + "cache_write": 0.375 + } }, - "xai/grok-4": { - "id": "xai/grok-4", - "name": "Grok 4", - "family": "grok", + "MiniMaxAI/MiniMax-M2.5-fast": { + "id": "MiniMaxAI/MiniMax-M2.5-fast", + "name": "MiniMax-M2.5-fast", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "reasoning": 15, "cache_read": 0.75 }, - "limit": { "context": 256000, "output": 64000 } + "knowledge": "2025-01", + "release_date": "2025-01-20", + "last_updated": "2026-05-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8000, + "input": 7000, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.03, + "cache_write": 0.375 + } }, - "xai/grok-4-fast-non-reasoning": { - "id": "xai/grok-4-fast-non-reasoning", - "name": "Grok 4 Fast (Non-Reasoning)", - "family": "grok", + "deepseek-ai/DeepSeek-V4-Pro": { + "id": "deepseek-ai/DeepSeek-V4-Pro", + "name": "DeepSeek V4 Pro", + "family": "deepseek-thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 384000 + }, + "cost": { + "input": 1.75, + "output": 3.5, + "cache_read": 0.15 + } + } + } + }, + "poe": { + "id": "poe", + "env": ["POE_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.poe.com/v1", + "name": "Poe", + "doc": "https://creator.poe.com/docs/external-applications/openai-compatible-api", + "models": { + "topazlabs-co/topazlabs": { + "id": "topazlabs-co/topazlabs", + "name": "TopazLabs", + "family": "topazlabs", "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-09-19", - "last_updated": "2025-09-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "release_date": "2024-12-03", + "last_updated": "2024-12-03", + "modalities": { + "input": ["text"], + "output": ["image"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 204, + "output": 0 + } }, - "nvidia/nemotron-3-super-120b-a12b": { - "id": "nvidia/nemotron-3-super-120b-a12b", - "name": "NVIDIA Nemotron 3 Super 120B A12B", - "family": "nemotron", - "attachment": false, - "reasoning": false, - "tool_call": false, + "novita/kimi-k2.5": { + "id": "novita/kimi-k2.5", + "name": "Kimi-K2.5", + "attachment": true, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2026-03-18", - "last_updated": "2026-03-30", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.65 }, - "limit": { "context": 256000, "output": 32000 } + "limit": { + "context": 128000, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 3, + "cache_read": 0.1 + } }, - "nvidia/nemotron-nano-12b-v2-vl": { - "id": "nvidia/nemotron-nano-12b-v2-vl", - "name": "Nvidia Nemotron Nano 12B V2 VL", - "family": "nemotron", + "novita/glm-4.7": { + "id": "novita/glm-4.7", + "name": "glm-4.7", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-12", - "last_updated": "2024-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.6 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 205000, + "output": 131072 + }, + "status": "deprecated" }, - "nvidia/nemotron-nano-9b-v2": { - "id": "nvidia/nemotron-nano-9b-v2", - "name": "Nvidia Nemotron Nano 9B V2", - "family": "nemotron", - "attachment": false, + "novita/glm-5": { + "id": "novita/glm-5", + "name": "GLM-5", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-08-18", - "last_updated": "2025-08-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-15", + "last_updated": "2026-02-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.04, "output": 0.16 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 205000, + "output": 131072 + }, + "cost": { + "input": 1, + "output": 3.2, + "cache_read": 0.2 + } }, - "nvidia/nemotron-3-nano-30b-a3b": { - "id": "nvidia/nemotron-3-nano-30b-a3b", - "name": "Nemotron 3 Nano 30B A3B", - "family": "nemotron", - "attachment": false, + "novita/minimax-m2.1": { + "id": "novita/minimax-m2.1", + "name": "minimax-m2.1", + "attachment": true, "reasoning": true, - "tool_call": false, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-12", - "last_updated": "2024-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": false, + "release_date": "2025-12-26", + "last_updated": "2025-12-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.06, "output": 0.24 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 205000, + "output": 131072 + } }, - "google/text-embedding-005": { - "id": "google/text-embedding-005", - "name": "Text Embedding 005", - "family": "text-embedding", - "attachment": false, + "novita/glm-4.6": { + "id": "novita/glm-4.6", + "name": "GLM-4.6", + "family": "glm", + "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": false, - "release_date": "2024-08", - "last_updated": "2024-08", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.03, "output": 0 }, - "limit": { "context": 8192, "output": 1536 } + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 0, + "output": 0 + } }, - "google/gemini-2.5-flash-lite": { - "id": "google/gemini-2.5-flash-lite", - "name": "Gemini 2.5 Flash Lite", - "family": "gemini-flash-lite", + "novita/kimi-k2.6": { + "id": "novita/kimi-k2.6", + "name": "Kimi-K2.6", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.01 }, - "limit": { "context": 1048576, "output": 65536 } + "knowledge": "2025-04", + "release_date": "2026-04-20", + "last_updated": "2026-05-02", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "input": 262144, + "output": 262144 + }, + "cost": { + "input": 0.96, + "output": 4.04, + "cache_read": 0.16 + } }, - "google/gemini-2.5-flash-lite-preview-09-2025": { - "id": "google/gemini-2.5-flash-lite-preview-09-2025", - "name": "Gemini 2.5 Flash Lite Preview 09-25", - "family": "gemini-flash-lite", + "novita/glm-4.6v": { + "id": "novita/glm-4.6v", + "name": "glm-4.6v", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-12-09", + "last_updated": "2025-12-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.01 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 131000, + "output": 32768 + } }, - "google/gemini-3.1-pro-preview": { - "id": "google/gemini-3.1-pro-preview", - "name": "Gemini 3.1 Pro Preview", - "family": "gemini", + "novita/deepseek-v3.2": { + "id": "novita/deepseek-v3.2", + "name": "DeepSeek-V3.2", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2026-02-19", - "last_updated": "2026-02-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 12, "cache_read": 0.2 }, - "limit": { "context": 1000000, "output": 64000 } + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 0 + }, + "cost": { + "input": 0.27, + "output": 0.4, + "cache_read": 0.13 + } }, - "google/gemini-3-pro-preview": { - "id": "google/gemini-3-pro-preview", - "name": "Gemini 3 Pro Preview", - "family": "gemini-pro", + "novita/glm-4.7-flash": { + "id": "novita/glm-4.7-flash", + "name": "glm-4.7-flash", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-11-18", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { - "input": 2, - "output": 12, - "cache_read": 0.2, - "context_over_200k": { "input": 4, "output": 18, "cache_read": 0.4 } - }, - "limit": { "context": 1000000, "output": 64000 } - }, - "google/imagen-4.0-fast-generate-001": { - "id": "google/imagen-4.0-fast-generate-001", - "name": "Imagen 4 Fast", - "family": "imagen", - "attachment": false, - "reasoning": false, - "tool_call": false, "temperature": false, - "release_date": "2025-06", - "last_updated": "2025-06", - "modalities": { "input": ["text"], "output": ["image"] }, + "release_date": "2026-01-19", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 480, "output": 0 } + "limit": { + "context": 200000, + "output": 65500 + } }, - "google/imagen-4.0-generate-001": { - "id": "google/imagen-4.0-generate-001", - "name": "Imagen 4", - "family": "imagen", - "attachment": false, - "reasoning": false, - "tool_call": false, + "novita/glm-4.7-n": { + "id": "novita/glm-4.7-n", + "name": "glm-4.7-n", + "attachment": true, + "reasoning": true, + "tool_call": true, "temperature": false, - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text"], "output": ["image"] }, + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 480, "output": 0 } + "limit": { + "context": 205000, + "output": 131072 + } }, - "google/gemini-2.5-flash-preview-09-2025": { - "id": "google/gemini-2.5-flash-preview-09-2025", - "name": "Gemini 2.5 Flash Preview 09-25", - "family": "gemini-flash", + "novita/kimi-k2-thinking": { + "id": "novita/kimi-k2-thinking", + "name": "kimi-k2-thinking", + "family": "kimi", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-11-07", + "last_updated": "2025-11-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 2.5, "cache_read": 0.03, "cache_write": 0.383 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 256000, + "output": 0 + } }, - "google/text-multilingual-embedding-002": { - "id": "google/text-multilingual-embedding-002", - "name": "Text Multilingual Embedding 002", - "family": "text-embedding", - "attachment": false, + "fireworks-ai/kimi-k2.5-fw": { + "id": "fireworks-ai/kimi-k2.5-fw", + "name": "Kimi-K2.5-FW", + "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": false, - "release_date": "2024-03", - "last_updated": "2024-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.03, "output": 0 }, - "limit": { "context": 8192, "output": 1536 } + "limit": { + "context": 262144, + "input": 245760, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "google/gemini-3.1-flash-lite-preview": { - "id": "google/gemini-3.1-flash-lite-preview", - "name": "Gemini 3.1 Flash Lite Preview", - "family": "gemini", + "empiriolabs/deepseek-v4-pro-el": { + "id": "empiriolabs/deepseek-v4-pro-el", + "name": "DeepSeek-V4-Pro-EL", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2026-03-03", - "last_updated": "2026-03-06", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 1.5, "cache_read": 0.025, "cache_write": 1 }, - "limit": { "context": 1000000, "output": 65000 } + "release_date": "2026-04-24", + "last_updated": "2026-05-02", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "input": 1000000, + "output": 384000 + }, + "cost": { + "input": 1.67, + "output": 3.33 + } }, - "google/gemini-3.1-flash-image-preview": { - "id": "google/gemini-3.1-flash-image-preview", - "name": "Gemini 3.1 Flash Image Preview (Nano Banana 2)", - "family": "gemini", + "empiriolabs/deepseek-v4-flash-el": { + "id": "empiriolabs/deepseek-v4-flash-el", + "name": "DeepSeek-V4-Flash-EL", "attachment": true, "reasoning": true, - "tool_call": false, - "temperature": true, - "release_date": "2026-02-26", - "last_updated": "2026-03-06", - "modalities": { "input": ["text", "image"], "output": ["text", "image"] }, - "open_weights": false, - "cost": { "input": 0.5, "output": 3 }, - "limit": { "context": 131072, "output": 32768 } + "tool_call": true, + "release_date": "2026-04-24", + "last_updated": "2026-05-02", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "input": 1000000, + "output": 384000 + }, + "cost": { + "input": 0.14, + "output": 0.28 + } }, - "google/gemini-2.5-flash-image": { - "id": "google/gemini-2.5-flash-image", - "name": "Nano Banana (Gemini 2.5 Flash Image)", - "family": "gemini-flash", - "attachment": false, + "elevenlabs/elevenlabs-v2.5-turbo": { + "id": "elevenlabs/elevenlabs-v2.5-turbo", + "name": "ElevenLabs-v2.5-Turbo", + "family": "elevenlabs", + "attachment": true, "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-03-20", - "last_updated": "2025-03-20", - "modalities": { "input": ["text"], "output": ["text", "image"] }, + "tool_call": true, + "temperature": false, + "release_date": "2024-10-28", + "last_updated": "2024-10-28", + "modalities": { + "input": ["text"], + "output": ["audio"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 2.5 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 128000, + "output": 0 + } }, - "google/gemini-embedding-001": { - "id": "google/gemini-embedding-001", - "name": "Gemini Embedding 001", - "family": "gemini-embedding", - "attachment": false, + "elevenlabs/elevenlabs-v3": { + "id": "elevenlabs/elevenlabs-v3", + "name": "ElevenLabs-v3", + "family": "elevenlabs", + "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": false, - "release_date": "2025-05-20", - "last_updated": "2025-05-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-06-05", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text"], + "output": ["audio"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0 }, - "limit": { "context": 8192, "output": 1536 } + "limit": { + "context": 128000, + "output": 0 + } }, - "google/gemini-2.5-flash-image-preview": { - "id": "google/gemini-2.5-flash-image-preview", - "name": "Nano Banana Preview (Gemini 2.5 Flash Image Preview)", - "family": "gemini-flash", - "attachment": false, + "elevenlabs/elevenlabs-music": { + "id": "elevenlabs/elevenlabs-music", + "name": "ElevenLabs-Music", + "family": "elevenlabs", + "attachment": true, "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-03-20", - "last_updated": "2025-03-20", - "modalities": { "input": ["text"], "output": ["text", "image"] }, + "tool_call": true, + "temperature": false, + "release_date": "2025-08-29", + "last_updated": "2025-08-29", + "modalities": { + "input": ["text"], + "output": ["audio"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 2.5 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 2000, + "output": 0 + } }, - "google/gemini-3-pro-image": { - "id": "google/gemini-3-pro-image", - "name": "Nano Banana Pro (Gemini 3 Pro Image)", - "family": "gemini-pro", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-09", - "last_updated": "2025-09", - "modalities": { "input": ["text"], "output": ["text", "image"] }, + "cerebras/gpt-oss-120b-cs": { + "id": "cerebras/gpt-oss-120b-cs", + "name": "GPT-OSS-120B-CS", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2025-08-06", + "last_updated": "2025-08-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 120 }, - "limit": { "context": 65536, "output": 32768 } + "limit": { + "context": 128000, + "output": 0 + }, + "cost": { + "input": 0.35, + "output": 0.75 + } }, - "google/gemini-embedding-2": { - "id": "google/gemini-embedding-2", - "name": "Gemini Embedding 2", - "family": "gemini-embedding", - "attachment": false, + "cerebras/llama-3.1-8b-cs": { + "id": "cerebras/llama-3.1-8b-cs", + "name": "Llama-3.1-8B-CS", + "attachment": true, "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2026-03-10", - "last_updated": "2026-03-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": false, + "release_date": "2025-05-13", + "last_updated": "2025-05-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 0, "output": 0 } + "limit": { + "context": 128000, + "output": 0 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } }, - "google/imagen-4.0-ultra-generate-001": { - "id": "google/imagen-4.0-ultra-generate-001", - "name": "Imagen 4 Ultra", - "family": "imagen", - "attachment": false, - "reasoning": false, - "tool_call": false, + "cerebras/qwen3-32b-cs": { + "id": "cerebras/qwen3-32b-cs", + "name": "qwen3-32b-cs", + "attachment": true, + "reasoning": true, + "tool_call": true, "temperature": false, - "release_date": "2025-05-24", - "last_updated": "2025-05-24", - "modalities": { "input": ["text"], "output": ["image"] }, + "release_date": "2025-05-15", + "last_updated": "2025-05-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 480, "output": 0 } + "limit": { + "context": 0, + "output": 0 + }, + "status": "deprecated" }, - "google/gemini-3-flash": { - "id": "google/gemini-3-flash", - "name": "Gemini 3 Flash", - "family": "gemini-flash", + "cerebras/qwen3-235b-2507-cs": { + "id": "cerebras/qwen3-235b-2507-cs", + "name": "qwen3-235b-2507-cs", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-08-06", + "last_updated": "2025-08-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 3, "cache_read": 0.05 }, - "limit": { "context": 1000000, "output": 64000 } + "limit": { + "context": 0, + "output": 0 + }, + "status": "deprecated" }, - "google/gemini-2.0-flash": { - "id": "google/gemini-2.0-flash", - "name": "Gemini 2.0 Flash", - "family": "gemini-flash", + "cerebras/llama-3.3-70b-cs": { + "id": "cerebras/llama-3.3-70b-cs", + "name": "llama-3.3-70b-cs", + "attachment": true, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-05-13", + "last_updated": "2025-05-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 0, + "output": 0 + }, + "status": "deprecated" + }, + "stabilityai/stablediffusionxl": { + "id": "stabilityai/stablediffusionxl", + "name": "StableDiffusionXL", + "family": "stable-diffusion", "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2024-06", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "temperature": false, + "release_date": "2023-07-09", + "last_updated": "2023-07-09", + "modalities": { + "input": ["text", "image"], + "output": ["image"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.025 }, - "limit": { "context": 1048576, "output": 8192 } + "limit": { + "context": 200, + "output": 0 + } }, - "google/gemini-2.5-flash": { - "id": "google/gemini-2.5-flash", - "name": "Gemini 2.5 Flash", - "family": "gemini-flash", + "xai/grok-code-fast-1": { + "id": "xai/grok-code-fast-1", + "name": "Grok Code Fast 1", + "family": "grok", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-03-20", - "last_updated": "2025-06-05", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-08-22", + "last_updated": "2025-08-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 2.5, "cache_read": 0.075, "input_audio": 1 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 256000, + "output": 128000 + }, + "cost": { + "input": 0.2, + "output": 1.5, + "cache_read": 0.02 + } }, - "google/gemini-2.5-pro": { - "id": "google/gemini-2.5-pro", - "name": "Gemini 2.5 Pro", - "family": "gemini-pro", + "xai/grok-4-fast-reasoning": { + "id": "xai/grok-4-fast-reasoning", + "name": "Grok-4-Fast-Reasoning", + "family": "grok", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-03-20", - "last_updated": "2025-06-05", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-09-16", + "last_updated": "2025-09-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.31 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 2000000, + "output": 128000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } }, - "google/gemini-2.0-flash-lite": { - "id": "google/gemini-2.0-flash-lite", - "name": "Gemini 2.0 Flash Lite", - "family": "gemini-flash-lite", + "xai/grok-4.1-fast-non-reasoning": { + "id": "xai/grok-4.1-fast-non-reasoning", + "name": "Grok-4.1-Fast-Non-Reasoning", + "family": "grok", "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2024-06", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-11-19", + "last_updated": "2025-11-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.075, "output": 0.3 }, - "limit": { "context": 1048576, "output": 8192 } + "limit": { + "context": 2000000, + "output": 30000 + } }, - "amazon/titan-embed-text-v2": { - "id": "amazon/titan-embed-text-v2", - "name": "Titan Text Embeddings V2", - "family": "titan-embed", - "attachment": false, - "reasoning": false, - "tool_call": false, + "xai/grok-4": { + "id": "xai/grok-4", + "name": "Grok-4", + "family": "grok", + "attachment": true, + "reasoning": true, + "tool_call": true, "temperature": false, - "release_date": "2024-04", - "last_updated": "2024-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-07-10", + "last_updated": "2025-07-10", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.02, "output": 0 }, - "limit": { "context": 8192, "output": 1536 } + "limit": { + "context": 256000, + "output": 128000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.75 + } }, - "amazon/nova-2-lite": { - "id": "amazon/nova-2-lite", - "name": "Nova 2 Lite", - "family": "nova", + "xai/grok-3-mini": { + "id": "xai/grok-3-mini", + "name": "Grok 3 Mini", + "family": "grok", "attachment": true, "reasoning": true, - "tool_call": false, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": true, + "temperature": false, + "release_date": "2025-04-11", + "last_updated": "2025-04-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 2.5 }, - "limit": { "context": 1000000, "output": 1000000 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 0.5, + "cache_read": 0.075 + } }, - "amazon/nova-lite": { - "id": "amazon/nova-lite", - "name": "Nova Lite", - "family": "nova-lite", + "xai/grok-4.20-multi-agent": { + "id": "xai/grok-4.20-multi-agent", + "name": "Grok-4.20-Multi-Agent", "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-12-03", - "last_updated": "2024-12-03", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "temperature": false, + "release_date": "2026-03-13", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.06, "output": 0.24, "cache_read": 0.015 }, - "limit": { "context": 300000, "output": 8192 } + "limit": { + "context": 128000, + "output": 0 + }, + "cost": { + "input": 2, + "output": 6, + "cache_read": 0.2 + } }, - "amazon/nova-pro": { - "id": "amazon/nova-pro", - "name": "Nova Pro", - "family": "nova-pro", + "xai/grok-3": { + "id": "xai/grok-3", + "name": "Grok 3", + "family": "grok", "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-12-03", - "last_updated": "2024-12-03", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-04-11", + "last_updated": "2025-04-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.8, "output": 3.2, "cache_read": 0.2 }, - "limit": { "context": 300000, "output": 8192 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.75 + } }, - "amazon/nova-micro": { - "id": "amazon/nova-micro", - "name": "Nova Micro", - "family": "nova-micro", - "attachment": false, + "xai/grok-4-fast-non-reasoning": { + "id": "xai/grok-4-fast-non-reasoning", + "name": "Grok-4-Fast-Non-Reasoning", + "family": "grok", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-12-03", - "last_updated": "2024-12-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-09-16", + "last_updated": "2025-09-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.035, "output": 0.14, "cache_read": 0.00875 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 2000000, + "output": 128000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } }, - "perplexity/sonar-reasoning": { - "id": "perplexity/sonar-reasoning", - "name": "Sonar Reasoning", - "family": "sonar-reasoning", - "attachment": false, + "xai/grok-4.1-fast-reasoning": { + "id": "xai/grok-4.1-fast-reasoning", + "name": "Grok-4.1-Fast-Reasoning", + "family": "grok", + "attachment": true, "reasoning": true, - "tool_call": false, - "temperature": true, - "knowledge": "2025-09", - "release_date": "2025-02-19", - "last_updated": "2025-02-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": false, + "release_date": "2025-11-19", + "last_updated": "2025-11-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 5 }, - "limit": { "context": 127000, "output": 8000 } + "limit": { + "context": 2000000, + "output": 30000 + } }, - "perplexity/sonar": { - "id": "perplexity/sonar", - "name": "Sonar", - "family": "sonar", + "runwayml/runway": { + "id": "runwayml/runway", + "name": "Runway", + "family": "runway", "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2025-02", - "release_date": "2025-02-19", - "last_updated": "2025-02-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1, "output": 1 }, - "limit": { "context": 127000, "output": 8000 } - }, - "perplexity/sonar-reasoning-pro": { - "id": "perplexity/sonar-reasoning-pro", - "name": "Sonar Reasoning Pro", - "family": "sonar-reasoning", - "attachment": false, - "reasoning": true, - "tool_call": false, - "temperature": true, - "knowledge": "2025-09", - "release_date": "2025-02-19", - "last_updated": "2025-02-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2024-10-11", + "last_updated": "2024-10-11", + "modalities": { + "input": ["text", "image"], + "output": ["video"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8 }, - "limit": { "context": 127000, "output": 8000 } + "limit": { + "context": 256, + "output": 0 + } }, - "perplexity/sonar-pro": { - "id": "perplexity/sonar-pro", - "name": "Sonar Pro", - "family": "sonar-pro", + "runwayml/runway-gen-4-turbo": { + "id": "runwayml/runway-gen-4-turbo", + "name": "Runway-Gen-4-Turbo", + "family": "runway", "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2025-09", - "release_date": "2025-02-19", - "last_updated": "2025-02-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 200000, "output": 8000 } - }, - "voyage/voyage-code-3": { - "id": "voyage/voyage-code-3", - "name": "voyage-code-3", - "family": "voyage", - "attachment": false, - "reasoning": false, - "tool_call": false, "temperature": false, - "release_date": "2024-09", - "last_updated": "2024-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-05-09", + "last_updated": "2025-05-09", + "modalities": { + "input": ["text", "image"], + "output": ["video"] + }, "open_weights": false, - "cost": { "input": 0.18, "output": 0 }, - "limit": { "context": 8192, "output": 1536 } + "limit": { + "context": 256, + "output": 0 + } }, - "voyage/voyage-3.5-lite": { - "id": "voyage/voyage-3.5-lite", - "name": "voyage-3.5-lite", - "family": "voyage", - "attachment": false, - "reasoning": false, - "tool_call": false, + "openai/gpt-5.1-codex-max": { + "id": "openai/gpt-5.1-codex-max", + "name": "GPT-5.1-Codex-Max", + "attachment": true, + "reasoning": true, + "tool_call": true, "temperature": false, - "release_date": "2025-05-20", - "last_updated": "2025-05-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-08", + "last_updated": "2025-12-08", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.02, "output": 0 }, - "limit": { "context": 8192, "output": 1536 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.1, + "output": 9, + "cache_read": 0.11 + } }, - "voyage/voyage-code-2": { - "id": "voyage/voyage-code-2", - "name": "voyage-code-2", - "family": "voyage", - "attachment": false, + "openai/sora-2-pro": { + "id": "openai/sora-2-pro", + "name": "Sora-2-Pro", + "family": "sora", + "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": false, - "release_date": "2024-01", - "last_updated": "2024-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.12, "output": 0 }, - "limit": { "context": 8192, "output": 1536 } - }, - "voyage/voyage-4-lite": { - "id": "voyage/voyage-4-lite", - "name": "voyage-4-lite", - "family": "voyage", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2026-03-06", - "last_updated": "2026-03-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-10-06", + "last_updated": "2025-10-06", + "modalities": { + "input": ["text", "image"], + "output": ["video"] + }, "open_weights": false, - "limit": { "context": 32000, "output": 0 } + "limit": { + "context": 0, + "output": 0 + } }, - "voyage/voyage-finance-2": { - "id": "voyage/voyage-finance-2", - "name": "voyage-finance-2", - "family": "voyage", - "attachment": false, + "openai/chatgpt-4o-latest": { + "id": "openai/chatgpt-4o-latest", + "name": "ChatGPT-4o-Latest", + "family": "gpt", + "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": false, - "release_date": "2024-03", - "last_updated": "2024-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-08-14", + "last_updated": "2024-08-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.12, "output": 0 }, - "limit": { "context": 8192, "output": 1536 } + "limit": { + "context": 128000, + "output": 8192 + }, + "status": "deprecated", + "cost": { + "input": 4.5, + "output": 14 + } }, - "voyage/voyage-law-2": { - "id": "voyage/voyage-law-2", - "name": "voyage-law-2", - "family": "voyage", - "attachment": false, + "openai/gpt-5-chat": { + "id": "openai/gpt-5-chat", + "name": "GPT-5-Chat", + "family": "gpt-codex", + "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": false, - "release_date": "2024-03", - "last_updated": "2024-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.12, "output": 0 }, - "limit": { "context": 8192, "output": 1536 } - }, - "voyage/voyage-4": { - "id": "voyage/voyage-4", - "name": "voyage-4", - "family": "voyage", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2026-03-06", - "last_updated": "2026-03-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 32000, "output": 0 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.1, + "output": 9, + "cache_read": 0.11 + } }, - "voyage/voyage-3-large": { - "id": "voyage/voyage-3-large", - "name": "voyage-3-large", - "family": "voyage", - "attachment": false, - "reasoning": false, - "tool_call": false, + "openai/gpt-5.2-pro": { + "id": "openai/gpt-5.2-pro", + "name": "GPT-5.2-Pro", + "attachment": true, + "reasoning": true, + "tool_call": true, "temperature": false, - "release_date": "2024-09", - "last_updated": "2024-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.18, "output": 0 }, - "limit": { "context": 8192, "output": 1536 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 19, + "output": 150 + } }, - "voyage/voyage-3.5": { - "id": "voyage/voyage-3.5", - "name": "voyage-3.5", - "family": "voyage", - "attachment": false, + "openai/gpt-4o-aug": { + "id": "openai/gpt-4o-aug", + "name": "GPT-4o-Aug", + "family": "gpt", + "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": false, - "release_date": "2025-05-20", - "last_updated": "2025-05-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.06, "output": 0 }, - "limit": { "context": 8192, "output": 1536 } - }, - "voyage/voyage-4-large": { - "id": "voyage/voyage-4-large", - "name": "voyage-4-large", - "family": "voyage", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2026-03-06", - "last_updated": "2026-03-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-11-21", + "last_updated": "2024-11-21", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 32000, "output": 0 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 2.2, + "output": 9, + "cache_read": 1.1 + } }, - "arcee-ai/trinity-mini": { - "id": "arcee-ai/trinity-mini", - "name": "Trinity Mini", - "family": "trinity", - "attachment": false, + "openai/gpt-image-2": { + "id": "openai/gpt-image-2", + "name": "GPT-Image-2", + "attachment": true, "reasoning": false, "tool_call": false, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-12", - "last_updated": "2025-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image"], + "output": ["image"] + }, "open_weights": false, - "cost": { "input": 0.05, "output": 0.15 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 0, + "output": 0 + }, + "cost": { + "input": 5.0505, + "output": 32.3232, + "cache_read": 1.2626 + } }, - "arcee-ai/trinity-large-preview": { - "id": "arcee-ai/trinity-large-preview", - "name": "Trinity Large Preview", - "family": "trinity", - "attachment": false, + "openai/gpt-4-classic-0314": { + "id": "openai/gpt-4-classic-0314", + "name": "GPT-4-Classic-0314", + "family": "gpt", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-01", - "last_updated": "2025-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2024-08-26", + "last_updated": "2024-08-26", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 1 }, - "limit": { "context": 131000, "output": 131000 } + "limit": { + "context": 8192, + "output": 4096 + }, + "status": "deprecated", + "cost": { + "input": 27, + "output": 54 + } }, - "bytedance/seed-1.6": { - "id": "bytedance/seed-1.6", - "name": "Seed 1.6", - "family": "seed", - "attachment": false, + "openai/gpt-5-mini": { + "id": "openai/gpt-5-mini", + "name": "GPT-5-mini", + "family": "gpt-mini", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-09", - "last_updated": "2025-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-06-25", + "last_updated": "2025-06-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.05 }, - "limit": { "context": 256000, "output": 32000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.22, + "output": 1.8, + "cache_read": 0.022 + } }, - "bytedance/seed-1.8": { - "id": "bytedance/seed-1.8", - "name": "Seed 1.8", - "family": "seed", - "attachment": false, + "openai/gpt-5-nano": { + "id": "openai/gpt-5-nano", + "name": "GPT-5-nano", + "family": "gpt-nano", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-10", - "last_updated": "2025-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.05 }, - "limit": { "context": 256000, "output": 64000 } - }, - "minimax/minimax-m2": { - "id": "minimax/minimax-m2", - "name": "MiniMax M2", - "family": "minimax", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-10-27", - "last_updated": "2025-10-27", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.27, "output": 1.15, "cache_read": 0.03, "cache_write": 0.38 }, - "limit": { "context": 262114, "output": 262114 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.045, + "output": 0.36, + "cache_read": 0.0045 + } }, - "minimax/minimax-m2.1": { - "id": "minimax/minimax-m2.1", - "name": "MiniMax M2.1", - "family": "minimax", - "attachment": false, + "openai/gpt-5.3-codex": { + "id": "openai/gpt-5.3-codex", + "name": "GPT-5.3-Codex", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-10-27", - "last_updated": "2025-10-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2026-02-10", + "last_updated": "2026-02-10", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.03, "cache_write": 0.38 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.6, + "output": 13, + "cache_read": 0.16 + } }, - "minimax/minimax-m2.7": { - "id": "minimax/minimax-m2.7", - "name": "Minimax M2.7", - "family": "minimax", + "openai/gpt-4-turbo": { + "id": "openai/gpt-4-turbo", + "name": "GPT-4-Turbo", + "family": "gpt", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "temperature": true, - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.06, "cache_write": 0.375 }, - "limit": { "context": 204800, "output": 131000 } + "temperature": false, + "release_date": "2023-09-13", + "last_updated": "2023-09-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 9, + "output": 27 + } }, - "minimax/minimax-m2.1-lightning": { - "id": "minimax/minimax-m2.1-lightning", - "name": "MiniMax M2.1 Lightning", - "family": "minimax", - "attachment": false, + "openai/gpt-5.2": { + "id": "openai/gpt-5.2", + "name": "GPT-5.2", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-10-27", - "last_updated": "2025-10-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-12-08", + "last_updated": "2025-12-08", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 2.4, "cache_read": 0.03, "cache_write": 0.38 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.6, + "output": 13, + "cache_read": 0.16 + } }, - "minimax/minimax-m2.7-highspeed": { - "id": "minimax/minimax-m2.7-highspeed", - "name": "MiniMax M2.7 High Speed", - "family": "minimax", + "openai/o3-pro": { + "id": "openai/o3-pro", + "name": "o3-pro", + "family": "o-pro", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.4, "cache_read": 0.06, "cache_write": 0.375 }, - "limit": { "context": 204800, "output": 131100 } + "temperature": false, + "release_date": "2025-06-10", + "last_updated": "2025-06-10", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 18, + "output": 72 + } }, - "minimax/minimax-m2.5": { - "id": "minimax/minimax-m2.5", - "name": "MiniMax M2.5", - "family": "minimax", - "attachment": false, + "openai/o3-mini-high": { + "id": "openai/o3-mini-high", + "name": "o3-mini-high", + "family": "o-mini", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-01-31", + "last_updated": "2025-01-31", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.03, "cache_write": 0.375 }, - "limit": { "context": 204800, "output": 131000 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 0.99, + "output": 4 + } }, - "minimax/minimax-m2.5-highspeed": { - "id": "minimax/minimax-m2.5-highspeed", - "name": "MiniMax M2.5 High Speed", - "family": "minimax", - "attachment": false, - "reasoning": true, + "openai/gpt-4o-mini": { + "id": "openai/gpt-4o-mini", + "name": "GPT-4o-mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": false, "tool_call": true, - "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-03-13", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.6, "output": 2.4, "cache_read": 0.03, "cache_write": 0.375 }, - "limit": { "context": 0, "output": 0 } + "limit": { + "context": 124096, + "output": 4096 + }, + "cost": { + "input": 0.14, + "output": 0.54, + "cache_read": 0.068 + } }, - "xiaomi/mimo-v2-pro": { - "id": "xiaomi/mimo-v2-pro", - "name": "MiMo V2 Pro", - "family": "mimo", - "attachment": false, + "openai/o4-mini-deep-research": { + "id": "openai/o4-mini-deep-research", + "name": "o4-mini-deep-research", + "family": "o-mini", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2026-03-18", - "last_updated": "2026-03-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-06-27", + "last_updated": "2025-06-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 3, "cache_read": 0.19999999999999998 }, - "limit": { "context": 1000000, "output": 128000 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.8, + "output": 7.2, + "cache_read": 0.45 + } }, - "xiaomi/mimo-v2-flash": { - "id": "xiaomi/mimo-v2-flash", - "name": "MiMo V2 Flash", - "family": "mimo", - "attachment": false, + "openai/gpt-5.4-mini": { + "id": "openai/gpt-5.4-mini", + "name": "GPT-5.4-Mini", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2026-03-12", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.29 }, - "limit": { "context": 262144, "output": 32000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.68, + "output": 4, + "cache_read": 0.068 + } }, - "vercel/v0-1.5-md": { - "id": "vercel/v0-1.5-md", - "name": "v0-1.5-md", - "family": "v0", + "openai/dall-e-3": { + "id": "openai/dall-e-3", + "name": "DALL-E-3", + "family": "dall-e", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "temperature": true, - "release_date": "2025-06-09", - "last_updated": "2025-06-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "release_date": "2023-11-06", + "last_updated": "2023-11-06", + "modalities": { + "input": ["text"], + "output": ["image"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 128000, "output": 32000 } + "limit": { + "context": 800, + "output": 0 + } }, - "vercel/v0-1.0-md": { - "id": "vercel/v0-1.0-md", - "name": "v0-1.0-md", - "family": "v0", + "openai/o4-mini": { + "id": "openai/o4-mini", + "name": "o4-mini", + "family": "o-mini", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 128000, "output": 32000 } - }, - "moonshotai/kimi-k2-thinking": { - "id": "moonshotai/kimi-k2-thinking", - "name": "Kimi K2 Thinking", - "family": "kimi-thinking", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": true, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-11-06", - "last_updated": "2025-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.47, "output": 2, "cache_read": 0.14 }, - "limit": { "context": 216144, "output": 216144 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 0.99, + "output": 4, + "cache_read": 0.25 + } }, - "moonshotai/kimi-k2.5": { - "id": "moonshotai/kimi-k2.5", - "name": "Kimi K2.5", - "family": "kimi", + "openai/gpt-5.4-nano": { + "id": "openai/gpt-5.4-nano", + "name": "GPT-5.4-Nano", "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-01-26", - "last_updated": "2026-01-26", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 1.2 }, - "limit": { "context": 262144, "output": 262144 } - }, - "moonshotai/kimi-k2-turbo": { - "id": "moonshotai/kimi-k2-turbo", - "name": "Kimi K2 Turbo", - "family": "kimi", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2026-03-11", + "last_updated": "2026-03-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.4, "output": 10 }, - "limit": { "context": 256000, "output": 16384 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.18, + "output": 1.1, + "cache_read": 0.018 + } }, - "moonshotai/kimi-k2-0905": { - "id": "moonshotai/kimi-k2-0905", - "name": "Kimi K2 0905", - "family": "kimi", - "attachment": false, + "openai/gpt-image-1": { + "id": "openai/gpt-image-1", + "name": "GPT-Image-1", + "family": "gpt", + "attachment": true, "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": false, + "release_date": "2025-03-31", + "last_updated": "2025-03-31", + "modalities": { + "input": ["text", "image"], + "output": ["image"] + }, "open_weights": false, - "cost": { "input": 0.6, "output": 2.5 }, - "limit": { "context": 131072, "output": 16384 } + "limit": { + "context": 128000, + "output": 0 + } }, - "moonshotai/kimi-k2-thinking-turbo": { - "id": "moonshotai/kimi-k2-thinking-turbo", - "name": "Kimi K2 Thinking Turbo", - "family": "kimi-thinking", - "attachment": false, + "openai/gpt-5.2-codex": { + "id": "openai/gpt-5.2-codex", + "name": "GPT-5.2-Codex", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": true, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-11-06", - "last_updated": "2025-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2026-01-14", + "last_updated": "2026-01-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.15, "output": 8, "cache_read": 0.15 }, - "limit": { "context": 262114, "output": 262114 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.6, + "output": 13, + "cache_read": 0.16 + } }, - "moonshotai/kimi-k2": { - "id": "moonshotai/kimi-k2", - "name": "Kimi K2 Instruct", - "family": "kimi", - "attachment": false, - "reasoning": false, + "openai/gpt-5.1-codex-mini": { + "id": "openai/gpt-5.1-codex-mini", + "name": "GPT-5.1-Codex-Mini", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-07-14", - "last_updated": "2025-07-14", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1, "output": 3 }, - "limit": { "context": 131072, "output": 16384 }, - "status": "deprecated" + "temperature": false, + "release_date": "2025-11-12", + "last_updated": "2025-11-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.22, + "output": 1.8, + "cache_read": 0.022 + } }, - "alibaba/qwen-3-32b": { - "id": "alibaba/qwen-3-32b", - "name": "Qwen 3.32B", - "family": "qwen", - "attachment": false, + "openai/gpt-5.1": { + "id": "openai/gpt-5.1", + "name": "GPT-5.1", + "family": "gpt", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-11-12", + "last_updated": "2025-11-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 40960, "output": 16384 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.1, + "output": 9, + "cache_read": 0.11 + } }, - "alibaba/qwen3-embedding-8b": { - "id": "alibaba/qwen3-embedding-8b", - "name": "Qwen3 Embedding 8B", - "family": "qwen", - "attachment": false, + "openai/gpt-image-1-mini": { + "id": "openai/gpt-image-1-mini", + "name": "GPT-Image-1-Mini", + "family": "gpt", + "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": false, - "release_date": "2025-06-05", - "last_updated": "2025-06-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-26", + "last_updated": "2025-08-26", + "modalities": { + "input": ["text", "image"], + "output": ["image"] + }, "open_weights": false, - "cost": { "input": 0.05, "output": 0 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 0, + "output": 0 + } }, - "alibaba/qwen3.5-plus": { - "id": "alibaba/qwen3.5-plus", - "name": "Qwen 3.5 Plus", - "family": "qwen", + "openai/o1": { + "id": "openai/o1", + "name": "o1", + "family": "o", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2026-02-16", - "last_updated": "2026-02-19", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": false, + "release_date": "2024-12-18", + "last_updated": "2024-12-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 2.4, "cache_read": 0.04, "cache_write": 0.5 }, - "limit": { "context": 1000000, "output": 64000 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 14, + "output": 54 + } }, - "alibaba/qwen3-coder-next": { - "id": "alibaba/qwen3-coder-next", - "name": "Qwen3 Coder Next", - "family": "qwen", - "attachment": false, + "openai/gpt-5.4-pro": { + "id": "openai/gpt-5.4-pro", + "name": "GPT-5.4-Pro", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2025-07-22", - "last_updated": "2026-02-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image"], + "output": ["image"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 1.2 }, - "limit": { "context": 256000, "output": 256000 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 27, + "output": 160 + } }, - "alibaba/qwen3-max-preview": { - "id": "alibaba/qwen3-max-preview", - "name": "Qwen3 Max Preview", - "family": "qwen", - "attachment": false, + "openai/gpt-3.5-turbo": { + "id": "openai/gpt-3.5-turbo", + "name": "GPT-3.5-Turbo", + "family": "gpt", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-23", - "last_updated": "2025-09-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2023-09-13", + "last_updated": "2023-09-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.2, "output": 6, "cache_read": 0.24 }, - "limit": { "context": 262144, "output": 32768 } + "limit": { + "context": 16384, + "output": 2048 + }, + "cost": { + "input": 0.45, + "output": 1.4 + } }, - "alibaba/qwen3-coder": { - "id": "alibaba/qwen3-coder", - "name": "Qwen3 Coder 480B A35B Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, + "openai/o3-deep-research": { + "id": "openai/o3-deep-research", + "name": "o3-deep-research", + "family": "o", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-06-27", + "last_updated": "2025-06-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.38, "output": 1.53 }, - "limit": { "context": 262144, "output": 66536 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 9, + "output": 36, + "cache_read": 2.2 + } }, - "alibaba/qwen3-embedding-0.6b": { - "id": "alibaba/qwen3-embedding-0.6b", - "name": "Qwen3 Embedding 0.6B", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": false, + "openai/o3-mini": { + "id": "openai/o3-mini", + "name": "o3-mini", + "family": "o-mini", + "attachment": true, + "reasoning": true, + "tool_call": true, "temperature": false, - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-01-31", + "last_updated": "2025-01-31", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.01, "output": 0 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 0.99, + "output": 4 + } }, - "alibaba/qwen-3-235b": { - "id": "alibaba/qwen-3-235b", - "name": "Qwen3 235B A22B Instruct 2507", - "family": "qwen", - "attachment": false, - "reasoning": false, + "openai/o1-pro": { + "id": "openai/o1-pro", + "name": "o1-pro", + "family": "o-pro", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-03-19", + "last_updated": "2025-03-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.13, "output": 0.6 }, - "limit": { "context": 40960, "output": 16384 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 140, + "output": 540 + } }, - "alibaba/qwen3-vl-instruct": { - "id": "alibaba/qwen3-vl-instruct", - "name": "Qwen3 VL Instruct", - "family": "qwen", + "openai/gpt-4o-search": { + "id": "openai/gpt-4o-search", + "name": "GPT-4o-Search", + "family": "gpt", "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-24", - "last_updated": "2025-09-24", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.7, "output": 2.8 }, - "limit": { "context": 131072, "output": 129024 } - }, - "alibaba/qwen3-next-80b-a3b-thinking": { - "id": "alibaba/qwen3-next-80b-a3b-thinking", - "name": "Qwen3 Next 80B A3B Thinking", - "family": "qwen", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-09", - "release_date": "2025-09-12", - "last_updated": "2025-09-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 1.5 }, - "limit": { "context": 131072, "output": 65536 } + "temperature": false, + "release_date": "2025-03-11", + "last_updated": "2025-03-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 2.2, + "output": 9 + } }, - "alibaba/qwen3-235b-a22b-thinking": { - "id": "alibaba/qwen3-235b-a22b-thinking", - "name": "Qwen3 235B A22B Thinking 2507", - "family": "qwen", + "openai/gpt-5-codex": { + "id": "openai/gpt-5-codex", + "name": "GPT-5-Codex", + "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-09-23", + "last_updated": "2025-09-23", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 2.9 }, - "limit": { "context": 262114, "output": 262114 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.1, + "output": 9 + } }, - "alibaba/qwen3-max-thinking": { - "id": "alibaba/qwen3-max-thinking", - "name": "Qwen 3 Max Thinking", - "family": "qwen", - "attachment": false, + "openai/gpt-5.4": { + "id": "openai/gpt-5.4", + "name": "GPT-5.4", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-01", - "last_updated": "2025-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1.2, "output": 6, "cache_read": 0.24 }, - "limit": { "context": 256000, "output": 65536 } - }, - "alibaba/qwen3-next-80b-a3b-instruct": { - "id": "alibaba/qwen3-next-80b-a3b-instruct", - "name": "Qwen3 Next 80B A3B Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-12", - "last_updated": "2025-09-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.09, "output": 1.1 }, - "limit": { "context": 262144, "output": 32768 } - }, - "alibaba/qwen3-embedding-4b": { - "id": "alibaba/qwen3-embedding-4b", - "name": "Qwen3 Embedding 4B", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": false, "temperature": false, - "release_date": "2025-06-05", - "last_updated": "2025-06-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-26", + "last_updated": "2026-02-26", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["image"] + }, "open_weights": false, - "cost": { "input": 0.02, "output": 0 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 2.2, + "output": 14, + "cache_read": 0.22 + } }, - "alibaba/qwen-3-30b": { - "id": "alibaba/qwen-3-30b", - "name": "Qwen3-30B-A3B", - "family": "qwen", - "attachment": false, + "openai/gpt-5.3-codex-spark": { + "id": "openai/gpt-5.3-codex-spark", + "name": "GPT-5.3-Codex-Spark", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2026-03-04", + "last_updated": "2026-03-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.08, "output": 0.29 }, - "limit": { "context": 40960, "output": 16384 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "alibaba/qwen3-coder-plus": { - "id": "alibaba/qwen3-coder-plus", - "name": "Qwen3 Coder Plus", - "family": "qwen", - "attachment": false, + "openai/gpt-3.5-turbo-raw": { + "id": "openai/gpt-3.5-turbo-raw", + "name": "GPT-3.5-Turbo-Raw", + "family": "gpt", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1, "output": 5 }, - "limit": { "context": 1000000, "output": 1000000 } + "temperature": false, + "release_date": "2023-09-27", + "last_updated": "2023-09-27", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 4524, + "output": 2048 + }, + "cost": { + "input": 0.45, + "output": 1.4 + } }, - "alibaba/qwen3-max": { - "id": "alibaba/qwen3-max", - "name": "Qwen3 Max", - "family": "qwen", - "attachment": false, + "openai/gpt-4.1-nano": { + "id": "openai/gpt-4.1-nano", + "name": "GPT-4.1-nano", + "family": "gpt-nano", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-23", - "last_updated": "2025-09-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-04-15", + "last_updated": "2025-04-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.2, "output": 6 }, - "limit": { "context": 262144, "output": 32768 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.09, + "output": 0.36, + "cache_read": 0.022 + } }, - "alibaba/qwen3-coder-30b-a3b": { - "id": "alibaba/qwen3-coder-30b-a3b", - "name": "Qwen 3 Coder 30B A3B Instruct", - "family": "qwen", - "attachment": false, + "openai/o3": { + "id": "openai/o3", + "name": "o3", + "family": "o", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.07, "output": 0.27 }, - "limit": { "context": 160000, "output": 32768 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.8, + "output": 7.2, + "cache_read": 0.45 + } }, - "alibaba/qwen3.5-flash": { - "id": "alibaba/qwen3.5-flash", - "name": "Qwen 3.5 Flash", - "family": "qwen", + "openai/gpt-5-pro": { + "id": "openai/gpt-5-pro", + "name": "GPT-5-Pro", + "family": "gpt-pro", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2026-02-24", - "last_updated": "2026-02-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-10-06", + "last_updated": "2025-10-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.001, "cache_write": 0.125 }, - "limit": { "context": 1000000, "output": 64000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 14, + "output": 110 + } }, - "alibaba/qwen-3-14b": { - "id": "alibaba/qwen-3-14b", - "name": "Qwen3-14B", - "family": "qwen", - "attachment": false, - "reasoning": true, + "openai/sora-2": { + "id": "openai/sora-2", + "name": "Sora-2", + "family": "sora", + "attachment": true, + "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-10-06", + "last_updated": "2025-10-06", + "modalities": { + "input": ["text", "image"], + "output": ["video"] + }, "open_weights": false, - "cost": { "input": 0.06, "output": 0.24 }, - "limit": { "context": 40960, "output": 16384 } + "limit": { + "context": 0, + "output": 0 + } }, - "alibaba/qwen3-vl-thinking": { - "id": "alibaba/qwen3-vl-thinking", - "name": "Qwen3 VL Thinking", - "family": "qwen", + "openai/gpt-4o": { + "id": "openai/gpt-4o", + "name": "GPT-4o", + "family": "gpt", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2025-09", - "release_date": "2025-09-24", - "last_updated": "2025-09-24", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.7, "output": 8.4 }, - "limit": { "context": 131072, "output": 129024 } + "temperature": false, + "release_date": "2024-05-13", + "last_updated": "2024-05-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 8192 + } }, - "mistral/mistral-embed": { - "id": "mistral/mistral-embed", - "name": "Mistral Embed", - "family": "mistral-embed", - "attachment": false, - "reasoning": false, - "tool_call": false, + "openai/gpt-5": { + "id": "openai/gpt-5", + "name": "GPT-5", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, "temperature": false, - "release_date": "2023-12-11", - "last_updated": "2023-12-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0 }, - "limit": { "context": 8192, "output": 1536 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.1, + "output": 9, + "cache_read": 0.11 + } }, - "mistral/devstral-small": { - "id": "mistral/devstral-small", - "name": "Devstral Small 1.1", - "family": "devstral", - "attachment": false, + "openai/gpt-5.2-instant": { + "id": "openai/gpt-5.2-instant", + "name": "GPT-5.2-Instant", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-05-07", - "last_updated": "2025-05-07", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 128000, "output": 64000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.6, + "output": 13, + "cache_read": 0.16 + } }, - "mistral/mistral-large-3": { - "id": "mistral/mistral-large-3", - "name": "Mistral Large 3", - "family": "mistral-large", + "openai/gpt-4o-mini-search": { + "id": "openai/gpt-4o-mini-search", + "name": "GPT-4o-mini-Search", + "family": "gpt-mini", "attachment": true, "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-12-02", - "last_updated": "2025-12-02", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": true, + "temperature": false, + "release_date": "2025-03-11", + "last_updated": "2025-03-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 1.5 }, - "limit": { "context": 256000, "output": 256000 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.14, + "output": 0.54 + } }, - "mistral/codestral-embed": { - "id": "mistral/codestral-embed", - "name": "Codestral Embed", - "family": "codestral-embed", - "attachment": false, + "openai/gpt-image-1.5": { + "id": "openai/gpt-image-1.5", + "name": "gpt-image-1.5", + "attachment": true, "reasoning": false, "tool_call": false, "temperature": false, - "release_date": "2025-05-28", - "last_updated": "2025-05-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-16", + "last_updated": "2025-12-16", + "modalities": { + "input": ["text", "image"], + "output": ["image"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0 }, - "limit": { "context": 8192, "output": 1536 } + "limit": { + "context": 128000, + "output": 0 + } }, - "mistral/mistral-nemo": { - "id": "mistral/mistral-nemo", - "name": "Mistral Nemo", - "family": "mistral-nemo", - "attachment": false, + "openai/gpt-3.5-turbo-instruct": { + "id": "openai/gpt-3.5-turbo-instruct", + "name": "GPT-3.5-Turbo-Instruct", + "family": "gpt", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-07-01", - "last_updated": "2024-07-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2023-09-20", + "last_updated": "2023-09-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.04, "output": 0.17 }, - "limit": { "context": 60288, "output": 16000 } + "limit": { + "context": 3500, + "output": 1024 + }, + "cost": { + "input": 1.4, + "output": 1.8 + } }, - "mistral/mistral-medium": { - "id": "mistral/mistral-medium", - "name": "Mistral Medium 3.1", - "family": "mistral-medium", + "openai/gpt-4.1": { + "id": "openai/gpt-4.1", + "name": "GPT-4.1", + "family": "gpt", "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-05-07", - "last_updated": "2025-05-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 1.8, + "output": 7.2, + "cache_read": 0.45 + } + }, + "openai/gpt-5.1-instant": { + "id": "openai/gpt-5.1-instant", + "name": "GPT-5.1-Instant", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2025-11-12", + "last_updated": "2025-11-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 128000, "output": 64000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.1, + "output": 9, + "cache_read": 0.11 + } }, - "mistral/devstral-2": { - "id": "mistral/devstral-2", - "name": "Devstral 2", - "family": "devstral", - "attachment": false, + "openai/gpt-4.1-mini": { + "id": "openai/gpt-4.1-mini", + "name": "GPT-4.1-mini", + "family": "gpt-mini", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-12-09", - "last_updated": "2025-12-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-04-15", + "last_updated": "2025-04-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 256000, "output": 256000 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.36, + "output": 1.4, + "cache_read": 0.09 + } }, - "mistral/devstral-small-2": { - "id": "mistral/devstral-small-2", - "name": "Devstral Small 2", - "family": "devstral", - "attachment": false, + "openai/gpt-4-classic": { + "id": "openai/gpt-4-classic", + "name": "GPT-4-Classic", + "family": "gpt", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-05-07", - "last_updated": "2025-05-07", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2024-03-25", + "last_updated": "2024-03-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 256000, "output": 256000 } + "limit": { + "context": 8192, + "output": 4096 + }, + "status": "deprecated", + "cost": { + "input": 27, + "output": 54 + } }, - "mistral/ministral-14b": { - "id": "mistral/ministral-14b", - "name": "Ministral 14B", - "family": "ministral", + "openai/gpt-5.1-codex": { + "id": "openai/gpt-5.1-codex", + "name": "GPT-5.1-Codex", + "family": "gpt-codex", "attachment": true, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2025-11-12", + "last_updated": "2025-11-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 256000, "output": 256000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.1, + "output": 9, + "cache_read": 0.11 + } }, - "mistral/pixtral-12b": { - "id": "mistral/pixtral-12b", - "name": "Pixtral 12B", - "family": "pixtral", + "openai/gpt-5.3-instant": { + "id": "openai/gpt-5.3-instant", + "name": "GPT-5.3-Instant", "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-09", - "release_date": "2024-09-01", - "last_updated": "2024-09-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.15 }, - "limit": { "context": 128000, "output": 128000 } + "temperature": false, + "release_date": "2026-03-03", + "last_updated": "2026-03-03", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 111616, + "output": 16384 + }, + "cost": { + "input": 1.6, + "output": 13, + "cache_read": 0.16 + } }, - "mistral/codestral": { - "id": "mistral/codestral", - "name": "Codestral (latest)", - "family": "codestral", - "attachment": false, + "google/veo-3-fast": { + "id": "google/veo-3-fast", + "name": "Veo-3-Fast", + "family": "veo", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-05-29", - "last_updated": "2025-01-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 0.9 }, - "limit": { "context": 256000, "output": 4096 } + "temperature": false, + "release_date": "2025-10-13", + "last_updated": "2025-10-13", + "modalities": { + "input": ["text"], + "output": ["video"] + }, + "open_weights": false, + "limit": { + "context": 480, + "output": 0 + } }, - "mistral/ministral-8b": { - "id": "mistral/ministral-8b", - "name": "Ministral 8B (latest)", - "family": "ministral", - "attachment": false, + "google/veo-3.1-fast": { + "id": "google/veo-3.1-fast", + "name": "Veo-3.1-Fast", + "family": "veo", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-10-01", - "last_updated": "2024-10-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.1 }, - "limit": { "context": 128000, "output": 128000 } + "temperature": false, + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image"], + "output": ["video"] + }, + "open_weights": false, + "limit": { + "context": 480, + "output": 0 + } }, - "mistral/mistral-small": { - "id": "mistral/mistral-small", - "name": "Mistral Small (latest)", - "family": "mistral-small", + "google/gemini-3.1-pro": { + "id": "google/gemini-3.1-pro", + "name": "Gemini-3.1-Pro", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-06", - "release_date": "2026-03-16", - "last_updated": "2026-03-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 256000, "output": 256000 } + "temperature": false, + "release_date": "2026-02-19", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2 + } }, - "mistral/ministral-3b": { - "id": "mistral/ministral-3b", - "name": "Ministral 3B (latest)", - "family": "ministral", - "attachment": false, + "google/imagen-3-fast": { + "id": "google/imagen-3-fast", + "name": "Imagen-3-Fast", + "family": "imagen", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-10-01", - "last_updated": "2024-10-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.04, "output": 0.04 }, - "limit": { "context": 128000, "output": 128000 } + "temperature": false, + "release_date": "2024-10-17", + "last_updated": "2024-10-17", + "modalities": { + "input": ["text"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 480, + "output": 0 + } }, - "mistral/pixtral-large": { - "id": "mistral/pixtral-large", - "name": "Pixtral Large (latest)", - "family": "pixtral", + "google/gemini-2.0-flash": { + "id": "google/gemini-2.0-flash", + "name": "Gemini-2.0-Flash", + "family": "gemini-flash", "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-11", - "release_date": "2024-11-01", - "last_updated": "2024-11-04", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2, "output": 6 }, - "limit": { "context": 128000, "output": 128000 } + "temperature": false, + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 990000, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 0.42 + } }, - "mistral/magistral-small": { - "id": "mistral/magistral-small", - "name": "Magistral Small", - "family": "magistral-small", - "attachment": false, + "google/gemini-deep-research": { + "id": "google/gemini-deep-research", + "name": "gemini-deep-research", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-03-17", - "last_updated": "2025-03-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.5, "output": 1.5 }, - "limit": { "context": 128000, "output": 128000 } + "temperature": false, + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 0 + }, + "status": "deprecated", + "cost": { + "input": 1.6, + "output": 9.6 + } }, - "mistral/magistral-medium": { - "id": "mistral/magistral-medium", - "name": "Magistral Medium (latest)", - "family": "magistral-medium", - "attachment": false, + "google/gemini-2.5-pro": { + "id": "google/gemini-2.5-pro", + "name": "Gemini-2.5-Pro", + "family": "gemini-pro", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-03-17", - "last_updated": "2025-03-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2, "output": 5 }, - "limit": { "context": 128000, "output": 16384 } + "temperature": false, + "release_date": "2025-02-05", + "last_updated": "2025-02-05", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1065535, + "output": 65535 + }, + "cost": { + "input": 0.87, + "output": 7, + "cache_read": 0.087 + } }, - "mistral/mixtral-8x22b-instruct": { - "id": "mistral/mixtral-8x22b-instruct", - "name": "Mixtral 8x22B", - "family": "mixtral", - "attachment": false, + "google/imagen-3": { + "id": "google/imagen-3", + "name": "Imagen-3", + "family": "imagen", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-04-17", - "last_updated": "2024-04-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2, "output": 6 }, - "limit": { "context": 64000, "output": 64000 } + "temperature": false, + "release_date": "2024-10-15", + "last_updated": "2024-10-15", + "modalities": { + "input": ["text"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 480, + "output": 0 + } }, - "meta/llama-3.2-90b": { - "id": "meta/llama-3.2-90b", - "name": "Llama 3.2 90B Vision Instruct", - "family": "llama", + "google/nano-banana": { + "id": "google/nano-banana", + "name": "Nano-Banana", + "family": "nano-banana", "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-09-25", - "last_updated": "2024-09-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-08-21", + "last_updated": "2025-08-21", + "modalities": { + "input": ["text", "image"], + "output": ["text", "image"] + }, "open_weights": false, - "cost": { "input": 0.72, "output": 0.72 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 65536, + "output": 0 + }, + "cost": { + "input": 0.21, + "output": 1.8, + "cache_read": 0.021 + } }, - "meta/llama-3.2-11b": { - "id": "meta/llama-3.2-11b", - "name": "Llama 3.2 11B Vision Instruct", - "family": "llama", + "google/gemini-2.5-flash": { + "id": "google/gemini-2.5-flash", + "name": "Gemini-2.5-Flash", + "family": "gemini-flash", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-09-25", - "last_updated": "2024-09-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-04-26", + "last_updated": "2025-04-26", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.16, "output": 0.16 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 1065535, + "output": 65535 + }, + "cost": { + "input": 0.21, + "output": 1.8, + "cache_read": 0.021 + } }, - "meta/llama-3.1-70b": { - "id": "meta/llama-3.1-70b", - "name": "Llama 3.1 70B Instruct", - "family": "llama", - "attachment": false, - "reasoning": false, + "google/gemini-3.1-flash-lite": { + "id": "google/gemini-3.1-flash-lite", + "name": "Gemini-3.1-Flash-Lite", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2026-02-18", + "last_updated": "2026-02-18", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 0.4 }, - "limit": { "context": 131072, "output": 16384 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.25, + "output": 1.5 + } }, - "meta/llama-3.2-3b": { - "id": "meta/llama-3.2-3b", - "name": "Llama 3.2 3B Instruct", - "family": "llama", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-09-18", - "last_updated": "2024-09-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "google/gemini-3-flash": { + "id": "google/gemini-3-flash", + "name": "Gemini-3-Flash", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2025-10-07", + "last_updated": "2025-10-07", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.15 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.4, + "output": 2.4, + "cache_read": 0.04 + } }, - "meta/llama-3.1-8b": { - "id": "meta/llama-3.1-8b", - "name": "Llama 3.1 8B Instruct", - "family": "llama", - "attachment": false, + "google/veo-3.1": { + "id": "google/veo-3.1", + "name": "Veo-3.1", + "family": "veo", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text"], + "output": ["video"] + }, "open_weights": false, - "cost": { "input": 0.03, "output": 0.05 }, - "limit": { "context": 131072, "output": 16384 } + "limit": { + "context": 480, + "output": 0 + } }, - "meta/llama-3.2-1b": { - "id": "meta/llama-3.2-1b", - "name": "Llama 3.2 1B Instruct", - "family": "llama", - "attachment": false, + "google/lyria": { + "id": "google/lyria", + "name": "Lyria", + "family": "lyria", + "attachment": true, "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-09-18", - "last_updated": "2024-09-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": false, + "release_date": "2025-06-04", + "last_updated": "2025-06-04", + "modalities": { + "input": ["text"], + "output": ["audio"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.1 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 0, + "output": 0 + } }, - "meta/llama-3.3-70b": { - "id": "meta/llama-3.3-70b", - "name": "Llama-3.3-70B-Instruct", - "family": "llama", + "google/imagen-4-ultra": { + "id": "google/imagen-4-ultra", + "name": "Imagen-4-Ultra", + "family": "imagen", "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "temperature": false, + "release_date": "2025-05-24", + "last_updated": "2025-05-24", + "modalities": { + "input": ["text"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 480, + "output": 0 + } }, - "meta/llama-4-maverick": { - "id": "meta/llama-4-maverick", - "name": "Llama-4-Maverick-17B-128E-Instruct-FP8", - "family": "llama", + "google/nano-banana-pro": { + "id": "google/nano-banana-pro", + "name": "Nano-Banana-Pro", + "family": "nano-banana", "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "temperature": false, + "release_date": "2025-11-19", + "last_updated": "2025-11-19", + "modalities": { + "input": ["text", "image"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 65536, + "output": 0 + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2 + } }, - "meta/llama-4-scout": { - "id": "meta/llama-4-scout", - "name": "Llama-4-Scout-17B-16E-Instruct-FP8", - "family": "llama", + "google/gemini-3-pro": { + "id": "google/gemini-3-pro", + "name": "Gemini-3-Pro", + "family": "gemini-pro", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "temperature": false, + "release_date": "2025-10-22", + "last_updated": "2025-10-22", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "status": "deprecated", + "cost": { + "input": 1.6, + "output": 9.6, + "cache_read": 0.16 + } }, - "inception/mercury-2": { - "id": "inception/mercury-2", - "name": "Mercury 2", - "family": "mercury", - "attachment": false, - "reasoning": true, + "google/imagen-4-fast": { + "id": "google/imagen-4-fast", + "name": "Imagen-4-Fast", + "family": "imagen", + "attachment": true, + "reasoning": false, "tool_call": true, - "temperature": true, - "release_date": "2026-02-24", - "last_updated": "2026-03-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-06-25", + "last_updated": "2025-06-25", + "modalities": { + "input": ["text"], + "output": ["image"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 0.75, "cache_read": 0.024999999999999998 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 480, + "output": 0 + } }, - "inception/mercury-coder-small": { - "id": "inception/mercury-coder-small", - "name": "Mercury Coder Small Beta", - "family": "mercury", - "attachment": false, + "google/veo-3": { + "id": "google/veo-3", + "name": "Veo-3", + "family": "veo", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-02-26", - "last_updated": "2025-02-26", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-05-21", + "last_updated": "2025-05-21", + "modalities": { + "input": ["text"], + "output": ["video"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 1 }, - "limit": { "context": 32000, "output": 16384 } - } - } - }, - "synthetic": { - "id": "synthetic", - "env": ["SYNTHETIC_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.synthetic.new/openai/v1", - "name": "Synthetic", - "doc": "https://synthetic.new/pricing", - "models": { - "hf:moonshotai/Kimi-K2.5": { - "id": "hf:moonshotai/Kimi-K2.5", - "name": "Kimi K2.5", - "family": "kimi", - "attachment": false, + "limit": { + "context": 480, + "output": 0 + } + }, + "google/gemini-2.5-flash-lite": { + "id": "google/gemini-2.5-flash-lite", + "name": "Gemini-2.5-Flash-Lite", + "family": "gemini-flash-lite", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.55, "output": 2.19 }, - "limit": { "context": 262144, "output": 65536 } + "temperature": false, + "release_date": "2025-06-19", + "last_updated": "2025-06-19", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1024000, + "output": 64000 + }, + "cost": { + "input": 0.07, + "output": 0.28 + } }, - "hf:moonshotai/Kimi-K2-Instruct-0905": { - "id": "hf:moonshotai/Kimi-K2-Instruct-0905", - "name": "Kimi K2 0905", - "family": "kimi", - "attachment": false, + "google/imagen-4": { + "id": "google/imagen-4", + "name": "Imagen-4", + "family": "imagen", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1.2, "output": 1.2 }, - "limit": { "context": 262144, "output": 32768 } + "temperature": false, + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 480, + "output": 0 + } }, - "hf:moonshotai/Kimi-K2-Thinking": { - "id": "hf:moonshotai/Kimi-K2-Thinking", - "name": "Kimi K2 Thinking", - "family": "kimi-thinking", - "attachment": false, - "reasoning": true, + "google/gemma-4-31b": { + "id": "google/gemma-4-31b", + "name": "Gemma-4-31B", + "attachment": true, + "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2025-11", - "release_date": "2025-11-07", - "last_updated": "2025-11-07", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.55, "output": 2.19 }, - "limit": { "context": 262144, "output": 262144 } + "temperature": false, + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "hf:meta-llama/Llama-4-Scout-17B-16E-Instruct": { - "id": "hf:meta-llama/Llama-4-Scout-17B-16E-Instruct", - "name": "Llama-4-Scout-17B-16E-Instruct", - "family": "llama", + "google/gemini-2.0-flash-lite": { + "id": "google/gemini-2.0-flash-lite", + "name": "Gemini-2.0-Flash-Lite", + "family": "gemini-flash-lite", "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 328000, "output": 4096 } + "temperature": false, + "release_date": "2025-02-05", + "last_updated": "2025-02-05", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 990000, + "output": 8192 + }, + "cost": { + "input": 0.052, + "output": 0.21 + } }, - "hf:meta-llama/Llama-3.1-8B-Instruct": { - "id": "hf:meta-llama/Llama-3.1-8B-Instruct", - "name": "Llama-3.1-8B-Instruct", - "family": "llama", - "attachment": false, - "reasoning": true, + "google/veo-2": { + "id": "google/veo-2", + "name": "Veo-2", + "family": "veo", + "attachment": true, + "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 128000, "output": 32768 } + "temperature": false, + "release_date": "2024-12-02", + "last_updated": "2024-12-02", + "modalities": { + "input": ["text"], + "output": ["video"] + }, + "open_weights": false, + "limit": { + "context": 480, + "output": 0 + } }, - "hf:meta-llama/Llama-3.3-70B-Instruct": { - "id": "hf:meta-llama/Llama-3.3-70B-Instruct", - "name": "Llama-3.3-70B-Instruct", - "family": "llama", - "attachment": false, - "reasoning": true, + "lumalabs/ray2": { + "id": "lumalabs/ray2", + "name": "Ray2", + "family": "ray", + "attachment": true, + "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.9, "output": 0.9 }, - "limit": { "context": 128000, "output": 32768 } + "temperature": false, + "release_date": "2025-02-20", + "last_updated": "2025-02-20", + "modalities": { + "input": ["text", "image"], + "output": ["video"] + }, + "open_weights": false, + "limit": { + "context": 5000, + "output": 0 + } }, - "hf:meta-llama/Llama-3.1-405B-Instruct": { - "id": "hf:meta-llama/Llama-3.1-405B-Instruct", - "name": "Llama-3.1-405B-Instruct", - "family": "llama", - "attachment": false, + "anthropic/claude-opus-4.1": { + "id": "anthropic/claude-opus-4.1", + "name": "Claude-Opus-4.1", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 3, "output": 3 }, - "limit": { "context": 128000, "output": 32768 } + "temperature": false, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 196608, + "output": 32000 + }, + "cost": { + "input": 13, + "output": 64, + "cache_read": 1.3, + "cache_write": 16 + } }, - "hf:meta-llama/Llama-3.1-70B-Instruct": { - "id": "hf:meta-llama/Llama-3.1-70B-Instruct", - "name": "Llama-3.1-70B-Instruct", - "family": "llama", - "attachment": false, - "reasoning": true, + "anthropic/claude-sonnet-3.5": { + "id": "anthropic/claude-sonnet-3.5", + "name": "Claude-Sonnet-3.5", + "family": "claude-sonnet", + "attachment": true, + "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.9, "output": 0.9 }, - "limit": { "context": 128000, "output": 32768 } + "temperature": false, + "release_date": "2024-06-05", + "last_updated": "2024-06-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 189096, + "output": 8192 + }, + "status": "deprecated", + "cost": { + "input": 2.6, + "output": 13, + "cache_read": 0.26, + "cache_write": 3.2 + } }, - "hf:meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8": { - "id": "hf:meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8", - "name": "Llama-4-Maverick-17B-128E-Instruct-FP8", - "family": "llama", + "anthropic/claude-haiku-3": { + "id": "anthropic/claude-haiku-3", + "name": "Claude-Haiku-3", + "family": "claude-haiku", "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.22, "output": 0.88 }, - "limit": { "context": 524000, "output": 4096 } + "temperature": false, + "release_date": "2024-03-09", + "last_updated": "2024-03-09", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 189096, + "output": 8192 + }, + "cost": { + "input": 0.21, + "output": 1.1, + "cache_read": 0.021, + "cache_write": 0.26 + } }, - "hf:zai-org/GLM-4.7": { - "id": "hf:zai-org/GLM-4.7", - "name": "GLM 4.7", - "family": "glm", - "attachment": false, + "anthropic/claude-opus-4.6": { + "id": "anthropic/claude-opus-4.6", + "name": "Claude-Opus-4.6", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.55, "output": 2.19 }, - "limit": { "context": 200000, "output": 64000 } + "temperature": false, + "release_date": "2026-02-04", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 983040, + "output": 128000 + }, + "cost": { + "input": 4.3, + "output": 21, + "cache_read": 0.43, + "cache_write": 5.3 + } }, - "hf:zai-org/GLM-4.7-Flash": { - "id": "hf:zai-org/GLM-4.7-Flash", - "name": "GLM-4.7-Flash", - "family": "glm", - "attachment": false, + "anthropic/claude-opus-4.7": { + "id": "anthropic/claude-opus-4.7", + "name": "Claude-Opus-4.7", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, - "temperature": true, - "release_date": "2026-01-18", - "last_updated": "2026-01-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.06, "output": 0.4, "cache_read": 0.06 }, - "limit": { "context": 196608, "output": 65536 } + "temperature": false, + "release_date": "2026-04-15", + "last_updated": "2026-04-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 128000 + }, + "cost": { + "input": 4.3, + "output": 21, + "cache_read": 0.43, + "cache_write": 5.4 + } }, - "hf:zai-org/GLM-4.6": { - "id": "hf:zai-org/GLM-4.6", - "name": "GLM 4.6", - "family": "glm", - "attachment": false, + "anthropic/claude-sonnet-4": { + "id": "anthropic/claude-sonnet-4", + "name": "Claude-Sonnet-4", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.55, "output": 2.19 }, - "limit": { "context": 200000, "output": 64000 } + "temperature": false, + "release_date": "2025-05-21", + "last_updated": "2025-05-21", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 983040, + "output": 64000 + }, + "cost": { + "input": 2.6, + "output": 13, + "cache_read": 0.26, + "cache_write": 3.2 + } }, - "hf:deepseek-ai/DeepSeek-V3.1": { - "id": "hf:deepseek-ai/DeepSeek-V3.1", - "name": "DeepSeek V3.1", - "family": "deepseek", - "attachment": false, + "anthropic/claude-sonnet-4.5": { + "id": "anthropic/claude-sonnet-4.5", + "name": "Claude-Sonnet-4.5", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2025-08-21", - "last_updated": "2025-08-21", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-09-26", + "last_updated": "2025-09-26", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.56, "output": 1.68 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 983040, + "output": 32768 + }, + "cost": { + "input": 2.6, + "output": 13, + "cache_read": 0.26, + "cache_write": 3.2 + } }, - "hf:deepseek-ai/DeepSeek-V3-0324": { - "id": "hf:deepseek-ai/DeepSeek-V3-0324", - "name": "DeepSeek V3 (0324)", - "family": "deepseek", - "attachment": false, - "reasoning": false, + "anthropic/claude-opus-4.5": { + "id": "anthropic/claude-opus-4.5", + "name": "Claude-Opus-4.5", + "family": "claude-opus", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2025-08-01", - "last_updated": "2025-08-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-11-21", + "last_updated": "2025-11-21", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.2, "output": 1.2 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 196608, + "output": 64000 + }, + "cost": { + "input": 4.3, + "output": 21, + "cache_read": 0.43, + "cache_write": 5.3 + } }, - "hf:deepseek-ai/DeepSeek-R1": { - "id": "hf:deepseek-ai/DeepSeek-R1", - "name": "DeepSeek R1", - "family": "deepseek-thinking", - "attachment": false, + "anthropic/claude-sonnet-3.7": { + "id": "anthropic/claude-sonnet-3.7", + "name": "Claude-Sonnet-3.7", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.55, "output": 2.19 }, - "limit": { "context": 128000, "output": 128000 } + "temperature": false, + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 196608, + "output": 128000 + }, + "cost": { + "input": 2.6, + "output": 13, + "cache_read": 0.26, + "cache_write": 3.2 + } }, - "hf:deepseek-ai/DeepSeek-V3.1-Terminus": { - "id": "hf:deepseek-ai/DeepSeek-V3.1-Terminus", - "name": "DeepSeek V3.1 Terminus", - "family": "deepseek", - "attachment": false, + "anthropic/claude-opus-4": { + "id": "anthropic/claude-opus-4", + "name": "Claude-Opus-4", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2025-09-22", - "last_updated": "2025-09-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-05-21", + "last_updated": "2025-05-21", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.2, "output": 1.2 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 192512, + "output": 28672 + }, + "cost": { + "input": 13, + "output": 64, + "cache_read": 1.3, + "cache_write": 16 + } }, - "hf:deepseek-ai/DeepSeek-R1-0528": { - "id": "hf:deepseek-ai/DeepSeek-R1-0528", - "name": "DeepSeek R1 (0528)", - "family": "deepseek-thinking", - "attachment": false, - "reasoning": true, + "anthropic/claude-haiku-3.5": { + "id": "anthropic/claude-haiku-3.5", + "name": "Claude-Haiku-3.5", + "family": "claude-haiku", + "attachment": true, + "reasoning": false, "tool_call": true, - "temperature": true, - "release_date": "2025-08-01", - "last_updated": "2025-08-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2024-10-01", + "last_updated": "2024-10-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 8 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 189096, + "output": 8192 + }, + "cost": { + "input": 0.68, + "output": 3.4, + "cache_read": 0.068, + "cache_write": 0.85 + } }, - "hf:deepseek-ai/DeepSeek-V3.2": { - "id": "hf:deepseek-ai/DeepSeek-V3.2", - "name": "DeepSeek V3.2", - "family": "deepseek", - "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.27, "output": 0.4, "cache_read": 0.27, "cache_write": 0 }, - "limit": { "context": 162816, "input": 162816, "output": 8000 } - }, - "hf:deepseek-ai/DeepSeek-V3": { - "id": "hf:deepseek-ai/DeepSeek-V3", - "name": "DeepSeek V3", - "family": "deepseek", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-01-20", - "last_updated": "2025-05-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1.25, "output": 1.25 }, - "limit": { "context": 128000, "output": 128000 } - }, - "hf:nvidia/Kimi-K2.5-NVFP4": { - "id": "hf:nvidia/Kimi-K2.5-NVFP4", - "name": "Kimi K2.5 (NVFP4)", - "family": "kimi", - "attachment": false, + "anthropic/claude-haiku-4.5": { + "id": "anthropic/claude-haiku-4.5", + "name": "Claude-Haiku-4.5", + "family": "claude-haiku", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.55, "output": 2.19 }, - "limit": { "context": 262144, "output": 65536 } + "temperature": false, + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 192000, + "output": 64000 + }, + "cost": { + "input": 0.85, + "output": 4.3, + "cache_read": 0.085, + "cache_write": 1.1 + } }, - "hf:MiniMaxAI/MiniMax-M2.1": { - "id": "hf:MiniMaxAI/MiniMax-M2.1", - "name": "MiniMax-M2.1", - "family": "minimax", - "attachment": false, - "reasoning": true, + "anthropic/claude-sonnet-3.5-june": { + "id": "anthropic/claude-sonnet-3.5-june", + "name": "Claude-Sonnet-3.5-June", + "family": "claude-sonnet", + "attachment": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.55, "output": 2.19 }, - "limit": { "context": 204800, "output": 131072 } + "temperature": false, + "release_date": "2024-11-18", + "last_updated": "2024-11-18", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 189096, + "output": 8192 + }, + "status": "deprecated", + "cost": { + "input": 2.6, + "output": 13, + "cache_read": 0.26, + "cache_write": 3.2 + } }, - "hf:MiniMaxAI/MiniMax-M2.5": { - "id": "hf:MiniMaxAI/MiniMax-M2.5", - "name": "MiniMax-M2.5", - "family": "minimax", - "attachment": false, + "anthropic/claude-sonnet-4.6": { + "id": "anthropic/claude-sonnet-4.6", + "name": "Claude-Sonnet-4.6", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, - "temperature": true, - "release_date": "2026-02-07", - "last_updated": "2026-02-07", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 3, "cache_read": 0.6 }, - "limit": { "context": 191488, "output": 65536 } + "temperature": false, + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 983040, + "output": 128000 + }, + "cost": { + "input": 2.6, + "output": 13, + "cache_read": 0.26, + "cache_write": 3.2 + } }, - "hf:MiniMaxAI/MiniMax-M2": { - "id": "hf:MiniMaxAI/MiniMax-M2", - "name": "MiniMax-M2", - "family": "minimax", - "attachment": false, - "reasoning": true, + "ideogramai/ideogram": { + "id": "ideogramai/ideogram", + "name": "Ideogram", + "family": "ideogram", + "attachment": true, + "reasoning": false, "tool_call": true, - "temperature": true, - "release_date": "2025-10-27", - "last_updated": "2025-10-27", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.55, "output": 2.19 }, - "limit": { "context": 196608, "output": 131000 } + "temperature": false, + "release_date": "2024-04-03", + "last_updated": "2024-04-03", + "modalities": { + "input": ["text", "image"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 150, + "output": 0 + } }, - "hf:openai/gpt-oss-120b": { - "id": "hf:openai/gpt-oss-120b", - "name": "GPT OSS 120B", - "family": "gpt-oss", - "attachment": false, - "reasoning": true, + "ideogramai/ideogram-v2": { + "id": "ideogramai/ideogram-v2", + "name": "Ideogram-v2", + "family": "ideogram", + "attachment": true, + "reasoning": false, "tool_call": true, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.1 }, - "limit": { "context": 128000, "output": 32768 } + "temperature": false, + "release_date": "2024-08-21", + "last_updated": "2024-08-21", + "modalities": { + "input": ["text", "image"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 150, + "output": 0 + } }, - "hf:Qwen/Qwen2.5-Coder-32B-Instruct": { - "id": "hf:Qwen/Qwen2.5-Coder-32B-Instruct", - "name": "Qwen2.5-Coder-32B-Instruct", - "family": "qwen", - "attachment": false, + "ideogramai/ideogram-v2a-turbo": { + "id": "ideogramai/ideogram-v2a-turbo", + "name": "Ideogram-v2a-Turbo", + "family": "ideogram", + "attachment": true, "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-11-11", - "last_updated": "2024-11-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.8, "output": 0.8 }, - "limit": { "context": 32768, "output": 32768 } - }, - "hf:Qwen/Qwen3-235B-A22B-Thinking-2507": { - "id": "hf:Qwen/Qwen3-235B-A22B-Thinking-2507", - "name": "Qwen3 235B A22B Thinking 2507", - "family": "qwen", - "attachment": false, - "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-25", - "last_updated": "2025-07-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.65, "output": 3 }, - "limit": { "context": 256000, "output": 32000 } + "temperature": false, + "release_date": "2025-02-27", + "last_updated": "2025-02-27", + "modalities": { + "input": ["text"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 150, + "output": 0 + } }, - "hf:Qwen/Qwen3-Coder-480B-A35B-Instruct": { - "id": "hf:Qwen/Qwen3-Coder-480B-A35B-Instruct", - "name": "Qwen 3 Coder 480B", - "family": "qwen", - "attachment": false, + "ideogramai/ideogram-v2a": { + "id": "ideogramai/ideogram-v2a", + "name": "Ideogram-v2a", + "family": "ideogram", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2, "output": 2 }, - "limit": { "context": 256000, "output": 32000 } + "temperature": false, + "release_date": "2025-02-27", + "last_updated": "2025-02-27", + "modalities": { + "input": ["text"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 150, + "output": 0 + } }, - "hf:Qwen/Qwen3-235B-A22B-Instruct-2507": { - "id": "hf:Qwen/Qwen3-235B-A22B-Instruct-2507", - "name": "Qwen 3 235B Instruct", - "family": "qwen", - "attachment": false, + "trytako/tako": { + "id": "trytako/tako", + "name": "Tako", + "family": "tako", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04-28", - "last_updated": "2025-07-21", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.6 }, - "limit": { "context": 256000, "output": 32000 } - } - } - }, - "llmgateway": { - "id": "llmgateway", - "env": ["LLMGATEWAY_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.llmgateway.io/v1", - "name": "LLM Gateway", - "doc": "https://llmgateway.io/docs", - "models": { - "gpt-5.2-codex": { - "id": "gpt-5.2-codex", - "name": "GPT-5.2 Codex", - "family": "gpt", + "temperature": false, + "release_date": "2024-08-15", + "last_updated": "2024-08-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2048, + "output": 0 + } + }, + "poetools/claude-code": { + "id": "poetools/claude-code", + "name": "claude-code", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01-14", - "last_updated": "2026-01-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-11-27", + "last_updated": "2025-11-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.18 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 0, + "output": 0 + } }, - "qwen3-coder-30b-a3b-instruct": { - "id": "qwen3-coder-30b-a3b-instruct", - "name": "Qwen3 Coder 30B A3B Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, + "openai/gpt-5.5": { + "id": "openai/gpt-5.5", + "name": "GPT-5.5", + "family": "gpt", + "attachment": true, + "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": true, - "release_date": "2025-07-31", - "last_updated": "2025-07-31", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 262000, "output": 8192 } + "temperature": false, + "knowledge": "2025-12-01", + "release_date": "2026-04-08", + "last_updated": "2026-04-08", + "modalities": { + "input": ["text", "image"], + "output": ["text", "image"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 4.5455, + "output": 27.2727, + "cache_read": 0.4545 + } }, - "gemini-2.5-flash-lite": { - "id": "gemini-2.5-flash-lite", - "name": "Gemini 2.5 Flash Lite", - "family": "gemini", + "openai/gpt-5.5-pro": { + "id": "openai/gpt-5.5-pro", + "name": "GPT-5.5-Pro", + "family": "gpt-pro", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, + "temperature": false, + "knowledge": "2025-12-01", + "release_date": "2026-04-08", + "last_updated": "2026-04-08", + "modalities": { + "input": ["text", "image"], + "output": ["text", "image"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 27.2727, + "output": 163.6364 + } + } + } + }, + "helicone": { + "id": "helicone", + "env": ["HELICONE_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://ai-gateway.helicone.ai/v1", + "name": "Helicone", + "doc": "https://helicone.ai/models", + "models": { + "mistral-nemo": { + "id": "mistral-nemo", + "name": "Mistral Nemo", + "family": "mistral-nemo", + "attachment": false, + "reasoning": false, + "tool_call": false, "temperature": true, - "release_date": "2025-07-22", - "last_updated": "2025-07-22", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-07", + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.01 }, - "limit": { "context": 1048576, "output": 65535 } + "limit": { + "context": 128000, + "output": 16400 + }, + "cost": { + "input": 20, + "output": 40 + } }, - "grok-4-20-multi-agent-beta-0309": { - "id": "grok-4-20-multi-agent-beta-0309", - "name": "Grok 4.20 Multi-Agent Beta (0309)", + "grok-4-1-fast-reasoning": { + "id": "grok-4-1-fast-reasoning", + "name": "xAI Grok 4.1 Fast Reasoning", "family": "grok", - "attachment": true, + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-03-09", - "last_updated": "2026-03-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-11", + "release_date": "2025-11-17", + "last_updated": "2025-11-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 6, "cache_read": 0.2 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 2000000, + "output": 2000000 + }, + "cost": { + "input": 0.19999999999999998, + "output": 0.5, + "cache_read": 0.049999999999999996 + } }, - "grok-imagine-image": { - "id": "grok-imagine-image", - "name": "Grok Imagine Image", - "family": "grok", - "attachment": true, + "gemma2-9b-it": { + "id": "gemma2-9b-it", + "name": "Google Gemma 2", + "family": "gemma", + "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, "temperature": true, - "release_date": "2026-03-02", - "last_updated": "2026-03-02", - "modalities": { "input": ["text", "image"], "output": ["text", "image"] }, + "knowledge": "2024-06", + "release_date": "2024-06-25", + "last_updated": "2024-06-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 2000, "output": 4096 } + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 0.01, + "output": 0.03 + } }, - "gpt-5.1-codex-mini": { - "id": "gpt-5.1-codex-mini", - "name": "GPT-5.1 Codex mini", - "family": "gpt", - "attachment": true, - "reasoning": true, + "llama-3.3-70b-instruct": { + "id": "llama-3.3-70b-instruct", + "name": "Meta Llama 3.3 70B Instruct", + "family": "llama", + "attachment": false, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-11-12", - "last_updated": "2025-11-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.03 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 128000, + "output": 16400 + }, + "cost": { + "input": 0.13, + "output": 0.39 + } }, - "qwen3-235b-a22b-instruct-2507": { - "id": "qwen3-235b-a22b-instruct-2507", - "name": "Qwen3 235B A22B Instruct 2507", - "family": "qwen", + "llama-4-scout": { + "id": "llama-4-scout", + "name": "Meta Llama 4 Scout 17B 16E", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-07-21", - "last_updated": "2025-07-21", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.6 }, - "limit": { "context": 262000, "output": 8192 }, - "status": "beta" - }, - "gpt-5.4-pro": { - "id": "gpt-5.4-pro", - "name": "GPT-5.4 Pro", - "family": "gpt", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-03-01", - "last_updated": "2026-03-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 30, "output": 180 }, - "limit": { "context": 1050000, "output": 128000 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.08, + "output": 0.3 + } }, - "claude-opus-4-5-20251101": { - "id": "claude-opus-4-5-20251101", - "name": "Claude Opus 4.5", - "family": "claude", - "attachment": true, - "reasoning": true, + "chatgpt-4o-latest": { + "id": "chatgpt-4o-latest", + "name": "OpenAI ChatGPT-4o", + "family": "gpt", + "attachment": false, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-11-24", - "last_updated": "2025-11-24", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-08", + "release_date": "2024-08-14", + "last_updated": "2024-08-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 5, + "output": 20, + "cache_read": 2.5 + } }, - "qwen-image": { - "id": "qwen-image", - "name": "Qwen Image", - "family": "qwen", + "claude-3.5-sonnet-v2": { + "id": "claude-3.5-sonnet-v2", + "name": "Anthropic: Claude 3.5 Sonnet v2", + "family": "claude-sonnet", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, + "tool_call": true, "temperature": true, - "release_date": "2025-08-04", - "last_updated": "2025-08-04", - "modalities": { "input": ["text"], "output": ["text", "image"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 2000, "output": 4096 } + "knowledge": "2024-10", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.30000000000000004, + "cache_write": 3.75 + } }, "hermes-2-pro-llama-3-8b": { "id": "hermes-2-pro-llama-3-8b", "name": "Hermes 2 Pro Llama 3 8B", - "family": "nousresearch", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, + "tool_call": true, "temperature": true, + "knowledge": "2024-05", "release_date": "2024-05-27", "last_updated": "2024-05-27", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.14, "output": 0.14 }, - "limit": { "context": 8192, "output": 8192 }, - "status": "beta" + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.14, + "output": 0.14 + } }, - "pixtral-large-latest": { - "id": "pixtral-large-latest", - "name": "Pixtral Large Latest", - "family": "mistral", - "attachment": true, + "claude-3.7-sonnet": { + "id": "claude-3.7-sonnet", + "name": "Anthropic: Claude 3.7 Sonnet", + "family": "claude-sonnet", + "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, + "tool_call": true, "temperature": true, - "release_date": "2024-11-18", - "last_updated": "2024-11-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 4, "output": 12 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2025-02", + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.30000000000000004, + "cache_write": 3.75 + } }, - "o3-mini": { - "id": "o3-mini", - "name": "o3 Mini", - "family": "gpt", + "llama-prompt-guard-2-22m": { + "id": "llama-prompt-guard-2-22m", + "name": "Meta Llama Prompt Guard 2 22M", + "family": "llama", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": false, - "structured_output": true, "temperature": true, - "release_date": "2025-06-01", - "last_updated": "2025-06-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2024-10-01", + "last_updated": "2024-10-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.55 }, - "limit": { "context": 200000, "output": 16384 } + "limit": { + "context": 512, + "output": 2 + }, + "cost": { + "input": 0.01, + "output": 0.01 + } }, - "gpt-5.4-mini": { - "id": "gpt-5.4-mini", - "name": "GPT-5.4 Mini", - "family": "gpt", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-03-17", - "last_updated": "2026-03-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "o1-mini": { + "id": "o1-mini", + "name": "OpenAI: o1-mini", + "family": "o-mini", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "knowledge": "2025-01", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.75, "output": 4.5, "cache_read": 0.08 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 128000, + "output": 65536 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.55 + } }, - "gpt-5-pro": { - "id": "gpt-5-pro", - "name": "GPT-5 Pro", - "family": "gpt", - "attachment": true, - "reasoning": true, + "gpt-4.1-mini-2025-04-14": { + "id": "gpt-4.1-mini-2025-04-14", + "name": "OpenAI GPT-4.1 Mini", + "family": "gpt-mini", + "attachment": false, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-08-01", - "last_updated": "2025-08-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 120 }, - "limit": { "context": 400000, "output": 272000 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.39999999999999997, + "output": 1.5999999999999999, + "cache_read": 0.09999999999999999 + } }, - "grok-4-fast": { - "id": "grok-4-fast", - "name": "Grok 4 Fast", - "family": "grok", - "attachment": true, + "deepseek-r1-distill-llama-70b": { + "id": "deepseek-r1-distill-llama-70b", + "name": "DeepSeek R1 Distill Llama 70B", + "family": "deepseek-thinking", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.03, + "output": 0.13 + } }, - "qwen-turbo": { - "id": "qwen-turbo", - "name": "Qwen Turbo", + "qwen3-32b": { + "id": "qwen3-32b", + "name": "Qwen3 32B", "family": "qwen", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": true, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-02-01", - "last_updated": "2025-02-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.05, "output": 0.2 }, - "limit": { "context": 1000000, "output": 8192 } + "knowledge": "2025-04", + "release_date": "2025-04-28", + "last_updated": "2025-04-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 40960 + }, + "cost": { + "input": 0.29, + "output": 0.59 + } }, - "llama-3.1-nemotron-ultra-253b": { - "id": "llama-3.1-nemotron-ultra-253b", - "name": "Llama 3.1 Nemotron Ultra 253B", + "llama-3.3-70b-versatile": { + "id": "llama-3.3-70b-versatile", + "name": "Meta Llama 3.3 70B Versatile", "family": "llama", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2025-04-07", - "last_updated": "2025-04-07", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 1.8 }, - "limit": { "context": 128000, "output": 16384 } - }, - "gemini-2.5-flash-lite-preview-09-2025": { - "id": "gemini-2.5-flash-lite-preview-09-2025", - "name": "Gemini 2.5 Flash Lite Preview (09-2025)", - "family": "gemini", - "attachment": true, - "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.01 }, - "limit": { "context": 1048576, "output": 65535 } - }, - "qwen-vl-max": { - "id": "qwen-vl-max", - "name": "Qwen VL Max", - "family": "qwen", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2025-02-01", - "last_updated": "2025-02-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.8, "output": 3.2 }, - "limit": { "context": 131072, "output": 32000 } + "limit": { + "context": 131072, + "output": 32678 + }, + "cost": { + "input": 0.59, + "output": 0.7899999999999999 + } }, - "qwen3-vl-235b-a22b-instruct": { - "id": "qwen3-vl-235b-a22b-instruct", - "name": "Qwen3 VL 235B A22B Instruct", - "family": "qwen", - "attachment": true, + "gpt-5-mini": { + "id": "gpt-5-mini", + "name": "OpenAI GPT-5 Mini", + "family": "gpt-mini", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-09-23", - "last_updated": "2025-09-23", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.5, "output": 2 }, - "limit": { "context": 131072, "output": 32768 } + "temperature": false, + "knowledge": "2025-01", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.024999999999999998 + } }, - "claude-3-opus": { - "id": "claude-3-opus", - "name": "Claude 3 Opus", - "family": "claude", - "attachment": true, + "gpt-5-nano": { + "id": "gpt-5-nano", + "name": "OpenAI GPT-5 Nano", + "family": "gpt-nano", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2024-03-04", - "last_updated": "2024-03-04", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-01", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5 }, - "limit": { "context": 200000, "output": 4096 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.049999999999999996, + "output": 0.39999999999999997, + "cache_read": 0.005 + } }, - "kimi-k2-thinking": { - "id": "kimi-k2-thinking", - "name": "Kimi K2 Thinking", - "family": "kimi", + "gemini-3-pro-preview": { + "id": "gemini-3-pro-preview", + "name": "Google Gemini 3 Pro Preview", + "family": "gemini-pro", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-11-06", - "last_updated": "2025-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-11", + "release_date": "2025-11-18", + "last_updated": "2025-11-18", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.6, "output": 2.5, "cache_read": 0.15 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.19999999999999998 + } }, - "qwen3-coder-next": { - "id": "qwen3-coder-next", - "name": "Qwen3 Coder Next", - "family": "qwen", + "claude-3-haiku-20240307": { + "id": "claude-3-haiku-20240307", + "name": "Anthropic: Claude 3 Haiku", + "family": "claude-haiku", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-01-01", - "last_updated": "2024-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.11, "output": 0.68, "cache_read": 0.06 }, - "limit": { "context": 262144, "output": 262144 } + "knowledge": "2024-03", + "release_date": "2024-03-07", + "last_updated": "2024-03-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 4096 + }, + "cost": { + "input": 0.25, + "output": 1.25, + "cache_read": 0.03, + "cache_write": 0.3 + } }, - "qwen-max-latest": { - "id": "qwen-max-latest", - "name": "Qwen Max Latest", - "family": "qwen", - "attachment": true, + "llama-4-maverick": { + "id": "llama-4-maverick", + "name": "Meta Llama 4 Maverick 17B 128E", + "family": "llama", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-01-25", - "last_updated": "2025-01-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1.6, "output": 6.4 }, - "limit": { "context": 131072, "output": 32000 } + "knowledge": "2025-01", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "gpt-5.2-chat-latest": { - "id": "gpt-5.2-chat-latest", - "name": "GPT-5.2 Chat", - "family": "gpt", - "attachment": true, + "claude-sonnet-4-5-20250929": { + "id": "claude-sonnet-4-5-20250929", + "name": "Anthropic: Claude Sonnet 4.5 (20250929)", + "family": "claude-sonnet", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": false, "temperature": true, - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-09", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.18 }, - "limit": { "context": 128000, "output": 16400 } - }, - "qwen-vl-plus": { - "id": "qwen-vl-plus", - "name": "Qwen VL Plus", - "family": "qwen", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2025-02-05", - "last_updated": "2025-02-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.21, "output": 0.64 }, - "limit": { "context": 131072, "output": 32000 } - }, - "qwen-max": { - "id": "qwen-max", - "name": "Qwen Max", - "family": "qwen", - "attachment": true, - "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1.6, "output": 6.4 }, - "limit": { "context": 131072, "output": 32000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.30000000000000004, + "cache_write": 3.75 + } }, - "glm-image": { - "id": "glm-image", - "name": "GLM-Image", - "family": "glm", + "gemini-2.5-pro": { + "id": "gemini-2.5-pro", + "name": "Google Gemini 2.5 Pro", + "family": "gemini-pro", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-01-14", - "last_updated": "2025-01-14", - "modalities": { "input": ["text"], "output": ["text", "image"] }, + "knowledge": "2025-06", + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 2000, "output": 4096 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.3125, + "cache_write": 1.25 + } }, - "gpt-5": { - "id": "gpt-5", - "name": "GPT-5", - "family": "gpt", - "attachment": true, + "claude-4.5-opus": { + "id": "claude-4.5-opus", + "name": "Anthropic: Claude Opus 4.5", + "family": "claude-opus", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-08-01", - "last_updated": "2025-08-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-11", + "release_date": "2025-11-24", + "last_updated": "2025-11-24", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.13 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "llama-3.3-70b-instruct": { - "id": "llama-3.3-70b-instruct", - "name": "Llama 3.3 70B Instruct", - "family": "llama", + "grok-4-1-fast-non-reasoning": { + "id": "grok-4-1-fast-non-reasoning", + "name": "xAI Grok 4.1 Fast Non-Reasoning", + "family": "grok", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.13, "output": 0.4 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2025-11", + "release_date": "2025-11-17", + "last_updated": "2025-11-17", + "modalities": { + "input": ["text", "image"], + "output": ["text", "image"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.19999999999999998, + "output": 0.5, + "cache_read": 0.049999999999999996 + } }, - "gemma-3-1b-it": { - "id": "gemma-3-1b-it", - "name": "Gemma 3 1B IT", - "family": "gemma", + "sonar-pro": { + "id": "sonar-pro", + "name": "Perplexity Sonar Pro", + "family": "sonar-pro", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, "temperature": true, - "release_date": "2025-03-12", - "last_updated": "2025-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.08, "output": 0.3 }, - "limit": { "context": 1000000, "output": 16384 } + "knowledge": "2025-01", + "release_date": "2025-01-27", + "last_updated": "2025-01-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 4096 + }, + "cost": { + "input": 3, + "output": 15 + } }, - "claude-opus-4-20250514": { - "id": "claude-opus-4-20250514", - "name": "Claude Opus 4 (2025-05-14)", - "family": "claude", + "mistral-large-2411": { + "id": "mistral-large-2411", + "name": "Mistral-Large", + "family": "mistral-large", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": false, "temperature": true, - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-07", + "release_date": "2024-07-24", + "last_updated": "2024-07-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5 }, - "limit": { "context": 200000, "output": 16384 } + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 6 + } }, - "gemini-3.1-pro-preview": { - "id": "gemini-3.1-pro-preview", - "name": "Gemini 3.1 Pro (Preview)", - "family": "gemini", - "attachment": true, - "reasoning": true, + "o3-pro": { + "id": "o3-pro", + "name": "OpenAI o3 Pro", + "family": "o-pro", + "attachment": false, + "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-02-19", - "last_updated": "2026-02-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-06", + "release_date": "2024-06-01", + "last_updated": "2024-06-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 12, "cache_read": 0.2 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 20, + "output": 80 + } }, - "devstral-2512": { - "id": "devstral-2512", - "name": "Devstral 2", - "family": "mistral", + "claude-opus-4-1": { + "id": "claude-opus-4-1", + "name": "Anthropic: Claude Opus 4.1", + "family": "claude-opus", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": true, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-12-09", - "last_updated": "2025-12-09", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 262144, "output": 16384 } + "knowledge": "2025-08", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "seedream-4-0": { - "id": "seedream-4-0", - "name": "Seedream 4.0", - "family": "seed", + "gpt-4o-mini": { + "id": "gpt-4o-mini", + "name": "OpenAI GPT-4o-mini", + "family": "gpt-mini", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, + "tool_call": true, "temperature": true, - "release_date": "2025-09-16", - "last_updated": "2025-09-16", - "modalities": { "input": ["text"], "output": ["text", "image"] }, + "knowledge": "2024-07", + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 2000, "output": 4096 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.6, + "cache_read": 0.075 + } }, - "claude-3-7-sonnet-20250219": { - "id": "claude-3-7-sonnet-20250219", - "name": "Claude 3.7 Sonnet (2025-02-19)", - "family": "claude", + "claude-4.5-haiku": { + "id": "claude-4.5-haiku", + "name": "Anthropic: Claude 4.5 Haiku", + "family": "claude-haiku", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": false, "temperature": true, - "release_date": "2025-02-19", - "last_updated": "2025-02-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-10", + "release_date": "2025-10-01", + "last_updated": "2025-10-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3 }, - "limit": { "context": 200000, "output": 8192 } + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.09999999999999999, + "cache_write": 1.25 + } }, - "kimi-k2.5": { - "id": "kimi-k2.5", - "name": "Kimi K2.5", + "kimi-k2-0711": { + "id": "kimi-k2-0711", + "name": "Kimi K2 (07/11)", "family": "kimi", - "attachment": true, - "reasoning": true, + "attachment": false, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-01-26", - "last_updated": "2026-01-26", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.6, "output": 3, "cache_read": 0.1 }, - "limit": { "context": 262144, "output": 32768 } + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.5700000000000001, + "output": 2.3 + } }, - "gemma-3n-e2b-it": { - "id": "gemma-3n-e2b-it", - "name": "Gemma 3n E2B IT", - "family": "gemma", + "o4-mini": { + "id": "o4-mini", + "name": "OpenAI o4 Mini", + "family": "o-mini", "attachment": false, "reasoning": false, + "tool_call": true, + "temperature": false, + "knowledge": "2024-06", + "release_date": "2024-06-01", + "last_updated": "2024-06-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.275 + } + }, + "sonar-deep-research": { + "id": "sonar-deep-research", + "name": "Perplexity Sonar Deep Research", + "family": "sonar-deep-research", + "attachment": false, + "reasoning": true, "tool_call": false, - "structured_output": false, "temperature": true, - "release_date": "2025-06-26", - "last_updated": "2025-06-26", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.08, "output": 0.3 }, - "limit": { "context": 1000000, "output": 16384 } + "knowledge": "2025-01", + "release_date": "2025-01-27", + "last_updated": "2025-01-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 127000, + "output": 4096 + }, + "cost": { + "input": 2, + "output": 8 + } }, - "llama-guard-4-12b": { - "id": "llama-guard-4-12b", - "name": "Llama Guard 4 12B", - "family": "llama", + "gemma-3-12b-it": { + "id": "gemma-3-12b-it", + "name": "Google Gemma 3 12B", + "family": "gemma", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, "temperature": true, - "release_date": "2025-04-30", - "last_updated": "2025-04-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 131072, "output": 16384 } - }, - "gpt-4-turbo": { - "id": "gpt-4-turbo", - "name": "GPT-4 Turbo", - "family": "gpt", - "attachment": true, - "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2023-11-06", - "last_updated": "2023-11-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 10, "output": 30 }, - "limit": { "context": 128000, "output": 16384 } - }, - "qwen-image-max": { - "id": "qwen-image-max", - "name": "Qwen Image Max", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2025-08-04", - "last_updated": "2025-08-04", - "modalities": { "input": ["text"], "output": ["text", "image"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 2000, "output": 4096 } - }, - "mistral-large-latest": { - "id": "mistral-large-latest", - "name": "Mistral Large Latest", - "family": "mistral", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2025-12-02", - "last_updated": "2025-12-02", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 4, "output": 12 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.049999999999999996, + "output": 0.09999999999999999 + } }, - "qwq-plus": { - "id": "qwq-plus", - "name": "QwQ Plus", - "family": "qwen", + "gemini-2.5-flash": { + "id": "gemini-2.5-flash", + "name": "Google Gemini 2.5 Flash", + "family": "gemini-flash", "attachment": false, "reasoning": true, - "tool_call": false, - "structured_output": false, + "tool_call": true, "temperature": true, - "release_date": "2025-03-06", - "last_updated": "2025-03-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.8, "output": 2.4 }, - "limit": { "context": 131072, "output": 8192 } + "knowledge": "2025-06", + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65535 + }, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.075, + "cache_write": 0.3 + } }, - "gpt-4o": { - "id": "gpt-4o", - "name": "GPT-4o", - "family": "gpt", - "attachment": true, + "deepseek-tng-r1t2-chimera": { + "id": "deepseek-tng-r1t2-chimera", + "name": "DeepSeek TNG R1T2 Chimera", + "family": "deepseek-thinking", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-05-13", - "last_updated": "2024-05-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-07", + "release_date": "2025-07-02", + "last_updated": "2025-07-02", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 10, "cache_read": 1.25 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 130000, + "output": 163840 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "grok-4-fast-non-reasoning": { - "id": "grok-4-fast-non-reasoning", - "name": "Grok 4 Fast Non-Reasoning", - "family": "grok", - "attachment": true, + "gpt-5.1-codex-mini": { + "id": "gpt-5.1-codex-mini", + "name": "OpenAI: GPT-5.1 Codex Mini", + "family": "gpt-codex", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-10-10", - "last_updated": "2025-10-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-01", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text", "image"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.024999999999999998 + } }, - "glm-4.7-flash": { - "id": "glm-4.7-flash", - "name": "GLM-4.7 Flash", - "family": "glm", + "claude-sonnet-4": { + "id": "claude-sonnet-4", + "name": "Anthropic: Claude Sonnet 4", + "family": "claude-sonnet", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-05", + "release_date": "2025-05-14", + "last_updated": "2025-05-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 200000, "output": 128000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.30000000000000004, + "cache_write": 3.75 + } }, - "grok-4": { - "id": "grok-4", - "name": "Grok 4", + "grok-code-fast-1": { + "id": "grok-code-fast-1", + "name": "xAI Grok Code Fast 1", "family": "grok", - "attachment": true, + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-08", + "release_date": "2024-08-25", + "last_updated": "2024-08-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 256000, "output": 256000 } + "limit": { + "context": 256000, + "output": 10000 + }, + "cost": { + "input": 0.19999999999999998, + "output": 1.5, + "cache_read": 0.02 + } }, - "grok-code-fast-1": { - "id": "grok-code-fast-1", - "name": "Grok Code Fast 1", - "family": "grok", + "gpt-5.1": { + "id": "gpt-5.1", + "name": "OpenAI GPT-5.1", + "family": "gpt", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-08-28", - "last_updated": "2025-08-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-01", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text", "image"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 1.5 }, - "limit": { "context": 256000, "output": 10000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.12500000000000003 + } }, - "grok-4-20-beta-0309-non-reasoning": { - "id": "grok-4-20-beta-0309-non-reasoning", - "name": "Grok 4.20 Beta Non-Reasoning (0309)", - "family": "grok", - "attachment": true, + "deepseek-reasoner": { + "id": "deepseek-reasoner", + "name": "DeepSeek Reasoner", + "family": "deepseek-thinking", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, + "tool_call": false, "temperature": true, - "release_date": "2026-03-09", - "last_updated": "2026-03-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 6, "cache_read": 0.2 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 128000, + "output": 64000 + }, + "cost": { + "input": 0.56, + "output": 1.68, + "cache_read": 0.07 + } }, - "gpt-5.3-codex": { - "id": "gpt-5.3-codex", - "name": "GPT-5.3 Codex", - "family": "gpt", - "attachment": true, + "grok-4-fast-reasoning": { + "id": "grok-4-fast-reasoning", + "name": "xAI: Grok 4 Fast Reasoning", + "family": "grok", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-02-24", - "last_updated": "2026-02-24", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-09", + "release_date": "2025-09-01", + "last_updated": "2025-09-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.18 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 2000000, + "output": 2000000 + }, + "cost": { + "input": 0.19999999999999998, + "output": 0.5, + "cache_read": 0.049999999999999996 + } }, - "qwen-plus-latest": { - "id": "qwen-plus-latest", - "name": "Qwen Plus Latest", - "family": "qwen", + "o1": { + "id": "o1", + "name": "OpenAI: o1", + "family": "o", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "knowledge": "2025-01", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 15, + "output": 60, + "cache_read": 7.5 + } + }, + "llama-3.1-8b-instant": { + "id": "llama-3.1-8b-instant", + "name": "Meta Llama 3.1 8B Instant", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-09-09", - "last_updated": "2024-09-09", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.4, "output": 1.2, "cache_read": 0.08 }, - "limit": { "context": 1000000, "output": 32000 } + "knowledge": "2024-07", + "release_date": "2024-07-01", + "last_updated": "2024-07-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 32678 + }, + "cost": { + "input": 0.049999999999999996, + "output": 0.08 + } }, - "gemma-3-4b-it": { - "id": "gemma-3-4b-it", - "name": "Gemma 3 4B IT", - "family": "gemma", + "o3-mini": { + "id": "o3-mini", + "name": "OpenAI o3 Mini", + "family": "o-mini", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2025-03-10", - "last_updated": "2025-03-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.08, "output": 0.3 }, - "limit": { "context": 1000000, "output": 16384 } + "tool_call": true, + "temperature": false, + "knowledge": "2023-10", + "release_date": "2023-10-01", + "last_updated": "2023-10-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.55 + } }, - "ministral-8b-2512": { - "id": "ministral-8b-2512", - "name": "Ministral 8B", - "family": "mistral", - "attachment": true, + "sonar": { + "id": "sonar", + "name": "Perplexity Sonar", + "family": "sonar", + "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": true, "temperature": true, - "release_date": "2025-12-02", - "last_updated": "2025-12-02", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.15 }, - "limit": { "context": 262144, "output": 16384 } + "knowledge": "2025-01", + "release_date": "2025-01-27", + "last_updated": "2025-01-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 127000, + "output": 4096 + }, + "cost": { + "input": 1, + "output": 1 + } }, - "kimi-k2-thinking-turbo": { - "id": "kimi-k2-thinking-turbo", - "name": "Kimi K2 Thinking Turbo", + "kimi-k2-0905": { + "id": "kimi-k2-0905", + "name": "Kimi K2 (09/05)", "family": "kimi", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-11-06", - "last_updated": "2025-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-09", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.15, "output": 8, "cache_read": 0.15 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 262144, + "output": 16384 + }, + "cost": { + "input": 0.5, + "output": 2, + "cache_read": 0.39999999999999997 + } }, - "ministral-14b-2512": { - "id": "ministral-14b-2512", - "name": "Ministral 14B", - "family": "mistral", - "attachment": true, + "mistral-small": { + "id": "mistral-small", + "name": "Mistral Small", + "family": "mistral-small", + "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2025-12-02", - "last_updated": "2025-12-02", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 262144, "output": 16384 } - }, - "gpt-5-mini": { - "id": "gpt-5-mini", - "name": "GPT-5 Mini", - "family": "gpt", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-08-01", - "last_updated": "2025-08-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.03 }, - "limit": { "context": 400000, "output": 128000 } - }, - "seed-1-6-250615": { - "id": "seed-1-6-250615", - "name": "Seed 1.6 (250615)", - "family": "seed", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-06-25", - "last_updated": "2025-06-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-02", + "release_date": "2024-02-26", + "last_updated": "2024-02-26", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.05 }, - "limit": { "context": 256000, "output": 16384 } + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 75, + "output": 200 + } }, - "qwen3-30b-a3b-thinking-2507": { - "id": "qwen3-30b-a3b-thinking-2507", - "name": "Qwen3 30B A3B Thinking 2507", + "qwen3-30b-a3b": { + "id": "qwen3-30b-a3b", + "name": "Qwen3 30B A3B", "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-07-30", - "last_updated": "2025-07-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 262000, "output": 8192 } + "knowledge": "2025-06", + "release_date": "2025-06-01", + "last_updated": "2025-06-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 41000, + "output": 41000 + }, + "cost": { + "input": 0.08, + "output": 0.29 + } }, - "kimi-k2": { - "id": "kimi-k2", - "name": "Kimi K2", - "family": "kimi", + "grok-4": { + "id": "grok-4", + "name": "xAI Grok 4", + "family": "grok", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-07-11", - "last_updated": "2025-07-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-07", + "release_date": "2024-07-09", + "last_updated": "2024-07-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 3, "cache_read": 0.5 }, - "limit": { "context": 131072, "output": 16384 } + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.75 + } }, - "claude-opus-4-6": { - "id": "claude-opus-4-6", - "name": "Claude Opus 4.6", - "family": "claude", - "attachment": true, + "qwen3-235b-a22b-thinking": { + "id": "qwen3-235b-a22b-thinking", + "name": "Qwen3 235B A22B Thinking", + "family": "qwen", + "attachment": false, "reasoning": true, - "tool_call": true, - "structured_output": true, + "tool_call": false, "temperature": true, - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-07", + "release_date": "2025-07-25", + "last_updated": "2025-07-25", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5 }, - "limit": { "context": 1000000, "output": 128000 } + "limit": { + "context": 262144, + "output": 81920 + }, + "cost": { + "input": 0.3, + "output": 2.9000000000000004 + } }, - "qwen-image-edit-plus": { - "id": "qwen-image-edit-plus", - "name": "Qwen Image Edit Plus", + "qwen2.5-coder-7b-fast": { + "id": "qwen2.5-coder-7b-fast", + "name": "Qwen2.5 Coder 7B fast", "family": "qwen", - "attachment": true, + "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, "temperature": true, - "release_date": "2025-08-19", - "last_updated": "2025-08-19", - "modalities": { "input": ["text", "image"], "output": ["text", "image"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 2000, "output": 4096 } + "knowledge": "2024-09", + "release_date": "2024-09-15", + "last_updated": "2024-09-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32000, + "output": 8192 + }, + "cost": { + "input": 0.03, + "output": 0.09 + } }, - "claude-sonnet-4-5-20250929": { - "id": "claude-sonnet-4-5-20250929", - "name": "Claude Sonnet 4.5 (2025-09-29)", - "family": "claude", + "llama-3.1-8b-instruct-turbo": { + "id": "llama-3.1-8b-instruct-turbo", + "name": "Meta Llama 3.1 8B Instruct Turbo", + "family": "llama", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-07", + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.02, + "output": 0.03 + } }, - "gpt-4o-mini": { - "id": "gpt-4o-mini", - "name": "GPT-4o Mini", - "family": "gpt", + "qwen3-next-80b-a3b-instruct": { + "id": "qwen3-next-80b-a3b-instruct", + "name": "Qwen3 Next 80B A3B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-07-18", - "last_updated": "2024-07-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.6, "cache_read": 0.08 }, - "limit": { "context": 128000, "output": 16384 } - }, - "mistral-small-2506": { - "id": "mistral-small-2506", - "name": "Mistral Small 3.2", - "family": "mistral", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2025-06-20", - "last_updated": "2025-06-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 262000, + "output": 16384 + }, + "cost": { + "input": 0.14, + "output": 1.4 + } }, - "qwen35-397b-a17b": { - "id": "qwen35-397b-a17b", - "name": "Qwen3.5 397B A17B", - "family": "qwen", - "attachment": true, + "glm-4.6": { + "id": "glm-4.6", + "name": "Zai GLM-4.6", + "family": "glm", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-02-16", - "last_updated": "2026-02-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 3.6 }, - "limit": { "context": 262144, "output": 65536 } + "knowledge": "2024-07", + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.44999999999999996, + "output": 1.5 + } }, - "gemma-3n-e4b-it": { - "id": "gemma-3n-e4b-it", - "name": "Gemma 3n E4B IT", - "family": "gemma", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2025-06-26", - "last_updated": "2025-06-26", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.08, "output": 0.3 }, - "limit": { "context": 1000000, "output": 16384 } - }, - "qwen-plus": { - "id": "qwen-plus", - "name": "Qwen Plus", - "family": "qwen", + "gpt-5-codex": { + "id": "gpt-5-codex", + "name": "OpenAI: GPT-5 Codex", + "family": "gpt-codex", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-01-25", - "last_updated": "2025-01-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.4, "output": 1.2, "cache_read": 0.08 }, - "limit": { "context": 131072, "output": 32000 } - }, - "codestral-2508": { - "id": "codestral-2508", - "name": "Codestral", - "family": "mistral", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2025-07-30", - "last_updated": "2025-07-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 0.9 }, - "limit": { "context": 256000, "output": 16384 } + "temperature": false, + "knowledge": "2025-01", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.12500000000000003 + } }, - "claude-sonnet-4-6": { - "id": "claude-sonnet-4-6", - "name": "Claude Sonnet 4.6", - "family": "claude", + "claude-opus-4-1-20250805": { + "id": "claude-opus-4-1-20250805", + "name": "Anthropic: Claude Opus 4.1 (20250805)", + "family": "claude-opus", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-02-17", - "last_updated": "2026-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-08", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "gpt-4.1": { - "id": "gpt-4.1", - "name": "GPT-4.1", - "family": "gpt", - "attachment": true, + "gpt-5.1-chat-latest": { + "id": "gpt-5.1-chat-latest", + "name": "OpenAI GPT-5.1 Chat", + "family": "gpt-codex", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-01", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text", "image"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8, "cache_read": 0.5 }, - "limit": { "context": 1000000, "output": 16384 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.12500000000000003 + } }, - "llama-3.1-8b-instruct": { - "id": "llama-3.1-8b-instruct", - "name": "Llama 3.1 8B Instruct", - "family": "llama", + "claude-haiku-4-5-20251001": { + "id": "claude-haiku-4-5-20251001", + "name": "Anthropic: Claude 4.5 Haiku (20251001)", + "family": "claude-haiku", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.22, "output": 0.22 }, - "limit": { "context": 128000, "output": 2048 }, - "status": "beta" + "knowledge": "2025-10", + "release_date": "2025-10-01", + "last_updated": "2025-10-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.09999999999999999, + "cache_write": 1.25 + } }, - "qwen-image-plus": { - "id": "qwen-image-plus", - "name": "Qwen Image Plus", - "family": "qwen", + "sonar-reasoning": { + "id": "sonar-reasoning", + "name": "Perplexity Sonar Reasoning", + "family": "sonar-reasoning", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2025-08-04", - "last_updated": "2025-08-04", - "modalities": { "input": ["text"], "output": ["text", "image"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 2000, "output": 4096 } - }, - "glm-4.5-airx": { - "id": "glm-4.5-airx", - "name": "GLM-4.5 AirX", - "family": "glm", - "attachment": false, - "reasoning": false, - "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-01-27", + "last_updated": "2025-01-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.5, "cache_read": 0.22 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 127000, + "output": 4096 + }, + "cost": { + "input": 1, + "output": 5 + } }, - "minimax-m2": { - "id": "minimax-m2", - "name": "MiniMax M2", - "family": "minimax", + "claude-opus-4": { + "id": "claude-opus-4", + "name": "Anthropic: Claude Opus 4", + "family": "claude-opus", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-10-27", - "last_updated": "2025-10-27", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 1, "cache_read": 0.03 }, - "limit": { "context": 196608, "output": 131072 } - }, - "seed-1-6-flash-250715": { - "id": "seed-1-6-flash-250715", - "name": "Seed 1.6 Flash (250715)", - "family": "seed", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-07-26", - "last_updated": "2025-07-26", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-05", + "release_date": "2025-05-14", + "last_updated": "2025-05-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.07, "output": 0.3, "cache_read": 0.02 }, - "limit": { "context": 256000, "output": 16384 } + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "gpt-3.5-turbo": { - "id": "gpt-3.5-turbo", - "name": "GPT-3.5 Turbo", - "family": "gpt", + "llama-prompt-guard-2-86m": { + "id": "llama-prompt-guard-2-86m", + "name": "Meta Llama Prompt Guard 2 86M", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, + "tool_call": false, "temperature": true, - "release_date": "2022-11-30", - "last_updated": "2022-11-30", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2024-10-01", + "last_updated": "2024-10-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 1.5 }, - "limit": { "context": 16385, "output": 16384 } - }, - "qwen3-vl-flash": { - "id": "qwen3-vl-flash", - "name": "Qwen3 VL Flash", - "family": "qwen", - "attachment": true, - "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.05, "output": 0.4, "cache_read": 0.01 }, - "limit": { "context": 262144, "output": 32768 } + "limit": { + "context": 512, + "output": 2 + }, + "cost": { + "input": 0.01, + "output": 0.01 + } }, - "sonar": { - "id": "sonar", - "name": "Sonar", - "family": "sonar", + "gpt-4.1-nano": { + "id": "gpt-4.1-nano", + "name": "OpenAI GPT-4.1 Nano", + "family": "gpt-nano", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": true, + "tool_call": true, "temperature": true, - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 1 }, - "limit": { "context": 130000, "output": 16384 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.09999999999999999, + "output": 0.39999999999999997, + "cache_read": 0.024999999999999998 + } }, - "qwen3-30b-a3b-fp8": { - "id": "qwen3-30b-a3b-fp8", - "name": "Qwen3 30B A3B FP8", + "qwen3-coder-30b-a3b-instruct": { + "id": "qwen3-coder-30b-a3b-instruct", + "name": "Qwen3 Coder 30B A3B Instruct", "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2025-04-28", - "last_updated": "2025-04-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.09, "output": 0.45 }, - "limit": { "context": 40960, "output": 20000 } - }, - "gpt-oss-120b": { - "id": "gpt-oss-120b", - "name": "GPT OSS 120B", - "family": "gpt-oss", - "attachment": false, - "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-07", + "release_date": "2025-07-31", + "last_updated": "2025-07-31", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.75 }, - "limit": { "context": 131072, "output": 32766 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.09999999999999999, + "output": 0.3 + } }, - "minimax-text-01": { - "id": "minimax-text-01", - "name": "MiniMax Text 01", - "family": "minimax", + "claude-3.5-haiku": { + "id": "claude-3.5-haiku", + "name": "Anthropic: Claude 3.5 Haiku", + "family": "claude-haiku", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, + "tool_call": true, "temperature": true, - "release_date": "2025-01-15", - "last_updated": "2025-01-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 1.1 }, - "limit": { "context": 1000000, "output": 131072 } + "knowledge": "2024-10", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 0.7999999999999999, + "output": 4, + "cache_read": 0.08, + "cache_write": 1 + } }, - "llama-4-scout": { - "id": "llama-4-scout", - "name": "Llama 4 Scout", - "family": "llama", + "grok-3-mini": { + "id": "grok-3-mini", + "name": "xAI Grok 3 Mini", + "family": "grok", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": false, "temperature": true, - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.18, "output": 0.59 }, - "limit": { "context": 32768, "output": 16384 }, - "status": "beta" + "knowledge": "2024-06", + "release_date": "2024-06-01", + "last_updated": "2024-06-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 0.5, + "cache_read": 0.075 + } }, - "gemini-2.0-flash-lite": { - "id": "gemini-2.0-flash-lite", - "name": "Gemini 2.0 Flash Lite", - "family": "gemini", + "o3": { + "id": "o3", + "name": "OpenAI o3", + "family": "o", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-02-25", - "last_updated": "2025-02-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-06", + "release_date": "2024-06-01", + "last_updated": "2024-06-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.08, "output": 0.3 }, - "limit": { "context": 1048576, "output": 8192 }, - "status": "deprecated" + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } }, - "gpt-5.4": { - "id": "gpt-5.4", - "name": "GPT-5.4", - "family": "gpt", - "attachment": true, - "reasoning": true, + "deepseek-v3.2": { + "id": "deepseek-v3.2", + "name": "DeepSeek V3.2", + "family": "deepseek", + "attachment": false, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-03-06", - "last_updated": "2026-03-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.5, "output": 15, "cache_read": 0.25 }, - "limit": { "context": 1050000, "output": 128000 } - }, - "o1": { - "id": "o1", - "name": "o1", - "family": "gpt", - "attachment": true, - "reasoning": true, - "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2024-09-12", - "last_updated": "2024-09-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-09", + "release_date": "2025-09-22", + "last_updated": "2025-09-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 60, "cache_read": 7.5 }, - "limit": { "context": 200000, "output": 16384 } + "limit": { + "context": 163840, + "output": 65536 + }, + "cost": { + "input": 0.27, + "output": 0.41 + } }, - "o3": { - "id": "o3", - "name": "o3", - "family": "gpt", - "attachment": true, + "gpt-oss-20b": { + "id": "gpt-oss-20b", + "name": "OpenAI GPT-OSS 20b", + "family": "gpt-oss", + "attachment": false, "reasoning": true, - "tool_call": false, - "structured_output": true, + "tool_call": true, "temperature": true, - "release_date": "2025-06-01", - "last_updated": "2025-06-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-06", + "release_date": "2024-06-01", + "last_updated": "2024-06-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8, "cache_read": 0.5 }, - "limit": { "context": 200000, "output": 16384 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.049999999999999996, + "output": 0.19999999999999998 + } }, - "qwen2-5-vl-32b-instruct": { - "id": "qwen2-5-vl-32b-instruct", - "name": "Qwen2.5 VL 32B Instruct", - "family": "qwen", - "attachment": true, + "gpt-5-pro": { + "id": "gpt-5-pro", + "name": "OpenAI: GPT-5 Pro", + "family": "gpt-pro", + "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2025-02-19", - "last_updated": "2025-02-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1.4, "output": 4.2 }, - "limit": { "context": 131072, "output": 32768 } + "temperature": false, + "knowledge": "2025-01", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 15, + "output": 120 + } }, - "llama-3-8b-instruct": { - "id": "llama-3-8b-instruct", - "name": "Llama 3 8B Instruct", + "llama-guard-4": { + "id": "llama-guard-4", + "name": "Meta Llama Guard 4 12B", "family": "llama", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": true, "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.04, "output": 0.04 }, - "limit": { "context": 8192, "output": 8192 } + "knowledge": "2025-01", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 1024 + }, + "cost": { + "input": 0.21, + "output": 0.21 + } }, - "grok-4-1-fast-non-reasoning": { - "id": "grok-4-1-fast-non-reasoning", - "name": "Grok 4.1 Fast Non-Reasoning", - "family": "grok", - "attachment": true, + "gpt-4o": { + "id": "gpt-4o", + "name": "OpenAI GPT-4o", + "family": "gpt", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-11-19", - "last_updated": "2025-11-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-05", + "release_date": "2024-05-13", + "last_updated": "2024-05-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 10, + "cache_read": 1.25 + } }, - "llama-3-70b-instruct": { - "id": "llama-3-70b-instruct", - "name": "Llama 3 70B Instruct", - "family": "llama", + "qwen3-vl-235b-a22b-instruct": { + "id": "qwen3-vl-235b-a22b-instruct", + "name": "Qwen3 VL 235B A22B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2024-04-18", - "last_updated": "2024-04-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.51, "output": 0.74 }, - "limit": { "context": 8192, "output": 8000 } - }, - "gpt-5.3-chat-latest": { - "id": "gpt-5.3-chat-latest", - "name": "GPT-5.3 Chat", - "family": "gpt", - "attachment": true, - "reasoning": true, "tool_call": true, - "structured_output": false, "temperature": true, - "release_date": "2026-03-03", - "last_updated": "2026-03-03", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-09", + "release_date": "2025-09-23", + "last_updated": "2025-09-23", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.18 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 256000, + "output": 16384 + }, + "cost": { + "input": 0.3, + "output": 1.5 + } }, - "glm-4.5": { - "id": "glm-4.5", - "name": "GLM-4.5", - "family": "glm", + "gemini-2.5-flash-lite": { + "id": "gemini-2.5-flash-lite", + "name": "Google Gemini 2.5 Flash Lite", + "family": "gemini-flash-lite", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-07", + "release_date": "2025-07-22", + "last_updated": "2025-07-22", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.6, "output": 2.2, "cache_read": 0.11 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 1048576, + "output": 65535 + }, + "cost": { + "input": 0.09999999999999999, + "output": 0.39999999999999997, + "cache_read": 0.024999999999999998, + "cache_write": 0.09999999999999999 + } }, - "minimax-m2.1": { - "id": "minimax-m2.1", - "name": "MiniMax M2.1", - "family": "minimax", + "qwen3-coder": { + "id": "qwen3-coder", + "name": "Qwen3 Coder 480B A35B Instruct Turbo", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.27, "output": 1.1 }, - "limit": { "context": 196608, "output": 131072 } + "knowledge": "2025-07", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 16384 + }, + "cost": { + "input": 0.22, + "output": 0.95 + } }, - "glm-4.7-flashx": { - "id": "glm-4.7-flashx", - "name": "GLM-4.7 FlashX", - "family": "glm", + "gpt-5": { + "id": "gpt-5", + "name": "OpenAI GPT-5", + "family": "gpt", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-01", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.07, "output": 0.4, "cache_read": 0.01 }, - "limit": { "context": 200000, "output": 128000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.12500000000000003 + } }, - "sonar-reasoning-pro": { - "id": "sonar-reasoning-pro", - "name": "Sonar Reasoning Pro", - "family": "sonar", + "ernie-4.5-21b-a3b-thinking": { + "id": "ernie-4.5-21b-a3b-thinking", + "name": "Baidu Ernie 4.5 21B A3B Thinking", + "family": "ernie", "attachment": false, "reasoning": true, "tool_call": false, - "structured_output": true, "temperature": true, - "release_date": "2025-03-07", - "last_updated": "2025-03-07", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-03", + "release_date": "2025-03-16", + "last_updated": "2025-03-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 128000, + "output": 8000 + }, + "cost": { + "input": 0.07, + "output": 0.28 + } }, - "gemini-pro-latest": { - "id": "gemini-pro-latest", - "name": "Gemini Pro Latest", - "family": "gemini", - "attachment": true, + "gpt-oss-120b": { + "id": "gpt-oss-120b", + "name": "OpenAI GPT-OSS 120b", + "family": "gpt-oss", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-02-27", - "last_updated": "2026-02-27", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-06", + "release_date": "2024-06-01", + "last_updated": "2024-06-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 12, "cache_read": 0.2 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.04, + "output": 0.16 + } }, - "veo-3.1-fast-generate-preview": { - "id": "veo-3.1-fast-generate-preview", - "name": "Veo 3.1 Fast", - "family": "gemini", + "gpt-5-chat-latest": { + "id": "gpt-5-chat-latest", + "name": "OpenAI GPT-5 Chat Latest", + "family": "gpt-codex", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2026-03-14", - "last_updated": "2026-03-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": false, + "knowledge": "2024-09", + "release_date": "2024-09-30", + "last_updated": "2024-09-30", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 32768, "output": 1 }, - "status": "beta" + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.12500000000000003 + } }, - "claude-3-haiku-20240307": { - "id": "claude-3-haiku-20240307", - "name": "Claude 3 Haiku (2024-03-07)", - "family": "claude", - "attachment": true, - "reasoning": false, + "claude-4.5-sonnet": { + "id": "claude-4.5-sonnet", + "name": "Anthropic: Claude Sonnet 4.5", + "family": "claude-sonnet", + "attachment": false, + "reasoning": true, "tool_call": true, - "structured_output": false, "temperature": true, - "release_date": "2024-03-04", - "last_updated": "2024-03-04", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-09", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 1.25, "cache_read": 0.03 }, - "limit": { "context": 200000, "output": 4096 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.30000000000000004, + "cache_write": 3.75 + } }, - "gpt-4o-search-preview": { - "id": "gpt-4o-search-preview", - "name": "GPT-4o Search Preview", - "family": "gpt", - "attachment": true, + "deepseek-v3": { + "id": "deepseek-v3", + "name": "DeepSeek V3", + "family": "deepseek", + "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, + "tool_call": true, "temperature": true, - "release_date": "2024-10-01", - "last_updated": "2024-10-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2024-12-26", + "last_updated": "2024-12-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.56, + "output": 1.68, + "cache_read": 0.07 + } }, - "llama-4-scout-17b-instruct": { - "id": "llama-4-scout-17b-instruct", - "name": "Llama 4 Scout 17B Instruct", + "llama-3.1-8b-instruct": { + "id": "llama-3.1-8b-instruct", + "name": "Meta Llama 3.1 8B Instruct", "family": "llama", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.17, "output": 0.66 }, - "limit": { "context": 8192, "output": 2048 }, - "status": "beta" - }, - "qwen3-235b-a22b-fp8": { - "id": "qwen3-235b-a22b-fp8", - "name": "Qwen3 235B A22B FP8", - "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2025-04-28", - "last_updated": "2025-04-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.8 }, - "limit": { "context": 40960, "output": 20000 } - }, - "claude-sonnet-4-20250514": { - "id": "claude-sonnet-4-20250514", - "name": "Claude Sonnet 4 (2025-05-14)", - "family": "claude", - "attachment": false, - "reasoning": true, "tool_call": true, - "structured_output": false, "temperature": true, - "release_date": "2025-05-14", - "last_updated": "2025-05-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-07", + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3 }, - "limit": { "context": 200000, "output": 16384 } + "limit": { + "context": 16384, + "output": 16384 + }, + "cost": { + "input": 0.02, + "output": 0.049999999999999996 + } }, - "grok-4-0709": { - "id": "grok-4-0709", - "name": "Grok 4 (0709)", - "family": "grok", + "gpt-4.1": { + "id": "gpt-4.1", + "name": "OpenAI GPT-4.1", + "family": "gpt", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 256000, "output": 256000 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } }, - "glm-4.6v-flashx": { - "id": "glm-4.6v-flashx", - "name": "GLM-4.6V FlashX", - "family": "glm", - "attachment": true, - "reasoning": true, + "kimi-k2-thinking": { + "id": "kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "family": "kimi-thinking", + "attachment": false, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-12-08", - "last_updated": "2025-12-08", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-11", + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.04, "output": 0.4, "cache_read": 0 }, - "limit": { "context": 128000, "output": 16000 } + "limit": { + "context": 256000, + "output": 262144 + }, + "cost": { + "input": 0.48, + "output": 2 + } }, - "glm-4.6": { - "id": "glm-4.6", - "name": "GLM-4.6", - "family": "glm", + "gpt-4.1-mini": { + "id": "gpt-4.1-mini", + "name": "OpenAI GPT-4.1 Mini", + "family": "gpt-mini", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.6, "output": 2.2, "cache_read": 0.11 }, - "limit": { "context": 200000, "output": 16384 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.39999999999999997, + "output": 1.5999999999999999, + "cache_read": 0.09999999999999999 + } }, - "gemini-3-flash-preview": { - "id": "gemini-3-flash-preview", - "name": "Gemini 3 Flash (Preview)", - "family": "gemini", - "attachment": true, + "deepseek-v3.1-terminus": { + "id": "deepseek-v3.1-terminus", + "name": "DeepSeek V3.1 Terminus", + "family": "deepseek", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-09", + "release_date": "2025-09-22", + "last_updated": "2025-09-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 3, "cache_read": 0.05 }, - "limit": { "context": 1048576, "output": 65535 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.27, + "output": 1, + "cache_read": 0.21600000000000003 + } }, - "gpt-5.4-nano": { - "id": "gpt-5.4-nano", - "name": "GPT-5.4 Nano", - "family": "gpt", - "attachment": true, - "reasoning": true, + "gpt-5.1-codex": { + "id": "gpt-5.1-codex", + "name": "OpenAI: GPT-5.1 Codex", + "family": "gpt-codex", + "attachment": false, + "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-03-17", - "last_updated": "2026-03-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-01", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text", "image"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 1.25, "cache_read": 0.02 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.12500000000000003 + } }, - "claude-3-5-sonnet": { - "id": "claude-3-5-sonnet", - "name": "Claude 3.5 Sonnet", - "family": "claude", + "grok-3": { + "id": "grok-3", + "name": "xAI Grok 3", + "family": "grok", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": false, "temperature": true, - "release_date": "2024-06-20", - "last_updated": "2024-06-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-06", + "release_date": "2024-06-01", + "last_updated": "2024-06-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3 }, - "limit": { "context": 200000, "output": 16384 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.75 + } }, - "glm-4.6v": { - "id": "glm-4.6v", - "name": "GLM-4.6V", - "family": "glm", - "attachment": true, - "reasoning": true, + "grok-4-fast-non-reasoning": { + "id": "grok-4-fast-non-reasoning", + "name": "xAI Grok 4 Fast Non-Reasoning", + "family": "grok", + "attachment": false, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-12-08", - "last_updated": "2025-12-08", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-09", + "release_date": "2025-09-19", + "last_updated": "2025-09-19", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 0.9, "cache_read": 0.05 }, - "limit": { "context": 128000, "output": 16000 } - }, - "qwen3-vl-8b-instruct": { - "id": "qwen3-vl-8b-instruct", - "name": "Qwen3 VL 8B Instruct", - "family": "qwen", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2025-10-14", - "last_updated": "2025-10-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.08, "output": 0.5 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 2000000, + "output": 2000000 + }, + "cost": { + "input": 0.19999999999999998, + "output": 0.5, + "cache_read": 0.049999999999999996 + } }, - "gpt-4": { - "id": "gpt-4", - "name": "GPT-4", - "family": "gpt", + "sonar-reasoning-pro": { + "id": "sonar-reasoning-pro", + "name": "Perplexity Sonar Reasoning Pro", + "family": "sonar-reasoning", "attachment": false, - "reasoning": false, - "tool_call": true, - "structured_output": false, + "reasoning": true, + "tool_call": false, "temperature": true, - "release_date": "2023-03-14", - "last_updated": "2023-03-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-01-27", + "last_updated": "2025-01-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 30, "output": 60 }, - "limit": { "context": 8192, "output": 8192 } - }, + "limit": { + "context": 127000, + "output": 4096 + }, + "cost": { + "input": 2, + "output": 8 + } + } + } + }, + "ollama-cloud": { + "id": "ollama-cloud", + "env": ["OLLAMA_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://ollama.com/v1", + "name": "Ollama Cloud", + "doc": "https://docs.ollama.com/cloud", + "models": { "minimax-m2.7": { "id": "minimax-m2.7", - "name": "MiniMax M2.7", + "name": "minimax-m2.7", "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2024-01-01", - "last_updated": "2024-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.06 }, - "limit": { "context": 204800, "output": 131100 } + "limit": { + "context": 196608, + "output": 196608 + } }, - "qwen3-coder-480b-a35b-instruct": { - "id": "qwen3-coder-480b-a35b-instruct", - "name": "Qwen3 Coder 480B A35B Instruct", - "family": "qwen", + "gpt-oss:20b": { + "id": "gpt-oss:20b", + "name": "gpt-oss:20b", + "family": "gpt-oss", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-01-31", - "last_updated": "2025-01-31", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.4, "output": 1.8 }, - "limit": { "context": 262000, "output": 8192 } + "limit": { + "context": 131072, + "output": 32768 + } }, - "auto": { - "id": "auto", - "name": "Auto Route", - "family": "auto", + "kimi-k2.5": { + "id": "kimi-k2.5", + "name": "kimi-k2.5", + "family": "kimi", "attachment": true, - "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2024-01-01", - "last_updated": "2024-01-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } - }, - "qwen3-next-80b-a3b-thinking": { - "id": "qwen3-next-80b-a3b-thinking", - "name": "Qwen3 Next 80B A3B Thinking", - "family": "qwen", - "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2025-09-10", - "last_updated": "2025-09-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.5, "output": 6 }, - "limit": { "context": 131072, "output": 32768 }, - "status": "beta" + "limit": { + "context": 262144, + "output": 262144 + } }, - "qwen3-vl-30b-a3b-instruct": { - "id": "qwen3-vl-30b-a3b-instruct", - "name": "Qwen3 VL 30B A3B Instruct", - "family": "qwen", - "attachment": true, - "reasoning": false, + "glm-4.7": { + "id": "glm-4.7", + "name": "glm-4.7", + "family": "glm", + "attachment": false, + "reasoning": true, "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2025-10-05", - "last_updated": "2025-10-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-12-22", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.7 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 202752, + "output": 131072 + } }, - "gemini-2.5-pro": { - "id": "gemini-2.5-pro", - "name": "Gemini 2.5 Pro", - "family": "gemini", + "gemma4:31b": { + "id": "gemma4:31b", + "name": "gemma4:31b", + "family": "gemma", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-03-25", - "last_updated": "2025-03-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.13 }, - "limit": { "context": 1048576, "output": 65536 } + "knowledge": "2025-01", + "release_date": "2026-04-02", + "last_updated": "2026-04-08", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + } }, - "claude-opus-4-1-20250805": { - "id": "claude-opus-4-1-20250805", - "name": "Claude Opus 4.1", - "family": "claude", - "attachment": true, + "gpt-oss:120b": { + "id": "gpt-oss:120b", + "name": "gpt-oss:120b", + "family": "gpt-oss", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5 }, - "limit": { "context": 200000, "output": 32000 } + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + } }, - "gemini-2.5-flash": { - "id": "gemini-2.5-flash", - "name": "Gemini 2.5 Flash", - "family": "gemini", + "qwen3.5:397b": { + "id": "qwen3.5:397b", + "name": "qwen3.5:397b", + "family": "qwen", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-08-26", - "last_updated": "2025-08-26", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 2.5, "cache_read": 0.03 }, - "limit": { "context": 1048576, "output": 65535 } - }, - "sonar-pro": { - "id": "sonar-pro", - "name": "Sonar Pro", - "family": "sonar", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2025-03-07", - "last_updated": "2025-03-07", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 200000, "output": 16384 } + "interleaved": { + "field": "reasoning_details" + }, + "release_date": "2026-02-15", + "last_updated": "2026-02-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + } }, - "qwen3-235b-a22b-thinking-2507": { - "id": "qwen3-235b-a22b-thinking-2507", - "name": "Qwen3 235B A22B Thinking 2507", - "family": "qwen", + "deepseek-v3.1:671b": { + "id": "deepseek-v3.1:671b", + "name": "deepseek-v3.1:671b", + "family": "deepseek", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-07-25", - "last_updated": "2025-07-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-21", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.6 }, - "limit": { "context": 262000, "output": 8192 }, - "status": "beta" + "limit": { + "context": 163840, + "output": 163840 + } }, - "qwen-image-edit-max": { - "id": "qwen-image-edit-max", - "name": "Qwen Image Edit Max", - "family": "qwen", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2026-01-16", - "last_updated": "2026-01-16", - "modalities": { "input": ["text", "image"], "output": ["text", "image"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 2000, "output": 4096 } - }, - "glm-4-32b-0414-128k": { - "id": "glm-4-32b-0414-128k", - "name": "GLM-4 32B (0414-128k)", + "glm-5": { + "id": "glm-5", + "name": "glm-5", "family": "glm", "attachment": false, - "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.1 }, - "limit": { "context": 128000, "output": 16384 } - }, - "gpt-5.2": { - "id": "gpt-5.2", - "name": "GPT-5.2", - "family": "gpt", - "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.18 }, - "limit": { "context": 400000, "output": 128000 } + "interleaved": { + "field": "reasoning_content" + }, + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202752, + "output": 131072 + } }, - "qwen3-next-80b-a3b-instruct": { - "id": "qwen3-next-80b-a3b-instruct", - "name": "Qwen3 Next 80B A3B Instruct", + "qwen3-vl:235b-instruct": { + "id": "qwen3-vl:235b-instruct", + "name": "qwen3-vl:235b-instruct", "family": "qwen", - "attachment": false, + "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-09-10", - "last_updated": "2025-09-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-09-22", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.5, "output": 2 }, - "limit": { "context": 129024, "output": 32768 } - }, - "grok-4-1-fast-reasoning": { - "id": "grok-4-1-fast-reasoning", - "name": "Grok 4.1 Fast Reasoning", - "family": "grok", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-11-19", - "last_updated": "2025-11-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 30000 } - }, - "gpt-5.1": { - "id": "gpt-5.1", - "name": "GPT-5.1", - "family": "gpt", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-11-01", - "last_updated": "2025-11-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.13 }, - "limit": { "context": 400000, "output": 128000 } - }, - "gpt-4o-mini-search-preview": { - "id": "gpt-4o-mini-search-preview", - "name": "GPT-4o Mini Search Preview", - "family": "gpt", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2024-10-01", - "last_updated": "2024-10-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 262144, + "output": 131072 + } }, - "qwen3-vl-plus": { - "id": "qwen3-vl-plus", - "name": "Qwen3 VL Plus", - "family": "qwen", + "gemma3:4b": { + "id": "gemma3:4b", + "name": "gemma3:4b", + "family": "gemma", "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2025-09-23", - "last_updated": "2025-09-23", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2024-12-01", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 1.6, "cache_read": 0.04 }, - "limit": { "context": 262144, "output": 32768 } + "limit": { + "context": 131072, + "output": 131072 + } }, - "deepseek-v3.1": { - "id": "deepseek-v3.1", - "name": "DeepSeek V3.1", - "family": "deepseek", + "gemini-3-flash-preview": { + "id": "gemini-3-flash-preview", + "name": "gemini-3-flash-preview", + "family": "gemini-flash", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-08-21", - "last_updated": "2025-08-21", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-12-17", + "last_updated": "2026-04-08", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.56, "output": 1.68, "cache_read": 0.11 }, - "limit": { "context": 128000, "output": 32768 } - }, - "gemini-2.0-flash": { - "id": "gemini-2.0-flash", - "name": "Gemini 2.0 Flash", - "family": "gemini", - "attachment": false, - "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-02-05", - "last_updated": "2025-02-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.03 }, - "limit": { "context": 1048576, "output": 8192 }, - "status": "deprecated" + "limit": { + "context": 1048576, + "output": 65536 + } }, - "custom": { - "id": "custom", - "name": "Custom Model", - "family": "auto", + "ministral-3:14b": { + "id": "ministral-3:14b", + "name": "ministral-3:14b", + "family": "ministral", "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2024-01-01", - "last_updated": "2024-01-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "release_date": "2024-12-01", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 128000 + } }, - "glm-4.5-flash": { - "id": "glm-4.5-flash", - "name": "GLM-4.5 Flash", - "family": "glm", + "minimax-m2": { + "id": "minimax-m2", + "name": "minimax-m2", + "family": "minimax", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-08-13", - "last_updated": "2025-08-13", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "release_date": "2025-10-23", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 128000 + } }, - "llama-3.2-3b-instruct": { - "id": "llama-3.2-3b-instruct", - "name": "Llama 3.2 3B Instruct", - "family": "llama", + "qwen3-next:80b": { + "id": "qwen3-next:80b", + "name": "qwen3-next:80b", + "family": "qwen", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2024-09-18", - "last_updated": "2024-09-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "release_date": "2025-09-15", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.03, "output": 0.05 }, - "limit": { "context": 32768, "output": 32000 }, - "status": "beta" + "limit": { + "context": 262144, + "output": 32768 + } }, - "gpt-4.1-mini": { - "id": "gpt-4.1-mini", - "name": "GPT-4.1 Mini", - "family": "gpt", + "qwen3-vl:235b": { + "id": "qwen3-vl:235b", + "name": "qwen3-vl:235b", + "family": "qwen", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.4, "output": 1.6, "cache_read": 0.1 }, - "limit": { "context": 1000000, "output": 16384 } - }, - "qwen-image-max-2025-12-30": { - "id": "qwen-image-max-2025-12-30", - "name": "Qwen Image Max 2025-12-30", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2025-12-31", - "last_updated": "2025-12-31", - "modalities": { "input": ["text"], "output": ["text", "image"] }, + "release_date": "2025-09-22", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 2000, "output": 4096 } + "limit": { + "context": 262144, + "output": 32768 + } }, - "cogview-4": { - "id": "cogview-4", - "name": "CogView-4", - "family": "glm", + "rnj-1:8b": { + "id": "rnj-1:8b", + "name": "rnj-1:8b", + "family": "rnj", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2025-03-04", - "last_updated": "2025-03-04", - "modalities": { "input": ["text"], "output": ["text", "image"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 2000, "output": 4096 } + "tool_call": true, + "release_date": "2025-12-06", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 4096 + } }, - "llama-3.2-11b-instruct": { - "id": "llama-3.2-11b-instruct", - "name": "Llama 3.2 11B Instruct", - "family": "llama", + "minimax-m2.1": { + "id": "minimax-m2.1", + "name": "minimax-m2.1", + "family": "minimax", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2024-09-25", - "last_updated": "2024-09-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "release_date": "2025-12-23", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.07, "output": 0.33 }, - "limit": { "context": 128000, "output": 16384 }, - "status": "beta" + "limit": { + "context": 204800, + "output": 131072 + } }, - "glm-5": { - "id": "glm-5", - "name": "GLM-5", + "glm-5.1": { + "id": "glm-5.1", + "name": "glm-5.1", "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-02-15", - "last_updated": "2026-02-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1, "output": 3.2, "cache_read": 0.2 }, - "limit": { "context": 202800, "output": 131100 } - }, - "veo-3.1-generate-preview": { - "id": "veo-3.1-generate-preview", - "name": "Veo 3.1", - "family": "gemini", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2026-03-14", - "last_updated": "2026-03-14", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 32768, "output": 1 }, - "status": "beta" + "interleaved": { + "field": "reasoning_content" + }, + "release_date": "2026-03-27", + "last_updated": "2026-04-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202752, + "output": 131072 + } }, - "qwen3-vl-30b-a3b-thinking": { - "id": "qwen3-vl-30b-a3b-thinking", - "name": "Qwen3 VL 30B A3B Thinking", - "family": "qwen", + "mistral-large-3:675b": { + "id": "mistral-large-3:675b", + "name": "mistral-large-3:675b", + "family": "mistral-large", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-10-11", - "last_updated": "2025-10-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-12-02", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 1 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 262144, + "output": 262144 + } }, - "llama-3.1-70b-instruct": { - "id": "llama-3.1-70b-instruct", - "name": "Llama 3.1 70B Instruct", - "family": "llama", - "attachment": false, + "ministral-3:8b": { + "id": "ministral-3:8b", + "name": "ministral-3:8b", + "family": "ministral", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "release_date": "2024-12-01", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.72, "output": 0.72 }, - "limit": { "context": 128000, "output": 2048 }, - "status": "beta" + "limit": { + "context": 262144, + "output": 128000 + } }, - "qwen-omni-turbo": { - "id": "qwen-omni-turbo", - "name": "Qwen Omni Turbo", - "family": "qwen", + "gemma3:12b": { + "id": "gemma3:12b", + "name": "gemma3:12b", + "family": "gemma", "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2025-03-26", - "last_updated": "2025-03-26", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2024-12-01", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.8 }, - "limit": { "context": 32768, "output": 8192 } + "limit": { + "context": 131072, + "output": 131072 + } }, - "gpt-5-chat-latest": { - "id": "gpt-5-chat-latest", - "name": "GPT-5 Chat Latest", - "family": "gpt", - "attachment": true, + "qwen3-coder:480b": { + "id": "qwen3-coder:480b", + "name": "qwen3-coder:480b", + "family": "qwen", + "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2025-08-01", - "last_updated": "2025-08-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.13 }, - "limit": { "context": 400000, "output": 128000 } + "tool_call": true, + "release_date": "2025-07-22", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + } }, - "minimax-m2.1-lightning": { - "id": "minimax-m2.1-lightning", - "name": "MiniMax M2.1 Lightning", - "family": "minimax", + "nemotron-3-nano:30b": { + "id": "nemotron-3-nano:30b", + "name": "nemotron-3-nano:30b", + "family": "nemotron", "attachment": false, "reasoning": true, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "release_date": "2025-12-15", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.12, "output": 0.48 }, - "limit": { "context": 196608, "output": 131072 } + "limit": { + "context": 1048576, + "output": 131072 + } }, - "grok-4-fast-reasoning": { - "id": "grok-4-fast-reasoning", - "name": "Grok 4 Fast Reasoning", - "family": "grok", - "attachment": true, + "deepseek-v4-flash": { + "id": "deepseek-v4-flash", + "name": "deepseek-v4-flash", + "family": "deepseek-flash", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 30000 } + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1048576, + "output": 1048576 + } }, - "gpt-5-nano": { - "id": "gpt-5-nano", - "name": "GPT-5 Nano", - "family": "gpt", + "glm-4.6": { + "id": "glm-4.6", + "name": "glm-4.6", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-08-01", - "last_updated": "2025-08-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.05, "output": 0.4, "cache_read": 0.01 }, - "limit": { "context": 400000, "output": 128000 } + "release_date": "2025-09-29", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202752, + "output": 131072 + } }, - "seed-1-6-250915": { - "id": "seed-1-6-250915", - "name": "Seed 1.6 (250915)", - "family": "seed", + "kimi-k2.6": { + "id": "kimi-k2.6", + "name": "kimi-k2.6", + "family": "kimi", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.05 }, - "limit": { "context": 256000, "output": 16384 } - }, - "qwen3-32b-fp8": { - "id": "qwen3-32b-fp8", - "name": "Qwen3 32B FP8", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2025-04-28", - "last_updated": "2025-04-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-20", + "last_updated": "2026-04-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.45 }, - "limit": { "context": 40960, "output": 20000 } + "limit": { + "context": 262144, + "output": 262144 + } }, - "claude-3-5-haiku": { - "id": "claude-3-5-haiku", - "name": "Claude 3.5 Haiku", - "family": "claude", - "attachment": false, + "ministral-3:3b": { + "id": "ministral-3:3b", + "name": "ministral-3:3b", + "family": "ministral", + "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": false, - "temperature": true, "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.8, "output": 4, "cache_read": 0.08 }, - "limit": { "context": 200000, "output": 8192 }, - "status": "deprecated" + "last_updated": "2026-01-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 128000 + } }, - "mixtral-8x7b-instruct-together": { - "id": "mixtral-8x7b-instruct-together", - "name": "Mixtral 8x7B Instruct", - "family": "mistral", - "attachment": false, + "gemma3:27b": { + "id": "gemma3:27b", + "name": "gemma3:27b", + "family": "gemma", + "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2023-12-10", - "last_updated": "2023-12-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-07-27", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.06, "output": 0.06 }, - "limit": { "context": 32768, "output": 16384 } + "limit": { + "context": 131072, + "output": 131072 + } }, - "qwen-coder-plus": { - "id": "qwen-coder-plus", - "name": "Qwen Coder Plus", - "family": "qwen", + "devstral-2:123b": { + "id": "devstral-2:123b", + "name": "devstral-2:123b", + "family": "devstral", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2024-09-18", - "last_updated": "2024-09-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-09", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1, "output": 5 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 262144, + "output": 262144 + } }, - "glm-4.5-air": { - "id": "glm-4.5-air", - "name": "GLM-4.5 Air", - "family": "glm", + "cogito-2.1:671b": { + "id": "cogito-2.1:671b", + "name": "cogito-2.1:671b", + "family": "cogito", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-07-25", - "last_updated": "2025-07-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 1.1, "cache_read": 0.03 }, - "limit": { "context": 128000, "output": 16384 } + "release_date": "2025-11-19", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 163840, + "output": 32000 + } }, - "gemini-3.1-flash-lite-preview": { - "id": "gemini-3.1-flash-lite-preview", - "name": "Gemini 3.1 Flash Lite (Preview)", - "family": "gemini", - "attachment": true, + "qwen3-coder-next": { + "id": "qwen3-coder-next", + "name": "qwen3-coder-next", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-03-03", - "last_updated": "2026-03-03", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 1.5, "cache_read": 0.03 }, - "limit": { "context": 1048576, "output": 65536 } - }, - "grok-3": { - "id": "grok-3", - "name": "Grok-3", - "family": "grok", + "release_date": "2026-02-02", + "last_updated": "2026-02-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + } + }, + "nemotron-3-super": { + "id": "nemotron-3-super", + "name": "nemotron-3-super", + "family": "nemotron", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 131072, "output": 16384 } - }, - "gemini-3.1-flash-image-preview": { - "id": "gemini-3.1-flash-image-preview", - "name": "Gemini 3.1 Flash Image (Preview)", - "family": "gemini", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2026-02-26", - "last_updated": "2026-02-26", - "modalities": { "input": ["text", "image"], "output": ["text", "image"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 1.5 }, - "limit": { "context": 65536, "output": 65536 } - }, - "gemini-2.5-flash-image": { - "id": "gemini-2.5-flash-image", - "name": "Gemini 2.5 Flash Image", - "family": "gemini", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2025-10-02", - "last_updated": "2025-10-02", - "modalities": { "input": ["text", "image"], "output": ["text", "image"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 30, "cache_read": 0.03 }, - "limit": { "context": 32768, "output": 32768 } + "release_date": "2026-03-11", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + } }, - "glm-4.5v": { - "id": "glm-4.5v", - "name": "GLM-4.5V", - "family": "glm", - "attachment": true, + "deepseek-v4-pro": { + "id": "deepseek-v4-pro", + "name": "deepseek-v4-pro", + "family": "deepseek-thinking", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-08-11", - "last_updated": "2025-08-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.6, "output": 1.8, "cache_read": 0.11 }, - "limit": { "context": 128000, "output": 16000 } + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1048576, + "output": 1048576 + } }, - "minimax-m2.7-highspeed": { - "id": "minimax-m2.7-highspeed", - "name": "MiniMax M2.7 Highspeed", + "minimax-m2.5": { + "id": "minimax-m2.5", + "name": "minimax-m2.5", "family": "minimax", "attachment": false, "reasoning": true, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2024-01-01", - "last_updated": "2024-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "knowledge": "2025-01", + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 2.4, "cache_read": 0.06 }, - "limit": { "context": 204800, "output": 131100 } + "limit": { + "context": 204800, + "output": 131072 + } }, - "seedream-4-5": { - "id": "seedream-4-5", - "name": "Seedream 4.5", - "family": "seed", + "deepseek-v3.2": { + "id": "deepseek-v3.2", + "name": "deepseek-v3.2", + "family": "deepseek", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2025-12-03", - "last_updated": "2025-12-03", - "modalities": { "input": ["text"], "output": ["text", "image"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 2000, "output": 4096 } + "reasoning": true, + "tool_call": true, + "release_date": "2025-06-15", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 163840, + "output": 65536 + } }, - "qwen3-coder-plus": { - "id": "qwen3-coder-plus", - "name": "Qwen3 Coder Plus", - "family": "qwen", + "kimi-k2-thinking": { + "id": "kimi-k2-thinking", + "name": "kimi-k2-thinking", + "family": "kimi-thinking", "attachment": false, + "reasoning": true, + "tool_call": true, + "knowledge": "2024-08", + "release_date": "2025-11-06", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "devstral-small-2:24b": { + "id": "devstral-small-2:24b", + "name": "devstral-small-2:24b", + "family": "devstral", + "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-09-23", - "last_updated": "2025-09-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-09", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 6, "output": 60 }, - "limit": { "context": 1000000, "output": 66000 } + "limit": { + "context": 262144, + "output": 262144 + } }, - "claude-haiku-4-5-20251001": { - "id": "claude-haiku-4-5-20251001", - "name": "Claude Haiku 4.5 (2025-10-01)", - "family": "claude", + "kimi-k2:1t": { + "id": "kimi-k2:1t", + "name": "kimi-k2:1t", + "family": "kimi", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.1 }, - "limit": { "context": 200000, "output": 64000 } - }, + "knowledge": "2024-10", + "release_date": "2025-07-11", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + } + } + } + }, + "zai-coding-plan": { + "id": "zai-coding-plan", + "env": ["ZHIPU_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.z.ai/api/coding/paas/v4", + "name": "Z.AI Coding Plan", + "doc": "https://docs.z.ai/devpack/overview", + "models": { "glm-4.7": { "id": "glm-4.7", "name": "GLM-4.7", @@ -45003,3910 +66964,5777 @@ "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, + "knowledge": "2025-04", "release_date": "2025-12-22", "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.6, "output": 2.2, "cache_read": 0.11 }, - "limit": { "context": 200000, "output": 128000 } + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "qwen3-max-2026-01-23": { - "id": "qwen3-max-2026-01-23", - "name": "Qwen3 Max 2026-01-23", - "family": "qwen", - "attachment": true, + "glm-5.1": { + "id": "glm-5.1", + "name": "GLM-5.1", + "family": "glm", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, "temperature": true, - "release_date": "2026-01-23", - "last_updated": "2026-01-23", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1.2, "output": 6, "cache_read": 0.24 }, - "limit": { "context": 262144, "output": 65536 } - }, - "grok-imagine-image-pro": { - "id": "grok-imagine-image-pro", - "name": "Grok Imagine Image Pro", - "family": "grok", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2026-03-02", - "last_updated": "2026-03-02", - "modalities": { "input": ["text", "image"], "output": ["text", "image"] }, + "release_date": "2026-03-27", + "last_updated": "2026-03-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 2000, "output": 4096 } + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "qwen-flash": { - "id": "qwen-flash", - "name": "Qwen Flash", - "family": "qwen", + "glm-4.5-air": { + "id": "glm-4.5-air", + "name": "GLM-4.5-Air", + "family": "glm-air", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-09-09", - "last_updated": "2024-09-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.05, "output": 0.4, "cache_read": 0.01 }, - "limit": { "context": 1000000, "output": 32000 } + "limit": { + "context": 131072, + "output": 98304 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "deepseek-r1-0528": { - "id": "deepseek-r1-0528", - "name": "DeepSeek R1 (0528)", - "family": "deepseek", + "glm-5-turbo": { + "id": "glm-5-turbo", + "name": "GLM-5-Turbo", + "family": "glm", "attachment": false, "reasoning": true, - "tool_call": false, - "structured_output": false, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-05-28", - "last_updated": "2025-05-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.8, "output": 2.4 }, - "limit": { "context": 64000, "output": 16384 }, - "status": "beta" + "release_date": "2026-03-16", + "last_updated": "2026-03-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "qwen3-max": { - "id": "qwen3-max", - "name": "Qwen3 Max", - "family": "qwen", + "glm-5v-turbo": { + "id": "glm-5v-turbo", + "name": "GLM-5V-Turbo", + "family": "glm", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-09-24", - "last_updated": "2025-09-24", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 3, "output": 15, "cache_read": 0.6 }, - "limit": { "context": 256000, "output": 32800 } - }, - "gpt-oss-20b": { - "id": "gpt-oss-20b", - "name": "GPT OSS 20B", + "release_date": "2026-04-01", + "last_updated": "2026-04-01", + "modalities": { + "input": ["text", "image", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + } + } + }, + "amazon-bedrock": { + "id": "amazon-bedrock", + "env": ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_REGION", "AWS_BEARER_TOKEN_BEDROCK"], + "npm": "@ai-sdk/amazon-bedrock", + "name": "Amazon Bedrock", + "doc": "https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html", + "models": { + "openai.gpt-oss-safeguard-120b": { + "id": "openai.gpt-oss-safeguard-120b", + "name": "GPT OSS Safeguard 120B", "family": "gpt-oss", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.5 }, - "limit": { "context": 131072, "output": 32766 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "qwen2-5-vl-72b-instruct": { - "id": "qwen2-5-vl-72b-instruct", - "name": "Qwen2.5 VL 72B Instruct", - "family": "qwen", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": true, + "nvidia.nemotron-nano-3-30b": { + "id": "nvidia.nemotron-nano-3-30b", + "name": "NVIDIA Nemotron Nano 3 30B", + "family": "nemotron", + "attachment": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-01-26", - "last_updated": "2025-01-26", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.13, "output": 0.4 }, - "limit": { "context": 32768, "output": 8192 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.06, + "output": 0.24 + } }, - "gemma-3-27b": { - "id": "gemma-3-27b", - "name": "Gemma 3 27B", - "family": "gemma", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, + "nvidia.nemotron-super-3-120b": { + "id": "nvidia.nemotron-super-3-120b", + "name": "NVIDIA Nemotron 3 Super 120B A12B", + "family": "nemotron", + "attachment": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-03-12", - "last_updated": "2025-03-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-03-11", + "last_updated": "2026-03-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.27, "output": 0.27 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0.15, + "output": 0.65 + } }, - "grok-4-20-beta-0309-reasoning": { - "id": "grok-4-20-beta-0309-reasoning", - "name": "Grok 4.20 Beta Reasoning (0309)", - "family": "grok", - "attachment": true, + "writer.palmyra-x5-v1:0": { + "id": "writer.palmyra-x5-v1:0", + "name": "Palmyra X5", + "family": "palmyra", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-03-09", - "last_updated": "2026-03-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-04-28", + "last_updated": "2025-04-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 6, "cache_read": 0.2 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 1040000, + "output": 8192 + }, + "cost": { + "input": 0.6, + "output": 6 + } }, - "qwen3-32b": { - "id": "qwen3-32b", - "name": "Qwen3 32B", - "family": "qwen", + "mistral.ministral-3-8b-instruct": { + "id": "mistral.ministral-3-8b-instruct", + "name": "Ministral 3 8B", + "family": "ministral", "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-04-28", - "last_updated": "2025-04-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 32768, "output": 8192 } + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.15, + "output": 0.15 + } }, - "gpt-4.1-nano": { - "id": "gpt-4.1-nano", - "name": "GPT-4.1 Nano", - "family": "gpt", + "au.anthropic.claude-opus-4-6-v1": { + "id": "au.anthropic.claude-opus-4-6-v1", + "name": "AU Anthropic Claude Opus 4.6", + "family": "claude-opus", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-05", + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.03 }, - "limit": { "context": 1000000, "output": 16384 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 16.5, + "output": 82.5, + "cache_read": 1.65, + "cache_write": 20.625 + } }, - "gemma-3-12b-it": { - "id": "gemma-3-12b-it", - "name": "Gemma 3 12B IT", - "family": "gemma", + "mistral.ministral-3-3b-instruct": { + "id": "mistral.ministral-3-3b-instruct", + "name": "Ministral 3 3B", + "family": "ministral", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-03-10", - "last_updated": "2025-03-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-02", + "last_updated": "2025-12-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.08, "output": 0.3 }, - "limit": { "context": 1000000, "output": 16384 } + "limit": { + "context": 256000, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } }, - "claude-sonnet-4-5": { - "id": "claude-sonnet-4-5", + "anthropic.claude-sonnet-4-5-20250929-v1:0": { + "id": "anthropic.claude-sonnet-4-5-20250929-v1:0", "name": "Claude Sonnet 4.5", - "family": "claude", - "attachment": false, + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, + "knowledge": "2025-07-31", "release_date": "2025-09-29", "last_updated": "2025-09-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "devstral-small-2507": { - "id": "devstral-small-2507", - "name": "Devstral Small 1.1", - "family": "mistral", + "mistral.devstral-2-123b": { + "id": "mistral.devstral-2-123b", + "name": "Devstral 2 123B", + "family": "devstral", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": true, + "tool_call": true, "temperature": true, - "release_date": "2025-07-21", - "last_updated": "2025-07-21", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-17", + "last_updated": "2026-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 131072, "output": 16384 } + "limit": { + "context": 256000, + "output": 8192 + }, + "cost": { + "input": 0.4, + "output": 2 + } }, - "ministral-3b-2512": { - "id": "ministral-3b-2512", - "name": "Ministral 3B", - "family": "mistral", + "global.anthropic.claude-opus-4-5-20251101-v1:0": { + "id": "global.anthropic.claude-opus-4-5-20251101-v1:0", + "name": "Claude Opus 4.5 (Global)", + "family": "claude-opus", "attachment": true, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-12-02", - "last_updated": "2025-12-02", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.1 }, - "limit": { "context": 131072, "output": 16384 } + "knowledge": "2025-03-31", + "release_date": "2025-11-24", + "last_updated": "2025-08-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "deepseek-v3.2": { - "id": "deepseek-v3.2", - "name": "DeepSeek V3.2", - "family": "deepseek", + "mistral.voxtral-small-24b-2507": { + "id": "mistral.voxtral-small-24b-2507", + "name": "Voxtral Small 24B 2507", + "family": "mistral", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-07-01", + "last_updated": "2025-07-01", + "modalities": { + "input": ["text", "audio"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.28, "output": 0.42, "cache_read": 0.03 }, - "limit": { "context": 163840, "output": 16384 } + "limit": { + "context": 32000, + "output": 8192 + }, + "cost": { + "input": 0.15, + "output": 0.35 + } }, - "gemma-2-27b-it-together": { - "id": "gemma-2-27b-it-together", - "name": "Gemma 2 27B IT", + "google.gemma-3-12b-it": { + "id": "google.gemma-3-12b-it", + "name": "Google Gemma 3 12B", "family": "gemma", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, + "structured_output": true, "temperature": true, - "release_date": "2024-06-27", - "last_updated": "2024-06-27", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.08, "output": 0.08 }, - "limit": { "context": 8192, "output": 16384 } + "knowledge": "2024-12", + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.049999999999999996, + "output": 0.09999999999999999 + } }, - "qwen3-4b-fp8": { - "id": "qwen3-4b-fp8", - "name": "Qwen3 4B FP8", - "family": "qwen", - "attachment": false, + "amazon.nova-pro-v1:0": { + "id": "amazon.nova-pro-v1:0", + "name": "Nova Pro", + "family": "nova-pro", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, + "tool_call": true, "temperature": true, - "release_date": "2025-04-28", - "last_updated": "2025-04-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.03, "output": 0.03 }, - "limit": { "context": 128000, "output": 20000 } - }, - "qwen3-vl-235b-a22b-thinking": { - "id": "qwen3-vl-235b-a22b-thinking", - "name": "Qwen3 VL 235B A22B Thinking", - "family": "qwen", - "attachment": true, - "reasoning": true, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2025-09-23", - "last_updated": "2025-09-23", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.5, "output": 2 }, - "limit": { "context": 131072, "output": 32768 } + "knowledge": "2024-10", + "release_date": "2024-12-03", + "last_updated": "2024-12-03", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 300000, + "output": 8192 + }, + "cost": { + "input": 0.8, + "output": 3.2, + "cache_read": 0.2 + } }, - "llama-4-maverick-17b-instruct": { - "id": "llama-4-maverick-17b-instruct", - "name": "Llama 4 Maverick 17B Instruct", - "family": "llama", + "anthropic.claude-haiku-4-5-20251001-v1:0": { + "id": "anthropic.claude-haiku-4-5-20251001-v1:0", + "name": "Claude Haiku 4.5", + "family": "claude-haiku", "attachment": true, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.24, "output": 0.97 }, - "limit": { "context": 8192, "output": 2048 }, - "status": "beta" + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } }, - "qwen3-coder-flash": { - "id": "qwen3-coder-flash", - "name": "Qwen3 Coder Flash", - "family": "qwen", + "minimax.minimax-m2": { + "id": "minimax.minimax-m2", + "name": "MiniMax M2", + "family": "minimax", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, + "structured_output": false, "temperature": true, - "release_date": "2025-07-22", - "last_updated": "2025-07-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-10-27", + "last_updated": "2025-10-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.5, "cache_read": 0.06 }, - "limit": { "context": 1000000, "output": 65536 } + "limit": { + "context": 204608, + "output": 128000 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "claude-3-haiku": { - "id": "claude-3-haiku", - "name": "Claude 3 Haiku", - "family": "claude", + "global.anthropic.claude-opus-4-7": { + "id": "global.anthropic.claude-opus-4-7", + "name": "Claude Opus 4.7 (Global)", + "family": "claude-opus", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": false, - "temperature": true, - "release_date": "2024-03-04", - "last_updated": "2024-03-04", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 1.25, "cache_read": 0.03 }, - "limit": { "context": 200000, "output": 4096 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "gemini-2.5-flash-image-preview": { - "id": "gemini-2.5-flash-image-preview", - "name": "Gemini 2.5 Flash Image (Preview)", - "family": "gemini", - "attachment": true, + "mistral.pixtral-large-2502-v1:0": { + "id": "mistral.pixtral-large-2502-v1:0", + "name": "Pixtral Large (25.02)", + "family": "mistral", + "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": true, + "tool_call": true, "temperature": true, - "release_date": "2025-10-02", - "last_updated": "2025-10-02", - "modalities": { "input": ["text", "image"], "output": ["text", "image"] }, + "release_date": "2025-04-08", + "last_updated": "2025-04-08", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 2.5 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 2, + "output": 6 + } }, - "o4-mini": { - "id": "o4-mini", - "name": "o4 Mini", - "family": "gpt", + "meta.llama4-maverick-17b-instruct-v1:0": { + "id": "meta.llama4-maverick-17b-instruct-v1:0", + "name": "Llama 4 Maverick 17B Instruct", + "family": "llama", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.28 }, - "limit": { "context": 200000, "output": 16384 } + "knowledge": "2024-08", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 16384 + }, + "cost": { + "input": 0.24, + "output": 0.97 + } }, - "glm-4.5-x": { - "id": "glm-4.5-x", - "name": "GLM-4.5 X", - "family": "glm", - "attachment": false, + "us.anthropic.claude-sonnet-4-5-20250929-v1:0": { + "id": "us.anthropic.claude-sonnet-4-5-20250929-v1:0", + "name": "Claude Sonnet 4.5 (US)", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.2, "output": 8.9, "cache_read": 0.45 }, - "limit": { "context": 128000, "output": 16384 }, - "status": "beta" + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "gemini-3-pro-image-preview": { - "id": "gemini-3-pro-image-preview", - "name": "Gemini 3 Pro Image (Preview)", - "family": "gemini", + "us.anthropic.claude-haiku-4-5-20251001-v1:0": { + "id": "us.anthropic.claude-haiku-4-5-20251001-v1:0", + "name": "Claude Haiku 4.5 (US)", + "family": "claude-haiku", "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2025-11-20", - "last_updated": "2025-11-20", - "modalities": { "input": ["text", "image"], "output": ["text", "image"] }, - "open_weights": false, - "cost": { "input": 2, "output": 12, "cache_read": 0.2 }, - "limit": { "context": 65536, "output": 32768 } - }, - "claude-haiku-4-5": { - "id": "claude-haiku-4-5", - "name": "Claude Haiku 4.5", - "family": "claude", - "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, + "knowledge": "2025-02-28", "release_date": "2025-10-15", "last_updated": "2025-10-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.1 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } }, - "qwen25-coder-7b": { - "id": "qwen25-coder-7b", - "name": "Qwen2.5 Coder 7B", - "family": "qwen", + "amazon.nova-micro-v1:0": { + "id": "amazon.nova-micro-v1:0", + "name": "Nova Micro", + "family": "nova-micro", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": true, - "temperature": true, - "release_date": "2024-09-19", - "last_updated": "2024-09-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.01, "output": 0.03 }, - "limit": { "context": 32768, "output": 8192 } - }, - "seed-1-8-251228": { - "id": "seed-1-8-251228", - "name": "Seed 1.8 (251228)", - "family": "seed", - "attachment": true, - "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-12-18", - "last_updated": "2025-12-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2024-12-03", + "last_updated": "2024-12-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.05 }, - "limit": { "context": 256000, "output": 16384 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.035, + "output": 0.14, + "cache_read": 0.00875 + } }, - "gpt-5.1-codex": { - "id": "gpt-5.1-codex", - "name": "GPT-5.1 Codex", - "family": "gpt", + "global.anthropic.claude-sonnet-4-5-20250929-v1:0": { + "id": "global.anthropic.claude-sonnet-4-5-20250929-v1:0", + "name": "Claude Sonnet 4.5 (Global)", + "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 400000, "output": 272000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "claude-3-5-sonnet-20241022": { - "id": "claude-3-5-sonnet-20241022", - "name": "Claude 3.5 Sonnet (2024-10-22)", - "family": "claude", + "openai.gpt-oss-20b-1:0": { + "id": "openai.gpt-oss-20b-1:0", + "name": "gpt-oss-20b", + "family": "gpt-oss", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": false, + "structured_output": true, "temperature": true, - "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3 }, - "limit": { "context": 200000, "output": 8192 }, - "status": "deprecated" + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.07, + "output": 0.3 + } }, - "minimax-m2.5": { - "id": "minimax-m2.5", - "name": "MiniMax M2.5", - "family": "minimax", + "zai.glm-5": { + "id": "zai.glm-5", + "name": "GLM-5", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2026-02-15", - "last_updated": "2026-02-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.03 }, - "limit": { "context": 204800, "output": 131100 } + "limit": { + "context": 202752, + "output": 101376 + }, + "cost": { + "input": 1, + "output": 3.2 + } }, - "mistral-large-2512": { - "id": "mistral-large-2512", - "name": "Mistral Large 3", - "family": "mistral", - "attachment": true, - "reasoning": false, - "tool_call": false, + "qwen.qwen3-32b-v1:0": { + "id": "qwen.qwen3-32b-v1:0", + "name": "Qwen3 32B (dense)", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-12-02", - "last_updated": "2025-12-02", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2025-09-18", + "last_updated": "2025-09-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.5, "output": 1.5 }, - "limit": { "context": 262144, "output": 16384 } + "limit": { + "context": 16384, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "minimax-m2.5-highspeed": { - "id": "minimax-m2.5-highspeed", - "name": "MiniMax M2.5 Highspeed", - "family": "minimax", + "deepseek.v3.2": { + "id": "deepseek.v3.2", + "name": "DeepSeek-V3.2", + "family": "deepseek", "attachment": false, "reasoning": true, - "tool_call": false, - "structured_output": false, + "tool_call": true, "temperature": true, - "release_date": "2024-01-01", - "last_updated": "2024-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-07", + "release_date": "2026-02-06", + "last_updated": "2026-02-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 2.4, "cache_read": 0.03 }, - "limit": { "context": 204800, "output": 131100 } + "limit": { + "context": 163840, + "output": 81920 + }, + "cost": { + "input": 0.62, + "output": 1.85 + } }, - "glm-4.6v-flash": { - "id": "glm-4.6v-flash", - "name": "GLM-4.6V Flash", - "family": "glm", + "eu.anthropic.claude-haiku-4-5-20251001-v1:0": { + "id": "eu.anthropic.claude-haiku-4-5-20251001-v1:0", + "name": "Claude Haiku 4.5 (EU)", + "family": "claude-haiku", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-12-08", - "last_updated": "2025-12-08", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 16000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } }, - "qwen3-30b-a3b-instruct-2507": { - "id": "qwen3-30b-a3b-instruct-2507", - "name": "Qwen3 30B A3B Instruct 2507", - "family": "qwen", + "zai.glm-4.7-flash": { + "id": "zai.glm-4.7-flash", + "name": "GLM-4.7-Flash", + "family": "glm-flash", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-07-30", - "last_updated": "2025-07-30", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-01-19", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 262000, "output": 8192 } + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 0.07, + "output": 0.4 + } }, - "grok-4-1-fast": { - "id": "grok-4-1-fast", - "name": "Grok 4.1 Fast", - "family": "grok", + "us.anthropic.claude-opus-4-7": { + "id": "us.anthropic.claude-opus-4-7", + "name": "Claude Opus 4.7 (US)", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, + "temperature": false, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } + }, + "amazon.nova-2-lite-v1:0": { + "id": "amazon.nova-2-lite-v1:0", + "name": "Nova 2 Lite", + "family": "nova", + "attachment": false, + "reasoning": false, + "tool_call": true, "temperature": true, - "release_date": "2025-11-19", - "last_updated": "2025-11-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.33, + "output": 2.75 + } }, - "gpt-5.2-pro": { - "id": "gpt-5.2-pro", - "name": "GPT-5.2 Pro", - "family": "gpt", + "anthropic.claude-opus-4-5-20251101-v1:0": { + "id": "anthropic.claude-opus-4-5-20251101-v1:0", + "name": "Claude Opus 4.5", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-03-31", + "release_date": "2025-11-24", + "last_updated": "2025-08-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 21, "output": 168 }, - "limit": { "context": 400000, "output": 272000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "claude-3-7-sonnet": { - "id": "claude-3-7-sonnet", - "name": "Claude 3.7 Sonnet", - "family": "claude", + "qwen.qwen3-coder-480b-a35b-v1:0": { + "id": "qwen.qwen3-coder-480b-a35b-v1:0", + "name": "Qwen3 Coder 480B A35B Instruct", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": false, + "structured_output": true, "temperature": true, - "release_date": "2025-02-24", - "last_updated": "2025-02-24", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3 }, - "limit": { "context": 200000, "output": 8192 } - } - } - }, - "groq": { - "id": "groq", - "env": ["GROQ_API_KEY"], - "npm": "@ai-sdk/groq", - "name": "Groq", - "doc": "https://console.groq.com/docs/models", - "models": { - "llama3-70b-8192": { - "id": "llama3-70b-8192", - "name": "Llama 3 70B", - "family": "llama", - "attachment": false, + "knowledge": "2024-04", + "release_date": "2025-09-18", + "last_updated": "2025-09-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.22, + "output": 1.8 + } + }, + "amazon.nova-lite-v1:0": { + "id": "amazon.nova-lite-v1:0", + "name": "Nova Lite", + "family": "nova-lite", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2023-03", - "release_date": "2024-04-18", - "last_updated": "2024-04-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.59, "output": 0.79 }, - "limit": { "context": 8192, "output": 8192 }, - "status": "deprecated" + "knowledge": "2024-10", + "release_date": "2024-12-03", + "last_updated": "2024-12-03", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 300000, + "output": 8192 + }, + "cost": { + "input": 0.06, + "output": 0.24, + "cache_read": 0.015 + } }, - "llama-3.3-70b-versatile": { - "id": "llama-3.3-70b-versatile", - "name": "Llama 3.3 70B Versatile", + "meta.llama3-1-8b-instruct-v1:0": { + "id": "meta.llama3-1-8b-instruct-v1:0", + "name": "Llama 3.1 8B Instruct", "family": "llama", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, "knowledge": "2023-12", - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.59, "output": 0.79 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.22, + "output": 0.22 + } }, - "deepseek-r1-distill-llama-70b": { - "id": "deepseek-r1-distill-llama-70b", - "name": "DeepSeek R1 Distill Llama 70B", - "family": "deepseek-thinking", - "attachment": false, + "anthropic.claude-opus-4-7": { + "id": "anthropic.claude-opus-4-7", + "name": "Claude Opus 4.7", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.75, "output": 0.99 }, - "limit": { "context": 131072, "output": 8192 }, - "status": "deprecated" + "structured_output": true, + "temperature": false, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "gemma2-9b-it": { - "id": "gemma2-9b-it", - "name": "Gemma 2 9B", + "google.gemma-3-27b-it": { + "id": "google.gemma-3-27b-it", + "name": "Google Gemma 3 27B Instruct", "family": "gemma", - "attachment": false, + "attachment": true, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-06", - "release_date": "2024-06-27", - "last_updated": "2024-06-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-07", + "release_date": "2025-07-27", + "last_updated": "2025-07-27", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 8192, "output": 8192 }, - "status": "deprecated" + "limit": { + "context": 202752, + "output": 8192 + }, + "cost": { + "input": 0.12, + "output": 0.2 + } }, - "llama-3.1-8b-instant": { - "id": "llama-3.1-8b-instant", - "name": "Llama 3.1 8B Instant", - "family": "llama", + "global.anthropic.claude-haiku-4-5-20251001-v1:0": { + "id": "global.anthropic.claude-haiku-4-5-20251001-v1:0", + "name": "Claude Haiku 4.5 (Global)", + "family": "claude-haiku", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } + }, + "google.gemma-3-4b-it": { + "id": "google.gemma-3-4b-it", + "name": "Gemma 3 4B IT", + "family": "gemma", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.04, + "output": 0.08 + } + }, + "meta.llama4-scout-17b-instruct-v1:0": { + "id": "meta.llama4-scout-17b-instruct-v1:0", + "name": "Llama 4 Scout 17B Instruct", + "family": "llama", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.05, "output": 0.08 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 3500000, + "output": 16384 + }, + "cost": { + "input": 0.17, + "output": 0.66 + } }, - "qwen-qwq-32b": { - "id": "qwen-qwq-32b", - "name": "Qwen QwQ 32B", - "family": "qwen", + "deepseek.v3-v1:0": { + "id": "deepseek.v3-v1:0", + "name": "DeepSeek-V3.1", + "family": "deepseek", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-09", - "release_date": "2024-11-27", - "last_updated": "2024-11-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-07", + "release_date": "2025-09-18", + "last_updated": "2025-09-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.29, "output": 0.39 }, - "limit": { "context": 131072, "output": 16384 }, - "status": "deprecated" + "limit": { + "context": 163840, + "output": 81920 + }, + "cost": { + "input": 0.58, + "output": 1.68 + } }, - "llama-guard-3-8b": { - "id": "llama-guard-3-8b", - "name": "Llama Guard 3 8B", - "family": "llama", + "mistral.magistral-small-2509": { + "id": "mistral.magistral-small-2509", + "name": "Magistral Small 1.2", + "family": "magistral", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-02", + "last_updated": "2025-12-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 8192, "output": 8192 }, - "status": "deprecated" + "limit": { + "context": 128000, + "output": 40000 + }, + "cost": { + "input": 0.5, + "output": 1.5 + } }, - "mistral-saba-24b": { - "id": "mistral-saba-24b", - "name": "Mistral Saba 24B", - "family": "mistral", + "qwen.qwen3-next-80b-a3b": { + "id": "qwen.qwen3-next-80b-a3b", + "name": "Qwen/Qwen3-Next-80B-A3B-Instruct", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-02-06", - "last_updated": "2025-02-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-09-18", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.79, "output": 0.79 }, - "limit": { "context": 32768, "output": 32768 }, - "status": "deprecated" + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.14, + "output": 1.4 + } }, - "whisper-large-v3": { - "id": "whisper-large-v3", - "name": "Whisper Large V3", - "family": "whisper", + "zai.glm-4.7": { + "id": "zai.glm-4.7", + "name": "GLM-4.7", + "family": "glm", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2023-09", - "release_date": "2023-09-01", - "last_updated": "2025-09-05", - "modalities": { "input": ["audio"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 448, "output": 448 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 2.2 + } }, - "whisper-large-v3-turbo": { - "id": "whisper-large-v3-turbo", - "name": "Whisper Large v3 Turbo", - "family": "whisper", + "moonshot.kimi-k2-thinking": { + "id": "moonshot.kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "family": "kimi-thinking", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "interleaved": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-10-01", - "last_updated": "2024-10-01", - "modalities": { "input": ["audio"], "output": ["text"] }, + "release_date": "2025-12-02", + "last_updated": "2025-12-02", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 448, "output": 448 } + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.6, + "output": 2.5 + } }, - "llama3-8b-8192": { - "id": "llama3-8b-8192", - "name": "Llama 3 8B", - "family": "llama", - "attachment": false, - "reasoning": false, + "us.anthropic.claude-opus-4-5-20251101-v1:0": { + "id": "us.anthropic.claude-opus-4-5-20251101-v1:0", + "name": "Claude Opus 4.5 (US)", + "family": "claude-opus", + "attachment": true, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2023-03", - "release_date": "2024-04-18", - "last_updated": "2024-04-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.05, "output": 0.08 }, - "limit": { "context": 8192, "output": 8192 }, - "status": "deprecated" + "knowledge": "2025-03-31", + "release_date": "2025-11-24", + "last_updated": "2025-08-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "allam-2-7b": { - "id": "allam-2-7b", - "name": "ALLaM-2-7b", - "family": "allam", + "mistral.ministral-3-14b-instruct": { + "id": "mistral.ministral-3-14b-instruct", + "name": "Ministral 14B 3.0", + "family": "ministral", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-09", - "release_date": "2024-09", - "last_updated": "2024-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 4096, "output": 4096 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.2, + "output": 0.2 + } }, - "openai/gpt-oss-120b": { - "id": "openai/gpt-oss-120b", - "name": "GPT OSS 120B", - "family": "gpt-oss", + "deepseek.r1-v1:0": { + "id": "deepseek.r1-v1:0", + "name": "DeepSeek-R1", + "family": "deepseek-thinking", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 131072, "output": 65536 } + "knowledge": "2024-07", + "release_date": "2025-01-20", + "last_updated": "2025-05-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 1.35, + "output": 5.4 + } }, - "openai/gpt-oss-safeguard-20b": { - "id": "openai/gpt-oss-safeguard-20b", - "name": "Safety GPT OSS 20B", - "family": "gpt-oss", + "mistral.voxtral-mini-3b-2507": { + "id": "mistral.voxtral-mini-3b-2507", + "name": "Voxtral Mini 3B 2507", + "family": "mistral", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-03-05", - "last_updated": "2025-03-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.075, "output": 0.3, "cache_read": 0.037 }, - "limit": { "context": 131072, "output": 65536 } + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["audio", "text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.04, + "output": 0.04 + } }, - "openai/gpt-oss-20b": { - "id": "openai/gpt-oss-20b", - "name": "GPT OSS 20B", + "openai.gpt-oss-120b-1:0": { + "id": "openai.gpt-oss-120b-1:0", + "name": "gpt-oss-120b", "family": "gpt-oss", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.075, "output": 0.3 }, - "limit": { "context": 131072, "output": 65536 } + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "canopylabs/orpheus-arabic-saudi": { - "id": "canopylabs/orpheus-arabic-saudi", - "name": "Orpheus Arabic Saudi", - "family": "canopylabs", + "nvidia.nemotron-nano-12b-v2": { + "id": "nvidia.nemotron-nano-12b-v2", + "name": "NVIDIA Nemotron Nano 12B v2 VL BF16", + "family": "nemotron", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-12-16", - "release_date": "2025-12-16", - "last_updated": "2025-12-16", - "modalities": { "input": ["text"], "output": ["audio"] }, + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 40, "output": 0 }, - "limit": { "context": 4000, "output": 50000 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.2, + "output": 0.6 + } }, - "canopylabs/orpheus-v1-english": { - "id": "canopylabs/orpheus-v1-english", - "name": "Orpheus V1 English", - "family": "canopylabs", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2025-12-19", - "release_date": "2025-12-19", - "last_updated": "2025-12-19", - "modalities": { "input": ["text"], "output": ["audio"] }, + "eu.anthropic.claude-opus-4-7": { + "id": "eu.anthropic.claude-opus-4-7", + "name": "Claude Opus 4.7 (EU)", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 4000, "output": 50000 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "meta-llama/llama-guard-4-12b": { - "id": "meta-llama/llama-guard-4-12b", - "name": "Llama Guard 4 12B", - "family": "llama", + "minimax.minimax-m2.5": { + "id": "minimax.minimax-m2.5", + "name": "MiniMax M2.5", + "family": "minimax", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "structured_output": false, "temperature": true, - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 131072, "output": 1024 }, - "status": "deprecated" + "limit": { + "context": 196608, + "output": 98304 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "meta-llama/llama-4-scout-17b-16e-instruct": { - "id": "meta-llama/llama-4-scout-17b-16e-instruct", - "name": "Llama 4 Scout 17B", + "meta.llama3-3-70b-instruct-v1:0": { + "id": "meta.llama3-3-70b-instruct-v1:0", + "name": "Llama 3.3 70B Instruct", "family": "llama", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2023-12", + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.11, "output": 0.34 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.72, + "output": 0.72 + } }, - "meta-llama/llama-prompt-guard-2-22m": { - "id": "meta-llama/llama-prompt-guard-2-22m", - "name": "Llama Prompt Guard 2 22M", + "meta.llama3-1-70b-instruct-v1:0": { + "id": "meta.llama3-1-70b-instruct-v1:0", + "name": "Llama 3.1 70B Instruct", "family": "llama", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-10-01", - "last_updated": "2024-10-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2023-12", + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.03, "output": 0.03 }, - "limit": { "context": 512, "output": 512 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.72, + "output": 0.72 + } }, - "meta-llama/llama-4-maverick-17b-128e-instruct": { - "id": "meta-llama/llama-4-maverick-17b-128e-instruct", - "name": "Llama 4 Maverick 17B", - "family": "llama", - "attachment": false, - "reasoning": false, + "eu.anthropic.claude-sonnet-4-5-20250929-v1:0": { + "id": "eu.anthropic.claude-sonnet-4-5-20250929-v1:0", + "name": "Claude Sonnet 4.5 (EU)", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.6 }, - "limit": { "context": 131072, "output": 8192 }, - "status": "deprecated" + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "meta-llama/llama-prompt-guard-2-86m": { - "id": "meta-llama/llama-prompt-guard-2-86m", - "name": "Llama Prompt Guard 2 86M", - "family": "llama", - "attachment": false, - "reasoning": false, - "tool_call": false, + "eu.anthropic.claude-opus-4-5-20251101-v1:0": { + "id": "eu.anthropic.claude-opus-4-5-20251101-v1:0", + "name": "Claude Opus 4.5 (EU)", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-10-01", - "last_updated": "2024-10-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.04, "output": 0.04 }, - "limit": { "context": 512, "output": 512 } + "knowledge": "2025-03-31", + "release_date": "2025-11-24", + "last_updated": "2025-08-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "qwen/qwen3-32b": { - "id": "qwen/qwen3-32b", - "name": "Qwen3 32B", - "family": "qwen", + "moonshotai.kimi-k2.5": { + "id": "moonshotai.kimi-k2.5", + "name": "Kimi K2.5", + "family": "kimi", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": true, "temperature": true, - "knowledge": "2024-11-08", - "release_date": "2024-12-23", - "last_updated": "2024-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-06", + "last_updated": "2026-02-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.29, "output": 0.59 }, - "limit": { "context": 131072, "output": 40960 } + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.6, + "output": 3 + } }, - "groq/compound-mini": { - "id": "groq/compound-mini", - "name": "Compound Mini", - "family": "groq", - "attachment": false, + "au.anthropic.claude-sonnet-4-6": { + "id": "au.anthropic.claude-sonnet-4-6", + "name": "AU Anthropic Claude Sonnet 4.6", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-09-04", - "release_date": "2025-09-04", - "last_updated": "2025-09-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-08", + "release_date": "2026-02-17", + "last_updated": "2026-02-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 3.3, + "output": 16.5, + "cache_read": 0.33, + "cache_write": 4.125 + } }, - "groq/compound": { - "id": "groq/compound", - "name": "Compound", - "family": "groq", + "openai.gpt-oss-safeguard-20b": { + "id": "openai.gpt-oss-safeguard-20b", + "name": "GPT OSS Safeguard 20B", + "family": "gpt-oss", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-09-04", - "release_date": "2025-09-04", - "last_updated": "2025-09-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.07, + "output": 0.2 + } }, - "moonshotai/kimi-k2-instruct-0905": { - "id": "moonshotai/kimi-k2-instruct-0905", - "name": "Kimi K2 Instruct 0905", - "family": "kimi", + "qwen.qwen3-coder-30b-a3b-v1:0": { + "id": "qwen.qwen3-coder-30b-a3b-v1:0", + "name": "Qwen3 Coder 30B A3B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1, "output": 3 }, - "limit": { "context": 262144, "output": 16384 } + "knowledge": "2024-04", + "release_date": "2025-09-18", + "last_updated": "2025-09-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "moonshotai/kimi-k2-instruct": { - "id": "moonshotai/kimi-k2-instruct", - "name": "Kimi K2 Instruct", - "family": "kimi", + "minimax.minimax-m2.1": { + "id": "minimax.minimax-m2.1", + "name": "MiniMax M2.1", + "family": "minimax", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-07-14", - "last_updated": "2025-07-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1, "output": 3 }, - "limit": { "context": 131072, "output": 16384 }, - "status": "deprecated" - } - } - }, - "azure": { - "id": "azure", - "env": ["AZURE_RESOURCE_NAME", "AZURE_API_KEY"], - "npm": "@ai-sdk/azure", - "name": "Azure", - "doc": "https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models", - "models": { - "gpt-5.2-codex": { - "id": "gpt-5.2-codex", - "name": "GPT-5.2 Codex", - "family": "gpt-codex", - "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-01-14", - "last_updated": "2026-01-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "text-embedding-3-large": { - "id": "text-embedding-3-large", - "name": "text-embedding-3-large", - "family": "text-embedding", - "attachment": false, + "qwen.qwen3-vl-235b-a22b": { + "id": "qwen.qwen3-vl-235b-a22b", + "name": "Qwen/Qwen3-VL-235B-A22B-Instruct", + "family": "qwen", + "attachment": true, "reasoning": false, - "tool_call": false, - "release_date": "2024-01-25", - "last_updated": "2024-01-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-10-04", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.13, "output": 0 }, - "limit": { "context": 8191, "output": 3072 } + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.3, + "output": 1.5 + } }, - "gpt-5.1-codex-mini": { - "id": "gpt-5.1-codex-mini", - "name": "GPT-5.1 Codex Mini", - "family": "gpt-codex", + "qwen.qwen3-coder-next": { + "id": "qwen.qwen3-coder-next", + "name": "Qwen3 Coder Next", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.025 }, - "limit": { "context": 400000, "output": 128000 } - }, - "phi-4-multimodal": { - "id": "phi-4-multimodal", - "name": "Phi-4-multimodal", - "family": "phi", - "attachment": true, - "reasoning": false, - "tool_call": false, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text", "image", "audio"], "output": ["text"] }, + "release_date": "2026-02-06", + "last_updated": "2026-02-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.08, "output": 0.32, "input_audio": 4 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.22, + "output": 1.8 + } }, - "cohere-embed-v3-multilingual": { - "id": "cohere-embed-v3-multilingual", - "name": "Embed v3 Multilingual", - "family": "cohere-embed", + "nvidia.nemotron-nano-9b-v2": { + "id": "nvidia.nemotron-nano-9b-v2", + "name": "NVIDIA Nemotron Nano 9B v2", + "family": "nemotron", "attachment": false, "reasoning": false, - "tool_call": false, - "temperature": false, - "release_date": "2023-11-07", - "last_updated": "2023-11-07", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0 }, - "limit": { "context": 512, "output": 1024 } - }, - "gpt-5.4-pro": { - "id": "gpt-5.4-pro", - "name": "GPT-5.4 Pro", - "family": "gpt-pro", - "attachment": true, - "reasoning": true, "tool_call": true, - "structured_output": false, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-05", - "last_updated": "2026-03-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "temperature": true, + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 30, "output": 180 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.06, + "output": 0.23 + } }, - "cohere-embed-v3-english": { - "id": "cohere-embed-v3-english", - "name": "Embed v3 English", - "family": "cohere-embed", + "mistral.mistral-large-3-675b-instruct": { + "id": "mistral.mistral-large-3-675b-instruct", + "name": "Mistral Large 3", + "family": "mistral", "attachment": false, "reasoning": false, - "tool_call": false, - "temperature": false, - "release_date": "2023-11-07", - "last_updated": "2023-11-07", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0 }, - "limit": { "context": 512, "output": 1024 } - }, - "o3-mini": { - "id": "o3-mini", - "name": "o3-mini", - "family": "o-mini", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2024-05", - "release_date": "2024-12-20", - "last_updated": "2025-01-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.55 }, - "limit": { "context": 200000, "output": 100000 } - }, - "gpt-5.4-mini": { - "id": "gpt-5.4-mini", - "name": "GPT-5.4 Mini", - "family": "gpt-mini", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-17", - "last_updated": "2026-03-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.75, "output": 4.5, "cache_read": 0.075 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } - }, - "gpt-5-pro": { - "id": "gpt-5-pro", - "name": "GPT-5 Pro", - "family": "gpt-pro", - "attachment": true, - "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-10-06", - "last_updated": "2025-10-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 15, "output": 120 }, - "limit": { "context": 400000, "output": 272000 } - }, - "gpt-3.5-turbo-0613": { - "id": "gpt-3.5-turbo-0613", - "name": "GPT-3.5 Turbo 0613", - "family": "gpt", - "attachment": false, - "reasoning": false, - "tool_call": false, "temperature": true, - "knowledge": "2021-08", - "release_date": "2023-06-13", - "last_updated": "2023-06-13", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 4 }, - "limit": { "context": 16384, "output": 16384 } + "release_date": "2025-12-02", + "last_updated": "2025-12-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 8192 + }, + "cost": { + "input": 0.5, + "output": 1.5 + } }, - "deepseek-v3-0324": { - "id": "deepseek-v3-0324", - "name": "DeepSeek-V3-0324", - "family": "deepseek", + "qwen.qwen3-235b-a22b-2507-v1:0": { + "id": "qwen.qwen3-235b-a22b-2507-v1:0", + "name": "Qwen3 235B A22B 2507", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-03-24", - "last_updated": "2025-03-24", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2025-09-18", + "last_updated": "2025-09-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1.14, "output": 4.56 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0.22, + "output": 0.88 + } }, - "meta-llama-3.1-8b-instruct": { - "id": "meta-llama-3.1-8b-instruct", - "name": "Meta-Llama-3.1-8B-Instruct", - "family": "llama", + "writer.palmyra-x4-v1:0": { + "id": "writer.palmyra-x4-v1:0", + "name": "Palmyra X4", + "family": "palmyra", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 0.61 }, - "limit": { "context": 128000, "output": 32768 } + "release_date": "2025-04-28", + "last_updated": "2025-04-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 122880, + "output": 8192 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "kimi-k2-thinking": { - "id": "kimi-k2-thinking", - "name": "Kimi K2 Thinking", - "family": "kimi-thinking", - "attachment": false, + "anthropic.claude-opus-4-1-20250805-v1:0": { + "id": "anthropic.claude-opus-4-1-20250805-v1:0", + "name": "Claude Opus 4.1", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": true, "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-11-06", - "last_updated": "2025-12-02", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.5, "cache_read": 0.15 }, - "limit": { "context": 262144, "output": 262144 } + "knowledge": "2025-03-31", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "deepseek-r1": { - "id": "deepseek-r1", - "name": "DeepSeek-R1", + "us.deepseek.r1-v1:0": { + "id": "us.deepseek.r1-v1:0", + "name": "DeepSeek-R1 (US)", "family": "deepseek-thinking", "attachment": false, "reasoning": true, - "tool_call": false, + "tool_call": true, "temperature": true, "knowledge": "2024-07", "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1.35, "output": 5.4 }, - "limit": { "context": 163840, "output": 163840 } + "last_updated": "2025-05-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 1.35, + "output": 5.4 + } }, - "gpt-5": { - "id": "gpt-5", - "name": "GPT-5", - "family": "gpt", + "eu.anthropic.claude-opus-4-6-v1": { + "id": "eu.anthropic.claude-opus-4-6-v1", + "name": "Claude Opus 4.6 (EU)", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "temperature": true, + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.13 }, - "limit": { "context": 272000, "output": 128000 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "llama-3.3-70b-instruct": { - "id": "llama-3.3-70b-instruct", - "name": "Llama-3.3-70B-Instruct", + "us.meta.llama4-maverick-17b-instruct-v1:0": { + "id": "us.meta.llama4-maverick-17b-instruct-v1:0", + "name": "Llama 4 Maverick 17B Instruct (US)", "family": "llama", - "attachment": false, + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.71, "output": 0.71 }, - "limit": { "context": 128000, "output": 32768 } - }, - "phi-3-mini-128k-instruct": { - "id": "phi-3-mini-128k-instruct", - "name": "Phi-3-mini-instruct (128k)", - "family": "phi", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-04-23", - "last_updated": "2024-04-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.13, "output": 0.52 }, - "limit": { "context": 128000, "output": 4096 } - }, - "phi-3-small-8k-instruct": { - "id": "phi-3-small-8k-instruct", - "name": "Phi-3-small-instruct (8k)", - "family": "phi", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-04-23", - "last_updated": "2024-04-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-08", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 8192, "output": 2048 } + "limit": { + "context": 1000000, + "output": 16384 + }, + "cost": { + "input": 0.24, + "output": 0.97 + } }, - "claude-opus-4-5": { - "id": "claude-opus-4-5", - "name": "Claude Opus 4.5", - "family": "claude-opus", + "au.anthropic.claude-haiku-4-5-20251001-v1:0": { + "id": "au.anthropic.claude-haiku-4-5-20251001-v1:0", + "name": "Claude Haiku 4.5 (AU)", + "family": "claude-haiku", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-11-24", - "last_updated": "2025-08-01", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 200000, "output": 64000 }, - "provider": { - "npm": "@ai-sdk/anthropic", - "api": "https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1" + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 } }, - "kimi-k2.5": { - "id": "kimi-k2.5", - "name": "Kimi K2.5", - "family": "kimi", - "attachment": false, + "jp.anthropic.claude-sonnet-4-5-20250929-v1:0": { + "id": "jp.anthropic.claude-sonnet-4-5-20250929-v1:0", + "name": "Claude Sonnet 4.5 (JP)", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-02-06", - "last_updated": "2026-02-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 3 }, - "limit": { "context": 262144, "output": 262144 }, - "provider": { - "npm": "@ai-sdk/openai-compatible", - "api": "https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/models", - "shape": "completions" + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 } }, - "gpt-4-turbo": { - "id": "gpt-4-turbo", - "name": "GPT-4 Turbo", - "family": "gpt", + "anthropic.claude-sonnet-4-6": { + "id": "anthropic.claude-sonnet-4-6", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2023-11", - "release_date": "2023-11-06", - "last_updated": "2024-04-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 10, "output": 30 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "gpt-4o": { - "id": "gpt-4o", - "name": "GPT-4o", - "family": "gpt", + "jp.anthropic.claude-sonnet-4-6": { + "id": "jp.anthropic.claude-sonnet-4-6", + "name": "Claude Sonnet 4.6 (JP)", + "family": "claude-sonnet", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2023-09", - "release_date": "2024-05-13", - "last_updated": "2024-05-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 10, "cache_read": 1.25 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "grok-4-fast-non-reasoning": { - "id": "grok-4-fast-non-reasoning", - "name": "Grok 4 Fast (Non-Reasoning)", - "family": "grok", + "global.anthropic.claude-sonnet-4-6": { + "id": "global.anthropic.claude-sonnet-4-6", + "name": "Claude Sonnet 4.6 (Global)", + "family": "claude-sonnet", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-09-19", - "last_updated": "2025-09-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "grok-4": { - "id": "grok-4", - "name": "Grok 4", - "family": "grok", - "attachment": false, + "us.anthropic.claude-sonnet-4-6": { + "id": "us.anthropic.claude-sonnet-4-6", + "name": "Claude Sonnet 4.6 (US)", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "reasoning": 15, "cache_read": 0.75 }, - "limit": { "context": 256000, "output": 64000 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "gpt-3.5-turbo-1106": { - "id": "gpt-3.5-turbo-1106", - "name": "GPT-3.5 Turbo 1106", - "family": "gpt", - "attachment": false, - "reasoning": false, - "tool_call": false, + "global.anthropic.claude-opus-4-6-v1": { + "id": "global.anthropic.claude-opus-4-6-v1", + "name": "Claude Opus 4.6 (Global)", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2021-08", - "release_date": "2023-11-06", - "last_updated": "2023-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 2 }, - "limit": { "context": 16384, "output": 16384 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "phi-4-mini": { - "id": "phi-4-mini", - "name": "Phi-4-mini", - "family": "phi", - "attachment": false, - "reasoning": false, + "us.anthropic.claude-opus-4-6-v1": { + "id": "us.anthropic.claude-opus-4-6-v1", + "name": "Claude Opus 4.6 (US)", + "family": "claude-opus", + "attachment": true, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.075, "output": 0.3 }, - "limit": { "context": 128000, "output": 4096 } - }, - "phi-4-reasoning": { - "id": "phi-4-reasoning", - "name": "Phi-4-reasoning", - "family": "phi", - "attachment": false, - "reasoning": true, - "tool_call": false, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.125, "output": 0.5 }, - "limit": { "context": 32000, "output": 4096 } - }, - "grok-code-fast-1": { - "id": "grok-code-fast-1", - "name": "Grok Code Fast 1", - "family": "grok", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2025-08-28", - "last_updated": "2025-08-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 1.5, "cache_read": 0.02 }, - "limit": { "context": 256000, "output": 10000 } - }, - "codestral-2501": { - "id": "codestral-2501", - "name": "Codestral 25.01", - "family": "codestral", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-03", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 0.9 }, - "limit": { "context": 256000, "output": 256000 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "gpt-5.3-codex": { - "id": "gpt-5.3-codex", - "name": "GPT-5.3 Codex", - "family": "gpt-codex", - "attachment": false, + "us.anthropic.claude-opus-4-1-20250805-v1:0": { + "id": "us.anthropic.claude-opus-4-1-20250805-v1:0", + "name": "Claude Opus 4.1 (US)", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-02-24", - "last_updated": "2026-02-24", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "gpt-5-mini": { - "id": "gpt-5-mini", - "name": "GPT-5 Mini", - "family": "gpt-mini", + "au.anthropic.claude-sonnet-4-5-20250929-v1:0": { + "id": "au.anthropic.claude-sonnet-4-5-20250929-v1:0", + "name": "Claude Sonnet 4.5 (AU)", + "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2024-05-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.03 }, - "limit": { "context": 272000, "output": 128000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "gpt-4-turbo-vision": { - "id": "gpt-4-turbo-vision", - "name": "GPT-4 Turbo Vision", - "family": "gpt", + "eu.anthropic.claude-sonnet-4-6": { + "id": "eu.anthropic.claude-sonnet-4-6", + "name": "Claude Sonnet 4.6 (EU)", + "family": "claude-sonnet", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2023-11", - "release_date": "2023-11-06", - "last_updated": "2024-04-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 10, "output": 30 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "mistral-large-2411": { - "id": "mistral-large-2411", - "name": "Mistral Large 24.11", - "family": "mistral-large", - "attachment": false, + "us.meta.llama4-scout-17b-instruct-v1:0": { + "id": "us.meta.llama4-scout-17b-instruct-v1:0", + "name": "Llama 4 Scout 17B Instruct (US)", + "family": "llama", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-09", - "release_date": "2024-11-01", - "last_updated": "2024-11-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 6 }, - "limit": { "context": 128000, "output": 32768 } + "knowledge": "2024-08", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 3500000, + "output": 16384 + }, + "cost": { + "input": 0.17, + "output": 0.66 + } }, - "claude-opus-4-6": { - "id": "claude-opus-4-6", + "anthropic.claude-opus-4-6-v1": { + "id": "anthropic.claude-opus-4-6-v1", "name": "Claude Opus 4.6", "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-05", + "knowledge": "2025-05-31", "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, "cost": { "input": 5, "output": 25, "cache_read": 0.5, - "cache_write": 6.25, - "context_over_200k": { "input": 10, "output": 37.5, "cache_read": 1, "cache_write": 12.5 } - }, - "limit": { "context": 200000, "output": 128000 }, - "provider": { - "npm": "@ai-sdk/anthropic", - "api": "https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1" + "cache_write": 6.25 } }, - "gpt-4o-mini": { - "id": "gpt-4o-mini", - "name": "GPT-4o mini", - "family": "gpt-mini", + "jp.anthropic.claude-opus-4-7": { + "id": "jp.anthropic.claude-opus-4-7", + "name": "Claude Opus 4.7 (JP)", + "family": "claude-opus", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2023-09", - "release_date": "2024-07-18", - "last_updated": "2024-07-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.6, "cache_read": 0.08 }, - "limit": { "context": 128000, "output": 16384 } - }, - "gpt-5.1-codex-max": { - "id": "gpt-5.1-codex-max", - "name": "GPT-5.1 Codex Max", - "family": "gpt-codex", - "attachment": true, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } + } + } + }, + "the-grid-ai": { + "id": "the-grid-ai", + "env": ["THEGRIDAI_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.thegrid.ai/v1", + "name": "The Grid AI", + "doc": "https://thegrid.ai/docs", + "models": { + "text-prime": { + "id": "text-prime", + "name": "Text Prime", + "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "release_date": "2026-02-26", + "last_updated": "2026-02-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 128000, + "output": 30000 + }, + "status": "beta" }, - "gpt-4.1": { - "id": "gpt-4.1", - "name": "GPT-4.1", - "family": "gpt", - "attachment": true, - "reasoning": false, + "text-standard": { + "id": "text-standard", + "name": "Text Standard", + "attachment": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-05", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-02-26", + "last_updated": "2026-02-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8, "cache_read": 0.5 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 128000, + "output": 16000 + }, + "status": "beta" }, - "codex-mini": { - "id": "codex-mini", - "name": "Codex Mini", - "family": "gpt-codex-mini", - "attachment": true, + "text-max": { + "id": "text-max", + "name": "Text Max", + "attachment": false, "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2024-04", - "release_date": "2025-05-16", - "last_updated": "2025-05-16", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "temperature": true, + "release_date": "2026-03-24", + "last_updated": "2026-03-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.5, "output": 6, "cache_read": 0.375 }, - "limit": { "context": 200000, "output": 100000 } - }, - "phi-4-mini-reasoning": { - "id": "phi-4-mini-reasoning", - "name": "Phi-4-mini-reasoning", - "family": "phi", + "limit": { + "context": 1000000, + "output": 128000 + }, + "status": "beta" + } + } + }, + "baseten": { + "id": "baseten", + "env": ["BASETEN_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://inference.baseten.co/v1", + "name": "Baseten", + "doc": "https://docs.baseten.co/development/model-apis/overview", + "models": { + "zai-org/GLM-4.7": { + "id": "zai-org/GLM-4.7", + "name": "GLM-4.7", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.075, "output": 0.3 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 2.2 + } }, - "llama-4-scout-17b-16e-instruct": { - "id": "llama-4-scout-17b-16e-instruct", - "name": "Llama 4 Scout 17B 16E Instruct", - "family": "llama", - "attachment": true, - "reasoning": false, + "zai-org/GLM-5": { + "id": "zai-org/GLM-5", + "name": "GLM-5", + "family": "glm", + "attachment": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2026-01", + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.78 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 202752, + "output": 131072 + }, + "cost": { + "input": 0.95, + "output": 3.15 + } }, - "llama-3.2-11b-vision-instruct": { - "id": "llama-3.2-11b-vision-instruct", - "name": "Llama-3.2-11B-Vision-Instruct", - "family": "llama", - "attachment": true, + "zai-org/GLM-4.6": { + "id": "zai-org/GLM-4.6", + "name": "GLM 4.6", + "family": "glm", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-09-25", - "last_updated": "2024-09-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2025-09-16", + "last_updated": "2025-09-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.37, "output": 0.37 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 200000, + "output": 200000 + }, + "cost": { + "input": 0.6, + "output": 2.2 + } }, - "phi-3-mini-4k-instruct": { - "id": "phi-3-mini-4k-instruct", - "name": "Phi-3-mini-instruct (4k)", - "family": "phi", + "nvidia/Nemotron-120B-A12B": { + "id": "nvidia/Nemotron-120B-A12B", + "name": "Nemotron 3 Super", + "family": "nemotron", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-04-23", - "last_updated": "2024-04-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2026-02", + "release_date": "2026-03-11", + "last_updated": "2026-03-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.13, "output": 0.52 }, - "limit": { "context": 4096, "output": 1024 } + "limit": { + "context": 262144, + "output": 32678 + }, + "cost": { + "input": 0.3, + "output": 0.75 + } }, - "phi-3-medium-4k-instruct": { - "id": "phi-3-medium-4k-instruct", - "name": "Phi-3-medium-instruct (4k)", - "family": "phi", + "deepseek-ai/DeepSeek-V3.1": { + "id": "deepseek-ai/DeepSeek-V3.1", + "name": "DeepSeek V3.1", + "family": "deepseek", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-04-23", - "last_updated": "2024-04-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-25", + "last_updated": "2025-08-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.17, "output": 0.68 }, - "limit": { "context": 4096, "output": 1024 } - }, - "model-router": { - "id": "model-router", - "name": "Model Router", - "family": "model-router", - "attachment": true, - "reasoning": false, - "tool_call": true, - "release_date": "2025-05-19", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.14, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 164000, + "output": 131000 + }, + "cost": { + "input": 0.5, + "output": 1.5 + } }, - "gpt-3.5-turbo-instruct": { - "id": "gpt-3.5-turbo-instruct", - "name": "GPT-3.5 Turbo Instruct", - "family": "gpt", + "deepseek-ai/DeepSeek-V3-0324": { + "id": "deepseek-ai/DeepSeek-V3-0324", + "name": "DeepSeek V3 0324", + "family": "deepseek", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "knowledge": "2021-08", - "release_date": "2023-09-21", - "last_updated": "2023-09-21", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.5, "output": 2 }, - "limit": { "context": 4096, "output": 4096 } + "knowledge": "2024-12", + "release_date": "2025-03-24", + "last_updated": "2025-03-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 164000, + "output": 131000 + }, + "cost": { + "input": 0.77, + "output": 0.77 + } }, - "gpt-5.1-chat": { - "id": "gpt-5.1-chat", - "name": "GPT-5.1 Chat", - "family": "gpt-codex", - "attachment": true, + "deepseek-ai/DeepSeek-V3.2": { + "id": "deepseek-ai/DeepSeek-V3.2", + "name": "DeepSeek V3.2", + "family": "deepseek", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text", "image", "audio"], "output": ["text", "image", "audio"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 128000, "output": 16384 } + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2025-10", + "release_date": "2025-12-01", + "last_updated": "2026-03-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 163800, + "output": 131100 + }, + "status": "deprecated", + "cost": { + "input": 0.3, + "output": 0.45 + } }, - "gpt-5.4": { - "id": "gpt-5.4", - "name": "GPT-5.4", - "family": "gpt", - "attachment": true, + "openai/gpt-oss-120b": { + "id": "openai/gpt-oss-120b", + "name": "GPT OSS 120B", + "family": "gpt-oss", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-05", - "last_updated": "2026-03-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.5, "output": 15, "cache_read": 0.25 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "temperature": true, + "knowledge": "2025-08", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.1, + "output": 0.5 + } }, - "o1": { - "id": "o1", - "name": "o1", - "family": "o", + "moonshotai/Kimi-K2-Thinking": { + "id": "moonshotai/Kimi-K2-Thinking", + "name": "Kimi K2 Thinking", + "family": "kimi-thinking", "attachment": false, "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2023-09", - "release_date": "2024-12-05", - "last_updated": "2024-12-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 15, "output": 60, "cache_read": 7.5 }, - "limit": { "context": 200000, "output": 100000 } + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-11-06", + "last_updated": "2026-03-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "status": "deprecated", + "cost": { + "input": 0.6, + "output": 2.5 + } }, - "o3": { - "id": "o3", - "name": "o3", - "family": "o", + "moonshotai/Kimi-K2.6": { + "id": "moonshotai/Kimi-K2.6", + "name": "Kimi K2.6", + "family": "kimi-k2.6", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2024-05", - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 8, "cache_read": 0.5 }, - "limit": { "context": 200000, "output": 100000 } - }, - "grok-4-1-fast-non-reasoning": { - "id": "grok-4-1-fast-non-reasoning", - "name": "Grok 4.1 Fast (Non-Reasoning)", - "family": "grok", - "attachment": true, - "reasoning": false, - "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-06-27", - "last_updated": "2025-06-27", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 128000, "input": 128000, "output": 8192 }, - "status": "beta" + "knowledge": "2025-01", + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.95, + "output": 4, + "cache_read": 0.16 + } }, - "mai-ds-r1": { - "id": "mai-ds-r1", - "name": "MAI-DS-R1", - "family": "mai", + "moonshotai/Kimi-K2-Instruct-0905": { + "id": "moonshotai/Kimi-K2-Instruct-0905", + "name": "Kimi K2 Instruct 0905", + "family": "kimi", "attachment": false, - "reasoning": true, - "tool_call": false, - "temperature": true, - "knowledge": "2024-06", - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.35, "output": 5.4 }, - "limit": { "context": 128000, "output": 8192 } - }, - "mistral-small-2503": { - "id": "mistral-small-2503", - "name": "Mistral Small 3.1", - "family": "mistral-small", - "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-09", - "release_date": "2025-03-01", - "last_updated": "2025-03-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 128000, "output": 32768 } + "knowledge": "2025-08", + "release_date": "2025-09-05", + "last_updated": "2026-03-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "status": "deprecated", + "cost": { + "input": 0.6, + "output": 2.5 + } }, - "gpt-5-chat": { - "id": "gpt-5-chat", - "name": "GPT-5 Chat", - "family": "gpt-codex", + "moonshotai/Kimi-K2.5": { + "id": "moonshotai/Kimi-K2.5", + "name": "Kimi K2.5", + "family": "kimi", "attachment": true, "reasoning": true, - "tool_call": false, - "temperature": false, - "knowledge": "2024-10-24", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.13 }, - "limit": { "context": 128000, "output": 16384 } - }, - "cohere-command-r-plus-08-2024": { - "id": "cohere-command-r-plus-08-2024", - "name": "Command R+", - "family": "command-r", - "attachment": false, - "reasoning": false, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-06-01", - "release_date": "2024-08-30", - "last_updated": "2024-08-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 128000, "output": 4000 } - }, - "meta-llama-3-70b-instruct": { - "id": "meta-llama-3-70b-instruct", - "name": "Meta-Llama-3-70B-Instruct", - "family": "llama", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-04-18", - "last_updated": "2024-04-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-12", + "release_date": "2026-01-30", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 2.68, "output": 3.54 }, - "limit": { "context": 8192, "output": 2048 } + "limit": { + "context": 262144, + "output": 8192 + }, + "cost": { + "input": 0.6, + "output": 3 + } }, - "phi-3.5-mini-instruct": { - "id": "phi-3.5-mini-instruct", - "name": "Phi-3.5-mini-instruct", - "family": "phi", + "MiniMaxAI/MiniMax-M2.5": { + "id": "MiniMaxAI/MiniMax-M2.5", + "name": "MiniMax-M2.5", + "family": "minimax", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-08-20", - "last_updated": "2024-08-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2026-01", + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.13, "output": 0.52 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 204000, + "output": 204000 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "meta-llama-3-8b-instruct": { - "id": "meta-llama-3-8b-instruct", - "name": "Meta-Llama-3-8B-Instruct", - "family": "llama", + "deepseek-ai/DeepSeek-V4-Pro": { + "id": "deepseek-ai/DeepSeek-V4-Pro", + "name": "DeepSeek V4 Pro", + "family": "deepseek-thinking", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-04-18", - "last_updated": "2024-04-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 0.61 }, - "limit": { "context": 8192, "output": 2048 } - }, - "grok-3-mini": { - "id": "grok-3-mini", - "name": "Grok 3 Mini", + "limit": { + "context": 1000000, + "output": 384000 + }, + "cost": { + "input": 1.74, + "output": 3.48, + "cache_read": 0.15 + } + } + } + }, + "frogbot": { + "id": "frogbot", + "env": ["FROGBOT_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://app.frogbot.ai/api/v1", + "name": "FrogBot", + "doc": "https://docs.frogbot.ai", + "models": { + "grok-4-1-fast-reasoning": { + "id": "grok-4-1-fast-reasoning", + "name": "Grok 4.1 Fast (Reasoning)", "family": "grok", - "attachment": false, + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-11", + "release_date": "2025-11-25", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 0.5, "reasoning": 0.5, "cache_read": 0.075 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 2000000, + "output": 128000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } }, - "claude-opus-4-1": { - "id": "claude-opus-4-1", - "name": "Claude Opus 4.1", - "family": "claude-opus", + "claude-haiku-4-5": { + "id": "claude-haiku-4-5", + "name": "Claude Haiku 4.5", + "family": "claude-haiku", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-11-18", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 }, - "provider": { - "npm": "@ai-sdk/anthropic", - "api": "https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1" + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 } }, - "gpt-5.4-nano": { - "id": "gpt-5.4-nano", - "name": "GPT-5.4 Nano", - "family": "gpt-nano", - "attachment": true, + "kimi-k2.5": { + "id": "kimi-k2.5", + "name": "Kimi-K2.5", + "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-17", - "last_updated": "2026-03-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 1.25, "cache_read": 0.02 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } - }, - "gpt-4-32k": { - "id": "gpt-4-32k", - "name": "GPT-4 32K", - "family": "gpt", - "attachment": false, - "reasoning": false, - "tool_call": true, "temperature": true, - "knowledge": "2023-11", - "release_date": "2023-03-14", - "last_updated": "2023-03-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "1970-01-01", + "last_updated": "1970-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 60, "output": 120 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 256000, + "output": 128000 + }, + "cost": { + "input": 0.6, + "output": 3, + "cache_read": 0.1 + } }, - "mistral-medium-2505": { - "id": "mistral-medium-2505", - "name": "Mistral Medium 3", - "family": "mistral-medium", + "claude-sonnet-4-6": { + "id": "claude-sonnet-4-6", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-05", - "release_date": "2025-05-07", - "last_updated": "2025-05-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-02-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "gpt-4": { - "id": "gpt-4", - "name": "GPT-4", - "family": "gpt", - "attachment": false, - "reasoning": false, + "gemini-3-flash-preview": { + "id": "gemini-3-flash-preview", + "name": "Gemini 3 Flash Preview", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2023-11", - "release_date": "2023-03-14", - "last_updated": "2023-03-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 60, "output": 120 }, - "limit": { "context": 8192, "output": 8192 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.05 + } }, - "gpt-5.3-chat": { - "id": "gpt-5.3-chat", - "name": "GPT-5.3 Chat", - "family": "gpt-codex", + "claude-opus-4-7": { + "id": "claude-opus-4-7", + "name": "Claude Opus 4.7", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-03", - "last_updated": "2026-03-03", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "llama-3.2-90b-vision-instruct": { - "id": "llama-3.2-90b-vision-instruct", - "name": "Llama-3.2-90B-Vision-Instruct", - "family": "llama", + "zai-glm-5-1": { + "id": "zai-glm-5-1", + "name": "Z.AI GLM-5.1", + "family": "glm", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-09-25", - "last_updated": "2024-09-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-01-20", + "last_updated": "2025-02-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 2.04, "output": 2.04 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 198000, + "output": 8192 + }, + "cost": { + "input": 1.4, + "output": 4.4, + "cache_read": 0.26 + } }, - "deepseek-v3.2-speciale": { - "id": "deepseek-v3.2-speciale", - "name": "DeepSeek-V3.2-Speciale", - "family": "deepseek", - "attachment": false, + "gemini-2.5-pro": { + "id": "gemini-2.5-pro", + "name": "Gemini 2.5 Pro", + "family": "gemini-pro", + "attachment": true, "reasoning": true, - "tool_call": false, - "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.58, "output": 1.68 }, - "limit": { "context": 128000, "output": 128000 } - }, - "text-embedding-ada-002": { - "id": "text-embedding-ada-002", - "name": "text-embedding-ada-002", - "family": "text-embedding", - "attachment": false, - "reasoning": false, - "tool_call": false, - "release_date": "2022-12-15", - "last_updated": "2022-12-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0 }, - "limit": { "context": 8192, "output": 1536 } - }, - "ministral-3b": { - "id": "ministral-3b", - "name": "Ministral 3B", - "family": "ministral", - "attachment": false, - "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-03", - "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.04, "output": 0.04 }, - "limit": { "context": 128000, "output": 8192 } + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.31 + } }, - "mistral-nemo": { - "id": "mistral-nemo", - "name": "Mistral Nemo", - "family": "mistral-nemo", - "attachment": false, + "grok-4-1-fast-non-reasoning": { + "id": "grok-4-1-fast-non-reasoning", + "name": "Grok 4.1 Fast (Non-Reasoning)", + "family": "grok", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2024-07-18", - "last_updated": "2024-07-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.15 }, - "limit": { "context": 128000, "output": 128000 } + "knowledge": "2025-11", + "release_date": "2025-11-25", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 128000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } }, - "gpt-5.2-chat": { - "id": "gpt-5.2-chat", - "name": "GPT-5.2 Chat", - "family": "gpt-codex", + "gpt-5-4-nano": { + "id": "gpt-5-4-nano", + "name": "GPT-5.4 Nano", + "family": "gpt-nano", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.2, + "output": 1.25, + "cache_read": 0.02 + } }, - "gpt-5.2": { - "id": "gpt-5.2", - "name": "GPT-5.2", - "family": "gpt", + "gemini-2.5-flash": { + "id": "gemini-2.5-flash", + "name": "Gemini 2.5 Flash", + "family": "gemini-flash", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } - }, - "gpt-3.5-turbo-0301": { - "id": "gpt-3.5-turbo-0301", - "name": "GPT-3.5 Turbo 0301", - "family": "gpt", - "attachment": false, - "reasoning": false, - "tool_call": false, "temperature": true, - "knowledge": "2021-08", - "release_date": "2023-03-01", - "last_updated": "2023-03-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-07-17", + "last_updated": "2025-07-17", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.5, "output": 2 }, - "limit": { "context": 4096, "output": 4096 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.075 + } }, - "phi-4": { - "id": "phi-4", - "name": "Phi-4", - "family": "phi", + "grok-code-fast-1": { + "id": "grok-code-fast-1", + "name": "Grok 4.1 Fast (Reasoning)", + "family": "grok", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, "knowledge": "2023-10", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.125, "output": 0.5 }, - "limit": { "context": 128000, "output": 4096 } + "release_date": "2025-08-28", + "last_updated": "2025-08-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 128000 + }, + "cost": { + "input": 0.2, + "output": 1.5, + "cache_read": 0.02 + } }, - "grok-4-1-fast-reasoning": { - "id": "grok-4-1-fast-reasoning", - "name": "Grok 4.1 Fast (Reasoning)", + "gpt-5-5": { + "id": "gpt-5-5", + "name": "GPT-5.5", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 272000, + "output": 128000 + }, + "cost": { + "input": 2.5, + "output": 15, + "cache_read": 0.25 + } + }, + "grok-4-3": { + "id": "grok-4-3", + "name": "Grok 4.3", "family": "grok", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-06-27", - "last_updated": "2025-06-27", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-11", + "release_date": "2026-04-30", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 128000, "input": 128000, "output": 8192 }, - "status": "beta" + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 2.5, + "cache_read": 0.2 + } }, - "gpt-5.1": { - "id": "gpt-5.1", - "name": "GPT-5.1", - "family": "gpt", + "gpt-5-4-mini": { + "id": "gpt-5-4-mini", + "name": "GPT-5.4 Mini", + "family": "gpt-mini", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text", "image", "audio"], "output": ["text", "image", "audio"] }, + "knowledge": "2025-08-31", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 272000, "output": 128000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.75, + "output": 4.5, + "cache_read": 0.075 + } }, - "deepseek-v3.1": { - "id": "deepseek-v3.1", - "name": "DeepSeek-V3.1", - "family": "deepseek", - "attachment": false, + "claude-opus-4-6": { + "id": "claude-opus-4-6", + "name": "Claude Opus 4.6", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-08-21", - "last_updated": "2025-08-21", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.56, "output": 1.68 }, - "limit": { "context": 131072, "output": 131072 } + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "cohere-command-r-08-2024": { - "id": "cohere-command-r-08-2024", - "name": "Command R", - "family": "command-r", - "attachment": false, + "deepseek-v4-pro": { + "id": "deepseek-v4-pro", + "name": "DeepSeek v4 Pro", + "family": "deepseek", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-06-01", - "release_date": "2024-08-30", - "last_updated": "2024-08-30", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2026-01", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 1.74, + "output": 3.48, + "cache_read": 0.14 + } + }, + "gpt-oss-20b": { + "id": "gpt-oss-20b", + "name": "GPT OSS 20B", + "family": "gpt-oss", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "1970-01-01", + "last_updated": "1970-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 128000, "output": 4000 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.07, + "output": 0.2 + } }, - "gpt-4.1-mini": { - "id": "gpt-4.1-mini", - "name": "GPT-4.1 mini", - "family": "gpt-mini", + "qwen-3-6-plus": { + "id": "qwen-3-6-plus", + "name": "Qwen 3.6 Plus", + "family": "qwen", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-05", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-04-02", + "last_updated": "2026-04-03", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 1.6, "cache_read": 0.1 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.1 + } }, - "phi-3-medium-128k-instruct": { - "id": "phi-3-medium-128k-instruct", - "name": "Phi-3-medium-instruct (128k)", - "family": "phi", - "attachment": false, + "minimax-m2-7": { + "id": "minimax-m2-7", + "name": "MiniMax-M2.7", + "family": "minimax", + "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-04-23", - "last_updated": "2024-04-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.17, "output": 0.68 }, - "limit": { "context": 128000, "output": 4096 } + "knowledge": "2024-09", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 192000, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.06 + } }, - "meta-llama-3.1-405b-instruct": { - "id": "meta-llama-3.1-405b-instruct", - "name": "Meta-Llama-3.1-405B-Instruct", - "family": "llama", - "attachment": false, + "minimax-m2-5": { + "id": "minimax-m2-5", + "name": "MiniMax-M2.5", + "family": "minimax", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 5.33, "output": 16 }, - "limit": { "context": 128000, "output": 32768 } + "knowledge": "2024-09", + "release_date": "2025-01-15", + "last_updated": "2025-02-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 192000, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.03 + } }, - "phi-3.5-moe-instruct": { - "id": "phi-3.5-moe-instruct", - "name": "Phi-3.5-MoE-instruct", - "family": "phi", - "attachment": false, + "gpt-4o": { + "id": "gpt-4o", + "name": "GPT-4o", + "family": "gpt", + "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-08-20", - "last_updated": "2024-08-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2023-09", + "release_date": "2024-05-13", + "last_updated": "2024-08-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 10, + "cache_read": 1.25 + } + }, + "gpt-oss-120b": { + "id": "gpt-oss-120b", + "name": "GPT OSS 120B", + "family": "gpt-oss", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "1970-01-01", + "last_updated": "1970-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.16, "output": 0.64 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "grok-4-fast-reasoning": { - "id": "grok-4-fast-reasoning", - "name": "Grok 4 Fast (Reasoning)", - "family": "grok", + "gemini-3-1-pro-preview": { + "id": "gemini-3-1-pro-preview", + "name": "Gemini 3.1 Pro Preview", + "family": "gemini-pro", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-09-19", - "last_updated": "2025-09-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2026-01", + "release_date": "2026-02-18", + "last_updated": "2026-02-18", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2 + } + }, + "kimi-k2-6": { + "id": "kimi-k2-6", + "name": "Kimi-K2.6", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "1970-01-01", + "last_updated": "1970-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5, "cache_read": 0.05 }, - "limit": { "context": 2000000, "output": 30000 } + "limit": { + "context": 256000, + "output": 128000 + }, + "cost": { + "input": 0.95, + "output": 4, + "cache_read": 0.16 + } }, - "gpt-5-nano": { - "id": "gpt-5-nano", - "name": "GPT-5 Nano", - "family": "gpt-nano", + "gpt-5-3-codex": { + "id": "gpt-5-3-codex", + "name": "GPT-5.3 Codex", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, "temperature": false, - "knowledge": "2024-05-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2026-01-31", + "release_date": "2026-02-15", + "last_updated": "2026-02-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.05, "output": 0.4, "cache_read": 0.01 }, - "limit": { "context": 272000, "output": 128000 } - }, - "cohere-command-a": { - "id": "cohere-command-a", - "name": "Command A", - "family": "command-a", - "attachment": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } + } + } + }, + "zhipuai-coding-plan": { + "id": "zhipuai-coding-plan", + "env": ["ZHIPU_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://open.bigmodel.cn/api/coding/paas/v4", + "name": "Zhipu AI Coding Plan", + "doc": "https://docs.bigmodel.cn/cn/coding-plan/overview", + "models": { + "glm-5v-turbo": { + "id": "glm-5v-turbo", + "name": "GLM-5V-Turbo", + "family": "glm", + "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-06-01", - "release_date": "2025-03-13", - "last_updated": "2025-03-13", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 256000, "output": 8000 } + "release_date": "2026-04-01", + "last_updated": "2026-04-01", + "modalities": { + "input": ["text", "image", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "grok-3": { - "id": "grok-3", - "name": "Grok 3", - "family": "grok", + "glm-5.1": { + "id": "glm-5.1", + "name": "GLM-5.1", + "family": "glm", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2024-11", - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-27", + "last_updated": "2026-03-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.75 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "phi-4-reasoning-plus": { - "id": "phi-4-reasoning-plus", - "name": "Phi-4-reasoning-plus", - "family": "phi", + "glm-5-turbo": { + "id": "glm-5-turbo", + "name": "GLM-5-Turbo", + "family": "glm", "attachment": false, "reasoning": true, - "tool_call": false, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.125, "output": 0.5 }, - "limit": { "context": 32000, "output": 4096 } - }, - "cohere-embed-v-4-0": { - "id": "cohere-embed-v-4-0", - "name": "Embed v4", - "family": "cohere-embed", - "attachment": true, - "reasoning": false, - "tool_call": false, - "temperature": false, - "release_date": "2025-04-15", - "last_updated": "2025-04-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.12, "output": 0 }, - "limit": { "context": 128000, "output": 1536 } - }, - "llama-4-maverick-17b-128e-instruct-fp8": { - "id": "llama-4-maverick-17b-128e-instruct-fp8", - "name": "Llama 4 Maverick 17B 128E Instruct FP8", - "family": "llama", - "attachment": true, - "reasoning": false, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.25, "output": 1 }, - "limit": { "context": 128000, "output": 8192 } + "release_date": "2026-03-16", + "last_updated": "2026-03-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "deepseek-r1-0528": { - "id": "deepseek-r1-0528", - "name": "DeepSeek-R1-0528", - "family": "deepseek-thinking", + "glm-4.5-air": { + "id": "glm-4.5-air", + "name": "GLM-4.5-Air", + "family": "glm-air", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-05-28", - "last_updated": "2025-05-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1.35, "output": 5.4 }, - "limit": { "context": 163840, "output": 163840 } + "limit": { + "context": 131072, + "output": 98304 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "phi-3-small-128k-instruct": { - "id": "phi-3-small-128k-instruct", - "name": "Phi-3-small-instruct (128k)", - "family": "phi", + "glm-4.7": { + "id": "glm-4.7", + "name": "GLM-4.7", + "family": "glm", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-04-23", - "last_updated": "2024-04-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 128000, "output": 4096 } - }, - "meta-llama-3.1-70b-instruct": { - "id": "meta-llama-3.1-70b-instruct", - "name": "Meta-Llama-3.1-70B-Instruct", - "family": "llama", + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + } + } + }, + "alibaba-coding-plan": { + "id": "alibaba-coding-plan", + "env": ["ALIBABA_CODING_PLAN_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://coding-intl.dashscope.aliyuncs.com/v1", + "name": "Alibaba Coding Plan", + "doc": "https://www.alibabacloud.com/help/en/model-studio/coding-plan", + "models": { + "qwen3-coder-plus": { + "id": "qwen3-coder-plus", + "name": "Qwen3 Coder Plus", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 2.68, "output": 3.54 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "gpt-4.1-nano": { - "id": "gpt-4.1-nano", - "name": "GPT-4.1 nano", - "family": "gpt-nano", + "kimi-k2.5": { + "id": "kimi-k2.5", + "name": "Kimi K2.5", + "family": "kimi", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-05", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.03 }, - "limit": { "context": 1047576, "output": 32768 } + "knowledge": "2025-01", + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "claude-sonnet-4-5": { - "id": "claude-sonnet-4-5", - "name": "Claude Sonnet 4.5", - "family": "claude-sonnet", - "attachment": true, + "glm-4.7": { + "id": "glm-4.7", + "name": "GLM-4.7", + "family": "glm", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2025-11-18", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 }, - "provider": { - "npm": "@ai-sdk/anthropic", - "api": "https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1" + "knowledge": "2025-04", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202752, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 } }, - "o1-preview": { - "id": "o1-preview", - "name": "o1-preview", - "family": "o", + "glm-5": { + "id": "glm-5", + "name": "GLM-5", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2023-09", - "release_date": "2024-09-12", - "last_updated": "2024-09-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 16.5, "output": 66, "cache_read": 8.25 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 202752, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "deepseek-v3.2": { - "id": "deepseek-v3.2", - "name": "DeepSeek-V3.2", - "family": "deepseek", + "MiniMax-M2.5": { + "id": "MiniMax-M2.5", + "name": "MiniMax-M2.5", + "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.58, "output": 1.68 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 196608, + "input": 196601, + "output": 24576 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "gpt-3.5-turbo-0125": { - "id": "gpt-3.5-turbo-0125", - "name": "GPT-3.5 Turbo 0125", - "family": "gpt", + "qwen3.6-plus": { + "id": "qwen3.6-plus", + "name": "Qwen3.6 Plus", + "family": "qwen", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "knowledge": "2021-08", - "release_date": "2024-01-25", - "last_updated": "2024-01-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 1.5 }, - "limit": { "context": 16384, "output": 16384 } + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "text-embedding-3-small": { - "id": "text-embedding-3-small", - "name": "text-embedding-3-small", - "family": "text-embedding", + "qwen3-max-2026-01-23": { + "id": "qwen3-max-2026-01-23", + "name": "Qwen3 Max", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, - "release_date": "2024-01-25", - "last_updated": "2024-01-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2026-01-23", + "last_updated": "2026-01-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.02, "output": 0 }, - "limit": { "context": 8191, "output": 1536 } + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "gpt-5-codex": { - "id": "gpt-5-codex", - "name": "GPT-5-Codex", - "family": "gpt-codex", + "qwen3-coder-next": { + "id": "qwen3-coder-next", + "name": "Qwen3 Coder Next", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.13 }, - "limit": { "context": 400000, "output": 128000 } + "structured_output": true, + "temperature": true, + "release_date": "2026-02-03", + "last_updated": "2026-02-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "o4-mini": { - "id": "o4-mini", - "name": "o4-mini", - "family": "o-mini", - "attachment": true, + "qwen3.5-plus": { + "id": "qwen3.5-plus", + "name": "Qwen3.5 Plus", + "family": "qwen", + "attachment": false, "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2024-05", - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2026-02-16", + "last_updated": "2026-02-16", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.28 }, - "limit": { "context": 200000, "output": 100000 } - }, - "claude-haiku-4-5": { - "id": "claude-haiku-4-5", - "name": "Claude Haiku 4.5", - "family": "claude-haiku", + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + } + } + }, + "venice": { + "id": "venice", + "env": ["VENICE_API_KEY"], + "npm": "venice-ai-sdk-provider", + "name": "Venice AI", + "doc": "https://docs.venice.ai", + "models": { + "openai-gpt-4o-mini-2024-07-18": { + "id": "openai-gpt-4o-mini-2024-07-18", + "name": "GPT-4o Mini", + "family": "gpt-mini", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-02-31", - "release_date": "2025-11-18", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2026-02-28", + "last_updated": "2026-03-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.1, "cache_write": 1.25 }, - "limit": { "context": 200000, "output": 64000 }, - "provider": { - "npm": "@ai-sdk/anthropic", - "api": "https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1" + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.1875, + "output": 0.75, + "cache_read": 0.09375 } }, - "gpt-5.1-codex": { - "id": "gpt-5.1-codex", - "name": "GPT-5.1 Codex", - "family": "gpt-codex", + "qwen3-next-80b": { + "id": "qwen3-next-80b", + "name": "Qwen 3 Next 80b", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text", "image", "audio"], "output": ["text", "image", "audio"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } - }, - "o1-mini": { - "id": "o1-mini", - "name": "o1-mini", - "family": "o-mini", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2023-09", - "release_date": "2024-09-12", - "last_updated": "2024-09-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.1, "output": 4.4, "cache_read": 0.55 }, - "limit": { "context": 128000, "output": 65536 } - } - } - }, - "aihubmix": { - "id": "aihubmix", - "env": ["AIHUBMIX_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://aihubmix.com/v1", - "name": "AIHubMix", - "doc": "https://docs.aihubmix.com", - "models": { - "gpt-5.2-codex": { - "id": "gpt-5.2-codex", - "name": "GPT-5.2-Codex", - "family": "gpt-codex", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2025-08-31", - "release_date": "2026-01-14", - "last_updated": "2026-01-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "output": 128000 } - }, - "gemini-3-pro-preview-search": { - "id": "gemini-3-pro-preview-search", - "name": "Gemini 3 Pro Preview Search", - "family": "gemini-pro", - "attachment": true, - "reasoning": true, - "tool_call": true, "temperature": true, - "knowledge": "2025-11", - "release_date": "2025-11-19", - "last_updated": "2025-11-19", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 12, "cache_read": 0.5 }, - "limit": { "context": 1000000, "output": 65000 } + "knowledge": "2025-07", + "release_date": "2025-04-29", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 16384 + }, + "cost": { + "input": 0.35, + "output": 1.9 + } }, - "gpt-5.1-codex-mini": { - "id": "gpt-5.1-codex-mini", - "name": "GPT-5.1 Codex Mini", - "family": "gpt-codex", + "grok-4-20-multi-agent": { + "id": "grok-4-20-multi-agent", + "name": "Grok 4.20 Multi-Agent", + "family": "grok", "attachment": true, "reasoning": true, - "tool_call": true, + "tool_call": false, + "structured_output": true, "temperature": true, - "knowledge": "2025-11", - "release_date": "2025-11-15", - "last_updated": "2025-11-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-03-12", + "last_updated": "2026-05-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.03 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 2000000, + "output": 128000 + }, + "cost": { + "input": 1.42, + "output": 2.83, + "cache_read": 0.23, + "tiers": [ + { + "input": 2.83, + "output": 5.67, + "cache_read": 0.45, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 2.83, + "output": 5.67, + "cache_read": 0.45 + } + } }, "qwen3-235b-a22b-instruct-2507": { "id": "qwen3-235b-a22b-instruct-2507", - "name": "Qwen3 235B A22B Instruct 2507", + "name": "Qwen 3 235B A22B Instruct 2507", "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-30", - "last_updated": "2025-07-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.28, "output": 1.12 }, - "limit": { "context": 262144, "output": 262144 } - }, - "qwen3.5-plus": { - "id": "qwen3.5-plus", - "name": "Qwen 3.5 Plus", - "family": "qwen", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-02-16", - "last_updated": "2026-02-16", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.11, "output": 0.66 }, - "limit": { "context": 1000000, "output": 65536 } - }, - "deepseek-v3.2-fast": { - "id": "deepseek-v3.2-fast", - "name": "DeepSeek-V3.2-Fast", - "family": "deepseek", - "attachment": false, - "reasoning": false, - "tool_call": false, - "knowledge": "2024-07", - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-07", + "release_date": "2025-04-29", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1.1, "output": 3.29 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.75 + } }, - "gpt-5-pro": { - "id": "gpt-5-pro", - "name": "GPT-5-Pro", - "family": "gpt-pro", + "z-ai-glm-5v-turbo": { + "id": "z-ai-glm-5v-turbo", + "name": "GLM 5V Turbo", + "family": "glmv", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-09-30", - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-04-01", + "last_updated": "2026-04-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 7, "output": 28, "cache_read": 3.5 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 200000, + "output": 32768 + }, + "cost": { + "input": 1.5, + "output": 5, + "cache_read": 0.3 + } }, - "qwen3-coder-next": { - "id": "qwen3-coder-next", - "name": "Qwen3 Coder Next", - "family": "qwen", - "attachment": false, + "gemma-4-uncensored": { + "id": "gemma-4-uncensored", + "name": "Gemma 4 Uncensored", + "family": "gemma", + "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": false, + "structured_output": true, "temperature": true, - "release_date": "2026-02-04", - "last_updated": "2026-02-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-13", + "last_updated": "2026-04-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.14, "output": 0.55 }, - "limit": { "context": 262144, "input": 262144, "output": 65536 } + "limit": { + "context": 256000, + "output": 8192 + }, + "cost": { + "input": 0.1625, + "output": 0.5 + } }, - "gpt-5": { - "id": "gpt-5", - "name": "GPT-5", - "family": "gpt", + "grok-41-fast": { + "id": "grok-41-fast", + "name": "Grok 4.1 Fast", + "family": "grok", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-09-30", - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-07", + "release_date": "2025-12-01", + "last_updated": "2026-04-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 20, "cache_read": 2.5 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 1000000, + "output": 30000 + }, + "cost": { + "input": 0.23, + "output": 0.57, + "cache_read": 0.06 + } }, - "claude-opus-4-5": { - "id": "claude-opus-4-5", - "name": "Claude Opus 4.5", + "claude-sonnet-4-6": { + "id": "claude-sonnet-4-6", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-11-25", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-03-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 3.6, + "output": 18, + "cache_read": 0.36, + "cache_write": 4.5 + } }, - "kimi-k2.5": { - "id": "kimi-k2.5", - "name": "Kimi K2.5", - "family": "kimi", - "attachment": true, + "nvidia-nemotron-cascade-2-30b-a3b": { + "id": "nvidia-nemotron-cascade-2-30b-a3b", + "name": "Nemotron Cascade 2 30B A3B", + "family": "nemotron", + "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "structured_output": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2026-03-24", + "last_updated": "2026-04-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 3, "cache_read": 0.1 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 256000, + "output": 32768 + }, + "cost": { + "input": 0.14, + "output": 0.8 + } }, - "gemini-3-pro-preview": { - "id": "gemini-3-pro-preview", - "name": "Gemini 3 Pro Preview", - "family": "gemini-pro", + "gemini-3-flash-preview": { + "id": "gemini-3-flash-preview", + "name": "Gemini 3 Flash Preview", + "family": "gemini-flash", "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2025-11", - "release_date": "2025-11-19", - "last_updated": "2025-11-19", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 12, "cache_read": 0.5 }, - "limit": { "context": 1000000, "output": 65000 } - }, - "coding-glm-5-free": { - "id": "coding-glm-5-free", - "name": "Coding-GLM-5-Free", - "family": "glm", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-12-19", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 256000, + "output": 65536 + }, + "cost": { + "input": 0.7, + "output": 3.75, + "cache_read": 0.07 + } }, - "gpt-4o": { - "id": "gpt-4o", - "name": "GPT-4o", - "family": "gpt", + "grok-4-20": { + "id": "grok-4-20", + "name": "Grok 4.20", + "family": "grok", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2023-09", - "release_date": "2024-05-13", - "last_updated": "2024-08-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-03-12", + "last_updated": "2026-05-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 10, "cache_read": 1.25 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 2000000, + "output": 128000 + }, + "cost": { + "input": 1.42, + "output": 2.83, + "cache_read": 0.23, + "tiers": [ + { + "input": 2.83, + "output": 5.67, + "cache_read": 0.45, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 2.83, + "output": 5.67, + "cache_read": 0.45 + } + } }, - "gpt-5-mini": { - "id": "gpt-5-mini", - "name": "GPT-5-Mini", - "family": "gpt-mini", + "google-gemma-4-26b-a4b-it": { + "id": "google-gemma-4-26b-a4b-it", + "name": "Google Gemma 4 26B A4B Instruct", + "family": "gemma", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-09-30", - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.5, "output": 6, "cache_read": 0.75 }, - "limit": { "context": 200000, "output": 64000 } + "release_date": "2026-04-02", + "last_updated": "2026-04-12", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 8192 + }, + "cost": { + "input": 0.1625, + "output": 0.5 + } }, - "claude-opus-4-6": { - "id": "claude-opus-4-6", - "name": "Claude Opus 4.6", + "claude-opus-4-7": { + "id": "claude-opus-4-7", + "name": "Claude Opus 4.7", "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-05", - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, "cost": { - "input": 5, - "output": 25, - "cache_read": 0.3, - "cache_write": 3.75, - "context_over_200k": { "input": 6, "output": 22, "cache_read": 0.6, "cache_write": 7.5 } + "input": 6, + "output": 30, + "cache_read": 0.6, + "cache_write": 7.5 + } + }, + "qwen3-coder-480b-a35b-instruct-turbo": { + "id": "qwen3-coder-480b-a35b-instruct-turbo", + "name": "Qwen 3 Coder 480B Turbo", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2026-01-27", + "last_updated": "2026-02-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 65536 }, - "limit": { "context": 200000, "output": 128000 } + "cost": { + "input": 0.35, + "output": 1.5, + "cache_read": 0.04 + } }, - "gpt-5.1-codex-max": { - "id": "gpt-5.1-codex-max", - "name": "GPT-5.1-Codex-Max", + "qwen3-5-397b-a17b": { + "id": "qwen3-5-397b-a17b", + "name": "Qwen 3.5 397B", + "family": "qwen", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } + "temperature": true, + "release_date": "2026-02-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.75, + "output": 4.5 + } }, - "claude-sonnet-4-6": { - "id": "claude-sonnet-4-6", - "name": "Claude Sonnet 4.6", - "family": "claude-sonnet", - "attachment": true, + "zai-org-glm-4.7": { + "id": "zai-org-glm-4.7", + "name": "GLM 4.7", + "family": "glm", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2025-08", - "release_date": "2026-02-17", - "last_updated": "2026-02-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { - "input": 3, - "output": 15, - "cache_read": 0.3, - "cache_write": 3.75, - "context_over_200k": { "input": 6, "output": 22.5, "cache_read": 0.6, "cache_write": 7.5 } + "knowledge": "2025-04", + "release_date": "2025-12-24", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] }, - "limit": { "context": 200000, "output": 64000 } + "open_weights": true, + "limit": { + "context": 198000, + "output": 16384 + }, + "cost": { + "input": 0.55, + "output": 2.65, + "cache_read": 0.11 + } }, - "gpt-4.1": { - "id": "gpt-4.1", - "name": "GPT-4.1", + "openai-gpt-54": { + "id": "openai-gpt-54", + "name": "GPT-5.4", "family": "gpt", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-03-05", + "last_updated": "2026-03-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8, "cache_read": 0.5 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 1000000, + "output": 131072 + }, + "cost": { + "input": 3.13, + "output": 18.8, + "cache_read": 0.313 + } }, - "deepseek-v3.2-think": { - "id": "deepseek-v3.2-think", - "name": "DeepSeek-V3.2-Think", - "family": "deepseek", + "zai-org-glm-4.7-flash": { + "id": "zai-org-glm-4.7-flash", + "name": "GLM 4.7 Flash", + "family": "glm-flash", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01-29", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 0.45 }, - "limit": { "context": 131000, "output": 64000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.125, + "output": 0.5 + } }, - "minimax-m2.1": { - "id": "minimax-m2.1", - "name": "MiniMax M2.1", - "family": "minimax", + "nvidia-nemotron-3-nano-30b-a3b": { + "id": "nvidia-nemotron-3-nano-30b-a3b", + "name": "NVIDIA Nemotron 3 Nano 30B", + "family": "nemotron", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_details" }, + "structured_output": true, "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-01-27", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.29, "output": 1.15 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.075, + "output": 0.3 + } }, - "claude-sonnet-4-6-think": { - "id": "claude-sonnet-4-6-think", - "name": "Claude Sonnet 4.6 Think", - "family": "claude-sonnet", + "qwen3-vl-235b-a22b": { + "id": "qwen3-vl-235b-a22b", + "name": "Qwen3 VL 235B", + "family": "qwen", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-08", - "release_date": "2026-02-17", - "last_updated": "2026-02-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { - "input": 3, - "output": 15, - "cache_read": 0.3, - "cache_write": 3.75, - "context_over_200k": { "input": 6, "output": 22.5, "cache_read": 0.6, "cache_write": 7.5 } + "release_date": "2026-01-16", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 16384 }, - "limit": { "context": 200000, "output": 64000 } + "cost": { + "input": 0.25, + "output": 1.5 + } }, - "claude-opus-4-6-think": { - "id": "claude-opus-4-6-think", - "name": "Claude Opus 4.6 Think", - "family": "claude-opus", + "openai-gpt-53-codex": { + "id": "openai-gpt-53-codex", + "name": "GPT-5.3 Codex", + "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-05", - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2026-02-24", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { - "input": 5, - "output": 25, - "cache_read": 0.3, - "cache_write": 3.75, - "context_over_200k": { "input": 6, "output": 22, "cache_read": 0.6, "cache_write": 7.5 } + "limit": { + "context": 400000, + "output": 128000 }, - "limit": { "context": 200000, "output": 128000 } + "cost": { + "input": 2.19, + "output": 17.5, + "cache_read": 0.219 + } }, - "coding-glm-4.7-free": { - "id": "coding-glm-4.7-free", - "name": "Coding GLM 4.7 Free", - "family": "glm", - "attachment": false, - "reasoning": true, + "venice-uncensored-1-2": { + "id": "venice-uncensored-1-2", + "name": "Venice Uncensored 1.2", + "family": "venice", + "attachment": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_details" }, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-01", + "last_updated": "2026-04-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.2, + "output": 0.9 + } }, - "claude-opus-4-1": { - "id": "claude-opus-4-1", - "name": "Claude Opus 4.1", - "family": "claude-opus", - "attachment": true, + "openai-gpt-52": { + "id": "openai-gpt-52", + "name": "GPT-5.2", + "family": "gpt", + "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2025-12-13", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 16.5, "output": 82.5, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 256000, + "output": 65536 + }, + "cost": { + "input": 2.19, + "output": 17.5, + "cache_read": 0.219 + } }, - "glm-4.6v": { - "id": "glm-4.6v", - "name": "GLM-4.6V", - "family": "glm", - "attachment": true, - "reasoning": true, + "mistral-small-3-2-24b-instruct": { + "id": "mistral-small-3-2-24b-instruct", + "name": "Mistral Small 3.2 24B Instruct", + "family": "mistral-small", + "attachment": false, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-08", - "last_updated": "2025-12-08", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2026-01-15", + "last_updated": "2026-03-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.14, "output": 0.41 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 256000, + "output": 16384 + }, + "cost": { + "input": 0.09375, + "output": 0.25 + } }, - "qwen3-coder-480b-a35b-instruct": { - "id": "qwen3-coder-480b-a35b-instruct", - "name": "Qwen3 Coder 480B A35B Instruct", - "family": "qwen", + "minimax-m27": { + "id": "minimax-m27", + "name": "MiniMax M2.7", + "family": "minimax", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-08-01", - "last_updated": "2025-08-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-18", + "last_updated": "2026-04-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.82, "output": 3.29 }, - "limit": { "context": 262144, "output": 131000 } + "limit": { + "context": 198000, + "output": 32768 + }, + "cost": { + "input": 0.375, + "output": 1.5, + "cache_read": 0.075 + } }, - "gemini-2.5-pro": { - "id": "gemini-2.5-pro", - "name": "Gemini 2.5 Pro", - "family": "gemini-pro", - "attachment": true, + "qwen3-235b-a22b-thinking-2507": { + "id": "qwen3-235b-a22b-thinking-2507", + "name": "Qwen 3 235B A22B Thinking 2507", + "family": "qwen", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 5, "cache_read": 0.31 }, - "limit": { "context": 2000000, "output": 65000 } + "knowledge": "2025-07", + "release_date": "2025-04-29", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.45, + "output": 3.5 + } }, - "gemini-2.5-flash": { - "id": "gemini-2.5-flash", - "name": "Gemini 2.5 Flash", - "family": "gemini-flash", + "qwen3-5-35b-a3b": { + "id": "qwen3-5-35b-a3b", + "name": "Qwen 3.5 35B A3B", + "family": "qwen", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.075, "output": 0.3, "cache_read": 0.02 }, - "limit": { "context": 1000000, "output": 65000 } + "release_date": "2026-02-25", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 65536 + }, + "cost": { + "input": 0.3125, + "output": 1.25, + "cache_read": 0.15625 + } }, - "qwen3-235b-a22b-thinking-2507": { - "id": "qwen3-235b-a22b-thinking-2507", - "name": "Qwen3 235B A22B Thinking 2507", - "family": "qwen", + "mercury-2": { + "id": "mercury-2", + "name": "Mercury 2", + "family": "mercury", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-30", - "last_updated": "2025-07-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.28, "output": 2.8 }, - "limit": { "context": 262144, "output": 262144 } + "release_date": "2026-02-20", + "last_updated": "2026-04-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 50000 + }, + "cost": { + "input": 0.3125, + "output": 0.9375, + "cache_read": 0.03125 + } }, - "gpt-5.2": { - "id": "gpt-5.2", - "name": "GPT-5.2", - "family": "gpt", + "google-gemma-3-27b-it": { + "id": "google-gemma-3-27b-it", + "name": "Google Gemma 3 27B Instruct", + "family": "gemma", "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-07", + "release_date": "2025-11-04", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 198000, + "output": 16384 + }, + "cost": { + "input": 0.12, + "output": 0.2 + } + }, + "olafangensan-glm-4.7-flash-heretic": { + "id": "olafangensan-glm-4.7-flash-heretic", + "name": "GLM 4.7 Flash Heretic", + "family": "glm-flash", + "attachment": false, "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14, "cache_read": 0.175 }, - "limit": { "context": 400000, "output": 128000 } + "structured_output": true, + "temperature": true, + "release_date": "2026-02-04", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 200000, + "output": 24000 + }, + "cost": { + "input": 0.14, + "output": 0.8 + } }, - "gpt-5.1": { - "id": "gpt-5.1", - "name": "GPT-5.1", - "family": "gpt", + "openai-gpt-55-pro": { + "id": "openai-gpt-55-pro", + "name": "GPT-5.5 Pro", + "family": "gpt-pro", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-11", - "release_date": "2025-11-15", - "last_updated": "2025-11-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-04-24", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 37.5, + "output": 225 + } }, - "coding-glm-4.7": { - "id": "coding-glm-4.7", - "name": "Coding-GLM-4.7", - "family": "glm", - "attachment": false, + "openai-gpt-52-codex": { + "id": "openai-gpt-52-codex", + "name": "GPT-5.2 Codex", + "family": "gpt-codex", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_details" }, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.27, "output": 1.1, "cache_read": 0.548 }, - "limit": { "context": 204800, "output": 131072 } + "knowledge": "2025-08", + "release_date": "2025-01-15", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 65536 + }, + "cost": { + "input": 2.19, + "output": 17.5, + "cache_read": 0.219 + } }, - "gpt-4.1-mini": { - "id": "gpt-4.1-mini", - "name": "GPT-4.1 mini", - "family": "gpt-mini", + "venice-uncensored-role-play": { + "id": "venice-uncensored-role-play", + "name": "Venice Role Play Uncensored", + "family": "venice", "attachment": true, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.4, "output": 1.6, "cache_read": 0.1 }, - "limit": { "context": 1047576, "output": 32768 } + "release_date": "2026-02-20", + "last_updated": "2026-03-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.5, + "output": 2 + } }, - "coding-minimax-m2.1-free": { - "id": "coding-minimax-m2.1-free", - "name": "Coding MiniMax M2.1 Free", - "family": "minimax", + "zai-org-glm-5": { + "id": "zai-org-glm-5", + "name": "GLM 5", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_details" }, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-11", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 198000, + "output": 32000 + }, + "cost": { + "input": 1, + "output": 3.2, + "cache_read": 0.2 + } }, - "glm-5": { - "id": "glm-5", - "name": "GLM-5", + "zai-org-glm-4.6": { + "id": "zai-org-glm-4.6", + "name": "GLM 4.6", "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.88, "output": 2.82 }, - "limit": { "context": 204800, "output": 131072 } + "release_date": "2024-04-01", + "last_updated": "2026-04-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 198000, + "output": 16384 + }, + "cost": { + "input": 0.85, + "output": 2.75, + "cache_read": 0.3 + } }, - "gpt-5-nano": { - "id": "gpt-5-nano", - "name": "GPT-5-Nano", - "family": "gpt-nano", + "grok-4-3": { + "id": "grok-4-3", + "name": "Grok 4.3", + "family": "grok", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-09-30", - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-04-18", + "last_updated": "2026-05-04", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 2, "cache_read": 0.25 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 1000000, + "output": 32000 + }, + "cost": { + "input": 1.42, + "output": 2.83, + "cache_read": 0.23, + "tiers": [ + { + "input": 2.83, + "output": 5.67, + "cache_read": 0.45, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 2.83, + "output": 5.67, + "cache_read": 0.45 + } + } }, - "glm-4.7": { - "id": "glm-4.7", - "name": "GLM-4.7", - "family": "glm", - "attachment": false, + "mistral-small-2603": { + "id": "mistral-small-2603", + "name": "Mistral Small 4", + "family": "mistral-small", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_details" }, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-16", + "last_updated": "2026-04-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.27, "output": 1.1, "cache_read": 0.548 }, - "limit": { "context": 204800, "output": 131072 } - }, - "qwen3-max-2026-01-23": { - "id": "qwen3-max-2026-01-23", - "name": "Qwen3 Max", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-23", - "last_updated": "2025-09-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.34, "output": 1.37 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 256000, + "output": 65536 + }, + "cost": { + "input": 0.1875, + "output": 0.75 + } }, - "Kimi-K2-0905": { - "id": "Kimi-K2-0905", - "name": "Kimi K2 0905", - "family": "kimi", + "openai-gpt-oss-120b": { + "id": "openai-gpt-oss-120b", + "name": "OpenAI GPT OSS 120B", + "family": "gpt-oss", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-07", + "release_date": "2025-11-06", + "last_updated": "2026-05-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.55, "output": 2.19 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.07, + "output": 0.3 + } }, - "gpt-4.1-nano": { - "id": "gpt-4.1-nano", - "name": "GPT-4.1 nano", - "family": "gpt-nano", + "claude-opus-4-5": { + "id": "claude-opus-4-5", + "name": "Claude Opus 4.5", + "family": "claude-opus", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-12-06", + "last_updated": "2026-04-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.03 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 198000, + "output": 32768 + }, + "cost": { + "input": 6, + "output": 30, + "cache_read": 0.6, + "cache_write": 7.5 + } }, - "claude-sonnet-4-5": { - "id": "claude-sonnet-4-5", - "name": "Claude Sonnet 4.5", - "family": "claude-sonnet", + "qwen3-5-9b": { + "id": "qwen3-5-9b", + "name": "Qwen 3.5 9B", + "family": "qwen", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3.3, "output": 16.5, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "release_date": "2026-03-05", + "last_updated": "2026-04-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 32768 + }, + "cost": { + "input": 0.1, + "output": 0.15 + } }, - "deepseek-v3.2": { - "id": "deepseek-v3.2", - "name": "DeepSeek-V3.2", - "family": "deepseek", + "deepseek-v4-flash": { + "id": "deepseek-v4-flash", + "name": "DeepSeek V4 Flash", + "family": "deepseek-flash", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-24", + "last_updated": "2026-04-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 0.45 }, - "limit": { "context": 131000, "output": 64000 } - }, - "gpt-5-codex": { - "id": "gpt-5-codex", - "name": "GPT-5-Codex", - "family": "gpt-codex", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.13 }, - "limit": { "context": 400000, "output": 128000 } - }, - "o4-mini": { - "id": "o4-mini", - "name": "o4-mini", - "family": "o-mini", - "attachment": false, - "reasoning": true, - "tool_call": false, - "temperature": false, - "knowledge": "2024-09", - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.5, "output": 6, "cache_read": 0.75 }, - "limit": { "context": 200000, "output": 65536 } + "limit": { + "context": 1000000, + "output": 32768 + }, + "cost": { + "input": 0.17, + "output": 0.35, + "cache_read": 0.028 + } }, - "claude-haiku-4-5": { - "id": "claude-haiku-4-5", - "name": "Claude Haiku 4.5", - "family": "claude-haiku", + "openai-gpt-54-pro": { + "id": "openai-gpt-54-pro", + "name": "GPT-5.4 Pro", + "family": "gpt-pro", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2026-03-05", + "last_updated": "2026-03-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 5.5, "cache_read": 0.11, "cache_write": 1.25 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 37.5, + "output": 225, + "tiers": [ + { + "input": 75, + "output": 337.5, + "tier": { + "type": "context", + "size": 272000 + } + } + ], + "context_over_200k": { + "input": 75, + "output": 337.5 + } + } }, - "gpt-5.1-codex": { - "id": "gpt-5.1-codex", - "name": "GPT-5.1 Codex", - "family": "gpt-codex", + "openai-gpt-54-mini": { + "id": "openai-gpt-54-mini", + "name": "GPT-5.4 Mini", + "family": "gpt-mini", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-11", - "release_date": "2025-11-15", - "last_updated": "2025-11-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-03-27", + "last_updated": "2026-03-31", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.13 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.9375, + "output": 5.625, + "cache_read": 0.09375 + } }, - "minimax-m2.5": { - "id": "minimax-m2.5", - "name": "MiniMax-M2.5", + "minimax-m25": { + "id": "minimax-m25", + "name": "MiniMax M2.5", "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.29, "output": 1.15 }, - "limit": { "context": 204800, "output": 131072 } - } - } - }, - "minimax-cn-coding-plan": { - "id": "minimax-cn-coding-plan", - "env": ["MINIMAX_API_KEY"], - "npm": "@ai-sdk/anthropic", - "api": "https://api.minimaxi.com/anthropic/v1", - "name": "MiniMax Coding Plan (minimaxi.com)", - "doc": "https://platform.minimaxi.com/docs/coding-plan/intro", - "models": { - "MiniMax-M2.7": { - "id": "MiniMax-M2.7", - "name": "MiniMax-M2.7", - "family": "minimax", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 204800, "output": 131072 } + "last_updated": "2026-04-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 198000, + "output": 32768 + }, + "cost": { + "input": 0.34, + "output": 1.19, + "cache_read": 0.04 + } }, - "MiniMax-M2.1": { - "id": "MiniMax-M2.1", - "name": "MiniMax-M2.1", - "family": "minimax", + "zai-org-glm-5-1": { + "id": "zai-org-glm-5-1", + "name": "GLM 5.1", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-07", + "last_updated": "2026-04-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 200000, + "output": 24000 + }, + "cost": { + "input": 1.75, + "output": 5.5, + "cache_read": 0.325 + } }, - "MiniMax-M2.5": { - "id": "MiniMax-M2.5", - "name": "MiniMax-M2.5", - "family": "minimax", - "attachment": false, + "openai-gpt-55": { + "id": "openai-gpt-55", + "name": "GPT-5.5", + "family": "gpt", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 204800, "output": 131072 } + "release_date": "2026-04-23", + "last_updated": "2026-04-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 131072 + }, + "cost": { + "input": 6.25, + "output": 37.5, + "cache_read": 0.625, + "tiers": [ + { + "input": 12.5, + "output": 56.25, + "cache_read": 1.25, + "tier": { + "type": "context", + "size": 272000 + } + } + ], + "context_over_200k": { + "input": 12.5, + "output": 56.25, + "cache_read": 1.25 + } + } }, - "MiniMax-M2": { - "id": "MiniMax-M2", - "name": "MiniMax-M2", - "family": "minimax", - "attachment": false, + "qwen3-6-27b": { + "id": "qwen3-6-27b", + "name": "Qwen 3.6 27B", + "family": "qwen", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-10-27", - "last_updated": "2025-10-27", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 196608, "output": 128000 } + "release_date": "2026-04-24", + "last_updated": "2026-04-29", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 65536 + }, + "cost": { + "input": 0.325, + "output": 3.25 + } }, - "MiniMax-M2.5-highspeed": { - "id": "MiniMax-M2.5-highspeed", - "name": "MiniMax-M2.5-highspeed", - "family": "minimax", - "attachment": false, + "claude-opus-4-6": { + "id": "claude-opus-4-6", + "name": "Claude Opus 4.6", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-02-13", - "last_updated": "2026-02-13", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 204800, "output": 131072 } + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-03-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 6, + "output": 30, + "cache_read": 0.6, + "cache_write": 7.5 + } }, - "MiniMax-M2.7-highspeed": { - "id": "MiniMax-M2.7-highspeed", - "name": "MiniMax-M2.7-highspeed", - "family": "minimax", + "deepseek-v4-pro": { + "id": "deepseek-v4-pro", + "name": "DeepSeek V4 Pro", + "family": "deepseek", "attachment": false, "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 204800, "output": 131072 } - } - } - }, - "ovhcloud": { - "id": "ovhcloud", - "env": ["OVHCLOUD_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://oai.endpoints.kepler.ai.cloud.ovh.net/v1", - "name": "OVHcloud AI Endpoints", - "doc": "https://www.ovhcloud.com/en/public-cloud/ai-endpoints/catalog//", - "models": { - "qwen3-coder-30b-a3b-instruct": { - "id": "qwen3-coder-30b-a3b-instruct", - "name": "Qwen3-Coder-30B-A3B-Instruct", - "attachment": false, - "reasoning": false, - "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, "temperature": true, - "release_date": "2025-10-28", - "last_updated": "2025-10-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-24", + "last_updated": "2026-04-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.07, "output": 0.26 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 1000000, + "output": 32768 + }, + "cost": { + "input": 1.73, + "output": 3.796, + "cache_read": 0.33 + } }, - "mistral-nemo-instruct-2407": { - "id": "mistral-nemo-instruct-2407", - "name": "Mistral-Nemo-Instruct-2407", + "deepseek-v3.2": { + "id": "deepseek-v3.2", + "name": "DeepSeek V3.2", + "family": "deepseek", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2024-11-20", - "last_updated": "2024-11-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-10", + "release_date": "2025-12-04", + "last_updated": "2026-03-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.14, "output": 0.14 }, - "limit": { "context": 65536, "output": 65536 } + "limit": { + "context": 160000, + "output": 32768 + }, + "cost": { + "input": 0.33, + "output": 0.48, + "cache_read": 0.16 + } }, - "deepseek-r1-distill-llama-70b": { - "id": "deepseek-r1-distill-llama-70b", - "name": "DeepSeek-R1-Distill-Llama-70B", - "attachment": false, + "qwen-3-6-plus": { + "id": "qwen-3-6-plus", + "name": "Qwen 3.6 Plus Uncensored", + "family": "qwen", + "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-01-30", - "last_updated": "2025-01-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.74, "output": 0.74 }, - "limit": { "context": 131072, "output": 131072 } + "release_date": "2026-04-06", + "last_updated": "2026-04-12", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.625, + "output": 3.75, + "cache_read": 0.0625, + "cache_write": 0.78, + "tiers": [ + { + "input": 2.5, + "output": 7.5, + "cache_read": 0.0625, + "cache_write": 0.78, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 2.5, + "output": 7.5, + "cache_read": 0.0625, + "cache_write": 0.78 + } + } }, - "llama-3.1-8b-instruct": { - "id": "llama-3.1-8b-instruct", - "name": "Llama-3.1-8B-Instruct", + "aion-labs-aion-2-0": { + "id": "aion-labs-aion-2-0", + "name": "Aion 2.0", + "family": "o", "attachment": false, - "reasoning": false, + "reasoning": true, + "tool_call": false, + "temperature": true, + "release_date": "2026-03-24", + "last_updated": "2026-04-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 1, + "output": 2, + "cache_read": 0.25 + } + }, + "claude-sonnet-4-5": { + "id": "claude-sonnet-4-5", + "name": "Claude Sonnet 4.5", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-06-11", - "last_updated": "2025-06-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.11, "output": 0.11 }, - "limit": { "context": 131072, "output": 131072 } + "release_date": "2025-01-15", + "last_updated": "2026-04-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 198000, + "output": 64000 + }, + "cost": { + "input": 3.75, + "output": 18.75, + "cache_read": 0.375, + "cache_write": 4.69 + } }, - "gpt-oss-120b": { - "id": "gpt-oss-120b", - "name": "gpt-oss-120b", - "attachment": false, - "reasoning": true, + "openai-gpt-4o-2024-11-20": { + "id": "openai-gpt-4o-2024-11-20", + "name": "GPT-4o", + "family": "gpt", + "attachment": true, + "reasoning": false, "tool_call": true, "structured_output": true, - "release_date": "2025-08-28", - "last_updated": "2025-08-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.09, "output": 0.47 }, - "limit": { "context": 131072, "output": 131072 } + "temperature": true, + "release_date": "2026-02-28", + "last_updated": "2026-03-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 3.125, + "output": 12.5 + } }, - "qwen2.5-coder-32b-instruct": { - "id": "qwen2.5-coder-32b-instruct", - "name": "Qwen2.5-Coder-32B-Instruct", + "llama-3.3-70b": { + "id": "llama-3.3-70b", + "name": "Llama 3.3 70B", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": true, + "tool_call": true, "temperature": true, - "release_date": "2025-03-24", - "last_updated": "2025-03-24", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2023-12", + "release_date": "2025-04-06", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.96, "output": 0.96 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.7, + "output": 2.8 + } }, - "qwen2.5-vl-72b-instruct": { - "id": "qwen2.5-vl-72b-instruct", - "name": "Qwen2.5-VL-72B-Instruct", + "kimi-k2-5": { + "id": "kimi-k2-5", + "name": "Kimi K2.5", + "family": "kimi", "attachment": true, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, "temperature": true, - "release_date": "2025-03-31", - "last_updated": "2025-03-31", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1.01, "output": 1.01 }, - "limit": { "context": 32768, "output": 32768 } + "knowledge": "2024-04", + "release_date": "2026-01-27", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 65536 + }, + "cost": { + "input": 0.56, + "output": 3.5, + "cache_read": 0.22 + } }, - "mistral-7b-instruct-v0.3": { - "id": "mistral-7b-instruct-v0.3", - "name": "Mistral-7B-Instruct-v0.3", + "llama-3.2-3b": { + "id": "llama-3.2-3b", + "name": "Llama 3.2 3B", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-04-01", - "last_updated": "2025-04-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2023-12", + "release_date": "2024-10-03", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.11, "output": 0.11 }, - "limit": { "context": 65536, "output": 65536 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "gpt-oss-20b": { - "id": "gpt-oss-20b", - "name": "gpt-oss-20b", + "arcee-trinity-large-thinking": { + "id": "arcee-trinity-large-thinking", + "name": "Trinity Large Thinking", + "family": "trinity", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, - "release_date": "2025-08-28", - "last_updated": "2025-08-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "release_date": "2026-04-02", + "last_updated": "2026-04-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.05, "output": 0.18 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 256000, + "output": 65536 + }, + "cost": { + "input": 0.3125, + "output": 1.125, + "cache_read": 0.075 + } }, - "qwen3-32b": { - "id": "qwen3-32b", - "name": "Qwen3-32B", + "hermes-3-llama-3.1-405b": { + "id": "hermes-3-llama-3.1-405b", + "name": "Hermes 3 Llama 3.1 405b", + "family": "hermes", "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-09-25", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.1, + "output": 3 + } + }, + "gemini-3-1-pro-preview": { + "id": "gemini-3-1-pro-preview", + "name": "Gemini 3.1 Pro Preview", + "family": "gemini-pro", + "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-07-16", - "last_updated": "2025-07-16", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.09, "output": 0.25 }, - "limit": { "context": 32768, "output": 32768 } + "release_date": "2026-02-19", + "last_updated": "2026-03-12", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 32768 + }, + "cost": { + "input": 2.5, + "output": 15, + "cache_read": 0.5, + "cache_write": 0.5, + "tiers": [ + { + "input": 5, + "output": 22.5, + "cache_read": 0.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 5, + "output": 22.5, + "cache_read": 0.5 + } + } }, - "mistral-small-3.2-24b-instruct-2506": { - "id": "mistral-small-3.2-24b-instruct-2506", - "name": "Mistral-Small-3.2-24B-Instruct-2506", + "kimi-k2-6": { + "id": "kimi-k2-6", + "name": "Kimi K2.6", + "family": "kimi", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, "temperature": true, - "release_date": "2025-07-16", - "last_updated": "2025-07-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-04-20", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.31 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 256000, + "output": 65536 + }, + "cost": { + "input": 0.85, + "output": 4.655, + "cache_read": 0.22 + } + }, + "claude-opus-4-6-fast": { + "id": "claude-opus-4-6-fast", + "name": "Claude Opus 4.6 Fast", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-05-31", + "release_date": "2026-04-08", + "last_updated": "2026-04-08", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 36, + "output": 180, + "cache_read": 3.6, + "cache_write": 45 + } }, - "mixtral-8x7b-instruct-v0.1": { - "id": "mixtral-8x7b-instruct-v0.1", - "name": "Mixtral-8x7B-Instruct-v0.1", + "z-ai-glm-5-turbo": { + "id": "z-ai-glm-5-turbo", + "name": "GLM 5 Turbo", + "family": "glm", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-04-01", - "last_updated": "2025-04-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-15", + "last_updated": "2026-04-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.7, "output": 0.7 }, - "limit": { "context": 32768, "output": 32768 } + "limit": { + "context": 200000, + "output": 32768 + }, + "cost": { + "input": 1.2, + "output": 4, + "cache_read": 0.24 + } }, - "meta-llama-3_3-70b-instruct": { - "id": "meta-llama-3_3-70b-instruct", - "name": "Meta-Llama-3_3-70B-Instruct", - "attachment": false, - "reasoning": false, + "google-gemma-4-31b-it": { + "id": "google-gemma-4-31b-it", + "name": "Google Gemma 4 31B Instruct", + "family": "gemma", + "attachment": true, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-04-01", - "last_updated": "2025-04-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-03", + "last_updated": "2026-04-12", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.74, "output": 0.74 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 256000, + "output": 8192 + }, + "cost": { + "input": 0.175, + "output": 0.5 + } } } }, - "minimax-cn": { - "id": "minimax-cn", - "env": ["MINIMAX_API_KEY"], - "npm": "@ai-sdk/anthropic", - "api": "https://api.minimaxi.com/anthropic/v1", - "name": "MiniMax (minimaxi.com)", - "doc": "https://platform.minimaxi.com/docs/guides/quickstart", + "aihubmix": { + "id": "aihubmix", + "env": ["AIHUBMIX_API_KEY"], + "npm": "@aihubmix/ai-sdk-provider", + "name": "AIHubMix", + "doc": "https://docs.aihubmix.com", "models": { - "MiniMax-M2.7": { - "id": "MiniMax-M2.7", + "minimax-m2.7": { + "id": "minimax-m2.7", "name": "MiniMax-M2.7", "family": "minimax", "attachment": false, @@ -48915,176 +72743,317 @@ "temperature": true, "release_date": "2026-03-18", "last_updated": "2026-03-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.06, "cache_write": 0.375 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 0.2958, + "output": 1.1832, + "cache_read": 0.05916 + } }, - "MiniMax-M2.1": { - "id": "MiniMax-M2.1", - "name": "MiniMax-M2.1", - "family": "minimax", + "coding-glm-5.1-free": { + "id": "coding-glm-5.1-free", + "name": "Coding GLM 5.1 (free)", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 204800, "output": 131072 } + "release_date": "2026-04-11", + "last_updated": "2026-04-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 204800, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "MiniMax-M2.5": { - "id": "MiniMax-M2.5", - "name": "MiniMax-M2.5", - "family": "minimax", - "attachment": false, + "gemini-3.1-pro-preview-customtools": { + "id": "gemini-3.1-pro-preview-customtools", + "name": "Gemini 3.1 Pro Preview Custom Tools", + "family": "gemini-pro", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.03, "cache_write": 0.375 }, - "limit": { "context": 204800, "output": 131072 } + "knowledge": "2025-01", + "release_date": "2026-02-19", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2, + "tiers": [ + { + "input": 4, + "output": 18, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 4, + "output": 18, + "cache_read": 0.4 + } + } }, - "MiniMax-M2": { - "id": "MiniMax-M2", - "name": "MiniMax-M2", - "family": "minimax", + "kimi-k2.5": { + "id": "kimi-k2.5", + "name": "Kimi K2.5", + "family": "kimi-k2.5", "attachment": false, "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2025-10-27", - "last_updated": "2025-10-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-01", + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 196608, "output": 128000 } + "limit": { + "context": 256000, + "output": 0 + }, + "cost": { + "input": 0.6, + "output": 3, + "cache_read": 0.105 + } }, - "MiniMax-M2.5-highspeed": { - "id": "MiniMax-M2.5-highspeed", - "name": "MiniMax-M2.5-highspeed", - "family": "minimax", - "attachment": false, + "glm-5v-turbo": { + "id": "glm-5v-turbo", + "name": "GLM 5 Vision Turbo", + "family": "glm", + "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2026-02-13", - "last_updated": "2026-02-13", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.4, "cache_read": 0.06, "cache_write": 0.375 }, - "limit": { "context": 204800, "output": 131072 } + "release_date": "2026-05-09", + "last_updated": "2026-05-09", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 0.7042, + "output": 3.09848, + "cache_read": 0.169008 + } }, - "MiniMax-M2.7-highspeed": { - "id": "MiniMax-M2.7-highspeed", - "name": "MiniMax-M2.7-highspeed", - "family": "minimax", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.4, "cache_read": 0.06, "cache_write": 0.375 }, - "limit": { "context": 204800, "output": 131072 } - } - } - }, - "qihang-ai": { - "id": "qihang-ai", - "env": ["QIHANG_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.qhaigc.net/v1", - "name": "QiHang", - "doc": "https://www.qhaigc.net/docs", - "models": { - "gpt-5.2-codex": { - "id": "gpt-5.2-codex", - "name": "GPT-5.2 Codex", - "family": "gpt-codex", + "grok-4.3": { + "id": "grok-4.3", + "name": "Grok 4.3", + "family": "grok", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "release_date": "2026-05-01", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.14, "output": 1.14 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 1000000, + "output": 1000000 + }, + "cost": { + "input": 1.25, + "output": 2.5, + "cache_read": 0.2, + "tiers": [ + { + "input": 2.5, + "output": 5, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 2.5, + "output": 5, + "cache_read": 0.4 + } + } }, - "claude-opus-4-5-20251101": { - "id": "claude-opus-4-5-20251101", - "name": "Claude Opus 4.5", - "family": "claude-opus", - "attachment": true, + "coding-minimax-m2.7-highspeed": { + "id": "coding-minimax-m2.7-highspeed", + "name": "Coding MiniMax M2.7 Highspeed", + "family": "minimax", + "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-11-01", - "last_updated": "2025-11-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.71, "output": 3.57 }, - "limit": { "context": 200000, "output": 32000 } + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 13100 + }, + "cost": { + "input": 0.2, + "output": 0.2 + } }, - "gemini-3-pro-preview": { - "id": "gemini-3-pro-preview", - "name": "Gemini 3 Pro Preview", - "family": "gemini-pro", + "claude-sonnet-4-6": { + "id": "claude-sonnet-4-6", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-11", - "release_date": "2025-11-19", - "last_updated": "2025-11-19", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-02-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.57, "output": 3.43 }, - "limit": { "context": 1000000, "output": 65000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75, + "tiers": [ + { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5 + } + } }, - "gpt-5-mini": { - "id": "gpt-5-mini", - "name": "GPT-5-Mini", - "family": "gpt-mini", + "gemini-3.1-pro-preview": { + "id": "gemini-3.1-pro-preview", + "name": "Gemini 3.1 Pro Preview", + "family": "gemini-pro", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-09-30", - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2026-02-19", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.04, "output": 0.29 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2 + } }, - "claude-sonnet-4-5-20250929": { - "id": "claude-sonnet-4-5-20250929", - "name": "Claude Sonnet 4.5", - "family": "claude-sonnet", - "attachment": true, + "coding-glm-5.1": { + "id": "coding-glm-5.1", + "name": "Coding-GLM-5.1", + "family": "glm", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2026-04-11", + "last_updated": "2026-04-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.43, "output": 2.14 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 0.06, + "output": 0.22 + } }, "gemini-3-flash-preview": { "id": "gemini-3-flash-preview", @@ -49098,2722 +73067,3836 @@ "knowledge": "2025-01", "release_date": "2025-12-17", "last_updated": "2025-12-17", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.07, "output": 0.43, "context_over_200k": { "input": 0.07, "output": 0.43 } }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.05 + } }, - "gemini-2.5-flash": { - "id": "gemini-2.5-flash", - "name": "Gemini 2.5 Flash", - "family": "gemini-flash", + "gpt-5.5": { + "id": "gpt-5.5", + "name": "GPT-5.5", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-12-01", + "release_date": "2026-04-23", + "last_updated": "2026-04-23", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.09, "output": 0.71, "context_over_200k": { "input": 0.09, "output": 0.71 } }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 1050000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 30, + "cache_read": 0.5 + } }, - "gpt-5.2": { - "id": "gpt-5.2", - "name": "GPT-5.2", - "family": "gpt", + "claude-opus-4-7": { + "id": "claude-opus-4-7", + "name": "Claude Opus 4.7", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, + "temperature": false, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } + }, + "deepseek-v4-flash-think": { + "id": "deepseek-v4-flash-think", + "name": "DeepSeek V4 Flash Think", + "family": "deepseek", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, "temperature": true, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 384000 + }, + "cost": { + "input": 0.154, + "output": 0.308, + "cache_read": 0.0308 + } + }, + "gpt-5.3-codex": { + "id": "gpt-5.3-codex", + "name": "GPT-5.3 Codex", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "claude-haiku-4-5-20251001": { - "id": "claude-haiku-4-5-20251001", - "name": "Claude Haiku 4.5", - "family": "claude-haiku", + "gemini-2.5-pro": { + "id": "gemini-2.5-pro", + "name": "Gemini 2.5 Pro", + "family": "gemini-pro", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2025-10-01", - "last_updated": "2025-10-01", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.14, "output": 0.71 }, - "limit": { "context": 200000, "output": 64000 } - } - } - }, - "moonshotai": { - "id": "moonshotai", - "env": ["MOONSHOT_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.moonshot.ai/v1", - "name": "Moonshot AI", - "doc": "https://platform.moonshot.ai/docs/api/chat", - "models": { - "kimi-k2-thinking": { - "id": "kimi-k2-thinking", - "name": "Kimi K2 Thinking", - "family": "kimi-thinking", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-11-06", - "last_updated": "2025-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.5, "cache_read": 0.15 }, - "limit": { "context": 262144, "output": 262144 } + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "kimi-k2.5": { - "id": "kimi-k2.5", - "name": "Kimi K2.5", - "family": "kimi", - "attachment": false, + "gpt-5.2": { + "id": "gpt-5.2", + "name": "GPT-5.2", + "family": "gpt", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, "temperature": false, - "knowledge": "2025-01", - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 3, "cache_read": 0.1 }, - "limit": { "context": 262144, "output": 262144 } + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "kimi-k2-thinking-turbo": { - "id": "kimi-k2-thinking-turbo", - "name": "Kimi K2 Thinking Turbo", - "family": "kimi-thinking", - "attachment": false, + "qwen3.6-plus": { + "id": "qwen3.6-plus", + "name": "Qwen3.6 Plus", + "family": "qwen", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "structured_output": true, "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-11-06", - "last_updated": "2025-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1.15, "output": 8, "cache_read": 0.15 }, - "limit": { "context": 262144, "output": 262144 } + "knowledge": "2025-04", + "release_date": "2026-05-09", + "last_updated": "2026-05-09", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 991000, + "output": 64000 + }, + "cost": { + "input": 0.282, + "output": 1.692, + "cache_read": 0.0282, + "cache_write": 0.3525 + } }, - "kimi-k2-0905-preview": { - "id": "kimi-k2-0905-preview", - "name": "Kimi K2 0905", - "family": "kimi", - "attachment": false, + "gpt-5.4-mini": { + "id": "gpt-5.4-mini", + "name": "GPT-5.4-Mini", + "family": "gpt-mini", + "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.5, "cache_read": 0.15 }, - "limit": { "context": 262144, "output": 262144 } + "structured_output": true, + "temperature": false, + "release_date": "2026-03-11", + "last_updated": "2026-03-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.75, + "output": 4.5, + "cache_read": 0.075 + } }, - "kimi-k2-turbo-preview": { - "id": "kimi-k2-turbo-preview", - "name": "Kimi K2 Turbo", - "family": "kimi", + "glm-5.1": { + "id": "glm-5.1", + "name": "GLM-5.1", + "family": "glm", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2.4, "output": 10, "cache_read": 0.6 }, - "limit": { "context": 262144, "output": 262144 } + "release_date": "2026-03-27", + "last_updated": "2026-03-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 0.845, + "output": 3.38, + "cache_read": 0.183112 + } }, - "kimi-k2-0711-preview": { - "id": "kimi-k2-0711-preview", - "name": "Kimi K2 0711", - "family": "kimi", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-07-14", - "last_updated": "2025-07-14", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.5, "cache_read": 0.15 }, - "limit": { "context": 131072, "output": 16384 } - } - } - }, - "alibaba": { - "id": "alibaba", - "env": ["DASHSCOPE_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://dashscope-intl.aliyuncs.com/compatible-mode/v1", - "name": "Alibaba", - "doc": "https://www.alibabacloud.com/help/en/model-studio/models", - "models": { - "qwen2-5-72b-instruct": { - "id": "qwen2-5-72b-instruct", - "name": "Qwen2.5 72B Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, + "o4-mini": { + "id": "o4-mini", + "name": "o4-mini", + "family": "o-mini", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-09", - "last_updated": "2024-09", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1.4, "output": 5.6 }, - "limit": { "context": 131072, "output": 8192 } + "structured_output": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.275 + } }, - "qwen3-coder-30b-a3b-instruct": { - "id": "qwen3-coder-30b-a3b-instruct", - "name": "Qwen3-Coder 30B-A3B Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, + "gpt-5.2-codex": { + "id": "gpt-5.2-codex", + "name": "GPT-5.2-Codex", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.45, "output": 2.25 }, - "limit": { "context": 262144, "output": 65536 } + "structured_output": true, + "knowledge": "2025-08-31", + "release_date": "2026-01-14", + "last_updated": "2026-01-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "qwen3-8b": { - "id": "qwen3-8b", - "name": "Qwen3 8B", - "family": "qwen", - "attachment": false, + "gemini-2.5-flash": { + "id": "gemini-2.5-flash", + "name": "Gemini 2.5 Flash", + "family": "gemini-flash", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.18, "output": 0.7, "reasoning": 2.1 }, - "limit": { "context": 131072, "output": 8192 } - }, - "qwen-mt-plus": { - "id": "qwen-mt-plus", - "name": "Qwen-MT Plus", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-01", - "last_updated": "2025-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.46, "output": 7.37 }, - "limit": { "context": 16384, "output": 8192 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.499, + "cache_read": 0.03 + } }, - "qwen3.5-plus": { - "id": "qwen3.5-plus", - "name": "Qwen3.5 Plus", - "family": "qwen", - "attachment": false, + "gpt-5.1-codex-mini": { + "id": "gpt-5.1-codex-mini", + "name": "GPT-5.1 Codex mini", + "family": "gpt-codex", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-02-16", - "last_updated": "2026-02-16", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 2.4, "reasoning": 2.4 }, - "limit": { "context": 1000000, "output": 65536 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.025 + } }, - "qwen2-5-omni-7b": { - "id": "qwen2-5-omni-7b", - "name": "Qwen2.5-Omni 7B", - "family": "qwen", - "attachment": false, - "reasoning": false, + "gemini-3.1-flash-lite": { + "id": "gemini-3.1-flash-lite", + "name": "Gemini 3.1 Flash Lite", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-12", - "last_updated": "2024-12", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text", "audio"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.4, "input_audio": 6.76 }, - "limit": { "context": 32768, "output": 2048 } + "knowledge": "2025-01", + "release_date": "2026-03-03", + "last_updated": "2026-03-03", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.25, + "output": 1.5, + "cache_read": 0.25 + } }, - "qwen-turbo": { - "id": "qwen-turbo", - "name": "Qwen Turbo", - "family": "qwen", - "attachment": false, + "gpt-5.1": { + "id": "gpt-5.1", + "name": "GPT-5.1", + "family": "gpt", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-11-01", - "last_updated": "2025-04-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-11", + "release_date": "2025-11-15", + "last_updated": "2025-11-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.05, "output": 0.2, "reasoning": 0.5 }, - "limit": { "context": 1000000, "output": 16384 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "qwen-vl-max": { - "id": "qwen-vl-max", - "name": "Qwen-VL Max", - "family": "qwen", - "attachment": false, - "reasoning": false, + "claude-opus-4-6-think": { + "id": "claude-opus-4-6-think", + "name": "Claude Opus 4.6", + "family": "claude-opus", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-04-08", - "last_updated": "2025-08-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.8, "output": 3.2 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "qwen-omni-turbo-realtime": { - "id": "qwen-omni-turbo-realtime", - "name": "Qwen-Omni Turbo Realtime", - "family": "qwen", + "coding-minimax-m2.7-free": { + "id": "coding-minimax-m2.7-free", + "name": "Coding-MiniMax-M2.7-Free", + "family": "minimax", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-05-08", - "last_updated": "2025-05-08", - "modalities": { "input": ["text", "image", "audio"], "output": ["text", "audio"] }, - "open_weights": false, - "cost": { "input": 0.27, "output": 1.07, "input_audio": 4.44, "output_audio": 8.89 }, - "limit": { "context": 32768, "output": 2048 } + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 13100 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "qwen-vl-plus": { - "id": "qwen-vl-plus", - "name": "Qwen-VL Plus", - "family": "qwen", + "deepseek-v4-flash": { + "id": "deepseek-v4-flash", + "name": "DeepSeek V4 Flash", + "family": "deepseek-flash", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-01-25", - "last_updated": "2025-08-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.21, "output": 0.63 }, - "limit": { "context": 131072, "output": 8192 } + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 384000 + }, + "cost": { + "input": 0.154, + "output": 0.308, + "cache_read": 0.0308 + } }, - "qwen-max": { - "id": "qwen-max", - "name": "Qwen Max", - "family": "qwen", - "attachment": false, - "reasoning": false, + "kimi-k2.6": { + "id": "kimi-k2.6", + "name": "Kimi K2.6", + "family": "kimi-k2.6", + "attachment": true, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-04-03", - "last_updated": "2025-01-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.6, "output": 6.4 }, - "limit": { "context": 32768, "output": 8192 } + "knowledge": "2025-01", + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.95, + "output": 3.9995, + "cache_read": 0.160835 + } }, - "qvq-max": { - "id": "qvq-max", - "name": "QVQ Max", - "family": "qvq", - "attachment": false, + "gpt-5.4": { + "id": "gpt-5.4", + "name": "GPT-5.4", + "family": "gpt", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-03-25", - "last_updated": "2025-03-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "release_date": "2026-03-11", + "last_updated": "2026-03-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.2, "output": 4.8 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 2.5, + "output": 15, + "cache_read": 0.25 + } }, - "qwen-plus-character-ja": { - "id": "qwen-plus-character-ja", - "name": "Qwen Plus Character (Japanese)", - "family": "qwen", - "attachment": false, - "reasoning": false, + "claude-opus-4-6": { + "id": "claude-opus-4-6", + "name": "Claude Opus 4.6", + "family": "claude-opus", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-01", - "last_updated": "2024-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 1.4 }, - "limit": { "context": 8192, "output": 512 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "qwq-plus": { - "id": "qwq-plus", - "name": "QwQ Plus", - "family": "qwen", + "deepseek-v4-pro": { + "id": "deepseek-v4-pro", + "name": "DeepSeek V4 Pro", + "family": "deepseek-thinking", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-03-05", - "last_updated": "2025-03-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.8, "output": 2.4 }, - "limit": { "context": 131072, "output": 8192 } + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 384000 + }, + "cost": { + "input": 0.478, + "output": 0.956, + "cache_read": 0.004302 + } }, - "qwen3-omni-flash": { - "id": "qwen3-omni-flash", - "name": "Qwen3-Omni Flash", - "family": "qwen", - "attachment": false, + "claude-opus-4-7-think": { + "id": "claude-opus-4-7-think", + "name": "Claude Opus 4.7 Thinking", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text", "audio"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.43, "output": 1.66, "input_audio": 3.81, "output_audio": 15.11 }, - "limit": { "context": 65536, "output": 16384 } + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "qwen3-14b": { - "id": "qwen3-14b", - "name": "Qwen3 14B", - "family": "qwen", + "coding-minimax-m2.7": { + "id": "coding-minimax-m2.7", + "name": "Coding MiniMax M2.7", + "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.35, "output": 1.4, "reasoning": 4.2 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 204800, + "output": 13100 + }, + "cost": { + "input": 0.2, + "output": 0.2 + } }, - "qwen-plus": { - "id": "qwen-plus", - "name": "Qwen Plus", + "qwen3.6-max-preview": { + "id": "qwen3.6-max-preview", + "name": "Qwen3.6 Max Preview", "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-01-25", - "last_updated": "2025-09-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-05-09", + "last_updated": "2026-05-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 1.2, "reasoning": 4 }, - "limit": { "context": 1000000, "output": 32768 } + "limit": { + "context": 240000, + "output": 64000 + }, + "cost": { + "input": 1.268, + "output": 7.608, + "cache_read": 0.1268, + "cache_write": 1.585 + } }, - "qwen2-5-7b-instruct": { - "id": "qwen2-5-7b-instruct", - "name": "Qwen2.5 7B Instruct", - "family": "qwen", - "attachment": false, + "gpt-4.1": { + "id": "gpt-4.1", + "name": "GPT-4.1", + "family": "gpt", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, "knowledge": "2024-04", - "release_date": "2024-09", - "last_updated": "2024-09", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.175, "output": 0.7 }, - "limit": { "context": 131072, "output": 8192 } - }, - "qwen2-5-32b-instruct": { - "id": "qwen2-5-32b-instruct", - "name": "Qwen2.5 32B Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-09", - "last_updated": "2024-09", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.7, "output": 2.8 }, - "limit": { "context": 131072, "output": 8192 } + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } }, - "qwen3-omni-flash-realtime": { - "id": "qwen3-omni-flash-realtime", - "name": "Qwen3-Omni Flash Realtime", - "family": "qwen", - "attachment": false, + "gpt-4.1-mini": { + "id": "gpt-4.1-mini", + "name": "GPT-4.1 mini", + "family": "gpt-mini", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, "knowledge": "2024-04", - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text", "audio"] }, + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.52, "output": 1.99, "input_audio": 4.57, "output_audio": 18.13 }, - "limit": { "context": 65536, "output": 16384 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.4, + "output": 1.6, + "cache_read": 0.1 + } }, - "qwen3-coder-480b-a35b-instruct": { - "id": "qwen3-coder-480b-a35b-instruct", - "name": "Qwen3-Coder 480B-A35B Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, + "gpt-5.1-codex": { + "id": "gpt-5.1-codex", + "name": "GPT-5.1 Codex", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1.5, "output": 7.5 }, - "limit": { "context": 262144, "output": 65536 } + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "qwen3-next-80b-a3b-thinking": { - "id": "qwen3-next-80b-a3b-thinking", - "name": "Qwen3-Next 80B-A3B (Thinking)", - "family": "qwen", - "attachment": false, + "claude-sonnet-4-6-think": { + "id": "claude-sonnet-4-6-think", + "name": "Claude Sonnet 4.6 Think", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09", - "last_updated": "2025-09", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.5, "output": 6 }, - "limit": { "context": 131072, "output": 32768 } + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-02-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75, + "tiers": [ + { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5 + } + } }, - "qwen3-vl-30b-a3b": { - "id": "qwen3-vl-30b-a3b", - "name": "Qwen3-VL 30B-A3B", + "qwen3.6-flash": { + "id": "qwen3.6-flash", + "name": "Qwen3.6 Flash", "family": "qwen", - "attachment": false, + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.8, "reasoning": 2.4 }, - "limit": { "context": 131072, "output": 32768 } - }, - "qwen3-next-80b-a3b-instruct": { - "id": "qwen3-next-80b-a3b-instruct", - "name": "Qwen3-Next 80B-A3B Instruct", - "family": "qwen", + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 991000, + "output": 64000 + }, + "cost": { + "input": 0.169, + "output": 1.014, + "cache_read": 0.0169, + "cache_write": 0.21125 + } + } + } + }, + "cerebras": { + "id": "cerebras", + "env": ["CEREBRAS_API_KEY"], + "npm": "@ai-sdk/cerebras", + "name": "Cerebras", + "doc": "https://inference-docs.cerebras.ai/models/overview", + "models": { + "llama3.1-8b": { + "id": "llama3.1-8b", + "name": "Llama 3.1 8B", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09", - "last_updated": "2025-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2023-12", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.5, "output": 2 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 32000, + "output": 8000 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } }, - "qwen-mt-turbo": { - "id": "qwen-mt-turbo", - "name": "Qwen-MT Turbo", + "qwen-3-235b-a22b-instruct-2507": { + "id": "qwen-3-235b-a22b-instruct-2507", + "name": "Qwen 3 235B Instruct", "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-01", - "last_updated": "2025-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.16, "output": 0.49 }, - "limit": { "context": 16384, "output": 8192 } - }, - "qwen3-vl-plus": { - "id": "qwen3-vl-plus", - "name": "Qwen3-VL Plus", - "family": "qwen", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-23", - "last_updated": "2025-09-23", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 1.6, "reasoning": 4.8 }, - "limit": { "context": 262144, "output": 32768 } - }, - "qwen3-235b-a22b": { - "id": "qwen3-235b-a22b", - "name": "Qwen3 235B-A22B", - "family": "qwen", - "attachment": false, - "reasoning": true, "tool_call": true, "temperature": true, "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-07-22", + "last_updated": "2025-07-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.7, "output": 2.8, "reasoning": 8.4 }, - "limit": { "context": 131072, "output": 16384 } + "limit": { + "context": 131000, + "output": 32000 + }, + "cost": { + "input": 0.6, + "output": 1.2 + } }, - "qwen2-5-vl-7b-instruct": { - "id": "qwen2-5-vl-7b-instruct", - "name": "Qwen2.5-VL 7B Instruct", - "family": "qwen", + "zai-glm-4.7": { + "id": "zai-glm-4.7", + "name": "Z.AI GLM-4.7", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-09", - "last_updated": "2024-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-01-10", + "last_updated": "2026-01-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.35, "output": 1.05 }, - "limit": { "context": 131072, "output": 8192 } - }, - "qwen-vl-ocr": { - "id": "qwen-vl-ocr", - "name": "Qwen-VL OCR", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-10-28", - "last_updated": "2025-04-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.72, "output": 0.72 }, - "limit": { "context": 34096, "output": 4096 } + "limit": { + "context": 131072, + "output": 40000 + }, + "cost": { + "input": 2.25, + "output": 2.75, + "cache_read": 0, + "cache_write": 0 + } }, - "qwen-omni-turbo": { - "id": "qwen-omni-turbo", - "name": "Qwen-Omni Turbo", - "family": "qwen", + "gpt-oss-120b": { + "id": "gpt-oss-120b", + "name": "GPT OSS 120B", + "family": "gpt-oss", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-01-19", - "last_updated": "2025-03-26", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text", "audio"] }, - "open_weights": false, - "cost": { "input": 0.07, "output": 0.27, "input_audio": 4.44, "output_audio": 8.89 }, - "limit": { "context": 32768, "output": 2048 } - }, - "qwen3.5-397b-a17b": { - "id": "qwen3.5-397b-a17b", - "name": "Qwen3.5 397B-A17B", - "family": "qwen", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.25, + "output": 0.69 + } + } + } + }, + "lmstudio": { + "id": "lmstudio", + "env": ["LMSTUDIO_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "http://127.0.0.1:1234/v1", + "name": "LMStudio", + "doc": "https://lmstudio.ai/models", + "models": { + "openai/gpt-oss-20b": { + "id": "openai/gpt-oss-20b", + "name": "GPT OSS 20B", + "family": "gpt-oss", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-02-16", - "last_updated": "2026-02-16", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 3.6, "reasoning": 3.6 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "qwen3-livetranslate-flash-realtime": { - "id": "qwen3-livetranslate-flash-realtime", - "name": "Qwen3-LiveTranslate Flash Realtime", + "qwen/qwen3-coder-30b": { + "id": "qwen/qwen3-coder-30b", + "name": "Qwen3 Coder 30B", "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-09-22", - "last_updated": "2025-09-22", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text", "audio"] }, - "open_weights": false, - "cost": { "input": 10, "output": 10, "input_audio": 10, "output_audio": 38 }, - "limit": { "context": 53248, "output": 4096 } + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "qwen3-coder-plus": { - "id": "qwen3-coder-plus", - "name": "Qwen3 Coder Plus", + "qwen/qwen3-30b-a3b-2507": { + "id": "qwen/qwen3-30b-a3b-2507", + "name": "Qwen3 30B A3B 2507", "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, "knowledge": "2025-04", - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-07-30", + "last_updated": "2025-07-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1, "output": 5 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 262144, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } + } + } + }, + "lucidquery": { + "id": "lucidquery", + "env": ["LUCIDQUERY_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://lucidquery.com/api/v1", + "name": "LucidQuery AI", + "doc": "https://lucidquery.com/api/docs", + "models": { + "lucidnova-rf1-100b": { + "id": "lucidnova-rf1-100b", + "name": "LucidNova RF1 100B", + "family": "nova", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2025-09-16", + "release_date": "2024-12-28", + "last_updated": "2025-09-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 120000, + "output": 8000 + }, + "cost": { + "input": 2, + "output": 5 + } }, - "qwen-flash": { - "id": "qwen-flash", - "name": "Qwen Flash", - "family": "qwen", + "lucidquery-nexus-coder": { + "id": "lucidquery-nexus-coder", + "name": "LucidQuery Nexus Coder", + "family": "lucid", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2025-08-01", + "release_date": "2025-09-01", + "last_updated": "2025-09-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 250000, + "output": 60000 + }, + "cost": { + "input": 2, + "output": 5 + } + } + } + }, + "moonshotai-cn": { + "id": "moonshotai-cn", + "env": ["MOONSHOT_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.moonshot.cn/v1", + "name": "Moonshot AI (China)", + "doc": "https://platform.moonshot.cn/docs/api/chat", + "models": { + "kimi-k2-thinking": { + "id": "kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "family": "kimi-thinking", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.05, "output": 0.4 }, - "limit": { "context": 1000000, "output": 32768 } + "knowledge": "2024-08", + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 2.5, + "cache_read": 0.15 + } }, - "qwen3-max": { - "id": "qwen3-max", - "name": "Qwen3 Max", - "family": "qwen", + "kimi-k2-0711-preview": { + "id": "kimi-k2-0711-preview", + "name": "Kimi K2 0711", + "family": "kimi", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-23", - "last_updated": "2025-09-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.2, "output": 6 }, - "limit": { "context": 262144, "output": 65536 } + "knowledge": "2024-10", + "release_date": "2025-07-14", + "last_updated": "2025-07-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.6, + "output": 2.5, + "cache_read": 0.15 + } }, - "qwen2-5-vl-72b-instruct": { - "id": "qwen2-5-vl-72b-instruct", - "name": "Qwen2.5-VL 72B Instruct", - "family": "qwen", + "kimi-k2-turbo-preview": { + "id": "kimi-k2-turbo-preview", + "name": "Kimi K2 Turbo", + "family": "kimi", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-09", - "last_updated": "2024-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 2.8, "output": 8.4 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 2.4, + "output": 10, + "cache_read": 0.6 + } }, - "qwen3-32b": { - "id": "qwen3-32b", - "name": "Qwen3 32B", - "family": "qwen", - "attachment": false, + "kimi-k2.6": { + "id": "kimi-k2.6", + "name": "Kimi K2.6", + "family": "kimi-k2.6", + "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.7, "output": 2.8, "reasoning": 8.4 }, - "limit": { "context": 131072, "output": 16384 } - }, - "qwen3-asr-flash": { - "id": "qwen3-asr-flash", - "name": "Qwen3-ASR Flash", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "knowledge": "2024-04", - "release_date": "2025-09-08", - "last_updated": "2025-09-08", - "modalities": { "input": ["audio"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.035, "output": 0.035 }, - "limit": { "context": 53248, "output": 4096 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.95, + "output": 4, + "cache_read": 0.16 + } }, - "qwen3-coder-flash": { - "id": "qwen3-coder-flash", - "name": "Qwen3 Coder Flash", - "family": "qwen", + "kimi-k2-thinking-turbo": { + "id": "kimi-k2-thinking-turbo", + "name": "Kimi K2 Thinking Turbo", + "family": "kimi-thinking", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 1.5 }, - "limit": { "context": 1000000, "output": 65536 } + "knowledge": "2024-08", + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 1.15, + "output": 8, + "cache_read": 0.15 + } }, - "qwen2-5-14b-instruct": { - "id": "qwen2-5-14b-instruct", - "name": "Qwen2.5 14B Instruct", - "family": "qwen", + "kimi-k2.5": { + "id": "kimi-k2.5", + "name": "Kimi K2.5", + "family": "kimi-k2.5", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-09", - "last_updated": "2024-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-01", + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.35, "output": 1.4 }, - "limit": { "context": 131072, "output": 8192 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 3, + "cache_read": 0.1 + } }, - "qwen3-vl-235b-a22b": { - "id": "qwen3-vl-235b-a22b", - "name": "Qwen3-VL 235B-A22B", - "family": "qwen", + "kimi-k2-0905-preview": { + "id": "kimi-k2-0905-preview", + "name": "Kimi K2 0905", + "family": "kimi", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2025-04", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.7, "output": 2.8, "reasoning": 8.4 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 2.5, + "cache_read": 0.15 + } } } }, - "sap-ai-core": { - "id": "sap-ai-core", - "env": ["AICORE_SERVICE_KEY"], - "npm": "@jerome-benoit/sap-ai-provider-v2", - "name": "SAP AI Core", - "doc": "https://help.sap.com/docs/sap-ai-core", + "azure-cognitive-services": { + "id": "azure-cognitive-services", + "env": ["AZURE_COGNITIVE_SERVICES_RESOURCE_NAME", "AZURE_COGNITIVE_SERVICES_API_KEY"], + "npm": "@ai-sdk/azure", + "name": "Azure Cognitive Services", + "doc": "https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models", "models": { - "gemini-2.5-flash-lite": { - "id": "gemini-2.5-flash-lite", - "name": "gemini-2.5-flash-lite", - "family": "gemini-flash-lite", + "claude-haiku-4-5": { + "id": "claude-haiku-4-5", + "name": "Claude Haiku 4.5", + "family": "claude-haiku", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "knowledge": "2025-02-31", + "release_date": "2025-11-18", + "last_updated": "2025-11-18", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.4, "cache_read": 0.025 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 200000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1" + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } }, - "anthropic--claude-4.6-sonnet": { - "id": "anthropic--claude-4.6-sonnet", - "name": "anthropic--claude-4.6-sonnet", - "family": "claude-sonnet", + "claude-opus-4-1": { + "id": "claude-opus-4-1", + "name": "Claude Opus 4.1", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-08", - "release_date": "2026-02-17", - "last_updated": "2026-03-13", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2025-03-31", + "release_date": "2025-11-18", + "last_updated": "2025-11-18", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 1000000, "output": 64000 } + "limit": { + "context": 200000, + "output": 32000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1" + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "anthropic--claude-4.5-haiku": { - "id": "anthropic--claude-4.5-haiku", - "name": "anthropic--claude-4.5-haiku", - "family": "claude-haiku", + "claude-opus-4-5": { + "id": "claude-opus-4-5", + "name": "Claude Opus 4.5", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-02-28", - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2025-03-31", + "release_date": "2025-11-24", + "last_updated": "2025-08-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 5, "cache_read": 0.1, "cache_write": 1.25 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1" + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "anthropic--claude-4-opus": { - "id": "anthropic--claude-4-opus", - "name": "anthropic--claude-4-opus", - "family": "claude-opus", - "attachment": true, + "kimi-k2.6": { + "id": "kimi-k2.6", + "name": "Kimi K2.6", + "family": "kimi", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 32000 } + "knowledge": "2025-01", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "provider": { + "npm": "@ai-sdk/openai-compatible", + "api": "https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/models", + "shape": "completions" + }, + "cost": { + "input": 0.95, + "output": 4 + } }, - "anthropic--claude-3-opus": { - "id": "anthropic--claude-3-opus", - "name": "anthropic--claude-3-opus", + "claude-opus-4-6": { + "id": "claude-opus-4-6", + "name": "Claude Opus 4.6", "family": "claude-opus", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2023-08-31", - "release_date": "2024-02-29", - "last_updated": "2024-02-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75, "cache_read": 1.5, "cache_write": 18.75 }, - "limit": { "context": 200000, "output": 4096 } + "limit": { + "context": 200000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1" + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25, + "tiers": [ + { + "input": 10, + "output": 37.5, + "cache_read": 1, + "cache_write": 12.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 10, + "output": 37.5, + "cache_read": 1, + "cache_write": 12.5 + } + } }, - "gpt-5": { - "id": "gpt-5", - "name": "gpt-5", - "family": "gpt", + "claude-sonnet-4-5": { + "id": "claude-sonnet-4-5", + "name": "Claude Sonnet 4.5", + "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 400000, "output": 128000 } - }, - "anthropic--claude-3-sonnet": { - "id": "anthropic--claude-3-sonnet", - "name": "anthropic--claude-3-sonnet", - "family": "claude-sonnet", - "attachment": true, - "reasoning": false, - "tool_call": true, "temperature": true, - "knowledge": "2023-08-31", - "release_date": "2024-03-04", - "last_updated": "2024-03-04", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2025-07-31", + "release_date": "2025-11-18", + "last_updated": "2025-11-18", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 4096 } + "limit": { + "context": 200000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1" + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "anthropic--claude-4.5-opus": { - "id": "anthropic--claude-4.5-opus", - "name": "anthropic--claude-4.5-opus", - "family": "claude-opus", - "attachment": true, + "mai-ds-r1": { + "id": "mai-ds-r1", + "name": "MAI-DS-R1", + "family": "mai", + "attachment": false, "reasoning": true, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-05", - "release_date": "2025-11-24", - "last_updated": "2025-11-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2024-06", + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 1.35, + "output": 5.4 + } }, - "anthropic--claude-3-haiku": { - "id": "anthropic--claude-3-haiku", - "name": "anthropic--claude-3-haiku", - "family": "claude-haiku", + "llama-4-maverick-17b-128e-instruct-fp8": { + "id": "llama-4-maverick-17b-128e-instruct-fp8", + "name": "Llama 4 Maverick 17B 128E Instruct FP8", + "family": "llama", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2023-08-31", - "release_date": "2024-03-13", - "last_updated": "2024-03-13", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 1.25, "cache_read": 0.03, "cache_write": 0.3 }, - "limit": { "context": 200000, "output": 4096 } - }, - "gpt-5-mini": { - "id": "gpt-5-mini", - "name": "gpt-5-mini", - "family": "gpt-mini", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-05-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 2, "cache_read": 0.025 }, - "limit": { "context": 400000, "output": 128000 } + "knowledge": "2024-08", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.25, + "output": 1 + } }, - "gpt-4.1": { - "id": "gpt-4.1", - "name": "gpt-4.1", - "family": "gpt", - "attachment": true, + "codestral-2501": { + "id": "codestral-2501", + "name": "Codestral 25.01", + "family": "codestral", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-03", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8, "cache_read": 0.5 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.3, + "output": 0.9 + } }, - "sonar-deep-research": { - "id": "sonar-deep-research", - "name": "sonar-deep-research", - "family": "sonar-deep-research", + "gpt-5.1-codex": { + "id": "gpt-5.1-codex", + "name": "GPT-5.1 Codex", + "family": "gpt-codex", "attachment": false, "reasoning": true, - "tool_call": false, + "tool_call": true, + "structured_output": true, "temperature": false, - "knowledge": "2025-01", - "release_date": "2025-02-01", - "last_updated": "2025-09-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-09-30", + "release_date": "2025-11-14", + "last_updated": "2025-11-14", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text", "image", "audio"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8, "reasoning": 3 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "sonar": { - "id": "sonar", - "name": "sonar", - "family": "sonar", + "kimi-k2-thinking": { + "id": "kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "family": "kimi-thinking", "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2025-09-01", - "release_date": "2024-01-01", - "last_updated": "2025-09-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1, "output": 1 }, - "limit": { "context": 128000, "output": 4096 } - }, - "anthropic--claude-4.5-sonnet": { - "id": "anthropic--claude-4.5-sonnet", - "name": "anthropic--claude-4.5-sonnet", - "family": "claude-sonnet", - "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": true, "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "knowledge": "2024-08", + "release_date": "2025-11-06", + "last_updated": "2025-12-02", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 2.5, + "cache_read": 0.15 + } }, - "anthropic--claude-3.7-sonnet": { - "id": "anthropic--claude-3.7-sonnet", - "name": "anthropic--claude-3.7-sonnet", - "family": "claude-sonnet", - "attachment": true, + "deepseek-r1-0528": { + "id": "deepseek-r1-0528", + "name": "DeepSeek-R1-0528", + "family": "deepseek-thinking", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10-31", - "release_date": "2025-02-24", - "last_updated": "2025-02-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2024-07", + "release_date": "2025-05-28", + "last_updated": "2025-05-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 163840, + "output": 163840 + }, + "cost": { + "input": 1.35, + "output": 5.4 + } + }, + "gpt-3.5-turbo-instruct": { + "id": "gpt-3.5-turbo-instruct", + "name": "GPT-3.5 Turbo Instruct", + "family": "gpt", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2021-08", + "release_date": "2023-09-21", + "last_updated": "2023-09-21", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 4096, + "output": 4096 + }, + "cost": { + "input": 1.5, + "output": 2 + } }, - "gemini-2.5-pro": { - "id": "gemini-2.5-pro", - "name": "gemini-2.5-pro", - "family": "gemini-pro", + "mistral-medium-2505": { + "id": "mistral-medium-2505", + "name": "Mistral Medium 3", + "family": "mistral-medium", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-03-25", - "last_updated": "2025-06-05", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "knowledge": "2025-05", + "release_date": "2025-05-07", + "last_updated": "2025-05-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10, "cache_read": 0.125 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.4, + "output": 2 + } }, - "gemini-2.5-flash": { - "id": "gemini-2.5-flash", - "name": "gemini-2.5-flash", - "family": "gemini-flash", - "attachment": true, + "phi-4-reasoning-plus": { + "id": "phi-4-reasoning-plus", + "name": "Phi-4-reasoning-plus", + "family": "phi", + "attachment": false, "reasoning": true, - "tool_call": true, - "structured_output": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-03-25", - "last_updated": "2025-06-05", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 2.5, "cache_read": 0.03, "input_audio": 1 }, - "limit": { "context": 1048576, "output": 65536 } + "knowledge": "2023-10", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32000, + "output": 4096 + }, + "cost": { + "input": 0.125, + "output": 0.5 + } }, - "sonar-pro": { - "id": "sonar-pro", - "name": "sonar-pro", - "family": "sonar-pro", - "attachment": true, + "cohere-embed-v3-english": { + "id": "cohere-embed-v3-english", + "name": "Embed v3 English", + "family": "cohere-embed", + "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "knowledge": "2025-09-01", - "release_date": "2024-01-01", - "last_updated": "2025-09-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 200000, "output": 8192 } + "temperature": false, + "release_date": "2023-11-07", + "last_updated": "2023-11-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 512, + "output": 1024 + }, + "cost": { + "input": 0.1, + "output": 0 + } }, - "gpt-4.1-mini": { - "id": "gpt-4.1-mini", - "name": "gpt-4.1-mini", - "family": "gpt-mini", - "attachment": true, + "gpt-4-32k": { + "id": "gpt-4-32k", + "name": "GPT-4 32K", + "family": "gpt", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2023-11", + "release_date": "2023-03-14", + "last_updated": "2023-03-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 1.6, "cache_read": 0.1 }, - "limit": { "context": 1047576, "output": 32768 } + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 60, + "output": 120 + } }, - "gpt-5-nano": { - "id": "gpt-5-nano", - "name": "gpt-5-nano", - "family": "gpt-nano", + "gpt-5": { + "id": "gpt-5", + "name": "GPT-5", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": false, - "knowledge": "2024-05-30", + "knowledge": "2024-09-30", "release_date": "2025-08-07", "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.05, "output": 0.4, "cache_read": 0.005 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.13 + } }, - "anthropic--claude-4.6-opus": { - "id": "anthropic--claude-4.6-opus", - "name": "anthropic--claude-4.6-opus", - "family": "claude-opus", - "attachment": true, - "reasoning": true, - "tool_call": true, + "phi-4": { + "id": "phi-4", + "name": "Phi-4", + "family": "phi", + "attachment": false, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-05", - "release_date": "2026-02-05", - "last_updated": "2026-03-13", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25 }, - "limit": { "context": 1000000, "output": 128000 } + "knowledge": "2023-10", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.125, + "output": 0.5 + } }, - "anthropic--claude-3.5-sonnet": { - "id": "anthropic--claude-3.5-sonnet", - "name": "anthropic--claude-3.5-sonnet", - "family": "claude-sonnet", - "attachment": true, + "gpt-3.5-turbo-0613": { + "id": "gpt-3.5-turbo-0613", + "name": "GPT-3.5 Turbo 0613", + "family": "gpt", + "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-04-30", - "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2021-08", + "release_date": "2023-06-13", + "last_updated": "2023-06-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 8192 } + "limit": { + "context": 16384, + "output": 16384 + }, + "cost": { + "input": 3, + "output": 4 + } }, - "anthropic--claude-4-sonnet": { - "id": "anthropic--claude-4-sonnet", - "name": "anthropic--claude-4-sonnet", - "family": "claude-sonnet", - "attachment": true, + "phi-3-medium-128k-instruct": { + "id": "phi-3-medium-128k-instruct", + "name": "Phi-3-medium-instruct (128k)", + "family": "phi", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2023-10", + "release_date": "2024-04-23", + "last_updated": "2024-04-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.17, + "output": 0.68 + } + }, + "deepseek-v3.2": { + "id": "deepseek-v3.2", + "name": "DeepSeek-V3.2", + "family": "deepseek", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 }, - "limit": { "context": 200000, "output": 64000 } - } - } - }, - "mistral": { - "id": "mistral", - "env": ["MISTRAL_API_KEY"], - "npm": "@ai-sdk/mistral", - "name": "Mistral", - "doc": "https://docs.mistral.ai/getting-started/models/", - "models": { - "devstral-small-2505": { - "id": "devstral-small-2505", - "name": "Devstral Small 2505", - "family": "devstral", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-05", - "release_date": "2025-05-07", - "last_updated": "2025-05-07", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 128000, "output": 128000 } - }, - "pixtral-large-latest": { - "id": "pixtral-large-latest", - "name": "Pixtral Large (latest)", - "family": "pixtral", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-11", - "release_date": "2024-11-01", - "last_updated": "2024-11-04", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2, "output": 6 }, - "limit": { "context": 128000, "output": 128000 } - }, - "mistral-small-2603": { - "id": "mistral-small-2603", - "name": "Mistral Small 4", - "family": "mistral-small", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-06", - "release_date": "2026-03-16", - "last_updated": "2026-03-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-07", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 256000, "output": 256000 } + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.58, + "output": 1.68 + } }, - "ministral-3b-latest": { - "id": "ministral-3b-latest", - "name": "Ministral 3B (latest)", - "family": "ministral", + "phi-3-small-128k-instruct": { + "id": "phi-3-small-128k-instruct", + "name": "Phi-3-small-instruct (128k)", + "family": "phi", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-10-01", - "last_updated": "2024-10-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2023-10", + "release_date": "2024-04-23", + "last_updated": "2024-04-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.04, "output": 0.04 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "magistral-small": { - "id": "magistral-small", - "name": "Magistral Small", - "family": "magistral-small", + "gpt-3.5-turbo-0301": { + "id": "gpt-3.5-turbo-0301", + "name": "GPT-3.5 Turbo 0301", + "family": "gpt", "attachment": false, - "reasoning": true, - "tool_call": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-03-17", - "last_updated": "2025-03-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.5, "output": 1.5 }, - "limit": { "context": 128000, "output": 128000 } + "knowledge": "2021-08", + "release_date": "2023-03-01", + "last_updated": "2023-03-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 4096, + "output": 4096 + }, + "cost": { + "input": 1.5, + "output": 2 + } }, - "devstral-2512": { - "id": "devstral-2512", - "name": "Devstral 2", - "family": "devstral", + "phi-4-mini": { + "id": "phi-4-mini", + "name": "Phi-4-mini", + "family": "phi", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-12", - "release_date": "2025-12-09", - "last_updated": "2025-12-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2023-10", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.075, + "output": 0.3 + } }, - "codestral-latest": { - "id": "codestral-latest", - "name": "Codestral (latest)", - "family": "codestral", + "gpt-5-codex": { + "id": "gpt-5-codex", + "name": "GPT-5-Codex", + "family": "gpt-codex", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-05-29", - "last_updated": "2025-01-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 0.9 }, - "limit": { "context": 256000, "output": 4096 } + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-09-15", + "last_updated": "2025-09-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.13 + } }, - "mistral-large-latest": { - "id": "mistral-large-latest", - "name": "Mistral Large (latest)", - "family": "mistral-large", - "attachment": true, + "meta-llama-3-8b-instruct": { + "id": "meta-llama-3-8b-instruct", + "name": "Meta-Llama-3-8B-Instruct", + "family": "llama", + "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-11", - "release_date": "2024-11-01", - "last_updated": "2025-12-02", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2023-12", + "release_date": "2024-04-18", + "last_updated": "2024-04-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.5, "output": 1.5 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 8192, + "output": 2048 + }, + "cost": { + "input": 0.3, + "output": 0.61 + } }, - "devstral-medium-latest": { - "id": "devstral-medium-latest", - "name": "Devstral 2 (latest)", - "family": "devstral", + "gpt-4": { + "id": "gpt-4", + "name": "GPT-4", + "family": "gpt", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-12", - "release_date": "2025-12-02", - "last_updated": "2025-12-02", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 262144, "output": 262144 } - }, - "mistral-embed": { - "id": "mistral-embed", - "name": "Mistral Embed", - "family": "mistral-embed", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": false, - "release_date": "2023-12-11", - "last_updated": "2023-12-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2023-11", + "release_date": "2023-03-14", + "last_updated": "2023-03-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0 }, - "limit": { "context": 8000, "output": 3072 } + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 60, + "output": 120 + } }, - "mistral-large-2411": { - "id": "mistral-large-2411", - "name": "Mistral Large 2.1", - "family": "mistral-large", + "phi-4-mini-reasoning": { + "id": "phi-4-mini-reasoning", + "name": "Phi-4-mini-reasoning", + "family": "phi", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-11", - "release_date": "2024-11-01", - "last_updated": "2024-11-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2023-10", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 2, "output": 6 }, - "limit": { "context": 131072, "output": 16384 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.075, + "output": 0.3 + } }, - "mistral-small-2506": { - "id": "mistral-small-2506", - "name": "Mistral Small 3.2", - "family": "mistral-small", + "meta-llama-3.1-70b-instruct": { + "id": "meta-llama-3.1-70b-instruct", + "name": "Meta-Llama-3.1-70B-Instruct", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-06-20", - "last_updated": "2025-06-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2023-12", + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 2.68, + "output": 3.54 + } }, - "devstral-medium-2507": { - "id": "devstral-medium-2507", - "name": "Devstral Medium", - "family": "devstral", + "phi-3-mini-4k-instruct": { + "id": "phi-3-mini-4k-instruct", + "name": "Phi-3-mini-instruct (4k)", + "family": "phi", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-05", - "release_date": "2025-07-10", - "last_updated": "2025-07-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2023-10", + "release_date": "2024-04-23", + "last_updated": "2024-04-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 128000, "output": 128000 } + "limit": { + "context": 4096, + "output": 1024 + }, + "cost": { + "input": 0.13, + "output": 0.52 + } }, - "magistral-medium-latest": { - "id": "magistral-medium-latest", - "name": "Magistral Medium (latest)", - "family": "magistral-medium", + "deepseek-v3.1": { + "id": "deepseek-v3.1", + "name": "DeepSeek-V3.1", + "family": "deepseek", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-06", - "release_date": "2025-03-17", - "last_updated": "2025-03-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-07", + "release_date": "2025-08-21", + "last_updated": "2025-08-21", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 2, "output": 5 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.56, + "output": 1.68 + } }, - "labs-devstral-small-2512": { - "id": "labs-devstral-small-2512", - "name": "Devstral Small 2", - "family": "devstral", + "text-embedding-3-small": { + "id": "text-embedding-3-small", + "name": "text-embedding-3-small", + "family": "text-embedding", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-12", - "release_date": "2025-12-09", - "last_updated": "2025-12-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 256000, "output": 256000 } + "tool_call": false, + "release_date": "2024-01-25", + "last_updated": "2024-01-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8191, + "output": 1536 + }, + "cost": { + "input": 0.02, + "output": 0 + } }, - "mistral-medium-latest": { - "id": "mistral-medium-latest", - "name": "Mistral Medium (latest)", - "family": "mistral-medium", + "gpt-3.5-turbo-1106": { + "id": "gpt-3.5-turbo-1106", + "name": "GPT-3.5 Turbo 1106", + "family": "gpt", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-05", - "release_date": "2025-05-07", - "last_updated": "2025-05-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2021-08", + "release_date": "2023-11-06", + "last_updated": "2023-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 16384, + "output": 16384 + }, + "cost": { + "input": 1, + "output": 2 + } }, - "mistral-medium-2505": { - "id": "mistral-medium-2505", - "name": "Mistral Medium 3", - "family": "mistral-medium", + "model-router": { + "id": "model-router", + "name": "Model Router", + "family": "model-router", "attachment": true, "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2025-05", - "release_date": "2025-05-07", - "last_updated": "2025-05-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-05-19", + "last_updated": "2025-11-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 131072, "output": 131072 } - }, - "mistral-nemo": { - "id": "mistral-nemo", - "name": "Mistral Nemo", - "family": "mistral-nemo", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-07", - "release_date": "2024-07-01", - "last_updated": "2024-07-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.15 }, - "limit": { "context": 128000, "output": 128000 } - }, - "open-mixtral-8x22b": { - "id": "open-mixtral-8x22b", - "name": "Mixtral 8x22B", - "family": "mixtral", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-04-17", - "last_updated": "2024-04-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2, "output": 6 }, - "limit": { "context": 64000, "output": 64000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.14, + "output": 0 + } }, - "ministral-8b-latest": { - "id": "ministral-8b-latest", - "name": "Ministral 8B (latest)", - "family": "ministral", - "attachment": false, + "mistral-small-2503": { + "id": "mistral-small-2503", + "name": "Mistral Small 3.1", + "family": "mistral-small", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-10-01", - "last_updated": "2024-10-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.1 }, - "limit": { "context": 128000, "output": 128000 } + "knowledge": "2024-09", + "release_date": "2025-03-01", + "last_updated": "2025-03-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.1, + "output": 0.3 + } }, - "open-mixtral-8x7b": { - "id": "open-mixtral-8x7b", - "name": "Mixtral 8x7B", - "family": "mixtral", + "o1": { + "id": "o1", + "name": "o1", + "family": "o", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-01", - "release_date": "2023-12-11", - "last_updated": "2023-12-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.7, "output": 0.7 }, - "limit": { "context": 32000, "output": 32000 } + "temperature": false, + "knowledge": "2023-09", + "release_date": "2024-12-05", + "last_updated": "2024-12-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 15, + "output": 60, + "cache_read": 7.5 + } }, - "pixtral-12b": { - "id": "pixtral-12b", - "name": "Pixtral 12B", - "family": "pixtral", + "grok-4-fast-reasoning": { + "id": "grok-4-fast-reasoning", + "name": "Grok 4 Fast (Reasoning)", + "family": "grok", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-09", - "release_date": "2024-09-01", - "last_updated": "2024-09-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.15 }, - "limit": { "context": 128000, "output": 128000 } + "knowledge": "2025-07", + "release_date": "2025-09-19", + "last_updated": "2025-09-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } }, - "mistral-small-latest": { - "id": "mistral-small-latest", - "name": "Mistral Small (latest)", - "family": "mistral-small", + "gpt-5.1": { + "id": "gpt-5.1", + "name": "GPT-5.1", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-06", - "release_date": "2026-03-16", - "last_updated": "2026-03-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 256000, "output": 256000 } + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-14", + "last_updated": "2025-11-14", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text", "image", "audio"] + }, + "open_weights": false, + "limit": { + "context": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "open-mistral-7b": { - "id": "open-mistral-7b", - "name": "Mistral 7B", - "family": "mistral", + "cohere-embed-v3-multilingual": { + "id": "cohere-embed-v3-multilingual", + "name": "Embed v3 Multilingual", + "family": "cohere-embed", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2023-09-27", - "last_updated": "2023-09-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "temperature": false, + "release_date": "2023-11-07", + "last_updated": "2023-11-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.25, "output": 0.25 }, - "limit": { "context": 8000, "output": 8000 } + "limit": { + "context": 512, + "output": 1024 + }, + "cost": { + "input": 0.1, + "output": 0 + } }, - "devstral-small-2507": { - "id": "devstral-small-2507", - "name": "Devstral Small", - "family": "devstral", + "o1-preview": { + "id": "o1-preview", + "name": "o1-preview", + "family": "o", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-05", - "release_date": "2025-07-10", - "last_updated": "2025-07-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 128000, "output": 128000 } + "temperature": false, + "knowledge": "2023-09", + "release_date": "2024-09-12", + "last_updated": "2024-09-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 16.5, + "output": 66, + "cache_read": 8.25 + } }, - "mistral-medium-2508": { - "id": "mistral-medium-2508", - "name": "Mistral Medium 3.1", - "family": "mistral-medium", - "attachment": true, + "gpt-3.5-turbo-0125": { + "id": "gpt-3.5-turbo-0125", + "name": "GPT-3.5 Turbo 0125", + "family": "gpt", + "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-05", - "release_date": "2025-08-12", - "last_updated": "2025-08-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2021-08", + "release_date": "2024-01-25", + "last_updated": "2024-01-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 262144, "output": 262144 } + "limit": { + "context": 16384, + "output": 16384 + }, + "cost": { + "input": 0.5, + "output": 1.5 + } }, - "mistral-large-2512": { - "id": "mistral-large-2512", - "name": "Mistral Large 3", - "family": "mistral-large", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-11", - "release_date": "2024-11-01", - "last_updated": "2025-12-02", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.5, "output": 1.5 }, - "limit": { "context": 262144, "output": 262144 } - } - } - }, - "github-copilot": { - "id": "github-copilot", - "env": ["GITHUB_TOKEN"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.githubcopilot.com", - "name": "GitHub Copilot", - "doc": "https://docs.github.com/en/copilot", - "models": { - "gpt-5.2-codex": { - "id": "gpt-5.2-codex", - "name": "GPT-5.2-Codex", + "gpt-5.1-codex-mini": { + "id": "gpt-5.1-codex-mini", + "name": "GPT-5.1 Codex Mini", "family": "gpt-codex", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-09-30", + "release_date": "2025-11-14", + "last_updated": "2025-11-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.025 + } }, - "gpt-5.1-codex-mini": { - "id": "gpt-5.1-codex-mini", - "name": "GPT-5.1-Codex-mini", + "cohere-embed-v-4-0": { + "id": "cohere-embed-v-4-0", + "name": "Embed v4", + "family": "cohere-embed", + "attachment": true, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-04-15", + "last_updated": "2025-04-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 1536 + }, + "cost": { + "input": 0.12, + "output": 0 + } + }, + "gpt-5.2-codex": { + "id": "gpt-5.2-codex", + "name": "GPT-5.2 Codex", "family": "gpt-codex", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-01-14", + "last_updated": "2026-01-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 400000, "input": 128000, "output": 128000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "claude-opus-4.6": { - "id": "claude-opus-4.6", - "name": "Claude Opus 4.6", - "family": "claude-opus", + "gpt-4-turbo-vision": { + "id": "gpt-4-turbo-vision", + "name": "GPT-4 Turbo Vision", + "family": "gpt", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2023-11", + "release_date": "2023-11-06", + "last_updated": "2024-04-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 144000, "input": 128000, "output": 64000 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 10, + "output": 30 + } }, - "gpt-5.4-mini": { - "id": "gpt-5.4-mini", - "name": "GPT-5.4 mini", - "family": "gpt-mini", + "gpt-5.1-chat": { + "id": "gpt-5.1-chat", + "name": "GPT-5.1 Chat", + "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-17", - "last_updated": "2026-03-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-09-30", + "release_date": "2025-11-14", + "last_updated": "2025-11-14", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text", "image", "audio"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "gpt-5": { - "id": "gpt-5", - "name": "GPT-5", - "family": "gpt", - "attachment": true, - "reasoning": true, + "meta-llama-3.1-405b-instruct": { + "id": "meta-llama-3.1-405b-instruct", + "name": "Meta-Llama-3.1-405B-Instruct", + "family": "llama", + "attachment": false, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 128000 } + "knowledge": "2023-12", + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 5.33, + "output": 16 + } }, - "claude-haiku-4.5": { - "id": "claude-haiku-4.5", - "name": "Claude Haiku 4.5", - "family": "claude-haiku", + "llama-3.2-11b-vision-instruct": { + "id": "llama-3.2-11b-vision-instruct", + "name": "Llama-3.2-11B-Vision-Instruct", + "family": "llama", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-02-28", - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 144000, "input": 128000, "output": 32000 } + "knowledge": "2023-12", + "release_date": "2024-09-25", + "last_updated": "2024-09-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.37, + "output": 0.37 + } }, - "gemini-3.1-pro-preview": { - "id": "gemini-3.1-pro-preview", - "name": "Gemini 3.1 Pro Preview", - "family": "gemini-pro", - "attachment": true, + "cohere-command-a": { + "id": "cohere-command-a", + "name": "Command A", + "family": "command-a", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-02-19", - "last_updated": "2026-02-19", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "input": 128000, "output": 64000 } + "knowledge": "2024-06-01", + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 8000 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "gemini-3-pro-preview": { - "id": "gemini-3-pro-preview", - "name": "Gemini 3 Pro Preview", - "family": "gemini-pro", - "attachment": true, - "reasoning": true, + "mistral-large-2411": { + "id": "mistral-large-2411", + "name": "Mistral Large 24.11", + "family": "mistral-large", + "attachment": false, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-11-18", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, + "knowledge": "2024-09", + "release_date": "2024-11-01", + "last_updated": "2024-11-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "input": 128000, "output": 64000 } + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 6 + } }, - "gpt-4o": { - "id": "gpt-4o", - "name": "GPT-4o", + "gpt-5.2": { + "id": "gpt-5.2", + "name": "GPT-5.2", "family": "gpt", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2023-09", - "release_date": "2024-05-13", - "last_updated": "2024-05-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "input": 64000, "output": 4096 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.125 + } }, - "grok-code-fast-1": { - "id": "grok-code-fast-1", - "name": "Grok Code Fast 1", - "family": "grok", + "deepseek-v3.2-speciale": { + "id": "deepseek-v3.2-speciale", + "name": "DeepSeek-V3.2-Speciale", + "family": "deepseek", + "attachment": false, + "reasoning": true, + "tool_call": false, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.58, + "output": 1.68 + } + }, + "deepseek-r1": { + "id": "deepseek-r1", + "name": "DeepSeek-R1", + "family": "deepseek-thinking", "attachment": false, "reasoning": true, + "tool_call": false, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 163840, + "output": 163840 + }, + "cost": { + "input": 1.35, + "output": 5.4 + } + }, + "llama-3.2-90b-vision-instruct": { + "id": "llama-3.2-90b-vision-instruct", + "name": "Llama-3.2-90B-Vision-Instruct", + "family": "llama", + "attachment": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-08", - "release_date": "2025-08-27", - "last_updated": "2025-08-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2023-12", + "release_date": "2024-09-25", + "last_updated": "2024-09-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 2.04, + "output": 2.04 + } + }, + "text-embedding-ada-002": { + "id": "text-embedding-ada-002", + "name": "text-embedding-ada-002", + "family": "text-embedding", + "attachment": false, + "reasoning": false, + "tool_call": false, + "release_date": "2022-12-15", + "last_updated": "2022-12-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "input": 128000, "output": 64000 } + "limit": { + "context": 8192, + "output": 1536 + }, + "cost": { + "input": 0.1, + "output": 0 + } }, "gpt-5.3-codex": { "id": "gpt-5.3-codex", - "name": "GPT-5.3-Codex", + "name": "GPT-5.3 Codex", "family": "gpt-codex", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": false, "knowledge": "2025-08-31", "release_date": "2026-02-24", "last_updated": "2026-02-24", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "gpt-5-mini": { - "id": "gpt-5-mini", - "name": "GPT-5-mini", - "family": "gpt-mini", - "attachment": true, - "reasoning": true, - "tool_call": true, + "phi-3-small-8k-instruct": { + "id": "phi-3-small-8k-instruct", + "name": "Phi-3-small-instruct (8k)", + "family": "phi", + "attachment": false, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2024-06", - "release_date": "2025-08-13", - "last_updated": "2025-08-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 264000, "input": 128000, "output": 64000 } - }, - "gpt-5.1-codex-max": { - "id": "gpt-5.1-codex-max", - "name": "GPT-5.1-Codex-max", - "family": "gpt-codex", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-12-04", - "last_updated": "2025-12-04", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 400000, "input": 128000, "output": 128000 } + "knowledge": "2023-10", + "release_date": "2024-04-23", + "last_updated": "2024-04-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 2048 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "gpt-4.1": { - "id": "gpt-4.1", - "name": "GPT-4.1", - "family": "gpt", - "attachment": true, + "meta-llama-3-70b-instruct": { + "id": "meta-llama-3-70b-instruct", + "name": "Meta-Llama-3-70B-Instruct", + "family": "llama", + "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "input": 64000, "output": 16384 } + "knowledge": "2023-12", + "release_date": "2024-04-18", + "last_updated": "2024-04-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 2048 + }, + "cost": { + "input": 2.68, + "output": 3.54 + } }, - "gpt-5.4": { - "id": "gpt-5.4", - "name": "GPT-5.4", - "family": "gpt", - "attachment": false, + "gpt-5-nano": { + "id": "gpt-5-nano", + "name": "GPT-5 Nano", + "family": "gpt-nano", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-05", - "last_updated": "2026-03-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 272000, + "output": 128000 + }, + "cost": { + "input": 0.05, + "output": 0.4, + "cache_read": 0.01 + } }, - "gemini-3-flash-preview": { - "id": "gemini-3-flash-preview", - "name": "Gemini 3 Flash", - "family": "gemini-flash", + "gpt-5-mini": { + "id": "gpt-5-mini", + "name": "GPT-5 Mini", + "family": "gpt-mini", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "input": 128000, "output": 64000 } + "limit": { + "context": 272000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.03 + } }, - "claude-sonnet-4.6": { - "id": "claude-sonnet-4.6", - "name": "Claude Sonnet 4.6", - "family": "claude-sonnet", - "attachment": true, + "phi-4-reasoning": { + "id": "phi-4-reasoning", + "name": "Phi-4-reasoning", + "family": "phi", + "attachment": false, "reasoning": true, - "tool_call": true, + "tool_call": false, "temperature": true, - "release_date": "2026-02-17", - "last_updated": "2026-02-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 200000, "input": 128000, "output": 32000 } + "knowledge": "2023-10", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32000, + "output": 4096 + }, + "cost": { + "input": 0.125, + "output": 0.5 + } }, - "gemini-2.5-pro": { - "id": "gemini-2.5-pro", - "name": "Gemini 2.5 Pro", - "family": "gemini-pro", - "attachment": true, + "phi-3-mini-128k-instruct": { + "id": "phi-3-mini-128k-instruct", + "name": "Phi-3-mini-instruct (128k)", + "family": "phi", + "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-03-20", - "last_updated": "2025-06-05", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "input": 128000, "output": 64000 } + "knowledge": "2023-10", + "release_date": "2024-04-23", + "last_updated": "2024-04-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.13, + "output": 0.52 + } }, - "claude-sonnet-4": { - "id": "claude-sonnet-4", - "name": "Claude Sonnet 4", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "text-embedding-3-large": { + "id": "text-embedding-3-large", + "name": "text-embedding-3-large", + "family": "text-embedding", + "attachment": false, + "reasoning": false, + "tool_call": false, + "release_date": "2024-01-25", + "last_updated": "2024-01-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 216000, "input": 128000, "output": 16000 } + "limit": { + "context": 8191, + "output": 3072 + }, + "cost": { + "input": 0.13, + "output": 0 + } }, - "gpt-5.2": { - "id": "gpt-5.2", - "name": "GPT-5.2", - "family": "gpt", - "attachment": true, + "o1-mini": { + "id": "o1-mini", + "name": "o1-mini", + "family": "o-mini", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2023-09", + "release_date": "2024-09-12", + "last_updated": "2024-09-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 264000, "input": 128000, "output": 64000 } + "limit": { + "context": 128000, + "output": 65536 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.55 + } }, - "gpt-5.1": { - "id": "gpt-5.1", - "name": "GPT-5.1", - "family": "gpt", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 264000, "input": 128000, "output": 64000 } - }, - "claude-opus-4.5": { - "id": "claude-opus-4.5", - "name": "Claude Opus 4.5", - "family": "claude-opus", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-11-24", - "last_updated": "2025-08-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 160000, "input": 128000, "output": 32000 } - }, - "claude-opus-41": { - "id": "claude-opus-41", - "name": "Claude Opus 4.1", - "family": "claude-opus", - "attachment": true, - "reasoning": true, - "tool_call": false, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 80000, "output": 16000 } - }, - "claude-sonnet-4.5": { - "id": "claude-sonnet-4.5", - "name": "Claude Sonnet 4.5", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 144000, "input": 128000, "output": 32000 } - }, - "gpt-5.1-codex": { - "id": "gpt-5.1-codex", - "name": "GPT-5.1-Codex", - "family": "gpt-codex", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 400000, "input": 128000, "output": 128000 } - } - } - }, - "scaleway": { - "id": "scaleway", - "env": ["SCALEWAY_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.scaleway.ai/v1", - "name": "Scaleway", - "doc": "https://www.scaleway.com/en/docs/generative-apis/", - "models": { - "qwen3-coder-30b-a3b-instruct": { - "id": "qwen3-coder-30b-a3b-instruct", - "name": "Qwen3-Coder 30B-A3B Instruct", - "family": "qwen", + "phi-3.5-moe-instruct": { + "id": "phi-3.5-moe-instruct", + "name": "Phi-3.5-MoE-instruct", + "family": "phi", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-04", - "last_updated": "2026-03-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2023-10", + "release_date": "2024-08-20", + "last_updated": "2024-08-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.8 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.16, + "output": 0.64 + } }, - "qwen3-235b-a22b-instruct-2507": { - "id": "qwen3-235b-a22b-instruct-2507", - "name": "Qwen3 235B A22B Instruct 2507", - "family": "qwen", + "gpt-5-chat": { + "id": "gpt-5-chat", + "name": "GPT-5 Chat", + "family": "gpt-codex", "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2025-07-01", - "last_updated": "2026-03-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.75, "output": 2.25 }, - "limit": { "context": 260000, "output": 16384 } - }, - "qwen3-embedding-8b": { - "id": "qwen3-embedding-8b", - "name": "Qwen3 Embedding 8B", - "family": "qwen", - "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": false, "temperature": false, - "release_date": "2025-25-11", - "last_updated": "2026-03-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10-24", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0 }, - "limit": { "context": 32768, "output": 4096 } - }, - "mistral-nemo-instruct-2407": { - "id": "mistral-nemo-instruct-2407", - "name": "Mistral Nemo Instruct 2407", - "family": "mistral-nemo", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2024-07-25", - "last_updated": "2026-03-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 128000, "output": 8192 } - }, - "deepseek-r1-distill-llama-70b": { - "id": "deepseek-r1-distill-llama-70b", - "name": "DeepSeek R1 Distill Llama 70B", - "family": "deepseek-thinking", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-01-20", - "last_updated": "2026-03-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.9, "output": 0.9 }, - "limit": { "context": 32000, "output": 8196 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.13 + } }, - "devstral-2-123b-instruct-2512": { - "id": "devstral-2-123b-instruct-2512", - "name": "Devstral 2 123B Instruct (2512)", - "family": "devstral", + "deepseek-v3-0324": { + "id": "deepseek-v3-0324", + "name": "DeepSeek-V3-0324", + "family": "deepseek", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2026-01-07", - "last_updated": "2026-03-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-07", + "release_date": "2025-03-24", + "last_updated": "2025-03-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 256000, "output": 16384 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 1.14, + "output": 4.56 + } }, "llama-3.3-70b-instruct": { "id": "llama-3.3-70b-instruct", "name": "Llama-3.3-70B-Instruct", "family": "llama", - "attachment": true, + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, "knowledge": "2023-12", "release_date": "2024-12-06", - "last_updated": "2026-03-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.9, "output": 0.9 }, - "limit": { "context": 100000, "output": 16384 } + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.71, + "output": 0.71 + } }, - "gemma-3-27b-it": { - "id": "gemma-3-27b-it", - "name": "Gemma-3-27B-IT", - "family": "gemma", - "attachment": true, + "kimi-k2.5": { + "id": "kimi-k2.5", + "name": "Kimi K2.5", + "family": "kimi", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2024-12-01", - "last_updated": "2026-03-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 0.5 }, - "limit": { "context": 40000, "output": 8192 } + "knowledge": "2025-01", + "release_date": "2026-02-06", + "last_updated": "2026-02-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "provider": { + "npm": "@ai-sdk/openai-compatible", + "api": "https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/models", + "shape": "completions" + }, + "cost": { + "input": 0.6, + "output": 3 + } }, - "llama-3.1-8b-instruct": { - "id": "llama-3.1-8b-instruct", - "name": "Llama 3.1 8B Instruct", + "meta-llama-3.1-8b-instruct": { + "id": "meta-llama-3.1-8b-instruct", + "name": "Meta-Llama-3.1-8B-Instruct", "family": "llama", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, "knowledge": "2023-12", - "release_date": "2025-01-01", - "last_updated": "2026-03-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.3, + "output": 0.61 + } }, - "gpt-oss-120b": { - "id": "gpt-oss-120b", - "name": "GPT-OSS 120B", - "family": "gpt-oss", - "attachment": true, + "ministral-3b": { + "id": "ministral-3b", + "name": "Ministral 3B", + "family": "ministral", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2024-01-01", - "last_updated": "2026-03-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-03", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.04, + "output": 0.04 + } }, - "bge-multilingual-gemma2": { - "id": "bge-multilingual-gemma2", - "name": "BGE Multilingual Gemma2", - "family": "gemma", + "phi-3-medium-4k-instruct": { + "id": "phi-3-medium-4k-instruct", + "name": "Phi-3-medium-instruct (4k)", + "family": "phi", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": false, - "release_date": "2024-07-26", - "last_updated": "2025-06-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0 }, - "limit": { "context": 8191, "output": 3072 } - }, - "pixtral-12b-2409": { - "id": "pixtral-12b-2409", - "name": "Pixtral 12B 2409", - "family": "pixtral", - "attachment": true, - "reasoning": false, - "tool_call": true, "temperature": true, - "release_date": "2024-09-25", - "last_updated": "2026-03-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2023-10", + "release_date": "2024-04-23", + "last_updated": "2024-04-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 4096, + "output": 1024 + }, + "cost": { + "input": 0.17, + "output": 0.68 + } }, - "voxtral-small-24b-2507": { - "id": "voxtral-small-24b-2507", - "name": "Voxtral Small 24B 2507", - "family": "voxtral", + "llama-4-scout-17b-16e-instruct": { + "id": "llama-4-scout-17b-16e-instruct", + "name": "Llama 4 Scout 17B 16E Instruct", + "family": "llama", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-07-01", - "last_updated": "2026-03-17", - "modalities": { "input": ["text", "audio"], "output": ["text"] }, + "knowledge": "2024-08", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.35 }, - "limit": { "context": 32000, "output": 16384 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.2, + "output": 0.78 + } }, - "whisper-large-v3": { - "id": "whisper-large-v3", - "name": "Whisper Large v3", - "family": "whisper", + "phi-3.5-mini-instruct": { + "id": "phi-3.5-mini-instruct", + "name": "Phi-3.5-mini-instruct", + "family": "phi", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": false, - "knowledge": "2023-09", - "release_date": "2023-09-01", - "last_updated": "2026-03-17", - "modalities": { "input": ["audio"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.003, "output": 0 }, - "limit": { "context": 0, "output": 8192 } - }, - "qwen3.5-397b-a17b": { - "id": "qwen3.5-397b-a17b", - "name": "Qwen3.5 397B A17B", - "family": "qwen", - "attachment": false, - "reasoning": true, - "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-03-17", - "last_updated": "2026-03-17", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "knowledge": "2023-10", + "release_date": "2024-08-20", + "last_updated": "2024-08-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 3.6 }, - "limit": { "context": 256000, "output": 16384 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.13, + "output": 0.52 + } }, - "mistral-small-3.2-24b-instruct-2506": { - "id": "mistral-small-3.2-24b-instruct-2506", - "name": "Mistral Small 3.2 24B Instruct (2506)", - "family": "mistral-small", - "attachment": false, + "phi-4-multimodal": { + "id": "phi-4-multimodal", + "name": "Phi-4-multimodal", + "family": "phi", + "attachment": true, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "release_date": "2025-06-20", - "last_updated": "2026-03-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2023-10", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.35 }, - "limit": { "context": 128000, "output": 32768 } - } - } - }, - "iflowcn": { - "id": "iflowcn", - "env": ["IFLOW_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://apis.iflow.cn/v1", - "name": "iFlow", - "doc": "https://platform.iflow.cn/en/docs", - "models": { - "deepseek-r1": { - "id": "deepseek-r1", - "name": "DeepSeek-R1", - "family": "deepseek-thinking", - "attachment": false, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.08, + "output": 0.32, + "input_audio": 4 + } + }, + "codex-mini": { + "id": "codex-mini", + "name": "Codex Mini", + "family": "gpt-codex-mini", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 32000 } + "temperature": false, + "knowledge": "2024-04", + "release_date": "2025-05-16", + "last_updated": "2025-05-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.5, + "output": 6, + "cache_read": 0.375 + } }, - "qwen3-max-preview": { - "id": "qwen3-max-preview", - "name": "Qwen3-Max-Preview", - "family": "qwen", - "attachment": false, - "reasoning": false, + "gpt-5.2-chat": { + "id": "gpt-5.2-chat", + "name": "GPT-5.2 Chat", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 256000, "output": 32000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "deepseek-v3": { - "id": "deepseek-v3", - "name": "DeepSeek-V3", - "family": "deepseek", + "mistral-nemo": { + "id": "mistral-nemo", + "name": "Mistral Nemo", + "family": "mistral-nemo", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-12-26", - "last_updated": "2024-12-26", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-07", + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 32000 } + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.15, + "output": 0.15 + } }, - "kimi-k2-0905": { - "id": "kimi-k2-0905", - "name": "Kimi-K2-0905", - "family": "kimi", - "attachment": false, - "reasoning": false, + "gpt-5.4-mini": { + "id": "gpt-5.4-mini", + "name": "GPT-5.4 Mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 256000, "output": 64000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.75, + "output": 4.5, + "cache_read": 0.075 + } }, - "kimi-k2": { - "id": "kimi-k2", - "name": "Kimi-K2", - "family": "kimi", - "attachment": false, - "reasoning": false, + "gpt-5.4-nano": { + "id": "gpt-5.4-nano", + "name": "GPT-5.4 Nano", + "family": "gpt-nano", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 64000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.2, + "output": 1.25, + "cache_read": 0.02 + } }, - "qwen3-235b": { - "id": "qwen3-235b", - "name": "Qwen3-235B-A22B", - "family": "qwen", - "attachment": false, + "gpt-5.4-pro": { + "id": "gpt-5.4-pro", + "name": "GPT-5.4 Pro", + "family": "gpt-pro", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 32000 } + "structured_output": false, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 30, + "output": 180, + "context_over_200k": { + "input": 60, + "output": 270 + }, + "tiers": [ + { + "input": 60, + "output": 270, + "tier": { + "type": "context", + "size": 272000 + } + } + ] + } }, - "glm-4.6": { - "id": "glm-4.6", - "name": "GLM-4.6", - "family": "glm", - "attachment": false, + "gpt-5.4": { + "id": "gpt-5.4", + "name": "GPT-5.4", + "family": "gpt", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-12-01", - "last_updated": "2025-11-13", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 200000, "output": 128000 } - }, - "qwen3-235b-a22b-instruct": { - "id": "qwen3-235b-a22b-instruct", - "name": "Qwen3-235B-A22B-Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-01", - "last_updated": "2025-07-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 256000, "output": 64000 } - }, - "qwen3-235b-a22b-thinking-2507": { - "id": "qwen3-235b-a22b-thinking-2507", - "name": "Qwen3-235B-A22B-Thinking", - "family": "qwen", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-01", - "last_updated": "2025-07-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 256000, "output": 64000 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 2.5, + "output": 15, + "cache_read": 0.25, + "context_over_200k": { + "input": 5, + "output": 22.5, + "cache_read": 0.5 + }, + "tiers": [ + { + "input": 5, + "output": 22.5, + "cache_read": 0.5, + "tier": { + "type": "context", + "size": 272000 + } + } + ] + } }, - "qwen3-vl-plus": { - "id": "qwen3-vl-plus", - "name": "Qwen3-VL-Plus", - "family": "qwen", + "grok-4-fast-non-reasoning": { + "id": "grok-4-fast-non-reasoning", + "name": "Grok 4 Fast (Non-Reasoning)", + "family": "grok", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-07", + "release_date": "2025-09-19", + "last_updated": "2025-09-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 256000, "output": 32000 } + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } }, - "qwen3-coder-plus": { - "id": "qwen3-coder-plus", - "name": "Qwen3-Coder-Plus", - "family": "qwen", + "grok-3": { + "id": "grok-3", + "name": "Grok 3", + "family": "grok", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-01", - "last_updated": "2025-07-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 256000, "output": 64000 } + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.75 + } }, - "qwen3-max": { - "id": "qwen3-max", - "name": "Qwen3-Max", - "family": "qwen", - "attachment": false, + "gpt-4.1-mini": { + "id": "gpt-4.1-mini", + "name": "GPT-4.1 mini", + "family": "gpt-mini", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 256000, "output": 32000 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.4, + "output": 1.6, + "cache_read": 0.1 + } }, - "qwen3-32b": { - "id": "qwen3-32b", - "name": "Qwen3-32B", - "family": "qwen", - "attachment": false, + "gpt-4.1": { + "id": "gpt-4.1", + "name": "GPT-4.1", + "family": "gpt", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 32000 } + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } }, - "deepseek-v3.2": { - "id": "deepseek-v3.2", - "name": "DeepSeek-V3.2-Exp", - "family": "deepseek", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 64000 } - } - } - }, - "venice": { - "id": "venice", - "env": ["VENICE_API_KEY"], - "npm": "venice-ai-sdk-provider", - "name": "Venice AI", - "doc": "https://docs.venice.ai", - "models": { - "qwen3-235b-a22b-instruct-2507": { - "id": "qwen3-235b-a22b-instruct-2507", - "name": "Qwen 3 235B A22B Instruct 2507", - "family": "qwen", + "cohere-command-r-plus-08-2024": { + "id": "cohere-command-r-plus-08-2024", + "name": "Command R+", + "family": "command-r", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-04-29", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-06-01", + "release_date": "2024-08-30", + "last_updated": "2024-08-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.75 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 128000, + "output": 4000 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "qwen3-coder-480b-a35b-instruct-turbo": { - "id": "qwen3-coder-480b-a35b-instruct-turbo", - "name": "Qwen 3 Coder 480B Turbo", - "family": "qwen", - "attachment": false, + "gpt-4o": { + "id": "gpt-4o", + "name": "GPT-4o", + "family": "gpt", + "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-01-27", - "last_updated": "2026-02-26", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.35, "output": 1.5, "cache_read": 0.04 }, - "limit": { "context": 256000, "output": 65536 } - }, - "aion-labs.aion-2-0": { - "id": "aion-labs.aion-2-0", - "name": "Aion 2.0", - "family": "o", - "attachment": false, - "reasoning": false, - "tool_call": false, "temperature": true, - "release_date": "2026-03-24", - "last_updated": "2026-03-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2023-09", + "release_date": "2024-05-13", + "last_updated": "2024-08-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 2, "cache_read": 0.25 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 10, + "cache_read": 1.25 + } }, - "qwen3-next-80b": { - "id": "qwen3-next-80b", - "name": "Qwen 3 Next 80b", - "family": "qwen", - "attachment": false, - "reasoning": false, + "gpt-5-pro": { + "id": "gpt-5-pro", + "name": "GPT-5 Pro", + "family": "gpt-pro", + "attachment": true, + "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-04-29", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.35, "output": 1.9 }, - "limit": { "context": 256000, "output": 16384 } + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-10-06", + "last_updated": "2025-10-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 272000 + }, + "cost": { + "input": 15, + "output": 120 + } }, - "kimi-k2-thinking": { - "id": "kimi-k2-thinking", - "name": "Kimi K2 Thinking", - "family": "kimi-thinking", - "attachment": false, + "o3": { + "id": "o3", + "name": "o3", + "family": "o", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-12-10", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.75, "output": 3.2, "cache_read": 0.375 }, - "limit": { "context": 256000, "output": 65536 } + "temperature": false, + "knowledge": "2024-05", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } }, - "zai-org-glm-4.7": { - "id": "zai-org-glm-4.7", - "name": "GLM 4.7", - "family": "glm", + "grok-3-mini": { + "id": "grok-3-mini", + "name": "Grok 3 Mini", + "family": "grok", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-24", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.55, "output": 2.65, "cache_read": 0.11 }, - "limit": { "context": 198000, "output": 16384 } + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 0.5, + "reasoning": 0.5, + "cache_read": 0.075 + } }, - "openai-gpt-53-codex": { - "id": "openai-gpt-53-codex", - "name": "GPT-5.3 Codex", - "family": "gpt-codex", + "gpt-4.1-nano": { + "id": "gpt-4.1-nano", + "name": "GPT-4.1 nano", + "family": "gpt-nano", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-02-24", - "last_updated": "2026-03-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.19, "output": 17.5, "cache_read": 0.219 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.03 + } }, - "qwen3-5-35b-a3b": { - "id": "qwen3-5-35b-a3b", - "name": "Qwen 3.5 35B A3B", - "family": "qwen", - "attachment": true, + "grok-4": { + "id": "grok-4", + "name": "Grok 4", + "family": "grok", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-02-25", - "last_updated": "2026-03-09", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3125, "output": 1.25, "cache_read": 0.15625 }, - "limit": { "context": 256000, "output": 65536 } + "knowledge": "2025-07", + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "reasoning": 15, + "cache_read": 0.75 + } }, - "olafangensan-glm-4.7-flash-heretic": { - "id": "olafangensan-glm-4.7-flash-heretic", - "name": "GLM 4.7 Flash Heretic", - "family": "glm-flash", + "o3-mini": { + "id": "o3-mini", + "name": "o3-mini", + "family": "o-mini", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-02-04", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.14, "output": 0.8 }, - "limit": { "context": 200000, "output": 24000 } + "temperature": false, + "knowledge": "2024-05", + "release_date": "2024-12-20", + "last_updated": "2025-01-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.55 + } }, "grok-code-fast-1": { "id": "grok-code-fast-1", @@ -51822,13381 +76905,40394 @@ "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-12-01", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 1.87, "cache_read": 0.03 }, - "limit": { "context": 256000, "output": 10000 } - }, - "openai-gpt-4o-2024-11-20": { - "id": "openai-gpt-4o-2024-11-20", - "name": "GPT-4o", - "family": "gpt", - "attachment": true, - "reasoning": false, - "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-02-28", - "last_updated": "2026-03-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2023-10", + "release_date": "2025-08-28", + "last_updated": "2025-08-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3.125, "output": 12.5 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 256000, + "output": 10000 + }, + "cost": { + "input": 0.2, + "output": 1.5, + "cache_read": 0.02 + } }, - "grok-4-20-beta": { - "id": "grok-4-20-beta", - "name": "Grok 4.20 Beta", - "family": "grok-beta", + "o4-mini": { + "id": "o4-mini", + "name": "o4-mini", + "family": "o-mini", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-03-12", - "last_updated": "2026-03-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { - "input": 2.5, - "output": 7.5, - "cache_read": 0.25, - "context_over_200k": { "input": 5, "output": 15, "cache_read": 0.25 } + "limit": { + "context": 200000, + "output": 100000 }, - "limit": { "context": 2000000, "output": 128000 } + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.28 + } }, - "grok-4-20-multi-agent-beta": { - "id": "grok-4-20-multi-agent-beta", - "name": "Grok 4.20 Multi-Agent Beta", - "family": "grok-beta", - "attachment": true, - "reasoning": true, - "tool_call": false, - "structured_output": true, + "cohere-command-r-08-2024": { + "id": "cohere-command-r-08-2024", + "name": "Command R", + "family": "command-r", + "attachment": false, + "reasoning": false, + "tool_call": true, "temperature": true, - "release_date": "2026-03-12", - "last_updated": "2026-03-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { - "input": 2.5, - "output": 7.5, - "cache_read": 0.25, - "context_over_200k": { "input": 5, "output": 15, "cache_read": 0.25 } + "knowledge": "2024-06-01", + "release_date": "2024-08-30", + "last_updated": "2024-08-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4000 }, - "limit": { "context": 2000000, "output": 128000 } + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "claude-opus-4-6": { - "id": "claude-opus-4-6", - "name": "Claude Opus 4.6", - "family": "claude-opus", + "gpt-4o-mini": { + "id": "gpt-4o-mini", + "name": "GPT-4o mini", + "family": "gpt-mini", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-02-05", - "last_updated": "2026-03-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2023-09", + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 6, "output": 30, "cache_read": 0.6, "cache_write": 7.5 }, - "limit": { "context": 1000000, "output": 128000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.6, + "cache_read": 0.08 + } }, - "claude-sonnet-4-6": { - "id": "claude-sonnet-4-6", - "name": "Claude Sonnet 4.6", - "family": "claude-sonnet", + "gpt-4-turbo": { + "id": "gpt-4-turbo", + "name": "GPT-4 Turbo", + "family": "gpt", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-02-17", - "last_updated": "2026-03-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2023-12", + "release_date": "2023-11-06", + "last_updated": "2024-04-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3.6, "output": 18, "cache_read": 0.36, "cache_write": 4.5 }, - "limit": { "context": 1000000, "output": 64000 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 10, + "output": 30 + } }, - "openai-gpt-54-pro": { - "id": "openai-gpt-54-pro", - "name": "GPT-5.4 Pro", - "family": "gpt-pro", + "gpt-5.5": { + "id": "gpt-5.5", + "name": "GPT-5.5", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": true, - "release_date": "2026-03-05", - "last_updated": "2026-03-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-12-01", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 37.5, "output": 225, "context_over_200k": { "input": 75, "output": 337.5 } }, - "limit": { "context": 1000000, "output": 128000 } - }, - "kimi-k2-5": { - "id": "kimi-k2-5", - "name": "Kimi K2.5", - "family": "kimi", + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 30, + "cache_read": 0.5, + "context_over_200k": { + "input": 10, + "output": 45, + "cache_read": 1 + }, + "tiers": [ + { + "input": 10, + "output": 45, + "cache_read": 1, + "tier": { + "type": "context", + "size": 272000 + } + } + ] + } + } + } + }, + "abliteration-ai": { + "id": "abliteration-ai", + "env": ["ABLIT_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.abliteration.ai/v1", + "name": "abliteration.ai", + "doc": "https://docs.abliteration.ai/models", + "models": { + "abliterated-model": { + "id": "abliterated-model", + "name": "Abliterated Model", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, + "structured_output": false, "temperature": true, - "knowledge": "2024-04", - "release_date": "2026-01-27", - "last_updated": "2026-03-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-01-06", + "last_updated": "2026-01-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.56, "output": 3.5, "cache_read": 0.11 }, - "limit": { "context": 256000, "output": 65536 } - }, - "claude-opus-45": { - "id": "claude-opus-45", - "name": "Claude Opus 4.5", - "family": "claude-opus", + "limit": { + "context": 150000, + "input": 150000, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 3 + } + } + } + }, + "wafer.ai": { + "id": "wafer.ai", + "env": ["WAFER_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://pass.wafer.ai/v1", + "name": "Wafer", + "doc": "https://docs.wafer.ai/wafer-pass", + "models": { + "Qwen3.5-397B-A17B": { + "id": "Qwen3.5-397B-A17B", + "name": "Qwen3.5 397B A17B", + "family": "qwen", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-12-06", - "last_updated": "2026-01-28", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 6, "output": 30, "cache_read": 0.6, "cache_write": 7.5 }, - "limit": { "context": 198000, "output": 49500 } + "knowledge": "2025-04", + "release_date": "2026-02-16", + "last_updated": "2026-02-16", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "llama-3.2-3b": { - "id": "llama-3.2-3b", - "name": "Llama 3.2 3B", - "family": "llama", + "GLM-5.1": { + "id": "GLM-5.1", + "name": "GLM-5.1", + "family": "glm", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-10-03", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-04-07", + "last_updated": "2026-04-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 128000, "output": 4096 } - }, - "qwen3-5-9b": { - "id": "qwen3-5-9b", - "name": "Qwen 3.5 9B", - "family": "qwen", - "attachment": true, + "limit": { + "context": 202752, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + } + } + }, + "cohere": { + "id": "cohere", + "env": ["COHERE_API_KEY"], + "npm": "@ai-sdk/cohere", + "name": "Cohere", + "doc": "https://docs.cohere.com/docs/models", + "models": { + "command-a-reasoning-08-2025": { + "id": "command-a-reasoning-08-2025", + "name": "Command A Reasoning", + "family": "command-a", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-03-05", - "last_updated": "2026-03-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-06-01", + "release_date": "2025-08-21", + "last_updated": "2025-08-21", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.05, "output": 0.15 }, - "limit": { "context": 256000, "output": 65536 } + "limit": { + "context": 256000, + "output": 32000 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "minimax-m27": { - "id": "minimax-m27", - "name": "MiniMax M2.7", - "family": "minimax", + "command-r7b-12-2024": { + "id": "command-r7b-12-2024", + "name": "Command R7B", + "family": "command-r", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-06-01", + "release_date": "2024-02-27", + "last_updated": "2024-02-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.375, "output": 1.5, "cache_read": 0.075 }, - "limit": { "context": 198000, "output": 32768 } + "limit": { + "context": 128000, + "output": 4000 + }, + "cost": { + "input": 0.0375, + "output": 0.15 + } }, - "venice-uncensored": { - "id": "venice-uncensored", - "name": "Venice Uncensored 1.1", - "family": "venice", - "attachment": false, + "c4ai-aya-vision-8b": { + "id": "c4ai-aya-vision-8b", + "name": "Aya Vision 8B", + "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": true, "temperature": true, - "knowledge": "2023-10", - "release_date": "2025-03-18", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-03-04", + "last_updated": "2025-05-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.2, "output": 0.9 }, - "limit": { "context": 32000, "output": 8192 } + "limit": { + "context": 16000, + "output": 4000 + } }, - "openai-gpt-oss-120b": { - "id": "openai-gpt-oss-120b", - "name": "OpenAI GPT OSS 120B", - "family": "gpt-oss", + "command-r-plus-08-2024": { + "id": "command-r-plus-08-2024", + "name": "Command R+", + "family": "command-r", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-11-06", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-06-01", + "release_date": "2024-08-30", + "last_updated": "2024-08-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.07, "output": 0.3 }, - "limit": { "context": 128000, "output": 16384 } - }, - "gemini-3-flash-preview": { - "id": "gemini-3-flash-preview", - "name": "Gemini 3 Flash Preview", - "family": "gemini-flash", - "attachment": true, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-12-19", - "last_updated": "2026-03-12", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.7, "output": 3.75, "cache_read": 0.07 }, - "limit": { "context": 256000, "output": 65536 } - }, - "openai-gpt-52": { - "id": "openai-gpt-52", - "name": "GPT-5.2", - "family": "gpt", - "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "knowledge": "2025-08-31", - "release_date": "2025-12-13", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.19, "output": 17.5, "cache_read": 0.219 }, - "limit": { "context": 256000, "output": 65536 } - }, - "gemini-3-1-pro-preview": { - "id": "gemini-3-1-pro-preview", - "name": "Gemini 3.1 Pro Preview", - "family": "gemini-pro", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-02-19", - "last_updated": "2026-03-12", - "modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }, - "open_weights": false, + "limit": { + "context": 128000, + "output": 4000 + }, "cost": { "input": 2.5, - "output": 15, - "cache_read": 0.5, - "cache_write": 0.5, - "context_over_200k": { "input": 5, "output": 22.5, "cache_read": 0.5 } - }, - "limit": { "context": 1000000, "output": 32768 } + "output": 10 + } }, - "qwen3-coder-480b-a35b-instruct": { - "id": "qwen3-coder-480b-a35b-instruct", - "name": "Qwen 3 Coder 480b", - "family": "qwen", + "c4ai-aya-expanse-8b": { + "id": "c4ai-aya-expanse-8b", + "name": "Aya Expanse 8B", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-04-29", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-10-24", + "last_updated": "2024-10-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.75, "output": 3 }, - "limit": { "context": 256000, "output": 65536 } + "limit": { + "context": 8000, + "output": 4000 + } }, - "zai-org-glm-4.6": { - "id": "zai-org-glm-4.6", - "name": "GLM 4.6", - "family": "glm", + "command-r7b-arabic-02-2025": { + "id": "command-r7b-arabic-02-2025", + "name": "Command R7B Arabic", + "family": "command-r", "attachment": false, "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, "temperature": true, - "release_date": "2024-04-01", - "last_updated": "2026-03-16", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-06-01", + "release_date": "2025-02-27", + "last_updated": "2025-02-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.85, "output": 2.75, "cache_read": 0.3 }, - "limit": { "context": 198000, "output": 16384 } + "limit": { + "context": 128000, + "output": 4000 + }, + "cost": { + "input": 0.0375, + "output": 0.15 + } }, - "qwen3-235b-a22b-thinking-2507": { - "id": "qwen3-235b-a22b-thinking-2507", - "name": "Qwen 3 235B A22B Thinking 2507", - "family": "qwen", + "command-a-vision-07-2025": { + "id": "command-a-vision-07-2025", + "name": "Command A Vision", + "family": "command-a", "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-04-29", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-06-01", + "release_date": "2025-07-31", + "last_updated": "2025-07-31", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.45, "output": 3.5 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 128000, + "output": 8000 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "google-gemma-3-27b-it": { - "id": "google-gemma-3-27b-it", - "name": "Google Gemma 3 27B Instruct", - "family": "gemma", + "c4ai-aya-vision-32b": { + "id": "c4ai-aya-vision-32b", + "name": "Aya Vision 32B", "attachment": true, "reasoning": false, - "tool_call": true, - "structured_output": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-11-04", - "last_updated": "2026-03-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-03-04", + "last_updated": "2025-05-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.12, "output": 0.2 }, - "limit": { "context": 198000, "output": 16384 } + "limit": { + "context": 16000, + "output": 4000 + } }, - "qwen3-4b": { - "id": "qwen3-4b", - "name": "Venice Small", - "family": "qwen", + "command-a-translate-08-2025": { + "id": "command-a-translate-08-2025", + "name": "Command A Translate", + "family": "command-a", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-04-29", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-06-01", + "release_date": "2025-08-28", + "last_updated": "2025-08-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.05, "output": 0.15 }, - "limit": { "context": 32000, "output": 4096 } + "limit": { + "context": 8000, + "output": 8000 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "hermes-3-llama-3.1-405b": { - "id": "hermes-3-llama-3.1-405b", - "name": "Hermes 3 Llama 3.1 405b", - "family": "hermes", + "command-r-08-2024": { + "id": "command-r-08-2024", + "name": "Command R", + "family": "command-r", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-09-25", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-06-01", + "release_date": "2024-08-30", + "last_updated": "2024-08-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1.1, "output": 3 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 128000, + "output": 4000 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "claude-sonnet-45": { - "id": "claude-sonnet-45", - "name": "Claude Sonnet 4.5", - "family": "claude-sonnet", - "attachment": true, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, + "c4ai-aya-expanse-32b": { + "id": "c4ai-aya-expanse-32b", + "name": "Aya Expanse 32B", + "attachment": false, + "reasoning": false, + "tool_call": false, "temperature": true, - "knowledge": "2025-09", - "release_date": "2025-01-15", - "last_updated": "2026-01-28", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3.75, "output": 18.75, "cache_read": 0.375, "cache_write": 4.69 }, - "limit": { "context": 198000, "output": 49500 } + "release_date": "2024-10-24", + "last_updated": "2024-10-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4000 + } }, - "llama-3.3-70b": { - "id": "llama-3.3-70b", - "name": "Llama 3.3 70B", - "family": "llama", + "command-a-03-2025": { + "id": "command-a-03-2025", + "name": "Command A", + "family": "command-a", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2025-04-06", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-06-01", + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.7, "output": 2.8 }, - "limit": { "context": 128000, "output": 4096 } - }, - "mistral-31-24b": { - "id": "mistral-31-24b", - "name": "Venice Medium", - "family": "mistral", - "attachment": true, + "limit": { + "context": 256000, + "output": 8000 + }, + "cost": { + "input": 2.5, + "output": 10 + } + } + } + }, + "cloudferro-sherlock": { + "id": "cloudferro-sherlock", + "env": ["CLOUDFERRO_SHERLOCK_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api-sherlock.cloudferro.com/openai/v1/", + "name": "CloudFerro Sherlock", + "doc": "https://docs.sherlock.cloudferro.com/", + "models": { + "meta-llama/Llama-3.3-70B-Instruct": { + "id": "meta-llama/Llama-3.3-70B-Instruct", + "name": "Llama 3.3 70B Instruct", + "family": "llama", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2023-10", - "release_date": "2025-03-18", - "last_updated": "2026-03-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-10-09", + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.5, "output": 2 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 70000, + "output": 70000 + }, + "cost": { + "input": 2.92, + "output": 2.92 + } }, - "zai-org-glm-5": { - "id": "zai-org-glm-5", - "name": "GLM 5", - "family": "glm", + "openai/gpt-oss-120b": { + "id": "openai/gpt-oss-120b", + "name": "OpenAI GPT OSS 120B", + "family": "gpt-oss", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "release_date": "2026-02-11", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-28", + "last_updated": "2025-08-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1, "output": 3.2, "cache_read": 0.2 }, - "limit": { "context": 198000, "output": 32000 } + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 2.92, + "output": 2.92 + } }, - "minimax-m25": { - "id": "minimax-m25", - "name": "MiniMax M2.5", - "family": "minimax", + "speakleash/Bielik-11B-v3.0-Instruct": { + "id": "speakleash/Bielik-11B-v3.0-Instruct", + "name": "Bielik 11B v3.0 Instruct", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "structured_output": true, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-03-16", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-03", + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.34, "output": 1.19, "cache_read": 0.04 }, - "limit": { "context": 198000, "output": 32768 } + "limit": { + "context": 32000, + "output": 32000 + }, + "cost": { + "input": 0.67, + "output": 0.67 + } }, - "openai-gpt-54": { - "id": "openai-gpt-54", - "name": "GPT-5.4", - "family": "gpt", - "attachment": true, - "reasoning": true, + "speakleash/Bielik-11B-v2.6-Instruct": { + "id": "speakleash/Bielik-11B-v2.6-Instruct", + "name": "Bielik 11B v2.6 Instruct", + "attachment": false, + "reasoning": false, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2026-03-05", - "last_updated": "2026-03-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3.13, "output": 18.8, "cache_read": 0.313 }, - "limit": { "context": 1000000, "output": 131072 } + "knowledge": "2025-03", + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32000, + "output": 32000 + }, + "cost": { + "input": 0.67, + "output": 0.67 + } }, - "nvidia-nemotron-3-nano-30b-a3b": { - "id": "nvidia-nemotron-3-nano-30b-a3b", - "name": "NVIDIA Nemotron 3 Nano 30B", - "family": "nemotron", + "MiniMaxAI/MiniMax-M2.5": { + "id": "MiniMaxAI/MiniMax-M2.5", + "name": "MiniMax-M2.5", + "family": "minimax", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2026-01-27", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2026-01", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.075, "output": 0.3 }, - "limit": { "context": 128000, "output": 16384 } - }, - "deepseek-v3.2": { - "id": "deepseek-v3.2", - "name": "DeepSeek V3.2", - "family": "deepseek", + "limit": { + "context": 196000, + "input": 180000, + "output": 16000 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } + } + } + }, + "kuae-cloud-coding-plan": { + "id": "kuae-cloud-coding-plan", + "env": ["KUAE_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://coding-plan-endpoint.kuaecloud.net/v1", + "name": "KUAE Cloud Coding Plan", + "doc": "https://docs.mthreads.com/kuaecloud/kuaecloud-doc-online/coding_plan/", + "models": { + "GLM-4.7": { + "id": "GLM-4.7", + "name": "GLM-4.7", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2025-10", - "release_date": "2025-12-04", - "last_updated": "2026-03-24", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.33, "output": 0.48, "cache_read": 0.16 }, - "limit": { "context": 160000, "output": 32768 } - }, - "venice-uncensored-role-play": { - "id": "venice-uncensored-role-play", - "name": "Venice Role Play Uncensored", - "family": "venice", - "attachment": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + } + } + }, + "xai": { + "id": "xai", + "env": ["XAI_API_KEY"], + "npm": "@ai-sdk/xai", + "name": "xAI", + "doc": "https://docs.x.ai/docs/models", + "models": { + "grok-2-1212": { + "id": "grok-2-1212", + "name": "Grok 2 (1212)", + "family": "grok", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-02-20", - "last_updated": "2026-03-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.5, "output": 2 }, - "limit": { "context": 128000, "output": 4096 } + "knowledge": "2024-08", + "release_date": "2024-12-12", + "last_updated": "2024-12-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 2, + "output": 10, + "cache_read": 2 + } }, - "qwen3-vl-235b-a22b": { - "id": "qwen3-vl-235b-a22b", - "name": "Qwen3 VL 235B", - "family": "qwen", + "grok-vision-beta": { + "id": "grok-vision-beta", + "name": "Grok Vision Beta", + "family": "grok-vision", "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-01-16", - "last_updated": "2026-03-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.25, "output": 1.5 }, - "limit": { "context": 256000, "output": 16384 } + "knowledge": "2024-08", + "release_date": "2024-11-01", + "last_updated": "2024-11-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "output": 4096 + }, + "cost": { + "input": 5, + "output": 15, + "cache_read": 5 + } }, - "grok-41-fast": { - "id": "grok-41-fast", - "name": "Grok 4.1 Fast", + "grok-4.3": { + "id": "grok-4.3", + "name": "Grok 4.3", "family": "grok", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-12-01", - "last_updated": "2026-03-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-05-01", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 0.625, "cache_read": 0.0625 }, - "limit": { "context": 1000000, "output": 30000 } + "limit": { + "context": 1000000, + "output": 30000 + }, + "cost": { + "input": 1.25, + "output": 2.5, + "cache_read": 0.2, + "tiers": [ + { + "input": 2.5, + "output": 5, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 2.5, + "output": 5, + "cache_read": 0.4 + } + } }, - "openai-gpt-4o-mini-2024-07-18": { - "id": "openai-gpt-4o-mini-2024-07-18", - "name": "GPT-4o Mini", - "family": "gpt-mini", - "attachment": true, - "reasoning": false, + "grok-3-mini-fast": { + "id": "grok-3-mini-fast", + "name": "Grok 3 Mini Fast", + "family": "grok", + "attachment": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-02-28", - "last_updated": "2026-03-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1875, "output": 0.75, "cache_read": 0.09375 }, - "limit": { "context": 128000, "output": 16384 } - }, - "zai-org-glm-4.7-flash": { - "id": "zai-org-glm-4.7-flash", - "name": "GLM 4.7 Flash", - "family": "glm-flash", + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.6, + "output": 4, + "reasoning": 4, + "cache_read": 0.15 + } + }, + "grok-3-mini-latest": { + "id": "grok-3-mini-latest", + "name": "Grok 3 Mini Latest", + "family": "grok", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-01-29", - "last_updated": "2026-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.125, "output": 0.5 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 0.5, + "reasoning": 0.5, + "cache_read": 0.075 + } }, - "mistral-small-3-2-24b-instruct": { - "id": "mistral-small-3-2-24b-instruct", - "name": "Mistral Small 3.2 24B Instruct", - "family": "mistral-small", + "grok-3-fast": { + "id": "grok-3-fast", + "name": "Grok 3 Fast", + "family": "grok", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2026-01-15", - "last_updated": "2026-03-16", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.09375, "output": 0.25 }, - "limit": { "context": 256000, "output": 16384 } + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 1.25 + } }, - "openai-gpt-52-codex": { - "id": "openai-gpt-52-codex", - "name": "GPT-5.2 Codex", - "family": "gpt-codex", + "grok-2-vision-latest": { + "id": "grok-2-vision-latest", + "name": "Grok 2 Vision Latest", + "family": "grok", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "knowledge": "2025-08", - "release_date": "2025-01-15", - "last_updated": "2026-03-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-08", + "release_date": "2024-08-20", + "last_updated": "2024-12-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.19, "output": 17.5, "cache_read": 0.219 }, - "limit": { "context": 256000, "output": 65536 } + "limit": { + "context": 8192, + "output": 4096 + }, + "cost": { + "input": 2, + "output": 10, + "cache_read": 2 + } }, - "minimax-m21": { - "id": "minimax-m21", - "name": "MiniMax M2.1", - "family": "minimax", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, - "temperature": true, - "release_date": "2025-12-01", - "last_updated": "2026-03-16", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.35, "output": 1.5, "cache_read": 0.04 }, - "limit": { "context": 198000, "output": 32768 } - } - } - }, - "submodel": { - "id": "submodel", - "env": ["SUBMODEL_INSTAGEN_ACCESS_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://llm.submodel.ai/v1", - "name": "submodel", - "doc": "https://submodel.gitbook.io", - "models": { - "openai/gpt-oss-120b": { - "id": "openai/gpt-oss-120b", - "name": "GPT OSS 120B", - "family": "gpt-oss", - "attachment": false, + "grok-4.20-0309-reasoning": { + "id": "grok-4.20-0309-reasoning", + "name": "Grok 4.20 (Reasoning)", + "family": "grok", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-08-23", - "last_updated": "2025-08-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.5 }, - "limit": { "context": 131072, "output": 32768 } + "release_date": "2026-03-09", + "last_updated": "2026-03-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 2, + "output": 6, + "cache_read": 0.2, + "tiers": [ + { + "input": 4, + "output": 12, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 4, + "output": 12, + "cache_read": 0.4 + } + } }, - "zai-org/GLM-4.5-Air": { - "id": "zai-org/GLM-4.5-Air", - "name": "GLM 4.5 Air", - "family": "glm-air", - "attachment": false, + "grok-4-1-fast-non-reasoning": { + "id": "grok-4-1-fast-non-reasoning", + "name": "Grok 4.1 Fast (Non-Reasoning)", + "family": "grok", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.5 }, - "limit": { "context": 131072, "output": 131072 } + "knowledge": "2025-07", + "release_date": "2025-11-19", + "last_updated": "2025-11-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } }, - "zai-org/GLM-4.5-FP8": { - "id": "zai-org/GLM-4.5-FP8", - "name": "GLM 4.5 FP8", - "family": "glm", + "grok-3-mini-fast-latest": { + "id": "grok-3-mini-fast-latest", + "name": "Grok 3 Mini Fast Latest", + "family": "grok", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.8 }, - "limit": { "context": 131072, "output": 131072 } + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.6, + "output": 4, + "reasoning": 4, + "cache_read": 0.15 + } }, - "deepseek-ai/DeepSeek-V3.1": { - "id": "deepseek-ai/DeepSeek-V3.1", - "name": "DeepSeek V3.1", - "family": "deepseek", - "attachment": false, + "grok-4-fast": { + "id": "grok-4-fast", + "name": "Grok 4 Fast", + "family": "grok", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-08-23", - "last_updated": "2025-08-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-07", + "release_date": "2025-09-19", + "last_updated": "2025-09-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.8 }, - "limit": { "context": 75000, "output": 163840 } + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } }, - "deepseek-ai/DeepSeek-V3-0324": { - "id": "deepseek-ai/DeepSeek-V3-0324", - "name": "DeepSeek V3 0324", - "family": "deepseek", + "grok-3-latest": { + "id": "grok-3-latest", + "name": "Grok 3 Latest", + "family": "grok", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-08-23", - "last_updated": "2025-08-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.8 }, - "limit": { "context": 75000, "output": 163840 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.75 + } }, - "deepseek-ai/DeepSeek-R1-0528": { - "id": "deepseek-ai/DeepSeek-R1-0528", - "name": "DeepSeek R1 0528", - "family": "deepseek-thinking", + "grok-2": { + "id": "grok-2", + "name": "Grok 2", + "family": "grok", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-08-23", - "last_updated": "2025-08-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-08", + "release_date": "2024-08-20", + "last_updated": "2024-08-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 2.15 }, - "limit": { "context": 75000, "output": 163840 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 2, + "output": 10, + "cache_read": 2 + } }, - "Qwen/Qwen3-235B-A22B-Thinking-2507": { - "id": "Qwen/Qwen3-235B-A22B-Thinking-2507", - "name": "Qwen3 235B A22B Thinking 2507", - "family": "qwen", + "grok-code-fast-1": { + "id": "grok-code-fast-1", + "name": "Grok Code Fast 1", + "family": "grok", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-08-23", - "last_updated": "2025-08-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.6 }, - "limit": { "context": 262144, "output": 131072 } + "knowledge": "2023-10", + "release_date": "2025-08-28", + "last_updated": "2025-08-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 10000 + }, + "cost": { + "input": 0.2, + "output": 1.5, + "cache_read": 0.02 + } }, - "Qwen/Qwen3-235B-A22B-Instruct-2507": { - "id": "Qwen/Qwen3-235B-A22B-Instruct-2507", - "name": "Qwen3 235B A22B Instruct 2507", - "family": "qwen", - "attachment": false, + "grok-4.20-0309-non-reasoning": { + "id": "grok-4.20-0309-non-reasoning", + "name": "Grok 4.20 (Non-Reasoning)", + "family": "grok", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-08-23", - "last_updated": "2025-08-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.3 }, - "limit": { "context": 262144, "output": 131072 } + "release_date": "2026-03-09", + "last_updated": "2026-03-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 2, + "output": 6, + "cache_read": 0.2, + "tiers": [ + { + "input": 4, + "output": 12, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 4, + "output": 12, + "cache_read": 0.4 + } + } }, - "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8": { - "id": "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8", - "name": "Qwen3 Coder 480B A35B Instruct", - "family": "qwen", + "grok-3-fast-latest": { + "id": "grok-3-fast-latest", + "name": "Grok 3 Fast Latest", + "family": "grok", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-08-23", - "last_updated": "2025-08-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.8 }, - "limit": { "context": 262144, "output": 262144 } - } - } - }, - "vultr": { - "id": "vultr", - "env": ["VULTR_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.vultrinference.com/v1", - "name": "Vultr", - "doc": "https://api.vultrinference.com/", - "models": { - "Kimi-K2.5": { - "id": "Kimi-K2.5", - "name": "Kimi K2 Instruct", - "family": "kimi", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-07-18", - "last_updated": "2024-07-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.55, "output": 2.75 }, - "limit": { "context": 261000, "output": 32768 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 1.25 + } }, - "MiniMax-M2.5": { - "id": "MiniMax-M2.5", - "name": "MiniMax M2.5", - "family": "minimax", - "attachment": false, - "reasoning": false, - "tool_call": true, + "grok-4.20-multi-agent-0309": { + "id": "grok-4.20-multi-agent-0309", + "name": "Grok 4.20 Multi-Agent", + "family": "grok", + "attachment": true, + "reasoning": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 196000, "output": 4096 } + "release_date": "2026-03-09", + "last_updated": "2026-03-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 2, + "output": 6, + "cache_read": 0.2, + "tiers": [ + { + "input": 4, + "output": 12, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 4, + "output": 12, + "cache_read": 0.4 + } + } }, - "GLM-5-FP8": { - "id": "GLM-5-FP8", - "name": "GLM 5 FP8", - "family": "glm", + "grok-4": { + "id": "grok-4", + "name": "Grok 4", + "family": "grok", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.85, "output": 3.1 }, - "limit": { "context": 202000, "output": 131072 } + "knowledge": "2025-07", + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "reasoning": 15, + "cache_read": 0.75 + } }, - "DeepSeek-V3.2": { - "id": "DeepSeek-V3.2", - "name": "DeepSeek V3.2", - "family": "deepseek", + "grok-2-latest": { + "id": "grok-2-latest", + "name": "Grok 2 Latest", + "family": "grok", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.55, "output": 1.65 }, - "limit": { "context": 163000, "output": 4096 } - } - } - }, - "github-models": { - "id": "github-models", - "env": ["GITHUB_TOKEN"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://models.github.ai/inference", - "name": "GitHub Models", - "doc": "https://docs.github.com/en/github-models", - "models": { - "mistral-ai/codestral-2501": { - "id": "mistral-ai/codestral-2501", - "name": "Codestral 25.01", - "family": "codestral", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-03", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-08", + "release_date": "2024-08-20", + "last_updated": "2024-12-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 32000, "output": 8192 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 2, + "output": 10, + "cache_read": 2 + } }, - "mistral-ai/mistral-large-2411": { - "id": "mistral-ai/mistral-large-2411", - "name": "Mistral Large 24.11", - "family": "mistral-large", + "grok-beta": { + "id": "grok-beta", + "name": "Grok Beta", + "family": "grok-beta", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-09", + "knowledge": "2024-08", "release_date": "2024-11-01", "last_updated": "2024-11-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 131072, + "output": 4096 + }, + "cost": { + "input": 5, + "output": 15, + "cache_read": 5 + } }, - "mistral-ai/mistral-small-2503": { - "id": "mistral-ai/mistral-small-2503", - "name": "Mistral Small 3.1", - "family": "mistral-small", - "attachment": false, - "reasoning": true, + "grok-2-vision": { + "id": "grok-2-vision", + "name": "Grok 2 Vision", + "family": "grok", + "attachment": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-09", - "release_date": "2025-03-01", - "last_updated": "2025-03-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-08", + "release_date": "2024-08-20", + "last_updated": "2024-08-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 8192, + "output": 4096 + }, + "cost": { + "input": 2, + "output": 10, + "cache_read": 2 + } }, - "mistral-ai/mistral-medium-2505": { - "id": "mistral-ai/mistral-medium-2505", - "name": "Mistral Medium 3 (25.05)", - "family": "mistral-medium", - "attachment": false, + "grok-4-1-fast": { + "id": "grok-4-1-fast", + "name": "Grok 4.1 Fast", + "family": "grok", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-09", - "release_date": "2025-05-01", - "last_updated": "2025-05-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-07", + "release_date": "2025-11-19", + "last_updated": "2025-11-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } }, - "mistral-ai/ministral-3b": { - "id": "mistral-ai/ministral-3b", - "name": "Ministral 3B", - "family": "ministral", + "grok-3-mini": { + "id": "grok-3-mini", + "name": "Grok 3 Mini", + "family": "grok", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-03", - "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 8192 } + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 0.5, + "reasoning": 0.5, + "cache_read": 0.075 + } }, - "mistral-ai/mistral-nemo": { - "id": "mistral-ai/mistral-nemo", - "name": "Mistral Nemo", - "family": "mistral-nemo", - "attachment": false, - "reasoning": true, + "grok-2-vision-1212": { + "id": "grok-2-vision-1212", + "name": "Grok 2 Vision (1212)", + "family": "grok", + "attachment": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-03", - "release_date": "2024-07-18", - "last_updated": "2024-07-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 8192 } + "knowledge": "2024-08", + "release_date": "2024-08-20", + "last_updated": "2024-12-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "output": 4096 + }, + "cost": { + "input": 2, + "output": 10, + "cache_read": 2 + } }, - "ai21-labs/ai21-jamba-1.5-mini": { - "id": "ai21-labs/ai21-jamba-1.5-mini", - "name": "AI21 Jamba 1.5 Mini", - "family": "jamba", + "grok-3": { + "id": "grok-3", + "name": "Grok 3", + "family": "grok", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-03", - "release_date": "2024-08-29", - "last_updated": "2024-08-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 256000, "output": 4096 } - }, - "ai21-labs/ai21-jamba-1.5-large": { - "id": "ai21-labs/ai21-jamba-1.5-large", - "name": "AI21 Jamba 1.5 Large", - "family": "jamba", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-03", - "release_date": "2024-08-29", - "last_updated": "2024-08-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 256000, "output": 4096 } - }, - "openai/o3-mini": { - "id": "openai/o3-mini", - "name": "OpenAI o3-mini", - "family": "o-mini", - "attachment": false, - "reasoning": true, - "tool_call": false, - "temperature": false, - "knowledge": "2024-04", - "release_date": "2025-01-31", - "last_updated": "2025-01-31", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 200000, "output": 100000 } - }, - "openai/gpt-4o": { - "id": "openai/gpt-4o", - "name": "GPT-4o", - "family": "gpt", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-05-13", - "last_updated": "2024-05-13", - "modalities": { "input": ["text", "image", "audio"], "output": ["text"] }, + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.75 + } }, - "openai/gpt-4o-mini": { - "id": "openai/gpt-4o-mini", - "name": "GPT-4o mini", - "family": "gpt-mini", + "grok-4-fast-non-reasoning": { + "id": "grok-4-fast-non-reasoning", + "name": "Grok 4 Fast (Non-Reasoning)", + "family": "grok", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-07-18", - "last_updated": "2024-07-18", - "modalities": { "input": ["text", "image", "audio"], "output": ["text"] }, + "knowledge": "2025-07", + "release_date": "2025-09-19", + "last_updated": "2025-09-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } - }, - "openai/gpt-4.1": { - "id": "openai/gpt-4.1", - "name": "GPT-4.1", - "family": "gpt", - "attachment": true, + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } + } + } + }, + "meganova": { + "id": "meganova", + "env": ["MEGANOVA_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.meganova.ai/v1", + "name": "Meganova", + "doc": "https://docs.meganova.ai", + "models": { + "Qwen/Qwen3-235B-A22B-Instruct-2507": { + "id": "Qwen/Qwen3-235B-A22B-Instruct-2507", + "name": "Qwen3 235B A22B Instruct 2507", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } - }, - "openai/o1": { - "id": "openai/o1", - "name": "OpenAI o1", - "family": "o", - "attachment": false, - "reasoning": true, - "tool_call": false, - "temperature": false, - "knowledge": "2023-10", - "release_date": "2024-09-12", - "last_updated": "2024-12-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 200000, "output": 100000 } + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.09, + "output": 0.6 + } }, - "openai/o3": { - "id": "openai/o3", - "name": "OpenAI o3", - "family": "o", + "Qwen/Qwen3.5-Plus": { + "id": "Qwen/Qwen3.5-Plus", + "name": "Qwen3.5 Plus", + "family": "qwen", "attachment": false, "reasoning": true, - "tool_call": false, - "temperature": false, - "knowledge": "2024-04", - "release_date": "2025-01-31", - "last_updated": "2025-01-31", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 200000, "output": 100000 } - }, - "openai/gpt-4.1-mini": { - "id": "openai/gpt-4.1-mini", - "name": "GPT-4.1-mini", - "family": "gpt-mini", - "attachment": true, - "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-02", + "last_updated": "2026-02", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.4, + "output": 2.4, + "reasoning": 2.4 + } }, - "openai/gpt-4.1-nano": { - "id": "openai/gpt-4.1-nano", - "name": "GPT-4.1-nano", - "family": "gpt-nano", + "Qwen/Qwen2.5-VL-32B-Instruct": { + "id": "Qwen/Qwen2.5-VL-32B-Instruct", + "name": "Qwen2.5 VL 32B Instruct", + "family": "qwen", "attachment": true, "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } - }, - "openai/o1-preview": { - "id": "openai/o1-preview", - "name": "OpenAI o1-preview", - "family": "o", - "attachment": false, - "reasoning": true, - "tool_call": false, - "temperature": false, - "knowledge": "2023-10", - "release_date": "2024-09-12", - "last_updated": "2024-09-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 32768 } - }, - "openai/o4-mini": { - "id": "openai/o4-mini", - "name": "OpenAI o4-mini", - "family": "o-mini", - "attachment": false, - "reasoning": true, - "tool_call": false, - "temperature": false, - "knowledge": "2024-04", - "release_date": "2025-01-31", - "last_updated": "2025-01-31", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 200000, "output": 100000 } - }, - "openai/o1-mini": { - "id": "openai/o1-mini", - "name": "OpenAI o1-mini", - "family": "o-mini", - "attachment": false, - "reasoning": true, - "tool_call": false, - "temperature": false, - "knowledge": "2023-10", - "release_date": "2024-09-12", - "last_updated": "2024-12-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 65536 } + "release_date": "2025-03-24", + "last_updated": "2025-03-24", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 16384, + "output": 16384 + }, + "cost": { + "input": 0.2, + "output": 0.6 + } }, - "microsoft/phi-3-mini-128k-instruct": { - "id": "microsoft/phi-3-mini-128k-instruct", - "name": "Phi-3-mini instruct (128k)", - "family": "phi", + "zai-org/GLM-4.7": { + "id": "zai-org/GLM-4.7", + "name": "GLM-4.7", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-04-23", - "last_updated": "2024-04-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 202752, + "output": 131072 + }, + "cost": { + "input": 0.2, + "output": 0.8 + } }, - "microsoft/phi-3-small-8k-instruct": { - "id": "microsoft/phi-3-small-8k-instruct", - "name": "Phi-3-small instruct (8k)", - "family": "phi", + "zai-org/GLM-5": { + "id": "zai-org/GLM-5", + "name": "GLM-5", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-04-23", - "last_updated": "2024-04-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 8192, "output": 2048 } + "limit": { + "context": 202752, + "output": 131072 + }, + "cost": { + "input": 0.8, + "output": 2.56 + } }, - "microsoft/phi-4-reasoning": { - "id": "microsoft/phi-4-reasoning", - "name": "Phi-4-Reasoning", - "family": "phi", + "zai-org/GLM-4.6": { + "id": "zai-org/GLM-4.6", + "name": "GLM-4.6", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 202752, + "output": 131072 + }, + "cost": { + "input": 0.45, + "output": 1.9 + } }, - "microsoft/phi-4-mini-reasoning": { - "id": "microsoft/phi-4-mini-reasoning", - "name": "Phi-4-mini-reasoning", - "family": "phi", - "attachment": false, - "reasoning": true, + "mistralai/Mistral-Small-3.2-24B-Instruct-2506": { + "id": "mistralai/Mistral-Small-3.2-24B-Instruct-2506", + "name": "Mistral Small 3.2 24B Instruct", + "family": "mistral-small", + "attachment": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-06-20", + "last_updated": "2025-06-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 32768, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "microsoft/phi-3-mini-4k-instruct": { - "id": "microsoft/phi-3-mini-4k-instruct", - "name": "Phi-3-mini instruct (4k)", - "family": "phi", + "mistralai/Mistral-Nemo-Instruct-2407": { + "id": "mistralai/Mistral-Nemo-Instruct-2407", + "name": "Mistral Nemo Instruct 2407", + "family": "mistral", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-04-23", - "last_updated": "2024-04-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 4096, "output": 1024 } + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.02, + "output": 0.04 + } }, - "microsoft/phi-3-medium-4k-instruct": { - "id": "microsoft/phi-3-medium-4k-instruct", - "name": "Phi-3-medium instruct (4k)", - "family": "phi", + "XiaomiMiMo/MiMo-V2-Flash": { + "id": "XiaomiMiMo/MiMo-V2-Flash", + "name": "MiMo V2 Flash", + "family": "mimo", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-04-23", - "last_updated": "2024-04-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-12-01", + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 4096, "output": 1024 } + "limit": { + "context": 262144, + "output": 32000 + }, + "cost": { + "input": 0.1, + "output": 0.3 + } }, - "microsoft/phi-3.5-vision-instruct": { - "id": "microsoft/phi-3.5-vision-instruct", - "name": "Phi-3.5-vision instruct (128k)", - "family": "phi", + "meta-llama/Llama-3.3-70B-Instruct": { + "id": "meta-llama/Llama-3.3-70B-Instruct", + "name": "Llama 3.3 70B Instruct", + "family": "llama", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-08-20", - "last_updated": "2024-08-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.1, + "output": 0.3 + } }, - "microsoft/mai-ds-r1": { - "id": "microsoft/mai-ds-r1", - "name": "MAI-DS-R1", - "family": "mai", + "deepseek-ai/DeepSeek-V3.1": { + "id": "deepseek-ai/DeepSeek-V3.1", + "name": "DeepSeek V3.1", + "family": "deepseek", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-06", - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 65536, "output": 8192 } + "release_date": "2025-08-25", + "last_updated": "2025-08-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 164000, + "output": 164000 + }, + "cost": { + "input": 0.27, + "output": 1 + } }, - "microsoft/phi-3.5-mini-instruct": { - "id": "microsoft/phi-3.5-mini-instruct", - "name": "Phi-3.5-mini instruct (128k)", - "family": "phi", + "deepseek-ai/DeepSeek-V3-0324": { + "id": "deepseek-ai/DeepSeek-V3-0324", + "name": "DeepSeek V3 0324", + "family": "deepseek", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-08-20", - "last_updated": "2024-08-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-03-24", + "last_updated": "2025-03-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 163840, + "output": 163840 + }, + "cost": { + "input": 0.25, + "output": 0.88 + } }, - "microsoft/phi-4": { - "id": "microsoft/phi-4", - "name": "Phi-4", - "family": "phi", + "deepseek-ai/DeepSeek-V3.2-Exp": { + "id": "deepseek-ai/DeepSeek-V3.2-Exp", + "name": "DeepSeek V3.2 Exp", + "family": "deepseek", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-10-10", + "last_updated": "2025-10-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 16000, "output": 4096 } + "limit": { + "context": 164000, + "output": 164000 + }, + "cost": { + "input": 0.27, + "output": 0.4 + } }, - "microsoft/phi-3-medium-128k-instruct": { - "id": "microsoft/phi-3-medium-128k-instruct", - "name": "Phi-3-medium instruct (128k)", - "family": "phi", + "deepseek-ai/DeepSeek-R1-0528": { + "id": "deepseek-ai/DeepSeek-R1-0528", + "name": "DeepSeek R1 0528", + "family": "deepseek-thinking", "attachment": false, "reasoning": true, - "tool_call": true, + "tool_call": false, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-04-23", - "last_updated": "2024-04-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-07", + "release_date": "2025-05-28", + "last_updated": "2025-05-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 163840, + "output": 64000 + }, + "cost": { + "input": 0.5, + "output": 2.15 + } }, - "microsoft/phi-3.5-moe-instruct": { - "id": "microsoft/phi-3.5-moe-instruct", - "name": "Phi-3.5-MoE instruct (128k)", - "family": "phi", + "deepseek-ai/DeepSeek-V3.2": { + "id": "deepseek-ai/DeepSeek-V3.2", + "name": "DeepSeek V3.2", + "family": "deepseek", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-08-20", - "last_updated": "2024-08-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-03", + "last_updated": "2025-12-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 164000, + "output": 164000 + }, + "cost": { + "input": 0.26, + "output": 0.38 + } }, - "microsoft/phi-4-multimodal-instruct": { - "id": "microsoft/phi-4-multimodal-instruct", - "name": "Phi-4-multimodal-instruct", - "family": "phi", + "moonshotai/Kimi-K2-Thinking": { + "id": "moonshotai/Kimi-K2-Thinking", + "name": "Kimi K2 Thinking", + "family": "kimi-thinking", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text", "image", "audio"], "output": ["text"] }, + "knowledge": "2024-08", + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 2.6 + } }, - "microsoft/phi-3-small-128k-instruct": { - "id": "microsoft/phi-3-small-128k-instruct", - "name": "Phi-3-small instruct (128k)", - "family": "phi", + "moonshotai/Kimi-K2.5": { + "id": "moonshotai/Kimi-K2.5", + "name": "Kimi K2.5", + "family": "kimi", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-04-23", - "last_updated": "2024-04-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2026-01", + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.45, + "output": 2.8 + } }, - "microsoft/phi-4-mini-instruct": { - "id": "microsoft/phi-4-mini-instruct", - "name": "Phi-4-mini-instruct", - "family": "phi", + "MiniMaxAI/MiniMax-M2.5": { + "id": "MiniMaxAI/MiniMax-M2.5", + "name": "MiniMax M2.5", + "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2023-10", - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "cohere/cohere-command-r-plus-08-2024": { - "id": "cohere/cohere-command-r-plus-08-2024", - "name": "Cohere Command R+ 08-2024", - "family": "command-r", + "MiniMaxAI/MiniMax-M2.1": { + "id": "MiniMaxAI/MiniMax-M2.1", + "name": "MiniMax M2.1", + "family": "minimax", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-03", - "release_date": "2024-08-01", - "last_updated": "2024-08-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 196608, + "output": 131072 + }, + "cost": { + "input": 0.28, + "output": 1.2 + } + } + } + }, + "google-vertex-anthropic": { + "id": "google-vertex-anthropic", + "env": ["GOOGLE_VERTEX_PROJECT", "GOOGLE_VERTEX_LOCATION", "GOOGLE_APPLICATION_CREDENTIALS"], + "npm": "@ai-sdk/google-vertex/anthropic", + "name": "Vertex (Anthropic)", + "doc": "https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/claude", + "models": { + "claude-haiku-4-5@20251001": { + "id": "claude-haiku-4-5@20251001", + "name": "Claude Haiku 4.5", + "family": "claude-haiku", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } }, - "cohere/cohere-command-r": { - "id": "cohere/cohere-command-r", - "name": "Cohere Command R", - "family": "command-r", - "attachment": false, + "claude-sonnet-4-6@default": { + "id": "claude-sonnet-4-6@default", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-03", - "release_date": "2024-03-11", - "last_updated": "2024-08-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75, + "context_over_200k": { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5 + }, + "tiers": [ + { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ] + } }, - "cohere/cohere-command-r-08-2024": { - "id": "cohere/cohere-command-r-08-2024", - "name": "Cohere Command R 08-2024", - "family": "command-r", - "attachment": false, + "claude-3-5-haiku@20241022": { + "id": "claude-3-5-haiku@20241022", + "name": "Claude Haiku 3.5", + "family": "claude-haiku", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-03", - "release_date": "2024-08-01", - "last_updated": "2024-08-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-07-31", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 0.8, + "output": 4, + "cache_read": 0.08, + "cache_write": 1 + } }, - "cohere/cohere-command-r-plus": { - "id": "cohere/cohere-command-r-plus", - "name": "Cohere Command R+", - "family": "command-r", - "attachment": false, + "claude-3-5-sonnet@20241022": { + "id": "claude-3-5-sonnet@20241022", + "name": "Claude Sonnet 3.5 v2", + "family": "claude-sonnet", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-03", - "release_date": "2024-04-04", - "last_updated": "2024-08-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04-30", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "cohere/cohere-command-a": { - "id": "cohere/cohere-command-a", - "name": "Cohere Command A", - "family": "command-a", - "attachment": false, + "claude-opus-4-1@20250805": { + "id": "claude-opus-4-1@20250805", + "name": "Claude Opus 4.1", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-03", - "release_date": "2024-11-01", - "last_updated": "2024-11-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-03-31", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "deepseek/deepseek-v3-0324": { - "id": "deepseek/deepseek-v3-0324", - "name": "DeepSeek-V3-0324", - "family": "deepseek", - "attachment": false, + "claude-sonnet-4@20250514": { + "id": "claude-sonnet-4@20250514", + "name": "Claude Sonnet 4", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-06", - "release_date": "2025-03-24", - "last_updated": "2025-03-24", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 8192 } + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "deepseek/deepseek-r1": { - "id": "deepseek/deepseek-r1", - "name": "DeepSeek-R1", - "family": "deepseek-thinking", - "attachment": false, + "claude-3-7-sonnet@20250219": { + "id": "claude-3-7-sonnet@20250219", + "name": "Claude Sonnet 3.7", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-06", - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 65536, "output": 8192 } + "knowledge": "2024-10-31", + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "deepseek/deepseek-r1-0528": { - "id": "deepseek/deepseek-r1-0528", - "name": "DeepSeek-R1-0528", - "family": "deepseek-thinking", - "attachment": false, + "claude-opus-4@20250514": { + "id": "claude-opus-4@20250514", + "name": "Claude Opus 4", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-06", - "release_date": "2025-05-28", - "last_updated": "2025-05-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 65536, "output": 8192 } + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "xai/grok-3-mini": { - "id": "xai/grok-3-mini", - "name": "Grok 3 Mini", - "family": "grok", - "attachment": false, + "claude-opus-4-5@20251101": { + "id": "claude-opus-4-5@20251101", + "name": "Claude Opus 4.5", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-12-09", - "last_updated": "2024-12-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-03-31", + "release_date": "2025-11-01", + "last_updated": "2025-11-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "xai/grok-3": { - "id": "xai/grok-3", - "name": "Grok 3", - "family": "grok", - "attachment": false, + "claude-sonnet-4-5@20250929": { + "id": "claude-sonnet-4-5@20250929", + "name": "Claude Sonnet 4.5", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-12-09", - "last_updated": "2024-12-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "core42/jais-30b-chat": { - "id": "core42/jais-30b-chat", - "name": "JAIS 30b Chat", - "family": "jais", - "attachment": false, + "claude-opus-4-6@default": { + "id": "claude-opus-4-6@default", + "name": "Claude Opus 4.6", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2023-03", - "release_date": "2023-08-30", - "last_updated": "2023-08-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 8192, "output": 2048 } + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25, + "context_over_200k": { + "input": 10, + "output": 37.5, + "cache_read": 1, + "cache_write": 12.5 + }, + "tiers": [ + { + "input": 10, + "output": 37.5, + "cache_read": 1, + "cache_write": 12.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ] + } }, - "meta/meta-llama-3.1-8b-instruct": { - "id": "meta/meta-llama-3.1-8b-instruct", - "name": "Meta-Llama-3.1-8B-Instruct", - "family": "llama", - "attachment": false, + "claude-opus-4-7@default": { + "id": "claude-opus-4-7@default", + "name": "Claude Opus 4.7", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25, + "context_over_200k": { + "input": 10, + "output": 37.5, + "cache_read": 1, + "cache_write": 12.5 + }, + "tiers": [ + { + "input": 10, + "output": 37.5, + "cache_read": 1, + "cache_write": 12.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ] + } + } + } + }, + "evroc": { + "id": "evroc", + "env": ["EVROC_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://models.think.evroc.com/v1", + "name": "evroc", + "doc": "https://docs.evroc.com/products/think/overview.html", + "models": { + "Qwen/Qwen3-VL-30B-A3B-Instruct": { + "id": "Qwen/Qwen3-VL-30B-A3B-Instruct", + "name": "Qwen3 VL 30B", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "release_date": "2025-07-30", + "last_updated": "2025-07-30", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 100000, + "output": 100000 + }, + "cost": { + "input": 0.24, + "output": 0.94 + } }, - "meta/llama-3.3-70b-instruct": { - "id": "meta/llama-3.3-70b-instruct", - "name": "Llama-3.3-70B-Instruct", - "family": "llama", + "Qwen/Qwen3-Embedding-8B": { + "id": "Qwen/Qwen3-Embedding-8B", + "name": "Qwen3 Embedding 8B", + "family": "text-embedding", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "release_date": "2025-07-30", + "last_updated": "2025-07-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 40960, + "output": 40960 + }, + "cost": { + "input": 0.12, + "output": 0.12 + } }, - "meta/llama-4-scout-17b-16e-instruct": { - "id": "meta/llama-4-scout-17b-16e-instruct", - "name": "Llama 4 Scout 17B 16E Instruct", - "family": "llama", + "Qwen/Qwen3-30B-A3B-Instruct-2507-FP8": { + "id": "Qwen/Qwen3-30B-A3B-Instruct-2507-FP8", + "name": "Qwen3 30B 2507", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-01-31", - "last_updated": "2025-01-31", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-07-30", + "last_updated": "2025-07-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 64000, + "output": 64000 + }, + "cost": { + "input": 0.35, + "output": 1.42 + } }, - "meta/llama-3.2-11b-vision-instruct": { - "id": "meta/llama-3.2-11b-vision-instruct", - "name": "Llama-3.2-11B-Vision-Instruct", - "family": "llama", + "mistralai/devstral-small-2-24b-instruct-2512": { + "id": "mistralai/devstral-small-2-24b-instruct-2512", + "name": "Devstral Small 2 24B Instruct 2512", + "family": "devstral", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-09-25", - "last_updated": "2024-09-25", - "modalities": { "input": ["text", "image", "audio"], "output": ["text"] }, + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.12, + "output": 0.47 + } }, - "meta/meta-llama-3-70b-instruct": { - "id": "meta/meta-llama-3-70b-instruct", - "name": "Meta-Llama-3-70B-Instruct", - "family": "llama", + "mistralai/Voxtral-Small-24B-2507": { + "id": "mistralai/Voxtral-Small-24B-2507", + "name": "Voxtral Small 24B", + "family": "voxtral", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-04-18", - "last_updated": "2024-04-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "release_date": "2025-03-01", + "last_updated": "2025-03-01", + "modalities": { + "input": ["audio", "text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 8192, "output": 2048 } + "limit": { + "context": 32000, + "output": 32000 + }, + "cost": { + "input": 0.00236, + "output": 0.00236, + "output_audio": 2.36 + } }, - "meta/meta-llama-3-8b-instruct": { - "id": "meta/meta-llama-3-8b-instruct", - "name": "Meta-Llama-3-8B-Instruct", - "family": "llama", + "mistralai/Magistral-Small-2509": { + "id": "mistralai/Magistral-Small-2509", + "name": "Magistral Small 1.2 24B", + "family": "magistral-small", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-04-18", - "last_updated": "2024-04-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "release_date": "2025-06-01", + "last_updated": "2025-06-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 8192, "output": 2048 } + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.59, + "output": 2.36 + } }, - "meta/llama-3.2-90b-vision-instruct": { - "id": "meta/llama-3.2-90b-vision-instruct", - "name": "Llama-3.2-90B-Vision-Instruct", - "family": "llama", + "microsoft/Phi-4-multimodal-instruct": { + "id": "microsoft/Phi-4-multimodal-instruct", + "name": "Phi-4 15B", + "family": "phi", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-09-25", - "last_updated": "2024-09-25", - "modalities": { "input": ["text", "image", "audio"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 32000, + "output": 32000 + }, + "cost": { + "input": 0.24, + "output": 0.47 + } }, - "meta/meta-llama-3.1-405b-instruct": { - "id": "meta/meta-llama-3.1-405b-instruct", - "name": "Meta-Llama-3.1-405B-Instruct", - "family": "llama", + "KBLab/kb-whisper-large": { + "id": "KBLab/kb-whisper-large", + "name": "KB Whisper", + "family": "whisper", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "release_date": "2024-10-01", + "last_updated": "2024-10-01", + "modalities": { + "input": ["audio"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 448, + "output": 448 + }, + "cost": { + "input": 0.00236, + "output": 0.00236, + "output_audio": 2.36 + } }, - "meta/llama-4-maverick-17b-128e-instruct-fp8": { - "id": "meta/llama-4-maverick-17b-128e-instruct-fp8", - "name": "Llama 4 Maverick 17B 128E Instruct FP8", + "nvidia/Llama-3.3-70B-Instruct-FP8": { + "id": "nvidia/Llama-3.3-70B-Instruct-FP8", + "name": "Llama 3.3 70B", "family": "llama", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-12", - "release_date": "2025-01-31", - "last_updated": "2025-01-31", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "reasoning": false, + "tool_call": false, + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 1.18, + "output": 1.18 + } + }, + "openai/whisper-large-v3": { + "id": "openai/whisper-large-v3", + "name": "Whisper 3 Large", + "family": "whisper", + "attachment": false, + "reasoning": false, + "tool_call": false, + "release_date": "2024-10-01", + "last_updated": "2024-10-01", + "modalities": { + "input": ["audio"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 448, + "output": 4096 + }, + "cost": { + "input": 0.00236, + "output": 0.00236, + "output_audio": 2.36 + } }, - "meta/meta-llama-3.1-70b-instruct": { - "id": "meta/meta-llama-3.1-70b-instruct", - "name": "Meta-Llama-3.1-70B-Instruct", - "family": "llama", + "openai/gpt-oss-120b": { + "id": "openai/gpt-oss-120b", + "name": "GPT OSS 120B", + "family": "gpt-oss", "attachment": false, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2023-12", - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 32768 } - } + "limit": { + "context": 65536, + "output": 65536 + }, + "cost": { + "input": 0.24, + "output": 0.94 + } + }, + "moonshotai/Kimi-K2.5": { + "id": "moonshotai/Kimi-K2.5", + "name": "Kimi K2.5", + "family": "kimi", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 1.47, + "output": 5.9 + } + }, + "intfloat/multilingual-e5-large-instruct": { + "id": "intfloat/multilingual-e5-large-instruct", + "name": "E5 Multi-Lingual Large Embeddings 0.6B", + "family": "text-embedding", + "attachment": false, + "reasoning": false, + "tool_call": false, + "release_date": "2024-06-01", + "last_updated": "2024-06-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 512, + "output": 512 + }, + "cost": { + "input": 0.12, + "output": 0.12 + } + } } }, - "nano-gpt": { - "id": "nano-gpt", - "env": ["NANO_GPT_API_KEY"], + "synthetic": { + "id": "synthetic", + "env": ["SYNTHETIC_API_KEY"], "npm": "@ai-sdk/openai-compatible", - "api": "https://nano-gpt.com/api/v1", - "name": "NanoGPT", - "doc": "https://docs.nano-gpt.com", + "api": "https://api.synthetic.new/openai/v1", + "name": "Synthetic", + "doc": "https://synthetic.new/pricing", "models": { - "claude-opus-4-thinking": { - "id": "claude-opus-4-thinking", - "name": "Claude 4 Opus Thinking", - "attachment": true, + "hf:meta-llama/Llama-3.1-405B-Instruct": { + "id": "hf:meta-llama/Llama-3.1-405B-Instruct", + "name": "Llama-3.1-405B-Instruct", + "family": "llama", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2025-07-15", - "last_updated": "2025-07-15", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 14.994, "output": 75.004 }, - "limit": { "context": 200000, "input": 200000, "output": 32000 } + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 3, + "output": 3 + } }, - "qwen3-coder-30b-a3b-instruct": { - "id": "qwen3-coder-30b-a3b-instruct", - "name": "Qwen3 Coder 30B A3B Instruct", - "attachment": false, + "hf:meta-llama/Llama-4-Scout-17B-16E-Instruct": { + "id": "hf:meta-llama/Llama-4-Scout-17B-16E-Instruct", + "name": "Llama-4-Scout-17B-16E-Instruct", + "family": "llama", + "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4 }, - "limit": { "context": 128000, "input": 128000, "output": 65536 } + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 328000, + "output": 4096 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "brave-research": { - "id": "brave-research", - "name": "Brave (Research)", + "hf:meta-llama/Llama-3.3-70B-Instruct": { + "id": "hf:meta-llama/Llama-3.3-70B-Instruct", + "name": "Llama-3.3-70B-Instruct", + "family": "llama", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2023-03-02", - "last_updated": "2024-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 5, "output": 5 }, - "limit": { "context": 16384, "input": 16384, "output": 16384 } + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.9, + "output": 0.9 + } }, - "jamba-large-1.7": { - "id": "jamba-large-1.7", - "name": "Jamba Large 1.7", + "hf:meta-llama/Llama-3.1-8B-Instruct": { + "id": "hf:meta-llama/Llama-3.1-8B-Instruct", + "name": "Llama-3.1-8B-Instruct", + "family": "llama", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.989, "output": 7.99 }, - "limit": { "context": 256000, "input": 256000, "output": 4096 } - }, - "gemini-2.5-flash-lite": { - "id": "gemini-2.5-flash-lite", - "name": "Gemini 2.5 Flash Lite", - "attachment": true, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4 }, - "limit": { "context": 1048756, "input": 1048756, "output": 65536 } + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.2, + "output": 0.2 + } }, - "azure-o3-mini": { - "id": "azure-o3-mini", - "name": "Azure o3-mini", + "hf:meta-llama/Llama-3.1-70B-Instruct": { + "id": "hf:meta-llama/Llama-3.1-70B-Instruct", + "name": "Llama-3.1-70B-Instruct", + "family": "llama", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-01-31", - "last_updated": "2025-01-31", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.088, "output": 4.3996 }, - "limit": { "context": 200000, "input": 200000, "output": 65536 } - }, - "claude-sonnet-4-thinking:8192": { - "id": "claude-sonnet-4-thinking:8192", - "name": "Claude 4 Sonnet Thinking (8K)", - "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.992, "output": 14.994 }, - "limit": { "context": 1000000, "input": 1000000, "output": 64000 } + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.9, + "output": 0.9 + } }, - "ernie-x1-32k": { - "id": "ernie-x1-32k", - "name": "Ernie X1 32k", + "hf:meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8": { + "id": "hf:meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8", + "name": "Llama-4-Maverick-17B-128E-Instruct-FP8", + "family": "llama", "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-05-08", - "last_updated": "2025-05-08", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.33, "output": 1.32 }, - "limit": { "context": 32000, "input": 32000, "output": 16384 } + "tool_call": true, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 524000, + "output": 4096 + }, + "cost": { + "input": 0.22, + "output": 0.88 + } }, - "exa-answer": { - "id": "exa-answer", - "name": "Exa (Answer)", + "hf:MiniMaxAI/MiniMax-M2": { + "id": "hf:MiniMaxAI/MiniMax-M2", + "name": "MiniMax-M2", + "family": "minimax", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-06-04", - "last_updated": "2025-06-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.5, "output": 2.5 }, - "limit": { "context": 4096, "input": 4096, "output": 4096 } + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-10-27", + "last_updated": "2025-10-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 196608, + "output": 131000 + }, + "cost": { + "input": 0.55, + "output": 2.19 + } }, - "KAT-Coder-Pro-V1": { - "id": "KAT-Coder-Pro-V1", - "name": "KAT Coder Pro V1", + "hf:MiniMaxAI/MiniMax-M2.5": { + "id": "hf:MiniMaxAI/MiniMax-M2.5", + "name": "MiniMax-M2.5", + "family": "minimax", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-10-28", - "last_updated": "2025-10-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.5, "output": 6 }, - "limit": { "context": 256000, "input": 256000, "output": 32768 } - }, - "ernie-4.5-turbo-128k": { - "id": "ernie-4.5-turbo-128k", - "name": "Ernie 4.5 Turbo 128k", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-05-08", - "last_updated": "2025-05-08", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.132, "output": 0.55 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } - }, - "claude-opus-4-5-20251101": { - "id": "claude-opus-4-5-20251101", - "name": "Claude 4.5 Opus", - "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, - "release_date": "2025-11-01", - "last_updated": "2025-11-01", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 4.998, "output": 25.007 }, - "limit": { "context": 200000, "input": 200000, "output": 32000 } - }, - "deepclaude": { - "id": "deepclaude", - "name": "DeepClaude", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-02-01", - "last_updated": "2025-02-01", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 128000, "input": 128000, "output": 8192 } - }, - "Llama-3.3-70B-Forgotten-Abomination-v5.0": { - "id": "Llama-3.3-70B-Forgotten-Abomination-v5.0", - "name": "Llama 3.3 70B Forgotten Abomination v5.0", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } - }, - "qwen-image": { - "id": "qwen-image", - "name": "Qwen Image", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, "temperature": true, - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["image"] }, - "open_weights": false, - "limit": { "context": 0, "output": 0 } - }, - "gemini-2.5-pro-exp-03-25": { - "id": "gemini-2.5-pro-exp-03-25", - "name": "Gemini 2.5 Pro Experimental 0325", - "attachment": true, - "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-03-25", - "last_updated": "2025-03-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 1048756, "input": 1048756, "output": 65536 } - }, - "mistral-small-31-24b-instruct": { - "id": "mistral-small-31-24b-instruct", - "name": "Mistral Small 31 24b Instruct", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-04-15", - "last_updated": "2025-04-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 128000, "input": 128000, "output": 131072 } + "release_date": "2026-02-07", + "last_updated": "2026-02-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 191488, + "output": 65536 + }, + "cost": { + "input": 0.6, + "output": 3, + "cache_read": 0.6 + } }, - "claude-sonnet-4-thinking:1024": { - "id": "claude-sonnet-4-thinking:1024", - "name": "Claude 4 Sonnet Thinking (1K)", - "attachment": true, + "hf:MiniMaxAI/MiniMax-M2.1": { + "id": "hf:MiniMaxAI/MiniMax-M2.1", + "name": "MiniMax-M2.1", + "family": "minimax", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.992, "output": 14.994 }, - "limit": { "context": 1000000, "input": 1000000, "output": 64000 } + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.55, + "output": 2.19 + } }, - "claude-opus-4-1-thinking": { - "id": "claude-opus-4-1-thinking", - "name": "Claude 4.1 Opus Thinking", - "attachment": true, + "hf:Qwen/Qwen3.5-397B-A17B": { + "id": "hf:Qwen/Qwen3.5-397B-A17B", + "name": "Qwen3.5-97B-A17B", + "family": "qwen", + "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 14.994, "output": 75.004 }, - "limit": { "context": 200000, "input": 200000, "output": 32000 } + "temperature": true, + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "status": "beta", + "cost": { + "input": 0.6, + "output": 3, + "cache_read": 0.6 + } }, - "jamba-large-1.6": { - "id": "jamba-large-1.6", - "name": "Jamba Large 1.6", + "hf:Qwen/Qwen2.5-Coder-32B-Instruct": { + "id": "hf:Qwen/Qwen2.5-Coder-32B-Instruct", + "name": "Qwen2.5-Coder-32B-Instruct", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-03-12", - "last_updated": "2025-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.989, "output": 7.99 }, - "limit": { "context": 256000, "input": 256000, "output": 4096 } + "temperature": true, + "knowledge": "2024-10", + "release_date": "2024-11-11", + "last_updated": "2024-11-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.8, + "output": 0.8 + } }, - "universal-summarizer": { - "id": "universal-summarizer", - "name": "Universal Summarizer", + "hf:Qwen/Qwen3-235B-A22B-Instruct-2507": { + "id": "hf:Qwen/Qwen3-235B-A22B-Instruct-2507", + "name": "Qwen 3 235B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2023-05-01", - "last_updated": "2024-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 30, "output": 30 }, - "limit": { "context": 32768, "input": 32768, "output": 32768 } + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04-28", + "last_updated": "2025-07-21", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 32000 + }, + "cost": { + "input": 0.2, + "output": 0.6 + } }, - "Llama-3.3-70B-Bigger-Body": { - "id": "Llama-3.3-70B-Bigger-Body", - "name": "Llama 3.3 70B Bigger Body", + "hf:Qwen/Qwen3-235B-A22B-Thinking-2507": { + "id": "hf:Qwen/Qwen3-235B-A22B-Thinking-2507", + "name": "Qwen3 235B A22B Thinking 2507", + "family": "qwen", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-25", + "last_updated": "2025-07-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 32000 + }, + "cost": { + "input": 0.65, + "output": 3 + } }, - "doubao-seed-2-0-pro-260215": { - "id": "doubao-seed-2-0-pro-260215", - "name": "Doubao Seed 2.0 Pro", + "hf:Qwen/Qwen3-Coder-480B-A35B-Instruct": { + "id": "hf:Qwen/Qwen3-Coder-480B-A35B-Instruct", + "name": "Qwen 3 Coder 480B", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2026-02-14", - "last_updated": "2026-02-14", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.782, "output": 3.876 }, - "limit": { "context": 256000, "input": 256000, "output": 128000 } + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 32000 + }, + "cost": { + "input": 2, + "output": 2 + } }, - "Llama-3.3-70B-Progenitor-V3.3": { - "id": "Llama-3.3-70B-Progenitor-V3.3", - "name": "Llama 3.3 70B Progenitor V3.3", + "hf:deepseek-ai/DeepSeek-V3.1": { + "id": "hf:deepseek-ai/DeepSeek-V3.1", + "name": "DeepSeek V3.1", + "family": "deepseek", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-26", - "last_updated": "2025-07-26", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } - }, - "claude-opus-4-1-thinking:32768": { - "id": "claude-opus-4-1-thinking:32768", - "name": "Claude 4.1 Opus Thinking (32K)", - "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": true, + "release_date": "2025-08-21", + "last_updated": "2025-08-21", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 14.994, "output": 75.004 }, - "limit": { "context": 200000, "input": 200000, "output": 32000 } + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.56, + "output": 1.68 + } }, - "doubao-seed-1-6-thinking-250615": { - "id": "doubao-seed-1-6-thinking-250615", - "name": "Doubao Seed 1.6 Thinking", + "hf:deepseek-ai/DeepSeek-V3-0324": { + "id": "hf:deepseek-ai/DeepSeek-V3-0324", + "name": "DeepSeek V3 (0324)", + "family": "deepseek", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-06-15", - "last_updated": "2025-06-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "release_date": "2025-08-01", + "last_updated": "2025-08-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.204, "output": 2.04 }, - "limit": { "context": 256000, "input": 256000, "output": 16384 } + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 1.2, + "output": 1.2 + } }, - "Llama-3.3-70B-Fallen-v1": { - "id": "Llama-3.3-70B-Fallen-v1", - "name": "Llama 3.3 70B Fallen v1", + "hf:deepseek-ai/DeepSeek-V3": { + "id": "hf:deepseek-ai/DeepSeek-V3", + "name": "DeepSeek V3", + "family": "deepseek", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } - }, - "glm-zero-preview": { - "id": "glm-zero-preview", - "name": "GLM Zero Preview", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.802, "output": 1.802 }, - "limit": { "context": 8000, "input": 8000, "output": 4096 } - }, - "Llama-3.3-70B-MS-Nevoria": { - "id": "Llama-3.3-70B-MS-Nevoria", - "name": "Llama 3.3 70B MS Nevoria", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-01-20", + "last_updated": "2025-05-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 1.25 + } }, - "qwen-turbo": { - "id": "qwen-turbo", - "name": "Qwen Turbo", + "hf:deepseek-ai/DeepSeek-R1": { + "id": "hf:deepseek-ai/DeepSeek-R1", + "name": "DeepSeek R1", + "family": "deepseek-thinking", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-11-01", - "last_updated": "2024-11-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.04998, "output": 0.2006 }, - "limit": { "context": 1000000, "input": 1000000, "output": 8192 } + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.55, + "output": 2.19 + } }, - "glm-z1-air": { - "id": "glm-z1-air", - "name": "GLM Z1 Air", + "hf:deepseek-ai/DeepSeek-R1-0528": { + "id": "hf:deepseek-ai/DeepSeek-R1-0528", + "name": "DeepSeek R1 (0528)", + "family": "deepseek-thinking", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2025-04-15", - "last_updated": "2025-04-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "release_date": "2025-08-01", + "last_updated": "2025-08-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.07, "output": 0.07 }, - "limit": { "context": 32000, "input": 32000, "output": 16384 } + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 3, + "output": 8 + } }, - "deepseek-v3-0324": { - "id": "deepseek-v3-0324", - "name": "DeepSeek Chat 0324", + "hf:deepseek-ai/DeepSeek-V3.2": { + "id": "hf:deepseek-ai/DeepSeek-V3.2", + "name": "DeepSeek V3.2", + "family": "deepseek", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-03-24", - "last_updated": "2025-03-24", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 0.7 }, - "limit": { "context": 128000, "input": 128000, "output": 8192 } + "temperature": true, + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 162816, + "input": 162816, + "output": 8000 + }, + "cost": { + "input": 0.27, + "output": 0.4, + "cache_read": 0.27, + "cache_write": 0 + } }, - "gemini-2.5-flash-lite-preview-09-2025": { - "id": "gemini-2.5-flash-lite-preview-09-2025", - "name": "Gemini 2.5 Flash Lite Preview (09/2025)", - "attachment": true, + "hf:deepseek-ai/DeepSeek-V3.1-Terminus": { + "id": "hf:deepseek-ai/DeepSeek-V3.1-Terminus", + "name": "DeepSeek V3.1 Terminus", + "family": "deepseek", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2025-09-25", + "temperature": true, + "release_date": "2025-09-22", "last_updated": "2025-09-25", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.4 }, - "limit": { "context": 1048756, "input": 1048756, "output": 65536 } + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 1.2, + "output": 1.2 + } }, - "qwq-32b": { - "id": "qwq-32b", - "name": "Qwen: QwQ 32B", + "hf:openai/gpt-oss-120b": { + "id": "hf:openai/gpt-oss-120b", + "name": "GPT OSS 120B", + "family": "gpt-oss", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-04-15", - "last_updated": "2025-04-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25599999, "output": 0.30499999 }, - "limit": { "context": 128000, "input": 128000, "output": 32768 } + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } }, - "command-a-reasoning-08-2025": { - "id": "command-a-reasoning-08-2025", - "name": "Cohere Command A (08/2025)", + "hf:moonshotai/Kimi-K2-Thinking": { + "id": "hf:moonshotai/Kimi-K2-Thinking", + "name": "Kimi K2 Thinking", + "family": "kimi-thinking", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-08-22", - "last_updated": "2025-08-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 256000, "input": 256000, "output": 8192 } + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-11", + "release_date": "2025-11-07", + "last_updated": "2025-11-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.55, + "output": 2.19 + } }, - "GLM-4.5-Air-Derestricted-Iceblink-ReExtract": { - "id": "GLM-4.5-Air-Derestricted-Iceblink-ReExtract", - "name": "GLM 4.5 Air Derestricted Iceblink ReExtract", + "hf:moonshotai/Kimi-K2-Instruct-0905": { + "id": "hf:moonshotai/Kimi-K2-Instruct-0905", + "name": "Kimi K2 0905", + "family": "kimi", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-12-12", - "last_updated": "2025-12-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 131072, "input": 131072, "output": 98304 } + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 1.2, + "output": 1.2 + } }, - "Llama-3.3-70B-Mokume-Gane-R1": { - "id": "Llama-3.3-70B-Mokume-Gane-R1", - "name": "Llama 3.3 70B Mokume Gane R1", + "hf:moonshotai/Kimi-K2.5": { + "id": "hf:moonshotai/Kimi-K2.5", + "name": "Kimi K2.5", + "family": "kimi", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } - }, - "doubao-1-5-thinking-vision-pro-250428": { - "id": "doubao-1-5-thinking-vision-pro-250428", - "name": "Doubao 1.5 Thinking Vision Pro", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-05-15", - "last_updated": "2025-05-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.55, "output": 1.43 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.55, + "output": 2.19 + } }, - "Llama-3.3+(3v3.3)-70B-TenyxChat-DaybreakStorywriter": { - "id": "Llama-3.3+(3v3.3)-70B-TenyxChat-DaybreakStorywriter", - "name": "Llama 3.3+ 70B TenyxChat DaybreakStorywriter", + "hf:nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4": { + "id": "hf:nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4", + "name": "Nemotron 3 Super 120B", + "family": "nemotron", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2026-03-11", + "last_updated": "2026-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 1, + "cache_read": 0.3 + } }, - "deepseek-r1": { - "id": "deepseek-r1", - "name": "DeepSeek R1", + "hf:nvidia/Kimi-K2.5-NVFP4": { + "id": "hf:nvidia/Kimi-K2.5-NVFP4", + "name": "Kimi K2.5 (NVFP4)", + "family": "kimi", "attachment": false, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.4, "output": 1.7 }, - "limit": { "context": 128000, "input": 128000, "output": 8192 } + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.55, + "output": 2.19 + } }, - "QwQ-32B-ArliAI-RpR-v1": { - "id": "QwQ-32B-ArliAI-RpR-v1", - "name": "QwQ 32b Arli V1", + "hf:zai-org/GLM-4.7-Flash": { + "id": "hf:zai-org/GLM-4.7-Flash", + "name": "GLM-4.7-Flash", + "family": "glm", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 32768, "input": 32768, "output": 32768 } + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": true, + "release_date": "2026-01-18", + "last_updated": "2026-01-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 196608, + "output": 65536 + }, + "cost": { + "input": 0.06, + "output": 0.4, + "cache_read": 0.06 + } }, - "GLM-4.6-Derestricted-v5": { - "id": "GLM-4.6-Derestricted-v5", - "name": "GLM 4.6 Derestricted v5", + "hf:zai-org/GLM-4.7": { + "id": "hf:zai-org/GLM-4.7", + "name": "GLM 4.7", + "family": "glm", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.4, "output": 1.5 }, - "limit": { "context": 131072, "input": 131072, "output": 8192 } + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 0.55, + "output": 2.19 + } }, - "qwen-max": { - "id": "qwen-max", - "name": "Qwen 2.5 Max", + "hf:zai-org/GLM-5.1": { + "id": "hf:zai-org/GLM-5.1", + "name": "GLM 5.1", + "family": "glm", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-04-03", - "last_updated": "2024-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.5997, "output": 6.392 }, - "limit": { "context": 32000, "input": 32000, "output": 8192 } + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": true, + "release_date": "2026-03-27", + "last_updated": "2026-04-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 196608, + "output": 65536 + }, + "cost": { + "input": 1, + "output": 3, + "cache_read": 1 + } }, - "glm-4": { - "id": "glm-4", - "name": "GLM-4", + "hf:zai-org/GLM-5": { + "id": "hf:zai-org/GLM-5", + "name": "GLM-5", + "family": "glm", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-01-16", - "last_updated": "2024-01-16", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 14.994, "output": 14.994 }, - "limit": { "context": 128000, "input": 128000, "output": 4096 } - }, - "qvq-max": { - "id": "qvq-max", - "name": "Qwen: QvQ Max", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-03-28", - "last_updated": "2025-03-28", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.4, "output": 5.3 }, - "limit": { "context": 128000, "input": 128000, "output": 8192 } - }, - "claude-opus-4-20250514": { - "id": "claude-opus-4-20250514", - "name": "Claude 4 Opus", - "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, - "release_date": "2025-05-14", - "last_updated": "2025-05-14", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 14.994, "output": 75.004 }, - "limit": { "context": 200000, "input": 200000, "output": 32000 } + "temperature": true, + "release_date": "2026-02-12", + "last_updated": "2026-04-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 196608, + "output": 65536 + }, + "cost": { + "input": 1, + "output": 3, + "cache_read": 1 + } }, - "gemini-2.5-flash-preview-04-17": { - "id": "gemini-2.5-flash-preview-04-17", - "name": "Gemini 2.5 Flash Preview", - "attachment": true, + "hf:zai-org/GLM-4.6": { + "id": "hf:zai-org/GLM-4.6", + "name": "GLM 4.6", + "family": "glm", + "attachment": false, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-04-17", - "last_updated": "2025-04-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 1048756, "input": 1048756, "output": 65536 } + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 0.55, + "output": 2.19 + } }, - "claude-opus-4-thinking:32000": { - "id": "claude-opus-4-thinking:32000", - "name": "Claude 4 Opus Thinking (32K)", + "hf:moonshotai/Kimi-K2.6": { + "id": "hf:moonshotai/Kimi-K2.6", + "name": "Kimi K2.6", + "family": "kimi-k2.6", "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 14.994, "output": 75.004 }, - "limit": { "context": 200000, "input": 200000, "output": 32000 } - }, - "qwen-long": { - "id": "qwen-long", - "name": "Qwen Long 10M", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-01-25", - "last_updated": "2025-01-25", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1003, "output": 0.408 }, - "limit": { "context": 10000000, "input": 10000000, "output": 8192 } - }, - "Llama-3.3-70B-GeneticLemonade-Opus": { - "id": "Llama-3.3-70B-GeneticLemonade-Opus", - "name": "Llama 3.3 70B GeneticLemonade Opus", + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.95, + "output": 4, + "cache_read": 0.95 + } + } + } + }, + "nvidia": { + "id": "nvidia", + "env": ["NVIDIA_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://integrate.api.nvidia.com/v1", + "name": "Nvidia", + "doc": "https://docs.api.nvidia.com/nim/", + "models": { + "upstage/solar-10_7b-instruct": { + "id": "upstage/solar-10_7b-instruct", + "name": "solar-10.7b-instruct", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "tool_call": true, + "temperature": true, + "release_date": "2024-06-05", + "last_updated": "2025-04-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "doubao-1.5-pro-32k": { - "id": "doubao-1.5-pro-32k", - "name": "Doubao 1.5 Pro 32k", + "black-forest-labs/flux_2-klein-4b": { + "id": "black-forest-labs/flux_2-klein-4b", + "name": "FLUX.2 Klein 4B", + "family": "flux", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-01-22", - "last_updated": "2025-01-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1343, "output": 0.3349 }, - "limit": { "context": 32000, "input": 32000, "output": 8192 } + "temperature": true, + "knowledge": "2025-06", + "release_date": "2026-01-14", + "last_updated": "2026-01-31", + "modalities": { + "input": ["image", "text"], + "output": ["image"] + }, + "open_weights": true, + "limit": { + "context": 40960, + "output": 40960 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Llama-3.3-70B-Forgotten-Safeword-3.6": { - "id": "Llama-3.3-70B-Forgotten-Safeword-3.6", - "name": "Llama 3.3 70B Forgotten Safeword 3.6", + "black-forest-labs/flux.1-dev": { + "id": "black-forest-labs/flux.1-dev", + "name": "FLUX.1-dev", + "family": "flux", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2024-08-01", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["image"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 4096, + "output": 0 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "grok-3-mini-fast-beta": { - "id": "grok-3-mini-fast-beta", - "name": "Grok 3 Mini Fast Beta", + "black-forest-labs/flux_1-schnell": { + "id": "black-forest-labs/flux_1-schnell", + "name": "FLUX.1-schnell", "attachment": false, "reasoning": false, "tool_call": false, "structured_output": false, - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.6, "output": 4 }, - "limit": { "context": 131072, "input": 131072, "output": 131072 } + "temperature": false, + "knowledge": "2024-07", + "release_date": "2024-08-01", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["image"] + }, + "open_weights": true, + "limit": { + "context": 77, + "input": 77, + "output": 0 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "claude-3-7-sonnet-20250219": { - "id": "claude-3-7-sonnet-20250219", - "name": "Claude 3.7 Sonnet", + "black-forest-labs/flux_1-kontext-dev": { + "id": "black-forest-labs/flux_1-kontext-dev", + "name": "FLUX.1-Kontext-dev", "attachment": true, "reasoning": false, - "tool_call": true, - "structured_output": true, - "release_date": "2025-02-19", - "last_updated": "2025-02-19", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.992, "output": 14.994 }, - "limit": { "context": 200000, "input": 200000, "output": 16000 } - }, - "Llama-3.3-70B-ArliAI-RPMax-v3": { - "id": "Llama-3.3-70B-ArliAI-RPMax-v3", - "name": "Llama 3.3 70B ArliAI RPMax v3", - "attachment": false, - "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "temperature": false, + "release_date": "2025-08-12", + "last_updated": "2025-08-12", + "modalities": { + "input": ["text", "image"], + "output": ["image"] + }, + "open_weights": true, + "limit": { + "context": 40960, + "output": 40960 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gemini-2.0-flash-thinking-exp-1219": { - "id": "gemini-2.0-flash-thinking-exp-1219", - "name": "Gemini 2.0 Flash Thinking 1219", + "stepfun-ai/step-3.5-flash": { + "id": "stepfun-ai/step-3.5-flash", + "name": "Step 3.5 Flash", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-19", - "last_updated": "2024-12-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1003, "output": 0.408 }, - "limit": { "context": 32767, "input": 32767, "output": 8192 } - }, - "gemini-2.5-flash-preview-05-20": { - "id": "gemini-2.5-flash-preview-05-20", - "name": "Gemini 2.5 Flash 0520", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-05-20", - "last_updated": "2025-05-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 1048000, "input": 1048000, "output": 65536 } - }, - "gemini-3-pro-preview": { - "id": "gemini-3-pro-preview", - "name": "Gemini 3 Pro", - "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2025-11-18", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 12 }, - "limit": { "context": 1048756, "input": 1048756, "output": 65536 } - }, - "MiniMax-M1": { - "id": "MiniMax-M1", - "name": "MiniMax M1", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-06-16", - "last_updated": "2025-06-16", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1394, "output": 1.3328 }, - "limit": { "context": 1000000, "input": 1000000, "output": 131072 } + "temperature": true, + "release_date": "2026-02-02", + "last_updated": "2026-02-02", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "chroma": { - "id": "chroma", - "name": "Chroma", + "mistralai/mistral-large-3-675b-instruct-2512": { + "id": "mistralai/mistral-large-3-675b-instruct-2512", + "name": "Mistral Large 3 675B Instruct 2512", + "family": "mistral-large", "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-08-12", - "last_updated": "2025-08-12", - "modalities": { "input": ["text"], "output": ["image"] }, - "open_weights": false, - "limit": { "context": 0, "output": 0 } - }, - "azure-o1": { - "id": "azure-o1", - "name": "Azure o1", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-17", - "last_updated": "2024-12-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 14.994, "output": 59.993 }, - "limit": { "context": 200000, "input": 200000, "output": 100000 } + "knowledge": "2025-01", + "release_date": "2025-12-02", + "last_updated": "2025-12-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "claude-3-7-sonnet-thinking:128000": { - "id": "claude-3-7-sonnet-thinking:128000", - "name": "Claude 3.7 Sonnet Thinking (128K)", + "mistralai/devstral-2-123b-instruct-2512": { + "id": "mistralai/devstral-2-123b-instruct-2512", + "name": "Devstral-2-123B-Instruct-2512", + "family": "devstral", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-02-24", - "last_updated": "2025-02-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.992, "output": 14.994 }, - "limit": { "context": 200000, "input": 200000, "output": 64000 } + "temperature": true, + "knowledge": "2025-12", + "release_date": "2025-12-08", + "last_updated": "2025-12-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "venice-uncensored:web": { - "id": "venice-uncensored:web", - "name": "Venice Uncensored Web", + "mistralai/mistral-nemotron": { + "id": "mistralai/mistral-nemotron", + "name": "mistral-nemotron", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-05-01", - "last_updated": "2024-05-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.4, "output": 0.4 }, - "limit": { "context": 80000, "input": 80000, "output": 16384 } + "tool_call": true, + "temperature": true, + "release_date": "2025-06-11", + "last_updated": "2025-06-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "deepseek-r1-sambanova": { - "id": "deepseek-r1-sambanova", - "name": "DeepSeek R1 Fast", + "mistralai/mixtral-8x22b-instruct": { + "id": "mistralai/mixtral-8x22b-instruct", + "name": "Mistral: Mixtral 8x22B Instruct", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-02-20", - "last_updated": "2025-02-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 4.998, "output": 6.987 }, - "limit": { "context": 128000, "input": 128000, "output": 4096 } + "tool_call": true, + "temperature": true, + "release_date": "2024-04-17", + "last_updated": "2024-04-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 65536, + "output": 13108 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "qwen25-vl-72b-instruct": { - "id": "qwen25-vl-72b-instruct", - "name": "Qwen25 VL 72b", + "mistralai/mistral-medium-3-instruct": { + "id": "mistralai/mistral-medium-3-instruct", + "name": "Mistral Medium 3", + "family": "mistral-medium", "attachment": true, "reasoning": false, "tool_call": false, "structured_output": false, - "release_date": "2025-05-10", - "last_updated": "2025-05-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.69989, "output": 0.69989 }, - "limit": { "context": 32000, "input": 32000, "output": 32768 } + "limit": { + "context": 131072, + "input": 131072, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "brave-pro": { - "id": "brave-pro", - "name": "Brave (Pro)", + "mistralai/mixtral-8x7b-instruct": { + "id": "mistralai/mixtral-8x7b-instruct", + "name": "Mistral: Mixtral 8x7B Instruct", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2023-03-02", - "last_updated": "2024-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 5, "output": 5 }, - "limit": { "context": 8192, "input": 8192, "output": 8192 } + "tool_call": true, + "temperature": true, + "release_date": "2023-12-10", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "glm-4-airx": { - "id": "glm-4-airx", - "name": "GLM-4 AirX", + "mistralai/magistral-small-2506": { + "id": "mistralai/magistral-small-2506", + "name": "Magistral Small 2506", "attachment": false, "reasoning": false, "tool_call": false, "structured_output": false, - "release_date": "2024-06-05", - "last_updated": "2024-06-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.006, "output": 2.006 }, - "limit": { "context": 8000, "input": 8000, "output": 4096 } + "limit": { + "context": 32768, + "input": 32768, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "deepseek-chat": { - "id": "deepseek-chat", - "name": "DeepSeek V3/Deepseek Chat", - "attachment": true, + "mistralai/mistral-7b-instruct-v03": { + "id": "mistralai/mistral-7b-instruct-v03", + "name": "Mistral-7B-Instruct-v0.3", + "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, - "release_date": "2025-02-27", - "last_updated": "2025-02-27", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 0.7 }, - "limit": { "context": 128000, "input": 128000, "output": 8192 } + "temperature": true, + "release_date": "2025-04-01", + "last_updated": "2025-04-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 65536, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Llama-3.3-70B-Cu-Mai-R1": { - "id": "Llama-3.3-70B-Cu-Mai-R1", - "name": "Llama 3.3 70B Cu Mai R1", + "mistralai/mistral-small-4-119b-2603": { + "id": "mistralai/mistral-small-4-119b-2603", + "name": "mistral-small-4-119b-2603", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "tool_call": true, + "temperature": true, + "release_date": "2026-03-16", + "last_updated": "2026-03-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "deepseek-chat-cheaper": { - "id": "deepseek-chat-cheaper", - "name": "DeepSeek V3/Chat Cheaper", - "attachment": true, + "sarvamai/sarvam-m": { + "id": "sarvamai/sarvam-m", + "name": "sarvam-m", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, - "release_date": "2025-04-15", - "last_updated": "2025-04-15", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 0.7 }, - "limit": { "context": 128000, "input": 128000, "output": 8192 } + "temperature": true, + "release_date": "2025-07-25", + "last_updated": "2025-07-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "ernie-5.0-thinking-latest": { - "id": "ernie-5.0-thinking-latest", - "name": "Ernie 5.0 Thinking", + "microsoft/phi-4-mini-instruct": { + "id": "microsoft/phi-4-mini-instruct", + "name": "Phi-4-Mini", + "family": "phi", "attachment": true, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-11-18", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2024-12-01", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 2 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "claude-sonnet-4-5-20250929": { - "id": "claude-sonnet-4-5-20250929", - "name": "Claude Sonnet 4.5", - "attachment": true, + "microsoft/phi-4-multimodal-instruct": { + "id": "microsoft/phi-4-multimodal-instruct", + "name": "Phi 4 Multimodal", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "tool_call": false, + "structured_output": false, + "release_date": "2025-07-26", + "last_updated": "2025-07-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.992, "output": 14.994 }, - "limit": { "context": 1000000, "input": 1000000, "output": 64000 } + "limit": { + "context": 128000, + "input": 128000, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "claude-opus-4-1-thinking:1024": { - "id": "claude-opus-4-1-thinking:1024", - "name": "Claude 4.1 Opus Thinking (1K)", + "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning": { + "id": "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning", + "name": "Nemotron 3 Nano Omni", + "family": "nemotron", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 14.994, "output": 75.004 }, - "limit": { "context": 200000, "input": 200000, "output": 32000 } + "temperature": true, + "release_date": "2026-04-28", + "last_updated": "2026-04-28", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "qwen-plus": { - "id": "qwen-plus", - "name": "Qwen Plus", + "nvidia/usdvalidate": { + "id": "nvidia/usdvalidate", + "name": "usdvalidate", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-01-25", - "last_updated": "2024-01-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3995, "output": 1.2002 }, - "limit": { "context": 995904, "input": 995904, "output": 32768 } + "temperature": false, + "release_date": "2024-07-24", + "last_updated": "2025-01-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 0, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "ernie-x1-32k-preview": { - "id": "ernie-x1-32k-preview", - "name": "Ernie X1 32k", - "attachment": false, + "nvidia/synthetic-video-detector": { + "id": "nvidia/synthetic-video-detector", + "name": "synthetic-video-detector", + "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.33, "output": 1.32 }, - "limit": { "context": 32000, "input": 32000, "output": 16384 } + "temperature": true, + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 0, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Llama-3.3-70B-The-Omega-Directive-Unslop-v2.1": { - "id": "Llama-3.3-70B-The-Omega-Directive-Unslop-v2.1", - "name": "Llama 3.3 70B Omega Directive Unslop v2.1", + "nvidia/cosmos-transfer1-7b": { + "id": "nvidia/cosmos-transfer1-7b", + "name": "cosmos-transfer1-7b", + "attachment": true, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-06-13", + "last_updated": "2025-06-30", + "modalities": { + "input": ["text", "image", "video"], + "output": ["video"] + }, + "open_weights": true, + "limit": { + "context": 0, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "nvidia/rerank-qa-mistral-4b": { + "id": "nvidia/rerank-qa-mistral-4b", + "name": "rerank-qa-mistral-4b", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "temperature": false, + "release_date": "2024-03-17", + "last_updated": "2025-01-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gemini-2.5-pro-preview-06-05": { - "id": "gemini-2.5-pro-preview-06-05", - "name": "Gemini 2.5 Pro Preview 0605", - "attachment": true, - "reasoning": true, + "nvidia/nv-embedcode-7b-v1": { + "id": "nvidia/nv-embedcode-7b-v1", + "name": "nv-embedcode-7b-v1", + "attachment": false, + "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-06-05", - "last_updated": "2025-06-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 1048756, "input": 1048756, "output": 65536 } + "temperature": false, + "release_date": "2025-03-17", + "last_updated": "2025-05-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 2048 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "claude-sonnet-4-thinking:64000": { - "id": "claude-sonnet-4-thinking:64000", - "name": "Claude 4 Sonnet Thinking (64K)", - "attachment": true, + "nvidia/nemotron-3-super-120b-a12b": { + "id": "nvidia/nemotron-3-super-120b-a12b", + "name": "Nemotron 3 Super", + "family": "nemotron", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.992, "output": 14.994 }, - "limit": { "context": 1000000, "input": 1000000, "output": 64000 } + "temperature": true, + "knowledge": "2024-04", + "release_date": "2026-03-11", + "last_updated": "2026-03-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.2, + "output": 0.8 + } }, - "glm-z1-airx": { - "id": "glm-z1-airx", - "name": "GLM Z1 AirX", + "nvidia/riva-translate-4b-instruct-v1_1": { + "id": "nvidia/riva-translate-4b-instruct-v1_1", + "name": "riva-translate-4b-instruct-v1_1", "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "release_date": "2025-04-15", - "last_updated": "2025-04-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.7, "output": 0.7 }, - "limit": { "context": 32000, "input": 32000, "output": 16384 } + "tool_call": false, + "temperature": false, + "release_date": "2025-12-12", + "last_updated": "2025-12-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "qwen3-vl-235b-a22b-instruct-original": { - "id": "qwen3-vl-235b-a22b-instruct-original", - "name": "Qwen3 VL 235B A22B Instruct Original", + "nvidia/nemotron-voicechat": { + "id": "nvidia/nemotron-voicechat", + "name": "nemotron-voicechat", "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.5, "output": 1.2 }, - "limit": { "context": 32768, "input": 32768, "output": 32768 } + "tool_call": true, + "temperature": true, + "release_date": "2026-03-16", + "last_updated": "2026-03-16", + "modalities": { + "input": ["text", "audio"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "yi-lightning": { - "id": "yi-lightning", - "name": "Yi Lightning", + "nvidia/llama-3_3-nemotron-super-49b-v1_5": { + "id": "nvidia/llama-3_3-nemotron-super-49b-v1_5", + "name": "Llama 3.3 Nemotron Super 49B v1.5", + "family": "nemotron", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2025-07-25", + "last_updated": "2025-07-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "nvidia/usdcode": { + "id": "nvidia/usdcode", + "name": "usdcode", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-10-16", - "last_updated": "2024-10-16", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "release_date": "2026-01-01", + "last_updated": "2026-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2006, "output": 0.2006 }, - "limit": { "context": 12000, "input": 12000, "output": 4096 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "sonar-deep-research": { - "id": "sonar-deep-research", - "name": "Perplexity Deep Research", + "nvidia/llama-3_2-nemoretriever-300m-embed-v1": { + "id": "nvidia/llama-3_2-nemoretriever-300m-embed-v1", + "name": "llama-3_2-nemoretriever-300m-embed-v1", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-02-25", - "last_updated": "2025-02-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3.4, "output": 13.6 }, - "limit": { "context": 60000, "input": 60000, "output": 128000 } + "temperature": false, + "release_date": "2025-07-24", + "last_updated": "2025-07-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 2048 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Llama-3.3-70B-Ignition-v0.1": { - "id": "Llama-3.3-70B-Ignition-v0.1", - "name": "Llama 3.3 70B Ignition v0.1", + "nvidia/llama-3_1-nemotron-safety-guard-8b-v3": { + "id": "nvidia/llama-3_1-nemotron-safety-guard-8b-v3", + "name": "llama-3.1-nemotron-safety-guard-8b-v3", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "temperature": false, + "release_date": "2025-10-28", + "last_updated": "2025-10-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "kimi-k2-instruct-fast": { - "id": "kimi-k2-instruct-fast", - "name": "Kimi K2 0711 Fast", - "attachment": true, + "nvidia/nv-embed-v1": { + "id": "nvidia/nv-embed-v1", + "name": "nv-embed-v1", + "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-07-15", - "last_updated": "2025-07-15", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 2 }, - "limit": { "context": 131072, "input": 131072, "output": 16384 } + "temperature": false, + "release_date": "2024-06-07", + "last_updated": "2025-07-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 2048 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gemini-2.5-pro-preview-05-06": { - "id": "gemini-2.5-pro-preview-05-06", - "name": "Gemini 2.5 Pro Preview 0506", - "attachment": true, + "nvidia/nemotron-3-nano-30b-a3b": { + "id": "nvidia/nemotron-3-nano-30b-a3b", + "name": "nemotron-3-nano-30b-a3b", + "family": "nemotron", + "attachment": false, "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-09", + "release_date": "2024-12", + "last_updated": "2024-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "nvidia/gliner-pii": { + "id": "nvidia/gliner-pii", + "name": "gliner-pii", + "attachment": false, + "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-05-06", - "last_updated": "2025-05-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 1048756, "input": 1048756, "output": 65536 } + "temperature": true, + "release_date": "2026-03-03", + "last_updated": "2026-03-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gemini-2.5-flash-preview-05-20:thinking": { - "id": "gemini-2.5-flash-preview-05-20:thinking", - "name": "Gemini 2.5 Flash 0520 Thinking", + "nvidia/bevformer": { + "id": "nvidia/bevformer", + "name": "bevformer", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-05-20", - "last_updated": "2025-05-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.15, "output": 3.5 }, - "limit": { "context": 1048000, "input": 1048000, "output": 65536 } + "temperature": true, + "release_date": "2025-03-18", + "last_updated": "2025-07-20", + "modalities": { + "input": ["video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "auto-model-premium": { - "id": "auto-model-premium", - "name": "Auto model (Premium)", + "nvidia/nemotron-mini-4b-instruct": { + "id": "nvidia/nemotron-mini-4b-instruct", + "name": "nemotron-mini-4b-instruct", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-06-01", - "last_updated": "2024-06-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 9.996, "output": 19.992 }, - "limit": { "context": 1000000, "input": 1000000, "output": 1000000 } + "tool_call": true, + "temperature": true, + "release_date": "2024-08-21", + "last_updated": "2024-08-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "glm-4.1v-thinking-flash": { - "id": "glm-4.1v-thinking-flash", - "name": "GLM 4.1V Thinking Flash", + "nvidia/cosmos-predict1-5b": { + "id": "nvidia/cosmos-predict1-5b", + "name": "cosmos-predict1-5b", "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 0.3 }, - "limit": { "context": 64000, "input": 64000, "output": 8192 } + "temperature": false, + "release_date": "2025-03-18", + "last_updated": "2025-03-18", + "modalities": { + "input": ["text", "image", "video"], + "output": ["video"] + }, + "open_weights": true, + "limit": { + "context": 0, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "claude-3-5-haiku-20241022": { - "id": "claude-3-5-haiku-20241022", - "name": "Claude 3.5 Haiku", - "attachment": true, - "reasoning": false, + "nvidia/llama-3_3-nemotron-super-49b-v1": { + "id": "nvidia/llama-3_3-nemotron-super-49b-v1", + "name": "Llama 3.3 Nemotron Super 49B v1", + "family": "nemotron", + "attachment": false, + "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2024-10-22", - "last_updated": "2024-10-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.8, "output": 4 }, - "limit": { "context": 200000, "input": 200000, "output": 8192 } + "temperature": true, + "knowledge": "2023-12", + "release_date": "2025-04-07", + "last_updated": "2025-04-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "sonar": { - "id": "sonar", - "name": "Perplexity Simple", + "nvidia/nvidia-nemotron-nano-9b-v2": { + "id": "nvidia/nvidia-nemotron-nano-9b-v2", + "name": "nvidia-nemotron-nano-9b-v2", + "family": "nemotron", "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-09", + "release_date": "2025-08-18", + "last_updated": "2025-08-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "nvidia/cosmos-transfer2_5-2b": { + "id": "nvidia/cosmos-transfer2_5-2b", + "name": "cosmos-transfer2.5-2b", + "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-02-19", - "last_updated": "2025-02-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.003, "output": 1.003 }, - "limit": { "context": 127000, "input": 127000, "output": 128000 } + "temperature": false, + "release_date": "2026-02-26", + "last_updated": "2026-02-26", + "modalities": { + "input": ["text", "image", "video"], + "output": ["video"] + }, + "open_weights": true, + "limit": { + "context": 0, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "auto-model": { - "id": "auto-model", - "name": "Auto model", + "nvidia/nemotron-content-safety-reasoning-4b": { + "id": "nvidia/nemotron-content-safety-reasoning-4b", + "name": "nemotron-content-safety-reasoning-4b", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": false, - "structured_output": false, - "release_date": "2024-06-01", - "last_updated": "2024-06-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 1000000, "input": 1000000, "output": 1000000 } + "temperature": false, + "release_date": "2026-01-22", + "last_updated": "2026-01-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gemini-2.0-flash-001": { - "id": "gemini-2.0-flash-001", - "name": "Gemini 2.0 Flash", + "nvidia/active-speaker-detection": { + "id": "nvidia/active-speaker-detection", + "name": "Active Speaker Detection", "attachment": true, "reasoning": false, - "tool_call": true, - "structured_output": true, - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1003, "output": 0.408 }, - "limit": { "context": 1000000, "input": 1000000, "output": 8192 } + "tool_call": false, + "temperature": false, + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 0, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Llama-3.3-70B-Mhnnn-x1": { - "id": "Llama-3.3-70B-Mhnnn-x1", - "name": "Llama 3.3 70B Mhnnn x1", - "attachment": false, + "nvidia/magpie-tts-zeroshot": { + "id": "nvidia/magpie-tts-zeroshot", + "name": "magpie-tts-zeroshot", + "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "temperature": false, + "release_date": "2025-05-22", + "last_updated": "2025-06-12", + "modalities": { + "input": ["text", "audio"], + "output": ["audio"] + }, + "open_weights": true, + "limit": { + "context": 0, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "step-2-16k-exp": { - "id": "step-2-16k-exp", - "name": "Step-2 16k Exp", - "attachment": false, + "nvidia/streampetr": { + "id": "nvidia/streampetr", + "name": "streampetr", + "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-07-05", - "last_updated": "2024-07-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 7.004, "output": 19.992 }, - "limit": { "context": 16000, "input": 16000, "output": 8192 } + "temperature": true, + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Llama-3.3-70B-Legion-V2.1": { - "id": "Llama-3.3-70B-Legion-V2.1", - "name": "Llama 3.3 70B Legion V2.1", - "attachment": false, + "nvidia/sparsedrive": { + "id": "nvidia/sparsedrive", + "name": "sparsedrive", + "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "temperature": true, + "release_date": "2025-03-18", + "last_updated": "2025-07-20", + "modalities": { + "input": ["video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Llama-3.3+(3.1v3.3)-70B-New-Dawn-v1.1": { - "id": "Llama-3.3+(3.1v3.3)-70B-New-Dawn-v1.1", - "name": "Llama 3.3+ 70B New Dawn v1.1", + "nvidia/nemotron-3-content-safety": { + "id": "nvidia/nemotron-3-content-safety", + "name": "nemotron-3-content-safety", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "temperature": false, + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "doubao-1-5-thinking-pro-vision-250415": { - "id": "doubao-1-5-thinking-pro-vision-250415", - "name": "Doubao 1.5 Thinking Pro Vision", + "nvidia/llama-nemotron-embed-vl-1b-v2": { + "id": "nvidia/llama-nemotron-embed-vl-1b-v2", + "name": "llama-nemotron-embed-vl-1b-v2", "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-04-15", - "last_updated": "2025-04-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.6, "output": 2.4 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "temperature": false, + "release_date": "2026-02-10", + "last_updated": "2026-02-10", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 2048 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gemini-2.0-flash-lite": { - "id": "gemini-2.0-flash-lite", - "name": "Gemini 2.0 Flash Lite", - "attachment": true, + "nvidia/studiovoice": { + "id": "nvidia/studiovoice", + "name": "studiovoice", + "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-12-11", - "last_updated": "2024-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.0748, "output": 0.306 }, - "limit": { "context": 1000000, "input": 1000000, "output": 8192 } + "temperature": true, + "release_date": "2024-10-03", + "last_updated": "2025-06-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "claude-sonnet-4-5-20250929-thinking": { - "id": "claude-sonnet-4-5-20250929-thinking", - "name": "Claude Sonnet 4.5 Thinking", + "nvidia/llama-nemotron-rerank-vl-1b-v2": { + "id": "nvidia/llama-nemotron-rerank-vl-1b-v2", + "name": "llama-nemotron-rerank-vl-1b-v2", "attachment": true, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2026-03-31", + "last_updated": "2026-03-31", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "deepseek-ai/deepseek-v3.2": { + "id": "deepseek-ai/deepseek-v3.2", + "name": "DeepSeek V3.2", + "family": "deepseek", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.992, "output": 14.994 }, - "limit": { "context": 1000000, "input": 1000000, "output": 64000 } + "limit": { + "context": 163840, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "yi-large": { - "id": "yi-large", - "name": "Yi Large", + "deepseek-ai/deepseek-v3.1-terminus": { + "id": "deepseek-ai/deepseek-v3.1-terminus", + "name": "DeepSeek V3.1 Terminus", + "family": "deepseek", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-05-13", - "last_updated": "2024-05-13", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-09-22", + "last_updated": "2025-09-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3.196, "output": 3.196 }, - "limit": { "context": 32000, "input": 32000, "output": 4096 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Gemma-3-27B-Nidum-Uncensored": { - "id": "Gemma-3-27B-Nidum-Uncensored", - "name": "Gemma 3 27B Nidum Uncensored", + "openai/whisper-large-v3": { + "id": "openai/whisper-large-v3", + "name": "Whisper Large v3", + "family": "whisper", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-08-08", - "last_updated": "2025-08-08", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 96000 } + "temperature": false, + "knowledge": "2023-09", + "release_date": "2023-09-01", + "last_updated": "2025-09-05", + "modalities": { + "input": ["audio"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 0, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "claude-opus-4-thinking:32768": { - "id": "claude-opus-4-thinking:32768", - "name": "Claude 4 Opus Thinking (32K)", - "attachment": true, + "openai/gpt-oss-20b": { + "id": "openai/gpt-oss-20b", + "name": "GPT OSS 20B", + "family": "gpt-oss", + "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 14.994, "output": 75.004 }, - "limit": { "context": 200000, "input": 200000, "output": 32000 } + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Llama-3.3-70B-Cirrus-x1": { - "id": "Llama-3.3-70B-Cirrus-x1", - "name": "Llama 3.3 70B Cirrus x1", - "attachment": false, - "reasoning": false, + "openai/gpt-oss-120b": { + "id": "openai/gpt-oss-120b", + "name": "GPT-OSS-120B", + "family": "gpt-oss", + "attachment": true, + "reasoning": true, "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-08", + "release_date": "2025-08-04", + "last_updated": "2025-08-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Gemma-3-27B-CardProjector-v4": { - "id": "Gemma-3-27B-CardProjector-v4", - "name": "Gemma 3 27B CardProjector v4", + "minimaxai/minimax-m2.7": { + "id": "minimaxai/minimax-m2.7", + "name": "MiniMax-M2.7", + "family": "minimax", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-03-10", - "last_updated": "2025-03-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-18", + "last_updated": "2026-04-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Qwen2.5-32B-EVA-v0.2": { - "id": "Qwen2.5-32B-EVA-v0.2", - "name": "Qwen 2.5 32b EVA", + "minimaxai/minimax-m2.5": { + "id": "minimaxai/minimax-m2.5", + "name": "MiniMax-M2.5", + "family": "minimax", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-09-01", - "last_updated": "2024-09-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.493, "output": 0.493 }, - "limit": { "context": 24576, "input": 24576, "output": 8192 } + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-08", + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "sonar-reasoning-pro": { - "id": "sonar-reasoning-pro", - "name": "Perplexity Reasoning Pro", + "z-ai/glm4.7": { + "id": "z-ai/glm4.7", + "name": "GLM-4.7", + "family": "glm", "attachment": false, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-02-19", - "last_updated": "2025-02-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.006, "output": 7.9985 }, - "limit": { "context": 127000, "input": 127000, "output": 128000 } + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "v0-1.5-lg": { - "id": "v0-1.5-lg", - "name": "v0 1.5 LG", + "z-ai/glm-5.1": { + "id": "z-ai/glm-5.1", + "name": "GLM-5.1", + "family": "glm", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-04", - "last_updated": "2025-07-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 15, "output": 75 }, - "limit": { "context": 1000000, "input": 1000000, "output": 64000 } - }, - "gemini-2.5-flash-preview-09-2025-thinking": { - "id": "gemini-2.5-flash-preview-09-2025-thinking", - "name": "Gemini 2.5 Flash Preview (09/2025) – Thinking", - "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 2.5 }, - "limit": { "context": 1048756, "input": 1048756, "output": 65536 } + "temperature": true, + "release_date": "2026-03-27", + "last_updated": "2026-03-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "azure-gpt-4-turbo": { - "id": "azure-gpt-4-turbo", - "name": "Azure gpt-4-turbo", + "meta/esm2-650m": { + "id": "meta/esm2-650m", + "name": "esm2-650m", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2023-11-06", - "last_updated": "2024-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 9.996, "output": 30.005 }, - "limit": { "context": 128000, "input": 128000, "output": 4096 } + "temperature": true, + "release_date": "2024-08-29", + "last_updated": "2025-03-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "deepseek-reasoner": { - "id": "deepseek-reasoner", - "name": "DeepSeek Reasoner", + "meta/llama-3.3-70b-instruct": { + "id": "meta/llama-3.3-70b-instruct", + "name": "Llama 3.3 70b Instruct", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.4, "output": 1.7 }, - "limit": { "context": 64000, "input": 64000, "output": 65536 } + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2024-11-26", + "last_updated": "2024-11-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gemini-2.5-flash-nothinking": { - "id": "gemini-2.5-flash-nothinking", - "name": "Gemini 2.5 Flash (No Thinking)", - "attachment": true, + "meta/esmfold": { + "id": "meta/esmfold", + "name": "esmfold", + "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-06-05", - "last_updated": "2025-06-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 2.5 }, - "limit": { "context": 1048756, "input": 1048756, "output": 65536 } + "temperature": true, + "release_date": "2024-03-15", + "last_updated": "2025-06-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Gemma-3-27B-ArliAI-RPMax-v3": { - "id": "Gemma-3-27B-ArliAI-RPMax-v3", - "name": "Gemma 3 27B RPMax v3", - "attachment": false, + "meta/llama-3.2-90b-vision-instruct": { + "id": "meta/llama-3.2-90b-vision-instruct", + "name": "Llama-3.2-90B-Vision-Instruct", + "family": "llama", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-03", - "last_updated": "2025-07-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-09-25", + "last_updated": "2024-09-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "v0-1.0-md": { - "id": "v0-1.0-md", - "name": "v0 1.0 MD", - "attachment": false, + "meta/llama-3.2-11b-vision-instruct": { + "id": "meta/llama-3.2-11b-vision-instruct", + "name": "Llama 3.2 11b Vision Instruct", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-04", - "last_updated": "2025-07-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 200000, "input": 200000, "output": 64000 } + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-09-18", + "last_updated": "2024-09-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "step-3": { - "id": "step-3", - "name": "Step-3", + "meta/llama-guard-4-12b": { + "id": "meta/llama-guard-4-12b", + "name": "Llama Guard 4 12B", + "family": "llama", "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-07-31", - "last_updated": "2025-07-31", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2499, "output": 0.6494 }, - "limit": { "context": 65536, "input": 65536, "output": 8192 } + "temperature": true, + "release_date": "2025-04-05", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "brave": { - "id": "brave", - "name": "Brave (Answers)", + "meta/llama-3.1-70b-instruct": { + "id": "meta/llama-3.1-70b-instruct", + "name": "Llama 3.1 70b Instruct", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2023-03-02", - "last_updated": "2024-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 5, "output": 5 }, - "limit": { "context": 8192, "input": 8192, "output": 8192 } + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2024-07-16", + "last_updated": "2024-07-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "ernie-x1-turbo-32k": { - "id": "ernie-x1-turbo-32k", - "name": "Ernie X1 Turbo 32k", + "meta/llama-3.2-1b-instruct": { + "id": "meta/llama-3.2-1b-instruct", + "name": "Llama 3.2 1b Instruct", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-09-18", + "last_updated": "2024-09-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "meta/llama-4-maverick-17b-128e-instruct": { + "id": "meta/llama-4-maverick-17b-128e-instruct", + "name": "Llama 4 Maverick 17b 128e Instruct", "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-05-08", - "last_updated": "2025-05-08", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.165, "output": 0.66 }, - "limit": { "context": 32000, "input": 32000, "output": 16384 } + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-02", + "release_date": "2025-04-01", + "last_updated": "2025-04-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "glm-4-air": { - "id": "glm-4-air", - "name": "GLM-4 Air", + "meta/llama-3.2-3b-instruct": { + "id": "meta/llama-3.2-3b-instruct", + "name": "Llama 3.2 3B Instruct", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-06-05", - "last_updated": "2024-06-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2006, "output": 0.2006 }, - "limit": { "context": 128000, "input": 128000, "output": 4096 } + "structured_output": true, + "temperature": true, + "release_date": "2024-09-18", + "last_updated": "2024-09-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 32000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "GLM-4.5-Air-Derestricted": { - "id": "GLM-4.5-Air-Derestricted", - "name": "GLM 4.5 Air Derestricted", + "meta/llama-3.1-8b-instruct": { + "id": "meta/llama-3.1-8b-instruct", + "name": "Llama 3.1 8B Instruct", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 202600, "input": 202600, "output": 98304 } + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 16000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "grok-3-fast-beta": { - "id": "grok-3-fast-beta", - "name": "Grok 3 Fast Beta", + "qwen/qwen-image-edit": { + "id": "qwen/qwen-image-edit", + "name": "Qwen Image Edit", + "family": "qwen", "attachment": true, "reasoning": false, "tool_call": false, "structured_output": false, - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, + "temperature": true, + "release_date": "2025-08-19", + "last_updated": "2025-08-19", + "modalities": { + "input": ["text", "image"], + "output": ["image"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25 }, - "limit": { "context": 131072, "input": 131072, "output": 131072 } + "limit": { + "context": 0, + "output": 0 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "claude-sonnet-4-20250514": { - "id": "claude-sonnet-4-20250514", - "name": "Claude 4 Sonnet", + "qwen/qwen3.5-122b-a10b": { + "id": "qwen/qwen3.5-122b-a10b", + "name": "Qwen3.5 122B-A10B", + "family": "qwen", "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2026-02-23", + "last_updated": "2026-02-23", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "qwen/qwen2.5-coder-32b-instruct": { + "id": "qwen/qwen2.5-coder-32b-instruct", + "name": "Qwen2.5 Coder 32b Instruct", + "attachment": false, "reasoning": false, "tool_call": true, "structured_output": true, - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.992, "output": 14.994 }, - "limit": { "context": 200000, "input": 200000, "output": 64000 } + "temperature": true, + "release_date": "2024-11-06", + "last_updated": "2024-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "claude-3-7-sonnet-thinking:1024": { - "id": "claude-3-7-sonnet-thinking:1024", - "name": "Claude 3.7 Sonnet Thinking (1K)", + "qwen/qwen3.5-397b-a17b": { + "id": "qwen/qwen3.5-397b-a17b", + "name": "Qwen3.5-397B-A17B", + "family": "qwen", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-02-24", - "last_updated": "2025-02-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.992, "output": 14.994 }, - "limit": { "context": 200000, "input": 200000, "output": 64000 } + "temperature": true, + "knowledge": "2026-01", + "release_date": "2026-02-16", + "last_updated": "2026-02-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "doubao-seed-code-preview-latest": { - "id": "doubao-seed-code-preview-latest", - "name": "Doubao Seed Code Preview", + "qwen/qwen3-next-80b-a3b-thinking": { + "id": "qwen/qwen3-next-80b-a3b-thinking", + "name": "Qwen3-Next-80B-A3B-Thinking", + "family": "qwen", "attachment": false, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4 }, - "limit": { "context": 256000, "input": 256000, "output": 16384 } + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2024-12-01", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "grok-3-beta": { - "id": "grok-3-beta", - "name": "Grok 3 Beta", + "qwen/qwen3-next-80b-a3b-instruct": { + "id": "qwen/qwen3-next-80b-a3b-instruct", + "name": "Qwen3-Next-80B-A3B-Instruct", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 131072, "input": 131072, "output": 131072 } - }, - "claude-3-7-sonnet-reasoner": { - "id": "claude-3-7-sonnet-reasoner", - "name": "Claude 3.7 Sonnet Reasoner", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-03-29", - "last_updated": "2025-03-29", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2024-12-01", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 128000, "input": 128000, "output": 8192 } + "limit": { + "context": 262144, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gemini-2.0-pro-exp-02-05": { - "id": "gemini-2.0-pro-exp-02-05", - "name": "Gemini 2.0 Pro 0205", + "qwen/qwen-image": { + "id": "qwen/qwen-image", + "name": "Qwen Image", + "family": "qwen", "attachment": true, "reasoning": false, "tool_call": false, "structured_output": false, - "release_date": "2025-02-05", - "last_updated": "2025-02-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.989, "output": 7.956 }, - "limit": { "context": 2097152, "input": 2097152, "output": 8192 } - }, - "glm-4-long": { - "id": "glm-4-long", - "name": "GLM-4 Long", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-08-01", - "last_updated": "2024-08-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["image"] + }, "open_weights": false, - "cost": { "input": 0.2006, "output": 0.2006 }, - "limit": { "context": 1000000, "input": 1000000, "output": 4096 } + "limit": { + "context": 0, + "output": 0 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "venice-uncensored": { - "id": "venice-uncensored", - "name": "Venice Uncensored", + "qwen/qwen3-coder-480b-a35b-instruct": { + "id": "qwen/qwen3-coder-480b-a35b-instruct", + "name": "Qwen3 Coder 480B A35B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-02-24", - "last_updated": "2025-02-24", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 0.4 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "limit": { + "context": 262144, + "output": 66536 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Gemma-3-27B-Big-Tiger-v3": { - "id": "Gemma-3-27B-Big-Tiger-v3", - "name": "Gemma 3 27B Big Tiger v3", + "google/gemma-2-2b-it": { + "id": "google/gemma-2-2b-it", + "name": "Gemma 2 2b It", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-08-08", - "last_updated": "2025-08-08", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2024-07-16", + "last_updated": "2024-07-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "doubao-seed-2-0-mini-260215": { - "id": "doubao-seed-2-0-mini-260215", - "name": "Doubao Seed 2.0 Mini", - "attachment": false, + "google/gemma-3n-e4b-it": { + "id": "google/gemma-3n-e4b-it", + "name": "Gemma 3n E4b It", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2026-02-14", - "last_updated": "2026-02-14", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.0493, "output": 0.4845 }, - "limit": { "context": 256000, "input": 256000, "output": 32000 } + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-06", + "release_date": "2025-06-03", + "last_updated": "2025-06-03", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gemini-2.0-flash-thinking-exp-01-21": { - "id": "gemini-2.0-flash-thinking-exp-01-21", - "name": "Gemini 2.0 Flash Thinking 0121", + "google/gemma-4-31b-it": { + "id": "google/gemma-4-31b-it", + "name": "Gemma-4-31B-IT", + "family": "gemma", "attachment": true, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-01-21", - "last_updated": "2025-01-21", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 1.003 }, - "limit": { "context": 1000000, "input": 1000000, "output": 8192 } + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Llama-3.3-70B-Damascus-R1": { - "id": "Llama-3.3-70B-Damascus-R1", - "name": "Damascus R1", - "attachment": false, + "google/gemma-3n-e2b-it": { + "id": "google/gemma-3n-e2b-it", + "name": "Gemma 3n E2b It", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-06", + "release_date": "2025-06-12", + "last_updated": "2025-06-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "doubao-1-5-thinking-pro-250415": { - "id": "doubao-1-5-thinking-pro-250415", - "name": "Doubao 1.5 Thinking Pro", + "google/gemma-3-27b-it": { + "id": "google/gemma-3-27b-it", + "name": "Gemma-3-27B-IT", + "family": "gemma", "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-04-17", - "last_updated": "2025-04-17", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2024-12-01", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.6, "output": 2.4 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "asi1-mini": { - "id": "asi1-mini", - "name": "ASI1 Mini", + "google/google-paligemma": { + "id": "google/google-paligemma", + "name": "paligemma", "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-03-25", - "last_updated": "2025-03-25", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1, "output": 1 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "temperature": true, + "release_date": "2024-05-14", + "last_updated": "2024-08-26", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "doubao-seed-2-0-code-preview-260215": { - "id": "doubao-seed-2-0-code-preview-260215", - "name": "Doubao Seed 2.0 Code Preview", + "moonshotai/kimi-k2-instruct": { + "id": "moonshotai/kimi-k2-instruct", + "name": "Kimi K2 Instruct", + "family": "kimi", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2026-02-14", - "last_updated": "2026-02-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-01", + "release_date": "2025-01-01", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.782, "output": 3.893 }, - "limit": { "context": 256000, "input": 256000, "output": 128000 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "exa-research-pro": { - "id": "exa-research-pro", - "name": "Exa (Research Pro)", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-06-04", - "last_updated": "2025-06-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.5, "output": 2.5 }, - "limit": { "context": 16384, "input": 16384, "output": 16384 } + "moonshotai/kimi-k2.6": { + "id": "moonshotai/kimi-k2.6", + "name": "Kimi K2.6", + "family": "kimi-k2.6", + "attachment": true, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "GLM-4.5-Air-Derestricted-Iceblink-v2": { - "id": "GLM-4.5-Air-Derestricted-Iceblink-v2", - "name": "GLM 4.5 Air Derestricted Iceblink v2", + "moonshotai/kimi-k2-instruct-0905": { + "id": "moonshotai/kimi-k2-instruct-0905", + "name": "Kimi K2 0905", + "family": "kimi", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 158600, "input": 158600, "output": 65536 } + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gemini-2.5-pro": { - "id": "gemini-2.5-pro", - "name": "Gemini 2.5 Pro", - "attachment": true, + "moonshotai/kimi-k2-thinking": { + "id": "moonshotai/kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "family": "kimi-thinking", + "attachment": false, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-06-05", - "last_updated": "2025-06-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 1048756, "input": 1048756, "output": 65536 } + "tool_call": true, + "interleaved": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-07", + "release_date": "2025-11", + "last_updated": "2025-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "Llama-3.3-70B-Nova": { - "id": "Llama-3.3-70B-Nova", - "name": "Llama 3.3 70B Nova", + "abacusai/dracarys-llama-3_1-70b-instruct": { + "id": "abacusai/dracarys-llama-3_1-70b-instruct", + "name": "dracarys-llama-3.1-70b-instruct", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "tool_call": true, + "temperature": true, + "release_date": "2024-09-11", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Gemma-3-27B-it": { - "id": "Gemma-3-27B-it", - "name": "Gemma 3 27B IT", + "baai/bge-m3": { + "id": "baai/bge-m3", + "name": "BGE M3", + "family": "bge", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-03-10", - "last_updated": "2025-03-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "temperature": false, + "release_date": "2024-01-30", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 1024 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "claude-opus-4-thinking:8192": { - "id": "claude-opus-4-thinking:8192", - "name": "Claude 4 Opus Thinking (8K)", - "attachment": true, - "reasoning": true, + "bytedance/seed-oss-36b-instruct": { + "id": "bytedance/seed-oss-36b-instruct", + "name": "ByteDance-Seed/Seed-OSS-36B-Instruct", + "family": "seed", + "attachment": false, + "reasoning": false, "tool_call": true, "structured_output": true, - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": true, + "release_date": "2025-09-04", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 14.994, "output": 75.004 }, - "limit": { "context": 200000, "input": 200000, "output": 32000 } + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "claude-3-5-sonnet-20240620": { - "id": "claude-3-5-sonnet-20240620", - "name": "Claude 3.5 Sonnet Old", - "attachment": true, - "reasoning": false, + "deepseek-ai/deepseek-v4-flash": { + "id": "deepseek-ai/deepseek-v4-flash", + "name": "DeepSeek V4 Flash", + "family": "deepseek-flash", + "attachment": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, - "release_date": "2024-06-20", - "last_updated": "2024-06-20", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.992, "output": 14.994 }, - "limit": { "context": 200000, "input": 200000, "output": 8192 } + "temperature": true, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1048576, + "output": 393216 + }, + "cost": { + "input": 0.14, + "output": 0.28, + "cache_read": 0.028 + } }, - "claude-opus-4-1-20250805": { - "id": "claude-opus-4-1-20250805", - "name": "Claude 4.1 Opus", - "attachment": true, - "reasoning": false, + "deepseek-ai/deepseek-v4-pro": { + "id": "deepseek-ai/deepseek-v4-pro", + "name": "DeepSeek V4 Pro", + "family": "deepseek-thinking", + "attachment": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 14.994, "output": 75.004 }, - "limit": { "context": 200000, "input": 200000, "output": 32000 } + "temperature": true, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1048576, + "output": 393216 + }, + "cost": { + "input": 1.74, + "output": 3.48, + "cache_read": 0.145 + } + } + } + }, + "inference": { + "id": "inference", + "env": ["INFERENCE_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://inference.net/v1", + "name": "Inference", + "doc": "https://inference.net/models", + "models": { + "mistral/mistral-nemo-12b-instruct": { + "id": "mistral/mistral-nemo-12b-instruct", + "name": "Mistral Nemo 12B Instruct", + "family": "mistral-nemo", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 16000, + "output": 4096 + }, + "cost": { + "input": 0.038, + "output": 0.1 + } }, - "gemini-2.5-flash": { - "id": "gemini-2.5-flash", - "name": "Gemini 2.5 Flash", + "meta/llama-3.2-11b-vision-instruct": { + "id": "meta/llama-3.2-11b-vision-instruct", + "name": "Llama 3.2 11B Vision Instruct", + "family": "llama", "attachment": true, - "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-06-05", - "last_updated": "2025-06-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 2.5 }, - "limit": { "context": 1048756, "input": 1048756, "output": 65536 } + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 16000, + "output": 4096 + }, + "cost": { + "input": 0.055, + "output": 0.055 + } }, - "sonar-pro": { - "id": "sonar-pro", - "name": "Perplexity Pro", + "meta/llama-3.2-1b-instruct": { + "id": "meta/llama-3.2-1b-instruct", + "name": "Llama 3.2 1B Instruct", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-02-19", - "last_updated": "2025-02-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.992, "output": 14.994 }, - "limit": { "context": 200000, "input": 200000, "output": 128000 } + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 16000, + "output": 4096 + }, + "cost": { + "input": 0.01, + "output": 0.01 + } }, - "sarvan-medium": { - "id": "sarvan-medium", - "name": "Sarvam Medium", + "meta/llama-3.2-3b-instruct": { + "id": "meta/llama-3.2-3b-instruct", + "name": "Llama 3.2 3B Instruct", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", "release_date": "2025-01-01", "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 0.75 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 16000, + "output": 4096 + }, + "cost": { + "input": 0.02, + "output": 0.02 + } }, - "hunyuan-t1-latest": { - "id": "hunyuan-t1-latest", - "name": "Hunyuan T1", + "meta/llama-3.1-8b-instruct": { + "id": "meta/llama-3.1-8b-instruct", + "name": "Llama 3.1 8B Instruct", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-03-22", - "last_updated": "2025-03-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.17, "output": 0.66 }, - "limit": { "context": 256000, "input": 256000, "output": 16384 } + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 16000, + "output": 4096 + }, + "cost": { + "input": 0.025, + "output": 0.025 + } }, - "Llama-3.3-70B-RAWMAW": { - "id": "Llama-3.3-70B-RAWMAW", - "name": "Llama 3.3 70B RAWMAW", + "qwen/qwen-2.5-7b-vision-instruct": { + "id": "qwen/qwen-2.5-7b-vision-instruct", + "name": "Qwen 2.5 7B Vision Instruct", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 125000, + "output": 4096 + }, + "cost": { + "input": 0.2, + "output": 0.2 + } + }, + "qwen/qwen3-embedding-4b": { + "id": "qwen/qwen3-embedding-4b", + "name": "Qwen 3 Embedding 4B", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "temperature": false, + "knowledge": "2024-12", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32000, + "output": 2048 + }, + "cost": { + "input": 0.01, + "output": 0 + } }, - "kimi-thinking-preview": { - "id": "kimi-thinking-preview", - "name": "Kimi Thinking Preview", + "google/gemma-3": { + "id": "google/gemma-3", + "name": "Google Gemma 3", + "family": "gemma", "attachment": true, "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 125000, + "output": 4096 + }, + "cost": { + "input": 0.15, + "output": 0.3 + } + }, + "osmosis/osmosis-structure-0.6b": { + "id": "osmosis/osmosis-structure-0.6b", + "name": "Osmosis Structure 0.6B", + "family": "osmosis", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 4000, + "output": 2048 + }, + "cost": { + "input": 0.1, + "output": 0.5 + } + } + } + }, + "inception": { + "id": "inception", + "env": ["INCEPTION_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.inceptionlabs.ai/v1/", + "name": "Inception", + "doc": "https://platform.inceptionlabs.ai/docs", + "models": { + "mercury-edit-2": { + "id": "mercury-edit-2", + "name": "Mercury Edit 2", + "attachment": false, + "reasoning": true, "tool_call": false, - "structured_output": false, - "release_date": "2025-05-07", - "last_updated": "2025-05-07", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, + "temperature": true, + "release_date": "2026-03-30", + "last_updated": "2026-03-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 31.46, "output": 31.46 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.25, + "output": 0.75, + "cache_read": 0.025 + } }, - "claude-sonnet-4-thinking:32768": { - "id": "claude-sonnet-4-thinking:32768", - "name": "Claude 4 Sonnet Thinking (32K)", - "attachment": true, + "mercury-2": { + "id": "mercury-2", + "name": "Mercury 2", + "family": "mercury", + "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01-01", + "release_date": "2026-02-24", + "last_updated": "2026-02-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.992, "output": 14.994 }, - "limit": { "context": 1000000, "input": 1000000, "output": 64000 } - }, - "gemini-2.5-pro-preview-03-25": { - "id": "gemini-2.5-pro-preview-03-25", - "name": "Gemini 2.5 Pro Preview 0325", + "limit": { + "context": 128000, + "output": 50000 + }, + "cost": { + "input": 0.25, + "output": 0.75, + "cache_read": 0.025 + } + } + } + }, + "openai": { + "id": "openai", + "env": ["OPENAI_API_KEY"], + "npm": "@ai-sdk/openai", + "name": "OpenAI", + "doc": "https://platform.openai.com/docs/models", + "models": { + "gpt-5.1-codex-max": { + "id": "gpt-5.1-codex-max", + "name": "GPT-5.1 Codex Max", + "family": "gpt-codex", "attachment": true, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-03-25", - "last_updated": "2025-03-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 1048756, "input": 1048756, "output": 65536 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "gemini-2.5-flash-preview-09-2025": { - "id": "gemini-2.5-flash-preview-09-2025", - "name": "Gemini 2.5 Flash Preview (09/2025)", + "gpt-4o-2024-05-13": { + "id": "gpt-4o-2024-05-13", + "name": "GPT-4o (2024-05-13)", + "family": "gpt", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "structured_output": true, - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": true, + "knowledge": "2023-09", + "release_date": "2024-05-13", + "last_updated": "2024-05-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 2.5 }, - "limit": { "context": 1048756, "input": 1048756, "output": 65536 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 5, + "output": 15 + } }, - "Llama-3.3-70B-Electra-R1": { - "id": "Llama-3.3-70B-Electra-R1", - "name": "Llama 3.3 70B Electra R1", + "o1-mini": { + "id": "o1-mini", + "name": "o1-mini", + "family": "o-mini", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2023-09", + "release_date": "2024-09-12", + "last_updated": "2024-09-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 128000, + "output": 65536 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.55 + } }, - "Llama-3.3-70B-ArliAI-RPMax-v2": { - "id": "Llama-3.3-70B-ArliAI-RPMax-v2", - "name": "Llama 3.3 70B ArliAI RPMax v2", - "attachment": false, - "reasoning": false, - "tool_call": false, + "gpt-5.2-pro": { + "id": "gpt-5.2-pro", + "name": "GPT-5.2 Pro", + "family": "gpt-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, "structured_output": false, - "release_date": "2025-08-08", - "last_updated": "2025-08-08", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 21, + "output": 168 + } }, - "GLM-4.5-Air-Derestricted-Steam": { - "id": "GLM-4.5-Air-Derestricted-Steam", - "name": "GLM 4.5 Air Derestricted Steam", + "text-embedding-3-large": { + "id": "text-embedding-3-large", + "name": "text-embedding-3-large", + "family": "text-embedding", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-01", + "release_date": "2024-01-25", + "last_updated": "2024-01-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 220600, "input": 220600, "output": 65536 } + "limit": { + "context": 8191, + "output": 3072 + }, + "cost": { + "input": 0.13, + "output": 0 + } }, - "doubao-seed-1-8-251215": { - "id": "doubao-seed-1-8-251215", - "name": "Doubao Seed 1.8", - "attachment": false, + "gpt-5.3-chat-latest": { + "id": "gpt-5.3-chat-latest", + "name": "GPT-5.3 Chat (latest)", + "family": "gpt", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-12-15", - "last_updated": "2025-12-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-08-31", + "release_date": "2026-03-03", + "last_updated": "2026-03-03", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.612, "output": 6.12 }, - "limit": { "context": 128000, "input": 128000, "output": 8192 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "Llama-3.3-70B-The-Omega-Directive-Unslop-v2.0": { - "id": "Llama-3.3-70B-The-Omega-Directive-Unslop-v2.0", - "name": "Llama 3.3 70B Omega Directive Unslop v2.0", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "gpt-5.5": { + "id": "gpt-5.5", + "name": "GPT-5.5", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-12-01", + "release_date": "2026-04-23", + "last_updated": "2026-04-23", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } - }, - "GLM-4.5-Air-Derestricted-Steam-ReExtract": { - "id": "GLM-4.5-Air-Derestricted-Steam-ReExtract", - "name": "GLM 4.5 Air Derestricted Steam ReExtract", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-12-12", - "last_updated": "2025-12-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 131072, "input": 131072, "output": 65536 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "experimental": { + "modes": { + "fast": { + "cost": { + "input": 12.5, + "output": 75, + "cache_read": 1.25 + }, + "provider": { + "body": { + "service_tier": "priority" + } + } + } + } + }, + "cost": { + "input": 5, + "output": 30, + "cache_read": 0.5, + "tiers": [ + { + "input": 10, + "output": 45, + "cache_read": 1, + "tier": { + "type": "context", + "size": 272000 + } + } + ], + "context_over_200k": { + "input": 10, + "output": 45, + "cache_read": 1 + } + } }, - "exa-research": { - "id": "exa-research", - "name": "Exa (Research)", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-06-04", - "last_updated": "2025-06-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "gpt-5-mini": { + "id": "gpt-5-mini", + "name": "GPT-5 Mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 2.5 }, - "limit": { "context": 8192, "input": 8192, "output": 8192 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.025 + } }, - "azure-gpt-4o": { - "id": "azure-gpt-4o", - "name": "Azure gpt-4o", + "gpt-5-nano": { + "id": "gpt-5-nano", + "name": "GPT-5 Nano", + "family": "gpt-nano", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2024-05-13", - "last_updated": "2024-05-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.499, "output": 9.996 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.05, + "output": 0.4, + "cache_read": 0.005 + } }, - "study_gpt-chatgpt-4o-latest": { - "id": "study_gpt-chatgpt-4o-latest", - "name": "Study Mode", + "gpt-5.3-codex": { + "id": "gpt-5.3-codex", + "name": "GPT-5.3 Codex", + "family": "gpt-codex", "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-05-13", - "last_updated": "2024-05-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 4.998, "output": 14.994 }, - "limit": { "context": 200000, "input": 200000, "output": 16384 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "Llama-3.3-70B-Aurora-Borealis": { - "id": "Llama-3.3-70B-Aurora-Borealis", - "name": "Llama 3.3 70B Aurora Borealis", - "attachment": false, + "gpt-4-turbo": { + "id": "gpt-4-turbo", + "name": "GPT-4 Turbo", + "family": "gpt", + "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2023-11-06", + "last_updated": "2024-04-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 10, + "output": 30 + } }, - "Baichuan4-Turbo": { - "id": "Baichuan4-Turbo", - "name": "Baichuan 4 Turbo", + "text-embedding-ada-002": { + "id": "text-embedding-ada-002", + "name": "text-embedding-ada-002", + "family": "text-embedding", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-08-19", - "last_updated": "2025-08-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2022-12", + "release_date": "2022-12-15", + "last_updated": "2022-12-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.42, "output": 2.42 }, - "limit": { "context": 128000, "input": 128000, "output": 32768 } + "limit": { + "context": 8192, + "output": 1536 + }, + "cost": { + "input": 0.1, + "output": 0 + } }, - "Baichuan4-Air": { - "id": "Baichuan4-Air", - "name": "Baichuan 4 Air", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-08-19", - "last_updated": "2025-08-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "gpt-5.2": { + "id": "gpt-5.2", + "name": "GPT-5.2", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.157, "output": 0.157 }, - "limit": { "context": 32768, "input": 32768, "output": 32768 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "KAT-Coder-Exp-72B-1010": { - "id": "KAT-Coder-Exp-72B-1010", - "name": "KAT Coder Exp 72B 1010", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-10-28", - "last_updated": "2025-10-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "o3-pro": { + "id": "o3-pro", + "name": "o3-pro", + "family": "o-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2025-06-10", + "last_updated": "2025-06-10", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.2 }, - "limit": { "context": 128000, "input": 128000, "output": 32768 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 20, + "output": 80 + } }, - "gemini-2.0-flash-exp-image-generation": { - "id": "gemini-2.0-flash-exp-image-generation", - "name": "Gemini Text + Image", - "attachment": false, + "gpt-4o-mini": { + "id": "gpt-4o-mini", + "name": "GPT-4o mini", + "family": "gpt-mini", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-02-19", - "last_updated": "2025-02-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2023-09", + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.8 }, - "limit": { "context": 32767, "input": 32767, "output": 8192 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.6, + "cache_read": 0.08 + } }, - "Llama-3.3-70B-Dark-Ages-v0.1": { - "id": "Llama-3.3-70B-Dark-Ages-v0.1", - "name": "Llama 3.3 70B Dark Ages v0.1", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "o4-mini-deep-research": { + "id": "o4-mini-deep-research", + "name": "o4-mini-deep-research", + "family": "o-mini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2024-06-26", + "last_updated": "2024-06-26", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } }, - "claude-opus-4-1-thinking:8192": { - "id": "claude-opus-4-1-thinking:8192", - "name": "Claude 4.1 Opus Thinking (8K)", + "gpt-5.4-mini": { + "id": "gpt-5.4-mini", + "name": "GPT-5.4 mini", + "family": "gpt-mini", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 14.994, "output": 75.004 }, - "limit": { "context": 200000, "input": 200000, "output": 32000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "experimental": { + "modes": { + "fast": { + "cost": { + "input": 1.5, + "output": 9, + "cache_read": 0.15 + }, + "provider": { + "body": { + "service_tier": "priority" + } + } + } + } + }, + "cost": { + "input": 0.75, + "output": 4.5, + "cache_read": 0.075 + } }, - "Magistral-Small-2506": { - "id": "Magistral-Small-2506", - "name": "Magistral Small 2506", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "o4-mini": { + "id": "o4-mini", + "name": "o4-mini", + "family": "o-mini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 1.4 }, - "limit": { "context": 32768, "input": 32768, "output": 32768 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.28 + } }, - "Llama-3.3-70B-MiraiFanfare": { - "id": "Llama-3.3-70B-MiraiFanfare", - "name": "Llama 3.3 70b Mirai Fanfare", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-26", - "last_updated": "2025-07-26", - "modalities": { "input": ["text"], "output": ["text"] }, + "gpt-5.4-nano": { + "id": "gpt-5.4-nano", + "name": "GPT-5.4 nano", + "family": "gpt-nano", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.493, "output": 0.493 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.2, + "output": 1.25, + "cache_read": 0.02 + } }, - "glm-4-flash": { - "id": "glm-4-flash", - "name": "GLM-4 Flash", - "attachment": false, + "gpt-image-1": { + "id": "gpt-image-1", + "name": "gpt-image-1", + "family": "gpt-image", + "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-08-01", - "last_updated": "2024-08-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-04-24", + "last_updated": "2025-04-24", + "modalities": { + "input": ["text", "image"], + "output": ["image"] + }, "open_weights": false, - "cost": { "input": 0.1003, "output": 0.1003 }, - "limit": { "context": 128000, "input": 128000, "output": 4096 } + "limit": { + "context": 0, + "input": 0, + "output": 0 + } }, - "Llama-3.3-70B-Shakudo": { - "id": "Llama-3.3-70B-Shakudo", - "name": "Llama 3.3 70B Shakudo", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "gpt-5.2-codex": { + "id": "gpt-5.2-codex", + "name": "GPT-5.2 Codex", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "gemini-2.0-pro-reasoner": { - "id": "gemini-2.0-pro-reasoner", - "name": "Gemini 2.0 Pro Reasoner", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-02-05", - "last_updated": "2025-02-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "gpt-5.2-chat-latest": { + "id": "gpt-5.2-chat-latest", + "name": "GPT-5.2 Chat", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.292, "output": 4.998 }, - "limit": { "context": 128000, "input": 128000, "output": 65536 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "Llama-3.3-70B-Fallen-R1-v1": { - "id": "Llama-3.3-70B-Fallen-R1-v1", - "name": "Llama 3.3 70B Fallen R1 v1", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "gpt-5.1-codex-mini": { + "id": "gpt-5.1-codex-mini", + "name": "GPT-5.1 Codex mini", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.025 + } }, - "gemini-2.5-flash-lite-preview-06-17": { - "id": "gemini-2.5-flash-lite-preview-06-17", - "name": "Gemini 2.5 Flash Lite Preview", - "attachment": true, + "o1-preview": { + "id": "o1-preview", + "name": "o1-preview", + "family": "o", + "attachment": false, "reasoning": true, "tool_call": false, - "structured_output": false, - "release_date": "2025-06-17", - "last_updated": "2025-06-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2023-09", + "release_date": "2024-09-12", + "last_updated": "2024-09-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 1048756, "input": 1048756, "output": 65536 } + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 15, + "output": 60, + "cache_read": 7.5 + } }, - "doubao-seed-1-6-flash-250615": { - "id": "doubao-seed-1-6-flash-250615", - "name": "Doubao Seed 1.6 Flash", - "attachment": false, + "gpt-4o-2024-08-06": { + "id": "gpt-4o-2024-08-06", + "name": "GPT-4o (2024-08-06)", + "family": "gpt", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-06-15", - "last_updated": "2025-06-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2023-09", + "release_date": "2024-08-06", + "last_updated": "2024-08-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.0374, "output": 0.374 }, - "limit": { "context": 256000, "input": 256000, "output": 16384 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 10, + "cache_read": 1.25 + } }, - "claude-opus-4-5-20251101:thinking": { - "id": "claude-opus-4-5-20251101:thinking", - "name": "Claude 4.5 Opus Thinking", + "gpt-5.1": { + "id": "gpt-5.1", + "name": "GPT-5.1", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-11-01", - "last_updated": "2025-11-01", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 4.998, "output": 25.007 }, - "limit": { "context": 200000, "input": 200000, "output": 32000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.13 + } }, - "Llama-3.3-70B-Strawberrylemonade-v1.2": { - "id": "Llama-3.3-70B-Strawberrylemonade-v1.2", - "name": "Llama 3.3 70B StrawberryLemonade v1.2", - "attachment": false, + "gpt-image-1-mini": { + "id": "gpt-image-1-mini", + "name": "gpt-image-1-mini", + "family": "gpt-image", + "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-09-26", + "last_updated": "2025-09-26", + "modalities": { + "input": ["text", "image"], + "output": ["text", "image"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 0, + "input": 0, + "output": 0 + } }, - "Llama-3.3-70B-Magnum-v4-SE": { - "id": "Llama-3.3-70B-Magnum-v4-SE", - "name": "Llama 3.3 70B Magnum v4 SE", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "o1": { + "id": "o1", + "name": "o1", + "family": "o", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2023-09", + "release_date": "2024-12-05", + "last_updated": "2024-12-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 15, + "output": 60, + "cache_read": 7.5 + } }, - "MiniMax-M2": { - "id": "MiniMax-M2", - "name": "MiniMax M2", - "attachment": false, + "gpt-5.4-pro": { + "id": "gpt-5.4-pro", + "name": "GPT-5.4 Pro", + "family": "gpt-pro", + "attachment": true, "reasoning": true, - "tool_call": false, + "tool_call": true, "structured_output": false, - "release_date": "2025-10-25", - "last_updated": "2025-10-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.17, "output": 1.53 }, - "limit": { "context": 200000, "input": 200000, "output": 131072 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 30, + "output": 180, + "tiers": [ + { + "input": 60, + "output": 270, + "tier": { + "type": "context", + "size": 272000 + } + } + ], + "context_over_200k": { + "input": 60, + "output": 270 + } + } }, - "doubao-seed-1-6-250615": { - "id": "doubao-seed-1-6-250615", - "name": "Doubao Seed 1.6", + "gpt-3.5-turbo": { + "id": "gpt-3.5-turbo", + "name": "GPT-3.5-turbo", + "family": "gpt", "attachment": false, "reasoning": false, "tool_call": false, "structured_output": false, - "release_date": "2025-06-15", - "last_updated": "2025-06-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2021-09-01", + "release_date": "2023-03-01", + "last_updated": "2023-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.204, "output": 0.51 }, - "limit": { "context": 256000, "input": 256000, "output": 16384 } - }, - "Llama-3.3-70B-StrawberryLemonade-v1.0": { - "id": "Llama-3.3-70B-StrawberryLemonade-v1.0", - "name": "Llama 3.3 70B StrawberryLemonade v1.0", + "limit": { + "context": 16385, + "output": 4096 + }, + "cost": { + "input": 0.5, + "output": 1.5, + "cache_read": 1.25 + } + }, + "o3-deep-research": { + "id": "o3-deep-research", + "name": "o3-deep-research", + "family": "o", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2024-06-26", + "last_updated": "2024-06-26", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 10, + "output": 40, + "cache_read": 2.5 + } + }, + "o3-mini": { + "id": "o3-mini", + "name": "o3-mini", + "family": "o-mini", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2024-12-20", + "last_updated": "2025-01-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.55 + } }, - "Meta-Llama-3-1-8B-Instruct-FP8": { - "id": "Meta-Llama-3-1-8B-Instruct-FP8", - "name": "Llama 3.1 8B (decentralized)", + "text-embedding-3-small": { + "id": "text-embedding-3-small", + "name": "text-embedding-3-small", + "family": "text-embedding", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-01", + "release_date": "2024-01-25", + "last_updated": "2024-01-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.02, "output": 0.03 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "limit": { + "context": 8191, + "output": 1536 + }, + "cost": { + "input": 0.02, + "output": 0 + } }, - "claude-opus-4-1-thinking:32000": { - "id": "claude-opus-4-1-thinking:32000", - "name": "Claude 4.1 Opus Thinking (32K)", + "o1-pro": { + "id": "o1-pro", + "name": "o1-pro", + "family": "o-pro", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": false, + "knowledge": "2023-09", + "release_date": "2025-03-19", + "last_updated": "2025-03-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 14.994, "output": 75.004 }, - "limit": { "context": 200000, "input": 200000, "output": 32000 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 150, + "output": 600 + } }, - "GLM-4.5-Air-Derestricted-Iceblink-v2-ReExtract": { - "id": "GLM-4.5-Air-Derestricted-Iceblink-v2-ReExtract", - "name": "GLM 4.5 Air Derestricted Iceblink v2 ReExtract", - "attachment": false, + "gpt-4": { + "id": "gpt-4", + "name": "GPT-4", + "family": "gpt", + "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, "structured_output": false, - "release_date": "2025-12-12", - "last_updated": "2025-12-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2023-11", + "release_date": "2023-11-06", + "last_updated": "2024-04-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 131072, "input": 131072, "output": 65536 } + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 30, + "output": 60 + } }, - "gemini-3-pro-preview-thinking": { - "id": "gemini-3-pro-preview-thinking", - "name": "Gemini 3 Pro Thinking", - "attachment": true, + "gpt-5-codex": { + "id": "gpt-5-codex", + "name": "GPT-5-Codex", + "family": "gpt-codex", + "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-11-18", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-09-15", + "last_updated": "2025-09-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 12 }, - "limit": { "context": 1048756, "input": 1048756, "output": 65536 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "gemini-2.5-flash-lite-preview-09-2025-thinking": { - "id": "gemini-2.5-flash-lite-preview-09-2025-thinking", - "name": "Gemini 2.5 Flash Lite Preview (09/2025) – Thinking", + "gpt-5.4": { + "id": "gpt-5.4", + "name": "GPT-5.4", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4 }, - "limit": { "context": 1048756, "input": 1048756, "output": 65536 } - }, - "Llama-3.3-70B-Vulpecula-R1": { - "id": "Llama-3.3-70B-Vulpecula-R1", - "name": "Llama 3.3 70B Vulpecula R1", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "experimental": { + "modes": { + "fast": { + "cost": { + "input": 5, + "output": 30, + "cache_read": 0.5 + }, + "provider": { + "body": { + "service_tier": "priority" + } + } + } + } + }, + "cost": { + "input": 2.5, + "output": 15, + "cache_read": 0.25, + "tiers": [ + { + "input": 5, + "output": 22.5, + "cache_read": 0.5, + "tier": { + "type": "context", + "size": 272000 + } + } + ], + "context_over_200k": { + "input": 5, + "output": 22.5, + "cache_read": 0.5 + } + } }, - "doubao-1.5-vision-pro-32k": { - "id": "doubao-1.5-vision-pro-32k", - "name": "Doubao 1.5 Vision Pro 32k", + "gpt-5.1-chat-latest": { + "id": "gpt-5.1-chat-latest", + "name": "GPT-5.1 Chat", + "family": "gpt-codex", "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-01-22", - "last_updated": "2025-01-22", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.459, "output": 1.377 }, - "limit": { "context": 32000, "input": 32000, "output": 8192 } - }, - "deepseek-reasoner-cheaper": { - "id": "deepseek-reasoner-cheaper", - "name": "Deepseek R1 Cheaper", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 1.7 }, - "limit": { "context": 128000, "input": 128000, "output": 65536 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "ernie-x1.1-preview": { - "id": "ernie-x1.1-preview", - "name": "ERNIE X1.1", + "gpt-5.3-codex-spark": { + "id": "gpt-5.3-codex-spark", + "name": "GPT-5.3 Codex Spark", + "family": "gpt-codex-spark", "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-09-10", - "last_updated": "2025-09-10", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 64000, "input": 64000, "output": 8192 } - }, - "KAT-Coder-Air-V1": { - "id": "KAT-Coder-Air-V1", - "name": "KAT Coder Air V1", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-10-28", - "last_updated": "2025-10-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.2 }, - "limit": { "context": 128000, "input": 128000, "output": 32768 } - }, - "mercury-coder-small": { - "id": "mercury-coder-small", - "name": "Mercury Coder Small", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-02-26", - "last_updated": "2025-02-26", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 1 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } - }, - "doubao-1.5-pro-256k": { - "id": "doubao-1.5-pro-256k", - "name": "Doubao 1.5 Pro 256k", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-03-12", - "last_updated": "2025-03-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.799, "output": 1.445 }, - "limit": { "context": 256000, "input": 256000, "output": 16384 } + "limit": { + "context": 128000, + "input": 100000, + "output": 32000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "glm-4-plus": { - "id": "glm-4-plus", - "name": "GLM-4 Plus", - "attachment": false, + "chatgpt-image-latest": { + "id": "chatgpt-image-latest", + "name": "chatgpt-image-latest", + "family": "gpt-image", + "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-08-01", - "last_updated": "2024-08-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-12-16", + "last_updated": "2025-12-16", + "modalities": { + "input": ["text", "image"], + "output": ["text", "image"] + }, "open_weights": false, - "cost": { "input": 7.497, "output": 7.497 }, - "limit": { "context": 128000, "input": 128000, "output": 4096 } + "limit": { + "context": 0, + "input": 0, + "output": 0 + } }, - "Baichuan-M2": { - "id": "Baichuan-M2", - "name": "Baichuan M2 32B Medical", - "attachment": false, + "gpt-4.1-nano": { + "id": "gpt-4.1-nano", + "name": "GPT-4.1 nano", + "family": "gpt-nano", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-08-19", - "last_updated": "2025-08-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15.73, "output": 15.73 }, - "limit": { "context": 32768, "input": 32768, "output": 32768 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.03 + } }, - "auto-model-standard": { - "id": "auto-model-standard", - "name": "Auto model (Standard)", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-06-01", - "last_updated": "2024-06-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "o3": { + "id": "o3", + "name": "o3", + "family": "o", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 9.996, "output": 19.992 }, - "limit": { "context": 1000000, "input": 1000000, "output": 1000000 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } }, - "Gemma-3-27B-it-Abliterated": { - "id": "Gemma-3-27B-it-Abliterated", - "name": "Gemma 3 27B IT Abliterated", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-03", - "last_updated": "2025-07-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "gpt-5-pro": { + "id": "gpt-5-pro", + "name": "GPT-5 Pro", + "family": "gpt-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-10-06", + "last_updated": "2025-10-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.42, "output": 0.42 }, - "limit": { "context": 32768, "input": 32768, "output": 96000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 272000 + }, + "cost": { + "input": 15, + "output": 120 + } }, - "learnlm-1.5-pro-experimental": { - "id": "learnlm-1.5-pro-experimental", - "name": "Gemini LearnLM Experimental", - "attachment": false, + "gpt-4o": { + "id": "gpt-4o", + "name": "GPT-4o", + "family": "gpt", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-05-14", - "last_updated": "2024-05-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2023-09", + "release_date": "2024-05-13", + "last_updated": "2024-08-06", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3.502, "output": 10.506 }, - "limit": { "context": 32767, "input": 32767, "output": 8192 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 10, + "cache_read": 1.25 + } }, - "claude-opus-4-thinking:1024": { - "id": "claude-opus-4-thinking:1024", - "name": "Claude 4 Opus Thinking (1K)", + "gpt-5": { + "id": "gpt-5", + "name": "GPT-5", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-05-22", - "last_updated": "2025-05-22", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 14.994, "output": 75.004 }, - "limit": { "context": 200000, "input": 200000, "output": 32000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "gemini-2.5-flash-preview-04-17:thinking": { - "id": "gemini-2.5-flash-preview-04-17:thinking", - "name": "Gemini 2.5 Flash Preview Thinking", + "gpt-5-chat-latest": { + "id": "gpt-5-chat-latest", + "name": "GPT-5 Chat (latest)", + "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": false, - "structured_output": false, - "release_date": "2025-04-17", - "last_updated": "2025-04-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.15, "output": 3.5 }, - "limit": { "context": 1048756, "input": 1048756, "output": 65536 } - }, - "v0-1.5-md": { - "id": "v0-1.5-md", - "name": "v0 1.5 MD", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-04", - "last_updated": "2025-07-04", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 200000, "input": 200000, "output": 64000 } - }, - "Llama-3.3-70B-Electranova-v1.0": { - "id": "Llama-3.3-70B-Electranova-v1.0", - "name": "Llama 3.3 70B Electranova v1.0", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "temperature": true, + "knowledge": "2024-09-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, - "Llama-3.3+(3.1v3.3)-70B-Hanami-x1": { - "id": "Llama-3.3+(3.1v3.3)-70B-Hanami-x1", - "name": "Llama 3.3+ 70B Hanami x1", - "attachment": false, + "gpt-image-1.5": { + "id": "gpt-image-1.5", + "name": "gpt-image-1.5", + "family": "gpt-image", + "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "release_date": "2025-11-25", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text", "image"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 0, + "input": 0, + "output": 0 + } }, - "phi-4-multimodal-instruct": { - "id": "phi-4-multimodal-instruct", - "name": "Phi 4 Multimodal", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-26", - "last_updated": "2025-07-26", - "modalities": { "input": ["text"], "output": ["text"] }, + "gpt-5.5-pro": { + "id": "gpt-5.5-pro", + "name": "GPT-5.5 Pro", + "family": "gpt-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-12-01", + "release_date": "2026-04-23", + "last_updated": "2026-04-23", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.07, "output": 0.11 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 30, + "output": 180, + "tiers": [ + { + "input": 60, + "output": 270, + "tier": { + "type": "context", + "size": 272000 + } + } + ], + "context_over_200k": { + "input": 60, + "output": 270 + } + } }, - "claude-haiku-4-5-20251001": { - "id": "claude-haiku-4-5-20251001", - "name": "Claude Haiku 4.5", + "gpt-4.1": { + "id": "gpt-4.1", + "name": "GPT-4.1", + "family": "gpt", "attachment": true, "reasoning": false, "tool_call": true, "structured_output": true, - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 5 }, - "limit": { "context": 200000, "input": 200000, "output": 64000 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } }, - "ernie-4.5-8k-preview": { - "id": "ernie-4.5-8k-preview", - "name": "Ernie 4.5 8k Preview", - "attachment": false, + "gpt-4.1-mini": { + "id": "gpt-4.1-mini", + "name": "GPT-4.1 mini", + "family": "gpt-mini", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-03-25", - "last_updated": "2025-03-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.66, "output": 2.6 }, - "limit": { "context": 8000, "input": 8000, "output": 16384 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.4, + "output": 1.6, + "cache_read": 0.1 + } }, - "claude-3-7-sonnet-thinking:32768": { - "id": "claude-3-7-sonnet-thinking:32768", - "name": "Claude 3.7 Sonnet Thinking (32K)", + "gpt-5.1-codex": { + "id": "gpt-5.1-codex", + "name": "GPT-5.1 Codex", + "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-07-15", - "last_updated": "2025-07-15", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.992, "output": 14.994 }, - "limit": { "context": 200000, "input": 200000, "output": 64000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "qwen3-max-2026-01-23": { - "id": "qwen3-max-2026-01-23", - "name": "Qwen3 Max 2026-01-23", - "attachment": false, + "gpt-4o-2024-11-20": { + "id": "gpt-4o-2024-11-20", + "name": "GPT-4o (2024-11-20)", + "family": "gpt", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2026-01-26", - "last_updated": "2026-01-26", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2023-09", + "release_date": "2024-11-20", + "last_updated": "2024-11-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.2002, "output": 6.001 }, - "limit": { "context": 256000, "input": 256000, "output": 32768 } - }, - "claude-3-7-sonnet-thinking:8192": { - "id": "claude-3-7-sonnet-thinking:8192", - "name": "Claude 3.7 Sonnet Thinking (8K)", + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 10, + "cache_read": 1.25 + } + } + } + }, + "requesty": { + "id": "requesty", + "env": ["REQUESTY_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://router.requesty.ai/v1", + "name": "Requesty", + "doc": "https://requesty.ai/solution/llm-routing/models", + "models": { + "xai/grok-4-fast": { + "id": "xai/grok-4-fast", + "name": "Grok 4 Fast", + "family": "grok", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2025-02-24", - "last_updated": "2025-02-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.992, "output": 14.994 }, - "limit": { "context": 200000, "input": 200000, "output": 64000 } - }, - "Llama-3.3-70B-Incandescent-Malevolence": { - "id": "Llama-3.3-70B-Incandescent-Malevolence", - "name": "Llama 3.3 70B Incandescent Malevolence", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } - }, - "step-2-mini": { - "id": "step-2-mini", - "name": "Step-2 Mini", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-07-05", - "last_updated": "2024-07-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-09-19", + "last_updated": "2025-09-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2006, "output": 0.408 }, - "limit": { "context": 8000, "input": 8000, "output": 4096 } + "limit": { + "context": 2000000, + "output": 64000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05, + "cache_write": 0.2 + } }, - "auto-model-basic": { - "id": "auto-model-basic", - "name": "Auto model (Basic)", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-06-01", - "last_updated": "2024-06-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "xai/grok-4": { + "id": "xai/grok-4", + "name": "Grok 4", + "family": "grok", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-09-09", + "last_updated": "2025-09-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 9.996, "output": 19.992 }, - "limit": { "context": 1000000, "input": 1000000, "output": 1000000 } + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.75, + "cache_write": 3 + } }, - "claude-sonnet-4-thinking": { - "id": "claude-sonnet-4-thinking", - "name": "Claude 4 Sonnet Thinking", + "openai/gpt-5.1-codex-max": { + "id": "openai/gpt-5.1-codex-max", + "name": "GPT-5.1-Codex-Max", + "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-02-24", - "last_updated": "2025-02-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.992, "output": 14.994 }, - "limit": { "context": 1000000, "input": 1000000, "output": 64000 } - }, - "Llama-3.3-70B-GeneticLemonade-Unleashed-v3": { - "id": "Llama-3.3-70B-GeneticLemonade-Unleashed-v3", - "name": "Llama 3.3 70B GeneticLemonade Unleashed v3", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } - }, - "step-r1-v-mini": { - "id": "step-r1-v-mini", - "name": "Step R1 V Mini", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-04-08", - "last_updated": "2025-04-08", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 11 }, - "limit": { "context": 128000, "input": 128000, "output": 65536 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.1, + "output": 9, + "cache_read": 0.11 + } }, - "glm-4-plus-0111": { - "id": "glm-4-plus-0111", - "name": "GLM 4 Plus 0111", - "attachment": false, - "reasoning": false, + "openai/gpt-5-chat": { + "id": "openai/gpt-5-chat", + "name": "GPT-5 Chat (latest)", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, "tool_call": false, - "structured_output": false, - "release_date": "2025-02-19", - "last_updated": "2025-02-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "temperature": true, + "knowledge": "2024-09-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 9.996, "output": 9.996 }, - "limit": { "context": 128000, "input": 128000, "output": 4096 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, - "z-image-turbo": { - "id": "z-image-turbo", - "name": "Z Image Turbo", + "openai/gpt-5.2-pro": { + "id": "openai/gpt-5.2-pro", + "name": "GPT-5.2 Pro", + "family": "gpt-pro", "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2025-11-27", - "last_updated": "2025-11-27", - "modalities": { "input": ["text"], "output": ["image"] }, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 0, "output": 0 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 21, + "output": 168 + } }, - "Llama-3.3-70B-Sapphira-0.2": { - "id": "Llama-3.3-70B-Sapphira-0.2", - "name": "Llama 3.3 70B Sapphira 0.2", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "openai/gpt-5-mini": { + "id": "openai/gpt-5-mini", + "name": "GPT-5 Mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 128000, + "output": 32000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.03 + } }, - "deepseek-math-v2": { - "id": "deepseek-math-v2", - "name": "DeepSeek Math V2", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-12-03", - "last_updated": "2025-12-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "openai/gpt-5-nano": { + "id": "openai/gpt-5-nano", + "name": "GPT-5 Nano", + "family": "gpt-nano", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.6, "output": 2.2 }, - "limit": { "context": 128000, "input": 128000, "output": 65536 } + "limit": { + "context": 16000, + "output": 4000 + }, + "cost": { + "input": 0.05, + "output": 0.4, + "cache_read": 0.01 + } }, - "azure-gpt-4o-mini": { - "id": "azure-gpt-4o-mini", - "name": "Azure gpt-4o-mini", + "openai/gpt-5.3-codex": { + "id": "openai/gpt-5.3-codex", + "name": "GPT-5.3-Codex", + "family": "gpt-codex", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2024-07-18", - "last_updated": "2024-07-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-02-24", + "last_updated": "2026-02-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1496, "output": 0.595 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "Mistral-Nemo-12B-Instruct-2407": { - "id": "Mistral-Nemo-12B-Instruct-2407", - "name": "Mistral Nemo 12B Instruct 2407", + "openai/gpt-4o-mini": { + "id": "openai/gpt-4o-mini", + "name": "GPT-4o Mini", + "family": "gpt-mini", "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", "release_date": "2024-07-18", "last_updated": "2024-07-18", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.01, "output": 0.01 }, - "limit": { "context": 16384, "input": 16384, "output": 16384 } - }, - "jamba-mini-1.6": { - "id": "jamba-mini-1.6", - "name": "Jamba Mini 1.6", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-03-01", - "last_updated": "2025-03-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1989, "output": 0.408 }, - "limit": { "context": 256000, "input": 256000, "output": 4096 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.6, + "cache_read": 0.08 + } }, - "qwen3-vl-235b-a22b-thinking": { - "id": "qwen3-vl-235b-a22b-thinking", - "name": "Qwen3 VL 235B A22B Thinking", + "openai/gpt-5.1-chat": { + "id": "openai/gpt-5.1-chat", + "name": "GPT-5.1 Chat", + "family": "gpt-codex", "attachment": true, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-08-26", - "last_updated": "2025-08-26", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 6 }, - "limit": { "context": 32768, "input": 32768, "output": 32768 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "Llama-3.3-70B-ArliAI-RPMax-v1.4": { - "id": "Llama-3.3-70B-ArliAI-RPMax-v1.4", - "name": "Llama 3.3 70B RPMax v1.4", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "openai/o4-mini": { + "id": "openai/o4-mini", + "name": "o4 Mini", + "family": "o-mini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-06", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.28 + } }, - "Llama-3.3-70B-Anthrobomination": { - "id": "Llama-3.3-70B-Anthrobomination", - "name": "Llama 3.3 70B Anthrobomination", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "openai/gpt-5.2-codex": { + "id": "openai/gpt-5.2-codex", + "name": "GPT-5.2-Codex", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-08-31", + "release_date": "2026-01-14", + "last_updated": "2026-01-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "glm-4-air-0111": { - "id": "glm-4-air-0111", - "name": "GLM 4 Air 0111", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-01-11", - "last_updated": "2025-01-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "openai/gpt-5.1-codex-mini": { + "id": "openai/gpt-5.1-codex-mini", + "name": "GPT-5.1-Codex-Mini", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1394, "output": 0.1394 }, - "limit": { "context": 128000, "input": 128000, "output": 4096 } + "limit": { + "context": 400000, + "output": 100000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.025 + } }, - "jamba-mini": { - "id": "jamba-mini", - "name": "Jamba Mini", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "openai/gpt-5-image": { + "id": "openai/gpt-5-image", + "name": "GPT-5 Image", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-10-01", + "release_date": "2025-10-14", + "last_updated": "2025-10-14", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text", "image"] + }, "open_weights": false, - "cost": { "input": 0.1989, "output": 0.408 }, - "limit": { "context": 256000, "input": 256000, "output": 4096 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 10, + "cache_read": 1.25 + } }, - "ernie-5.0-thinking-preview": { - "id": "ernie-5.0-thinking-preview", - "name": "Ernie 5.0 Thinking Preview", + "openai/gpt-5.1": { + "id": "openai/gpt-5.1", + "name": "GPT-5.1", + "family": "gpt", "attachment": true, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-11-18", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 2 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "Gemma-3-27B-Glitter": { - "id": "Gemma-3-27B-Glitter", - "name": "Gemma 3 27B Glitter", - "attachment": false, - "reasoning": false, - "tool_call": false, + "openai/gpt-5.4-pro": { + "id": "openai/gpt-5.4-pro", + "name": "GPT-5.4 Pro", + "family": "gpt-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, "structured_output": false, - "release_date": "2025-03-10", - "last_updated": "2025-03-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 30, + "output": 180, + "cache_read": 30 + } }, - "hidream": { - "id": "hidream", - "name": "Hidream", + "openai/gpt-5-codex": { + "id": "openai/gpt-5-codex", + "name": "GPT-5 Codex", + "family": "gpt-codex", "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2024-01-01", - "last_updated": "2024-01-01", - "modalities": { "input": ["text"], "output": ["image"] }, + "knowledge": "2024-10-01", + "release_date": "2025-09-15", + "last_updated": "2025-09-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "limit": { "context": 0, "output": 0 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "glm-4.1v-thinking-flashx": { - "id": "glm-4.1v-thinking-flashx", - "name": "GLM 4.1V Thinking FlashX", + "openai/gpt-5": { + "id": "openai/gpt-5", + "name": "GPT-5", + "family": "gpt", "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "audio", "image", "video"], + "output": ["text", "audio", "image"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 0.3 }, - "limit": { "context": 64000, "input": 64000, "output": 8192 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.13 + } }, - "phi-4-mini-instruct": { - "id": "phi-4-mini-instruct", - "name": "Phi 4 Mini", - "attachment": false, + "openai/gpt-4.1-mini": { + "id": "openai/gpt-4.1-mini", + "name": "GPT-4.1 Mini", + "family": "gpt-mini", + "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.4, + "output": 1.6, + "cache_read": 0.1 + } + }, + "openai/gpt-5.1-codex": { + "id": "openai/gpt-5.1-codex", + "name": "GPT-5.1-Codex", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } + }, + "google/gemini-3-flash-preview": { + "id": "google/gemini-3-flash-preview", + "name": "Gemini 3 Flash", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.05, + "cache_write": 1 + } + }, + "google/gemini-3-pro-preview": { + "id": "google/gemini-3-pro-preview", + "name": "Gemini 3 Pro", + "family": "gemini-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-11-18", + "last_updated": "2025-11-18", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2, + "cache_write": 4.5 + } + }, + "google/gemini-2.5-flash": { + "id": "google/gemini-2.5-flash", + "name": "Gemini 2.5 Flash", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.075, + "cache_write": 0.55 + } + }, + "anthropic/claude-haiku-4-5": { + "id": "anthropic/claude-haiku-4-5", + "name": "Claude Haiku 4.5", + "family": "claude-haiku", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-02-01", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 62000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } + }, + "anthropic/claude-sonnet-4-6": { + "id": "anthropic/claude-sonnet-4-6", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-02-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75, + "tiers": [ + { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5 + } + } + }, + "anthropic/claude-3-7-sonnet": { + "id": "anthropic/claude-3-7-sonnet", + "name": "Claude Sonnet 3.7", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-01", + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } + }, + "anthropic/claude-opus-4-5": { + "id": "anthropic/claude-opus-4-5", + "name": "Claude Opus 4.5", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-11-24", + "last_updated": "2025-11-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } + }, + "anthropic/claude-opus-4": { + "id": "anthropic/claude-opus-4", + "name": "Claude Opus 4", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } + }, + "anthropic/claude-opus-4-6": { + "id": "anthropic/claude-opus-4-6", + "name": "Claude Opus 4.6", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25, + "tiers": [ + { + "input": 10, + "output": 37.5, + "cache_read": 1, + "cache_write": 12.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 10, + "output": 37.5, + "cache_read": 1, + "cache_write": 12.5 + } + } + }, + "openai/gpt-5.2-chat": { + "id": "openai/gpt-5.2-chat", + "name": "GPT-5.2 Chat", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } + }, + "openai/gpt-5.2": { + "id": "openai/gpt-5.2", + "name": "GPT-5.2", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } + }, + "openai/gpt-5.4": { + "id": "openai/gpt-5.4", + "name": "GPT-5.4", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 2.5, + "output": 15, + "cache_read": 0.25, + "context_over_200k": { + "input": 5, + "output": 22.5, + "cache_read": 0.5 + }, + "tiers": [ + { + "input": 5, + "output": 22.5, + "cache_read": 0.5, + "tier": { + "type": "context", + "size": 272000 + } + } + ] + } + }, + "openai/gpt-5-pro": { + "id": "openai/gpt-5-pro", + "name": "GPT-5 Pro", + "family": "gpt-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-10-06", + "last_updated": "2025-10-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 272000 + }, + "cost": { + "input": 15, + "output": 120 + } + }, + "openai/gpt-4.1": { + "id": "openai/gpt-4.1", + "name": "GPT-4.1", + "family": "gpt", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } + }, + "google/gemini-2.5-pro": { + "id": "google/gemini-2.5-pro", + "name": "Gemini 2.5 Pro", + "family": "gemini-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.31, + "cache_write": 2.375, + "context_over_200k": { + "input": 2.5, + "output": 15, + "cache_read": 0.25 + }, + "tiers": [ + { + "input": 2.5, + "output": 15, + "cache_read": 0.25, + "tier": { + "type": "context", + "size": 200000 + } + } + ] + } + }, + "anthropic/claude-opus-4-1": { + "id": "anthropic/claude-opus-4-1", + "name": "Claude Opus 4.1", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } + }, + "anthropic/claude-sonnet-4": { + "id": "anthropic/claude-sonnet-4", + "name": "Claude Sonnet 4", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } + }, + "anthropic/claude-sonnet-4-5": { + "id": "anthropic/claude-sonnet-4-5", + "name": "Claude Sonnet 4.5", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } + } + } + }, + "digitalocean": { + "id": "digitalocean", + "env": ["DIGITALOCEAN_ACCESS_TOKEN"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://inference.do-ai.run/v1", + "name": "DigitalOcean", + "doc": "https://docs.digitalocean.com/products/gradient-ai-platform/details/models/", + "models": { + "openai-gpt-4o-mini": { + "id": "openai-gpt-4o-mini", + "name": "GPT-4o mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2023-09", + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.6, + "cache_read": 0.075 + } + }, + "multi-qa-mpnet-base-dot-v1": { + "id": "multi-qa-mpnet-base-dot-v1", + "name": "Multi-QA-mpnet-base-dot-v1", + "family": "text-embedding", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2021-08-30", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 512, + "output": 768 + }, + "cost": { + "input": 0.009, + "output": 0 + } + }, + "kimi-k2.5": { + "id": "kimi-k2.5", + "name": "Kimi K2.5", + "family": "kimi", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-01", + "release_date": "2026-01", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0.5, + "output": 2.7 + } + }, + "nemotron-3-nano-omni": { + "id": "nemotron-3-nano-omni", + "name": "Nemotron Nano 3 Omni", + "family": "nemotron", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2026-04-28", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 65536, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 0.9 + } + }, + "llama3-8b-instruct": { + "id": "llama3-8b-instruct", + "name": "Llama 3.1 Instruct (8B)", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.198, + "output": 0.198 + } + }, + "anthropic-claude-opus-4.7": { + "id": "anthropic-claude-opus-4.7", + "name": "Claude Opus 4.7", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } + }, + "anthropic-claude-sonnet-4": { + "id": "anthropic-claude-sonnet-4", + "name": "Claude Sonnet 4", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75, + "tiers": [ + { + "input": 6, + "output": 22.5, + "cache_read": 0.3, + "cache_write": 3.75, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 6, + "output": 22.5, + "cache_read": 0.3, + "cache_write": 3.75 + } + } + }, + "wan2-2-t2v-a14b": { + "id": "wan2-2-t2v-a14b", + "name": "Wan2.2-T2V-A14B", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-07-28", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text"], + "output": ["video"] + }, + "open_weights": true, + "limit": { + "context": 100, + "output": 1 + }, + "cost": { + "input": 0.6, + "output": 0 + } + }, + "qwen-2.5-14b-instruct": { + "id": "qwen-2.5-14b-instruct", + "name": "Qwen 2.5 14B Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-09", + "release_date": "2024-09-19", + "last_updated": "2024-09-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + } + }, + "openai-gpt-5.4": { + "id": "openai-gpt-5.4", + "name": "GPT-5.4", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 2.5, + "output": 15, + "cache_read": 0.25 + } + }, + "qwen3.5-397b-a17b": { + "id": "qwen3.5-397b-a17b", + "name": "Qwen 3.5 397B A17B", + "family": "qwen3.5", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2026-02-15", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 81920 + }, + "cost": { + "input": 0.55, + "output": 3.5 + } + }, + "openai-o3": { + "id": "openai-o3", + "name": "o3", + "family": "o", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } + }, + "e5-large-v2": { + "id": "e5-large-v2", + "name": "E5 Large v2", + "family": "text-embedding", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2023-05-19", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 512, + "output": 1024 + }, + "cost": { + "input": 0.02, + "output": 0 + } + }, + "openai-gpt-5.2-pro": { + "id": "openai-gpt-5.2-pro", + "name": "GPT-5.2 pro", + "family": "gpt-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 21, + "output": 168 + } + }, + "glm-5": { + "id": "glm-5", + "name": "GLM 5", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "release_date": "2026-02-11", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202752, + "output": 128000 + }, + "cost": { + "input": 1, + "output": 3.2 + } + }, + "openai-gpt-5.4-nano": { + "id": "openai-gpt-5.4-nano", + "name": "GPT-5.4 nano", + "family": "gpt-nano", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.2, + "output": 1.25, + "cache_read": 0.02 + } + }, + "mistral-7b-instruct-v0.3": { + "id": "mistral-7b-instruct-v0.3", + "name": "Mistral 7B Instruct v0.3", + "family": "mistral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2024-05-22", + "last_updated": "2024-05-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 32768 + } + }, + "llama3.3-70b-instruct": { + "id": "llama3.3-70b-instruct", + "name": "Llama 3.3 Instruct 70B", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.65, + "output": 0.65 + } + }, + "mistral-3-14B": { + "id": "mistral-3-14B", + "name": "Ministral 3 14B Instruct", + "family": "ministral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-12-15", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 128000 + }, + "cost": { + "input": 0.2, + "output": 0.2 + } + }, + "deepseek-r1-distill-llama-70b": { + "id": "deepseek-r1-distill-llama-70b", + "name": "DeepSeek R1 Distill Llama 70B", + "family": "deepseek-thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-01-30", + "last_updated": "2025-01-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.99, + "output": 0.99 + } + }, + "alibaba-qwen3-32b": { + "id": "alibaba-qwen3-32b", + "name": "Qwen3-32B", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-04-30", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131000, + "output": 40960 + }, + "cost": { + "input": 0.25, + "output": 0.55 + } + }, + "anthropic-claude-opus-4.5": { + "id": "anthropic-claude-opus-4.5", + "name": "Claude Opus 4.5", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-11-24", + "last_updated": "2025-11-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } + }, + "openai-o1": { + "id": "openai-o1", + "name": "o1", + "family": "o", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2023-09", + "release_date": "2024-12-05", + "last_updated": "2024-12-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 15, + "output": 60, + "cache_read": 7.5 + } + }, + "anthropic-claude-3-opus": { + "id": "anthropic-claude-3-opus", + "name": "Claude 3 Opus", + "family": "claude-opus", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2023-08", + "release_date": "2024-02-29", + "last_updated": "2024-02-29", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 4096 + }, + "status": "deprecated", + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } + }, + "stable-diffusion-3.5-large": { + "id": "stable-diffusion-3.5-large", + "name": "Stable Diffusion 3.5 Large", + "family": "stable-diffusion", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-10-22", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text"], + "output": ["image"] + }, + "open_weights": true, + "limit": { + "context": 256, + "output": 1 + }, + "cost": { + "input": 0.08, + "output": 0 + } + }, + "openai-gpt-5-nano": { + "id": "openai-gpt-5-nano", + "name": "GPT-5 nano", + "family": "gpt-nano", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.05, + "output": 0.4, + "cache_read": 0.005 + } + }, + "llama-4-maverick": { + "id": "llama-4-maverick", + "name": "Llama 4 Maverick 17B 128E Instruct", + "family": "llama", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-04-05", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 16384 + }, + "cost": { + "input": 0.25, + "output": 0.87 + } + }, + "anthropic-claude-4.5-sonnet": { + "id": "anthropic-claude-4.5-sonnet", + "name": "Claude Sonnet 4.5", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75, + "tiers": [ + { + "input": 6, + "output": 22.5, + "cache_read": 0.3, + "cache_write": 3.75, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 6, + "output": 22.5, + "cache_read": 0.3, + "cache_write": 3.75 + } + } + }, + "qwen3-embedding-0.6b": { + "id": "qwen3-embedding-0.6b", + "name": "Qwen3 Embedding 0.6B", + "family": "text-embedding", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-06-03", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8000, + "output": 1024 + }, + "status": "beta", + "cost": { + "input": 0.04, + "output": 0 + } + }, + "anthropic-claude-4.5-haiku": { + "id": "anthropic-claude-4.5-haiku", + "name": "Claude Haiku 4.5", + "family": "claude-haiku", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 1, + "cache_write": 1.25 + } + }, + "gte-large-en-v1.5": { + "id": "gte-large-en-v1.5", + "name": "GTE Large (v1.5)", + "family": "text-embedding", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-03-27", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 1024 + }, + "cost": { + "input": 0.09, + "output": 0 + } + }, + "openai-gpt-4.1": { + "id": "openai-gpt-4.1", + "name": "GPT-4.1", + "family": "gpt", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } + }, + "anthropic-claude-3.5-haiku": { + "id": "anthropic-claude-3.5-haiku", + "name": "Claude 3.5 Haiku", + "family": "claude-haiku", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2024-11-05", + "last_updated": "2024-11-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "status": "deprecated", + "cost": { + "input": 0.8, + "output": 4, + "cache_read": 0.08, + "cache_write": 1 + } + }, + "openai-gpt-5.2": { + "id": "openai-gpt-5.2", + "name": "GPT-5.2", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } + }, + "deepseek-3.2": { + "id": "deepseek-3.2", + "name": "DeepSeek V3.2", + "family": "deepseek", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2025-12-02", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 64000 + }, + "cost": { + "input": 0.5, + "output": 1.6 + } + }, + "nemotron-3-nano-30b": { + "id": "nemotron-3-nano-30b", + "name": "Nemotron 3 Nano 30B A3B", + "family": "nemotron", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "anthropic-claude-opus-4": { + "id": "anthropic-claude-opus-4", + "name": "Claude Opus 4", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } + }, + "openai-gpt-oss-20b": { + "id": "openai-gpt-oss-20b", + "name": "gpt-oss-20b", + "family": "gpt-oss", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-06", + "release_date": "2025-08-05", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.05, + "output": 0.45 + } + }, + "qwen3-coder-flash": { + "id": "qwen3-coder-flash", + "name": "Qwen3 Coder Flash", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.45, + "output": 1.7 + } + }, + "openai-o3-mini": { + "id": "openai-o3-mini", + "name": "o3-mini", + "family": "o-mini", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2024-12-20", + "last_updated": "2025-01-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.55 + } + }, + "openai-gpt-oss-120b": { + "id": "openai-gpt-oss-120b", + "name": "gpt-oss-120b", + "family": "gpt-oss", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": true, + "knowledge": "2024-06", + "release_date": "2025-08-05", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.1, + "output": 0.7 + } + }, + "gemma-4-31B-it": { + "id": "gemma-4-31B-it", + "name": "Gemma 4 31B", + "family": "gemma", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2026-04-22", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 8192 + }, + "cost": { + "input": 0.18, + "output": 0.5 + } + }, + "nemotron-nano-12b-v2-vl": { + "id": "nemotron-nano-12b-v2-vl", + "name": "Nemotron Nano 12B v2 VL", + "family": "nemotron", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-12-01", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.2, + "output": 0.6 + } + }, + "anthropic-claude-4.1-opus": { + "id": "anthropic-claude-4.1-opus", + "name": "Claude Opus 4.1", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } + }, + "kimi-k2.6": { + "id": "kimi-k2.6", + "name": "Kimi K2.6", + "family": "kimi", + "attachment": true, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-01", + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.95, + "output": 4 + } + }, + "openai-gpt-image-2": { + "id": "openai-gpt-image-2", + "name": "GPT Image 2", + "family": "gpt-image", + "attachment": true, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-04-24", + "last_updated": "2025-04-24", + "modalities": { + "input": ["text", "image"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 0, + "output": 0 + } + }, + "anthropic-claude-4.6-sonnet": { + "id": "anthropic-claude-4.6-sonnet", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75, + "tiers": [ + { + "input": 6, + "output": 22.5, + "cache_read": 0.3, + "cache_write": 3.75, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 6, + "output": 22.5, + "cache_read": 0.3, + "cache_write": 3.75 + } + } + }, + "openai-gpt-5-mini": { + "id": "openai-gpt-5-mini", + "name": "GPT-5 mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.025 + } + }, + "anthropic-claude-haiku-4.5": { + "id": "anthropic-claude-haiku-4.5", + "name": "Claude Haiku 4.5", + "family": "claude-haiku", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 1, + "cache_write": 1.25 + } + }, + "deepseek-v4-pro": { + "id": "deepseek-v4-pro", + "name": "DeepSeek V4 Pro", + "family": "deepseek-thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1048576, + "output": 393216 + }, + "cost": { + "input": 1.74, + "output": 3.48 + } + }, + "ministral-3-8b-instruct-2512": { + "id": "ministral-3-8b-instruct-2512", + "name": "Ministral 3 8B", + "family": "ministral", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2025-12-15", + "last_updated": "2025-12-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "minimax-m2.5": { + "id": "minimax-m2.5", + "name": "MiniMax M2.5", + "family": "minimax-m2.5", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-08", + "release_date": "2026-02-12", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 128000 + }, + "status": "beta", + "cost": { + "input": 0.3, + "output": 1.2 + } + }, + "openai-gpt-image-1": { + "id": "openai-gpt-image-1", + "name": "GPT Image 1", + "family": "gpt-image", + "attachment": true, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-04-24", + "last_updated": "2025-04-24", + "modalities": { + "input": ["text", "image"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 0, + "output": 0 + }, + "cost": { + "input": 5, + "output": 40, + "cache_read": 1.25 + } + }, + "openai-gpt-5.5": { + "id": "openai-gpt-5.5", + "name": "GPT-5.5", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-12-01", + "release_date": "2026-04-23", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 30, + "cache_read": 0.5, + "tiers": [ + { + "input": 10, + "output": 45, + "cache_read": 1, + "tier": { + "type": "context", + "size": 272000 + } + } + ], + "context_over_200k": { + "input": 10, + "output": 45, + "cache_read": 1 + } + } + }, + "nvidia-nemotron-3-super-120b": { + "id": "nvidia-nemotron-3-super-120b", + "name": "Nemotron-3-Super-120B", + "family": "nemotron", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2026-02", + "release_date": "2026-03-11", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 32768 + }, + "status": "beta", + "cost": { + "input": 0.3, + "output": 0.65 + } + }, + "openai-gpt-5.4-pro": { + "id": "openai-gpt-5.4-pro", + "name": "GPT-5.4 pro", + "family": "gpt-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 30, + "output": 180 + } + }, + "all-mini-lm-l6-v2": { + "id": "all-mini-lm-l6-v2", + "name": "All-MiniLM-L6-v2", + "family": "text-embedding", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2021-08-30", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256, + "output": 384 + }, + "cost": { + "input": 0.009, + "output": 0 + } + }, + "bge-m3": { + "id": "bge-m3", + "name": "BGE M3", + "family": "bge", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-01-30", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 1024 + }, + "cost": { + "input": 0.02, + "output": 0 + } + }, + "openai-gpt-5.1-codex-max": { + "id": "openai-gpt-5.1-codex-max", + "name": "GPT-5.1 Codex Max", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } + }, + "anthropic-claude-opus-4.6": { + "id": "anthropic-claude-opus-4.6", + "name": "Claude Opus 4.6", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25, + "tiers": [ + { + "input": 10, + "output": 37.5, + "cache_read": 0.5, + "cache_write": 6.25, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 10, + "output": 37.5, + "cache_read": 0.5, + "cache_write": 6.25 + } + } + }, + "openai-gpt-4o": { + "id": "openai-gpt-4o", + "name": "GPT-4o", + "family": "gpt", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2023-09", + "release_date": "2024-05-13", + "last_updated": "2024-08-06", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 10, + "cache_read": 1.25 + } + }, + "openai-gpt-5.4-mini": { + "id": "openai-gpt-5.4-mini", + "name": "GPT-5.4 mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.75, + "output": 4.5, + "cache_read": 0.075 + } + }, + "openai-gpt-5": { + "id": "openai-gpt-5", + "name": "GPT-5", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } + }, + "arcee-trinity-large-thinking": { + "id": "arcee-trinity-large-thinking", + "name": "Trinity Large Thinking", + "family": "trinity", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-02", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 128000 + }, + "status": "beta", + "cost": { + "input": 0.25, + "output": 0.9, + "cache_read": 0.06 + } + }, + "mistral-nemo-instruct-2407": { + "id": "mistral-nemo-instruct-2407", + "name": "Mistral Nemo Instruct", + "family": "mistral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 16384 + }, + "status": "deprecated", + "cost": { + "input": 0.3, + "output": 0.3 + } + }, + "deepseek-v3": { + "id": "deepseek-v3", + "name": "DeepSeek V3", + "family": "deepseek", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2024-12-26", + "last_updated": "2025-03-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 163840, + "output": 131072 + } + }, + "bge-reranker-v2-m3": { + "id": "bge-reranker-v2-m3", + "name": "BGE Reranker v2 M3", + "family": "bge", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-03-12", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 1 + }, + "cost": { + "input": 0.01, + "output": 0 + } + }, + "anthropic-claude-3.7-sonnet": { + "id": "anthropic-claude-3.7-sonnet", + "name": "Claude 3.7 Sonnet", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2025-02-24", + "last_updated": "2025-02-24", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "status": "deprecated", + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } + }, + "qwen3-tts-voicedesign": { + "id": "qwen3-tts-voicedesign", + "name": "Qwen3 TTS VoiceDesign", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2026-04-21", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text"], + "output": ["audio"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 1 + } + }, + "openai-gpt-image-1.5": { + "id": "openai-gpt-image-1.5", + "name": "GPT Image 1.5", + "family": "gpt-image", + "attachment": true, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-11-25", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 0, + "output": 0 + }, + "cost": { + "input": 5, + "output": 10, + "cache_read": 1 + } + }, + "openai-gpt-5.3-codex": { + "id": "openai-gpt-5.3-codex", + "name": "GPT-5.3 Codex", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } + }, + "anthropic-claude-3.5-sonnet": { + "id": "anthropic-claude-3.5-sonnet", + "name": "Claude 3.5 Sonnet", + "family": "claude-sonnet", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2024-06-20", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "status": "deprecated", + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } + }, + "fal-ai/fast-sdxl": { + "id": "fal-ai/fast-sdxl", + "name": "Fast SDXL", + "family": "stable-diffusion", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2023-07-26", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text"], + "output": ["image"] + }, + "open_weights": true, + "limit": { + "context": 0, + "output": 0 + } + }, + "fal-ai/flux/schnell": { + "id": "fal-ai/flux/schnell", + "name": "FLUX.1 [schnell]", + "family": "flux", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-08-01", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text"], + "output": ["image"] + }, + "open_weights": true, + "limit": { + "context": 0, + "output": 0 + } + }, + "fal-ai/elevenlabs/tts/multilingual-v2": { + "id": "fal-ai/elevenlabs/tts/multilingual-v2", + "name": "ElevenLabs Multilingual TTS v2", + "family": "elevenlabs", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2023-08-22", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text"], + "output": ["audio"] + }, + "open_weights": false, + "limit": { + "context": 0, + "output": 0 + } + }, + "fal-ai/stable-audio-25/text-to-audio": { + "id": "fal-ai/stable-audio-25/text-to-audio", + "name": "Stable Audio 2.5 (Text-to-Audio)", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-10-08", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text"], + "output": ["audio"] + }, + "open_weights": false, + "limit": { + "context": 0, + "output": 0 + } + } + } + }, + "vultr": { + "id": "vultr", + "env": ["VULTR_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.vultrinference.com/v1", + "name": "Vultr", + "doc": "https://api.vultrinference.com/", + "models": { + "MiniMax-M2.5": { + "id": "MiniMax-M2.5", + "name": "MiniMax M2.5", + "family": "minimax", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-09", + "release_date": "2025-02-11", + "last_updated": "2025-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 194000, + "output": 4096 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } + }, + "GLM-5-FP8": { + "id": "GLM-5-FP8", + "name": "GLM 5 FP8", + "family": "glm", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 0.85, + "output": 3.1 + } + }, + "DeepSeek-V3.2": { + "id": "DeepSeek-V3.2", + "name": "DeepSeek V3.2", + "family": "deepseek", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 127000, + "output": 4096 + }, + "cost": { + "input": 0.55, + "output": 1.65 + } + }, + "gpt-oss-120b": { + "id": "gpt-oss-120b", + "name": "GPT OSS 120B", + "family": "gpt-oss", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-06", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 129000, + "output": 4096 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } + }, + "Kimi-K2.5": { + "id": "Kimi-K2.5", + "name": "Kimi K2 Instruct", + "family": "kimi", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 254000, + "output": 32768 + }, + "cost": { + "input": 0.55, + "output": 2.75 + } + } + } + }, + "alibaba-coding-plan-cn": { + "id": "alibaba-coding-plan-cn", + "env": ["ALIBABA_CODING_PLAN_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://coding.dashscope.aliyuncs.com/v1", + "name": "Alibaba Coding Plan (China)", + "doc": "https://help.aliyun.com/zh/model-studio/coding-plan", + "models": { + "qwen3-coder-plus": { + "id": "qwen3-coder-plus", + "name": "Qwen3 Coder Plus", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + }, + "kimi-k2.5": { + "id": "kimi-k2.5", + "name": "Kimi K2.5", + "family": "kimi", + "attachment": true, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + }, + "glm-4.7": { + "id": "glm-4.7", + "name": "GLM-4.7", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202752, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + }, + "glm-5": { + "id": "glm-5", + "name": "GLM-5", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 202752, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + }, + "MiniMax-M2.5": { + "id": "MiniMax-M2.5", + "name": "MiniMax-M2.5", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 196608, + "output": 24576 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + }, + "qwen3.6-plus": { + "id": "qwen3.6-plus", + "name": "Qwen3.6 Plus", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + }, + "qwen3-max-2026-01-23": { + "id": "qwen3-max-2026-01-23", + "name": "Qwen3 Max", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2026-01-23", + "last_updated": "2026-01-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + }, + "qwen3-coder-next": { + "id": "qwen3-coder-next", + "name": "Qwen3 Coder Next", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2026-02-03", + "last_updated": "2026-02-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + }, + "qwen3.5-plus": { + "id": "qwen3.5-plus", + "name": "Qwen3.5 Plus", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2026-02-16", + "last_updated": "2026-02-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + } + } + }, + "mistral": { + "id": "mistral", + "env": ["MISTRAL_API_KEY"], + "npm": "@ai-sdk/mistral", + "name": "Mistral", + "doc": "https://docs.mistral.ai/getting-started/models/", + "models": { + "mistral-small-latest": { + "id": "mistral-small-latest", + "name": "Mistral Small (latest)", + "family": "mistral-small", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-06", + "release_date": "2026-03-16", + "last_updated": "2026-03-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } + }, + "mistral-nemo": { + "id": "mistral-nemo", + "name": "Mistral Nemo", + "family": "mistral-nemo", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2024-07-01", + "last_updated": "2024-07-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.15, + "output": 0.15 + } + }, + "mistral-large-2512": { + "id": "mistral-large-2512", + "name": "Mistral Large 3", + "family": "mistral-large", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2024-11-01", + "last_updated": "2025-12-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.5, + "output": 1.5 + } + }, + "labs-devstral-small-2512": { + "id": "labs-devstral-small-2512", + "name": "Devstral Small 2", + "family": "devstral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-12", + "release_date": "2025-12-09", + "last_updated": "2025-12-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "devstral-2512": { + "id": "devstral-2512", + "name": "Devstral 2", + "family": "devstral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-12", + "release_date": "2025-12-09", + "last_updated": "2025-12-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.4, + "output": 2 + } + }, + "magistral-medium-latest": { + "id": "magistral-medium-latest", + "name": "Magistral Medium (latest)", + "family": "magistral-medium", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-06", + "release_date": "2025-03-17", + "last_updated": "2025-03-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 2, + "output": 5 + } + }, + "open-mixtral-8x7b": { + "id": "open-mixtral-8x7b", + "name": "Mixtral 8x7B", + "family": "mixtral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-01", + "release_date": "2023-12-11", + "last_updated": "2023-12-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32000, + "output": 32000 + }, + "cost": { + "input": 0.7, + "output": 0.7 + } + }, + "pixtral-large-latest": { + "id": "pixtral-large-latest", + "name": "Pixtral Large (latest)", + "family": "pixtral", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2024-11-01", + "last_updated": "2024-11-04", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 2, + "output": 6 + } + }, + "mistral-large-2411": { + "id": "mistral-large-2411", + "name": "Mistral Large 2.1", + "family": "mistral-large", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2024-11-01", + "last_updated": "2024-11-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 2, + "output": 6 + } + }, + "codestral-latest": { + "id": "codestral-latest", + "name": "Codestral (latest)", + "family": "codestral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2024-05-29", + "last_updated": "2025-01-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 4096 + }, + "cost": { + "input": 0.3, + "output": 0.9 + } + }, + "mistral-large-latest": { + "id": "mistral-large-latest", + "name": "Mistral Large (latest)", + "family": "mistral-large", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2024-11-01", + "last_updated": "2025-12-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.5, + "output": 1.5 + } + }, + "mistral-small-2506": { + "id": "mistral-small-2506", + "name": "Mistral Small 3.2", + "family": "mistral-small", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03", + "release_date": "2025-06-20", + "last_updated": "2025-06-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.1, + "output": 0.3 + } + }, + "pixtral-12b": { + "id": "pixtral-12b", + "name": "Pixtral 12B", + "family": "pixtral", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-09", + "release_date": "2024-09-01", + "last_updated": "2024-09-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.15, + "output": 0.15 + } + }, + "ministral-8b-latest": { + "id": "ministral-8b-latest", + "name": "Ministral 8B (latest)", + "family": "ministral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2024-10-01", + "last_updated": "2024-10-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } + }, + "mistral-embed": { + "id": "mistral-embed", + "name": "Mistral Embed", + "family": "mistral-embed", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2023-12-11", + "last_updated": "2023-12-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8000, + "output": 3072 + }, + "cost": { + "input": 0.1, + "output": 0 + } + }, + "magistral-small": { + "id": "magistral-small", + "name": "Magistral Small", + "family": "magistral-small", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-06", + "release_date": "2025-03-17", + "last_updated": "2025-03-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.5, + "output": 1.5 + } + }, + "mistral-small-2603": { + "id": "mistral-small-2603", + "name": "Mistral Small 4", + "family": "mistral-small", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-06", + "release_date": "2026-03-16", + "last_updated": "2026-03-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } + }, + "ministral-3b-latest": { + "id": "ministral-3b-latest", + "name": "Ministral 3B (latest)", + "family": "ministral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2024-10-01", + "last_updated": "2024-10-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.04, + "output": 0.04 + } + }, + "open-mixtral-8x22b": { + "id": "open-mixtral-8x22b", + "name": "Mixtral 8x22B", + "family": "mixtral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2024-04-17", + "last_updated": "2024-04-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 64000, + "output": 64000 + }, + "cost": { + "input": 2, + "output": 6 + } + }, + "mistral-medium-2604": { + "id": "mistral-medium-2604", + "name": "Mistral Medium 3.5", + "family": "mistral-medium", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2026-04-29", + "last_updated": "2026-04-29", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 1.5, + "output": 7.5 + } + }, + "devstral-small-2505": { + "id": "devstral-small-2505", + "name": "Devstral Small 2505", + "family": "devstral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2025-05-07", + "last_updated": "2025-05-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.1, + "output": 0.3 + } + }, + "devstral-medium-2507": { + "id": "devstral-medium-2507", + "name": "Devstral Medium", + "family": "devstral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2025-07-10", + "last_updated": "2025-07-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.4, + "output": 2 + } + }, + "open-mistral-7b": { + "id": "open-mistral-7b", + "name": "Mistral 7B", + "family": "mistral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2023-09-27", + "last_updated": "2023-09-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8000, + "output": 8000 + }, + "cost": { + "input": 0.25, + "output": 0.25 + } + }, + "devstral-medium-latest": { + "id": "devstral-medium-latest", + "name": "Devstral 2 (latest)", + "family": "devstral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-12", + "release_date": "2025-12-02", + "last_updated": "2025-12-02", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.4, + "output": 2 + } + }, + "mistral-medium-2505": { + "id": "mistral-medium-2505", + "name": "Mistral Medium 3", + "family": "mistral-medium", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2025-05-07", + "last_updated": "2025-05-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.4, + "output": 2 + } + }, + "devstral-small-2507": { + "id": "devstral-small-2507", + "name": "Devstral Small", + "family": "devstral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2025-07-10", + "last_updated": "2025-07-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.1, + "output": 0.3 + } + }, + "mistral-medium-2508": { + "id": "mistral-medium-2508", + "name": "Mistral Medium 3.1", + "family": "mistral-medium", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2025-08-12", + "last_updated": "2025-08-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.4, + "output": 2 + } + }, + "mistral-medium-latest": { + "id": "mistral-medium-latest", + "name": "Mistral Medium (latest)", + "family": "mistral-medium", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2026-04-29", + "last_updated": "2026-04-29", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 1.5, + "output": 7.5 + } + } + } + }, + "ovhcloud": { + "id": "ovhcloud", + "env": ["OVHCLOUD_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://oai.endpoints.kepler.ai.cloud.ovh.net/v1", + "name": "OVHcloud AI Endpoints", + "doc": "https://www.ovhcloud.com/en/public-cloud/ai-endpoints/catalog//", + "models": { + "meta-llama-3_3-70b-instruct": { + "id": "meta-llama-3_3-70b-instruct", + "name": "Meta-Llama-3_3-70B-Instruct", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-04-01", + "last_updated": "2025-04-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.74, + "output": 0.74 + } + }, + "mistral-7b-instruct-v0.3": { + "id": "mistral-7b-instruct-v0.3", + "name": "Mistral-7B-Instruct-v0.3", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-04-01", + "last_updated": "2025-04-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 65536, + "output": 65536 + }, + "cost": { + "input": 0.11, + "output": 0.11 + } + }, + "qwen3-32b": { + "id": "qwen3-32b", + "name": "Qwen3-32B", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-16", + "last_updated": "2025-07-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.09, + "output": 0.25 + } + }, + "qwen2.5-vl-72b-instruct": { + "id": "qwen2.5-vl-72b-instruct", + "name": "Qwen2.5-VL-72B-Instruct", + "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": true, + "temperature": true, + "release_date": "2025-03-31", + "last_updated": "2025-03-31", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 1.01, + "output": 1.01 + } + }, + "qwen3-coder-30b-a3b-instruct": { + "id": "qwen3-coder-30b-a3b-instruct", + "name": "Qwen3-Coder-30B-A3B-Instruct", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-10-28", + "last_updated": "2025-10-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.07, + "output": 0.26 + } + }, + "gpt-oss-20b": { + "id": "gpt-oss-20b", + "name": "gpt-oss-20b", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "release_date": "2025-08-28", + "last_updated": "2025-08-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.05, + "output": 0.18 + } + }, + "mistral-small-3.2-24b-instruct-2506": { + "id": "mistral-small-3.2-24b-instruct-2506", + "name": "Mistral-Small-3.2-24B-Instruct-2506", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-16", + "last_updated": "2025-07-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.1, + "output": 0.31 + } + }, + "qwen3.5-9b": { + "id": "qwen3.5-9b", + "name": "Qwen3.5-9B", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2026-02-15", + "last_updated": "2026-02-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.1, + "output": 0.15 + } + }, + "gpt-oss-120b": { + "id": "gpt-oss-120b", + "name": "gpt-oss-120b", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "release_date": "2025-08-28", + "last_updated": "2025-08-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.09, + "output": 0.47 + } + }, + "mistral-nemo-instruct-2407": { + "id": "mistral-nemo-instruct-2407", + "name": "Mistral-Nemo-Instruct-2407", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2024-11-20", + "last_updated": "2024-11-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 65536, + "output": 65536 + }, + "cost": { + "input": 0.14, + "output": 0.14 + } + }, + "llama-3.1-8b-instruct": { + "id": "llama-3.1-8b-instruct", + "name": "Llama-3.1-8B-Instruct", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-06-11", + "last_updated": "2025-06-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.11, + "output": 0.11 + } + } + } + }, + "friendli": { + "id": "friendli", + "env": ["FRIENDLI_TOKEN"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.friendli.ai/serverless/v1", + "name": "Friendli", + "doc": "https://friendli.ai/docs/guides/serverless_endpoints/introduction", + "models": { + "Qwen/Qwen3-235B-A22B-Instruct-2507": { + "id": "Qwen/Qwen3-235B-A22B-Instruct-2507", + "name": "Qwen3 235B A22B Instruct 2507", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-29", + "last_updated": "2026-01-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.2, + "output": 0.8 + } + }, + "zai-org/GLM-5.1": { + "id": "zai-org/GLM-5.1", + "name": "GLM-5.1", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": true, + "release_date": "2026-04-07", + "last_updated": "2026-04-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202752, + "output": 202752 + }, + "cost": { + "input": 1.4, + "output": 4.4, + "cache_read": 0.26 + } + }, + "zai-org/GLM-5": { + "id": "zai-org/GLM-5", + "name": "GLM-5", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": true, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202752, + "output": 202752 + }, + "cost": { + "input": 1, + "output": 3.2, + "cache_read": 0.5 + } + }, + "meta-llama/Llama-3.3-70B-Instruct": { + "id": "meta-llama/Llama-3.3-70B-Instruct", + "name": "Llama 3.3 70B Instruct", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2024-08-01", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 0.6 + } + }, + "meta-llama/Llama-3.1-8B-Instruct": { + "id": "meta-llama/Llama-3.1-8B-Instruct", + "name": "Llama 3.1 8B Instruct", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2024-08-01", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8000 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } + }, + "MiniMaxAI/MiniMax-M2.5": { + "id": "MiniMaxAI/MiniMax-M2.5", + "name": "MiniMax-M2.5", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": true, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 196608, + "output": 196608 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.06 + } + } + } + }, + "cortecs": { + "id": "cortecs", + "env": ["CORTECS_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.cortecs.ai/v1", + "name": "Cortecs", + "doc": "https://api.cortecs.ai/v1/models", + "models": { + "minimax-m2.7": { + "id": "minimax-m2.7", + "name": "MiniMax-m2.7", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202752, + "output": 196072 + }, + "cost": { + "input": 0.47, + "output": 1.4 + } + }, + "claude-haiku-4-5": { + "id": "claude-haiku-4-5", + "name": "Claude Haiku 4.5", + "family": "claude-haiku", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 200000 + }, + "cost": { + "input": 1.09, + "output": 5.43 + } + }, + "qwen3-235b-a22b-instruct-2507": { + "id": "qwen3-235b-a22b-instruct-2507", + "name": "Qwen3 235B A22B Instruct 2507", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.062, + "output": 0.408 + } + }, + "kimi-k2.5": { + "id": "kimi-k2.5", + "name": "Kimi K2.5", + "family": "kimi-thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.55, + "output": 2.76 + } + }, + "deepseek-v3-0324": { + "id": "deepseek-v3-0324", + "name": "DeepSeek V3 0324", + "family": "deepseek", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-03-24", + "last_updated": "2025-03-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.551, + "output": 1.654 + } + }, + "glm-4.7": { + "id": "glm-4.7", + "name": "GLM 4.7", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 198000, + "output": 198000 + }, + "cost": { + "input": 0.45, + "output": 2.23 + } + }, + "claude-opus4-7": { + "id": "claude-opus4-7", + "name": "Claude Opus 4.7", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5.6, + "output": 27.99, + "cache_read": 0.56, + "cache_write": 6.99 + } + }, + "glm-5": { + "id": "glm-5", + "name": "GLM 5", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202752, + "output": 202752 + }, + "cost": { + "input": 1.08, + "output": 3.44 + } + }, + "nova-pro-v1": { + "id": "nova-pro-v1", + "name": "Nova Pro 1.0", + "family": "nova-pro", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2024-12-03", + "last_updated": "2024-12-03", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 300000, + "output": 5000 + }, + "cost": { + "input": 1.016, + "output": 4.061 + } + }, + "devstral-2512": { + "id": "devstral-2512", + "name": "Devstral 2 2512", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-12", + "release_date": "2025-12-09", + "last_updated": "2025-12-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "qwen3-32b": { + "id": "qwen3-32b", + "name": "Qwen3 32B", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2025-04-29", + "last_updated": "2025-04-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 16384, + "output": 16384 + }, + "cost": { + "input": 0.099, + "output": 0.33 + } + }, + "codestral-2508": { + "id": "codestral-2508", + "name": "Codestral 2508", + "family": "mistral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03", + "release_date": "2025-07-30", + "last_updated": "2025-07-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.3, + "output": 0.9, + "cache_read": 0.03 + } + }, + "claude-4-5-sonnet": { + "id": "claude-4-5-sonnet", + "name": "Claude 4.5 Sonnet", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 200000 + }, + "cost": { + "input": 3.259, + "output": 16.296 + } + }, + "kimi-k2-instruct": { + "id": "kimi-k2-instruct", + "name": "Kimi K2 Instruct", + "family": "kimi", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-07-11", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.551, + "output": 2.646 + } + }, + "nemotron-3-super-120b-a12b": { + "id": "nemotron-3-super-120b-a12b", + "name": "Nemotron 3 Super 120B A12B", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-12", + "release_date": "2026-03-11", + "last_updated": "2026-03-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.266, + "output": 0.799 + } + }, + "minimax-m2": { + "id": "minimax-m2", + "name": "MiniMax-M2", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2025-10-27", + "last_updated": "2025-10-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 400000, + "output": 400000 + }, + "cost": { + "input": 0.39, + "output": 1.57 + } + }, + "gemini-2.5-pro": { + "id": "gemini-2.5-pro", + "name": "Gemini 2.5 Pro", + "family": "gemini-pro", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-06-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65535 + }, + "cost": { + "input": 1.654, + "output": 11.024 + } + }, + "claude-opus4-6": { + "id": "claude-opus4-6", + "name": "Claude Opus 4.6", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 1000000 + }, + "cost": { + "input": 5.98, + "output": 29.89 + } + }, + "devstral-small-2512": { + "id": "devstral-small-2512", + "name": "Devstral Small 2 2512", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-12", + "release_date": "2025-12-09", + "last_updated": "2025-12-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "minimax-m2.1": { + "id": "minimax-m2.1", + "name": "MiniMax-M2.1", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 196000, + "output": 196000 + }, + "cost": { + "input": 0.34, + "output": 1.34 + } + }, + "glm-5.1": { + "id": "glm-5.1", + "name": "GLM-5.1", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": true, + "release_date": "2026-04-14", + "last_updated": "2026-04-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 1.31, + "output": 4.1, + "cache_read": 0.24 + } + }, + "glm-4.5": { + "id": "glm-4.5", + "name": "GLM 4.5", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-29", + "last_updated": "2025-07-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.67, + "output": 2.46 + } + }, + "claude-opus4-5": { + "id": "claude-opus4-5", + "name": "Claude Opus 4.5", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-11-24", + "last_updated": "2025-11-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 200000 + }, + "cost": { + "input": 5.98, + "output": 29.89 + } + }, + "claude-sonnet-4": { + "id": "claude-sonnet-4", + "name": "Claude Sonnet 4", + "family": "claude-sonnet", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3.307, + "output": 16.536 + } + }, + "qwen3-next-80b-a3b-thinking": { + "id": "qwen3-next-80b-a3b-thinking", + "name": "Qwen3 Next 80B A3B Thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-09-11", + "last_updated": "2025-09-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.164, + "output": 1.311 + } + }, + "glm-4.5-air": { + "id": "glm-4.5-air", + "name": "GLM 4.5 Air", + "family": "glm-air", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-08-01", + "last_updated": "2025-08-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.22, + "output": 1.34 + } + }, + "kimi-k2.6": { + "id": "kimi-k2.6", + "name": "Kimi K2.6", + "family": "kimi-thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "release_date": "2026-04-17", + "last_updated": "2026-04-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.81, + "output": 3.54, + "cache_read": 0.2 + } + }, + "qwen3-coder-next": { + "id": "qwen3-coder-next", + "name": "Qwen3 Coder Next 80B", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2026-02-04", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 65536 + }, + "cost": { + "input": 0.158, + "output": 0.84 + } + }, + "claude-4-6-sonnet": { + "id": "claude-4-6-sonnet", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 1000000 + }, + "cost": { + "input": 3.59, + "output": 17.92 + } + }, + "qwen3-coder-480b-a35b-instruct": { + "id": "qwen3-coder-480b-a35b-instruct", + "name": "Qwen3 Coder 480B A35B Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-07-25", + "last_updated": "2025-07-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.441, + "output": 1.984 + } + }, + "mixtral-8x7B-instruct-v0.1": { + "id": "mixtral-8x7B-instruct-v0.1", + "name": "Mixtral 8x7B Instruct v0.1", + "attachment": false, + "reasoning": true, + "tool_call": false, + "temperature": true, + "knowledge": "2023-09", + "release_date": "2023-12-11", + "last_updated": "2023-12-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32000, + "output": 32000 + }, + "cost": { + "input": 0.438, + "output": 0.68 + } + }, + "hermes-4-70b": { + "id": "hermes-4-70b", + "name": "Hermes 4 70B", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2025-08-26", + "last_updated": "2025-08-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.116, + "output": 0.358 + } + }, + "minimax-m2.5": { + "id": "minimax-m2.5", + "name": "MiniMax-M2.5", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 196608, + "output": 196608 + }, + "cost": { + "input": 0.32, + "output": 1.18 + } + }, + "deepseek-v3.2": { + "id": "deepseek-v3.2", + "name": "DeepSeek V3.2", + "family": "deepseek", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 163840, + "output": 163840 + }, + "cost": { + "input": 0.266, + "output": 0.444 + } + }, + "intellect-3": { + "id": "intellect-3", + "name": "INTELLECT 3", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-11", + "release_date": "2025-11-26", + "last_updated": "2025-11-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.219, + "output": 1.202 + } + }, + "glm-4.7-flash": { + "id": "glm-4.7-flash", + "name": "GLM-4.7-Flash", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-08-08", + "last_updated": "2025-08-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 203000, + "output": 203000 + }, + "cost": { + "input": 0.09, + "output": 0.53 + } + }, + "gpt-oss-120b": { + "id": "gpt-oss-120b", + "name": "GPT Oss 120b", + "family": "gpt-oss", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-01", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "qwen-2.5-72b-instruct": { + "id": "qwen-2.5-72b-instruct", + "name": "Qwen2.5 72B Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-06", + "release_date": "2024-09-19", + "last_updated": "2024-09-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 33000, + "output": 33000 + }, + "cost": { + "input": 0.062, + "output": 0.231 + } + }, + "deepseek-r1-0528": { + "id": "deepseek-r1-0528", + "name": "DeepSeek R1 0528", + "family": "deepseek-thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-05-28", + "last_updated": "2025-05-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 164000, + "output": 164000 + }, + "cost": { + "input": 0.585, + "output": 2.307 + } + }, + "gpt-4.1": { + "id": "gpt-4.1", + "name": "GPT 4.1", + "family": "gpt", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-06", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 2.354, + "output": 9.417 + } + }, + "kimi-k2-thinking": { + "id": "kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "attachment": true, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2025-12", + "release_date": "2025-12-08", + "last_updated": "2025-12-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.656, + "output": 2.731 + } + }, + "llama-3.1-405b-instruct": { + "id": "llama-3.1-405b-instruct", + "name": "Llama 3.1 405B Instruct", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "qwen3.5-122b-a10b": { + "id": "qwen3.5-122b-a10b", + "name": "Qwen3.5 122B A10B", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2026-01", + "release_date": "2026-02-24", + "last_updated": "2026-02-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.444, + "output": 3.106 + } + }, + "llama-3.3-70b-instruct": { + "id": "llama-3.3-70b-instruct", + "name": "Llama 3.3 70B Instruct", + "family": "llama", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.089, + "output": 0.275 + } + }, + "mistral-large-2512": { + "id": "mistral-large-2512", + "name": "Mistral Large 3 2512", + "family": "mistral-large", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-12", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.5, + "output": 1.5, + "cache_read": 0.05 + } + }, + "qwen3.5-397b-a17b": { + "id": "qwen3.5-397b-a17b", + "name": "Qwen3.5 397B A17B", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2026-01", + "release_date": "2026-02-16", + "last_updated": "2026-02-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 250000, + "output": 250000 + }, + "cost": { + "input": 0.6, + "output": 3.6 + } + }, + "deepseek-v4-flash": { + "id": "deepseek-v4-flash", + "name": "DeepSeek V4 Flash", + "family": "deepseek-flash", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1048576, + "output": 384000 + }, + "cost": { + "input": 0.133, + "output": 0.266, + "cache_read": 0.028 + } + }, + "deepseek-v4-pro": { + "id": "deepseek-v4-pro", + "name": "DeepSeek V4 Pro", + "family": "deepseek-thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1048576, + "output": 384000 + }, + "cost": { + "input": 1.553, + "output": 3.106, + "cache_read": 0.145 + } + }, + "qwen3-coder-30b-a3b-instruct": { + "id": "qwen3-coder-30b-a3b-instruct", + "name": "Qwen3 Coder 30B A3B Instruct", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-31", + "last_updated": "2025-07-31", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.053, + "output": 0.222 + } + } + } + }, + "siliconflow": { + "id": "siliconflow", + "env": ["SILICONFLOW_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.siliconflow.com/v1", + "name": "SiliconFlow", + "doc": "https://cloud.siliconflow.com/models", + "models": { + "nex-agi/DeepSeek-V3.1-Nex-N1": { + "id": "nex-agi/DeepSeek-V3.1-Nex-N1", + "name": "nex-agi/DeepSeek-V3.1-Nex-N1", + "family": "deepseek", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-01-01", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.5, + "output": 2 + } + }, + "Qwen/Qwen2.5-VL-72B-Instruct": { + "id": "Qwen/Qwen2.5-VL-72B-Instruct", + "name": "Qwen/Qwen2.5-VL-72B-Instruct", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-01-28", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 4000 + }, + "cost": { + "input": 0.59, + "output": 0.59 + } + }, + "Qwen/Qwen3-VL-32B-Thinking": { + "id": "Qwen/Qwen3-VL-32B-Thinking", + "name": "Qwen/Qwen3-VL-32B-Thinking", + "family": "qwen", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-10-21", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.2, + "output": 1.5 + } + }, + "Qwen/Qwen3-30B-A3B-Thinking-2507": { + "id": "Qwen/Qwen3-30B-A3B-Thinking-2507", + "name": "Qwen/Qwen3-30B-A3B-Thinking-2507", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-31", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 131000 + }, + "cost": { + "input": 0.09, + "output": 0.3 + } + }, + "Qwen/Qwen3-VL-235B-A22B-Thinking": { + "id": "Qwen/Qwen3-VL-235B-A22B-Thinking", + "name": "Qwen/Qwen3-VL-235B-A22B-Thinking", + "family": "qwen", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-10-04", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.45, + "output": 3.5 + } + }, + "Qwen/Qwen2.5-7B-Instruct": { + "id": "Qwen/Qwen2.5-7B-Instruct", + "name": "Qwen/Qwen2.5-7B-Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2024-09-18", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 33000, + "output": 4000 + }, + "cost": { + "input": 0.05, + "output": 0.05 + } + }, + "Qwen/Qwen2.5-Coder-32B-Instruct": { + "id": "Qwen/Qwen2.5-Coder-32B-Instruct", + "name": "Qwen/Qwen2.5-Coder-32B-Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2024-11-11", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 33000, + "output": 4000 + }, + "cost": { + "input": 0.18, + "output": 0.18 + } + }, + "Qwen/Qwen3-VL-30B-A3B-Instruct": { + "id": "Qwen/Qwen3-VL-30B-A3B-Instruct", + "name": "Qwen/Qwen3-VL-30B-A3B-Instruct", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-10-05", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.29, + "output": 1 + } + }, + "Qwen/QwQ-32B": { + "id": "Qwen/QwQ-32B", + "name": "Qwen/QwQ-32B", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-03-06", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.15, + "output": 0.58 + } + }, + "Qwen/Qwen3-235B-A22B": { + "id": "Qwen/Qwen3-235B-A22B", + "name": "Qwen/Qwen3-235B-A22B", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-04-30", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.35, + "output": 1.42 + } + }, + "Qwen/Qwen3-Omni-30B-A3B-Captioner": { + "id": "Qwen/Qwen3-Omni-30B-A3B-Captioner", + "name": "Qwen/Qwen3-Omni-30B-A3B-Captioner", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-10-04", + "last_updated": "2025-11-25", + "modalities": { + "input": ["audio"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 66000, + "output": 66000 + }, + "cost": { + "input": 0.1, + "output": 0.4 + } + }, + "Qwen/Qwen3-VL-8B-Thinking": { + "id": "Qwen/Qwen3-VL-8B-Thinking", + "name": "Qwen/Qwen3-VL-8B-Thinking", + "family": "qwen", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-10-15", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.18, + "output": 2 + } + }, + "Qwen/Qwen2.5-VL-7B-Instruct": { + "id": "Qwen/Qwen2.5-VL-7B-Instruct", + "name": "Qwen/Qwen2.5-VL-7B-Instruct", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-01-28", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 33000, + "output": 4000 + }, + "cost": { + "input": 0.05, + "output": 0.05 + } + }, + "Qwen/Qwen3-Next-80B-A3B-Instruct": { + "id": "Qwen/Qwen3-Next-80B-A3B-Instruct", + "name": "Qwen/Qwen3-Next-80B-A3B-Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-09-18", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.14, + "output": 1.4 + } + }, + "Qwen/Qwen3-8B": { + "id": "Qwen/Qwen3-8B", + "name": "Qwen/Qwen3-8B", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-04-30", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.06, + "output": 0.06 + } + }, + "Qwen/Qwen3-30B-A3B-Instruct-2507": { + "id": "Qwen/Qwen3-30B-A3B-Instruct-2507", + "name": "Qwen/Qwen3-30B-A3B-Instruct-2507", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-30", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.09, + "output": 0.3 + } + }, + "Qwen/Qwen3-235B-A22B-Instruct-2507": { + "id": "Qwen/Qwen3-235B-A22B-Instruct-2507", + "name": "Qwen/Qwen3-235B-A22B-Instruct-2507", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-23", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.09, + "output": 0.6 + } + }, + "Qwen/Qwen3-32B": { + "id": "Qwen/Qwen3-32B", + "name": "Qwen/Qwen3-32B", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-04-30", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.14, + "output": 0.57 + } + }, + "Qwen/Qwen3-Coder-30B-A3B-Instruct": { + "id": "Qwen/Qwen3-Coder-30B-A3B-Instruct", + "name": "Qwen/Qwen3-Coder-30B-A3B-Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-08-01", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.07, + "output": 0.28 + } + }, + "Qwen/Qwen3-Omni-30B-A3B-Instruct": { + "id": "Qwen/Qwen3-Omni-30B-A3B-Instruct", + "name": "Qwen/Qwen3-Omni-30B-A3B-Instruct", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-10-04", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 66000, + "output": 66000 + }, + "cost": { + "input": 0.1, + "output": 0.4 + } + }, + "Qwen/Qwen3-14B": { + "id": "Qwen/Qwen3-14B", + "name": "Qwen/Qwen3-14B", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-04-30", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.07, + "output": 0.28 + } + }, + "Qwen/Qwen2.5-72B-Instruct-128K": { + "id": "Qwen/Qwen2.5-72B-Instruct-128K", + "name": "Qwen/Qwen2.5-72B-Instruct-128K", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2024-09-18", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 4000 + }, + "cost": { + "input": 0.59, + "output": 0.59 + } + }, + "Qwen/Qwen2.5-32B-Instruct": { + "id": "Qwen/Qwen2.5-32B-Instruct", + "name": "Qwen/Qwen2.5-32B-Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2024-09-19", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 33000, + "output": 4000 + }, + "cost": { + "input": 0.18, + "output": 0.18 + } + }, + "Qwen/Qwen3-235B-A22B-Thinking-2507": { + "id": "Qwen/Qwen3-235B-A22B-Thinking-2507", + "name": "Qwen/Qwen3-235B-A22B-Thinking-2507", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-28", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.13, + "output": 0.6 + } + }, + "Qwen/Qwen3-Omni-30B-A3B-Thinking": { + "id": "Qwen/Qwen3-Omni-30B-A3B-Thinking", + "name": "Qwen/Qwen3-Omni-30B-A3B-Thinking", + "family": "qwen", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-10-04", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 66000, + "output": 66000 + }, + "cost": { + "input": 0.1, + "output": 0.4 + } + }, + "Qwen/Qwen2.5-VL-32B-Instruct": { + "id": "Qwen/Qwen2.5-VL-32B-Instruct", + "name": "Qwen/Qwen2.5-VL-32B-Instruct", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-03-24", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.27, + "output": 0.27 + } + }, + "Qwen/Qwen3-Next-80B-A3B-Thinking": { + "id": "Qwen/Qwen3-Next-80B-A3B-Thinking", + "name": "Qwen/Qwen3-Next-80B-A3B-Thinking", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-09-25", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.14, + "output": 0.57 + } + }, + "Qwen/Qwen3-VL-235B-A22B-Instruct": { + "id": "Qwen/Qwen3-VL-235B-A22B-Instruct", + "name": "Qwen/Qwen3-VL-235B-A22B-Instruct", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-10-04", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.3, + "output": 1.5 + } + }, + "Qwen/Qwen2.5-14B-Instruct": { + "id": "Qwen/Qwen2.5-14B-Instruct", + "name": "Qwen/Qwen2.5-14B-Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2024-09-18", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 33000, + "output": 4000 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } + }, + "Qwen/Qwen3-VL-30B-A3B-Thinking": { + "id": "Qwen/Qwen3-VL-30B-A3B-Thinking", + "name": "Qwen/Qwen3-VL-30B-A3B-Thinking", + "family": "qwen", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-10-11", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.29, + "output": 1 + } + }, + "Qwen/Qwen3-VL-32B-Instruct": { + "id": "Qwen/Qwen3-VL-32B-Instruct", + "name": "Qwen/Qwen3-VL-32B-Instruct", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-10-21", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.2, + "output": 0.6 + } + }, + "Qwen/Qwen3-VL-8B-Instruct": { + "id": "Qwen/Qwen3-VL-8B-Instruct", + "name": "Qwen/Qwen3-VL-8B-Instruct", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-10-15", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.18, + "output": 0.68 + } + }, + "Qwen/Qwen3-Coder-480B-A35B-Instruct": { + "id": "Qwen/Qwen3-Coder-480B-A35B-Instruct", + "name": "Qwen/Qwen3-Coder-480B-A35B-Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-31", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.25, + "output": 1 + } + }, + "Qwen/Qwen2.5-72B-Instruct": { + "id": "Qwen/Qwen2.5-72B-Instruct", + "name": "Qwen/Qwen2.5-72B-Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2024-09-18", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 33000, + "output": 4000 + }, + "cost": { + "input": 0.59, + "output": 0.59 + } + }, + "stepfun-ai/Step-3.5-Flash": { + "id": "stepfun-ai/Step-3.5-Flash", + "name": "stepfun-ai/Step-3.5-Flash", + "family": "step", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.1, + "output": 0.3 + } + }, + "zai-org/GLM-4.5": { + "id": "zai-org/GLM-4.5", + "name": "zai-org/GLM-4.5", + "family": "glm", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-28", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.4, + "output": 2 + } + }, + "zai-org/GLM-5V-Turbo": { + "id": "zai-org/GLM-5V-Turbo", + "name": "zai-org/GLM-5V-Turbo", + "family": "glm", + "attachment": true, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "release_date": "2026-04-01", + "last_updated": "2026-04-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 1.2, + "output": 4, + "cache_write": 0 + } + }, + "zai-org/GLM-4.7": { + "id": "zai-org/GLM-4.7", + "name": "zai-org/GLM-4.7", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": true, + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 205000, + "output": 205000 + }, + "cost": { + "input": 0.6, + "output": 2.2 + } + }, + "zai-org/GLM-5.1": { + "id": "zai-org/GLM-5.1", + "name": "zai-org/GLM-5.1", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": true, + "release_date": "2026-04-08", + "last_updated": "2026-04-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 205000, + "output": 205000 + }, + "cost": { + "input": 1.4, + "output": 4.4, + "cache_write": 0 + } + }, + "zai-org/GLM-4.5-Air": { + "id": "zai-org/GLM-4.5-Air", + "name": "zai-org/GLM-4.5-Air", + "family": "glm-air", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-28", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.14, + "output": 0.86 + } + }, + "zai-org/GLM-5": { + "id": "zai-org/GLM-5", + "name": "zai-org/GLM-5", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": true, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 205000, + "output": 205000 + }, + "cost": { + "input": 1, + "output": 3.2 + } + }, + "zai-org/GLM-4.6V": { + "id": "zai-org/GLM-4.6V", + "name": "zai-org/GLM-4.6V", + "family": "glm", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": false, + "temperature": true, + "release_date": "2025-12-07", + "last_updated": "2025-12-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.3, + "output": 0.9 + } + }, + "zai-org/GLM-4.6": { + "id": "zai-org/GLM-4.6", + "name": "zai-org/GLM-4.6", + "family": "glm", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-10-04", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 205000, + "output": 205000 + }, + "cost": { + "input": 0.5, + "output": 1.9 + } + }, + "zai-org/GLM-4.5V": { + "id": "zai-org/GLM-4.5V", + "name": "zai-org/GLM-4.5V", + "family": "glm", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-08-13", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 66000, + "output": 66000 + }, + "cost": { + "input": 0.14, + "output": 0.86 + } + }, + "meta-llama/Meta-Llama-3.1-8B-Instruct": { + "id": "meta-llama/Meta-Llama-3.1-8B-Instruct", + "name": "meta-llama/Meta-Llama-3.1-8B-Instruct", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-04-23", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 33000, + "output": 4000 + }, + "cost": { + "input": 0.06, + "output": 0.06 + } + }, + "inclusionAI/Ring-flash-2.0": { + "id": "inclusionAI/Ring-flash-2.0", + "name": "inclusionAI/Ring-flash-2.0", + "family": "ring", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-09-29", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.14, + "output": 0.57 + } + }, + "inclusionAI/Ling-mini-2.0": { + "id": "inclusionAI/Ling-mini-2.0", + "name": "inclusionAI/Ling-mini-2.0", + "family": "ling", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-09-10", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.07, + "output": 0.28 + } + }, + "inclusionAI/Ling-flash-2.0": { + "id": "inclusionAI/Ling-flash-2.0", + "name": "inclusionAI/Ling-flash-2.0", + "family": "ling", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-09-18", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.14, + "output": 0.57 + } + }, + "tencent/Hunyuan-A13B-Instruct": { + "id": "tencent/Hunyuan-A13B-Instruct", + "name": "tencent/Hunyuan-A13B-Instruct", + "family": "hunyuan", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-06-30", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.14, + "output": 0.57 + } + }, + "tencent/Hunyuan-MT-7B": { + "id": "tencent/Hunyuan-MT-7B", + "name": "tencent/Hunyuan-MT-7B", + "family": "hunyuan", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-09-18", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 33000, + "output": 33000 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "deepseek-ai/DeepSeek-V3.1": { + "id": "deepseek-ai/DeepSeek-V3.1", + "name": "deepseek-ai/DeepSeek-V3.1", + "family": "deepseek", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-08-25", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 164000, + "output": 164000 + }, + "cost": { + "input": 0.27, + "output": 1 + } + }, + "deepseek-ai/deepseek-vl2": { + "id": "deepseek-ai/deepseek-vl2", + "name": "deepseek-ai/deepseek-vl2", + "family": "deepseek", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2024-12-13", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 4000, + "output": 4000 + }, + "cost": { + "input": 0.15, + "output": 0.15 + } + }, + "deepseek-ai/DeepSeek-V3": { + "id": "deepseek-ai/DeepSeek-V3", + "name": "deepseek-ai/DeepSeek-V3", + "family": "deepseek", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2024-12-26", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 164000, + "output": 164000 + }, + "cost": { + "input": 0.25, + "output": 1 + } + }, + "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B": { + "id": "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B", + "name": "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-01-20", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.18, + "output": 0.18 + } + }, + "deepseek-ai/DeepSeek-R1": { + "id": "deepseek-ai/DeepSeek-R1", + "name": "deepseek-ai/DeepSeek-R1", + "family": "deepseek-thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-05-28", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 164000, + "output": 164000 + }, + "cost": { + "input": 0.5, + "output": 2.18 + } + }, + "deepseek-ai/DeepSeek-R1-Distill-Qwen-14B": { + "id": "deepseek-ai/DeepSeek-R1-Distill-Qwen-14B", + "name": "deepseek-ai/DeepSeek-R1-Distill-Qwen-14B", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-01-20", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } + }, + "deepseek-ai/DeepSeek-V3.2-Exp": { + "id": "deepseek-ai/DeepSeek-V3.2-Exp", + "name": "deepseek-ai/DeepSeek-V3.2-Exp", + "family": "deepseek", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-10-10", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 164000, + "output": 164000 + }, + "cost": { + "input": 0.27, + "output": 0.41 + } + }, + "deepseek-ai/DeepSeek-V3.2": { + "id": "deepseek-ai/DeepSeek-V3.2", + "name": "deepseek-ai/DeepSeek-V3.2", + "family": "deepseek", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-12-03", + "last_updated": "2025-12-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 164000, + "output": 164000 + }, + "cost": { + "input": 0.27, + "output": 0.42 + } + }, + "deepseek-ai/DeepSeek-V3.1-Terminus": { + "id": "deepseek-ai/DeepSeek-V3.1-Terminus", + "name": "deepseek-ai/DeepSeek-V3.1-Terminus", + "family": "deepseek", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-09-29", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 164000, + "output": 164000 + }, + "cost": { + "input": 0.27, + "output": 1 + } + }, + "openai/gpt-oss-20b": { + "id": "openai/gpt-oss-20b", + "name": "openai/gpt-oss-20b", + "family": "gpt-oss", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-08-13", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 8000 + }, + "cost": { + "input": 0.04, + "output": 0.18 + } + }, + "openai/gpt-oss-120b": { + "id": "openai/gpt-oss-120b", + "name": "openai/gpt-oss-120b", + "family": "gpt-oss", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-08-13", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 8000 + }, + "cost": { + "input": 0.05, + "output": 0.45 + } + }, + "baidu/ERNIE-4.5-300B-A47B": { + "id": "baidu/ERNIE-4.5-300B-A47B", + "name": "baidu/ERNIE-4.5-300B-A47B", + "family": "ernie", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-02", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.28, + "output": 1.1 + } + }, + "THUDM/GLM-Z1-9B-0414": { + "id": "THUDM/GLM-Z1-9B-0414", + "name": "THUDM/GLM-Z1-9B-0414", + "family": "glm-z", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-04-18", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.086, + "output": 0.086 + } + }, + "THUDM/GLM-4-9B-0414": { + "id": "THUDM/GLM-4-9B-0414", + "name": "THUDM/GLM-4-9B-0414", + "family": "glm", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-04-18", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 33000, + "output": 33000 + }, + "cost": { + "input": 0.086, + "output": 0.086 + } + }, + "THUDM/GLM-4-32B-0414": { + "id": "THUDM/GLM-4-32B-0414", + "name": "THUDM/GLM-4-32B-0414", + "family": "glm", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-04-18", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 33000, + "output": 33000 + }, + "cost": { + "input": 0.27, + "output": 0.27 + } + }, + "THUDM/GLM-Z1-32B-0414": { + "id": "THUDM/GLM-Z1-32B-0414", + "name": "THUDM/GLM-Z1-32B-0414", + "family": "glm-z", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-04-18", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.14, + "output": 0.57 + } + }, + "moonshotai/Kimi-K2-Thinking": { + "id": "moonshotai/Kimi-K2-Thinking", + "name": "moonshotai/Kimi-K2-Thinking", + "family": "kimi-thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-11-07", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.55, + "output": 2.5 + } + }, + "moonshotai/Kimi-K2.6": { + "id": "moonshotai/Kimi-K2.6", + "name": "moonshotai/Kimi-K2.6", + "family": "kimi", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": true, + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.95, + "output": 4, + "cache_read": 0.16 + } + }, + "moonshotai/Kimi-K2-Instruct": { + "id": "moonshotai/Kimi-K2-Instruct", + "name": "moonshotai/Kimi-K2-Instruct", + "family": "kimi", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-13", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.58, + "output": 2.29 + } + }, + "moonshotai/Kimi-K2-Instruct-0905": { + "id": "moonshotai/Kimi-K2-Instruct-0905", + "name": "moonshotai/Kimi-K2-Instruct-0905", + "family": "kimi", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-09-08", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.4, + "output": 2 + } + }, + "moonshotai/Kimi-K2.5": { + "id": "moonshotai/Kimi-K2.5", + "name": "moonshotai/Kimi-K2.5", + "family": "kimi", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": true, + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.45, + "output": 2.25 + } + }, + "MiniMaxAI/MiniMax-M2.5": { + "id": "MiniMaxAI/MiniMax-M2.5", + "name": "MiniMaxAI/MiniMax-M2.5", + "family": "minimax", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": false, + "temperature": true, + "release_date": "2026-02-15", + "last_updated": "2026-02-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 197000, + "output": 131000 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } + }, + "MiniMaxAI/MiniMax-M2.1": { + "id": "MiniMaxAI/MiniMax-M2.1", + "name": "MiniMaxAI/MiniMax-M2.1", + "family": "minimax", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 197000, + "output": 131000 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } + }, + "ByteDance-Seed/Seed-OSS-36B-Instruct": { + "id": "ByteDance-Seed/Seed-OSS-36B-Instruct", + "name": "ByteDance-Seed/Seed-OSS-36B-Instruct", + "family": "seed", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-09-04", + "last_updated": "2025-11-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.21, + "output": 0.57 + } + } + } + }, + "vercel": { + "id": "vercel", + "env": ["AI_GATEWAY_API_KEY"], + "npm": "@ai-sdk/gateway", + "name": "Vercel AI Gateway", + "doc": "https://github.com/vercel/ai/tree/5eb85cc45a259553501f535b8ac79a77d0e79223/packages/gateway", + "models": { + "alibaba/qwen3-coder-plus": { + "id": "alibaba/qwen3-coder-plus", + "name": "Qwen3 Coder Plus", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 1000000 + }, + "cost": { + "input": 1, + "output": 5 + } + }, + "alibaba/qwen3.6-27b": { + "id": "alibaba/qwen3.6-27b", + "name": "Qwen 3.6 27B", + "family": "qwen3.6", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-22", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.6, + "output": 3.5999999999999996 + } + }, + "alibaba/qwen3-embedding-8b": { + "id": "alibaba/qwen3-embedding-8b", + "name": "Qwen3 Embedding 8B", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-06-05", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.05, + "output": 0 + } + }, + "alibaba/qwen-3-30b": { + "id": "alibaba/qwen-3-30b", + "name": "Qwen3-30B-A3B", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 40960, + "output": 16384 + }, + "cost": { + "input": 0.08, + "output": 0.29 + } + }, + "alibaba/qwen-3-235b": { + "id": "alibaba/qwen-3-235b", + "name": "Qwen3 235B A22B Instruct 2507", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 40960, + "output": 16384 + }, + "cost": { + "input": 0.13, + "output": 0.6 + } + }, + "alibaba/qwen3.5-flash": { + "id": "alibaba/qwen3.5-flash", + "name": "Qwen 3.5 Flash", + "family": "qwen", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-02-24", + "last_updated": "2026-02-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.001, + "cache_write": 0.125 + } + }, + "alibaba/qwen3.6-plus": { + "id": "alibaba/qwen3.6-plus", + "name": "Qwen 3.6 Plus", + "family": "qwen", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-02", + "last_updated": "2026-04-03", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.09999999999999999, + "cache_write": 0.625 + } + }, + "alibaba/qwen3-max": { + "id": "alibaba/qwen3-max", + "name": "Qwen3 Max", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-09-23", + "last_updated": "2025-09-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 1.2, + "output": 6 + } + }, + "alibaba/qwen3-embedding-0.6b": { + "id": "alibaba/qwen3-embedding-0.6b", + "name": "Qwen3 Embedding 0.6B", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-11-14", + "last_updated": "2025-11-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.01, + "output": 0 + } + }, + "alibaba/qwen-3-32b": { + "id": "alibaba/qwen-3-32b", + "name": "Qwen 3.32B", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 40960, + "output": 16384 + }, + "cost": { + "input": 0.1, + "output": 0.3 + } + }, + "alibaba/qwen-3.6-max-preview": { + "id": "alibaba/qwen-3.6-max-preview", + "name": "Qwen 3.6 Max Preview", + "family": "qwen", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-20", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 240000, + "output": 64000 + }, + "cost": { + "input": 1.3, + "output": 7.8, + "cache_read": 0.26, + "cache_write": 1.625 + } + }, + "alibaba/qwen3-next-80b-a3b-thinking": { + "id": "alibaba/qwen3-next-80b-a3b-thinking", + "name": "Qwen3 Next 80B A3B Thinking", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-09", + "release_date": "2025-09-12", + "last_updated": "2025-09-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.15, + "output": 1.5 + } + }, + "alibaba/qwen3-vl-thinking": { + "id": "alibaba/qwen3-vl-thinking", + "name": "Qwen3 VL Thinking", + "family": "qwen", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-09", + "release_date": "2025-09-24", + "last_updated": "2025-09-24", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 129024 + }, + "cost": { + "input": 0.7, + "output": 8.4 + } + }, + "alibaba/qwen3-235b-a22b-thinking": { + "id": "alibaba/qwen3-235b-a22b-thinking", + "name": "Qwen3 235B A22B Thinking 2507", + "family": "qwen", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262114, + "output": 262114 + }, + "cost": { + "input": 0.3, + "output": 2.9 + } + }, + "alibaba/qwen3-next-80b-a3b-instruct": { + "id": "alibaba/qwen3-next-80b-a3b-instruct", + "name": "Qwen3 Next 80B A3B Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-09-12", + "last_updated": "2025-09-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0.09, + "output": 1.1 + } + }, + "alibaba/qwen3-coder-next": { + "id": "alibaba/qwen3-coder-next", + "name": "Qwen3 Coder Next", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-07-22", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.5, + "output": 1.2 + } + }, + "alibaba/qwen3-embedding-4b": { + "id": "alibaba/qwen3-embedding-4b", + "name": "Qwen3 Embedding 4B", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-06-05", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.02, + "output": 0 + } + }, + "alibaba/qwen3-max-thinking": { + "id": "alibaba/qwen3-max-thinking", + "name": "Qwen 3 Max Thinking", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-01", + "last_updated": "2025-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 65536 + }, + "cost": { + "input": 1.2, + "output": 6, + "cache_read": 0.24 + } + }, + "alibaba/qwen3-vl-235b-a22b-instruct": { + "id": "alibaba/qwen3-vl-235b-a22b-instruct", + "name": "Qwen3 VL 235B A22B Instruct", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": false, + "temperature": true, + "release_date": "2025-09-24", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 129024 + }, + "cost": { + "input": 0.39999999999999997, + "output": 1.5999999999999999 + } + }, + "alibaba/qwen3-coder": { + "id": "alibaba/qwen3-coder", + "name": "Qwen3 Coder 480B A35B Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 66536 + }, + "cost": { + "input": 0.38, + "output": 1.53 + } + }, + "alibaba/qwen3-max-preview": { + "id": "alibaba/qwen3-max-preview", + "name": "Qwen3 Max Preview", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-09-23", + "last_updated": "2025-09-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 1.2, + "output": 6, + "cache_read": 0.24 + } + }, + "alibaba/qwen3.5-plus": { + "id": "alibaba/qwen3.5-plus", + "name": "Qwen 3.5 Plus", + "family": "qwen", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-02-16", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 0.4, + "output": 2.4, + "cache_read": 0.04, + "cache_write": 0.5 + } + }, + "alibaba/qwen-3-14b": { + "id": "alibaba/qwen-3-14b", + "name": "Qwen3-14B", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 40960, + "output": 16384 + }, + "cost": { + "input": 0.06, + "output": 0.24 + } + }, + "alibaba/qwen3-vl-instruct": { + "id": "alibaba/qwen3-vl-instruct", + "name": "Qwen3 VL Instruct", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-09-24", + "last_updated": "2025-09-24", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 129024 + }, + "cost": { + "input": 0.7, + "output": 2.8 + } + }, + "alibaba/qwen3-coder-30b-a3b": { + "id": "alibaba/qwen3-coder-30b-a3b", + "name": "Qwen 3 Coder 30B A3B Instruct", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 160000, + "output": 32768 + }, + "cost": { + "input": 0.07, + "output": 0.27 + } + }, + "perplexity/sonar-pro": { + "id": "perplexity/sonar-pro", + "name": "Sonar Pro", + "family": "sonar-pro", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-09", + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8000 + }, + "cost": { + "input": 3, + "output": 15 + } + }, + "perplexity/sonar": { + "id": "perplexity/sonar", + "name": "Sonar", + "family": "sonar", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-02", + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 127000, + "output": 8000 + }, + "cost": { + "input": 1, + "output": 1 + } + }, + "perplexity/sonar-reasoning": { + "id": "perplexity/sonar-reasoning", + "name": "Sonar Reasoning", + "family": "sonar-reasoning", + "attachment": false, + "reasoning": true, + "tool_call": false, + "temperature": true, + "knowledge": "2025-09", + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 127000, + "output": 8000 + }, + "cost": { + "input": 1, + "output": 5 + } + }, + "perplexity/sonar-reasoning-pro": { + "id": "perplexity/sonar-reasoning-pro", + "name": "Sonar Reasoning Pro", + "family": "sonar-reasoning", + "attachment": false, + "reasoning": true, + "tool_call": false, + "temperature": true, + "knowledge": "2025-09", + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 127000, + "output": 8000 + }, + "cost": { + "input": 2, + "output": 8 + } + }, + "deepseek/deepseek-v3.2-thinking": { + "id": "deepseek/deepseek-v3.2-thinking", + "name": "DeepSeek V3.2 Thinking", + "family": "deepseek-thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": true, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 64000 + }, + "cost": { + "input": 0.28, + "output": 0.42, + "cache_read": 0.03 + } + }, + "deepseek/deepseek-v3.2-exp": { + "id": "deepseek/deepseek-v3.2-exp", + "name": "DeepSeek V3.2 Exp", + "family": "deepseek", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-09", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 163840, + "output": 163840 + }, + "cost": { + "input": 0.27, + "output": 0.4 + } + }, + "deepseek/deepseek-v3.1": { + "id": "deepseek/deepseek-v3.1", + "name": "DeepSeek-V3.1", + "family": "deepseek", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-08-21", + "last_updated": "2025-08-21", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 163840, + "output": 128000 + }, + "cost": { + "input": 0.3, + "output": 1 + } + }, + "deepseek/deepseek-v4-flash": { + "id": "deepseek/deepseek-v4-flash", + "name": "DeepSeek V4 Flash", + "family": "deepseek", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-23", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 384000 + }, + "cost": { + "input": 0.14, + "output": 0.28, + "cache_read": 0.028 + } + }, + "deepseek/deepseek-v4-pro": { + "id": "deepseek/deepseek-v4-pro", + "name": "DeepSeek V4 Pro", + "family": "deepseek", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-23", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 384000 + }, + "cost": { + "input": 1.74, + "output": 3.48, + "cache_read": 0.145 + } + }, + "deepseek/deepseek-v3.2": { + "id": "deepseek/deepseek-v3.2", + "name": "DeepSeek V3.2", + "family": "deepseek", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 163842, + "output": 8000 + }, + "cost": { + "input": 0.27, + "output": 0.4, + "cache_read": 0.22 + } + }, + "deepseek/deepseek-v3": { + "id": "deepseek/deepseek-v3", + "name": "DeepSeek V3 0324", + "family": "deepseek", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2024-12-26", + "last_updated": "2024-12-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 163840, + "output": 16384 + }, + "cost": { + "input": 0.77, + "output": 0.77 + } + }, + "deepseek/deepseek-v3.1-terminus": { + "id": "deepseek/deepseek-v3.1-terminus", + "name": "DeepSeek V3.1 Terminus", + "family": "deepseek", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-07", + "release_date": "2025-09-22", + "last_updated": "2025-09-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.27, + "output": 1 + } + }, + "deepseek/deepseek-r1": { + "id": "deepseek/deepseek-r1", + "name": "DeepSeek-R1", + "family": "deepseek-thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-01-20", + "last_updated": "2025-05-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 1.35, + "output": 5.4 + } + }, + "arcee-ai/trinity-mini": { + "id": "arcee-ai/trinity-mini", + "name": "Trinity Mini", + "family": "trinity", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-12", + "last_updated": "2025-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.05, + "output": 0.15 + } + }, + "arcee-ai/trinity-large-thinking": { + "id": "arcee-ai/trinity-large-thinking", + "name": "Trinity Large Thinking", + "family": "trinity", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-01", + "last_updated": "2026-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262100, + "output": 80000 + }, + "cost": { + "input": 0.25, + "output": 0.8999999999999999 + } + }, + "arcee-ai/trinity-large-preview": { + "id": "arcee-ai/trinity-large-preview", + "name": "Trinity Large Preview", + "family": "trinity", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-01", + "last_updated": "2025-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131000, + "output": 131000 + }, + "cost": { + "input": 0.25, + "output": 1 + } + }, + "recraft/recraft-v3": { + "id": "recraft/recraft-v3", + "name": "Recraft V3", + "family": "recraft", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-10", + "last_updated": "2024-10", + "modalities": { + "input": ["text"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 512, + "output": 0 + } + }, + "recraft/recraft-v2": { + "id": "recraft/recraft-v2", + "name": "Recraft V2", + "family": "recraft", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-03", + "last_updated": "2024-03", + "modalities": { + "input": ["text"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 512, + "output": 0 + } + }, + "voyage/voyage-3-large": { + "id": "voyage/voyage-3-large", + "name": "voyage-3-large", + "family": "voyage", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-09", + "last_updated": "2024-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "output": 1536 + }, + "cost": { + "input": 0.18, + "output": 0 + } + }, + "voyage/voyage-4-large": { + "id": "voyage/voyage-4-large", + "name": "voyage-4-large", + "family": "voyage", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "release_date": "2026-03-06", + "last_updated": "2026-03-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32000, + "output": 0 + } + }, + "voyage/voyage-3.5-lite": { + "id": "voyage/voyage-3.5-lite", + "name": "voyage-3.5-lite", + "family": "voyage", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-05-20", + "last_updated": "2025-05-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "output": 1536 + }, + "cost": { + "input": 0.02, + "output": 0 + } + }, + "voyage/voyage-code-3": { + "id": "voyage/voyage-code-3", + "name": "voyage-code-3", + "family": "voyage", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-09", + "last_updated": "2024-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "output": 1536 + }, + "cost": { + "input": 0.18, + "output": 0 + } + }, + "voyage/voyage-finance-2": { + "id": "voyage/voyage-finance-2", + "name": "voyage-finance-2", + "family": "voyage", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-03", + "last_updated": "2024-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "output": 1536 + }, + "cost": { + "input": 0.12, + "output": 0 + } + }, + "voyage/voyage-4-lite": { + "id": "voyage/voyage-4-lite", + "name": "voyage-4-lite", + "family": "voyage", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "release_date": "2026-03-06", + "last_updated": "2026-03-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32000, + "output": 0 + } + }, + "voyage/voyage-4": { + "id": "voyage/voyage-4", + "name": "voyage-4", + "family": "voyage", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "release_date": "2026-03-06", + "last_updated": "2026-03-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32000, + "output": 0 + } + }, + "voyage/voyage-code-2": { + "id": "voyage/voyage-code-2", + "name": "voyage-code-2", + "family": "voyage", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-01", + "last_updated": "2024-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "output": 1536 + }, + "cost": { + "input": 0.12, + "output": 0 + } + }, + "voyage/voyage-law-2": { + "id": "voyage/voyage-law-2", + "name": "voyage-law-2", + "family": "voyage", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-03", + "last_updated": "2024-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "output": 1536 + }, + "cost": { + "input": 0.12, + "output": 0 + } + }, + "voyage/voyage-3.5": { + "id": "voyage/voyage-3.5", + "name": "voyage-3.5", + "family": "voyage", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-05-20", + "last_updated": "2025-05-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "output": 1536 + }, + "cost": { + "input": 0.06, + "output": 0 + } + }, + "morph/morph-v3-large": { + "id": "morph/morph-v3-large", + "name": "Morph v3 Large", + "family": "morph", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-08-15", + "last_updated": "2024-08-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32000, + "output": 32000 + }, + "cost": { + "input": 0.9, + "output": 1.9 + } + }, + "morph/morph-v3-fast": { + "id": "morph/morph-v3-fast", + "name": "Morph v3 Fast", + "family": "morph", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-08-15", + "last_updated": "2024-08-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 16000, + "output": 16000 + }, + "cost": { + "input": 0.8, + "output": 1.2 + } + }, + "zai/glm-5v-turbo": { + "id": "zai/glm-5v-turbo", + "name": "GLM 5V Turbo", + "family": "glm", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-01", + "last_updated": "2026-04-03", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 1.2, + "output": 4, + "cache_read": 0.24 + } + }, + "zai/glm-4.7": { + "id": "zai/glm-4.7", + "name": "GLM 4.7", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 202752, + "output": 120000 + }, + "cost": { + "input": 0.43, + "output": 1.75, + "cache_read": 0.08 + } + }, + "zai/glm-5": { + "id": "zai/glm-5", + "name": "GLM-5", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-02-12", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202800, + "output": 131072 + }, + "cost": { + "input": 1, + "output": 3.2, + "cache_read": 0.2 + } + }, + "zai/glm-4.7-flashx": { + "id": "zai/glm-4.7-flashx", + "name": "GLM 4.7 FlashX", + "family": "glm-flash", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-01", + "last_updated": "2025-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 200000, + "output": 128000 + }, + "cost": { + "input": 0.06, + "output": 0.4, + "cache_read": 0.01 + } + }, + "zai/glm-5.1": { + "id": "zai/glm-5.1", + "name": "GLM 5.1", + "family": "glm", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-07", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 202752, + "output": 202752 + }, + "cost": { + "input": 1.4, + "output": 4.4, + "cache_read": 0.26 + } + }, + "zai/glm-4.6v-flash": { + "id": "zai/glm-4.6v-flash", + "name": "GLM-4.6V-Flash", + "family": "glm", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 24000 + } + }, + "zai/glm-4.5": { + "id": "zai/glm-4.5", + "name": "GLM 4.5", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": true, + "temperature": true, + "knowledge": "2025-07", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 2.2 + } + }, + "zai/glm-4.5-air": { + "id": "zai/glm-4.5-air", + "name": "GLM 4.5 Air", + "family": "glm-air", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 96000 + }, + "cost": { + "input": 0.2, + "output": 1.1 + } + }, + "zai/glm-5-turbo": { + "id": "zai/glm-5-turbo", + "name": "GLM 5 Turbo", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-15", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 202800, + "output": 131100 + }, + "cost": { + "input": 1.2, + "output": 4, + "cache_read": 0.24 + } + }, + "zai/glm-4.5v": { + "id": "zai/glm-4.5v", + "name": "GLM 4.5V", + "family": "glm", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-08", + "release_date": "2025-08-11", + "last_updated": "2025-08-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 66000, + "output": 66000 + }, + "cost": { + "input": 0.6, + "output": 1.8 + } + }, + "zai/glm-4.6": { + "id": "zai/glm-4.6", + "name": "GLM 4.6", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 200000, + "output": 96000 + }, + "cost": { + "input": 0.45, + "output": 1.8 + } + }, + "zai/glm-4.6v": { + "id": "zai/glm-4.6v", + "name": "GLM-4.6V", + "family": "glm", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 24000 + }, + "cost": { + "input": 0.3, + "output": 0.9, + "cache_read": 0.05 + } + }, + "zai/glm-4.7-flash": { + "id": "zai/glm-4.7-flash", + "name": "GLM 4.7 Flash", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-13", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 131000 + }, + "cost": { + "input": 0.07, + "output": 0.39999999999999997 + } + }, + "cohere/command-a": { + "id": "cohere/command-a", + "name": "Command A", + "family": "command", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 8000 + }, + "cost": { + "input": 2.5, + "output": 10 + } + }, + "cohere/embed-v4.0": { + "id": "cohere/embed-v4.0", + "name": "Embed v4.0", + "family": "cohere-embed", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-04-15", + "last_updated": "2025-04-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "output": 1536 + }, + "cost": { + "input": 0.12, + "output": 0 + } + }, + "prime-intellect/intellect-3": { + "id": "prime-intellect/intellect-3", + "name": "INTELLECT 3", + "family": "intellect", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-11-26", + "last_updated": "2025-11-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.2, + "output": 1.1 + } + }, + "xai/grok-4.3": { + "id": "xai/grok-4.3", + "name": "Grok 4.3", + "family": "grok", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-30", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 1000000 + }, + "cost": { + "input": 1.25, + "output": 2.5, + "cache_read": 0.19999999999999998 + } + }, + "xai/grok-4.20-non-reasoning": { + "id": "xai/grok-4.20-non-reasoning", + "name": "Grok 4.20 Non-Reasoning", + "family": "grok", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-09", + "last_updated": "2026-03-23", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 2000000 + }, + "cost": { + "input": 2, + "output": 6, + "cache_read": 0.19999999999999998 + } + }, + "xai/grok-4.20-non-reasoning-beta": { + "id": "xai/grok-4.20-non-reasoning-beta", + "name": "Grok 4.20 Beta Non-Reasoning", + "family": "grok", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-11", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 2000000 + }, + "cost": { + "input": 2, + "output": 6, + "cache_read": 0.19999999999999998 + } + }, + "xai/grok-4.20-reasoning": { + "id": "xai/grok-4.20-reasoning", + "name": "Grok 4.20 Reasoning", + "family": "grok", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-09", + "last_updated": "2026-03-23", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 2000000 + }, + "cost": { + "input": 2, + "output": 6, + "cache_read": 0.19999999999999998 + } + }, + "xai/grok-imagine-image": { + "id": "xai/grok-imagine-image", + "name": "Grok Imagine Image", + "family": "grok", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "release_date": "2026-01-28", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text"], + "output": ["text", "image"] + }, + "open_weights": false, + "limit": { + "context": 0, + "output": 0 + } + }, + "xai/grok-4.20-multi-agent-beta": { + "id": "xai/grok-4.20-multi-agent-beta", + "name": "Grok 4.20 Multi Agent Beta", + "family": "grok", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-11", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 2000000 + }, + "cost": { + "input": 2, + "output": 6, + "cache_read": 0.19999999999999998 + } + }, + "xai/grok-imagine-image-pro": { + "id": "xai/grok-imagine-image-pro", + "name": "Grok Imagine Image Pro", + "family": "grok", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "release_date": "2026-01-28", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text"], + "output": ["text", "image"] + }, + "open_weights": false, + "limit": { + "context": 0, + "output": 0 + } + }, + "xai/grok-4-fast-reasoning": { + "id": "xai/grok-4-fast-reasoning", + "name": "Grok 4 Fast Reasoning", + "family": "grok", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 256000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } + }, + "xai/grok-4.1-fast-non-reasoning": { + "id": "xai/grok-4.1-fast-non-reasoning", + "name": "Grok 4.1 Fast Non-Reasoning", + "family": "grok", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } + }, + "xai/grok-4.20-reasoning-beta": { + "id": "xai/grok-4.20-reasoning-beta", + "name": "Grok 4.20 Beta Reasoning", + "family": "grok", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-11", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 2000000 + }, + "cost": { + "input": 2, + "output": 6, + "cache_read": 0.19999999999999998 + } + }, + "xai/grok-4.20-multi-agent": { + "id": "xai/grok-4.20-multi-agent", + "name": "Grok 4.20 Multi-Agent", + "family": "grok", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-09", + "last_updated": "2026-03-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 2000000 + }, + "cost": { + "input": 2, + "output": 6, + "cache_read": 0.19999999999999998 + } + }, + "xai/grok-4.1-fast-reasoning": { + "id": "xai/grok-4.1-fast-reasoning", + "name": "Grok 4.1 Fast Reasoning", + "family": "grok", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } + }, + "xai/grok-4-fast-non-reasoning": { + "id": "xai/grok-4-fast-non-reasoning", + "name": "Grok 4 Fast (Non-Reasoning)", + "family": "grok", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-07", + "release_date": "2025-09-19", + "last_updated": "2025-09-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } + }, + "xai/grok-3": { + "id": "xai/grok-3", + "name": "Grok 3", + "family": "grok", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.75 + } + }, + "xai/grok-3-mini": { + "id": "xai/grok-3-mini", + "name": "Grok 3 Mini", + "family": "grok", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 0.5, + "reasoning": 0.5, + "cache_read": 0.075 + } + }, + "xai/grok-2-vision": { + "id": "xai/grok-2-vision", + "name": "Grok 2 Vision", + "family": "grok", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2024-08-20", + "last_updated": "2024-08-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "output": 4096 + }, + "cost": { + "input": 2, + "output": 10, + "cache_read": 2 + } + }, + "xai/grok-4": { + "id": "xai/grok-4", + "name": "Grok 4", + "family": "grok", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-07", + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "reasoning": 15, + "cache_read": 0.75 + } + }, + "xai/grok-code-fast-1": { + "id": "xai/grok-code-fast-1", + "name": "Grok Code Fast 1", + "family": "grok", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2023-10", + "release_date": "2025-08-28", + "last_updated": "2025-08-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 10000 + }, + "cost": { + "input": 0.2, + "output": 1.5, + "cache_read": 0.02 + } + }, + "xai/grok-3-fast": { + "id": "xai/grok-3-fast", + "name": "Grok 3 Fast", + "family": "grok", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 1.25 + } + }, + "xai/grok-3-mini-fast": { + "id": "xai/grok-3-mini-fast", + "name": "Grok 3 Mini Fast", + "family": "grok", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.6, + "output": 4, + "reasoning": 4, + "cache_read": 0.15 + } + }, + "nvidia/nemotron-3-super-120b-a12b": { + "id": "nvidia/nemotron-3-super-120b-a12b", + "name": "NVIDIA Nemotron 3 Super 120B A12B", + "family": "nemotron", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "release_date": "2026-03-18", + "last_updated": "2026-03-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 32000 + }, + "cost": { + "input": 0.15, + "output": 0.65 + } + }, + "nvidia/nemotron-3-nano-30b-a3b": { + "id": "nvidia/nemotron-3-nano-30b-a3b", + "name": "Nemotron 3 Nano 30B A3B", + "family": "nemotron", + "attachment": false, + "reasoning": true, + "tool_call": false, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2024-12", + "last_updated": "2024-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.06, + "output": 0.24 + } + }, + "nvidia/nemotron-nano-12b-v2-vl": { + "id": "nvidia/nemotron-nano-12b-v2-vl", + "name": "Nvidia Nemotron Nano 12B V2 VL", + "family": "nemotron", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2024-12", + "last_updated": "2024-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.2, + "output": 0.6 + } + }, + "nvidia/nemotron-nano-9b-v2": { + "id": "nvidia/nemotron-nano-9b-v2", + "name": "Nvidia Nemotron Nano 9B V2", + "family": "nemotron", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-08-18", + "last_updated": "2025-08-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.04, + "output": 0.16 + } + }, + "inception/mercury-edit-2": { + "id": "inception/mercury-edit-2", + "name": "Mercury Edit 2", + "attachment": false, + "reasoning": true, + "tool_call": false, + "temperature": true, + "release_date": "2026-03-30", + "last_updated": "2026-03-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.25, + "output": 0.75, + "cache_read": 0.025 + } + }, + "inception/mercury-2": { + "id": "inception/mercury-2", + "name": "Mercury 2", + "family": "mercury", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-02-24", + "last_updated": "2026-03-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 0.75, + "cache_read": 0.024999999999999998 + } + }, + "inception/mercury-coder-small": { + "id": "inception/mercury-coder-small", + "name": "Mercury Coder Small Beta", + "family": "mercury", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2025-02-26", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32000, + "output": 16384 + }, + "cost": { + "input": 0.25, + "output": 1 + } + }, + "openai/gpt-5.1-codex-max": { + "id": "openai/gpt-5.1-codex-max", + "name": "GPT 5.1 Codex Max", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.13 + } + }, + "openai/gpt-5.2-chat": { + "id": "openai/gpt-5.2-chat", + "name": "GPT-5.2 Chat", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 111616, + "output": 16384 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.18 + } + }, + "openai/gpt-4o-mini-search-preview": { + "id": "openai/gpt-4o-mini-search-preview", + "name": "GPT 4o Mini Search Preview", + "family": "gpt-mini", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "temperature": true, + "knowledge": "2023-09", + "release_date": "2025-01", + "last_updated": "2025-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 111616, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } + }, + "openai/codex-mini": { + "id": "openai/codex-mini", + "name": "Codex Mini", + "family": "gpt-codex-mini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-05-16", + "last_updated": "2025-05-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "input": 100000, + "output": 100000 + }, + "cost": { + "input": 1.5, + "output": 6, + "cache_read": 0.38 + } + }, + "openai/gpt-5-chat": { + "id": "openai/gpt-5-chat", + "name": "GPT-5 Chat", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text", "image"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 111616, + "output": 16384 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.13 + } + }, + "openai/gpt-5.3-chat": { + "id": "openai/gpt-5.3-chat", + "name": "GPT-5.3 Chat", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-03", + "last_updated": "2026-03-06", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 111616, + "output": 16384 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } + }, + "openai/gpt-5.2-pro": { + "id": "openai/gpt-5.2-pro", + "name": "GPT 5.2 ", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 21, + "output": 168 + } + }, + "openai/text-embedding-3-large": { + "id": "openai/text-embedding-3-large", + "name": "text-embedding-3-large", + "family": "text-embedding", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-01-25", + "last_updated": "2024-01-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "input": 6656, + "output": 1536 + }, + "cost": { + "input": 0.13, + "output": 0 + } + }, + "openai/gpt-5.5": { + "id": "openai/gpt-5.5", + "name": "GPT 5.5", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "input": 872000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 30, + "cache_read": 0.5 + } + }, + "openai/gpt-5.3-codex": { + "id": "openai/gpt-5.3-codex", + "name": "GPT 5.3 Codex", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-02-24", + "last_updated": "2026-02-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } + }, + "openai/text-embedding-ada-002": { + "id": "openai/text-embedding-ada-002", + "name": "text-embedding-ada-002", + "family": "text-embedding", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2022-12-15", + "last_updated": "2022-12-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "input": 6656, + "output": 1536 + }, + "cost": { + "input": 0.1, + "output": 0 + } + }, + "openai/gpt-5.2": { + "id": "openai/gpt-5.2", + "name": "GPT-5.2", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.18 + } + }, + "openai/o3-pro": { + "id": "openai/o3-pro", + "name": "o3 Pro", + "family": "o-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-10", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "input": 100000, + "output": 100000 + }, + "cost": { + "input": 20, + "output": 80 + } + }, + "openai/gpt-5.4-mini": { + "id": "openai/gpt-5.4-mini", + "name": "GPT 5.4 Mini", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.75, + "output": 4.5, + "cache_read": 0.075 + } + }, + "openai/gpt-5.4-nano": { + "id": "openai/gpt-5.4-nano", + "name": "GPT 5.4 Nano", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.19999999999999998, + "output": 1.25, + "cache_read": 0.02 + } + }, + "openai/gpt-5.2-codex": { + "id": "openai/gpt-5.2-codex", + "name": "GPT-5.2-Codex", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-12", + "last_updated": "2025-12", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } + }, + "openai/gpt-5.1-codex-mini": { + "id": "openai/gpt-5.1-codex-mini", + "name": "GPT-5.1 Codex mini", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-05-16", + "last_updated": "2025-05-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.03 + } + }, + "openai/gpt-5.1-thinking": { + "id": "openai/gpt-5.1-thinking", + "name": "GPT 5.1 Thinking", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-10", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text", "image"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.13 + } + }, + "openai/gpt-5.4-pro": { + "id": "openai/gpt-5.4-pro", + "name": "GPT 5.4 Pro", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-05", + "last_updated": "2026-03-06", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 30, + "output": 180 + } + }, + "openai/gpt-3.5-turbo": { + "id": "openai/gpt-3.5-turbo", + "name": "GPT-3.5 Turbo", + "family": "gpt", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2021-09", + "release_date": "2023-03-01", + "last_updated": "2023-03-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 16385, + "input": 12289, + "output": 4096 + }, + "cost": { + "input": 0.5, + "output": 1.5 + } + }, + "openai/o3-deep-research": { + "id": "openai/o3-deep-research", + "name": "o3-deep-research", + "family": "o", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-10", + "release_date": "2024-06-26", + "last_updated": "2024-06-26", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "input": 100000, + "output": 100000 + }, + "cost": { + "input": 10, + "output": 40, + "cache_read": 2.5 + } + }, + "openai/text-embedding-3-small": { + "id": "openai/text-embedding-3-small", + "name": "text-embedding-3-small", + "family": "text-embedding", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-01-25", + "last_updated": "2024-01-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "input": 6656, + "output": 1536 + }, + "cost": { + "input": 0.02, + "output": 0 + } + }, + "openai/gpt-5.4": { + "id": "openai/gpt-5.4", + "name": "GPT 5.4", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-05", + "last_updated": "2026-03-06", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 2.5, + "output": 15, + "cache_read": 0.25 + } + }, + "openai/gpt-oss-20b": { + "id": "openai/gpt-oss-20b", + "name": "GPT OSS 20B", + "family": "gpt-oss", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "input": 98304, + "output": 32768 + }, + "cost": { + "input": 0.07, + "output": 0.3 + } + }, + "openai/gpt-5-pro": { + "id": "openai/gpt-5-pro", + "name": "GPT-5 pro", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text", "image"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 128000, + "output": 272000 + }, + "cost": { + "input": 15, + "output": 120 + } + }, + "openai/gpt-oss-safeguard-20b": { + "id": "openai/gpt-oss-safeguard-20b", + "name": "gpt-oss-safeguard-20b", + "family": "gpt-oss", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "input": 65536, + "output": 65536 + }, + "cost": { + "input": 0.08, + "output": 0.3, + "cache_read": 0.04 + } + }, + "openai/gpt-oss-120b": { + "id": "openai/gpt-oss-120b", + "name": "GPT OSS 120B", + "family": "gpt-oss", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.1, + "output": 0.5 + } + }, + "openai/gpt-5.5-pro": { + "id": "openai/gpt-5.5-pro", + "name": "GPT 5.5 Pro", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "input": 872000, + "output": 128000 + }, + "cost": { + "input": 30, + "output": 180 + } + }, + "openai/gpt-3.5-turbo-instruct": { + "id": "openai/gpt-3.5-turbo-instruct", + "name": "GPT-3.5 Turbo Instruct", + "family": "gpt", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2021-09", + "release_date": "2023-03-01", + "last_updated": "2023-03-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "input": 4096, + "output": 4096 + }, + "cost": { + "input": 1.5, + "output": 2 + } + }, + "openai/gpt-5.1-instant": { + "id": "openai/gpt-5.1-instant", + "name": "GPT-5.1 Instant", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text", "image"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "input": 111616, + "output": 16384 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.13 + } + }, + "openai/gpt-5.1-codex": { + "id": "openai/gpt-5.1-codex", + "name": "GPT-5.1-Codex", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.13 + } + }, + "openai/gpt-4.1-mini": { + "id": "openai/gpt-4.1-mini", + "name": "GPT-4.1 mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.4, + "output": 1.6, + "cache_read": 0.1 + } + }, + "openai/gpt-4.1": { + "id": "openai/gpt-4.1", + "name": "GPT-4.1", + "family": "gpt", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } + }, + "openai/gpt-5": { + "id": "openai/gpt-5", + "name": "GPT-5", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } + }, + "openai/gpt-4o": { + "id": "openai/gpt-4o", + "name": "GPT-4o", + "family": "gpt", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2023-09", + "release_date": "2024-05-13", + "last_updated": "2024-08-06", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 10, + "cache_read": 1.25 + } + }, + "openai/o3": { + "id": "openai/o3", + "name": "o3", + "family": "o", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } + }, + "openai/gpt-4.1-nano": { + "id": "openai/gpt-4.1-nano", + "name": "GPT-4.1 nano", + "family": "gpt-nano", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.03 + } + }, + "openai/gpt-5-codex": { + "id": "openai/gpt-5-codex", + "name": "GPT-5-Codex", + "family": "gpt-codex", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-09-15", + "last_updated": "2025-09-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } + }, + "openai/o3-mini": { + "id": "openai/o3-mini", + "name": "o3-mini", + "family": "o-mini", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2024-12-20", + "last_updated": "2025-01-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.55 + } + }, + "openai/o1": { + "id": "openai/o1", + "name": "o1", + "family": "o", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2023-09", + "release_date": "2024-12-05", + "last_updated": "2024-12-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 15, + "output": 60, + "cache_read": 7.5 + } + }, + "openai/o4-mini": { + "id": "openai/o4-mini", + "name": "o4-mini", + "family": "o-mini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.28 + } + }, + "openai/gpt-4o-mini": { + "id": "openai/gpt-4o-mini", + "name": "GPT-4o mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2023-09", + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.6, + "cache_read": 0.08 + } + }, + "openai/gpt-4-turbo": { + "id": "openai/gpt-4-turbo", + "name": "GPT-4 Turbo", + "family": "gpt", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": false, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2023-11-06", + "last_updated": "2024-04-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 10, + "output": 30 + } + }, + "openai/gpt-5-nano": { + "id": "openai/gpt-5-nano", + "name": "GPT-5 Nano", + "family": "gpt-nano", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.05, + "output": 0.4, + "cache_read": 0.005 + } + }, + "openai/gpt-5-mini": { + "id": "openai/gpt-5-mini", + "name": "GPT-5 Mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.025 + } + }, + "amazon/titan-embed-text-v2": { + "id": "amazon/titan-embed-text-v2", + "name": "Titan Text Embeddings V2", + "family": "titan-embed", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-04", + "last_updated": "2024-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "output": 1536 + }, + "cost": { + "input": 0.02, + "output": 0 + } + }, + "amazon/nova-2-lite": { + "id": "amazon/nova-2-lite", + "name": "Nova 2 Lite", + "family": "nova", + "attachment": true, + "reasoning": true, + "tool_call": false, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2024-12-01", + "last_updated": "2024-12-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 1000000 + }, + "cost": { + "input": 0.3, + "output": 2.5 + } + }, + "amazon/nova-pro": { + "id": "amazon/nova-pro", + "name": "Nova Pro", + "family": "nova-pro", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2024-12-03", + "last_updated": "2024-12-03", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 300000, + "output": 8192 + }, + "cost": { + "input": 0.8, + "output": 3.2, + "cache_read": 0.2 + } + }, + "amazon/nova-lite": { + "id": "amazon/nova-lite", + "name": "Nova Lite", + "family": "nova-lite", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2024-12-03", + "last_updated": "2024-12-03", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 300000, + "output": 8192 + }, + "cost": { + "input": 0.06, + "output": 0.24, + "cache_read": 0.015 + } + }, + "amazon/nova-micro": { + "id": "amazon/nova-micro", + "name": "Nova Micro", + "family": "nova-micro", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2024-12-03", + "last_updated": "2024-12-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.035, + "output": 0.14, + "cache_read": 0.00875 + } + }, + "mistral/mistral-nemo": { + "id": "mistral/mistral-nemo", + "name": "Mistral Nemo", + "family": "mistral-nemo", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2024-07-01", + "last_updated": "2024-07-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 60288, + "output": 16000 + }, + "cost": { + "input": 0.04, + "output": 0.17 + } + }, + "mistral/ministral-14b": { + "id": "mistral/ministral-14b", + "name": "Ministral 14B", + "family": "ministral", + "attachment": true, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.2, + "output": 0.2 + } + }, + "mistral/codestral-embed": { + "id": "mistral/codestral-embed", + "name": "Codestral Embed", + "family": "codestral-embed", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-05-28", + "last_updated": "2025-05-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "output": 1536 + }, + "cost": { + "input": 0.15, + "output": 0 + } + }, + "mistral/mistral-medium": { + "id": "mistral/mistral-medium", + "name": "Mistral Medium 3.1", + "family": "mistral-medium", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-05-07", + "last_updated": "2025-05-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 64000 + }, + "cost": { + "input": 0.4, + "output": 2 + } + }, + "mistral/mistral-embed": { + "id": "mistral/mistral-embed", + "name": "Mistral Embed", + "family": "mistral-embed", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2023-12-11", + "last_updated": "2023-12-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "output": 1536 + }, + "cost": { + "input": 0.1, + "output": 0 + } + }, + "mistral/devstral-2": { + "id": "mistral/devstral-2", + "name": "Devstral 2", + "family": "devstral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-12-09", + "last_updated": "2025-12-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 256000 + } + }, + "mistral/mistral-large-3": { + "id": "mistral/mistral-large-3", + "name": "Mistral Large 3", + "family": "mistral-large", + "attachment": true, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-12-02", + "last_updated": "2025-12-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.5, + "output": 1.5 + } + }, + "mistral/devstral-small-2": { + "id": "mistral/devstral-small-2", + "name": "Devstral Small 2", + "family": "devstral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-05-07", + "last_updated": "2025-05-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 256000 + } + }, + "mistral/devstral-small": { + "id": "mistral/devstral-small", + "name": "Devstral Small 1.1", + "family": "devstral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-05-07", + "last_updated": "2025-05-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 64000 + }, + "cost": { + "input": 0.1, + "output": 0.3 + } + }, + "mistral/ministral-8b": { + "id": "mistral/ministral-8b", + "name": "Ministral 8B (latest)", + "family": "ministral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2024-10-01", + "last_updated": "2024-10-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } + }, + "mistral/magistral-medium": { + "id": "mistral/magistral-medium", + "name": "Magistral Medium (latest)", + "family": "magistral-medium", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-06", + "release_date": "2025-03-17", + "last_updated": "2025-03-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 2, + "output": 5 + } + }, + "mistral/mistral-small": { + "id": "mistral/mistral-small", + "name": "Mistral Small (latest)", + "family": "mistral-small", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-06", + "release_date": "2026-03-16", + "last_updated": "2026-03-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } + }, + "mistral/magistral-small": { + "id": "mistral/magistral-small", + "name": "Magistral Small", + "family": "magistral-small", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-06", + "release_date": "2025-03-17", + "last_updated": "2025-03-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.5, + "output": 1.5 + } + }, + "mistral/pixtral-12b": { + "id": "mistral/pixtral-12b", + "name": "Pixtral 12B", + "family": "pixtral", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-09", + "release_date": "2024-09-01", + "last_updated": "2024-09-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.15, + "output": 0.15 + } + }, + "mistral/mixtral-8x22b-instruct": { + "id": "mistral/mixtral-8x22b-instruct", + "name": "Mixtral 8x22B", + "family": "mixtral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2024-04-17", + "last_updated": "2024-04-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 64000, + "output": 64000 + }, + "cost": { + "input": 2, + "output": 6 + } + }, + "mistral/pixtral-large": { + "id": "mistral/pixtral-large", + "name": "Pixtral Large (latest)", + "family": "pixtral", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2024-11-01", + "last_updated": "2024-11-04", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 2, + "output": 6 + } + }, + "mistral/ministral-3b": { + "id": "mistral/ministral-3b", + "name": "Ministral 3B (latest)", + "family": "ministral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2024-10-01", + "last_updated": "2024-10-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.04, + "output": 0.04 + } + }, + "mistral/codestral": { + "id": "mistral/codestral", + "name": "Codestral (latest)", + "family": "codestral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2024-05-29", + "last_updated": "2025-01-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 4096 + }, + "cost": { + "input": 0.3, + "output": 0.9 + } + }, + "meta/llama-3.2-1b": { + "id": "meta/llama-3.2-1b", + "name": "Llama 3.2 1B Instruct", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-09-18", + "last_updated": "2024-09-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } + }, + "meta/llama-3.1-8b": { + "id": "meta/llama-3.1-8b", + "name": "Llama 3.1 8B Instruct", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.03, + "output": 0.05 + } + }, + "meta/llama-3.2-90b": { + "id": "meta/llama-3.2-90b", + "name": "Llama 3.2 90B Vision Instruct", + "family": "llama", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-09-25", + "last_updated": "2024-09-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.72, + "output": 0.72 + } + }, + "meta/llama-3.2-3b": { + "id": "meta/llama-3.2-3b", + "name": "Llama 3.2 3B Instruct", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-09-18", + "last_updated": "2024-09-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.15, + "output": 0.15 + } + }, + "meta/llama-3.2-11b": { + "id": "meta/llama-3.2-11b", + "name": "Llama 3.2 11B Vision Instruct", + "family": "llama", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-09-25", + "last_updated": "2024-09-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.16, + "output": 0.16 + } + }, + "meta/llama-3.1-70b": { + "id": "meta/llama-3.1-70b", + "name": "Llama 3.1 70B Instruct", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.4, + "output": 0.4 + } + }, + "meta/llama-3.3-70b": { + "id": "meta/llama-3.3-70b", + "name": "Llama-3.3-70B-Instruct", + "family": "llama", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "meta/llama-4-maverick": { + "id": "meta/llama-4-maverick", + "name": "Llama-4-Maverick-17B-128E-Instruct-FP8", + "family": "llama", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "meta/llama-4-scout": { + "id": "meta/llama-4-scout", + "name": "Llama-4-Scout-17B-16E-Instruct-FP8", + "family": "llama", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "vercel/v0-1.5-md": { + "id": "vercel/v0-1.5-md", + "name": "v0-1.5-md", + "family": "v0", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-06-09", + "last_updated": "2025-06-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 32000 + }, + "cost": { + "input": 3, + "output": 15 + } + }, + "vercel/v0-1.0-md": { + "id": "vercel/v0-1.0-md", + "name": "v0-1.0-md", + "family": "v0", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 32000 + }, + "cost": { + "input": 3, + "output": 15 + } + }, + "minimax/minimax-m2.7": { + "id": "minimax/minimax-m2.7", + "name": "Minimax M2.7", + "family": "minimax", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131000 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.06, + "cache_write": 0.375 + } + }, + "minimax/minimax-m2.7-highspeed": { + "id": "minimax/minimax-m2.7-highspeed", + "name": "MiniMax M2.7 High Speed", + "family": "minimax", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131100 + }, + "cost": { + "input": 0.6, + "output": 2.4, + "cache_read": 0.06, + "cache_write": 0.375 + } + }, + "minimax/minimax-m2": { + "id": "minimax/minimax-m2", + "name": "MiniMax M2", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-10-27", + "last_updated": "2025-10-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262114, + "output": 262114 + }, + "cost": { + "input": 0.27, + "output": 1.15, + "cache_read": 0.03, + "cache_write": 0.38 + } + }, + "minimax/minimax-m2.1": { + "id": "minimax/minimax-m2.1", + "name": "MiniMax M2.1", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-10-27", + "last_updated": "2025-10-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.03, + "cache_write": 0.38 + } + }, + "minimax/minimax-m2.1-lightning": { + "id": "minimax/minimax-m2.1-lightning", + "name": "MiniMax M2.1 Lightning", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-10-27", + "last_updated": "2025-10-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 2.4, + "cache_read": 0.03, + "cache_write": 0.38 + } + }, + "minimax/minimax-m2.5": { + "id": "minimax/minimax-m2.5", + "name": "MiniMax M2.5", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-02-12", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 204800, + "output": 131000 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.03, + "cache_write": 0.375 + } + }, + "minimax/minimax-m2.5-highspeed": { + "id": "minimax/minimax-m2.5-highspeed", + "name": "MiniMax M2.5 High Speed", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-02-12", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 0, + "output": 0 + }, + "cost": { + "input": 0.6, + "output": 2.4, + "cache_read": 0.03, + "cache_write": 0.375 + } + }, + "kwaipilot/kat-coder-pro-v1": { + "id": "kwaipilot/kat-coder-pro-v1", + "name": "KAT-Coder-Pro V1", + "family": "kat-coder", + "attachment": false, + "reasoning": true, + "tool_call": false, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-10-24", + "last_updated": "2025-10-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 32000 + } + }, + "kwaipilot/kat-coder-pro-v2": { + "id": "kwaipilot/kat-coder-pro-v2", + "name": "Kat Coder Pro V2", + "family": "kat-coder", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-27", + "last_updated": "2026-03-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.06 + } + }, + "google/gemini-2.5-flash-lite-preview-09-2025": { + "id": "google/gemini-2.5-flash-lite-preview-09-2025", + "name": "Gemini 2.5 Flash Lite Preview 09-25", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.01 + } + }, + "google/gemini-3.1-flash-lite-preview": { + "id": "google/gemini-3.1-flash-lite-preview", + "name": "Gemini 3.1 Flash Lite Preview", + "family": "gemini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-03", + "last_updated": "2026-03-06", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 65000 + }, + "cost": { + "input": 0.25, + "output": 1.5, + "cache_read": 0.025, + "cache_write": 1 + } + }, + "google/gemini-3-pro-image": { + "id": "google/gemini-3-pro-image", + "name": "Nano Banana Pro (Gemini 3 Pro Image)", + "family": "gemini-pro", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2025-03", + "release_date": "2025-09", + "last_updated": "2025-09", + "modalities": { + "input": ["text"], + "output": ["text", "image"] + }, + "open_weights": false, + "limit": { + "context": 65536, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 120 + } + }, + "google/gemini-3.1-pro-preview": { + "id": "google/gemini-3.1-pro-preview", + "name": "Gemini 3.1 Pro Preview", + "family": "gemini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-02-19", + "last_updated": "2026-02-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2 + } + }, + "google/gemini-3-pro-preview": { + "id": "google/gemini-3-pro-preview", + "name": "Gemini 3 Pro Preview", + "family": "gemini-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-11-18", + "last_updated": "2025-11-18", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2, + "tiers": [ + { + "input": 4, + "output": 18, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 4, + "output": 18, + "cache_read": 0.4 + } + } + }, + "google/imagen-4.0-ultra-generate-001": { + "id": "google/imagen-4.0-ultra-generate-001", + "name": "Imagen 4 Ultra", + "family": "imagen", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-05-24", + "last_updated": "2025-05-24", + "modalities": { + "input": ["text"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 480, + "output": 0 + } + }, + "google/gemini-embedding-001": { + "id": "google/gemini-embedding-001", + "name": "Gemini Embedding 001", + "family": "gemini-embedding", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-05-20", + "last_updated": "2025-05-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "output": 1536 + }, + "cost": { + "input": 0.15, + "output": 0 + } + }, + "google/gemma-4-31b-it": { + "id": "google/gemma-4-31b-it", + "name": "Gemma 4 31B IT", + "family": "gemma", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-02", + "last_updated": "2026-04-03", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0.14, + "output": 0.39999999999999997 + } + }, + "google/gemini-2.5-flash-image": { + "id": "google/gemini-2.5-flash-image", + "name": "Nano Banana (Gemini 2.5 Flash Image)", + "family": "gemini-flash", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-03-20", + "modalities": { + "input": ["text"], + "output": ["text", "image"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.3, + "output": 2.5 + } + }, + "google/text-embedding-005": { + "id": "google/text-embedding-005", + "name": "Text Embedding 005", + "family": "text-embedding", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-08", + "last_updated": "2024-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "output": 1536 + }, + "cost": { + "input": 0.03, + "output": 0 + } + }, + "google/text-multilingual-embedding-002": { + "id": "google/text-multilingual-embedding-002", + "name": "Text Multilingual Embedding 002", + "family": "text-embedding", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-03", + "last_updated": "2024-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "output": 1536 + }, + "cost": { + "input": 0.03, + "output": 0 + } + }, + "google/gemini-3.1-flash-image-preview": { + "id": "google/gemini-3.1-flash-image-preview", + "name": "Gemini 3.1 Flash Image Preview (Nano Banana 2)", + "family": "gemini", + "attachment": true, + "reasoning": true, + "tool_call": false, + "temperature": true, + "release_date": "2026-02-26", + "last_updated": "2026-03-06", + "modalities": { + "input": ["text", "image"], + "output": ["text", "image"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.5, + "output": 3 + } + }, + "google/gemini-3.1-flash-lite": { + "id": "google/gemini-3.1-flash-lite", + "name": "Gemini 3.1 Flash Lite", + "family": "gemini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-05-07", + "last_updated": "2026-05-08", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 65000 + }, + "cost": { + "input": 0.25, + "output": 1.5, + "cache_read": 0.03 + } + }, + "google/gemini-3-flash": { + "id": "google/gemini-3-flash", + "name": "Gemini 3 Flash", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03", + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.05 + } + }, + "google/imagen-4.0-generate-001": { + "id": "google/imagen-4.0-generate-001", + "name": "Imagen 4", + "family": "imagen", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 480, + "output": 0 + } + }, + "google/gemini-2.5-flash-preview-09-2025": { + "id": "google/gemini-2.5-flash-preview-09-2025", + "name": "Gemini 2.5 Flash Preview 09-25", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.03, + "cache_write": 0.383 + } + }, + "google/gemini-embedding-2": { + "id": "google/gemini-embedding-2", + "name": "Gemini Embedding 2", + "family": "gemini-embedding", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "release_date": "2026-03-10", + "last_updated": "2026-03-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 0, + "output": 0 + } + }, + "google/gemma-4-26b-a4b-it": { + "id": "google/gemma-4-26b-a4b-it", + "name": "Gemma 4 26B A4B IT", + "family": "gemma", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-02", + "last_updated": "2026-04-03", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0.13, + "output": 0.39999999999999997 + } + }, + "google/imagen-4.0-fast-generate-001": { + "id": "google/imagen-4.0-fast-generate-001", + "name": "Imagen 4 Fast", + "family": "imagen", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-06", + "last_updated": "2025-06", + "modalities": { + "input": ["text"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 480, + "output": 0 + } + }, + "google/gemini-2.5-flash-lite": { + "id": "google/gemini-2.5-flash-lite", + "name": "Gemini 2.5 Flash Lite", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.01 + } + }, + "google/gemini-2.5-flash-image-preview": { + "id": "google/gemini-2.5-flash-image-preview", + "name": "Nano Banana Preview (Gemini 2.5 Flash Image Preview)", + "family": "gemini-flash", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-03-20", + "modalities": { + "input": ["text"], + "output": ["text", "image"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.3, + "output": 2.5 + } + }, + "google/gemini-2.0-flash-lite": { + "id": "google/gemini-2.0-flash-lite", + "name": "Gemini 2.0 Flash Lite", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-06", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 8192 + }, + "cost": { + "input": 0.075, + "output": 0.3 + } + }, + "google/gemini-2.5-flash": { + "id": "google/gemini-2.5-flash", + "name": "Gemini 2.5 Flash", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.03, + "input_audio": 1 + } + }, + "google/gemini-2.5-pro": { + "id": "google/gemini-2.5-pro", + "name": "Gemini 2.5 Pro", + "family": "gemini-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125, + "tiers": [ + { + "input": 2.5, + "output": 15, + "cache_read": 0.25, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 2.5, + "output": 15, + "cache_read": 0.25 + } + } + }, + "google/gemini-2.0-flash": { + "id": "google/gemini-2.0-flash", + "name": "Gemini 2.0 Flash", + "family": "gemini-flash", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-06", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.025 + } + }, + "moonshotai/kimi-k2-turbo": { + "id": "moonshotai/kimi-k2-turbo", + "name": "Kimi K2 Turbo", + "family": "kimi", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 16384 + }, + "cost": { + "input": 2.4, + "output": 10 + } + }, + "moonshotai/kimi-k2.5": { + "id": "moonshotai/kimi-k2.5", + "name": "Kimi K2.5", + "family": "kimi", + "attachment": true, + "reasoning": true, + "tool_call": true, + "interleaved": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-01-26", + "last_updated": "2026-01-26", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 1.2 + } + }, + "moonshotai/kimi-k2-thinking-turbo": { + "id": "moonshotai/kimi-k2-thinking-turbo", + "name": "Kimi K2 Thinking Turbo", + "family": "kimi-thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": true, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262114, + "output": 262114 + }, + "cost": { + "input": 1.15, + "output": 8, + "cache_read": 0.15 + } + }, + "moonshotai/kimi-k2-0905": { + "id": "moonshotai/kimi-k2-0905", + "name": "Kimi K2 0905", + "family": "kimi", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.6, + "output": 2.5 + } + }, + "moonshotai/kimi-k2.6": { + "id": "moonshotai/kimi-k2.6", + "name": "Kimi K2.6", + "family": "kimi-k2.6", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-20", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262000, + "output": 262000 + }, + "cost": { + "input": 0.95, + "output": 4, + "cache_read": 0.16 + } + }, + "moonshotai/kimi-k2-thinking": { + "id": "moonshotai/kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "family": "kimi-thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": true, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 216144, + "output": 216144 + }, + "cost": { + "input": 0.47, + "output": 2, + "cache_read": 0.14 + } + }, + "moonshotai/kimi-k2": { + "id": "moonshotai/kimi-k2", + "name": "Kimi K2 Instruct", + "family": "kimi", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-07-14", + "last_updated": "2025-07-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 16384 + }, + "status": "deprecated", + "cost": { + "input": 1, + "output": 3 + } + }, + "interfaze/interfaze-beta": { + "id": "interfaze/interfaze-beta", + "name": "Interfaze Beta", + "attachment": false, + "reasoning": true, + "tool_call": false, + "temperature": true, + "release_date": "2025-10-07", + "last_updated": "2026-04-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 32000 + }, + "cost": { + "input": 1.5, + "output": 3.5 + } + }, + "anthropic/claude-3.5-sonnet-20240620": { + "id": "anthropic/claude-3.5-sonnet-20240620", + "name": "Claude 3.5 Sonnet (2024-06-20)", + "family": "claude-sonnet", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2024-06-20", + "last_updated": "2024-06-20", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15 + } + }, + "anthropic/claude-opus-4.6": { + "id": "anthropic/claude-opus-4.6", + "name": "Claude Opus 4.6", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "interleaved": true, + "temperature": true, + "knowledge": "2025-05-31", + "release_date": "2026-02", + "last_updated": "2026-02", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } + }, + "anthropic/claude-opus-4.7": { + "id": "anthropic/claude-opus-4.7", + "name": "Claude Opus 4.7", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } + }, + "anthropic/claude-opus-4.5": { + "id": "anthropic/claude-opus-4.5", + "name": "Claude Opus 4.5", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "interleaved": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-11-24", + "last_updated": "2025-11-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 18.75 + } + }, + "anthropic/claude-haiku-4.5": { + "id": "anthropic/claude-haiku-4.5", + "name": "Claude Haiku 4.5", + "family": "claude-haiku", + "attachment": true, + "reasoning": true, + "tool_call": true, + "interleaved": true, + "temperature": true, + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } + }, + "anthropic/claude-sonnet-4.6": { + "id": "anthropic/claude-sonnet-4.6", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "interleaved": true, + "temperature": true, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-02-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75, + "tiers": [ + { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5 + } + } + }, + "anthropic/claude-3-opus": { + "id": "anthropic/claude-3-opus", + "name": "Claude Opus 3", + "family": "claude-opus", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2023-08-31", + "release_date": "2024-02-29", + "last_updated": "2024-02-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 4096 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } + }, + "anthropic/claude-3.5-haiku": { + "id": "anthropic/claude-3.5-haiku", + "name": "Claude Haiku 3.5", + "family": "claude-haiku", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07-31", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 0.8, + "output": 4, + "cache_read": 0.08, + "cache_write": 1 + } + }, + "anthropic/claude-opus-4": { + "id": "anthropic/claude-opus-4", + "name": "Claude Opus 4", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } + }, + "anthropic/claude-3-haiku": { + "id": "anthropic/claude-3-haiku", + "name": "Claude Haiku 3", + "family": "claude-haiku", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2023-08-31", + "release_date": "2024-03-13", + "last_updated": "2024-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 4096 + }, + "cost": { + "input": 0.25, + "output": 1.25, + "cache_read": 0.03, + "cache_write": 0.3 + } + }, + "anthropic/claude-sonnet-4.5": { + "id": "anthropic/claude-sonnet-4.5", + "name": "Claude Sonnet 4.5", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } + }, + "anthropic/claude-sonnet-4": { + "id": "anthropic/claude-sonnet-4", + "name": "Claude Sonnet 4", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } + }, + "anthropic/claude-3.5-sonnet": { + "id": "anthropic/claude-3.5-sonnet", + "name": "Claude Sonnet 3.5 v2", + "family": "claude-sonnet", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04-30", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } + }, + "anthropic/claude-3.7-sonnet": { + "id": "anthropic/claude-3.7-sonnet", + "name": "Claude Sonnet 3.7", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10-31", + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } + }, + "anthropic/claude-opus-4.1": { + "id": "anthropic/claude-opus-4.1", + "name": "Claude Opus 4", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } + }, + "xiaomi/mimo-v2.5-pro": { + "id": "xiaomi/mimo-v2.5-pro", + "name": "MiMo V2.5 Pro", + "family": "mimo-v2.5-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-22", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1050000, + "output": 131000 + }, + "cost": { + "input": 1, + "output": 3, + "cache_read": 0.19999999999999998 + } + }, + "xiaomi/mimo-v2.5": { + "id": "xiaomi/mimo-v2.5", + "name": "MiMo M2.5", + "family": "mimo-v2.5", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-22", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1050000, + "output": 131100 + }, + "cost": { + "input": 0.39999999999999997, + "output": 2, + "cache_read": 0.08 + } + }, + "xiaomi/mimo-v2-pro": { + "id": "xiaomi/mimo-v2-pro", + "name": "MiMo V2 Pro", + "family": "mimo", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-18", + "last_updated": "2026-03-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 1, + "output": 3, + "cache_read": 0.19999999999999998 + } + }, + "xiaomi/mimo-v2-flash": { + "id": "xiaomi/mimo-v2-flash", + "name": "MiMo V2 Flash", + "family": "mimo", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 32000 + }, + "cost": { + "input": 0.1, + "output": 0.29 + } + }, + "bytedance/seed-1.6": { + "id": "bytedance/seed-1.6", + "name": "Seed 1.6", + "family": "seed", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-09", + "last_updated": "2025-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 32000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.05 + } + }, + "bytedance/seed-1.8": { + "id": "bytedance/seed-1.8", + "name": "Seed 1.8", + "family": "seed", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-10", + "last_updated": "2025-10", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.05 + } + }, + "meituan/longcat-flash-chat": { + "id": "meituan/longcat-flash-chat", + "name": "LongCat Flash Chat", + "family": "longcat", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-08-30", + "last_updated": "2025-08-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 8192 + } + }, + "meituan/longcat-flash-thinking": { + "id": "meituan/longcat-flash-thinking", + "name": "LongCat Flash Thinking", + "family": "longcat", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-09-23", + "last_updated": "2025-09-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.15, + "output": 1.5 + } + }, + "meituan/longcat-flash-thinking-2601": { + "id": "meituan/longcat-flash-thinking-2601", + "name": "LongCat Flash Thinking 2601", + "family": "longcat", + "attachment": false, + "reasoning": true, + "tool_call": false, + "temperature": true, + "release_date": "2026-03-13", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "output": 32768 + } + }, + "bfl/flux-pro-1.0-fill": { + "id": "bfl/flux-pro-1.0-fill", + "name": "FLUX.1 Fill [pro]", + "family": "flux", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-10", + "last_updated": "2024-10", + "modalities": { + "input": ["text"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 512, + "output": 0 + } + }, + "bfl/flux-pro-1.1": { + "id": "bfl/flux-pro-1.1", + "name": "FLUX1.1 [pro]", + "family": "flux", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-10", + "last_updated": "2024-10", + "modalities": { + "input": ["text"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 512, + "output": 0 + } + }, + "bfl/flux-kontext-pro": { + "id": "bfl/flux-kontext-pro", + "name": "FLUX.1 Kontext Pro", + "family": "flux", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-06", + "last_updated": "2025-06", + "modalities": { + "input": ["text"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 512, + "output": 0 + } + }, + "bfl/flux-kontext-max": { + "id": "bfl/flux-kontext-max", + "name": "FLUX.1 Kontext Max", + "family": "flux", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2025-06", + "last_updated": "2025-06", + "modalities": { + "input": ["text"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 512, + "output": 0 + } + }, + "bfl/flux-pro-1.1-ultra": { + "id": "bfl/flux-pro-1.1-ultra", + "name": "FLUX1.1 [pro] Ultra", + "family": "flux", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2024-11", + "last_updated": "2024-11", + "modalities": { + "input": ["text"], + "output": ["image"] + }, + "open_weights": false, + "limit": { + "context": 512, + "output": 0 + } + } + } + }, + "minimax": { + "id": "minimax", + "env": ["MINIMAX_API_KEY"], + "npm": "@ai-sdk/anthropic", + "api": "https://api.minimax.io/anthropic/v1", + "name": "MiniMax (minimax.io)", + "doc": "https://platform.minimax.io/docs/guides/quickstart", + "models": { + "MiniMax-M2": { + "id": "MiniMax-M2", + "name": "MiniMax-M2", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-10-27", + "last_updated": "2025-10-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 196608, + "output": 128000 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } + }, + "MiniMax-M2.5": { + "id": "MiniMax-M2.5", + "name": "MiniMax-M2.5", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.03, + "cache_write": 0.375 + } + }, + "MiniMax-M2.7": { + "id": "MiniMax-M2.7", + "name": "MiniMax-M2.7", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.06, + "cache_write": 0.375 + } + }, + "MiniMax-M2.7-highspeed": { + "id": "MiniMax-M2.7-highspeed", + "name": "MiniMax-M2.7-highspeed", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 2.4, + "cache_read": 0.06, + "cache_write": 0.375 + } + }, + "MiniMax-M2.1": { + "id": "MiniMax-M2.1", + "name": "MiniMax-M2.1", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } + }, + "MiniMax-M2.5-highspeed": { + "id": "MiniMax-M2.5-highspeed", + "name": "MiniMax-M2.5-highspeed", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-02-13", + "last_updated": "2026-02-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 2.4, + "cache_read": 0.06, + "cache_write": 0.375 + } + } + } + }, + "llmgateway": { + "id": "llmgateway", + "env": ["LLMGATEWAY_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.llmgateway.io/v1", + "name": "LLM Gateway", + "doc": "https://llmgateway.io/docs", + "models": { + "gpt-4o-mini-search-preview": { + "id": "gpt-4o-mini-search-preview", + "name": "GPT-4o Mini Search Preview", + "family": "gpt", + "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "temperature": true, + "release_date": "2024-10-01", + "last_updated": "2024-10-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } + }, + "grok-4-1-fast-reasoning": { + "id": "grok-4-1-fast-reasoning", + "name": "Grok 4.1 Fast Reasoning", + "family": "grok", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-11-19", + "last_updated": "2025-11-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } + }, + "qwen3-235b-a22b-instruct-2507": { + "id": "qwen3-235b-a22b-instruct-2507", + "name": "Qwen3 235B A22B Instruct (2507)", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-08", + "last_updated": "2025-07-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.8, + "output": 2.4 + } + }, + "llama-4-scout": { + "id": "llama-4-scout", + "name": "Llama 4 Scout", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": false, + "temperature": true, + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 16384 + }, + "status": "beta", + "cost": { + "input": 0.18, + "output": 0.59 + } + }, + "hermes-2-pro-llama-3-8b": { + "id": "hermes-2-pro-llama-3-8b", + "name": "Hermes 2 Pro Llama 3 8B", + "family": "hermes", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "temperature": true, + "release_date": "2024-05-27", + "last_updated": "2024-05-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 0.14, + "output": 0.14 + } + }, + "qwen-coder-plus": { + "id": "qwen-coder-plus", + "name": "Qwen Coder Plus", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2024-09-18", + "last_updated": "2024-09-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.5, + "output": 1 + } + }, + "auto": { + "id": "auto", + "name": "Auto Route", + "family": "auto", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2024-01-01", + "last_updated": "2024-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "glm-4.6v-flashx": { + "id": "glm-4.6v-flashx", + "name": "GLM-4.6V FlashX", + "family": "glm", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-12-08", + "last_updated": "2025-12-08", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16000 + }, + "cost": { + "input": 0.04, + "output": 0.4, + "cache_read": 0 + } + }, + "gemma-2-27b-it-together": { + "id": "gemma-2-27b-it-together", + "name": "Gemma 2 27B IT", + "family": "gemma", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "temperature": true, + "release_date": "2024-06-27", + "last_updated": "2024-06-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 16384 + }, + "cost": { + "input": 0.08, + "output": 0.08 + } + }, + "codestral-2508": { + "id": "codestral-2508", + "name": "Codestral", + "family": "mistral", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-30", + "last_updated": "2025-07-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 16384 + }, + "cost": { + "input": 0.3, + "output": 0.9 + } + }, + "gemma-3-1b-it": { + "id": "gemma-3-1b-it", + "name": "Gemma 3 1B IT", + "family": "gemma", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "temperature": true, + "release_date": "2025-03-12", + "last_updated": "2025-03-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 16384 + }, + "cost": { + "input": 0.08, + "output": 0.3 + } + }, + "glm-4-32b-0414-128k": { + "id": "glm-4-32b-0414-128k", + "name": "GLM-4 32B (0414-128k)", + "family": "glm", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } + }, + "seed-1-6-flash-250715": { + "id": "seed-1-6-flash-250715", + "name": "Seed 1.6 Flash (250715)", + "family": "seed", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-26", + "last_updated": "2025-07-26", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 8192 + }, + "cost": { + "input": 0.07, + "output": 0.3, + "cache_read": 0.01 + } + }, + "seed-1-6-250615": { + "id": "seed-1-6-250615", + "name": "Seed 1.6 (250615)", + "family": "seed", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-06-25", + "last_updated": "2025-06-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 8192 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.05 + } + }, + "qwen3-vl-235b-a22b-thinking": { + "id": "qwen3-vl-235b-a22b-thinking", + "name": "Qwen3 VL 235B A22B Thinking", + "family": "qwen", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-09-15", + "last_updated": "2025-09-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.8, + "output": 2.4 + } + }, + "qwen3-vl-30b-a3b-thinking": { + "id": "qwen3-vl-30b-a3b-thinking", + "name": "Qwen3 VL 30B A3B Thinking", + "family": "qwen", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-10-02", + "last_updated": "2025-10-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } + }, + "qwen2-5-vl-32b-instruct": { + "id": "qwen2-5-vl-32b-instruct", + "name": "Qwen2.5 VL 32B Instruct", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-03-15", + "last_updated": "2025-03-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 0.3 + } + }, + "qwen3-vl-8b-instruct": { + "id": "qwen3-vl-8b-instruct", + "name": "Qwen3 VL 8B Instruct", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "temperature": true, + "release_date": "2025-08-19", + "last_updated": "2025-08-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } + }, + "claude-3-7-sonnet": { + "id": "claude-3-7-sonnet", + "name": "Claude 3.7 Sonnet", + "family": "claude", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": false, + "temperature": true, + "release_date": "2025-02-24", + "last_updated": "2025-02-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3 + } + }, + "gemini-pro-latest": { + "id": "gemini-pro-latest", + "name": "Gemini Pro Latest", + "family": "gemini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2026-02-27", + "last_updated": "2026-02-27", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2 + } + }, + "claude-3-5-haiku": { + "id": "claude-3-5-haiku", + "name": "Claude 3.5 Haiku", + "family": "claude", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": false, + "temperature": true, + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "status": "deprecated", + "cost": { + "input": 0.8, + "output": 4, + "cache_read": 0.08 + } + }, + "qwen-max-latest": { + "id": "qwen-max-latest", + "name": "Qwen Max Latest", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-01-25", + "last_updated": "2025-01-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "output": 8192 + }, + "cost": { + "input": 1.6, + "output": 6.4 + } + }, + "glm-4.6v-flash": { + "id": "glm-4.6v-flash", + "name": "GLM-4.6V Flash", + "family": "glm", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-12-08", + "last_updated": "2025-12-08", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 16000 + }, + "status": "beta", + "cost": { + "input": 0, + "output": 0 + } + }, + "qwen3-30b-a3b-instruct-2507": { + "id": "qwen3-30b-a3b-instruct-2507", + "name": "Qwen3 30B A3B Instruct (2507)", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-08", + "last_updated": "2025-07-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } + }, + "minimax-text-01": { + "id": "minimax-text-01", + "name": "MiniMax Text 01", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": false, + "structured_output": false, + "temperature": true, + "release_date": "2025-01-15", + "last_updated": "2025-01-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 131072 + }, + "cost": { + "input": 0.2, + "output": 1.1 + } + }, + "qwen3-32b-fp8": { + "id": "qwen3-32b-fp8", + "name": "Qwen3 32B FP8", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-04-28", + "last_updated": "2025-04-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } + }, + "llama-4-scout-17b-instruct": { + "id": "llama-4-scout-17b-instruct", + "name": "Llama 4 Scout 17B Instruct", + "family": "llama", + "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "temperature": true, + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 2048 + }, + "cost": { + "input": 0.17, + "output": 0.66 + } + }, + "qwen3-4b-fp8": { + "id": "qwen3-4b-fp8", + "name": "Qwen3 4B FP8", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-04-28", + "last_updated": "2025-04-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.03, + "output": 0.05 + } + }, + "ministral-8b-2512": { + "id": "ministral-8b-2512", + "name": "Ministral 8B", + "family": "mistral", + "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": true, + "temperature": true, + "release_date": "2025-12-02", + "last_updated": "2025-12-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 8192 + }, + "cost": { + "input": 0.15, + "output": 0.15 + } + }, + "gemma-3-27b": { + "id": "gemma-3-27b", + "name": "Gemma 3 27B", + "family": "gemma", + "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "temperature": true, + "release_date": "2025-03-12", + "last_updated": "2025-03-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.27, + "output": 0.27 + } + }, + "qwen3-vl-flash": { + "id": "qwen3-vl-flash", + "name": "Qwen3 VL Flash", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-10-09", + "last_updated": "2025-10-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 32000 + }, + "cost": { + "input": 0.05, + "output": 0.4, + "cache_read": 0.01 + } + }, + "llama-3.1-70b-instruct": { + "id": "llama-3.1-70b-instruct", + "name": "Llama 3.1 70B Instruct", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "temperature": true, + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 2048 + }, + "status": "beta", + "cost": { + "input": 0.72, + "output": 0.72 + } + }, + "seed-1-8-251228": { + "id": "seed-1-8-251228", + "name": "Seed 1.8 (251228)", + "family": "seed", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-12-18", + "last_updated": "2025-12-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 8192 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.05 + } + }, + "qwen3-235b-a22b-thinking-2507": { + "id": "qwen3-235b-a22b-thinking-2507", + "name": "Qwen3 235B A22B Thinking (2507)", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-08", + "last_updated": "2025-07-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.8, + "output": 2.4 + } + }, + "seed-1-6-250915": { + "id": "seed-1-6-250915", + "name": "Seed 1.6 (250915)", + "family": "seed", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-09-15", + "last_updated": "2025-09-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 8192 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.05 + } + }, + "glm-4.5-x": { + "id": "glm-4.5-x", + "name": "GLM-4.5 X", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "status": "beta", + "cost": { + "input": 2.2, + "output": 8.9, + "cache_read": 0.45 + } + }, + "qwen3-30b-a3b-thinking-2507": { + "id": "qwen3-30b-a3b-thinking-2507", + "name": "Qwen3 30B A3B Thinking (2507)", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-08", + "last_updated": "2025-07-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } + }, + "grok-4-fast-reasoning": { + "id": "grok-4-fast-reasoning", + "name": "Grok 4 Fast Reasoning", + "family": "grok", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } + }, + "deepseek-v3.1": { + "id": "deepseek-v3.1", + "name": "DeepSeek V3.1", + "family": "deepseek", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-08-21", + "last_updated": "2025-08-21", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.56, + "output": 1.68, + "cache_read": 0.11 + } + }, + "ministral-3b-2512": { + "id": "ministral-3b-2512", + "name": "Ministral 3B", + "family": "mistral", + "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": true, + "temperature": true, + "release_date": "2025-12-02", + "last_updated": "2025-12-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } + }, + "qwen-plus-latest": { + "id": "qwen-plus-latest", + "name": "Qwen Plus Latest", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-01-25", + "last_updated": "2025-01-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 0.9 + } + }, + "llama-3.1-nemotron-ultra-253b": { + "id": "llama-3.1-nemotron-ultra-253b", + "name": "Llama 3.1 Nemotron Ultra 253B", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": true, + "temperature": true, + "release_date": "2025-04-07", + "last_updated": "2025-04-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.6, + "output": 1.8 + } + }, + "llama-4-maverick-17b-instruct": { + "id": "llama-4-maverick-17b-instruct", + "name": "Llama 4 Maverick 17B Instruct", + "family": "llama", + "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "temperature": true, + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 2048 + }, + "cost": { + "input": 0.24, + "output": 0.97 + } + }, + "grok-4-0709": { + "id": "grok-4-0709", + "name": "Grok 4 (0709)", + "family": "grok", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 3, + "output": 15 + } + }, + "qwen3-30b-a3b-fp8": { + "id": "qwen3-30b-a3b-fp8", + "name": "Qwen3 30B A3B FP8", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-04-28", + "last_updated": "2025-04-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } + }, + "minimax-m2.1-lightning": { + "id": "minimax-m2.1-lightning", + "name": "MiniMax M2.1 Lightning", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": false, + "structured_output": false, + "temperature": true, + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 196608, + "output": 131072 + }, + "cost": { + "input": 0.12, + "output": 0.48 + } + }, + "qwen3-max-2026-01-23": { + "id": "qwen3-max-2026-01-23", + "name": "Qwen3 Max (2026-01-23)", + "family": "qwen", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2026-01-23", + "last_updated": "2026-01-23", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 256000, + "output": 32800 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.6 + } + }, + "llama-3.2-3b-instruct": { + "id": "llama-3.2-3b-instruct", + "name": "Llama 3.2 3B Instruct", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": true, + "temperature": true, + "release_date": "2024-09-18", + "last_updated": "2024-09-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 32000 + }, + "cost": { + "input": 0.03, + "output": 0.05 + } + }, + "qwen3-coder-next": { + "id": "qwen3-coder-next", + "name": "Qwen3 Coder Next", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.8, + "output": 4 + } + }, + "gpt-4o-search-preview": { + "id": "gpt-4o-search-preview", + "name": "GPT-4o Search Preview", + "family": "gpt", + "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": false, + "temperature": true, + "release_date": "2024-10-01", + "last_updated": "2024-10-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 10 + } + }, + "custom": { + "id": "custom", + "name": "Custom Model", + "family": "auto", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2024-01-01", + "last_updated": "2024-01-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "qwen3-vl-30b-a3b-instruct": { + "id": "qwen3-vl-30b-a3b-instruct", + "name": "Qwen3 VL 30B A3B Instruct", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-10-02", + "last_updated": "2025-10-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } + }, + "deepseek-v3.2": { + "id": "deepseek-v3.2", + "name": "DeepSeek V3.2", + "family": "deepseek", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 163840, + "output": 16384 + }, + "cost": { + "input": 0.28, + "output": 0.42, + "cache_read": 0.03 + } + }, + "qwen3-235b-a22b-fp8": { + "id": "qwen3-235b-a22b-fp8", + "name": "Qwen3 235B A22B FP8", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-04-28", + "last_updated": "2025-04-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.5, + "output": 2.5 + } + }, + "gpt-oss-20b": { + "id": "gpt-oss-20b", + "name": "GPT OSS 20B", + "family": "gpt-oss", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 32766 + }, + "cost": { + "input": 0.1, + "output": 0.5 + } + }, + "kimi-k2": { + "id": "kimi-k2", + "name": "Kimi K2", + "family": "kimi", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-11", + "last_updated": "2025-07-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 1, + "output": 3, + "cache_read": 0.5 + } + }, + "llama-3-8b-instruct": { + "id": "llama-3-8b-instruct", + "name": "Llama 3 8B Instruct", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": true, + "temperature": true, + "release_date": "2025-04-03", + "last_updated": "2025-04-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 0.04, + "output": 0.04 + } + }, + "qwen3-vl-235b-a22b-instruct": { + "id": "qwen3-vl-235b-a22b-instruct", + "name": "Qwen3 VL 235B A22B Instruct", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-09-15", + "last_updated": "2025-09-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.8, + "output": 2.4 + } + }, + "gpt-oss-120b": { + "id": "gpt-oss-120b", + "name": "GPT OSS 120B", + "family": "gpt-oss", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 32766 + }, + "cost": { + "input": 0.15, + "output": 0.75 + } + }, + "qwen25-coder-7b": { + "id": "qwen25-coder-7b", + "name": "Qwen2.5 Coder 7B", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": true, + "temperature": true, + "release_date": "2024-09-19", + "last_updated": "2024-09-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.05, + "output": 0.05 + } + }, + "llama-3.1-8b-instruct": { + "id": "llama-3.1-8b-instruct", + "name": "Llama 3.1 8B Instruct", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 2048 + }, + "status": "beta", + "cost": { + "input": 0.22, + "output": 0.22 + } + }, + "llama-3-70b-instruct": { + "id": "llama-3-70b-instruct", + "name": "Llama 3 70B Instruct", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": true, + "temperature": true, + "release_date": "2024-04-18", + "last_updated": "2024-04-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 8000 + }, + "cost": { + "input": 0.51, + "output": 0.74 + } + }, + "deepseek-r1-0528": { + "id": "deepseek-r1-0528", + "name": "DeepSeek R1 (0528)", + "family": "deepseek", + "attachment": false, + "reasoning": true, + "tool_call": false, + "structured_output": false, + "temperature": true, + "release_date": "2025-05-28", + "last_updated": "2025-05-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 64000, + "output": 16384 + }, + "status": "beta", + "cost": { + "input": 0.8, + "output": 2.4 + } + }, + "glm-4.5-airx": { + "id": "glm-4.5-airx", + "name": "GLM-4.5 AirX", + "family": "glm", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.1, + "output": 4.5, + "cache_read": 0.22 + } + }, + "ministral-14b-2512": { + "id": "ministral-14b-2512", + "name": "Ministral 14B", + "family": "mistral", + "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": true, + "temperature": true, + "release_date": "2025-12-02", + "last_updated": "2025-12-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 8192 + }, + "cost": { + "input": 0.2, + "output": 0.2 + } + }, + "llama-3.2-11b-instruct": { + "id": "llama-3.2-11b-instruct", + "name": "Llama 3.2 11B Instruct", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": false, + "structured_output": true, + "temperature": true, + "release_date": "2024-09-25", + "last_updated": "2024-09-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.07, + "output": 0.33 + } + }, + "claude-3-opus": { + "id": "claude-3-opus", + "name": "Claude 3 Opus", + "family": "claude", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": false, + "temperature": true, + "release_date": "2024-03-04", + "last_updated": "2024-03-04", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 4096 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5 + } + }, + "minimax-m2.7": { + "id": "minimax-m2.7", + "name": "MiniMax-M2.7", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.06, + "cache_write": 0.375 + } + }, + "grok-4-20-beta-0309-non-reasoning": { + "id": "grok-4-20-beta-0309-non-reasoning", + "name": "Grok 4.20 (Non-Reasoning)", + "family": "grok", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-09", + "last_updated": "2026-03-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 2, + "output": 6, + "cache_read": 0.2, + "context_over_200k": { + "input": 4, + "output": 12, + "cache_read": 0.4 + }, + "tiers": [ + { + "input": 4, + "output": 12, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ] + } + }, + "qwen3-coder-plus": { + "id": "qwen3-coder-plus", + "name": "Qwen3 Coder Plus", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1, + "output": 5 + } + }, + "claude-haiku-4-5": { + "id": "claude-haiku-4-5", + "name": "Claude Haiku 4.5 (latest)", + "family": "claude-haiku", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } + }, + "claude-opus-4-5-20251101": { + "id": "claude-opus-4-5-20251101", + "name": "Claude Opus 4.5", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-11-01", + "last_updated": "2025-11-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } + }, + "gemini-2.5-flash-lite-preview-09-2025": { + "id": "gemini-2.5-flash-lite-preview-09-2025", + "name": "Gemini 2.5 Flash Lite Preview 09-25", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.025 + } + }, + "kimi-k2.5": { + "id": "kimi-k2.5", + "name": "Kimi K2.5", + "family": "kimi-k2.5", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-01", + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 3, + "cache_read": 0.1 + } + }, + "llama-3.3-70b-instruct": { + "id": "llama-3.3-70b-instruct", + "name": "Llama-3.3-70B-Instruct", + "family": "llama", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "mistral-large-2512": { + "id": "mistral-large-2512", + "name": "Mistral Large 3", + "family": "mistral-large", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2024-11-01", + "last_updated": "2025-12-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.5, + "output": 1.5 + } + }, + "glm-4.7": { + "id": "glm-4.7", + "name": "GLM-4.7", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 2.2, + "cache_read": 0.11, + "cache_write": 0 + } + }, + "minimax-m2.7-highspeed": { + "id": "minimax-m2.7-highspeed", + "name": "MiniMax-M2.7-highspeed", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 2.4, + "cache_read": 0.06, + "cache_write": 0.375 + } + }, + "mimo-v2.5-pro": { + "id": "mimo-v2.5-pro", + "name": "MiMo-V2.5-Pro", + "family": "mimo", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 1, + "output": 3, + "cache_read": 0.2, + "context_over_200k": { + "input": 2, + "output": 6, + "cache_read": 0.4 + }, + "tiers": [ + { + "input": 2, + "output": 6, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 256000 + } + } + ] + } + }, + "gemma-3n-e4b-it": { + "id": "gemma-3n-e4b-it", + "name": "Gemma 3n 4B", + "family": "gemma", + "attachment": true, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-05-20", + "last_updated": "2025-05-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 2000 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "claude-3-5-sonnet-20241022": { + "id": "claude-3-5-sonnet-20241022", + "name": "Claude Sonnet 3.5 v2", + "family": "claude-sonnet", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04-30", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } + }, + "gpt-5.2-pro": { + "id": "gpt-5.2-pro", + "name": "GPT-5.2 Pro", + "family": "gpt-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": false, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 21, + "output": 168 + } + }, + "qwq-plus": { + "id": "qwq-plus", + "name": "QwQ Plus", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-03-05", + "last_updated": "2025-03-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.8, + "output": 2.4 + } + }, + "gemini-3.1-flash-lite-preview": { + "id": "gemini-3.1-flash-lite-preview", + "name": "Gemini 3.1 Flash Lite Preview", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-03-03", + "last_updated": "2026-03-03", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.25, + "output": 1.5, + "cache_read": 0.025, + "input_audio": 0.5 + } + }, + "qwen-vl-plus": { + "id": "qwen-vl-plus", + "name": "Qwen-VL Plus", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2024-01-25", + "last_updated": "2025-08-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.21, + "output": 0.63 + } + }, + "glm-5": { + "id": "glm-5", + "name": "GLM-5", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 1, + "output": 3.2, + "cache_read": 0.2, + "cache_write": 0 + } + }, + "devstral-2512": { + "id": "devstral-2512", + "name": "Devstral 2", + "family": "devstral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-12", + "release_date": "2025-12-09", + "last_updated": "2025-12-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.4, + "output": 2 + } + }, + "qwen3-32b": { + "id": "qwen3-32b", + "name": "Qwen3 32B", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.7, + "output": 2.8, + "reasoning": 8.4 + } + }, + "claude-sonnet-4-6": { + "id": "claude-sonnet-4-6", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } + }, + "glm-4.7-flashx": { + "id": "glm-4.7-flashx", + "name": "GLM-4.7-FlashX", + "family": "glm-flash", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2026-01-19", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 0.07, + "output": 0.4, + "cache_read": 0.01, + "cache_write": 0 + } + }, + "gemini-3.1-pro-preview": { + "id": "gemini-3.1-pro-preview", + "name": "Gemini 3.1 Pro Preview", + "family": "gemini-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-02-19", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2, + "context_over_200k": { + "input": 4, + "output": 18, + "cache_read": 0.4 + }, + "tiers": [ + { + "input": 4, + "output": 18, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ] + } + }, + "qwen35-397b-a17b": { + "id": "qwen35-397b-a17b", + "name": "Qwen3.5 397B-A17B", + "family": "qwen", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2026-02-15", + "last_updated": "2026-02-15", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.6, + "output": 3.6 + } + }, + "qwen-max": { + "id": "qwen-max", + "name": "Qwen Max", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2024-04-03", + "last_updated": "2025-01-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "output": 8192 + }, + "cost": { + "input": 1.6, + "output": 6.4 + } + }, + "gpt-5.3-chat-latest": { + "id": "gpt-5.3-chat-latest", + "name": "GPT-5.3 Chat (latest)", + "family": "gpt", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-08-31", + "release_date": "2026-03-03", + "last_updated": "2026-03-03", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } + }, + "gemini-2.0-flash": { + "id": "gemini-2.0-flash", + "name": "Gemini 2.0 Flash", + "family": "gemini-flash", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-06", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.025 + } + }, + "gemini-3-flash-preview": { + "id": "gemini-3-flash-preview", + "name": "Gemini 3 Flash Preview", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.05, + "input_audio": 1 + } + }, + "qwen-plus": { + "id": "qwen-plus", + "name": "Qwen Plus", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2024-01-25", + "last_updated": "2025-09-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 32768 + }, + "cost": { + "input": 0.4, + "output": 1.2, + "reasoning": 4 + } + }, + "gpt-5.5": { + "id": "gpt-5.5", + "name": "GPT-5.5", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-12-01", + "release_date": "2026-04-23", + "last_updated": "2026-04-23", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "experimental": { + "modes": { + "fast": { + "cost": { + "input": 12.5, + "output": 75, + "cache_read": 1.25 + }, + "provider": { + "body": { + "service_tier": "priority" + } + } + } + } + }, + "cost": { + "input": 5, + "output": 30, + "cache_read": 0.5, + "context_over_200k": { + "input": 10, + "output": 45, + "cache_read": 1 + }, + "tiers": [ + { + "input": 10, + "output": 45, + "cache_read": 1, + "tier": { + "type": "context", + "size": 272000 + } + } + ] + } + }, + "qwen3.6-35b-a3b": { + "id": "qwen3.6-35b-a3b", + "name": "Qwen3.6 35B-A3B", + "family": "qwen", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2026-04-17", + "last_updated": "2026-04-17", + "modalities": { + "input": ["text", "image", "video", "audio"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.248, + "output": 1.485 + } + }, + "qwen-omni-turbo": { + "id": "qwen-omni-turbo", + "name": "Qwen-Omni Turbo", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-01-19", + "last_updated": "2025-03-26", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text", "audio"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "output": 2048 + }, + "cost": { + "input": 0.07, + "output": 0.27, + "input_audio": 4.44, + "output_audio": 8.89 + } + }, + "claude-opus-4-7": { + "id": "claude-opus-4-7", + "name": "Claude Opus 4.7", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } + }, + "gpt-5-mini": { + "id": "gpt-5-mini", + "name": "GPT-5 Mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.025 + } + }, + "gpt-5-nano": { + "id": "gpt-5-nano", + "name": "GPT-5 Nano", + "family": "gpt-nano", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.05, + "output": 0.4, + "cache_read": 0.005 + } + }, + "mimo-v2-omni": { + "id": "mimo-v2-omni", + "name": "MiMo-V2-Omni", + "family": "mimo", + "attachment": true, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0.4, + "output": 2, + "cache_read": 0.08 + } + }, + "gpt-5.3-codex": { + "id": "gpt-5.3-codex", + "name": "GPT-5.3 Codex", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } + }, + "minimax-m2": { + "id": "minimax-m2", + "name": "MiniMax-M2", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-10-27", + "last_updated": "2025-10-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 196608, + "output": 128000 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } + }, + "claude-sonnet-4-5-20250929": { + "id": "claude-sonnet-4-5-20250929", + "name": "Claude Sonnet 4.5", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } + }, + "qwen-flash": { + "id": "qwen-flash", + "name": "Qwen Flash", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 32768 + }, + "cost": { + "input": 0.05, + "output": 0.4 + } + }, + "gpt-4-turbo": { + "id": "gpt-4-turbo", + "name": "GPT-4 Turbo", + "family": "gpt", + "attachment": true, + "reasoning": false, + "tool_call": true, "structured_output": false, - "release_date": "2025-07-26", - "last_updated": "2025-07-26", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2023-11-06", + "last_updated": "2024-04-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 10, + "output": 30 + } + }, + "gemini-2.5-pro": { + "id": "gemini-2.5-pro", + "name": "Gemini 2.5 Pro", + "family": "gemini-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125, + "context_over_200k": { + "input": 2.5, + "output": 15, + "cache_read": 0.25 + }, + "tiers": [ + { + "input": 2.5, + "output": 15, + "cache_read": 0.25, + "tier": { + "type": "context", + "size": 200000 + } + } + ] + } + }, + "mimo-v2.5": { + "id": "mimo-v2.5", + "name": "MiMo-V2.5", + "family": "mimo", + "attachment": true, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 0.4, + "output": 2, + "cache_read": 0.08, + "context_over_200k": { + "input": 0.8, + "output": 4, + "cache_read": 0.16 + }, + "tiers": [ + { + "input": 0.8, + "output": 4, + "cache_read": 0.16, + "tier": { + "type": "context", + "size": 256000 + } + } + ] + } + }, + "grok-4-1-fast-non-reasoning": { + "id": "grok-4-1-fast-non-reasoning", + "name": "Grok 4.1 Fast (Non-Reasoning)", + "family": "grok", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-07", + "release_date": "2025-11-19", + "last_updated": "2025-11-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } + }, + "sonar-pro": { + "id": "sonar-pro", + "name": "Sonar Pro", + "family": "sonar-pro", + "attachment": true, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2025-09-01", + "release_date": "2024-01-01", + "last_updated": "2025-09-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15 + } + }, + "pixtral-large-latest": { + "id": "pixtral-large-latest", + "name": "Pixtral Large (latest)", + "family": "pixtral", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2024-11-01", + "last_updated": "2024-11-04", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 2, + "output": 6 + } + }, + "gpt-5.2": { + "id": "gpt-5.2", + "name": "GPT-5.2", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } + }, + "grok-4-20-beta-0309-reasoning": { + "id": "grok-4-20-beta-0309-reasoning", + "name": "Grok 4.20 (Reasoning)", + "family": "grok", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-09", + "last_updated": "2026-03-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 2, + "output": 6, + "cache_read": 0.2, + "context_over_200k": { + "input": 4, + "output": 12, + "cache_read": 0.4 + }, + "tiers": [ + { + "input": 4, + "output": 12, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ] + } + }, + "gpt-4o-mini": { + "id": "gpt-4o-mini", + "name": "GPT-4o mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2023-09", + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.6, + "cache_read": 0.08 + } + }, + "qwen3.6-plus": { + "id": "qwen3.6-plus", + "name": "Qwen3.6 Plus", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.05, + "cache_write": 0.625, + "context_over_200k": { + "input": 2, + "output": 6, + "cache_read": 0.2, + "cache_write": 2.5 + }, + "tiers": [ + { + "input": 2, + "output": 6, + "cache_read": 0.2, + "cache_write": 2.5, + "tier": { + "type": "context", + "size": 256000 + } + } + ] + } + }, + "gpt-5.4-mini": { + "id": "gpt-5.4-mini", + "name": "GPT-5.4 mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.75, + "output": 4.5, + "cache_read": 0.075 + } + }, + "qwen3-max": { + "id": "qwen3-max", + "name": "Qwen3 Max", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-09-23", + "last_updated": "2025-09-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 1.2, + "output": 6 + } + }, + "minimax-m2.1": { + "id": "minimax-m2.1", + "name": "MiniMax-M2.1", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } + }, + "glm-5.1": { + "id": "glm-5.1", + "name": "GLM-5.1", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": true, + "release_date": "2026-03-27", + "last_updated": "2026-03-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 6, + "output": 24, + "cache_read": 1.3, + "cache_write": 0 + } + }, + "o4-mini": { + "id": "o4-mini", + "name": "o4-mini", + "family": "o-mini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.28 + } + }, + "gpt-5.4-nano": { + "id": "gpt-5.4-nano", + "name": "GPT-5.4 nano", + "family": "gpt-nano", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.2, + "output": 1.25, + "cache_read": 0.02 + } + }, + "glm-4.5": { + "id": "glm-4.5", + "name": "GLM-4.5", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 98304 + }, + "cost": { + "input": 0.6, + "output": 2.2, + "cache_read": 0.11, + "cache_write": 0 + } + }, + "mistral-large-latest": { + "id": "mistral-large-latest", + "name": "Mistral Large (latest)", + "family": "mistral-large", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2024-11-01", + "last_updated": "2025-12-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.5, + "output": 1.5 + } + }, + "mistral-small-2506": { + "id": "mistral-small-2506", + "name": "Mistral Small 3.2", + "family": "mistral-small", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03", + "release_date": "2025-06-20", + "last_updated": "2025-06-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.1, + "output": 0.3 + } + }, + "gemma-3-12b-it": { + "id": "gemma-3-12b-it", + "name": "Gemma 3 12B", + "family": "gemma", + "attachment": true, + "reasoning": false, + "tool_call": false, + "structured_output": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "gpt-5.2-codex": { + "id": "gpt-5.2-codex", + "name": "GPT-5.2 Codex", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } + }, + "gemini-2.5-flash": { + "id": "gemini-2.5-flash", + "name": "Gemini 2.5 Flash", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.03, + "input_audio": 1 + } + }, + "gpt-5.2-chat-latest": { + "id": "gpt-5.2-chat-latest", + "name": "GPT-5.2 Chat", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } + }, + "gemma-3n-e2b-it": { + "id": "gemma-3n-e2b-it", + "name": "Gemma 3n 2B", + "family": "gemma", + "attachment": true, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 2000 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "gpt-5.1-codex-mini": { + "id": "gpt-5.1-codex-mini", + "name": "GPT-5.1 Codex mini", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.025 + } + }, + "grok-4-fast": { + "id": "grok-4-fast", + "name": "Grok 4 Fast", + "family": "grok", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-07", + "release_date": "2025-09-19", + "last_updated": "2025-09-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.17, "output": 0.68 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } }, - "Llama-3.3-70B-Sapphira-0.1": { - "id": "Llama-3.3-70B-Sapphira-0.1", - "name": "Llama 3.3 70B Sapphira 0.1", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "gemini-3.1-flash-lite": { + "id": "gemini-3.1-flash-lite", + "name": "Gemini 3.1 Flash Lite", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-05-07", + "last_updated": "2026-05-07", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.25, + "output": 1.5, + "cache_read": 0.025, + "input_audio": 0.5 + } }, - "yi-medium-200k": { - "id": "yi-medium-200k", - "name": "Yi Medium 200k", + "qwen3-next-80b-a3b-thinking": { + "id": "qwen3-next-80b-a3b-thinking", + "name": "Qwen3-Next 80B-A3B (Thinking)", + "family": "qwen", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-03-01", - "last_updated": "2024-03-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.499, "output": 2.499 }, - "limit": { "context": 200000, "input": 200000, "output": 4096 } + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-09", + "last_updated": "2025-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.5, + "output": 6 + } }, - "jamba-mini-1.7": { - "id": "jamba-mini-1.7", - "name": "Jamba Mini 1.7", + "grok-code-fast-1": { + "id": "grok-code-fast-1", + "name": "Grok Code Fast 1", + "family": "grok", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2023-10", + "release_date": "2025-08-28", + "last_updated": "2025-08-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1989, "output": 0.408 }, - "limit": { "context": 256000, "input": 256000, "output": 4096 } + "limit": { + "context": 256000, + "output": 10000 + }, + "cost": { + "input": 0.2, + "output": 1.5, + "cache_read": 0.02 + } }, - "gemini-3-pro-image-preview": { - "id": "gemini-3-pro-image-preview", - "name": "Gemini 3 Pro Image", + "gpt-5.1": { + "id": "gpt-5.1", + "name": "GPT-5.1", + "family": "gpt", "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-11-18", - "last_updated": "2025-11-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 12 }, - "limit": { "context": 1048756, "input": 1048756, "output": 65536 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.13 + } }, - "fastgpt": { - "id": "fastgpt", - "name": "Web Answer", - "attachment": false, + "gemma-3-4b-it": { + "id": "gemma-3-4b-it", + "name": "Gemma 3 4B", + "family": "gemma", + "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2023-08-01", - "last_updated": "2024-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "kimi-k2-thinking-turbo": { + "id": "kimi-k2-thinking-turbo", + "name": "Kimi K2 Thinking Turbo", + "family": "kimi-thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 1.15, + "output": 8, + "cache_read": 0.15 + } + }, + "o1": { + "id": "o1", + "name": "o1", + "family": "o", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2023-09", + "release_date": "2024-12-05", + "last_updated": "2024-12-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 7.5, "output": 7.5 }, - "limit": { "context": 32768, "input": 32768, "output": 32768 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 15, + "output": 60, + "cache_read": 7.5 + } }, - "GLM-4.5-Air-Derestricted-Iceblink": { - "id": "GLM-4.5-Air-Derestricted-Iceblink", - "name": "GLM 4.5 Air Derestricted Iceblink", + "glm-4.5-air": { + "id": "glm-4.5-air", + "name": "GLM-4.5-Air", + "family": "glm-air", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", "release_date": "2025-07-28", "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 98304 + }, + "cost": { + "input": 0.2, + "output": 1.1, + "cache_read": 0.03, + "cache_write": 0 + } + }, + "gpt-5.4-pro": { + "id": "gpt-5.4-pro", + "name": "GPT-5.4 Pro", + "family": "gpt-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": false, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 131072, "input": 131072, "output": 98304 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 30, + "output": 180 + } }, - "Llama-3.3-70B-Predatorial-Extasy": { - "id": "Llama-3.3-70B-Predatorial-Extasy", - "name": "Llama 3.3 70B Predatorial Extasy", + "gpt-3.5-turbo": { + "id": "gpt-3.5-turbo", + "name": "GPT-3.5-turbo", + "family": "gpt", "attachment": false, "reasoning": false, "tool_call": false, "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2021-09-01", + "release_date": "2023-03-01", + "last_updated": "2023-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 16385, + "output": 4096 + }, + "cost": { + "input": 0.5, + "output": 1.5, + "cache_read": 1.25 + } }, - "claude-3-7-sonnet-thinking": { - "id": "claude-3-7-sonnet-thinking", - "name": "Claude 3.7 Sonnet Thinking", - "attachment": true, + "o3-mini": { + "id": "o3-mini", + "name": "o3-mini", + "family": "o-mini", + "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-02-24", - "last_updated": "2025-02-24", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2024-12-20", + "last_updated": "2025-01-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.992, "output": 14.994 }, - "limit": { "context": 200000, "input": 200000, "output": 16000 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.55 + } }, - "Llama-3.3-70B-Magnum-v4-SE-Cirrus-x1-SLERP": { - "id": "Llama-3.3-70B-Magnum-v4-SE-Cirrus-x1-SLERP", - "name": "Llama 3.3 70B Magnum v4 SE Cirrus x1 SLERP", + "qwen-vl-max": { + "id": "qwen-vl-max", + "name": "Qwen-VL Max", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2024-04-08", + "last_updated": "2025-08-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.8, + "output": 3.2 + } + }, + "sonar": { + "id": "sonar", + "name": "Sonar", + "family": "sonar", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-07-26", - "last_updated": "2025-07-26", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-09-01", + "release_date": "2024-01-01", + "last_updated": "2025-09-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 1, + "output": 1 + } }, - "claude-3-5-sonnet-20241022": { - "id": "claude-3-5-sonnet-20241022", - "name": "Claude 3.5 Sonnet", - "attachment": true, + "qwen3-coder-flash": { + "id": "qwen3-coder-flash", + "name": "Qwen3 Coder Flash", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, - "release_date": "2025-08-26", - "last_updated": "2025-08-26", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.992, "output": 14.994 }, - "limit": { "context": 200000, "input": 200000, "output": 8192 } + "limit": { + "context": 1000000, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 1.5 + } }, - "gemini-exp-1206": { - "id": "gemini-exp-1206", - "name": "Gemini 2.0 Pro 1206", + "grok-4-3": { + "id": "grok-4-3", + "name": "Grok 4.3", + "family": "grok", "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-05-01", + "last_updated": "2026-05-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.258, "output": 4.998 }, - "limit": { "context": 2097152, "input": 2097152, "output": 8192 } + "limit": { + "context": 1000000, + "output": 30000 + }, + "cost": { + "input": 1.25, + "output": 2.5, + "cache_read": 0.2, + "context_over_200k": { + "input": 2.5, + "output": 5, + "cache_read": 0.4 + }, + "tiers": [ + { + "input": 2.5, + "output": 5, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ] + } }, - "doubao-seed-2-0-lite-260215": { - "id": "doubao-seed-2-0-lite-260215", - "name": "Doubao Seed 2.0 Lite", + "glm-4.5v": { + "id": "glm-4.5v", + "name": "GLM-4.5V", + "family": "glm", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-08-11", + "last_updated": "2025-08-11", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 64000, + "output": 16384 + }, + "cost": { + "input": 0.6, + "output": 1.8 + } + }, + "deepseek-v4-flash": { + "id": "deepseek-v4-flash", + "name": "DeepSeek V4 Flash", + "family": "deepseek-flash", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2026-02-14", - "last_updated": "2026-02-14", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1462, "output": 0.8738 }, - "limit": { "context": 256000, "input": 256000, "output": 32000 } + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 384000 + }, + "cost": { + "input": 0.14, + "output": 0.28, + "cache_read": 0.028 + } }, - "jamba-large": { - "id": "jamba-large", - "name": "Jamba Large", + "grok-4": { + "id": "grok-4", + "name": "Grok 4", + "family": "grok", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-07", "release_date": "2025-07-09", "last_updated": "2025-07-09", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.989, "output": 7.99 }, - "limit": { "context": 256000, "input": 256000, "output": 4096 } + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "reasoning": 15, + "cache_read": 0.75 + } }, - "hunyuan-turbos-20250226": { - "id": "hunyuan-turbos-20250226", - "name": "Hunyuan Turbo S", + "qwen3-next-80b-a3b-instruct": { + "id": "qwen3-next-80b-a3b-instruct", + "name": "Qwen3-Next 80B-A3B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-02-27", - "last_updated": "2025-02-27", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.187, "output": 0.374 }, - "limit": { "context": 24000, "input": 24000, "output": 8192 } + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-09", + "last_updated": "2025-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.5, + "output": 2 + } }, - "ernie-4.5-turbo-vl-32k": { - "id": "ernie-4.5-turbo-vl-32k", - "name": "Ernie 4.5 Turbo VL 32k", + "gpt-4": { + "id": "gpt-4", + "name": "GPT-4", + "family": "gpt", "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, "structured_output": false, - "release_date": "2025-05-08", - "last_updated": "2025-05-08", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2023-11", + "release_date": "2023-11-06", + "last_updated": "2024-04-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 30, + "output": 60 + } + }, + "glm-4.6": { + "id": "glm-4.6", + "name": "GLM-4.6", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 2.2, + "cache_read": 0.11, + "cache_write": 0 + } + }, + "kimi-k2.6": { + "id": "kimi-k2.6", + "name": "Kimi K2.6", + "family": "kimi-k2.6", + "attachment": true, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.95, + "output": 4, + "cache_read": 0.16 + } + }, + "glm-4.6v": { + "id": "glm-4.6v", + "name": "GLM-4.6V", + "family": "glm", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-12-08", + "last_updated": "2025-12-08", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.3, + "output": 0.9 + } + }, + "claude-opus-4-1-20250805": { + "id": "claude-opus-4-1-20250805", + "name": "Claude Opus 4.1", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } + }, + "gpt-5.4": { + "id": "gpt-5.4", + "name": "GPT-5.4", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 2.5, + "output": 15, + "cache_read": 0.25 + } + }, + "claude-haiku-4-5-20251001": { + "id": "claude-haiku-4-5-20251001", + "name": "Claude Haiku 4.5", + "family": "claude-haiku", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.495, "output": 1.43 }, - "limit": { "context": 32000, "input": 32000, "output": 16384 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } }, - "grok-3-mini-beta": { - "id": "grok-3-mini-beta", - "name": "Grok 3 Mini Beta", + "glm-4.5-flash": { + "id": "glm-4.5-flash", + "name": "GLM-4.5-Flash", + "family": "glm-flash", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 0.5 }, - "limit": { "context": 131072, "input": 131072, "output": 131072 } + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 98304 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "qwen3-30b-a3b-instruct-2507": { - "id": "qwen3-30b-a3b-instruct-2507", - "name": "Qwen3 30B A3B Instruct 2507", + "qwen3-vl-plus": { + "id": "qwen3-vl-plus", + "name": "Qwen3-VL Plus", + "family": "qwen", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-02-20", - "last_updated": "2025-02-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-09-23", + "last_updated": "2025-09-23", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5 }, - "limit": { "context": 256000, "input": 256000, "output": 32768 } + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0.2, + "output": 1.6, + "reasoning": 4.8 + } }, - "Llama-3.3-70B-Argunaut-1-SFT": { - "id": "Llama-3.3-70B-Argunaut-1-SFT", - "name": "Llama 3.3 70B Argunaut 1 SFT", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "grok-4-1-fast": { + "id": "grok-4-1-fast", + "name": "Grok 4.1 Fast", + "family": "grok", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-07", + "release_date": "2025-11-19", + "last_updated": "2025-11-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } }, - "abacusai/Dracarys-72B-Instruct": { - "id": "abacusai/Dracarys-72B-Instruct", - "name": "Llama 3.1 70B Dracarys 2", - "family": "llama", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-08-02", - "last_updated": "2025-08-02", - "modalities": { "input": ["text"], "output": ["text"] }, + "claude-sonnet-4-20250514": { + "id": "claude-sonnet-4-20250514", + "name": "Claude Sonnet 4", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.49299999999999994, "output": 0.49299999999999994 }, - "limit": { "context": 16384, "input": 16384, "output": 8192 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "THUDM/GLM-Z1-32B-0414": { - "id": "THUDM/GLM-Z1-32B-0414", - "name": "GLM Z1 32B 0414", - "family": "glm-z", + "qwen3-coder-480b-a35b-instruct": { + "id": "qwen3-coder-480b-a35b-instruct", + "name": "Qwen3-Coder 480B-A35B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-04-15", - "last_updated": "2025-04-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 1.5, + "output": 7.5 + } + }, + "claude-opus-4-6": { + "id": "claude-opus-4-6", + "name": "Claude Opus 4.6", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 128000, "input": 128000, "output": 65536 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "THUDM/GLM-Z1-9B-0414": { - "id": "THUDM/GLM-Z1-9B-0414", - "name": "GLM Z1 9B 0414", - "family": "glm-z", + "deepseek-v4-pro": { + "id": "deepseek-v4-pro", + "name": "DeepSeek V4 Pro", + "family": "deepseek-thinking", "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 384000 + }, + "cost": { + "input": 1.74, + "output": 3.48, + "cache_read": 0.145 + } + }, + "gpt-4.1-nano": { + "id": "gpt-4.1-nano", + "name": "GPT-4.1 nano", + "family": "gpt-nano", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-04", "release_date": "2025-04-14", "last_updated": "2025-04-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 32000, "input": 32000, "output": 8000 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.03 + } }, - "THUDM/GLM-4-32B-0414": { - "id": "THUDM/GLM-4-32B-0414", - "name": "GLM 4 32B 0414", - "family": "glm", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "claude-3-7-sonnet-20250219": { + "id": "claude-3-7-sonnet-20250219", + "name": "Claude Sonnet 3.7", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10-31", + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 128000, "input": 128000, "output": 65536 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "THUDM/GLM-Z1-Rumination-32B-0414": { - "id": "THUDM/GLM-Z1-Rumination-32B-0414", - "name": "GLM Z1 Rumination 32B 0414", - "family": "glm-z", + "qwen3-coder-30b-a3b-instruct": { + "id": "qwen3-coder-30b-a3b-instruct", + "name": "Qwen3-Coder 30B-A3B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-04-15", - "last_updated": "2025-04-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 32000, "input": 32000, "output": 65536 } + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.45, + "output": 2.25 + } }, - "THUDM/GLM-4-9B-0414": { - "id": "THUDM/GLM-4-9B-0414", - "name": "GLM 4 9B 0414", - "family": "glm", + "minimax-m2.5": { + "id": "minimax-m2.5", + "name": "MiniMax-M2.5", + "family": "minimax", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 32000, "input": 32000, "output": 8000 } + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.03, + "cache_write": 0.375 + } }, - "unsloth/gemma-3-1b-it": { - "id": "unsloth/gemma-3-1b-it", - "name": "Gemma 3 1B IT", - "family": "unsloth", + "mimo-v2-pro": { + "id": "mimo-v2-pro", + "name": "MiMo-V2-Pro", + "family": "mimo", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-03-10", - "last_updated": "2025-03-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1003, "output": 0.1003 }, - "limit": { "context": 128000, "input": 128000, "output": 8192 } + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 1, + "output": 3, + "cache_read": 0.2, + "context_over_200k": { + "input": 2, + "output": 6, + "cache_read": 0.4 + }, + "tiers": [ + { + "input": 2, + "output": 6, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 256000 + } + } + ] + } }, - "unsloth/gemma-3-27b-it": { - "id": "unsloth/gemma-3-27b-it", - "name": "Gemma 3 27B IT", - "family": "unsloth", + "o3": { + "id": "o3", + "name": "o3", + "family": "o", "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-03-10", - "last_updated": "2025-03-10", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2992, "output": 0.2992 }, - "limit": { "context": 128000, "input": 128000, "output": 96000 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } }, - "unsloth/gemma-3-4b-it": { - "id": "unsloth/gemma-3-4b-it", - "name": "Gemma 3 4B IT", - "family": "unsloth", + "gpt-5-pro": { + "id": "gpt-5-pro", + "name": "GPT-5 Pro", + "family": "gpt-pro", "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-03-10", - "last_updated": "2025-03-10", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-10-06", + "last_updated": "2025-10-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2006, "output": 0.2006 }, - "limit": { "context": 128000, "input": 128000, "output": 8192 } + "limit": { + "context": 400000, + "input": 272000, + "output": 272000 + }, + "cost": { + "input": 15, + "output": 120 + } }, - "unsloth/gemma-3-12b-it": { - "id": "unsloth/gemma-3-12b-it", - "name": "Gemma 3 12B IT", - "family": "unsloth", + "gpt-4o": { + "id": "gpt-4o", + "name": "GPT-4o", + "family": "gpt", "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-03-10", - "last_updated": "2025-03-10", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2023-09", + "release_date": "2024-05-13", + "last_updated": "2024-08-06", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.272, "output": 0.272 }, - "limit": { "context": 128000, "input": 128000, "output": 131072 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 10, + "cache_read": 1.25 + } }, - "shisa-ai/shisa-v2-llama3.3-70b": { - "id": "shisa-ai/shisa-v2-llama3.3-70b", - "name": "Shisa V2 Llama 3.3 70B", - "family": "llama", + "minimax-m2.5-highspeed": { + "id": "minimax-m2.5-highspeed", + "name": "MiniMax-M2.5-highspeed", + "family": "minimax", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-26", - "last_updated": "2025-07-26", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.5, "output": 0.5 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-02-13", + "last_updated": "2026-02-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 2.4, + "cache_read": 0.06, + "cache_write": 0.375 + } }, - "shisa-ai/shisa-v2.1-llama3.3-70b": { - "id": "shisa-ai/shisa-v2.1-llama3.3-70b", - "name": "Shisa V2.1 Llama 3.3 70B", - "family": "llama", + "qwen-turbo": { + "id": "qwen-turbo", + "name": "Qwen Turbo", + "family": "qwen", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2024-11-01", + "last_updated": "2025-04-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 0.5 }, - "limit": { "context": 32768, "input": 32768, "output": 4096 } + "limit": { + "context": 1000000, + "output": 16384 + }, + "cost": { + "input": 0.05, + "output": 0.2, + "reasoning": 0.5 + } }, - "openai/gpt-5.2-codex": { - "id": "openai/gpt-5.2-codex", - "name": "GPT 5.2 Codex", - "family": "gpt-codex", + "claude-sonnet-4-5": { + "id": "claude-sonnet-4-5", + "name": "Claude Sonnet 4.5 (latest)", + "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2026-01-14", - "last_updated": "2026-01-14", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14 }, - "limit": { "context": 400000, "input": 400000, "output": 128000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "openai/o1-pro": { - "id": "openai/o1-pro", - "name": "OpenAI o1 Pro", - "family": "o-pro", + "gemini-2.5-flash-lite": { + "id": "gemini-2.5-flash-lite", + "name": "Gemini 2.5 Flash Lite", + "family": "gemini-flash-lite", "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-01-25", - "last_updated": "2025-01-25", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 150, "output": 600 }, - "limit": { "context": 200000, "input": 200000, "output": 100000 } - }, - "openai/o3-mini-low": { - "id": "openai/o3-mini-low", - "name": "OpenAI o3-mini (Low)", - "family": "o-mini", - "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-01-31", - "last_updated": "2025-01-31", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 9.996, "output": 19.992 }, - "limit": { "context": 200000, "input": 200000, "output": 100000 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.01, + "input_audio": 0.3 + } }, - "openai/gpt-5.1-codex-mini": { - "id": "openai/gpt-5.1-codex-mini", - "name": "GPT 5.1 Codex Mini", - "family": "gpt-codex-mini", + "gpt-5": { + "id": "gpt-5", + "name": "GPT-5", + "family": "gpt", "attachment": true, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2 }, - "limit": { "context": 400000, "input": 400000, "output": 128000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "openai/o3-mini": { - "id": "openai/o3-mini", - "name": "OpenAI o3-mini", - "family": "o-mini", + "glm-4.7-flash": { + "id": "glm-4.7-flash", + "name": "GLM-4.7-Flash", + "family": "glm-flash", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2025-01-31", - "last_updated": "2025-01-31", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2026-01-19", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + }, + "mimo-v2-flash": { + "id": "mimo-v2-flash", + "name": "MiMo-V2-Flash", + "family": "mimo", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2024-12-01", + "release_date": "2025-12-16", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.3, + "cache_read": 0.01 + } + }, + "qwen3.6-max-preview": { + "id": "qwen3.6-max-preview", + "name": "Qwen3.6 Max Preview", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2026-04-20", + "last_updated": "2026-04-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4 }, - "limit": { "context": 200000, "input": 200000, "output": 100000 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 1.3, + "output": 7.8, + "cache_read": 0.13, + "cache_write": 1.625 + } }, - "openai/gpt-5-pro": { - "id": "openai/gpt-5-pro", - "name": "GPT 5 Pro", - "family": "gpt-pro", + "gpt-5-chat-latest": { + "id": "gpt-5-chat-latest", + "name": "GPT-5 Chat (latest)", + "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": false, - "structured_output": false, + "structured_output": true, + "temperature": true, + "knowledge": "2024-09-30", "release_date": "2025-08-07", "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 120 }, - "limit": { "context": 400000, "input": 400000, "output": 128000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10 + } }, - "openai/gpt-5": { - "id": "openai/gpt-5", - "name": "GPT 5", - "family": "gpt", + "claude-opus-4-20250514": { + "id": "claude-opus-4-20250514", + "name": "Claude Opus 4", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 400000, "input": 400000, "output": 128000 } + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "openai/chatgpt-4o-latest": { - "id": "openai/chatgpt-4o-latest", - "name": "ChatGPT 4o", - "family": "gpt", - "attachment": true, + "qwen2-5-vl-72b-instruct": { + "id": "qwen2-5-vl-72b-instruct", + "name": "Qwen2.5-VL 72B Instruct", + "family": "qwen", + "attachment": false, "reasoning": false, "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2024-09", + "last_updated": "2024-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 2.8, + "output": 8.4 + } + }, + "gpt-5.5-pro": { + "id": "gpt-5.5-pro", + "name": "GPT-5.5 Pro", + "family": "gpt-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, "structured_output": true, - "release_date": "2024-05-13", - "last_updated": "2024-05-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-12-01", + "release_date": "2026-04-23", + "last_updated": "2026-04-23", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 4.998, "output": 14.993999999999998 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 30, + "output": 180, + "context_over_200k": { + "input": 60, + "output": 270 + }, + "tiers": [ + { + "input": 60, + "output": 270, + "tier": { + "type": "context", + "size": 272000 + } + } + ] + } }, - "openai/gpt-4-turbo": { - "id": "openai/gpt-4-turbo", - "name": "GPT-4 Turbo", + "gpt-4.1": { + "id": "gpt-4.1", + "name": "GPT-4.1", "family": "gpt", "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2023-11-06", - "last_updated": "2024-01-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 10, "output": 30 }, - "limit": { "context": 128000, "input": 128000, "output": 4096 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } }, - "openai/gpt-4o": { - "id": "openai/gpt-4o", - "name": "GPT-4o", - "family": "gpt", - "attachment": true, + "devstral-small-2507": { + "id": "devstral-small-2507", + "name": "Devstral Small", + "family": "devstral", + "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-05-13", - "last_updated": "2024-05-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.499, "output": 9.996 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2025-07-10", + "last_updated": "2025-07-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.1, + "output": 0.3 + } }, - "openai/o3-mini-high": { - "id": "openai/o3-mini-high", - "name": "OpenAI o3-mini (High)", - "family": "o-mini", + "kimi-k2-thinking": { + "id": "kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "family": "kimi-thinking", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2025-01-31", - "last_updated": "2025-01-31", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.64, "output": 2.588 }, - "limit": { "context": 200000, "input": 200000, "output": 100000 } + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 2.5, + "cache_read": 0.15 + } }, - "openai/gpt-5-mini": { - "id": "openai/gpt-5-mini", - "name": "GPT 5 Mini", - "family": "gpt-mini", + "gemini-2.0-flash-lite": { + "id": "gemini-2.0-flash-lite", + "name": "Gemini 2.0 Flash Lite", + "family": "gemini-flash-lite", "attachment": true, - "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 2 }, - "limit": { "context": 400000, "input": 400000, "output": 128000 } - }, - "openai/gpt-4-turbo-preview": { - "id": "openai/gpt-4-turbo-preview", - "name": "GPT-4 Turbo Preview", - "family": "gpt", - "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2023-11-06", - "last_updated": "2024-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-06", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 9.996, "output": 30.004999999999995 }, - "limit": { "context": 128000, "input": 128000, "output": 4096 } + "limit": { + "context": 1048576, + "output": 8192 + }, + "cost": { + "input": 0.075, + "output": 0.3 + } }, - "openai/gpt-4o-mini": { - "id": "openai/gpt-4o-mini", - "name": "GPT-4o mini", + "gpt-4.1-mini": { + "id": "gpt-4.1-mini", + "name": "GPT-4.1 mini", "family": "gpt-mini", "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-07-18", - "last_updated": "2024-07-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1496, "output": 0.595 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.4, + "output": 1.6, + "cache_read": 0.1 + } }, - "openai/gpt-5.1-codex-max": { - "id": "openai/gpt-5.1-codex-max", - "name": "GPT 5.1 Codex Max", + "gpt-5.1-codex": { + "id": "gpt-5.1-codex", + "name": "GPT-5.1 Codex", "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", "release_date": "2025-11-13", "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 20 }, - "limit": { "context": 400000, "input": 400000, "output": 128000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "openai/gpt-4.1": { - "id": "openai/gpt-4.1", - "name": "GPT 4.1", - "family": "gpt", - "attachment": true, + "grok-3": { + "id": "grok-3", + "name": "Grok 3", + "family": "grok", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, - "release_date": "2025-09-10", - "last_updated": "2025-09-10", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8 }, - "limit": { "context": 1047576, "input": 1047576, "output": 32768 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.75 + } }, - "openai/gpt-5.1-chat-latest": { - "id": "openai/gpt-5.1-chat-latest", - "name": "GPT 5.1 Chat (Latest)", - "family": "gpt", + "grok-4-fast-non-reasoning": { + "id": "grok-4-fast-non-reasoning", + "name": "Grok 4 Fast (Non-Reasoning)", + "family": "grok", "attachment": true, - "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 400000, "input": 400000, "output": 16384 } - }, - "openai/gpt-3.5-turbo": { - "id": "openai/gpt-3.5-turbo", - "name": "GPT-3.5 Turbo", - "family": "gpt", - "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2022-11-30", - "last_updated": "2024-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.5, "output": 1.5 }, - "limit": { "context": 16385, "input": 16385, "output": 4096 } - }, - "openai/gpt-oss-120b": { - "id": "openai/gpt-oss-120b", - "name": "GPT OSS 120B", - "family": "gpt-oss", - "attachment": false, - "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-07", + "release_date": "2025-09-19", + "last_updated": "2025-09-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.05, "output": 0.25 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } }, - "openai/gpt-5.1-chat": { - "id": "openai/gpt-5.1-chat", - "name": "GPT 5.1 Chat", - "family": "gpt", + "sonar-reasoning-pro": { + "id": "sonar-reasoning-pro", + "name": "Sonar Reasoning Pro", + "family": "sonar-reasoning", "attachment": true, "reasoning": true, "tool_call": false, - "structured_output": false, - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 400000, "input": 400000, "output": 128000 } - }, - "openai/o1": { - "id": "openai/o1", - "name": "OpenAI o1", - "family": "o", - "attachment": false, - "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-17", - "last_updated": "2024-12-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 14.993999999999998, "output": 59.993 }, - "limit": { "context": 200000, "input": 200000, "output": 100000 } - }, - "openai/o3": { - "id": "openai/o3", - "name": "OpenAI o3", - "family": "o", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-09-01", + "release_date": "2024-01-01", + "last_updated": "2025-09-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 8 }, - "limit": { "context": 200000, "input": 200000, "output": 100000 } - }, - "openai/gpt-4o-search-preview": { - "id": "openai/gpt-4o-search-preview", - "name": "GPT-4o Search Preview", - "family": "gpt", + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 2, + "output": 8 + } + } + } + }, + "google-vertex": { + "id": "google-vertex", + "env": ["GOOGLE_VERTEX_PROJECT", "GOOGLE_VERTEX_LOCATION", "GOOGLE_APPLICATION_CREDENTIALS"], + "npm": "@ai-sdk/google-vertex", + "name": "Vertex", + "doc": "https://cloud.google.com/vertex-ai/generative-ai/docs/models", + "models": { + "gemini-2.0-flash": { + "id": "gemini-2.0-flash", + "name": "Gemini 2.0 Flash", + "family": "gemini-flash", "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-05-13", - "last_updated": "2024-05-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2024-06", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.47, "output": 5.88 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "limit": { + "context": 1048576, + "output": 8192 + }, + "cost": { + "input": 0.15, + "output": 0.6, + "cache_read": 0.025 + } }, - "openai/o4-mini-high": { - "id": "openai/o4-mini-high", - "name": "OpenAI o4-mini high", - "family": "o-mini", - "attachment": false, + "gemini-3-pro-preview": { + "id": "gemini-3-pro-preview", + "name": "Gemini 3 Pro Preview", + "family": "gemini-pro", + "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.1, "output": 4.4 }, - "limit": { "context": 200000, "input": 200000, "output": 100000 } - }, - "openai/gpt-4o-2024-11-20": { - "id": "openai/gpt-4o-2024-11-20", - "name": "GPT-4o (2024-11-20)", - "family": "gpt", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-11-20", - "last_updated": "2024-11-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-11-18", + "last_updated": "2025-11-18", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2, + "tiers": [ + { + "input": 4, + "output": 18, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 4, + "output": 18, + "cache_read": 0.4 + } + } }, - "openai/gpt-5.2-chat": { - "id": "openai/gpt-5.2-chat", - "name": "GPT 5.2 Chat", - "family": "gpt", + "gemini-flash-latest": { + "id": "gemini-flash-latest", + "name": "Gemini Flash Latest", + "family": "gemini-flash", "attachment": true, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2026-01-01", - "last_updated": "2026-01-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14 }, - "limit": { "context": 400000, "input": 400000, "output": 16384 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.075, + "cache_write": 0.383 + } }, - "openai/gpt-5.2": { - "id": "openai/gpt-5.2", - "name": "GPT 5.2", - "family": "gpt", + "gemini-2.5-flash-lite-preview-06-17": { + "id": "gemini-2.5-flash-lite-preview-06-17", + "name": "Gemini 2.5 Flash Lite Preview 06-17", + "family": "gemini-flash-lite", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2026-01-01", - "last_updated": "2026-01-01", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14 }, - "limit": { "context": 400000, "input": 400000, "output": 128000 } + "limit": { + "context": 65536, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.025 + } }, - "openai/o4-mini-deep-research": { - "id": "openai/o4-mini-deep-research", - "name": "OpenAI o4-mini Deep Research", - "family": "o-mini", - "attachment": false, + "gemini-2.5-flash": { + "id": "gemini-2.5-flash", + "name": "Gemini 2.5 Flash", + "family": "gemini-flash", + "attachment": true, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 9.996, "output": 19.992 }, - "limit": { "context": 200000, "input": 200000, "output": 100000 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.075, + "cache_write": 0.383 + } }, - "openai/gpt-5.1": { - "id": "openai/gpt-5.1", - "name": "GPT 5.1", - "family": "gpt", + "gemini-2.5-flash-preview-09-2025": { + "id": "gemini-2.5-flash-preview-09-2025", + "name": "Gemini 2.5 Flash Preview 09-25", + "family": "gemini-flash", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 400000, "input": 400000, "output": 128000 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.075, + "cache_write": 0.383 + } }, - "openai/gpt-4o-mini-search-preview": { - "id": "openai/gpt-4o-mini-search-preview", - "name": "GPT-4o mini Search Preview", - "family": "gpt-mini", + "zai-org/glm-5-maas": { + "id": "zai-org/glm-5-maas", + "name": "GLM-5", + "family": "glm", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-07-18", - "last_updated": "2024-07-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.088, "output": 0.35 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } - }, - "openai/gpt-4.1-mini": { - "id": "openai/gpt-4.1-mini", - "name": "GPT 4.1 Mini", - "family": "gpt-mini", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.4, "output": 1.6 }, - "limit": { "context": 1047576, "input": 1047576, "output": 32768 } - }, - "openai/o3-pro-2025-06-10": { - "id": "openai/o3-pro-2025-06-10", - "name": "OpenAI o3-pro (2025-06-10)", - "family": "o-pro", + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202752, + "output": 131072 + }, + "provider": { + "npm": "@ai-sdk/openai-compatible", + "api": "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" + }, + "cost": { + "input": 1, + "output": 3.2, + "cache_read": 0.1 + } + }, + "zai-org/glm-4.7-maas": { + "id": "zai-org/glm-4.7-maas", + "name": "GLM-4.7", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, - "release_date": "2025-06-10", - "last_updated": "2025-06-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 9.996, "output": 19.992 }, - "limit": { "context": 200000, "input": 200000, "output": 100000 } + "temperature": true, + "knowledge": "2025-04", + "release_date": "2026-01-06", + "last_updated": "2026-01-06", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 200000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/openai-compatible", + "api": "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" + }, + "cost": { + "input": 0.6, + "output": 2.2 + } }, - "openai/gpt-5-chat-latest": { - "id": "openai/gpt-5-chat-latest", - "name": "GPT 5 Chat", - "family": "gpt", - "attachment": true, + "deepseek-ai/deepseek-v3.2-maas": { + "id": "deepseek-ai/deepseek-v3.2-maas", + "name": "DeepSeek V3.2", + "family": "deepseek", + "attachment": false, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 400000, "input": 400000, "output": 128000 } + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-12-17", + "last_updated": "2026-04-04", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 163840, + "output": 65536 + }, + "provider": { + "npm": "@ai-sdk/openai-compatible", + "api": "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" + }, + "cost": { + "input": 0.56, + "output": 1.68, + "cache_read": 0.056 + } }, - "openai/gpt-5-nano": { - "id": "openai/gpt-5-nano", - "name": "GPT 5 Nano", - "family": "gpt-nano", - "attachment": true, + "deepseek-ai/deepseek-v3.1-maas": { + "id": "deepseek-ai/deepseek-v3.1-maas", + "name": "DeepSeek V3.1", + "family": "deepseek", + "attachment": false, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.05, "output": 0.4 }, - "limit": { "context": 400000, "input": 400000, "output": 128000 } + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-08-28", + "last_updated": "2025-08-28", + "modalities": { + "input": ["text", "pdf"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 163840, + "output": 32768 + }, + "provider": { + "npm": "@ai-sdk/openai-compatible", + "api": "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" + }, + "cost": { + "input": 0.6, + "output": 1.7 + } }, - "openai/gpt-oss-safeguard-20b": { - "id": "openai/gpt-oss-safeguard-20b", - "name": "GPT OSS Safeguard 20B", + "openai/gpt-oss-120b-maas": { + "id": "openai/gpt-oss-120b-maas", + "name": "GPT OSS 120B", "family": "gpt-oss", "attachment": false, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-10-29", - "last_updated": "2025-10-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.075, "output": 0.3 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "tool_call": true, + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.09, + "output": 0.36 + } }, - "openai/gpt-oss-20b": { - "id": "openai/gpt-oss-20b", + "openai/gpt-oss-20b-maas": { + "id": "openai/gpt-oss-20b-maas", "name": "GPT OSS 20B", "family": "gpt-oss", "attachment": false, "reasoning": true, - "tool_call": false, - "structured_output": false, + "tool_call": true, + "temperature": true, "release_date": "2025-08-05", "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.04, "output": 0.15 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.07, + "output": 0.25 + } }, - "openai/gpt-5.1-2025-11-13": { - "id": "openai/gpt-5.1-2025-11-13", - "name": "GPT-5.1 (2025-11-13)", - "family": "gpt", + "meta/llama-3.3-70b-instruct-maas": { + "id": "meta/llama-3.3-70b-instruct-maas", + "name": "Llama 3.3 70B Instruct", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 1000000, "input": 1000000, "output": 32768 } - }, - "openai/gpt-4o-2024-08-06": { - "id": "openai/gpt-4o-2024-08-06", - "name": "GPT-4o (2024-08-06)", - "family": "gpt", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-08-06", - "last_updated": "2024-08-06", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.499, "output": 9.996 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2025-04-29", + "last_updated": "2025-04-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "provider": { + "npm": "@ai-sdk/openai-compatible", + "api": "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" + }, + "cost": { + "input": 0.72, + "output": 0.72 + } }, - "openai/gpt-4.1-nano": { - "id": "openai/gpt-4.1-nano", - "name": "GPT 4.1 Nano", - "family": "gpt-nano", + "meta/llama-4-maverick-17b-128e-instruct-maas": { + "id": "meta/llama-4-maverick-17b-128e-instruct-maas", + "name": "Llama 4 Maverick 17B 128E Instruct", + "family": "llama", "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4 }, - "limit": { "context": 1047576, "input": 1047576, "output": 32768 } + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-04-29", + "last_updated": "2025-04-29", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 524288, + "output": 8192 + }, + "provider": { + "npm": "@ai-sdk/openai-compatible", + "api": "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" + }, + "cost": { + "input": 0.35, + "output": 1.15 + } }, - "openai/o1-preview": { - "id": "openai/o1-preview", - "name": "OpenAI o1-preview", - "family": "o", + "qwen/qwen3-235b-a22b-instruct-2507-maas": { + "id": "qwen/qwen3-235b-a22b-instruct-2507-maas", + "name": "Qwen3 235B A22B Instruct", + "family": "qwen", "attachment": false, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2024-09-12", - "last_updated": "2024-09-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 14.993999999999998, "output": 59.993 }, - "limit": { "context": 128000, "input": 128000, "output": 32768 } - }, - "openai/gpt-5-codex": { - "id": "openai/gpt-5-codex", - "name": "GPT-5 Codex", - "family": "gpt-codex", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 9.996, "output": 19.992 }, - "limit": { "context": 256000, "input": 256000, "output": 32768 } + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-08-13", + "last_updated": "2025-08-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 16384 + }, + "provider": { + "npm": "@ai-sdk/openai-compatible", + "api": "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" + }, + "cost": { + "input": 0.22, + "output": 0.88 + } }, - "openai/o4-mini": { - "id": "openai/o4-mini", - "name": "OpenAI o4-mini", - "family": "o-mini", + "moonshotai/kimi-k2-thinking-maas": { + "id": "moonshotai/kimi-k2-thinking-maas", + "name": "Kimi K2 Thinking", + "family": "kimi-thinking", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "provider": { + "npm": "@ai-sdk/openai-compatible", + "api": "https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi" + }, + "cost": { + "input": 0.6, + "output": 2.5 + } + }, + "gemini-flash-lite-latest": { + "id": "gemini-flash-lite-latest", + "name": "Gemini Flash-Lite Latest", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4 }, - "limit": { "context": 200000, "input": 200000, "output": 100000 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.025 + } }, - "openai/o3-deep-research": { - "id": "openai/o3-deep-research", - "name": "OpenAI o3 Deep Research", - "family": "o", - "attachment": false, + "gemini-2.5-pro-preview-05-06": { + "id": "gemini-2.5-pro-preview-05-06", + "name": "Gemini 2.5 Pro Preview 05-06", + "family": "gemini-pro", + "attachment": true, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-05-06", + "last_updated": "2025-05-06", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 9.996, "output": 19.992 }, - "limit": { "context": 200000, "input": 200000, "output": 100000 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.31 + } }, - "openai/gpt-5.1-codex": { - "id": "openai/gpt-5.1-codex", - "name": "GPT 5.1 Codex", - "family": "gpt-codex", + "claude-haiku-4-5@20251001": { + "id": "claude-haiku-4-5@20251001", + "name": "Claude Haiku 4.5", + "family": "claude-haiku", "attachment": true, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 400000, "input": 400000, "output": 128000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/google-vertex/anthropic" + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } }, - "openai/gpt-5.2-pro": { - "id": "openai/gpt-5.2-pro", - "name": "GPT 5.2 Pro", - "family": "gpt-pro", + "gemini-3.1-pro-preview-customtools": { + "id": "gemini-3.1-pro-preview-customtools", + "name": "Gemini 3.1 Pro Preview Custom Tools", + "family": "gemini-pro", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2026-01-01", - "last_updated": "2026-01-01", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-02-19", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 21, "output": 168 }, - "limit": { "context": 400000, "input": 400000, "output": 128000 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2, + "context_over_200k": { + "input": 4, + "output": 18, + "cache_read": 0.4 + }, + "tiers": [ + { + "input": 4, + "output": 18, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ] + } }, - "CrucibleLab/L3.3-70B-Loki-V2.0": { - "id": "CrucibleLab/L3.3-70B-Loki-V2.0", - "name": "L3.3 70B Loki v2.0", - "family": "llama", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2026-01-22", - "last_updated": "2026-01-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "claude-sonnet-4-6@default": { + "id": "claude-sonnet-4-6@default", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.49299999999999994, "output": 0.49299999999999994 }, - "limit": { "context": 16384, "input": 16384, "output": 16384 } + "limit": { + "context": 200000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/google-vertex/anthropic" + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75, + "context_over_200k": { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5 + }, + "tiers": [ + { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ] + } }, - "microsoft/MAI-DS-R1-FP8": { - "id": "microsoft/MAI-DS-R1-FP8", - "name": "Microsoft DeepSeek R1", - "family": "deepseek", + "gemini-2.5-flash-lite-preview-09-2025": { + "id": "gemini-2.5-flash-lite-preview-09-2025", + "name": "Gemini 2.5 Flash Lite Preview 09-25", + "family": "gemini-flash-lite", "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", "release_date": "2025-09-25", "last_updated": "2025-09-25", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 0.3 }, - "limit": { "context": 128000, "input": 128000, "output": 8192 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.025 + } }, - "microsoft/wizardlm-2-8x22b": { - "id": "microsoft/wizardlm-2-8x22b", - "name": "WizardLM-2 8x22B", - "family": "gpt", + "claude-3-5-haiku@20241022": { + "id": "claude-3-5-haiku@20241022", + "name": "Claude Haiku 3.5", + "family": "claude-haiku", "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-04-15", - "last_updated": "2025-04-15", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07-31", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.49299999999999994, "output": 0.49299999999999994 }, - "limit": { "context": 65536, "input": 65536, "output": 8192 } + "limit": { + "context": 200000, + "output": 8192 + }, + "provider": { + "npm": "@ai-sdk/google-vertex/anthropic" + }, + "cost": { + "input": 0.8, + "output": 4, + "cache_read": 0.08, + "cache_write": 1 + } }, - "cohere/command-r-plus-08-2024": { - "id": "cohere/command-r-plus-08-2024", - "name": "Cohere: Command R+", - "family": "command-r", - "attachment": false, - "reasoning": false, + "gemini-3.1-flash-lite-preview": { + "id": "gemini-3.1-flash-lite-preview", + "name": "Gemini 3.1 Flash Lite Preview", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": true, "tool_call": true, - "structured_output": false, - "release_date": "2024-08-30", - "last_updated": "2024-08-30", - "modalities": { "input": ["text"], "output": ["text"] }, + "structured_output": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-03-03", + "last_updated": "2026-03-03", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.856, "output": 14.246 }, - "limit": { "context": 128000, "input": 128000, "output": 4096 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.25, + "output": 1.5, + "cache_read": 0.025, + "input_audio": 0.5 + } }, - "cohere/command-r": { - "id": "cohere/command-r", - "name": "Cohere: Command R", - "family": "command-r", - "attachment": false, + "claude-3-5-sonnet@20241022": { + "id": "claude-3-5-sonnet@20241022", + "name": "Claude Sonnet 3.5 v2", + "family": "claude-sonnet", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-03-11", - "last_updated": "2024-03-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04-30", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.476, "output": 1.428 }, - "limit": { "context": 128000, "input": 128000, "output": 4096 } + "limit": { + "context": 200000, + "output": 8192 + }, + "provider": { + "npm": "@ai-sdk/google-vertex/anthropic" + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "x-ai/grok-4-fast": { - "id": "x-ai/grok-4-fast", - "name": "Grok 4 Fast", - "family": "grok", + "gemini-3.1-pro-preview": { + "id": "gemini-3.1-pro-preview", + "name": "Gemini 3.1 Pro Preview", + "family": "gemini-pro", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-09-20", - "last_updated": "2025-09-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-02-19", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5 }, - "limit": { "context": 2000000, "input": 2000000, "output": 131072 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2, + "context_over_200k": { + "input": 4, + "output": 18, + "cache_read": 0.4 + }, + "tiers": [ + { + "input": 4, + "output": 18, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ] + } }, - "x-ai/grok-4-fast:thinking": { - "id": "x-ai/grok-4-fast:thinking", - "name": "Grok 4 Fast Thinking", - "family": "grok", + "claude-opus-4-1@20250805": { + "id": "claude-opus-4-1@20250805", + "name": "Claude Opus 4.1", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "provider": { + "npm": "@ai-sdk/google-vertex/anthropic" + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } + }, + "gemini-3-flash-preview": { + "id": "gemini-3-flash-preview", + "name": "Gemini 3 Flash Preview", + "family": "gemini-flash", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5 }, - "limit": { "context": 2000000, "input": 2000000, "output": 131072 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.05, + "input_audio": 1 + } }, - "x-ai/grok-4.1-fast": { - "id": "x-ai/grok-4.1-fast", - "name": "Grok 4.1 Fast", - "family": "grok", + "gemini-2.5-flash-preview-05-20": { + "id": "gemini-2.5-flash-preview-05-20", + "name": "Gemini 2.5 Flash Preview 05-20", + "family": "gemini-flash", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2025-11-20", - "last_updated": "2025-11-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-05-20", + "last_updated": "2025-05-20", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5 }, - "limit": { "context": 2000000, "input": 2000000, "output": 131072 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.15, + "output": 0.6, + "cache_read": 0.0375 + } }, - "x-ai/grok-code-fast-1": { - "id": "x-ai/grok-code-fast-1", - "name": "Grok Code Fast 1", - "family": "grok", + "gemini-embedding-001": { + "id": "gemini-embedding-001", + "name": "Gemini Embedding 001", + "family": "gemini", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-08-28", - "last_updated": "2025-08-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-05", + "release_date": "2025-05-20", + "last_updated": "2025-05-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 1.5 }, - "limit": { "context": 256000, "input": 256000, "output": 131072 } + "limit": { + "context": 2048, + "output": 3072 + }, + "cost": { + "input": 0.15, + "output": 0 + } }, - "x-ai/grok-4.1-fast-reasoning": { - "id": "x-ai/grok-4.1-fast-reasoning", - "name": "Grok 4.1 Fast Reasoning", - "family": "grok", + "gemini-2.5-pro": { + "id": "gemini-2.5-pro", + "name": "Gemini 2.5 Pro", + "family": "gemini-pro", "attachment": true, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-11-20", - "last_updated": "2025-11-20", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5 }, - "limit": { "context": 2000000, "input": 2000000, "output": 131072 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125, + "context_over_200k": { + "input": 2.5, + "output": 15, + "cache_read": 0.25 + }, + "tiers": [ + { + "input": 2.5, + "output": 15, + "cache_read": 0.25, + "tier": { + "type": "context", + "size": 200000 + } + } + ] + } }, - "x-ai/grok-4-07-09": { - "id": "x-ai/grok-4-07-09", - "name": "Grok 4", - "family": "grok", + "gemini-2.5-pro-preview-06-05": { + "id": "gemini-2.5-pro-preview-06-05", + "name": "Gemini 2.5 Pro Preview 06-05", + "family": "gemini-pro", "attachment": true, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-06-05", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 256000, "input": 256000, "output": 131072 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.31 + } }, - "anthropic/claude-opus-4.6:thinking:max": { - "id": "anthropic/claude-opus-4.6:thinking:max", - "name": "Claude 4.6 Opus Thinking Max", - "family": "claude-opus", + "claude-sonnet-4@20250514": { + "id": "claude-sonnet-4@20250514", + "name": "Claude Sonnet 4", + "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 4.998, "output": 25.007 }, - "limit": { "context": 1000000, "input": 1000000, "output": 128000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/google-vertex/anthropic" + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "anthropic/claude-opus-4.6": { - "id": "anthropic/claude-opus-4.6", - "name": "Claude 4.6 Opus", - "family": "claude-opus", + "gemini-3.1-flash-lite": { + "id": "gemini-3.1-flash-lite", + "name": "Gemini 3.1 Flash Lite", + "family": "gemini-flash-lite", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-05-07", + "last_updated": "2026-05-07", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 4.998, "output": 25.007 }, - "limit": { "context": 1000000, "input": 1000000, "output": 128000 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.25, + "output": 1.5, + "cache_read": 0.025, + "input_audio": 0.5 + } }, - "anthropic/claude-sonnet-4.6:thinking": { - "id": "anthropic/claude-sonnet-4.6:thinking", - "name": "Claude Sonnet 4.6 Thinking", + "claude-3-7-sonnet@20250219": { + "id": "claude-3-7-sonnet@20250219", + "name": "Claude Sonnet 3.7", "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2026-02-17", - "last_updated": "2026-02-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": true, + "knowledge": "2024-10-31", + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.992, "output": 14.993999999999998 }, - "limit": { "context": 1000000, "input": 1000000, "output": 128000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/google-vertex/anthropic" + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "anthropic/claude-opus-4.6:thinking:medium": { - "id": "anthropic/claude-opus-4.6:thinking:medium", - "name": "Claude 4.6 Opus Thinking Medium", + "claude-opus-4@20250514": { + "id": "claude-opus-4@20250514", + "name": "Claude Opus 4", "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 4.998, "output": 25.007 }, - "limit": { "context": 1000000, "input": 1000000, "output": 128000 } - }, - "anthropic/claude-sonnet-4.6": { - "id": "anthropic/claude-sonnet-4.6", - "name": "Claude Sonnet 4.6", - "family": "claude-sonnet", - "attachment": true, - "reasoning": false, - "tool_call": true, - "structured_output": true, - "release_date": "2026-02-17", - "last_updated": "2026-02-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.992, "output": 14.993999999999998 }, - "limit": { "context": 1000000, "input": 1000000, "output": 128000 } + "limit": { + "context": 200000, + "output": 32000 + }, + "provider": { + "npm": "@ai-sdk/google-vertex/anthropic" + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "anthropic/claude-opus-4.6:thinking": { - "id": "anthropic/claude-opus-4.6:thinking", - "name": "Claude 4.6 Opus Thinking", + "claude-opus-4-5@20251101": { + "id": "claude-opus-4-5@20251101", + "name": "Claude Opus 4.5", "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-11-01", + "last_updated": "2025-11-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 4.998, "output": 25.007 }, - "limit": { "context": 1000000, "input": 1000000, "output": 128000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/google-vertex/anthropic" + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "anthropic/claude-opus-4.6:thinking:low": { - "id": "anthropic/claude-opus-4.6:thinking:low", - "name": "Claude 4.6 Opus Thinking Low", - "family": "claude-opus", + "gemini-2.5-flash-preview-04-17": { + "id": "gemini-2.5-flash-preview-04-17", + "name": "Gemini 2.5 Flash Preview 04-17", + "family": "gemini-flash", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-04-17", + "last_updated": "2025-04-17", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 4.998, "output": 25.007 }, - "limit": { "context": 1000000, "input": 1000000, "output": 128000 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.15, + "output": 0.6, + "cache_read": 0.0375 + } }, - "raifle/sorcererlm-8x22b": { - "id": "raifle/sorcererlm-8x22b", - "name": "SorcererLM 8x22B", - "family": "mixtral", + "claude-sonnet-4-5@20250929": { + "id": "claude-sonnet-4-5@20250929", + "name": "Claude Sonnet 4.5", + "family": "claude-sonnet", "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 4.505, "output": 4.505 }, - "limit": { "context": 16000, "input": 16000, "output": 8192 } - }, - "nothingiisreal/L3.1-70B-Celeste-V0.1-BF16": { - "id": "nothingiisreal/L3.1-70B-Celeste-V0.1-BF16", - "name": "Llama 3.1 70B Celeste v0.1", - "family": "llama", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.49299999999999994, "output": 0.49299999999999994 }, - "limit": { "context": 16384, "input": 16384, "output": 16384 } - }, - "NousResearch 2/hermes-4-70b": { - "id": "NousResearch 2/hermes-4-70b", - "name": "Hermes 4 Medium", - "family": "nousresearch", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-03", - "last_updated": "2025-07-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2006, "output": 0.39949999999999997 }, - "limit": { "context": 128000, "input": 128000, "output": 8192 } - }, - "NousResearch 2/hermes-4-405b:thinking": { - "id": "NousResearch 2/hermes-4-405b:thinking", - "name": "Hermes 4 Large (Thinking)", - "family": "nousresearch", - "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 128000, "input": 128000, "output": 8192 } - }, - "NousResearch 2/hermes-3-llama-3.1-70b": { - "id": "NousResearch 2/hermes-3-llama-3.1-70b", - "name": "Hermes 3 70B", - "family": "nousresearch", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2026-01-07", - "last_updated": "2026-01-07", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.408, "output": 0.408 }, - "limit": { "context": 65536, "input": 65536, "output": 8192 } - }, - "NousResearch 2/Hermes-4-70B:thinking": { - "id": "NousResearch 2/Hermes-4-70B:thinking", - "name": "Hermes 4 (Thinking)", - "family": "nousresearch", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-09-17", - "last_updated": "2025-09-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2006, "output": 0.39949999999999997 }, - "limit": { "context": 128000, "input": 128000, "output": 8192 } + "limit": { + "context": 200000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/google-vertex/anthropic" + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "NousResearch 2/hermes-4-405b": { - "id": "NousResearch 2/hermes-4-405b", - "name": "Hermes 4 Large", - "family": "nousresearch", - "attachment": false, - "reasoning": false, + "gemini-2.5-flash-lite": { + "id": "gemini-2.5-flash-lite", + "name": "Gemini 2.5 Flash Lite", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2025-08-26", - "last_updated": "2025-08-26", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 128000, "input": 128000, "output": 8192 } - }, - "NousResearch 2/DeepHermes-3-Mistral-24B-Preview": { - "id": "NousResearch 2/DeepHermes-3-Mistral-24B-Preview", - "name": "DeepHermes-3 Mistral 24B (Preview)", - "family": "nousresearch", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-05-10", - "last_updated": "2025-05-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 0.3 }, - "limit": { "context": 128000, "input": 128000, "output": 32768 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.01, + "input_audio": 0.3 + } }, - "deepseek/deepseek-v3.2:thinking": { - "id": "deepseek/deepseek-v3.2:thinking", - "name": "DeepSeek V3.2 Thinking", - "family": "deepseek", + "claude-opus-4-6@default": { + "id": "claude-opus-4-6@default", + "name": "Claude Opus 4.6", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.27999999999999997, "output": 0.42000000000000004 }, - "limit": { "context": 163000, "input": 163000, "output": 65536 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/google-vertex/anthropic" + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25, + "context_over_200k": { + "input": 10, + "output": 37.5, + "cache_read": 1, + "cache_write": 12.5 + }, + "tiers": [ + { + "input": 10, + "output": 37.5, + "cache_read": 1, + "cache_write": 12.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ] + } }, - "deepseek/deepseek-prover-v2-671b": { - "id": "deepseek/deepseek-prover-v2-671b", - "name": "DeepSeek Prover v2 671B", - "family": "deepseek", - "attachment": false, + "gemini-2.0-flash-lite": { + "id": "gemini-2.0-flash-lite", + "name": "Gemini 2.0 Flash Lite", + "family": "gemini-flash-lite", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-04-30", - "last_updated": "2025-04-30", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2024-06", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 2.5 }, - "limit": { "context": 160000, "input": 160000, "output": 16384 } + "limit": { + "context": 1048576, + "output": 8192 + }, + "cost": { + "input": 0.075, + "output": 0.3 + } }, - "deepseek/deepseek-v3.2-speciale": { - "id": "deepseek/deepseek-v3.2-speciale", - "name": "DeepSeek V3.2 Speciale", - "family": "deepseek", + "claude-opus-4-7@default": { + "id": "claude-opus-4-7@default", + "name": "Claude Opus 4.7", + "family": "claude-opus", "attachment": true, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-12-02", - "last_updated": "2025-12-02", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.27999999999999997, "output": 0.42000000000000004 }, - "limit": { "context": 163000, "input": 163000, "output": 65536 } - }, - "deepseek/deepseek-v3.2": { - "id": "deepseek/deepseek-v3.2", - "name": "DeepSeek V3.2", - "family": "deepseek", - "attachment": true, - "reasoning": false, "tool_call": true, - "structured_output": true, - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, + "temperature": false, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.27999999999999997, "output": 0.42000000000000004 }, - "limit": { "context": 163000, "input": 163000, "output": 65536 } - }, - "zai-org/glm-4.7-flash": { - "id": "zai-org/glm-4.7-flash", - "name": "GLM 4.7 Flash", + "limit": { + "context": 1000000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/google-vertex/anthropic" + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25, + "context_over_200k": { + "input": 10, + "output": 37.5, + "cache_read": 1, + "cache_write": 12.5 + }, + "tiers": [ + { + "input": 10, + "output": 37.5, + "cache_read": 1, + "cache_write": 12.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ] + } + } + } + }, + "cloudflare-workers-ai": { + "id": "cloudflare-workers-ai", + "env": ["CLOUDFLARE_ACCOUNT_ID", "CLOUDFLARE_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.cloudflare.com/client/v4/accounts/${CLOUDFLARE_ACCOUNT_ID}/ai/v1", + "name": "Cloudflare Workers AI", + "doc": "https://developers.cloudflare.com/workers-ai/models/", + "models": { + "@cf/zai-org/glm-4.7-flash": { + "id": "@cf/zai-org/glm-4.7-flash", + "name": "GLM-4.7-Flash", "family": "glm-flash", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, + "temperature": true, + "knowledge": "2025-04", "release_date": "2026-01-19", "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.06, + "output": 0.4 + } + }, + "@cf/nvidia/nemotron-3-120b-a12b": { + "id": "@cf/nvidia/nemotron-3-120b-a12b", + "name": "Nemotron 3 Super 120B", + "family": "nemotron", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "release_date": "2026-03-11", + "last_updated": "2026-03-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.07, "output": 0.4 }, - "limit": { "context": 200000, "input": 200000, "output": 128000 } + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.5, + "output": 1.5 + } }, - "zai-org/glm-5.1:thinking": { - "id": "zai-org/glm-5.1:thinking", - "name": "GLM 5.1 Thinking", - "family": "glm", + "@cf/openai/gpt-oss-20b": { + "id": "@cf/openai/gpt-oss-20b", + "name": "GPT OSS 20B", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2026-03-27", - "last_updated": "2026-03-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 2.55 }, - "limit": { "context": 200000, "input": 200000, "output": 131072 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.2, + "output": 0.3 + } }, - "zai-org/glm-5:thinking": { - "id": "zai-org/glm-5:thinking", - "name": "GLM 5 Thinking", - "family": "glm", + "@cf/openai/gpt-oss-120b": { + "id": "@cf/openai/gpt-oss-120b", + "name": "GPT OSS 120B", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.35, + "output": 0.75 + } + }, + "@cf/meta/llama-4-scout-17b-16e-instruct": { + "id": "@cf/meta/llama-4-scout-17b-16e-instruct", + "name": "Llama 4 Scout 17B 16E Instruct", + "family": "llama", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 2.55 }, - "limit": { "context": 200000, "input": 200000, "output": 128000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.27, + "output": 0.85 + } }, - "zai-org/glm-5": { - "id": "zai-org/glm-5", - "name": "GLM 5", - "family": "glm", - "attachment": false, + "@cf/google/gemma-4-26b-a4b-it": { + "id": "@cf/google/gemma-4-26b-a4b-it", + "name": "Gemma 4 26B A4B IT", + "family": "gemma", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "release_date": "2025-12-15", + "last_updated": "2025-12-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 2.55 }, - "limit": { "context": 200000, "input": 200000, "output": 128000 } + "limit": { + "context": 256000, + "output": 16384 + }, + "cost": { + "input": 0.1, + "output": 0.3 + } }, - "zai-org/glm-5.1": { - "id": "zai-org/glm-5.1", - "name": "GLM 5.1", - "family": "glm", - "attachment": false, + "@cf/moonshotai/kimi-k2.5": { + "id": "@cf/moonshotai/kimi-k2.5", + "name": "Kimi K2.5", + "family": "kimi", + "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, - "release_date": "2026-03-27", - "last_updated": "2026-03-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 2.55 }, - "limit": { "context": 200000, "input": 200000, "output": 131072 } + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.6, + "output": 3, + "cache_read": 0.1 + } }, - "zai-org/glm-4.7": { - "id": "zai-org/glm-4.7", - "name": "GLM 4.7", - "family": "glm", - "attachment": false, + "@cf/moonshotai/kimi-k2.6": { + "id": "@cf/moonshotai/kimi-k2.6", + "name": "Kimi K2.6", + "family": "kimi", + "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, - "release_date": "2026-01-29", - "last_updated": "2026-01-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-04-20", + "last_updated": "2026-04-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.15, "output": 0.8 }, - "limit": { "context": 200000, "input": 200000, "output": 128000 } - }, - "NeverSleep/Llama-3-Lumimaid-70B-v0.1": { - "id": "NeverSleep/Llama-3-Lumimaid-70B-v0.1", - "name": "Lumimaid 70b", - "family": "llama", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-07-01", - "last_updated": "2024-07-01", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.006, "output": 2.006 }, - "limit": { "context": 16384, "input": 16384, "output": 8192 } - }, - "NeverSleep/Lumimaid-v0.2-70B": { - "id": "NeverSleep/Lumimaid-v0.2-70B", - "name": "Lumimaid v0.2", - "family": "llama", + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.95, + "output": 4, + "cache_read": 0.16 + } + } + } + }, + "groq": { + "id": "groq", + "env": ["GROQ_API_KEY"], + "npm": "@ai-sdk/groq", + "name": "Groq", + "doc": "https://console.groq.com/docs/models", + "models": { + "gemma2-9b-it": { + "id": "gemma2-9b-it", + "name": "Gemma 2 9B", + "family": "gemma", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-07-01", - "last_updated": "2024-07-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1, "output": 1.5 }, - "limit": { "context": 16384, "input": 16384, "output": 8192 } + "tool_call": true, + "temperature": true, + "knowledge": "2024-06", + "release_date": "2024-06-27", + "last_updated": "2024-06-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 8192 + }, + "status": "deprecated", + "cost": { + "input": 0.2, + "output": 0.2 + } }, - "nvidia/Llama-3.1-Nemotron-Ultra-253B-v1": { - "id": "nvidia/Llama-3.1-Nemotron-Ultra-253B-v1", - "name": "Nvidia Nemotron Ultra 253B", - "family": "nemotron", + "mistral-saba-24b": { + "id": "mistral-saba-24b", + "name": "Mistral Saba 24B", + "family": "mistral", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-03", - "last_updated": "2025-07-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-02-06", + "last_updated": "2025-02-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 0.8 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "limit": { + "context": 32768, + "output": 32768 + }, + "status": "deprecated", + "cost": { + "input": 0.79, + "output": 0.79 + } }, - "nvidia/nvidia-nemotron-nano-9b-v2": { - "id": "nvidia/nvidia-nemotron-nano-9b-v2", - "name": "Nvidia Nemotron Nano 9B v2", - "family": "nemotron", + "deepseek-r1-distill-llama-70b": { + "id": "deepseek-r1-distill-llama-70b", + "name": "DeepSeek R1 Distill Llama 70B", + "family": "deepseek-thinking", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-08-18", - "last_updated": "2025-08-18", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.17, "output": 0.68 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "status": "deprecated", + "cost": { + "input": 0.75, + "output": 0.99 + } }, - "nvidia/Llama-3_3-Nemotron-Super-49B-v1_5": { - "id": "nvidia/Llama-3_3-Nemotron-Super-49B-v1_5", - "name": "Nvidia Nemotron Super 49B v1.5", - "family": "nemotron", + "llama-guard-3-8b": { + "id": "llama-guard-3-8b", + "name": "Llama Guard 3 8B", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-08-08", - "last_updated": "2025-08-08", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.05, "output": 0.25 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "temperature": true, + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 8192 + }, + "status": "deprecated", + "cost": { + "input": 0.2, + "output": 0.2 + } }, - "nvidia/Llama-3.1-Nemotron-70B-Instruct-HF": { - "id": "nvidia/Llama-3.1-Nemotron-70B-Instruct-HF", - "name": "Nvidia Nemotron 70b", - "family": "nemotron", + "llama-3.3-70b-versatile": { + "id": "llama-3.3-70b-versatile", + "name": "Llama 3.3 70B Versatile", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-04-15", - "last_updated": "2025-04-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.357, "output": 0.408 }, - "limit": { "context": 16384, "input": 16384, "output": 8192 } + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.59, + "output": 0.79 + } }, - "nvidia/Llama-3.3-Nemotron-Super-49B-v1": { - "id": "nvidia/Llama-3.3-Nemotron-Super-49B-v1", - "name": "Nvidia Nemotron Super 49B", - "family": "nemotron", + "allam-2-7b": { + "id": "allam-2-7b", + "name": "ALLaM-2-7b", + "family": "allam", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-08-08", - "last_updated": "2025-08-08", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2024-09", + "release_date": "2024-09", + "last_updated": "2024-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.15 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "limit": { + "context": 4096, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "nvidia/nemotron-3-nano-30b-a3b": { - "id": "nvidia/nemotron-3-nano-30b-a3b", - "name": "Nvidia Nemotron 3 Nano 30B", - "family": "nemotron", + "whisper-large-v3": { + "id": "whisper-large-v3", + "name": "Whisper Large V3", + "family": "whisper", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-12-15", - "last_updated": "2025-12-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.17, "output": 0.68 }, - "limit": { "context": 256000, "input": 256000, "output": 262144 } - }, - "z-ai/glm-4.6:thinking": { - "id": "z-ai/glm-4.6:thinking", - "name": "GLM 4.6 Thinking", - "family": "glm", - "attachment": false, - "reasoning": true, - "tool_call": true, - "structured_output": true, - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.4, "output": 1.5 }, - "limit": { "context": 200000, "input": 200000, "output": 65535 } - }, - "z-ai/glm-4.5v:thinking": { - "id": "z-ai/glm-4.5v:thinking", - "name": "GLM 4.5V Thinking", - "family": "glmv", - "attachment": true, - "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-11-22", - "last_updated": "2025-11-22", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.6, "output": 1.7999999999999998 }, - "limit": { "context": 64000, "input": 64000, "output": 96000 } + "temperature": true, + "knowledge": "2023-09", + "release_date": "2023-09-01", + "last_updated": "2025-09-05", + "modalities": { + "input": ["audio"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 448, + "output": 448 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "z-ai/glm-4.6": { - "id": "z-ai/glm-4.6", - "name": "GLM 4.6", - "family": "glm", + "llama-3.1-8b-instant": { + "id": "llama-3.1-8b-instant", + "name": "Llama 3.1 8B Instant", + "family": "llama", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": true, - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.4, "output": 1.5 }, - "limit": { "context": 200000, "input": 200000, "output": 65535 } - }, - "z-ai/glm-4.5v": { - "id": "z-ai/glm-4.5v", - "name": "GLM 4.5V", - "family": "glmv", - "attachment": true, - "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-11-22", - "last_updated": "2025-11-22", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.6, "output": 1.7999999999999998 }, - "limit": { "context": 64000, "input": 64000, "output": 96000 } + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.05, + "output": 0.08 + } }, - "nex-agi/deepseek-v3.1-nex-n1": { - "id": "nex-agi/deepseek-v3.1-nex-n1", - "name": "DeepSeek V3.1 Nex N1", - "family": "deepseek", + "llama3-70b-8192": { + "id": "llama3-70b-8192", + "name": "Llama 3 70B", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-12-10", - "last_updated": "2025-12-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.27999999999999997, "output": 0.42000000000000004 }, - "limit": { "context": 128000, "input": 128000, "output": 8192 } - }, - "stepfun-ai/step-3.5-flash:thinking": { - "id": "stepfun-ai/step-3.5-flash:thinking", - "name": "Step 3.5 Flash Thinking", - "family": "step", - "attachment": false, - "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2026-02-02", - "last_updated": "2026-02-02", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.5 }, - "limit": { "context": 256000, "input": 256000, "output": 256000 } - }, - "stepfun-ai/step-3.5-flash": { - "id": "stepfun-ai/step-3.5-flash", - "name": "Step 3.5 Flash", - "family": "step", - "attachment": false, - "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2026-02-02", - "last_updated": "2026-02-02", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.5 }, - "limit": { "context": 256000, "input": 256000, "output": 256000 } + "tool_call": true, + "temperature": true, + "knowledge": "2023-03", + "release_date": "2024-04-18", + "last_updated": "2024-04-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 8192 + }, + "status": "deprecated", + "cost": { + "input": 0.59, + "output": 0.79 + } }, - "cognitivecomputations/dolphin-2.9.2-qwen2-72b": { - "id": "cognitivecomputations/dolphin-2.9.2-qwen2-72b", - "name": "Dolphin 72b", + "qwen-qwq-32b": { + "id": "qwen-qwq-32b", + "name": "Qwen QwQ 32B", "family": "qwen", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-02-27", - "last_updated": "2025-02-27", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.306, "output": 0.306 }, - "limit": { "context": 8192, "input": 8192, "output": 4096 } - }, - "allenai/olmo-3.1-32b-instruct": { - "id": "allenai/olmo-3.1-32b-instruct", - "name": "Olmo 3.1 32B Instruct", - "family": "allenai", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2026-01-25", - "last_updated": "2026-01-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.6 }, - "limit": { "context": 65536, "input": 65536, "output": 8192 } - }, - "allenai/olmo-3-32b-think": { - "id": "allenai/olmo-3-32b-think", - "name": "Olmo 3 32B Think", - "family": "allenai", - "attachment": false, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-11-01", - "last_updated": "2025-11-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 0.44999999999999996 }, - "limit": { "context": 128000, "input": 128000, "output": 8192 } + "tool_call": true, + "temperature": true, + "knowledge": "2024-09", + "release_date": "2024-11-27", + "last_updated": "2024-11-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 16384 + }, + "status": "deprecated", + "cost": { + "input": 0.29, + "output": 0.39 + } }, - "allenai/olmo-3.1-32b-think": { - "id": "allenai/olmo-3.1-32b-think", - "name": "Olmo 3.1 32B Think", - "family": "allenai", + "whisper-large-v3-turbo": { + "id": "whisper-large-v3-turbo", + "name": "Whisper Large v3 Turbo", + "family": "whisper", "attachment": false, - "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2026-01-25", - "last_updated": "2026-01-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.15, "output": 0.5 }, - "limit": { "context": 65536, "input": 65536, "output": 8192 } - }, - "allenai/molmo-2-8b": { - "id": "allenai/molmo-2-8b", - "name": "Molmo 2 8B", - "family": "allenai", - "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2026-02-14", - "last_updated": "2026-02-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 36864, "input": 36864, "output": 36864 } + "temperature": true, + "knowledge": "2024-10", + "release_date": "2024-10-01", + "last_updated": "2024-10-01", + "modalities": { + "input": ["audio"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 448, + "output": 448 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "TheDrummer 2/Cydonia-24B-v4.1": { - "id": "TheDrummer 2/Cydonia-24B-v4.1", - "name": "The Drummer Cydonia 24B v4.1", + "llama3-8b-8192": { + "id": "llama3-8b-8192", + "name": "Llama 3 8B", "family": "llama", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-08-19", - "last_updated": "2025-08-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1003, "output": 0.1207 }, - "limit": { "context": 16384, "input": 16384, "output": 32768 } + "tool_call": true, + "temperature": true, + "knowledge": "2023-03", + "release_date": "2024-04-18", + "last_updated": "2024-04-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 8192 + }, + "status": "deprecated", + "cost": { + "input": 0.05, + "output": 0.08 + } }, - "TheDrummer 2/UnslopNemo-12B-v4.1": { - "id": "TheDrummer 2/UnslopNemo-12B-v4.1", - "name": "UnslopNemo 12b v4", - "family": "llama", - "attachment": true, + "canopylabs/orpheus-arabic-saudi": { + "id": "canopylabs/orpheus-arabic-saudi", + "name": "Orpheus Arabic Saudi", + "family": "canopylabs", + "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-07-01", - "last_updated": "2024-07-01", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-12-16", + "release_date": "2025-12-16", + "last_updated": "2025-12-16", + "modalities": { + "input": ["text"], + "output": ["audio"] + }, "open_weights": false, - "cost": { "input": 0.49299999999999994, "output": 0.49299999999999994 }, - "limit": { "context": 32768, "input": 32768, "output": 8192 } + "limit": { + "context": 4000, + "output": 50000 + }, + "cost": { + "input": 40, + "output": 0 + } }, - "TheDrummer 2/Cydonia-24B-v4.3": { - "id": "TheDrummer 2/Cydonia-24B-v4.3", - "name": "The Drummer Cydonia 24B v4.3", - "family": "llama", + "canopylabs/orpheus-v1-english": { + "id": "canopylabs/orpheus-v1-english", + "name": "Orpheus V1 English", + "family": "canopylabs", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-12-25", - "last_updated": "2025-12-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-12-19", + "release_date": "2025-12-19", + "last_updated": "2025-12-19", + "modalities": { + "input": ["text"], + "output": ["audio"] + }, "open_weights": false, - "cost": { "input": 0.1003, "output": 0.1207 }, - "limit": { "context": 32768, "input": 32768, "output": 32768 } + "limit": { + "context": 4000, + "output": 50000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "TheDrummer 2/skyfall-36b-v2": { - "id": "TheDrummer 2/skyfall-36b-v2", - "name": "TheDrummer Skyfall 36B V2", + "meta-llama/llama-4-scout-17b-16e-instruct": { + "id": "meta-llama/llama-4-scout-17b-16e-instruct", + "name": "Llama 4 Scout 17B", "family": "llama", - "attachment": true, + "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-03-10", - "last_updated": "2025-03-10", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.49299999999999994, "output": 0.49299999999999994 }, - "limit": { "context": 64000, "input": 64000, "output": 32768 } + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.11, + "output": 0.34 + } }, - "TheDrummer 2/Anubis-70B-v1": { - "id": "TheDrummer 2/Anubis-70B-v1", - "name": "Anubis 70B v1", + "meta-llama/llama-prompt-guard-2-22m": { + "id": "meta-llama/llama-prompt-guard-2-22m", + "name": "Llama Prompt Guard 2 22M", "family": "llama", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-07-01", - "last_updated": "2024-07-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.31, "output": 0.31 }, - "limit": { "context": 65536, "input": 65536, "output": 16384 } + "temperature": true, + "knowledge": "2024-10", + "release_date": "2024-10-01", + "last_updated": "2024-10-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 512, + "output": 512 + }, + "cost": { + "input": 0.03, + "output": 0.03 + } }, - "TheDrummer 2/Cydonia-24B-v2": { - "id": "TheDrummer 2/Cydonia-24B-v2", - "name": "The Drummer Cydonia 24B v2", + "meta-llama/llama-guard-4-12b": { + "id": "meta-llama/llama-guard-4-12b", + "name": "Llama Guard 4 12B", "family": "llama", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1003, "output": 0.1207 }, - "limit": { "context": 16384, "input": 16384, "output": 32768 } + "temperature": true, + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 1024 + }, + "status": "deprecated", + "cost": { + "input": 0.2, + "output": 0.2 + } }, - "TheDrummer 2/Cydonia-24B-v4": { - "id": "TheDrummer 2/Cydonia-24B-v4", - "name": "The Drummer Cydonia 24B v4", + "meta-llama/llama-4-maverick-17b-128e-instruct": { + "id": "meta-llama/llama-4-maverick-17b-128e-instruct", + "name": "Llama 4 Maverick 17B", "family": "llama", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-22", - "last_updated": "2025-07-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2006, "output": 0.2414 }, - "limit": { "context": 16384, "input": 16384, "output": 32768 } + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "status": "deprecated", + "cost": { + "input": 0.2, + "output": 0.6 + } }, - "TheDrummer 2/Anubis-70B-v1.1": { - "id": "TheDrummer 2/Anubis-70B-v1.1", - "name": "Anubis 70B v1.1", + "meta-llama/llama-prompt-guard-2-86m": { + "id": "meta-llama/llama-prompt-guard-2-86m", + "name": "Llama Prompt Guard 2 86M", "family": "llama", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-07-01", - "last_updated": "2024-07-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.31, "output": 0.31 }, - "limit": { "context": 131072, "input": 131072, "output": 16384 } + "temperature": true, + "knowledge": "2024-10", + "release_date": "2024-10-01", + "last_updated": "2024-10-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 512, + "output": 512 + }, + "cost": { + "input": 0.04, + "output": 0.04 + } }, - "TheDrummer 2/Magidonia-24B-v4.3": { - "id": "TheDrummer 2/Magidonia-24B-v4.3", - "name": "The Drummer Magidonia 24B v4.3", - "family": "llama", + "openai/gpt-oss-20b": { + "id": "openai/gpt-oss-20b", + "name": "GPT OSS 20B", + "family": "gpt-oss", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-12-25", - "last_updated": "2025-12-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1003, "output": 0.1207 }, - "limit": { "context": 32768, "input": 32768, "output": 32768 } + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.075, + "output": 0.3 + } }, - "TheDrummer 2/Rocinante-12B-v1.1": { - "id": "TheDrummer 2/Rocinante-12B-v1.1", - "name": "Rocinante 12b", - "family": "llama", + "openai/gpt-oss-safeguard-20b": { + "id": "openai/gpt-oss-safeguard-20b", + "name": "Safety GPT OSS 20B", + "family": "gpt-oss", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-07-01", - "last_updated": "2024-07-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-03-05", + "last_updated": "2025-03-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.075, + "output": 0.3, + "cache_read": 0.037 + } + }, + "openai/gpt-oss-120b": { + "id": "openai/gpt-oss-120b", + "name": "GPT OSS 120B", + "family": "gpt-oss", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } + }, + "qwen/qwen3-32b": { + "id": "qwen/qwen3-32b", + "name": "Qwen3 32B", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11-08", + "release_date": "2024-12-23", + "last_updated": "2024-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 40960 + }, + "cost": { + "input": 0.29, + "output": 0.59 + } + }, + "groq/compound": { + "id": "groq/compound", + "name": "Compound", + "family": "groq", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-09-04", + "release_date": "2025-09-04", + "last_updated": "2025-09-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.408, "output": 0.595 }, - "limit": { "context": 16384, "input": 16384, "output": 8192 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "google/gemini-3-flash-preview-thinking": { - "id": "google/gemini-3-flash-preview-thinking", - "name": "Gemini 3 Flash Thinking", - "family": "gemini-flash", - "attachment": true, + "groq/compound-mini": { + "id": "groq/compound-mini", + "name": "Compound Mini", + "family": "groq", + "attachment": false, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2025-09-04", + "release_date": "2025-09-04", + "last_updated": "2025-09-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 3 }, - "limit": { "context": 1048756, "input": 1048756, "output": 65536 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "google/gemini-3-flash-preview": { - "id": "google/gemini-3-flash-preview", - "name": "Gemini 3 Flash (Preview)", - "family": "gemini-flash", + "moonshotai/kimi-k2-instruct": { + "id": "moonshotai/kimi-k2-instruct", + "name": "Kimi K2 Instruct", + "family": "kimi", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-07-14", + "last_updated": "2025-07-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 16384 + }, + "status": "deprecated", + "cost": { + "input": 1, + "output": 3 + } + }, + "moonshotai/kimi-k2-instruct-0905": { + "id": "moonshotai/kimi-k2-instruct-0905", + "name": "Kimi K2 Instruct 0905", + "family": "kimi", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 16384 + }, + "cost": { + "input": 1, + "output": 3 + } + } + } + }, + "azure": { + "id": "azure", + "env": ["AZURE_RESOURCE_NAME", "AZURE_API_KEY"], + "npm": "@ai-sdk/azure", + "name": "Azure", + "doc": "https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models", + "models": { + "mistral-nemo": { + "id": "mistral-nemo", + "name": "Mistral Nemo", + "family": "mistral-nemo", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.15, + "output": 0.15 + } + }, + "gpt-5.2-chat": { + "id": "gpt-5.2-chat", + "name": "GPT-5.2 Chat", + "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 3 }, - "limit": { "context": 1048756, "input": 1048756, "output": 65536 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "google/gemini-flash-1.5": { - "id": "google/gemini-flash-1.5", - "name": "Gemini 1.5 Flash", - "family": "gemini-flash", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-05-14", - "last_updated": "2024-05-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "codex-mini": { + "id": "codex-mini", + "name": "Codex Mini", + "family": "gpt-codex-mini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-04", + "release_date": "2025-05-16", + "last_updated": "2025-05-16", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.0748, "output": 0.306 }, - "limit": { "context": 2000000, "input": 2000000, "output": 8192 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.5, + "output": 6, + "cache_read": 0.375 + } }, - "undi95/remm-slerp-l2-13b": { - "id": "undi95/remm-slerp-l2-13b", - "name": "ReMM SLERP 13B", - "family": "llama", + "phi-4-multimodal": { + "id": "phi-4-multimodal", + "name": "Phi-4-multimodal", + "family": "phi", "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.7989999999999999, "output": 1.2069999999999999 }, - "limit": { "context": 6144, "input": 6144, "output": 4096 } + "temperature": true, + "knowledge": "2023-10", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.08, + "output": 0.32, + "input_audio": 4 + } }, - "amazon/nova-lite-v1": { - "id": "amazon/nova-lite-v1", - "name": "Amazon Nova Lite 1.0", - "family": "nova-lite", + "phi-3.5-mini-instruct": { + "id": "phi-3.5-mini-instruct", + "name": "Phi-3.5-mini-instruct", + "family": "phi", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-12-03", - "last_updated": "2024-12-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.0595, "output": 0.238 }, - "limit": { "context": 300000, "input": 300000, "output": 5120 } + "temperature": true, + "knowledge": "2023-10", + "release_date": "2024-08-20", + "last_updated": "2024-08-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.13, + "output": 0.52 + } }, - "amazon/nova-2-lite-v1": { - "id": "amazon/nova-2-lite-v1", - "name": "Amazon Nova 2 Lite", - "family": "nova", - "attachment": false, + "llama-4-scout-17b-16e-instruct": { + "id": "llama-4-scout-17b-16e-instruct", + "name": "Llama 4 Scout 17B 16E Instruct", + "family": "llama", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-03", - "last_updated": "2024-12-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.2, + "output": 0.78 + } + }, + "grok-4-1-fast-reasoning": { + "id": "grok-4-1-fast-reasoning", + "name": "Grok 4.1 Fast (Reasoning)", + "family": "grok", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-06-27", + "last_updated": "2025-06-27", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5099999999999999, "output": 4.25 }, - "limit": { "context": 1000000, "input": 1000000, "output": 65535 } + "limit": { + "context": 128000, + "input": 128000, + "output": 8192 + }, + "status": "beta", + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } }, - "amazon/nova-micro-v1": { - "id": "amazon/nova-micro-v1", - "name": "Amazon Nova Micro 1.0", - "family": "nova-micro", + "phi-3-medium-4k-instruct": { + "id": "phi-3-medium-4k-instruct", + "name": "Phi-3-medium-instruct (4k)", + "family": "phi", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-12-03", - "last_updated": "2024-12-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.0357, "output": 0.1394 }, - "limit": { "context": 128000, "input": 128000, "output": 5120 } + "temperature": true, + "knowledge": "2023-10", + "release_date": "2024-04-23", + "last_updated": "2024-04-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 4096, + "output": 1024 + }, + "cost": { + "input": 0.17, + "output": 0.68 + } }, - "amazon/nova-pro-v1": { - "id": "amazon/nova-pro-v1", - "name": "Amazon Nova Pro 1.0", - "family": "nova-pro", + "ministral-3b": { + "id": "ministral-3b", + "name": "Ministral 3B", + "family": "ministral", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-03", - "last_updated": "2024-12-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2024-03", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.04, + "output": 0.04 + } + }, + "claude-haiku-4-5": { + "id": "claude-haiku-4-5", + "name": "Claude Haiku 4.5", + "family": "claude-haiku", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-02-31", + "release_date": "2025-11-18", + "last_updated": "2025-11-18", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.7989999999999999, "output": 3.1959999999999997 }, - "limit": { "context": 300000, "input": 300000, "output": 32000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1" + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } }, - "baidu/ernie-4.5-300b-a47b": { - "id": "baidu/ernie-4.5-300b-a47b", - "name": "ERNIE 4.5 300B", - "family": "ernie", + "meta-llama-3.1-8b-instruct": { + "id": "meta-llama-3.1-8b-instruct", + "name": "Meta-Llama-3.1-8B-Instruct", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-06-30", - "last_updated": "2025-06-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.35, "output": 1.15 }, - "limit": { "context": 131072, "input": 131072, "output": 16384 } + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.3, + "output": 0.61 + } }, - "baidu/ernie-4.5-vl-28b-a3b": { - "id": "baidu/ernie-4.5-vl-28b-a3b", - "name": "ERNIE 4.5 VL 28B", - "family": "ernie", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-06-30", - "last_updated": "2025-06-30", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.13999999999999999, "output": 0.5599999999999999 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "kimi-k2.5": { + "id": "kimi-k2.5", + "name": "Kimi K2.5", + "family": "kimi", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-02-06", + "last_updated": "2026-02-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "provider": { + "npm": "@ai-sdk/openai-compatible", + "api": "https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/models", + "shape": "completions" + }, + "cost": { + "input": 0.6, + "output": 3 + } }, - "meta-llama/llama-3.3-70b-instruct": { - "id": "meta-llama/llama-3.3-70b-instruct", - "name": "Llama 3.3 70b Instruct", + "llama-3.3-70b-instruct": { + "id": "llama-3.3-70b-instruct", + "name": "Llama-3.3-70B-Instruct", "family": "llama", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, - "release_date": "2025-02-27", - "last_updated": "2025-02-27", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.05, "output": 0.23 }, - "limit": { "context": 131072, "input": 131072, "output": 16384 } + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.71, + "output": 0.71 + } }, - "meta-llama/llama-3.1-8b-instruct": { - "id": "meta-llama/llama-3.1-8b-instruct", - "name": "Llama 3.1 8b Instruct", - "family": "llama", + "deepseek-v3-0324": { + "id": "deepseek-v3-0324", + "name": "DeepSeek-V3-0324", + "family": "deepseek", "attachment": false, "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-03-24", + "last_updated": "2025-03-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 1.14, + "output": 4.56 + } + }, + "gpt-5-chat": { + "id": "gpt-5-chat", + "name": "GPT-5 Chat", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, "tool_call": false, - "structured_output": false, - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-10-24", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.0544, "output": 0.0544 }, - "limit": { "context": 131072, "input": 131072, "output": 16384 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.13 + } }, - "meta-llama/llama-4-scout": { - "id": "meta-llama/llama-4-scout", - "name": "Llama 4 Scout", - "family": "llama", - "attachment": true, + "phi-3.5-moe-instruct": { + "id": "phi-3.5-moe-instruct", + "name": "Phi-3.5-MoE-instruct", + "family": "phi", + "attachment": false, "reasoning": false, - "tool_call": true, - "structured_output": true, - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.085, "output": 0.46 }, - "limit": { "context": 328000, "input": 328000, "output": 65536 } + "tool_call": false, + "temperature": true, + "knowledge": "2023-10", + "release_date": "2024-08-20", + "last_updated": "2024-08-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.16, + "output": 0.64 + } }, - "meta-llama/llama-4-maverick": { - "id": "meta-llama/llama-4-maverick", - "name": "Llama 4 Maverick", - "family": "llama", + "gpt-5.3-chat": { + "id": "gpt-5.3-chat", + "name": "GPT-5.3 Chat", + "family": "gpt-codex", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-03", + "last_updated": "2026-03-03", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.18000000000000002, "output": 0.8 }, - "limit": { "context": 1048576, "input": 1048576, "output": 65536 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "meta-llama/llama-3.2-90b-vision-instruct": { - "id": "meta-llama/llama-3.2-90b-vision-instruct", - "name": "Llama 3.2 Medium", - "family": "llama", + "o1-mini": { + "id": "o1-mini", + "name": "o1-mini", + "family": "o-mini", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2023-09", + "release_date": "2024-09-12", + "last_updated": "2024-09-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.9009999999999999, "output": 0.9009999999999999 }, - "limit": { "context": 131072, "input": 131072, "output": 16384 } + "limit": { + "context": 128000, + "output": 65536 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.55 + } }, - "meta-llama/llama-3.2-3b-instruct": { - "id": "meta-llama/llama-3.2-3b-instruct", - "name": "Llama 3.2 3b Instruct", - "family": "llama", - "attachment": true, + "text-embedding-3-large": { + "id": "text-embedding-3-large", + "name": "text-embedding-3-large", + "family": "text-embedding", + "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-09-25", - "last_updated": "2024-09-25", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, + "release_date": "2024-01-25", + "last_updated": "2024-01-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.0306, "output": 0.0493 }, - "limit": { "context": 131072, "input": 131072, "output": 8192 } + "limit": { + "context": 8191, + "output": 3072 + }, + "cost": { + "input": 0.13, + "output": 0 + } }, - "ReadyArt/MS3.2-The-Omega-Directive-24B-Unslop-v2.0": { - "id": "ReadyArt/MS3.2-The-Omega-Directive-24B-Unslop-v2.0", - "name": "Omega Directive 24B Unslop v2.0", - "family": "llama", + "phi-3-mini-128k-instruct": { + "id": "phi-3-mini-128k-instruct", + "name": "Phi-3-mini-instruct (128k)", + "family": "phi", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-12-08", - "last_updated": "2025-12-08", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.5, "output": 0.5 }, - "limit": { "context": 16384, "input": 16384, "output": 32768 } + "temperature": true, + "knowledge": "2023-10", + "release_date": "2024-04-23", + "last_updated": "2024-04-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.13, + "output": 0.52 + } }, - "ReadyArt/The-Omega-Abomination-L-70B-v1.0": { - "id": "ReadyArt/The-Omega-Abomination-L-70B-v1.0", - "name": "The Omega Abomination V1", - "family": "llama", + "phi-4-reasoning": { + "id": "phi-4-reasoning", + "name": "Phi-4-reasoning", + "family": "phi", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": false, - "structured_output": false, - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2023-10", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32000, + "output": 4096 + }, + "cost": { + "input": 0.125, + "output": 0.5 + } + }, + "gpt-5-mini": { + "id": "gpt-5-mini", + "name": "GPT-5 Mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.7, "output": 0.95 }, - "limit": { "context": 16384, "input": 16384, "output": 16384 } + "limit": { + "context": 272000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.03 + } }, - "miromind-ai/mirothinker-v1.5-235b": { - "id": "miromind-ai/mirothinker-v1.5-235b", - "name": "MiroThinker v1.5 235B", - "family": "gpt", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2026-01-07", - "last_updated": "2026-01-07", - "modalities": { "input": ["text"], "output": ["text"] }, + "gpt-5-nano": { + "id": "gpt-5-nano", + "name": "GPT-5 Nano", + "family": "gpt-nano", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 32768, "input": 32768, "output": 4000 } + "limit": { + "context": 272000, + "output": 128000 + }, + "cost": { + "input": 0.05, + "output": 0.4, + "cache_read": 0.01 + } }, - "Doctor-Shotgun/MS3.2-24B-Magnum-Diamond": { - "id": "Doctor-Shotgun/MS3.2-24B-Magnum-Diamond", - "name": "MS3.2 24B Magnum Diamond", - "family": "mistral", + "meta-llama-3-70b-instruct": { + "id": "meta-llama-3-70b-instruct", + "name": "Meta-Llama-3-70B-Instruct", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-11-24", - "last_updated": "2025-11-24", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.49299999999999994, "output": 0.49299999999999994 }, - "limit": { "context": 16384, "input": 16384, "output": 32768 } + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-04-18", + "last_updated": "2024-04-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 2048 + }, + "cost": { + "input": 2.68, + "output": 3.54 + } }, - "LLM360/K2-Think": { - "id": "LLM360/K2-Think", - "name": "K2-Think", - "family": "kimi-thinking", + "phi-3-small-8k-instruct": { + "id": "phi-3-small-8k-instruct", + "name": "Phi-3-small-instruct (8k)", + "family": "phi", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-07-26", - "last_updated": "2025-07-26", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.17, "output": 0.68 }, - "limit": { "context": 128000, "input": 128000, "output": 32768 } + "temperature": true, + "knowledge": "2023-10", + "release_date": "2024-04-23", + "last_updated": "2024-04-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 2048 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "MiniMaxAI/MiniMax-M1-80k": { - "id": "MiniMaxAI/MiniMax-M1-80k", - "name": "MiniMax M1 80K", - "family": "minimax", + "gpt-5.3-codex": { + "id": "gpt-5.3-codex", + "name": "GPT-5.3 Codex", + "family": "gpt-codex", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-06-16", - "last_updated": "2025-06-16", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-02-24", + "last_updated": "2026-02-24", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.6052, "output": 2.4225000000000003 }, - "limit": { "context": 1000000, "input": 1000000, "output": 131072 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "failspy/Meta-Llama-3-70B-Instruct-abliterated-v3.5": { - "id": "failspy/Meta-Llama-3-70B-Instruct-abliterated-v3.5", - "name": "Llama 3 70B abliterated", - "family": "llama", + "text-embedding-ada-002": { + "id": "text-embedding-ada-002", + "name": "text-embedding-ada-002", + "family": "text-embedding", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-07-26", - "last_updated": "2025-07-26", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2022-12-15", + "last_updated": "2022-12-15", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.7, "output": 0.7 }, - "limit": { "context": 8192, "input": 8192, "output": 8192 } + "limit": { + "context": 8192, + "output": 1536 + }, + "cost": { + "input": 0.1, + "output": 0 + } }, - "essentialai/rnj-1-instruct": { - "id": "essentialai/rnj-1-instruct", - "name": "RNJ-1 Instruct 8B", - "family": "rnj", - "attachment": false, + "llama-3.2-90b-vision-instruct": { + "id": "llama-3.2-90b-vision-instruct", + "name": "Llama-3.2-90B-Vision-Instruct", + "family": "llama", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-12-13", - "last_updated": "2025-12-13", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.15, "output": 0.15 }, - "limit": { "context": 128000, "input": 128000, "output": 8192 } + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-09-25", + "last_updated": "2024-09-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 2.04, + "output": 2.04 + } }, - "pamanseau/OpenReasoning-Nemotron-32B": { - "id": "pamanseau/OpenReasoning-Nemotron-32B", - "name": "OpenReasoning Nemotron 32B", - "family": "nemotron", + "deepseek-r1": { + "id": "deepseek-r1", + "name": "DeepSeek-R1", + "family": "deepseek-thinking", "attachment": false, "reasoning": true, "tool_call": false, - "structured_output": false, - "release_date": "2025-08-21", - "last_updated": "2025-08-21", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4 }, - "limit": { "context": 32768, "input": 32768, "output": 65536 } + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 163840, + "output": 163840 + }, + "cost": { + "input": 1.35, + "output": 5.4 + } }, - "arcee-ai/trinity-mini": { - "id": "arcee-ai/trinity-mini", - "name": "Trinity Mini", - "family": "trinity-mini", - "attachment": false, + "grok-4-1-fast-non-reasoning": { + "id": "grok-4-1-fast-non-reasoning", + "name": "Grok 4.1 Fast (Non-Reasoning)", + "family": "grok", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "release_date": "2025-06-27", + "last_updated": "2025-06-27", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.045000000000000005, "output": 0.15 }, - "limit": { "context": 131072, "input": 131072, "output": 8192 } + "limit": { + "context": 128000, + "input": 128000, + "output": 8192 + }, + "status": "beta", + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } }, - "arcee-ai/trinity-large": { - "id": "arcee-ai/trinity-large", - "name": "Trinity Large", - "family": "trinity", + "deepseek-v3.2-speciale": { + "id": "deepseek-v3.2-speciale", + "name": "DeepSeek-V3.2-Speciale", + "family": "deepseek", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": false, - "structured_output": false, + "temperature": true, + "knowledge": "2024-07", "release_date": "2025-12-01", "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 1 }, - "limit": { "context": 131072, "input": 131072, "output": 8192 } + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.58, + "output": 1.68 + } }, - "deepseek-ai/DeepSeek-V3.1-Terminus:thinking": { - "id": "deepseek-ai/DeepSeek-V3.1-Terminus:thinking", - "name": "DeepSeek V3.1 Terminus (Thinking)", - "family": "deepseek-thinking", - "attachment": false, - "reasoning": false, + "gpt-5.2": { + "id": "gpt-5.2", + "name": "GPT-5.2", + "family": "gpt", + "attachment": true, + "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-09-22", - "last_updated": "2025-09-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 0.7 }, - "limit": { "context": 128000, "input": 128000, "output": 65536 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.125 + } }, - "deepseek-ai/DeepSeek-V3.1:thinking": { - "id": "deepseek-ai/DeepSeek-V3.1:thinking", - "name": "DeepSeek V3.1 Thinking", - "family": "deepseek-thinking", + "mistral-large-2411": { + "id": "mistral-large-2411", + "name": "Mistral Large 24.11", + "family": "mistral-large", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-08-21", - "last_updated": "2025-08-21", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2024-09", + "release_date": "2024-11-01", + "last_updated": "2024-11-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.7 }, - "limit": { "context": 128000, "input": 128000, "output": 65536 } + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 6 + } }, - "deepseek-ai/DeepSeek-V3.1": { - "id": "deepseek-ai/DeepSeek-V3.1", - "name": "DeepSeek V3.1", - "family": "deepseek", + "claude-opus-4-1": { + "id": "claude-opus-4-1", + "name": "Claude Opus 4.1", + "family": "claude-opus", "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-26", - "last_updated": "2025-07-26", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-11-18", + "last_updated": "2025-11-18", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.7 }, - "limit": { "context": 128000, "input": 128000, "output": 65536 } + "limit": { + "context": 200000, + "output": 32000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1" + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "deepseek-ai/deepseek-v3.2-exp-thinking": { - "id": "deepseek-ai/deepseek-v3.2-exp-thinking", - "name": "DeepSeek V3.2 Exp Thinking", - "family": "deepseek-thinking", + "cohere-command-a": { + "id": "cohere-command-a", + "name": "Command A", + "family": "command-a", "attachment": false, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.27999999999999997, "output": 0.42000000000000004 }, - "limit": { "context": 163840, "input": 163840, "output": 65536 } + "tool_call": true, + "temperature": true, + "knowledge": "2024-06-01", + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 256000, + "output": 8000 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "deepseek-ai/DeepSeek-V3.1-Terminus": { - "id": "deepseek-ai/DeepSeek-V3.1-Terminus", - "name": "DeepSeek V3.1 Terminus", - "family": "deepseek", + "llama-3.2-11b-vision-instruct": { + "id": "llama-3.2-11b-vision-instruct", + "name": "Llama-3.2-11B-Vision-Instruct", + "family": "llama", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-09-25", + "last_updated": "2024-09-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.37, + "output": 0.37 + } + }, + "meta-llama-3.1-405b-instruct": { + "id": "meta-llama-3.1-405b-instruct", + "name": "Meta-Llama-3.1-405B-Instruct", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 5.33, + "output": 16 + } + }, + "gpt-5.1-chat": { + "id": "gpt-5.1-chat", + "name": "GPT-5.1 Chat", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, "structured_output": true, - "release_date": "2025-08-02", - "last_updated": "2025-08-02", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-14", + "last_updated": "2025-11-14", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text", "image", "audio"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 0.7 }, - "limit": { "context": 128000, "input": 128000, "output": 65536 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "deepseek-ai/deepseek-v3.2-exp": { - "id": "deepseek-ai/deepseek-v3.2-exp", - "name": "DeepSeek V3.2 Exp", - "family": "deepseek", - "attachment": false, + "gpt-4-turbo-vision": { + "id": "gpt-4-turbo-vision", + "name": "GPT-4 Turbo Vision", + "family": "gpt", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2023-11", + "release_date": "2023-11-06", + "last_updated": "2024-04-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.27999999999999997, "output": 0.42000000000000004 }, - "limit": { "context": 163840, "input": 163840, "output": 65536 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 10, + "output": 30 + } }, - "deepseek-ai/DeepSeek-R1-0528": { - "id": "deepseek-ai/DeepSeek-R1-0528", - "name": "DeepSeek R1 0528", - "family": "deepseek", + "gpt-5.2-codex": { + "id": "gpt-5.2-codex", + "name": "GPT-5.2 Codex", + "family": "gpt-codex", "attachment": false, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-05-28", - "last_updated": "2025-05-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.4, "output": 1.7 }, - "limit": { "context": 128000, "input": 128000, "output": 163840 } - }, - "inflatebot/MN-12B-Mag-Mell-R1": { - "id": "inflatebot/MN-12B-Mag-Mell-R1", - "name": "Mag Mell R1", - "family": "mistral-nemo", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-07-01", - "last_updated": "2024-07-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-01-14", + "last_updated": "2026-01-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.49299999999999994, "output": 0.49299999999999994 }, - "limit": { "context": 16384, "input": 16384, "output": 8192 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + } }, - "MarinaraSpaghetti/NemoMix-Unleashed-12B": { - "id": "MarinaraSpaghetti/NemoMix-Unleashed-12B", - "name": "NemoMix 12B Unleashed", - "family": "mistral-nemo", - "attachment": false, + "cohere-embed-v-4-0": { + "id": "cohere-embed-v-4-0", + "name": "Embed v4", + "family": "cohere-embed", + "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-07-01", - "last_updated": "2024-07-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.49299999999999994, "output": 0.49299999999999994 }, - "limit": { "context": 32768, "input": 32768, "output": 8192 } + "temperature": false, + "release_date": "2025-04-15", + "last_updated": "2025-04-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 1536 + }, + "cost": { + "input": 0.12, + "output": 0 + } }, - "Alibaba-NLP/Tongyi-DeepResearch-30B-A3B": { - "id": "Alibaba-NLP/Tongyi-DeepResearch-30B-A3B", - "name": "Tongyi DeepResearch 30B A3B", - "family": "yi", + "gpt-5.1-codex-mini": { + "id": "gpt-5.1-codex-mini", + "name": "GPT-5.1 Codex Mini", + "family": "gpt-codex", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-08-26", - "last_updated": "2025-08-26", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-14", + "last_updated": "2025-11-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.08, "output": 0.24000000000000002 }, - "limit": { "context": 128000, "input": 128000, "output": 65536 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.025 + } }, - "soob3123/GrayLine-Qwen3-8B": { - "id": "soob3123/GrayLine-Qwen3-8B", - "name": "Grayline Qwen3 8B", - "family": "qwen", + "gpt-3.5-turbo-0125": { + "id": "gpt-3.5-turbo-0125", + "name": "GPT-3.5 Turbo 0125", + "family": "gpt", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2021-08", + "release_date": "2024-01-25", + "last_updated": "2024-01-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 0.3 }, - "limit": { "context": 16384, "input": 16384, "output": 32768 } + "limit": { + "context": 16384, + "output": 16384 + }, + "cost": { + "input": 0.5, + "output": 1.5 + } }, - "soob3123/amoral-gemma3-27B-v2": { - "id": "soob3123/amoral-gemma3-27B-v2", - "name": "Amoral Gemma3 27B v2", - "family": "gemma", + "o1-preview": { + "id": "o1-preview", + "name": "o1-preview", + "family": "o", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-05-23", - "last_updated": "2025-05-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2023-09", + "release_date": "2024-09-12", + "last_updated": "2024-09-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 0.3 }, - "limit": { "context": 32768, "input": 32768, "output": 8192 } + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 16.5, + "output": 66, + "cache_read": 8.25 + } }, - "soob3123/Veiled-Calla-12B": { - "id": "soob3123/Veiled-Calla-12B", - "name": "Veiled Calla 12B", - "family": "llama", + "cohere-embed-v3-multilingual": { + "id": "cohere-embed-v3-multilingual", + "name": "Embed v3 Multilingual", + "family": "cohere-embed", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-04-13", - "last_updated": "2025-04-13", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 0.3 }, - "limit": { "context": 32768, "input": 32768, "output": 8192 } + "temperature": false, + "release_date": "2023-11-07", + "last_updated": "2023-11-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 512, + "output": 1024 + }, + "cost": { + "input": 0.1, + "output": 0 + } }, - "minimax/minimax-m2-her": { - "id": "minimax/minimax-m2-her", - "name": "MiniMax M2-her", - "family": "minimax", + "grok-4-20-non-reasoning": { + "id": "grok-4-20-non-reasoning", + "name": "Grok 4.20 (Non-Reasoning)", + "family": "grok", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2026-01-24", - "last_updated": "2026-01-24", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2025-09", + "release_date": "2026-04-08", + "last_updated": "2026-04-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.30200000000000005, "output": 1.2069999999999999 }, - "limit": { "context": 65532, "input": 65532, "output": 2048 } + "limit": { + "context": 262000, + "output": 8192 + }, + "status": "beta", + "cost": { + "input": 2, + "output": 6 + } }, - "minimax/minimax-01": { - "id": "minimax/minimax-01", - "name": "MiniMax 01", - "family": "minimax", + "gpt-5.1": { + "id": "gpt-5.1", + "name": "GPT-5.1", + "family": "gpt", "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-01-15", - "last_updated": "2025-01-15", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1394, "output": 1.1219999999999999 }, - "limit": { "context": 1000192, "input": 1000192, "output": 16384 } - }, - "minimax/minimax-m2.1": { - "id": "minimax/minimax-m2.1", - "name": "MiniMax M2.1", - "family": "minimax", - "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-12-19", - "last_updated": "2025-12-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-14", + "last_updated": "2025-11-14", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text", "image", "audio"] + }, "open_weights": false, - "cost": { "input": 0.33, "output": 1.32 }, - "limit": { "context": 200000, "input": 200000, "output": 131072 } + "limit": { + "context": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "minimax/minimax-m2.7": { - "id": "minimax/minimax-m2.7", - "name": "MiniMax M2.7", - "family": "minimax", - "attachment": false, + "grok-4-fast-reasoning": { + "id": "grok-4-fast-reasoning", + "name": "Grok 4 Fast (Reasoning)", + "family": "grok", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-07", + "release_date": "2025-09-19", + "last_updated": "2025-09-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 204800, "input": 204800, "output": 131072 } + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } }, - "minimax/minimax-m2.5": { - "id": "minimax/minimax-m2.5", - "name": "MiniMax M2.5", - "family": "minimax", + "o1": { + "id": "o1", + "name": "o1", + "family": "o", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2023-09", + "release_date": "2024-12-05", + "last_updated": "2024-12-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 204800, "input": 204800, "output": 131072 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 15, + "output": 60, + "cache_read": 7.5 + } }, - "qwen/qwen3.5-397b-a17b": { - "id": "qwen/qwen3.5-397b-a17b", - "name": "Qwen3.5 397B A17B", - "family": "qwen", - "attachment": false, + "mistral-small-2503": { + "id": "mistral-small-2503", + "name": "Mistral Small 3.1", + "family": "mistral-small", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2026-02-16", - "last_updated": "2026-02-16", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 3.6 }, - "limit": { "context": 258048, "input": 258048, "output": 65536 } + "tool_call": true, + "temperature": true, + "knowledge": "2024-09", + "release_date": "2025-03-01", + "last_updated": "2025-03-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.1, + "output": 0.3 + } }, - "dmind/dmind-1": { - "id": "dmind/dmind-1", - "name": "DMind-1", - "family": "gpt", - "attachment": false, + "model-router": { + "id": "model-router", + "name": "Model Router", + "family": "model-router", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-06-01", - "last_updated": "2025-06-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "release_date": "2025-05-19", + "last_updated": "2025-11-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 0.6 }, - "limit": { "context": 32768, "input": 32768, "output": 8192 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.14, + "output": 0 + } }, - "dmind/dmind-1-mini": { - "id": "dmind/dmind-1-mini", - "name": "DMind-1-Mini", + "gpt-3.5-turbo-1106": { + "id": "gpt-3.5-turbo-1106", + "name": "GPT-3.5 Turbo 1106", "family": "gpt", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-06-01", - "last_updated": "2025-06-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2021-08", + "release_date": "2023-11-06", + "last_updated": "2023-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.4 }, - "limit": { "context": 32768, "input": 32768, "output": 8192 } + "limit": { + "context": 16384, + "output": 16384 + }, + "cost": { + "input": 1, + "output": 2 + } }, - "VongolaChouko/Starcannon-Unleashed-12B-v1.0": { - "id": "VongolaChouko/Starcannon-Unleashed-12B-v1.0", - "name": "Mistral Nemo Starcannon 12b v1", - "family": "mistral-nemo", + "text-embedding-3-small": { + "id": "text-embedding-3-small", + "name": "text-embedding-3-small", + "family": "text-embedding", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-07-01", - "last_updated": "2024-07-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2024-01-25", + "last_updated": "2024-01-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.49299999999999994, "output": 0.49299999999999994 }, - "limit": { "context": 16384, "input": 16384, "output": 8192 } + "limit": { + "context": 8191, + "output": 1536 + }, + "cost": { + "input": 0.02, + "output": 0 + } }, - "xiaomi/mimo-v2-flash-thinking": { - "id": "xiaomi/mimo-v2-flash-thinking", - "name": "MiMo V2 Flash (Thinking)", - "family": "mimo", + "deepseek-v3.1": { + "id": "deepseek-v3.1", + "name": "DeepSeek-V3.1", + "family": "deepseek", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-08-21", + "last_updated": "2025-08-21", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.56, + "output": 1.68 + } + }, + "claude-opus-4-5": { + "id": "claude-opus-4-5", + "name": "Claude Opus 4.5", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-11-24", + "last_updated": "2025-08-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.102, "output": 0.306 }, - "limit": { "context": 256000, "input": 256000, "output": 32768 } + "limit": { + "context": 200000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1" + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "xiaomi/mimo-v2-flash-thinking-original": { - "id": "xiaomi/mimo-v2-flash-thinking-original", - "name": "MiMo V2 Flash (Thinking) Original", - "family": "mimo", + "phi-3-mini-4k-instruct": { + "id": "phi-3-mini-4k-instruct", + "name": "Phi-3-mini-instruct (4k)", + "family": "phi", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.102, "output": 0.306 }, - "limit": { "context": 256000, "input": 256000, "output": 32768 } + "temperature": true, + "knowledge": "2023-10", + "release_date": "2024-04-23", + "last_updated": "2024-04-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 4096, + "output": 1024 + }, + "cost": { + "input": 0.13, + "output": 0.52 + } }, - "xiaomi/mimo-v2-flash-original": { - "id": "xiaomi/mimo-v2-flash-original", - "name": "MiMo V2 Flash Original", - "family": "mimo", + "meta-llama-3.1-70b-instruct": { + "id": "meta-llama-3.1-70b-instruct", + "name": "Meta-Llama-3.1-70B-Instruct", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.102, "output": 0.306 }, - "limit": { "context": 256000, "input": 256000, "output": 32768 } + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 2.68, + "output": 3.54 + } }, - "xiaomi/mimo-v2-flash": { - "id": "xiaomi/mimo-v2-flash", - "name": "MiMo V2 Flash", - "family": "mimo", + "phi-4-mini-reasoning": { + "id": "phi-4-mini-reasoning", + "name": "Phi-4-mini-reasoning", + "family": "phi", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.102, "output": 0.306 }, - "limit": { "context": 256000, "input": 256000, "output": 32768 } + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2023-10", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.075, + "output": 0.3 + } }, - "Salesforce/Llama-xLAM-2-70b-fc-r": { - "id": "Salesforce/Llama-xLAM-2-70b-fc-r", - "name": "Llama-xLAM-2 70B fc-r", - "family": "llama", + "gpt-4": { + "id": "gpt-4", + "name": "GPT-4", + "family": "gpt", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-04-13", - "last_updated": "2025-04-13", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2023-11", + "release_date": "2023-03-14", + "last_updated": "2023-03-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 2.5 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } - }, - "Gryphe/MythoMax-L2-13b": { - "id": "Gryphe/MythoMax-L2-13b", - "name": "MythoMax 13B", + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 60, + "output": 120 + } + }, + "meta-llama-3-8b-instruct": { + "id": "meta-llama-3-8b-instruct", + "name": "Meta-Llama-3-8B-Instruct", "family": "llama", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-08-08", - "last_updated": "2025-08-08", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1003, "output": 0.1003 }, - "limit": { "context": 4000, "input": 4000, "output": 4096 } + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-04-18", + "last_updated": "2024-04-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 2048 + }, + "cost": { + "input": 0.3, + "output": 0.61 + } }, - "baseten/Kimi-K2-Instruct-FP4": { - "id": "baseten/Kimi-K2-Instruct-FP4", - "name": "Kimi K2 0711 Instruct FP4", + "kimi-k2.6": { + "id": "kimi-k2.6", + "name": "Kimi K2.6", "family": "kimi", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-11", - "last_updated": "2025-07-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 2 }, - "limit": { "context": 128000, "input": 128000, "output": 131072 } + "reasoning": true, + "tool_call": true, + "interleaved": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "provider": { + "npm": "@ai-sdk/openai-compatible", + "api": "https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/models", + "shape": "completions" + }, + "cost": { + "input": 0.95, + "output": 4 + } }, - "Steelskull/L3.3-Nevoria-R1-70b": { - "id": "Steelskull/L3.3-Nevoria-R1-70b", - "name": "Steelskull Nevoria R1 70b", - "family": "llama", + "gpt-5-codex": { + "id": "gpt-5-codex", + "name": "GPT-5-Codex", + "family": "gpt-codex", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-09-15", + "last_updated": "2025-09-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.49299999999999994, "output": 0.49299999999999994 }, - "limit": { "context": 16384, "input": 16384, "output": 16384 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.13 + } }, - "Steelskull/L3.3-Electra-R1-70b": { - "id": "Steelskull/L3.3-Electra-R1-70b", - "name": "Steelskull Electra R1 70b", - "family": "llama", + "phi-4-mini": { + "id": "phi-4-mini", + "name": "Phi-4-mini", + "family": "phi", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.69989, "output": 0.69989 }, - "limit": { "context": 16384, "input": 16384, "output": 16384 } + "tool_call": true, + "temperature": true, + "knowledge": "2023-10", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.075, + "output": 0.3 + } }, - "Steelskull/L3.3-Cu-Mai-R1-70b": { - "id": "Steelskull/L3.3-Cu-Mai-R1-70b", - "name": "Llama 3.3 70B Cu Mai", - "family": "llama", + "grok-4-20-reasoning": { + "id": "grok-4-20-reasoning", + "name": "Grok 4.20 (Reasoning)", + "family": "grok", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-09", + "release_date": "2026-04-08", + "last_updated": "2026-04-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.49299999999999994, "output": 0.49299999999999994 }, - "limit": { "context": 16384, "input": 16384, "output": 16384 } + "limit": { + "context": 262000, + "output": 8192 + }, + "status": "beta", + "cost": { + "input": 2, + "output": 6 + } }, - "Steelskull/L3.3-MS-Evalebis-70b": { - "id": "Steelskull/L3.3-MS-Evalebis-70b", - "name": "MS Evalebis 70b", - "family": "llama", + "gpt-3.5-turbo-0301": { + "id": "gpt-3.5-turbo-0301", + "name": "GPT-3.5 Turbo 0301", + "family": "gpt", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2021-08", + "release_date": "2023-03-01", + "last_updated": "2023-03-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.49299999999999994, "output": 0.49299999999999994 }, - "limit": { "context": 16384, "input": 16384, "output": 16384 } + "limit": { + "context": 4096, + "output": 4096 + }, + "cost": { + "input": 1.5, + "output": 2 + } }, - "Steelskull/L3.3-MS-Nevoria-70b": { - "id": "Steelskull/L3.3-MS-Nevoria-70b", - "name": "Steelskull Nevoria 70b", - "family": "llama", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "claude-opus-4-6": { + "id": "claude-opus-4-6", + "name": "Claude Opus 4.6", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.49299999999999994, "output": 0.49299999999999994 }, - "limit": { "context": 16384, "input": 16384, "output": 16384 } + "limit": { + "context": 200000, + "output": 128000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1" + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25, + "tiers": [ + { + "input": 10, + "output": 37.5, + "cache_read": 1, + "cache_write": 12.5, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 10, + "output": 37.5, + "cache_read": 1, + "cache_write": 12.5 + } + } }, - "Steelskull/L3.3-MS-Evayale-70B": { - "id": "Steelskull/L3.3-MS-Evayale-70B", - "name": "Evayale 70b ", - "family": "llama", + "phi-3-small-128k-instruct": { + "id": "phi-3-small-128k-instruct", + "name": "Phi-3-small-instruct (128k)", + "family": "phi", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.49299999999999994, "output": 0.49299999999999994 }, - "limit": { "context": 16384, "input": 16384, "output": 16384 } + "temperature": true, + "knowledge": "2023-10", + "release_date": "2024-04-23", + "last_updated": "2024-04-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "meganova-ai/manta-mini-1.0": { - "id": "meganova-ai/manta-mini-1.0", - "name": "Manta Mini 1.0", - "family": "nova", + "deepseek-v3.2": { + "id": "deepseek-v3.2", + "name": "DeepSeek-V3.2", + "family": "deepseek", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-12-20", - "last_updated": "2025-12-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.02, "output": 0.16 }, - "limit": { "context": 8192, "input": 8192, "output": 8192 } + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.58, + "output": 1.68 + } }, - "meganova-ai/manta-pro-1.0": { - "id": "meganova-ai/manta-pro-1.0", - "name": "Manta Pro 1.0", - "family": "nova", + "phi-3-medium-128k-instruct": { + "id": "phi-3-medium-128k-instruct", + "name": "Phi-3-medium-instruct (128k)", + "family": "phi", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-12-20", - "last_updated": "2025-12-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.060000000000000005, "output": 0.5 }, - "limit": { "context": 32768, "input": 32768, "output": 32768 } + "temperature": true, + "knowledge": "2023-10", + "release_date": "2024-04-23", + "last_updated": "2024-04-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.17, + "output": 0.68 + } }, - "meganova-ai/manta-flash-1.0": { - "id": "meganova-ai/manta-flash-1.0", - "name": "Manta Flash 1.0", - "family": "nova", + "gpt-3.5-turbo-0613": { + "id": "gpt-3.5-turbo-0613", + "name": "GPT-3.5 Turbo 0613", + "family": "gpt", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-12-20", - "last_updated": "2025-12-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2021-08", + "release_date": "2023-06-13", + "last_updated": "2023-06-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.02, "output": 0.16 }, - "limit": { "context": 16384, "input": 16384, "output": 16384 } + "limit": { + "context": 16384, + "output": 16384 + }, + "cost": { + "input": 3, + "output": 4 + } }, - "meituan-longcat/LongCat-Flash-Chat-FP8": { - "id": "meituan-longcat/LongCat-Flash-Chat-FP8", - "name": "LongCat Flash", - "family": "longcat", - "attachment": false, - "reasoning": false, + "claude-sonnet-4-5": { + "id": "claude-sonnet-4-5", + "name": "Claude Sonnet 4.5", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-08-31", - "last_updated": "2025-08-31", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-07-31", + "release_date": "2025-11-18", + "last_updated": "2025-11-18", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.7 }, - "limit": { "context": 128000, "input": 128000, "output": 32768 } + "limit": { + "context": 200000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1" + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "TEE/kimi-k2-thinking": { - "id": "TEE/kimi-k2-thinking", - "name": "Kimi K2 Thinking TEE", - "family": "kimi-thinking", + "phi-4": { + "id": "phi-4", + "name": "Phi-4", + "family": "phi", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-11-06", - "last_updated": "2025-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 2 }, - "limit": { "context": 128000, "input": 128000, "output": 65535 } + "temperature": true, + "knowledge": "2023-10", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0.125, + "output": 0.5 + } }, - "TEE/kimi-k2.5": { - "id": "TEE/kimi-k2.5", - "name": "Kimi K2.5 TEE", - "family": "kimi", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2026-01-29", - "last_updated": "2026-01-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "gpt-5": { + "id": "gpt-5", + "name": "GPT-5", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 1.9 }, - "limit": { "context": 128000, "input": 128000, "output": 65535 } + "limit": { + "context": 272000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.13 + } }, - "TEE/glm-4.7-flash": { - "id": "TEE/glm-4.7-flash", - "name": "GLM 4.7 Flash TEE", - "family": "glm-flash", + "gpt-4-32k": { + "id": "gpt-4-32k", + "name": "GPT-4 32K", + "family": "gpt", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2026-01-19", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2023-11", + "release_date": "2023-03-14", + "last_updated": "2023-03-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.5 }, - "limit": { "context": 203000, "input": 203000, "output": 65535 } + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 60, + "output": 120 + } }, - "TEE/gemma-3-27b-it": { - "id": "TEE/gemma-3-27b-it", - "name": "Gemma 3 27B TEE", - "family": "gemma", + "cohere-embed-v3-english": { + "id": "cohere-embed-v3-english", + "name": "Embed v3 English", + "family": "cohere-embed", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-03-10", - "last_updated": "2025-03-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.8 }, - "limit": { "context": 131072, "input": 131072, "output": 8192 } + "temperature": false, + "release_date": "2023-11-07", + "last_updated": "2023-11-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 512, + "output": 1024 + }, + "cost": { + "input": 0.1, + "output": 0 + } }, - "TEE/kimi-k2.5-thinking": { - "id": "TEE/kimi-k2.5-thinking", - "name": "Kimi K2.5 Thinking TEE", - "family": "kimi-thinking", + "phi-4-reasoning-plus": { + "id": "phi-4-reasoning-plus", + "name": "Phi-4-reasoning-plus", + "family": "phi", "attachment": false, "reasoning": true, "tool_call": false, - "structured_output": false, - "release_date": "2026-01-29", - "last_updated": "2026-01-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 1.9 }, - "limit": { "context": 128000, "input": 128000, "output": 65535 } + "temperature": true, + "knowledge": "2023-10", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32000, + "output": 4096 + }, + "cost": { + "input": 0.125, + "output": 0.5 + } }, - "TEE/gpt-oss-120b": { - "id": "TEE/gpt-oss-120b", - "name": "GPT-OSS 120B TEE", - "family": "gpt-oss", - "attachment": false, + "mistral-medium-2505": { + "id": "mistral-medium-2505", + "name": "Mistral Medium 3", + "family": "mistral-medium", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2025-05-07", + "last_updated": "2025-05-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 2 }, - "limit": { "context": 131072, "input": 131072, "output": 16384 } + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0.4, + "output": 2 + } }, - "TEE/qwen3-coder": { - "id": "TEE/qwen3-coder", - "name": "Qwen3 Coder 480B TEE", - "family": "qwen", + "gpt-3.5-turbo-instruct": { + "id": "gpt-3.5-turbo-instruct", + "name": "GPT-3.5 Turbo Instruct", + "family": "gpt", "attachment": false, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2021-08", + "release_date": "2023-09-21", + "last_updated": "2023-09-21", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.5, "output": 2 }, - "limit": { "context": 128000, "input": 128000, "output": 32768 } + "limit": { + "context": 4096, + "output": 4096 + }, + "cost": { + "input": 1.5, + "output": 2 + } }, - "TEE/minimax-m2.1": { - "id": "TEE/minimax-m2.1", - "name": "MiniMax M2.1 TEE", - "family": "minimax", + "deepseek-r1-0528": { + "id": "deepseek-r1-0528", + "name": "DeepSeek-R1-0528", + "family": "deepseek-thinking", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 200000, "input": 200000, "output": 131072 } + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-05-28", + "last_updated": "2025-05-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 163840, + "output": 163840 + }, + "cost": { + "input": 1.35, + "output": 5.4 + } }, - "TEE/qwen2.5-vl-72b-instruct": { - "id": "TEE/qwen2.5-vl-72b-instruct", - "name": "Qwen2.5 VL 72B TEE", - "family": "qwen", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-02-01", - "last_updated": "2025-02-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.7, "output": 0.7 }, - "limit": { "context": 65536, "input": 65536, "output": 8192 } + "kimi-k2-thinking": { + "id": "kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "family": "kimi-thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": true, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-11-06", + "last_updated": "2025-12-02", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 2.5, + "cache_read": 0.15 + } }, - "TEE/glm-4.6": { - "id": "TEE/glm-4.6", - "name": "GLM 4.6 TEE", - "family": "glm", + "gpt-5.1-codex": { + "id": "gpt-5.1-codex", + "name": "GPT-5.1 Codex", + "family": "gpt-codex", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-14", + "last_updated": "2025-11-14", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text", "image", "audio"] + }, "open_weights": false, - "cost": { "input": 0.75, "output": 2 }, - "limit": { "context": 203000, "input": 203000, "output": 65535 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "TEE/deepseek-v3.1": { - "id": "TEE/deepseek-v3.1", - "name": "DeepSeek V3.1 TEE", - "family": "deepseek", + "codestral-2501": { + "id": "codestral-2501", + "name": "Codestral 25.01", + "family": "codestral", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-08-21", - "last_updated": "2025-08-21", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2024-03", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 2.5 }, - "limit": { "context": 164000, "input": 164000, "output": 8192 } + "limit": { + "context": 256000, + "output": 256000 + }, + "cost": { + "input": 0.3, + "output": 0.9 + } }, - "TEE/llama3-3-70b": { - "id": "TEE/llama3-3-70b", - "name": "Llama 3.3 70B", + "llama-4-maverick-17b-128e-instruct-fp8": { + "id": "llama-4-maverick-17b-128e-instruct-fp8", + "name": "Llama 4 Maverick 17B 128E Instruct FP8", "family": "llama", - "attachment": false, + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-03", - "last_updated": "2025-07-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 2 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "tool_call": true, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.25, + "output": 1 + } }, - "TEE/glm-5": { - "id": "TEE/glm-5", - "name": "GLM 5 TEE", - "family": "glm", + "mai-ds-r1": { + "id": "mai-ds-r1", + "name": "MAI-DS-R1", + "family": "mai", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": false, - "structured_output": false, - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2024-06", + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.2, "output": 3.5 }, - "limit": { "context": 203000, "input": 203000, "output": 65535 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 1.35, + "output": 5.4 + } }, - "TEE/qwen3.5-397b-a17b": { - "id": "TEE/qwen3.5-397b-a17b", - "name": "Qwen3.5 397B A17B TEE", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2026-02-28", - "last_updated": "2026-02-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "gpt-5.1-codex-max": { + "id": "gpt-5.1-codex-max", + "name": "GPT-5.1 Codex Max", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.6, "output": 3.6 }, - "limit": { "context": 258048, "input": 258048, "output": 65536 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "TEE/glm-4.7": { - "id": "TEE/glm-4.7", - "name": "GLM 4.7 TEE", - "family": "glm", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2026-01-29", - "last_updated": "2026-01-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "claude-sonnet-4-6": { + "id": "claude-sonnet-4-6", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.85, "output": 3.3 }, - "limit": { "context": 131000, "input": 131000, "output": 65535 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "provider": { + "npm": "@ai-sdk/anthropic", + "api": "https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1" + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "TEE/deepseek-r1-0528": { - "id": "TEE/deepseek-r1-0528", - "name": "DeepSeek R1 0528 TEE", - "family": "deepseek", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-05-28", - "last_updated": "2025-05-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "gpt-5.5": { + "id": "gpt-5.5", + "name": "GPT-5.5", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-12-01", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 2 }, - "limit": { "context": 128000, "input": 128000, "output": 65536 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 5, + "output": 30, + "cache_read": 0.5, + "context_over_200k": { + "input": 10, + "output": 45, + "cache_read": 1 + }, + "tiers": [ + { + "input": 10, + "output": 45, + "cache_read": 1, + "tier": { + "type": "context", + "size": 272000 + } + } + ] + } }, - "TEE/gpt-oss-20b": { - "id": "TEE/gpt-oss-20b", - "name": "GPT-OSS 20B TEE", - "family": "gpt-oss", - "attachment": false, + "gpt-4-turbo": { + "id": "gpt-4-turbo", + "name": "GPT-4 Turbo", + "family": "gpt", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2023-11-06", + "last_updated": "2024-04-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.8 }, - "limit": { "context": 131072, "input": 131072, "output": 8192 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 10, + "output": 30 + } }, - "TEE/deepseek-v3.2": { - "id": "TEE/deepseek-v3.2", - "name": "DeepSeek V3.2 TEE", - "family": "deepseek", - "attachment": false, + "gpt-4o-mini": { + "id": "gpt-4o-mini", + "name": "GPT-4o mini", + "family": "gpt-mini", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2023-09", + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 1 }, - "limit": { "context": 164000, "input": 164000, "output": 65536 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.15, + "output": 0.6, + "cache_read": 0.08 + } }, - "TEE/qwen3-30b-a3b-instruct-2507": { - "id": "TEE/qwen3-30b-a3b-instruct-2507", - "name": "Qwen3 30B A3B Instruct 2507 TEE", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-29", - "last_updated": "2025-07-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "gpt-5.4-mini": { + "id": "gpt-5.4-mini", + "name": "GPT-5.4 Mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.44999999999999996 }, - "limit": { "context": 262000, "input": 262000, "output": 32768 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.75, + "output": 4.5, + "cache_read": 0.075 + } }, - "chutesai/Mistral-Small-3.2-24B-Instruct-2506": { - "id": "chutesai/Mistral-Small-3.2-24B-Instruct-2506", - "name": "Mistral Small 3.2 24b Instruct", - "family": "chutesai", + "cohere-command-r-08-2024": { + "id": "cohere-command-r-08-2024", + "name": "Command R", + "family": "command-r", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-04-15", - "last_updated": "2025-04-15", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.4 }, - "limit": { "context": 128000, "input": 128000, "output": 131072 } + "tool_call": true, + "temperature": true, + "knowledge": "2024-06-01", + "release_date": "2024-08-30", + "last_updated": "2024-08-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4000 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "Infermatic/MN-12B-Inferor-v0.0": { - "id": "Infermatic/MN-12B-Inferor-v0.0", - "name": "Mistral Nemo Inferor 12B", - "family": "mistral-nemo", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-07-01", - "last_updated": "2024-07-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "o4-mini": { + "id": "o4-mini", + "name": "o4-mini", + "family": "o-mini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25499999999999995, "output": 0.49299999999999994 }, - "limit": { "context": 16384, "input": 16384, "output": 8192 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.28 + } }, - "aion-labs/aion-rp-llama-3.1-8b": { - "id": "aion-labs/aion-rp-llama-3.1-8b", - "name": "Llama 3.1 8b (uncensored)", - "family": "llama", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "gpt-5.4-nano": { + "id": "gpt-5.4-nano", + "name": "GPT-5.4 Nano", + "family": "gpt-nano", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2006, "output": 0.2006 }, - "limit": { "context": 32768, "input": 32768, "output": 16384 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.2, + "output": 1.25, + "cache_read": 0.02 + } }, - "aion-labs/aion-1.0-mini": { - "id": "aion-labs/aion-1.0-mini", - "name": "Aion 1.0 mini (DeepSeek)", - "family": "deepseek", + "grok-code-fast-1": { + "id": "grok-code-fast-1", + "name": "Grok Code Fast 1", + "family": "grok", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-02-20", - "last_updated": "2025-02-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2023-10", + "release_date": "2025-08-28", + "last_updated": "2025-08-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.7989999999999999, "output": 1.394 }, - "limit": { "context": 131072, "input": 131072, "output": 8192 } + "limit": { + "context": 256000, + "output": 10000 + }, + "cost": { + "input": 0.2, + "output": 1.5, + "cache_read": 0.02 + } }, - "aion-labs/aion-1.0": { - "id": "aion-labs/aion-1.0", - "name": "Aion 1.0", - "family": "llama", - "attachment": false, - "reasoning": false, - "tool_call": false, + "gpt-5.4-pro": { + "id": "gpt-5.4-pro", + "name": "GPT-5.4 Pro", + "family": "gpt-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, "structured_output": false, - "release_date": "2025-02-01", - "last_updated": "2025-02-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3.995, "output": 7.99 }, - "limit": { "context": 65536, "input": 65536, "output": 8192 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 30, + "output": 180, + "context_over_200k": { + "input": 60, + "output": 270 + }, + "tiers": [ + { + "input": 60, + "output": 270, + "tier": { + "type": "context", + "size": 272000 + } + } + ] + } }, - "mlabonne/NeuralDaredevil-8B-abliterated": { - "id": "mlabonne/NeuralDaredevil-8B-abliterated", - "name": "Neural Daredevil 8B abliterated", - "family": "llama", + "o3-mini": { + "id": "o3-mini", + "name": "o3-mini", + "family": "o-mini", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2024-12-20", + "last_updated": "2025-01-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.44, "output": 0.44 }, - "limit": { "context": 8192, "input": 8192, "output": 8192 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.55 + } }, - "moonshotai/kimi-k2-thinking": { - "id": "moonshotai/kimi-k2-thinking", - "name": "Kimi K2 Thinking", - "family": "kimi-thinking", + "grok-4": { + "id": "grok-4", + "name": "Grok 4", + "family": "grok", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, - "release_date": "2025-11-06", - "last_updated": "2025-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2025-07", + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 256000, "input": 256000, "output": 262144 } + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "reasoning": 15, + "cache_read": 0.75 + } }, - "moonshotai/kimi-k2.5": { - "id": "moonshotai/kimi-k2.5", - "name": "Kimi K2.5", - "family": "kimi", + "gpt-5.4": { + "id": "gpt-5.4", + "name": "GPT-5.4", + "family": "gpt", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": false, - "release_date": "2026-01-26", - "last_updated": "2026-01-26", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 1.9 }, - "limit": { "context": 256000, "input": 256000, "output": 65536 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 2.5, + "output": 15, + "cache_read": 0.25, + "context_over_200k": { + "input": 5, + "output": 22.5, + "cache_read": 0.5 + }, + "tiers": [ + { + "input": 5, + "output": 22.5, + "cache_read": 0.5, + "tier": { + "type": "context", + "size": 272000 + } + } + ] + } }, - "moonshotai/kimi-k2.5:thinking": { - "id": "moonshotai/kimi-k2.5:thinking", - "name": "Kimi K2.5 Thinking", - "family": "kimi-thinking", + "gpt-4.1-nano": { + "id": "gpt-4.1-nano", + "name": "GPT-4.1 nano", + "family": "gpt-nano", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, - "structured_output": false, - "release_date": "2026-01-26", - "last_updated": "2026-01-26", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 1.9 }, - "limit": { "context": 256000, "input": 256000, "output": 65536 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.03 + } }, - "moonshotai/kimi-k2-thinking-turbo-original": { - "id": "moonshotai/kimi-k2-thinking-turbo-original", - "name": "Kimi K2 Thinking Turbo Original", - "family": "kimi-thinking", + "grok-3-mini": { + "id": "grok-3-mini", + "name": "Grok 3 Mini", + "family": "grok", "attachment": false, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-11-06", - "last_updated": "2025-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.15, "output": 8 }, - "limit": { "context": 256000, "input": 256000, "output": 16384 } - }, - "moonshotai/Kimi-K2-Instruct-0905": { - "id": "moonshotai/Kimi-K2-Instruct-0905", - "name": "Kimi K2 0905", - "family": "kimi", - "attachment": false, - "reasoning": false, "tool_call": true, - "structured_output": true, - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 256000, "input": 256000, "output": 262144 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.3, + "output": 0.5, + "reasoning": 0.5, + "cache_read": 0.075 + } }, - "moonshotai/kimi-k2-thinking-original": { - "id": "moonshotai/kimi-k2-thinking-original", - "name": "Kimi K2 Thinking Original", - "family": "kimi-thinking", - "attachment": false, + "o3": { + "id": "o3", + "name": "o3", + "family": "o", + "attachment": true, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-11-06", - "last_updated": "2025-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.6, "output": 2.5 }, - "limit": { "context": 256000, "input": 256000, "output": 16384 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } }, - "moonshotai/kimi-k2-instruct-0711": { - "id": "moonshotai/kimi-k2-instruct-0711", - "name": "Kimi K2 0711", - "family": "kimi", - "attachment": false, - "reasoning": false, + "gpt-5-pro": { + "id": "gpt-5-pro", + "name": "GPT-5 Pro", + "family": "gpt-pro", + "attachment": true, + "reasoning": true, "tool_call": true, "structured_output": true, - "release_date": "2025-07-11", - "last_updated": "2025-07-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-10-06", + "last_updated": "2025-10-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 2 }, - "limit": { "context": 128000, "input": 128000, "output": 8192 } + "limit": { + "context": 400000, + "output": 272000 + }, + "cost": { + "input": 15, + "output": 120 + } }, - "moonshotai/Kimi-Dev-72B": { - "id": "moonshotai/Kimi-Dev-72B", - "name": "Kimi Dev 72B", - "family": "kimi", + "gpt-4o": { + "id": "gpt-4o", + "name": "GPT-4o", + "family": "gpt", "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-04-15", - "last_updated": "2025-04-15", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2023-09", + "release_date": "2024-05-13", + "last_updated": "2024-08-06", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 0.4 }, - "limit": { "context": 128000, "input": 128000, "output": 131072 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 2.5, + "output": 10, + "cache_read": 1.25 + } }, - "moonshotai/kimi-k2-instruct": { - "id": "moonshotai/kimi-k2-instruct", - "name": "Kimi K2 Instruct", - "family": "kimi", + "cohere-command-r-plus-08-2024": { + "id": "cohere-command-r-plus-08-2024", + "name": "Command R+", + "family": "command-r", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, - "release_date": "2025-07-01", - "last_updated": "2025-07-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 2 }, - "limit": { "context": 256000, "input": 256000, "output": 8192 } + "temperature": true, + "knowledge": "2024-06-01", + "release_date": "2024-08-30", + "last_updated": "2024-08-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4000 + }, + "cost": { + "input": 2.5, + "output": 10 + } }, - "tencent/Hunyuan-MT-7B": { - "id": "tencent/Hunyuan-MT-7B", - "name": "Hunyuan MT 7B", - "family": "hunyuan", - "attachment": false, + "gpt-4.1": { + "id": "gpt-4.1", + "name": "GPT-4.1", + "family": "gpt", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-09-18", - "last_updated": "2025-09-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 10, "output": 20 }, - "limit": { "context": 8192, "input": 8192, "output": 8192 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } }, - "Envoid/Llama-3.05-NT-Storybreaker-Ministral-70B": { - "id": "Envoid/Llama-3.05-NT-Storybreaker-Ministral-70B", - "name": "Llama 3.05 Storybreaker Ministral 70b", - "family": "llama", - "attachment": false, + "gpt-4.1-mini": { + "id": "gpt-4.1-mini", + "name": "GPT-4.1 mini", + "family": "gpt-mini", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.49299999999999994, "output": 0.49299999999999994 }, - "limit": { "context": 16384, "input": 16384, "output": 8192 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 0.4, + "output": 1.6, + "cache_read": 0.1 + } }, - "Envoid/Llama-3.05-Nemotron-Tenyxchat-Storybreaker-70B": { - "id": "Envoid/Llama-3.05-Nemotron-Tenyxchat-Storybreaker-70B", - "name": "Nemotron Tenyxchat Storybreaker 70b", - "family": "nemotron", + "grok-3": { + "id": "grok-3", + "name": "Grok 3", + "family": "grok", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-12-01", - "last_updated": "2024-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.49299999999999994, "output": 0.49299999999999994 }, - "limit": { "context": 16384, "input": 16384, "output": 8192 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.75 + } }, - "Tongyi-Zhiwen/QwenLong-L1-32B": { - "id": "Tongyi-Zhiwen/QwenLong-L1-32B", - "name": "QwenLong L1 32B", - "family": "qwen", - "attachment": false, + "grok-4-fast-non-reasoning": { + "id": "grok-4-fast-non-reasoning", + "name": "Grok 4 Fast (Non-Reasoning)", + "family": "grok", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-01-25", - "last_updated": "2025-01-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2025-07", + "release_date": "2025-09-19", + "last_updated": "2025-09-19", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.13999999999999999, "output": 0.6 }, - "limit": { "context": 128000, "input": 128000, "output": 40960 } - }, - "featherless-ai/Qwerky-72B": { - "id": "featherless-ai/Qwerky-72B", - "name": "Qwerky 72B", - "family": "qwerky", + "limit": { + "context": 2000000, + "output": 30000 + }, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05 + } + } + } + }, + "fastrouter": { + "id": "fastrouter", + "env": ["FASTROUTER_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://go.fastrouter.ai/api/v1", + "name": "FastRouter", + "doc": "https://fastrouter.ai/models", + "models": { + "x-ai/grok-4": { + "id": "x-ai/grok-4", + "name": "Grok 4", + "family": "grok", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-03-20", - "last_updated": "2025-03-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-07", + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 0.5 }, - "limit": { "context": 32000, "input": 32000, "output": 8192 } + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.75, + "cache_write": 15 + } }, - "Sao10K/L3.3-70B-Euryale-v2.3": { - "id": "Sao10K/L3.3-70B-Euryale-v2.3", - "name": "Llama 3.3 70B Euryale", - "family": "llama", + "deepseek-ai/deepseek-r1-distill-llama-70b": { + "id": "deepseek-ai/deepseek-r1-distill-llama-70b", + "name": "DeepSeek R1 Distill Llama 70B", + "family": "deepseek-thinking", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": false, - "structured_output": false, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.49299999999999994, "output": 0.49299999999999994 }, - "limit": { "context": 20480, "input": 20480, "output": 16384 } + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-01-23", + "last_updated": "2025-01-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.03, + "output": 0.14 + } }, - "Sao10K/L3.1-70B-Hanami-x1": { - "id": "Sao10K/L3.1-70B-Hanami-x1", - "name": "Llama 3.1 70B Hanami", - "family": "llama", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "openai/gpt-5-mini": { + "id": "openai/gpt-5-mini", + "name": "GPT-5 Mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10-01", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.49299999999999994, "output": 0.49299999999999994 }, - "limit": { "context": 16384, "input": 16384, "output": 16384 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.025 + } }, - "Sao10K/L3.1-70B-Euryale-v2.2": { - "id": "Sao10K/L3.1-70B-Euryale-v2.2", - "name": "Llama 3.1 70B Euryale", - "family": "llama", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "openai/gpt-5-nano": { + "id": "openai/gpt-5-nano", + "name": "GPT-5 Nano", + "family": "gpt-nano", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10-01", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.306, "output": 0.357 }, - "limit": { "context": 20480, "input": 20480, "output": 16384 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 0.05, + "output": 0.4, + "cache_read": 0.005 + } }, - "Sao10K/L3-8B-Stheno-v3.2": { - "id": "Sao10K/L3-8B-Stheno-v3.2", - "name": "Sao10K Stheno 8b", - "family": "llama", + "openai/gpt-oss-20b": { + "id": "openai/gpt-oss-20b", + "name": "GPT OSS 20B", + "family": "gpt-oss", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-11-29", - "last_updated": "2024-11-29", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2006, "output": 0.2006 }, - "limit": { "context": 16384, "input": 16384, "output": 8192 } + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.05, + "output": 0.2 + } }, - "inflection/inflection-3-pi": { - "id": "inflection/inflection-3-pi", - "name": "Inflection 3 Pi", + "openai/gpt-5": { + "id": "openai/gpt-5", + "name": "GPT-5", "family": "gpt", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-10-11", - "last_updated": "2024-10-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10-01", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.499, "output": 9.996 }, - "limit": { "context": 8000, "input": 8000, "output": 4096 } + "limit": { + "context": 400000, + "output": 128000 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + } }, - "inflection/inflection-3-productivity": { - "id": "inflection/inflection-3-productivity", - "name": "Inflection 3 Productivity", - "family": "gpt", + "openai/gpt-oss-120b": { + "id": "openai/gpt-oss-120b", + "name": "GPT OSS 120B", + "family": "gpt-oss", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-10-11", - "last_updated": "2024-10-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.499, "output": 9.996 }, - "limit": { "context": 8000, "input": 8000, "output": 4096 } + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "GalrionSoftworks/MN-LooseCannon-12B-v1": { - "id": "GalrionSoftworks/MN-LooseCannon-12B-v1", - "name": "MN-LooseCannon-12B-v1", - "family": "mistral-nemo", + "z-ai/glm-5": { + "id": "z-ai/glm-5", + "name": "GLM-5", + "family": "glm", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-07-01", - "last_updated": "2024-07-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.49299999999999994, "output": 0.49299999999999994 }, - "limit": { "context": 16384, "input": 16384, "output": 8192 } + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.95, + "output": 3.15 + } }, - "LatitudeGames/Wayfarer-Large-70B-Llama-3.3": { - "id": "LatitudeGames/Wayfarer-Large-70B-Llama-3.3", - "name": "Llama 3.3 70B Wayfarer", - "family": "llama", + "qwen/qwen3-coder": { + "id": "qwen/qwen3-coder", + "name": "Qwen3 Coder", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-02-20", - "last_updated": "2025-02-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.700000007, "output": 0.700000007 }, - "limit": { "context": 16384, "input": 16384, "output": 16384 } + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 66536 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "anthracite-org/magnum-v4-72b": { - "id": "anthracite-org/magnum-v4-72b", - "name": "Magnum v4 72B", - "family": "llama", + "google/gemini-2.5-pro": { + "id": "google/gemini-2.5-pro", + "name": "Gemini 2.5 Pro", + "family": "gemini-pro", "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.006, "output": 2.992 }, - "limit": { "context": 16384, "input": 16384, "output": 8192 } - }, - "anthracite-org/magnum-v2-72b": { - "id": "anthracite-org/magnum-v2-72b", - "name": "Magnum V2 72B", - "family": "llama", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-07-01", - "last_updated": "2024-07-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.006, "output": 2.992 }, - "limit": { "context": 16384, "input": 16384, "output": 8192 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.31 + } }, - "tngtech/tng-r1t-chimera": { - "id": "tngtech/tng-r1t-chimera", - "name": "TNG R1T Chimera", - "family": "tngtech", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-11-26", - "last_updated": "2025-11-26", - "modalities": { "input": ["text"], "output": ["text"] }, + "google/gemini-2.5-flash": { + "id": "google/gemini-2.5-flash", + "name": "Gemini 2.5 Flash", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 128000, "input": 128000, "output": 65536 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.0375 + } }, - "tngtech/DeepSeek-TNG-R1T2-Chimera": { - "id": "tngtech/DeepSeek-TNG-R1T2-Chimera", - "name": "DeepSeek TNG R1T2 Chimera", - "family": "tngtech", + "moonshotai/kimi-k2": { + "id": "moonshotai/kimi-k2", + "name": "Kimi K2", + "family": "kimi", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.31, "output": 0.31 }, - "limit": { "context": 128000, "input": 128000, "output": 8192 } - }, - "deepcogito/cogito-v2.1-671b": { - "id": "deepcogito/cogito-v2.1-671b", - "name": "Cogito v2.1 671B MoE", - "family": "cogito", - "attachment": false, - "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-11-19", - "last_updated": "2025-11-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 1.25 }, - "limit": { "context": 128000, "input": 128000, "output": 16384 } + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-07-11", + "last_updated": "2025-07-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.55, + "output": 2.2 + } }, - "deepcogito/cogito-v1-preview-qwen-32B": { - "id": "deepcogito/cogito-v1-preview-qwen-32B", - "name": "Cogito v1 Preview Qwen 32B", - "family": "qwen", - "attachment": false, + "openai/gpt-4.1": { + "id": "openai/gpt-4.1", + "name": "GPT-4.1", + "family": "gpt", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-05-10", - "last_updated": "2025-05-10", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.7999999999999998, "output": 1.7999999999999998 }, - "limit": { "context": 128000, "input": 128000, "output": 32768 } + "limit": { + "context": 1047576, + "output": 32768 + }, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + } }, - "huihui-ai/DeepSeek-R1-Distill-Llama-70B-abliterated": { - "id": "huihui-ai/DeepSeek-R1-Distill-Llama-70B-abliterated", - "name": "DeepSeek R1 Llama 70B Abliterated", - "family": "deepseek", - "attachment": false, + "anthropic/claude-opus-4.1": { + "id": "anthropic/claude-opus-4.1", + "name": "Claude Opus 4.1", + "family": "claude-opus", + "attachment": true, "reasoning": true, - "tool_call": false, - "structured_output": false, - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.7, "output": 0.7 }, - "limit": { "context": 16384, "input": 16384, "output": 8192 } - }, - "huihui-ai/Llama-3.3-70B-Instruct-abliterated": { - "id": "huihui-ai/Llama-3.3-70B-Instruct-abliterated", - "name": "Llama 3.3 70B Instruct abliterated", - "family": "llama", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-08-08", - "last_updated": "2025-08-08", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.7, "output": 0.7 }, - "limit": { "context": 16384, "input": 16384, "output": 16384 } + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "huihui-ai/Qwen2.5-32B-Instruct-abliterated": { - "id": "huihui-ai/Qwen2.5-32B-Instruct-abliterated", - "name": "Qwen 2.5 32B Abliterated", + "anthropic/claude-sonnet-4": { + "id": "anthropic/claude-sonnet-4", + "name": "Claude Sonnet 4", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } + } + } + }, + "stackit": { + "id": "stackit", + "env": ["STACKIT_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.openai-compat.model-serving.eu01.onstackit.cloud/v1", + "name": "STACKIT", + "doc": "https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/basics/available-shared-models", + "models": { + "Qwen/Qwen3-VL-Embedding-8B": { + "id": "Qwen/Qwen3-VL-Embedding-8B", + "name": "Qwen3-VL Embedding 8B", "family": "qwen", - "attachment": false, + "attachment": true, "reasoning": false, "tool_call": false, "structured_output": false, - "release_date": "2025-01-06", - "last_updated": "2025-01-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.7, "output": 0.7 }, - "limit": { "context": 32768, "input": 32768, "output": 8192 } + "temperature": false, + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32000, + "output": 4096 + }, + "cost": { + "input": 0.09, + "output": 0.09 + } }, - "huihui-ai/DeepSeek-R1-Distill-Qwen-32B-abliterated": { - "id": "huihui-ai/DeepSeek-R1-Distill-Qwen-32B-abliterated", - "name": "DeepSeek R1 Qwen Abliterated", + "Qwen/Qwen3-VL-235B-A22B-Instruct-FP8": { + "id": "Qwen/Qwen3-VL-235B-A22B-Instruct-FP8", + "name": "Qwen3-VL 235B", "family": "qwen", - "attachment": false, - "reasoning": true, - "tool_call": false, + "attachment": true, + "reasoning": false, + "tool_call": true, "structured_output": false, - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.4, "output": 1.4 }, - "limit": { "context": 16384, "input": 16384, "output": 8192 } + "temperature": true, + "release_date": "2024-11-01", + "last_updated": "2024-11-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 218000, + "output": 8192 + }, + "cost": { + "input": 1.64, + "output": 1.91 + } }, - "huihui-ai/Llama-3.1-Nemotron-70B-Instruct-HF-abliterated": { - "id": "huihui-ai/Llama-3.1-Nemotron-70B-Instruct-HF-abliterated", - "name": "Nemotron 3.1 70B abliterated", - "family": "nemotron", + "neuralmagic/Meta-Llama-3.1-8B-Instruct-FP8": { + "id": "neuralmagic/Meta-Llama-3.1-8B-Instruct-FP8", + "name": "Llama 3.1 8B", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, + "tool_call": true, + "structured_output": true, + "temperature": true, "release_date": "2024-07-23", "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.7, "output": 0.7 }, - "limit": { "context": 16384, "input": 16384, "output": 16384 } - }, - "mistralai/mistral-medium-3.1": { - "id": "mistralai/mistral-medium-3.1", - "name": "Mistral Medium 3.1", - "family": "mistral-medium", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 131072, "input": 131072, "output": 32768 } + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.16, + "output": 0.27 + } }, - "mistralai/mistral-7b-instruct": { - "id": "mistralai/mistral-7b-instruct", - "name": "Mistral 7B Instruct", + "neuralmagic/Mistral-Nemo-Instruct-2407-FP8": { + "id": "neuralmagic/Mistral-Nemo-Instruct-2407-FP8", + "name": "Mistral Nemo", "family": "mistral", - "attachment": true, + "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "structured_output": false, - "release_date": "2024-05-27", - "last_updated": "2024-05-27", - "modalities": { "input": ["text", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.0544, "output": 0.0544 }, - "limit": { "context": 32768, "input": 32768, "output": 8192 } + "temperature": true, + "release_date": "2024-07-01", + "last_updated": "2024-07-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.49, + "output": 0.71 + } }, - "mistralai/devstral-2-123b-instruct-2512": { - "id": "mistralai/devstral-2-123b-instruct-2512", - "name": "Devstral 2 123B", - "family": "devstral", + "openai/gpt-oss-120b": { + "id": "openai/gpt-oss-120b", + "name": "GPT-OSS 120B", + "family": "gpt", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "structured_output": false, - "release_date": "2025-12-09", - "last_updated": "2025-12-09", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.4, "output": 1.4 }, - "limit": { "context": 262144, "input": 262144, "output": 65536 } + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131000, + "output": 8192 + }, + "cost": { + "input": 0.49, + "output": 0.71 + } }, - "mistralai/mixtral-8x22b-instruct-v0.1": { - "id": "mistralai/mixtral-8x22b-instruct-v0.1", - "name": "Mixtral 8x22B", - "family": "mixtral", + "cortecs/Llama-3.3-70B-Instruct-FP8-Dynamic": { + "id": "cortecs/Llama-3.3-70B-Instruct-FP8-Dynamic", + "name": "Llama 3.3 70B", + "family": "llama", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "structured_output": false, - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.8999999999999999, "output": 0.8999999999999999 }, - "limit": { "context": 65536, "input": 65536, "output": 32768 } + "temperature": true, + "release_date": "2024-12-05", + "last_updated": "2024-12-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.49, + "output": 0.71 + } }, - "mistralai/mistral-large-3-675b-instruct-2512": { - "id": "mistralai/mistral-large-3-675b-instruct-2512", - "name": "Mistral Large 3 675B", - "family": "mistral-large", + "google/gemma-3-27b-it": { + "id": "google/gemma-3-27b-it", + "name": "Gemma 3 27B", + "family": "gemma", "attachment": true, "reasoning": false, "tool_call": false, "structured_output": false, - "release_date": "2025-12-02", - "last_updated": "2025-12-02", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1, "output": 3 }, - "limit": { "context": 262144, "input": 262144, "output": 256000 } + "temperature": true, + "release_date": "2025-05-17", + "last_updated": "2025-05-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 37000, + "output": 8192 + }, + "cost": { + "input": 0.49, + "output": 0.71 + } }, - "mistralai/Devstral-Small-2505": { - "id": "mistralai/Devstral-Small-2505", - "name": "Mistral Devstral Small 2505", - "family": "devstral", + "intfloat/e5-mistral-7b-instruct": { + "id": "intfloat/e5-mistral-7b-instruct", + "name": "E5 Mistral 7B", + "family": "mistral", "attachment": false, "reasoning": false, "tool_call": false, "structured_output": false, - "release_date": "2025-08-02", - "last_updated": "2025-08-02", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.060000000000000005, "output": 0.060000000000000005 }, - "limit": { "context": 32768, "input": 32768, "output": 8192 } - }, - "mistralai/mistral-medium-3": { - "id": "mistralai/mistral-medium-3", - "name": "Mistral Medium 3", - "family": "mistral-medium", + "temperature": false, + "release_date": "2023-12-11", + "last_updated": "2023-12-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 4096, + "output": 4096 + }, + "cost": { + "input": 0.02, + "output": 0.02 + } + } + } + }, + "tencent-coding-plan": { + "id": "tencent-coding-plan", + "env": ["TENCENT_CODING_PLAN_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.lkeap.cloud.tencent.com/coding/v3", + "name": "Tencent Coding Plan (China)", + "doc": "https://cloud.tencent.com/document/product/1772/128947", + "models": { + "kimi-k2.5": { + "id": "kimi-k2.5", + "name": "Kimi-K2.5", + "family": "kimi", "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + }, + "glm-5": { + "id": "glm-5", + "name": "GLM-5", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 131072, "input": 131072, "output": 32768 } + "limit": { + "context": 202752, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "mistralai/ministral-8b-2512": { - "id": "mistralai/ministral-8b-2512", - "name": "Ministral 8B", - "family": "ministral", + "hunyuan-turbos": { + "id": "hunyuan-turbos", + "name": "Hunyuan-TurboS", + "family": "hunyuan", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-12-04", - "last_updated": "2025-12-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-08", + "last_updated": "2026-03-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.15 }, - "limit": { "context": 262144, "input": 262144, "output": 32768 } + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "mistralai/ministral-14b-2512": { - "id": "mistralai/ministral-14b-2512", - "name": "Ministral 14B", - "family": "ministral", + "hunyuan-t1": { + "id": "hunyuan-t1", + "name": "Hunyuan-T1", + "family": "hunyuan", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-12-04", - "last_updated": "2025-12-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "release_date": "2026-03-08", + "last_updated": "2026-03-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.2 }, - "limit": { "context": 262144, "input": 262144, "output": 32768 } + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "mistralai/Mistral-Nemo-Instruct-2407": { - "id": "mistralai/Mistral-Nemo-Instruct-2407", - "name": "Mistral Nemo", - "family": "mistral-nemo", + "hunyuan-2.0-instruct": { + "id": "hunyuan-2.0-instruct", + "name": "Tencent HY 2.0 Instruct", + "family": "hunyuan", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2024-07-18", - "last_updated": "2024-07-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-08", + "last_updated": "2026-03-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1003, "output": 0.1207 }, - "limit": { "context": 16384, "input": 16384, "output": 8192 } + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "mistralai/codestral-2508": { - "id": "mistralai/codestral-2508", - "name": "Codestral 2508", - "family": "codestral", + "minimax-m2.5": { + "id": "minimax-m2.5", + "name": "MiniMax-M2.5", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + }, + "tc-code-latest": { + "id": "tc-code-latest", + "name": "Auto", + "family": "auto", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-08-01", - "last_updated": "2025-08-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-08", + "last_updated": "2026-03-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 0.8999999999999999 }, - "limit": { "context": 256000, "input": 256000, "output": 32768 } + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "mistralai/mistral-small-creative": { - "id": "mistralai/mistral-small-creative", - "name": "Mistral Small Creative", - "family": "mistral-small", + "hunyuan-2.0-thinking": { + "id": "hunyuan-2.0-thinking", + "name": "Tencent HY 2.0 Think", + "family": "hunyuan", "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "release_date": "2026-03-08", + "last_updated": "2026-03-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + } + } + }, + "privatemode-ai": { + "id": "privatemode-ai", + "env": ["PRIVATEMODE_API_KEY", "PRIVATEMODE_ENDPOINT"], + "npm": "@ai-sdk/openai-compatible", + "api": "http://localhost:8080/v1", + "name": "Privatemode AI", + "doc": "https://docs.privatemode.ai/api/overview", + "models": { + "gemma-3-27b": { + "id": "gemma-3-27b", + "name": "Gemma 3 27B", + "family": "gemma", + "attachment": true, "reasoning": false, "tool_call": true, "structured_output": true, - "release_date": "2025-12-16", - "last_updated": "2025-12-16", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 32768, "input": 32768, "output": 32768 } + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-03-12", + "last_updated": "2025-03-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "mistralai/ministral-14b-instruct-2512": { - "id": "mistralai/ministral-14b-instruct-2512", - "name": "Ministral 3 14B", - "family": "ministral", + "whisper-large-v3": { + "id": "whisper-large-v3", + "name": "Whisper large-v3", + "family": "whisper", "attachment": true, "reasoning": false, "tool_call": false, "structured_output": false, - "release_date": "2025-12-02", - "last_updated": "2025-12-02", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4 }, - "limit": { "context": 262144, "input": 262144, "output": 32768 } + "temperature": true, + "knowledge": "2023-09", + "release_date": "2023-09-01", + "last_updated": "2023-09-01", + "modalities": { + "input": ["audio"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 0, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "mistralai/mistral-large": { - "id": "mistralai/mistral-large", - "name": "Mistral Large 2411", - "family": "mistral-large", + "qwen3-embedding-4b": { + "id": "qwen3-embedding-4b", + "name": "Qwen3-Embedding 4B", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": false, "structured_output": false, - "release_date": "2024-02-26", - "last_updated": "2024-02-26", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.006, "output": 6.001 }, - "limit": { "context": 128000, "input": 128000, "output": 256000 } + "temperature": true, + "knowledge": "2025-06", + "release_date": "2025-06-06", + "last_updated": "2025-06-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32000, + "output": 2560 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "mistralai/ministral-3b-2512": { - "id": "mistralai/ministral-3b-2512", - "name": "Ministral 3B", - "family": "ministral", + "gpt-oss-120b": { + "id": "gpt-oss-120b", + "name": "gpt-oss-120b", + "family": "gpt-oss", + "attachment": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-08", + "release_date": "2025-08-04", + "last_updated": "2025-08-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "qwen3-coder-30b-a3b": { + "id": "qwen3-coder-30b-a3b", + "name": "Qwen3-Coder 30B-A3B", + "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-12-04", - "last_updated": "2025-12-04", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04", + "last_updated": "2025-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } + } + } + }, + "google": { + "id": "google", + "env": ["GOOGLE_GENERATIVE_AI_API_KEY", "GEMINI_API_KEY"], + "npm": "@ai-sdk/google", + "name": "Google", + "doc": "https://ai.google.dev/gemini-api/docs/models", + "models": { + "gemini-flash-lite-latest": { + "id": "gemini-flash-lite-latest", + "name": "Gemini Flash-Lite Latest", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.1 }, - "limit": { "context": 131072, "input": 131072, "output": 32768 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.025 + } }, - "mistralai/mistral-tiny": { - "id": "mistralai/mistral-tiny", - "name": "Mistral Tiny", - "family": "mistral", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2023-12-11", - "last_updated": "2024-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "gemini-2.5-pro-preview-05-06": { + "id": "gemini-2.5-pro-preview-05-06", + "name": "Gemini 2.5 Pro Preview 05-06", + "family": "gemini-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-05-06", + "last_updated": "2025-05-06", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25499999999999995, "output": 0.25499999999999995 }, - "limit": { "context": 32000, "input": 32000, "output": 8192 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.31 + } }, - "mistralai/mixtral-8x7b-instruct-v0.1": { - "id": "mistralai/mixtral-8x7b-instruct-v0.1", - "name": "Mixtral 8x7B", - "family": "mixtral", + "gemini-live-2.5-flash-preview-native-audio": { + "id": "gemini-live-2.5-flash-preview-native-audio", + "name": "Gemini Live 2.5 Flash Preview Native Audio", + "family": "gemini-flash", "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2025-01", + "release_date": "2025-06-17", + "last_updated": "2025-09-18", + "modalities": { + "input": ["text", "audio", "video"], + "output": ["text", "audio"] + }, "open_weights": false, - "cost": { "input": 0.27, "output": 0.27 }, - "limit": { "context": 32768, "input": 32768, "output": 32768 } + "limit": { + "context": 131072, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 2, + "input_audio": 3, + "output_audio": 12 + } }, - "mistralai/mistral-saba": { - "id": "mistralai/mistral-saba", - "name": "Mistral Saba", - "family": "mistral", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-02-17", - "last_updated": "2025-02-17", - "modalities": { "input": ["text"], "output": ["text"] }, + "gemini-3.1-pro-preview-customtools": { + "id": "gemini-3.1-pro-preview-customtools", + "name": "Gemini 3.1 Pro Preview Custom Tools", + "family": "gemini-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-02-19", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1989, "output": 0.595 }, - "limit": { "context": 32000, "input": 32000, "output": 32768 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2, + "tiers": [ + { + "input": 4, + "output": 18, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 4, + "output": 18, + "cache_read": 0.4 + } + } }, - "EVA-UNIT-01/EVA-Qwen2.5-72B-v0.2": { - "id": "EVA-UNIT-01/EVA-Qwen2.5-72B-v0.2", - "name": "EVA-Qwen2.5-72B-v0.2", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": false, - "structured_output": false, + "gemini-2.5-flash-lite-preview-09-2025": { + "id": "gemini-2.5-flash-lite-preview-09-2025", + "name": "Gemini 2.5 Flash Lite Preview 09-25", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-01", "release_date": "2025-09-25", "last_updated": "2025-09-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.7989999999999999, "output": 0.7989999999999999 }, - "limit": { "context": 16384, "input": 16384, "output": 8192 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.025 + } }, - "EVA-UNIT-01/EVA-LLaMA-3.33-70B-v0.1": { - "id": "EVA-UNIT-01/EVA-LLaMA-3.33-70B-v0.1", - "name": "EVA-LLaMA-3.33-70B-v0.1", - "family": "llama", - "attachment": false, + "gemini-1.5-flash": { + "id": "gemini-1.5-flash", + "name": "Gemini 1.5 Flash", + "family": "gemini-flash", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2024-05-14", + "last_updated": "2024-05-14", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.006, "output": 2.006 }, - "limit": { "context": 16384, "input": 16384, "output": 16384 } + "limit": { + "context": 1000000, + "output": 8192 + }, + "cost": { + "input": 0.075, + "output": 0.3, + "cache_read": 0.01875 + } }, - "EVA-UNIT-01/EVA-Qwen2.5-32B-v0.2": { - "id": "EVA-UNIT-01/EVA-Qwen2.5-32B-v0.2", - "name": "EVA-Qwen2.5-32B-v0.2", - "family": "qwen", - "attachment": false, + "gemini-1.5-pro": { + "id": "gemini-1.5-pro", + "name": "Gemini 1.5 Pro", + "family": "gemini-pro", + "attachment": true, "reasoning": false, - "tool_call": false, - "structured_output": false, - "release_date": "2025-07-26", - "last_updated": "2025-07-26", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2024-02-15", + "last_updated": "2024-02-15", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.7989999999999999, "output": 0.7989999999999999 }, - "limit": { "context": 16384, "input": 16384, "output": 8192 } + "limit": { + "context": 1000000, + "output": 8192 + }, + "cost": { + "input": 1.25, + "output": 5, + "cache_read": 0.3125 + } }, - "EVA-UNIT-01/EVA-LLaMA-3.33-70B-v0.0": { - "id": "EVA-UNIT-01/EVA-LLaMA-3.33-70B-v0.0", - "name": "EVA Llama 3.33 70B", - "family": "llama", - "attachment": false, + "gemma-3n-e4b-it": { + "id": "gemma-3n-e4b-it", + "name": "Gemma 3n 4B", + "family": "gemma", + "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": false, - "release_date": "2025-07-26", - "last_updated": "2025-07-26", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.006, "output": 2.006 }, - "limit": { "context": 16384, "input": 16384, "output": 16384 } - } - } - }, - "clarifai": { - "id": "clarifai", - "env": ["CLARIFAI_PAT"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.clarifai.com/v2/ext/openai/v1", - "name": "Clarifai", - "doc": "https://docs.clarifai.com/compute/inference/", - "models": { - "openai/chat-completion/models/gpt-oss-20b": { - "id": "openai/chat-completion/models/gpt-oss-20b", - "name": "GPT OSS 20B", - "family": "gpt-oss", - "attachment": false, - "reasoning": true, - "tool_call": true, "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-12-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-05-20", + "last_updated": "2025-05-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.045, "output": 0.18 }, - "limit": { "context": 131072, "output": 16384 } + "limit": { + "context": 8192, + "output": 2000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "openai/chat-completion/models/gpt-oss-120b-high-throughput": { - "id": "openai/chat-completion/models/gpt-oss-120b-high-throughput", - "name": "GPT OSS 120B High Throughput", - "family": "gpt-oss", - "attachment": false, + "gemini-3.1-flash-lite-preview": { + "id": "gemini-3.1-flash-lite-preview", + "name": "Gemini 3.1 Flash Lite Preview", + "family": "gemini-flash-lite", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2026-02-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.09, "output": 0.36 }, - "limit": { "context": 131072, "output": 16384 } + "knowledge": "2025-01", + "release_date": "2026-03-03", + "last_updated": "2026-03-03", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.25, + "output": 1.5, + "cache_read": 0.025, + "input_audio": 0.5 + } }, - "arcee_ai/AFM/models/trinity-mini": { - "id": "arcee_ai/AFM/models/trinity-mini", - "name": "Trinity Mini", - "family": "trinity-mini", - "attachment": false, + "gemini-3.1-pro-preview": { + "id": "gemini-3.1-pro-preview", + "name": "Gemini 3.1 Pro Preview", + "family": "gemini-pro", + "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-12", - "last_updated": "2026-02-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.045, "output": 0.15 }, - "limit": { "context": 131072, "output": 131072 } + "knowledge": "2025-01", + "release_date": "2026-02-19", + "last_updated": "2026-02-19", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2, + "tiers": [ + { + "input": 4, + "output": 18, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 4, + "output": 18, + "cache_read": 0.4 + } + } }, - "minimaxai/chat-completion/models/MiniMax-M2_5-high-throughput": { - "id": "minimaxai/chat-completion/models/MiniMax-M2_5-high-throughput", - "name": "MiniMax-M2.5 High Throughput", - "family": "minimax", - "attachment": false, - "reasoning": true, + "gemini-2.0-flash": { + "id": "gemini-2.0-flash", + "name": "Gemini 2.0 Flash", + "family": "gemini-flash", + "attachment": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 204800, "output": 131072 } + "knowledge": "2024-06", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.025 + } }, - "deepseek-ai/deepseek-ocr/models/DeepSeek-OCR": { - "id": "deepseek-ai/deepseek-ocr/models/DeepSeek-OCR", - "name": "DeepSeek OCR", - "family": "deepseek", + "gemini-3-flash-preview": { + "id": "gemini-3-flash-preview", + "name": "Gemini 3 Flash Preview", + "family": "gemini-flash", "attachment": true, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-10-20", - "last_updated": "2026-02-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.2, "output": 0.7 }, - "limit": { "context": 8192, "output": 8192 } + "knowledge": "2025-01", + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.05, + "input_audio": 1 + } }, - "qwen/qwenCoder/models/Qwen3-Coder-30B-A3B-Instruct": { - "id": "qwen/qwenCoder/models/Qwen3-Coder-30B-A3B-Instruct", - "name": "Qwen3 Coder 30B A3B Instruct", - "family": "qwen", + "gemini-2.5-flash-preview-tts": { + "id": "gemini-2.5-flash-preview-tts", + "name": "Gemini 2.5 Flash Preview TTS", + "family": "gemini-flash", "attachment": false, "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-31", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.11458, "output": 0.74812 }, - "limit": { "context": 262144, "output": 65536 } + "tool_call": false, + "temperature": false, + "knowledge": "2025-01", + "release_date": "2025-05-01", + "last_updated": "2025-05-01", + "modalities": { + "input": ["text"], + "output": ["audio"] + }, + "open_weights": false, + "limit": { + "context": 8000, + "output": 16000 + }, + "cost": { + "input": 0.5, + "output": 10 + } }, - "qwen/qwenLM/models/Qwen3-30B-A3B-Thinking-2507": { - "id": "qwen/qwenLM/models/Qwen3-30B-A3B-Thinking-2507", - "name": "Qwen3 30B A3B Thinking 2507", - "family": "qwen", - "attachment": false, + "gemini-3-pro-preview": { + "id": "gemini-3-pro-preview", + "name": "Gemini 3 Pro Preview", + "family": "gemini-pro", + "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-07-31", - "last_updated": "2026-02-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.36, "output": 1.3 }, - "limit": { "context": 262144, "output": 131072 } + "knowledge": "2025-01", + "release_date": "2025-11-18", + "last_updated": "2025-11-18", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 2, + "output": 12, + "cache_read": 0.2, + "tiers": [ + { + "input": 4, + "output": 18, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 4, + "output": 18, + "cache_read": 0.4 + } + } }, - "qwen/qwenLM/models/Qwen3-30B-A3B-Instruct-2507": { - "id": "qwen/qwenLM/models/Qwen3-30B-A3B-Instruct-2507", - "name": "Qwen3 30B A3B Instruct 2507", - "family": "qwen", - "attachment": false, - "reasoning": false, + "gemini-2.5-flash-preview-05-20": { + "id": "gemini-2.5-flash-preview-05-20", + "name": "Gemini 2.5 Flash Preview 05-20", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-07-30", - "last_updated": "2026-02-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 0.5 }, - "limit": { "context": 262144, "output": 262144 } + "knowledge": "2025-01", + "release_date": "2025-05-20", + "last_updated": "2025-05-20", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.15, + "output": 0.6, + "cache_read": 0.0375 + } }, - "clarifai/main/models/mm-poly-8b": { - "id": "clarifai/main/models/mm-poly-8b", - "name": "MM Poly 8B", - "family": "mm-poly", - "attachment": true, + "gemini-embedding-001": { + "id": "gemini-embedding-001", + "name": "Gemini Embedding 001", + "family": "gemini", + "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-06", - "last_updated": "2026-02-25", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-05", + "release_date": "2025-05-20", + "last_updated": "2025-05-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.658, "output": 1.11 }, - "limit": { "context": 32768, "output": 4096 } + "limit": { + "context": 2048, + "output": 3072 + }, + "cost": { + "input": 0.15, + "output": 0 + } }, - "mistralai/completion/models/Ministral-3-14B-Reasoning-2512": { - "id": "mistralai/completion/models/Ministral-3-14B-Reasoning-2512", - "name": "Ministral 3 14B Reasoning 2512", - "family": "ministral", + "gemini-2.5-pro": { + "id": "gemini-2.5-pro", + "name": "Gemini 2.5 Pro", + "family": "gemini-pro", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-12", - "release_date": "2025-12-01", - "last_updated": "2025-12-12", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2.5, "output": 1.7 }, - "limit": { "context": 262144, "output": 262144 } + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125, + "tiers": [ + { + "input": 2.5, + "output": 15, + "cache_read": 0.25, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 2.5, + "output": 15, + "cache_read": 0.25 + } + } }, - "mistralai/completion/models/Ministral-3-3B-Reasoning-2512": { - "id": "mistralai/completion/models/Ministral-3-3B-Reasoning-2512", - "name": "Ministral 3 3B Reasoning 2512", - "family": "ministral", + "gemini-flash-latest": { + "id": "gemini-flash-latest", + "name": "Gemini Flash Latest", + "family": "gemini-flash", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-12", - "last_updated": "2026-02-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1.039, "output": 0.54825 }, - "limit": { "context": 262144, "output": 262144 } - } - } - }, - "cerebras": { - "id": "cerebras", - "env": ["CEREBRAS_API_KEY"], - "npm": "@ai-sdk/cerebras", - "name": "Cerebras", - "doc": "https://inference-docs.cerebras.ai/models/overview", - "models": { - "gpt-oss-120b": { - "id": "gpt-oss-120b", - "name": "GPT OSS 120B", - "family": "gpt-oss", + "knowledge": "2025-01", + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.075, + "input_audio": 1 + } + }, + "gemma-4-31b-it": { + "id": "gemma-4-31b-it", + "name": "Gemma 4 31B", + "family": "gemma", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.25, "output": 0.69 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 256000, + "output": 8192 + } }, - "llama3.1-8b": { - "id": "llama3.1-8b", - "name": "Llama 3.1 8B", - "family": "llama", - "attachment": false, - "reasoning": false, + "gemini-2.5-pro-preview-06-05": { + "id": "gemini-2.5-pro-preview-06-05", + "name": "Gemini 2.5 Pro Preview 06-05", + "family": "gemini-pro", + "attachment": true, + "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2023-12", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.1, "output": 0.1 }, - "limit": { "context": 32000, "output": 8000 } + "knowledge": "2025-01", + "release_date": "2025-06-05", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.31 + } }, - "zai-glm-4.7": { - "id": "zai-glm-4.7", - "name": "Z.AI GLM-4.7", - "attachment": false, - "reasoning": false, + "gemini-2.5-flash-image": { + "id": "gemini-2.5-flash-image", + "name": "Gemini 2.5 Flash Image", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, + "tool_call": false, + "temperature": true, + "knowledge": "2025-06", + "release_date": "2025-08-26", + "last_updated": "2025-08-26", + "modalities": { + "input": ["text", "image"], + "output": ["text", "image"] + }, + "open_weights": false, + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.3, + "output": 30, + "cache_read": 0.075 + } + }, + "gemini-2.5-flash-lite-preview-06-17": { + "id": "gemini-2.5-flash-lite-preview-06-17", + "name": "Gemini 2.5 Flash Lite Preview 06-17", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2026-01-10", - "last_updated": "2026-01-10", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2.25, "output": 2.75, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 131072, "output": 40000 } + "knowledge": "2025-01", + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.025, + "input_audio": 0.3 + } }, - "qwen-3-235b-a22b-instruct-2507": { - "id": "qwen-3-235b-a22b-instruct-2507", - "name": "Qwen 3 235B Instruct", - "family": "qwen", - "attachment": false, + "gemma-3-12b-it": { + "id": "gemma-3-12b-it", + "name": "Gemma 3 12B", + "family": "gemma", + "attachment": true, "reasoning": false, - "tool_call": true, + "tool_call": false, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-22", - "last_updated": "2025-07-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 1.2 }, - "limit": { "context": 131000, "output": 32000 } - } - } - }, - "stackit": { - "id": "stackit", - "env": ["STACKIT_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.openai-compat.model-serving.eu01.onstackit.cloud/v1", - "name": "STACKIT", - "doc": "https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/basics/available-shared-models", - "models": { - "openai/gpt-oss-120b": { - "id": "openai/gpt-oss-120b", - "name": "GPT-OSS 120B", - "family": "gpt", - "attachment": false, + "limit": { + "context": 32768, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "gemini-2.5-flash": { + "id": "gemini-2.5-flash", + "name": "Gemini 2.5 Flash", + "family": "gemini-flash", + "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": false, + "structured_output": true, "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.49, "output": 0.71 }, - "limit": { "context": 131000, "output": 8192 } + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-06-05", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.03, + "input_audio": 1 + } }, - "google/gemma-3-27b-it": { - "id": "google/gemma-3-27b-it", - "name": "Gemma 3 27B", + "gemma-3n-e2b-it": { + "id": "gemma-3n-e2b-it", + "name": "Gemma 3n 2B", "family": "gemma", "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": false, - "temperature": true, - "release_date": "2025-05-17", - "last_updated": "2025-05-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.49, "output": 0.71 }, - "limit": { "context": 37000, "output": 8192 } - }, - "cortecs/Llama-3.3-70B-Instruct-FP8-Dynamic": { - "id": "cortecs/Llama-3.3-70B-Instruct-FP8-Dynamic", - "name": "Llama 3.3 70B", - "family": "llama", - "attachment": false, - "reasoning": false, - "tool_call": true, - "structured_output": false, "temperature": true, - "release_date": "2024-12-05", - "last_updated": "2024-12-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.49, "output": 0.71 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 8192, + "output": 2000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "neuralmagic/Mistral-Nemo-Instruct-2407-FP8": { - "id": "neuralmagic/Mistral-Nemo-Instruct-2407-FP8", - "name": "Mistral Nemo", - "family": "mistral", - "attachment": false, - "reasoning": false, - "tool_call": true, - "structured_output": false, + "gemini-3.1-flash-image-preview": { + "id": "gemini-3.1-flash-image-preview", + "name": "Gemini 3.1 Flash Image (Preview)", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, + "tool_call": false, "temperature": true, - "release_date": "2024-07-01", - "last_updated": "2024-07-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.49, "output": 0.71 }, - "limit": { "context": 128000, "output": 8192 } + "knowledge": "2025-01", + "release_date": "2026-02-26", + "last_updated": "2026-02-26", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text", "image"] + }, + "open_weights": false, + "limit": { + "context": 131072, + "output": 32768 + }, + "cost": { + "input": 0.5, + "output": 60 + } }, - "neuralmagic/Meta-Llama-3.1-8B-Instruct-FP8": { - "id": "neuralmagic/Meta-Llama-3.1-8B-Instruct-FP8", - "name": "Llama 3.1 8B", - "family": "llama", - "attachment": false, - "reasoning": false, + "gemini-3.1-flash-lite": { + "id": "gemini-3.1-flash-lite", + "name": "Gemini 3.1 Flash Lite", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.16, "output": 0.27 }, - "limit": { "context": 128000, "output": 8192 } + "knowledge": "2025-01", + "release_date": "2026-05-07", + "last_updated": "2026-05-07", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.25, + "output": 1.5, + "cache_read": 0.025, + "input_audio": 0.5 + } }, - "intfloat/e5-mistral-7b-instruct": { - "id": "intfloat/e5-mistral-7b-instruct", - "name": "E5 Mistral 7B", - "family": "mistral", - "attachment": false, + "gemma-3-4b-it": { + "id": "gemma-3-4b-it", + "name": "Gemma 3 4B", + "family": "gemma", + "attachment": true, "reasoning": false, "tool_call": false, - "structured_output": false, - "temperature": false, - "release_date": "2023-12-11", - "last_updated": "2023-12-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.02, "output": 0.02 }, - "limit": { "context": 4096, "output": 4096 } + "limit": { + "context": 32768, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Qwen/Qwen3-VL-235B-A22B-Instruct-FP8": { - "id": "Qwen/Qwen3-VL-235B-A22B-Instruct-FP8", - "name": "Qwen3-VL 235B", - "family": "qwen", + "gemini-2.5-flash-preview-04-17": { + "id": "gemini-2.5-flash-preview-04-17", + "name": "Gemini 2.5 Flash Preview 04-17", + "family": "gemini-flash", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": false, "temperature": true, - "release_date": "2024-11-01", - "last_updated": "2024-11-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1.64, "output": 1.91 }, - "limit": { "context": 218000, "output": 8192 } + "knowledge": "2025-01", + "release_date": "2025-04-17", + "last_updated": "2025-04-17", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.15, + "output": 0.6, + "cache_read": 0.0375 + } }, - "Qwen/Qwen3-VL-Embedding-8B": { - "id": "Qwen/Qwen3-VL-Embedding-8B", - "name": "Qwen3-VL Embedding 8B", - "family": "qwen", - "attachment": true, - "reasoning": false, - "tool_call": false, - "structured_output": false, - "temperature": false, - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.09, "output": 0.09 }, - "limit": { "context": 32000, "output": 4096 } - } - } - }, - "cloudflare-workers-ai": { - "id": "cloudflare-workers-ai", - "env": ["CLOUDFLARE_ACCOUNT_ID", "CLOUDFLARE_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.cloudflare.com/client/v4/accounts/${CLOUDFLARE_ACCOUNT_ID}/ai/v1", - "name": "Cloudflare Workers AI", - "doc": "https://developers.cloudflare.com/workers-ai/models/", - "models": { - "@cf/openai/gpt-oss-120b": { - "id": "@cf/openai/gpt-oss-120b", - "name": "GPT OSS 120B", + "gemini-2.5-pro-preview-tts": { + "id": "gemini-2.5-pro-preview-tts", + "name": "Gemini 2.5 Pro Preview TTS", + "family": "gemini-flash", "attachment": false, "reasoning": false, "tool_call": false, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-01", + "release_date": "2025-05-01", + "last_updated": "2025-05-01", + "modalities": { + "input": ["text"], + "output": ["audio"] + }, "open_weights": false, - "cost": { "input": 0.35, "output": 0.75 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 8000, + "output": 16000 + }, + "cost": { + "input": 1, + "output": 20 + } }, - "@cf/openai/gpt-oss-20b": { - "id": "@cf/openai/gpt-oss-20b", - "name": "GPT OSS 20B", - "attachment": false, - "reasoning": false, - "tool_call": false, + "gemini-2.5-flash-preview-09-2025": { + "id": "gemini-2.5-flash-preview-09-2025", + "name": "Gemini 2.5 Flash Preview 09-25", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.3 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.075, + "input_audio": 1 + } }, - "@cf/zai-org/glm-4.7-flash": { - "id": "@cf/zai-org/glm-4.7-flash", - "name": "GLM-4.7-Flash", - "family": "glm-flash", - "attachment": false, - "reasoning": true, + "gemma-3-27b-it": { + "id": "gemma-3-27b-it", + "name": "Gemma 3 27B", + "family": "gemma", + "attachment": true, + "reasoning": false, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-01-19", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2025-03-12", + "last_updated": "2025-03-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.06, "output": 0.4 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "@cf/nvidia/nemotron-3-120b-a12b": { - "id": "@cf/nvidia/nemotron-3-120b-a12b", - "name": "Nemotron 3 Super 120B", - "family": "nemotron", + "gemma-4-26b-a4b-it": { + "id": "gemma-4-26b-a4b-it", + "name": "Gemma 4 26B", + "family": "gemma", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "structured_output": true, "temperature": true, - "release_date": "2026-03-11", - "last_updated": "2026-03-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.5, "output": 1.5 }, - "limit": { "context": 256000, "output": 256000 } + "limit": { + "context": 256000, + "output": 8192 + } }, - "@cf/myshell-ai/melotts": { - "id": "@cf/myshell-ai/melotts", - "name": "MyShell MeloTTS", - "family": "melotts", - "attachment": false, - "reasoning": false, - "tool_call": false, + "gemini-2.5-flash-lite": { + "id": "gemini-2.5-flash-lite", + "name": "Gemini 2.5 Flash Lite", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.01, + "input_audio": 0.3 + } }, - "@cf/google/gemma-3-12b-it": { - "id": "@cf/google/gemma-3-12b-it", - "name": "Gemma 3 12B IT", - "family": "gemma", - "attachment": false, - "reasoning": false, + "gemini-2.5-flash-image-preview": { + "id": "gemini-2.5-flash-image-preview", + "name": "Gemini 2.5 Flash Image (Preview)", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, "tool_call": false, "temperature": true, - "release_date": "2025-04-11", - "last_updated": "2025-04-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-06", + "release_date": "2025-08-26", + "last_updated": "2025-08-26", + "modalities": { + "input": ["text", "image"], + "output": ["text", "image"] + }, "open_weights": false, - "cost": { "input": 0.35, "output": 0.56 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.3, + "output": 30, + "cache_read": 0.075 + } }, - "@cf/ibm-granite/granite-4.0-h-micro": { - "id": "@cf/ibm-granite/granite-4.0-h-micro", - "name": "IBM Granite 4.0 H Micro", - "family": "granite", - "attachment": false, + "gemini-1.5-flash-8b": { + "id": "gemini-1.5-flash-8b", + "name": "Gemini 1.5 Flash-8B", + "family": "gemini-flash", + "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2024-10-03", + "last_updated": "2024-10-03", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.017, "output": 0.11 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 1000000, + "output": 8192 + }, + "cost": { + "input": 0.0375, + "output": 0.15, + "cache_read": 0.01 + } }, - "@cf/ai4bharat/indictrans2-en-indic-1B": { - "id": "@cf/ai4bharat/indictrans2-en-indic-1B", - "name": "IndicTrans2 EN-Indic 1B", - "family": "indictrans", - "attachment": false, - "reasoning": false, - "tool_call": false, + "gemini-live-2.5-flash": { + "id": "gemini-live-2.5-flash", + "name": "Gemini Live 2.5 Flash", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-09-01", + "last_updated": "2025-09-01", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text", "audio"] + }, "open_weights": false, - "cost": { "input": 0.34, "output": 0.34 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 128000, + "output": 8000 + }, + "cost": { + "input": 0.5, + "output": 2, + "input_audio": 3, + "output_audio": 12 + } }, - "@cf/deepseek-ai/deepseek-r1-distill-qwen-32b": { - "id": "@cf/deepseek-ai/deepseek-r1-distill-qwen-32b", - "name": "DeepSeek R1 Distill Qwen 32B", - "family": "deepseek-thinking", - "attachment": false, + "gemini-2.0-flash-lite": { + "id": "gemini-2.0-flash-lite", + "name": "Gemini 2.0 Flash Lite", + "family": "gemini-flash-lite", + "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-06", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 4.88 }, - "limit": { "context": 128000, "output": 16384 } - }, - "@cf/qwen/qwq-32b": { - "id": "@cf/qwen/qwq-32b", - "name": "QwQ 32B", - "family": "qwen", + "limit": { + "context": 1048576, + "output": 8192 + }, + "cost": { + "input": 0.075, + "output": 0.3 + } + } + } + }, + "drun": { + "id": "drun", + "env": ["DRUN_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://chat.d.run/v1", + "name": "D.Run (China)", + "doc": "https://www.d.run", + "models": { + "public/deepseek-r1": { + "id": "public/deepseek-r1", + "name": "DeepSeek R1", + "family": "deepseek-thinking", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-04-11", - "last_updated": "2025-04-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.66, "output": 1 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2024-12", + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 32000 + }, + "cost": { + "input": 0.55, + "output": 2.2 + } }, - "@cf/qwen/qwen3-30b-a3b-fp8": { - "id": "@cf/qwen/qwen3-30b-a3b-fp8", - "name": "Qwen3 30B A3B FP8", - "family": "qwen", + "public/minimax-m25": { + "id": "public/minimax-m25", + "name": "MiniMax M2.5", + "family": "minimax", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_details" + }, "temperature": true, - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-03-01", + "last_updated": "2025-03-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.051, "output": 0.34 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.29, + "output": 1.16 + } }, - "@cf/qwen/qwen3-embedding-0.6b": { - "id": "@cf/qwen/qwen3-embedding-0.6b", - "name": "Qwen3 Embedding 0.6B", - "family": "qwen", + "public/deepseek-v3": { + "id": "public/deepseek-v3", + "name": "DeepSeek V3", + "family": "deepseek", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.012, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } - }, - "@cf/qwen/qwen2.5-coder-32b-instruct": { - "id": "@cf/qwen/qwen2.5-coder-32b-instruct", - "name": "Qwen 2.5 Coder 32B Instruct", - "family": "qwen", + "knowledge": "2024-07", + "release_date": "2024-12-26", + "last_updated": "2024-12-26", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 8192 + }, + "cost": { + "input": 0.28, + "output": 1.1 + } + } + } + }, + "moonshotai": { + "id": "moonshotai", + "env": ["MOONSHOT_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.moonshot.ai/v1", + "name": "Moonshot AI", + "doc": "https://platform.moonshot.ai/docs/api/chat", + "models": { + "kimi-k2-0905-preview": { + "id": "kimi-k2-0905-preview", + "name": "Kimi K2 0905", + "family": "kimi", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "release_date": "2025-04-11", - "last_updated": "2025-04-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.66, "output": 1 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2024-10", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 2.5, + "cache_read": 0.15 + } }, - "@cf/huggingface/distilbert-sst-2-int8": { - "id": "@cf/huggingface/distilbert-sst-2-int8", - "name": "DistilBERT SST-2 INT8", - "family": "distilbert", + "kimi-k2.5": { + "id": "kimi-k2.5", + "name": "Kimi K2.5", + "family": "kimi-k2.5", "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.026, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-01", + "release_date": "2026-01", + "last_updated": "2026-01", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 3, + "cache_read": 0.1 + } }, - "@cf/facebook/bart-large-cnn": { - "id": "@cf/facebook/bart-large-cnn", - "name": "BART Large CNN", - "family": "bart", + "kimi-k2-thinking-turbo": { + "id": "kimi-k2-thinking-turbo", + "name": "Kimi K2 Thinking Turbo", + "family": "kimi-thinking", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-04-09", - "last_updated": "2025-04-09", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2024-08", + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 1.15, + "output": 8, + "cache_read": 0.15 + } }, - "@cf/baai/bge-base-en-v1.5": { - "id": "@cf/baai/bge-base-en-v1.5", - "name": "BGE Base EN v1.5", - "family": "bge", - "attachment": false, - "reasoning": false, - "tool_call": false, + "kimi-k2.6": { + "id": "kimi-k2.6", + "name": "Kimi K2.6", + "family": "kimi-k2.6", + "attachment": true, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.067, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2025-01", + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.95, + "output": 4, + "cache_read": 0.16 + } }, - "@cf/baai/bge-small-en-v1.5": { - "id": "@cf/baai/bge-small-en-v1.5", - "name": "BGE Small EN v1.5", - "family": "bge", + "kimi-k2-turbo-preview": { + "id": "kimi-k2-turbo-preview", + "name": "Kimi K2 Turbo", + "family": "kimi", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.02, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2024-10", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 2.4, + "output": 10, + "cache_read": 0.6 + } }, - "@cf/baai/bge-large-en-v1.5": { - "id": "@cf/baai/bge-large-en-v1.5", - "name": "BGE Large EN v1.5", - "family": "bge", + "kimi-k2-0711-preview": { + "id": "kimi-k2-0711-preview", + "name": "Kimi K2 0711", + "family": "kimi", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2024-10", + "release_date": "2025-07-14", + "last_updated": "2025-07-14", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.6, + "output": 2.5, + "cache_read": 0.15 + } }, - "@cf/baai/bge-reranker-base": { - "id": "@cf/baai/bge-reranker-base", - "name": "BGE Reranker Base", - "family": "bge", + "kimi-k2-thinking": { + "id": "kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "family": "kimi-thinking", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-04-09", - "last_updated": "2025-04-09", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.0031, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } - }, - "@cf/baai/bge-m3": { - "id": "@cf/baai/bge-m3", - "name": "BGE M3", - "family": "bge", + "knowledge": "2024-08", + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.6, + "output": 2.5, + "cache_read": 0.15 + } + } + } + }, + "berget": { + "id": "berget", + "env": ["BERGET_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.berget.ai/v1", + "name": "Berget.AI", + "doc": "https://api.berget.ai", + "models": { + "zai-org/GLM-4.7": { + "id": "zai-org/GLM-4.7", + "name": "GLM 4.7", + "family": "glm", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.012, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2025-12", + "release_date": "2026-01-19", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.77, + "output": 2.75 + } }, - "@cf/pipecat-ai/smart-turn-v2": { - "id": "@cf/pipecat-ai/smart-turn-v2", - "name": "Pipecat Smart Turn v2", - "family": "smart-turn", + "mistralai/Mistral-Small-3.2-24B-Instruct-2506": { + "id": "mistralai/Mistral-Small-3.2-24B-Instruct-2506", + "name": "Mistral Small 3.2 24B Instruct 2506", + "family": "mistral-small", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2025-09", + "release_date": "2025-10-01", + "last_updated": "2025-10-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32000, + "output": 8192 + }, + "cost": { + "input": 0.33, + "output": 0.33 + } }, - "@cf/moonshotai/kimi-k2.5": { - "id": "@cf/moonshotai/kimi-k2.5", - "name": "Kimi K2.5", - "family": "kimi", + "mistralai/Mistral-Medium-3.5-128B": { + "id": "mistralai/Mistral-Medium-3.5-128B", + "name": "Mistral Medium 3.5 128B", + "family": "mistral-medium", "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "structured_output": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2026-04", + "release_date": "2026-04-29", + "last_updated": "2026-04-29", + "modalities": { + "input": ["image", "text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 3, "cache_read": 0.1 }, - "limit": { "context": 256000, "output": 256000 } - }, - "@cf/deepgram/aura-2-en": { - "id": "@cf/deepgram/aura-2-en", - "name": "Deepgram Aura 2 (EN)", - "family": "aura", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } - }, - "@cf/deepgram/nova-3": { - "id": "@cf/deepgram/nova-3", - "name": "Deepgram Nova 3", - "family": "nova", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 1.65, + "output": 5.5 + } }, - "@cf/deepgram/aura-2-es": { - "id": "@cf/deepgram/aura-2-es", - "name": "Deepgram Aura 2 (ES)", - "family": "aura", + "meta-llama/Llama-3.3-70B-Instruct": { + "id": "meta-llama/Llama-3.3-70B-Instruct", + "name": "Llama 3.3 70B Instruct", + "family": "llama", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-11-14", - "last_updated": "2025-11-14", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2023-12", + "release_date": "2025-04-27", + "last_updated": "2025-04-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.99, + "output": 0.99 + } }, - "@cf/mistral/mistral-7b-instruct-v0.1": { - "id": "@cf/mistral/mistral-7b-instruct-v0.1", - "name": "Mistral 7B Instruct v0.1", - "family": "mistral", + "openai/gpt-oss-120b": { + "id": "openai/gpt-oss-120b", + "name": "GPT-OSS-120B", + "family": "gpt-oss", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, + "structured_output": true, "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.11, "output": 0.19 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2025-08", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.44, + "output": 0.99 + } }, - "@cf/aisingapore/gemma-sea-lion-v4-27b-it": { - "id": "@cf/aisingapore/gemma-sea-lion-v4-27b-it", - "name": "Gemma SEA-LION v4 27B IT", + "google/gemma-4-31B-it": { + "id": "google/gemma-4-31B-it", + "name": "Gemma 4 31B Instruct", "family": "gemma", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-12", + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": ["audio", "image", "text", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0.275, + "output": 0.55 + } + } + } + }, + "github-models": { + "id": "github-models", + "env": ["GITHUB_TOKEN"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://models.github.ai/inference", + "name": "GitHub Models", + "doc": "https://docs.github.com/en/github-models", + "models": { + "deepseek/deepseek-v3-0324": { + "id": "deepseek/deepseek-v3-0324", + "name": "DeepSeek-V3-0324", + "family": "deepseek", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.35, "output": 0.56 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2024-06", + "release_date": "2025-03-24", + "last_updated": "2025-03-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "@cf/meta/llama-3.3-70b-instruct-fp8-fast": { - "id": "@cf/meta/llama-3.3-70b-instruct-fp8-fast", - "name": "Llama 3.3 70B Instruct FP8 Fast", - "family": "llama", + "deepseek/deepseek-r1": { + "id": "deepseek/deepseek-r1", + "name": "DeepSeek-R1", + "family": "deepseek-thinking", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.29, "output": 2.25 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2024-06", + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 65536, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "@cf/meta/llama-3-8b-instruct-awq": { - "id": "@cf/meta/llama-3-8b-instruct-awq", - "name": "Llama 3 8B Instruct AWQ", - "family": "llama", + "deepseek/deepseek-r1-0528": { + "id": "deepseek/deepseek-r1-0528", + "name": "DeepSeek-R1-0528", + "family": "deepseek-thinking", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.12, "output": 0.27 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2024-06", + "release_date": "2025-05-28", + "last_updated": "2025-05-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 65536, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "@cf/meta/llama-3.2-1b-instruct": { - "id": "@cf/meta/llama-3.2-1b-instruct", - "name": "Llama 3.2 1B Instruct", - "family": "llama", + "ai21-labs/ai21-jamba-1.5-mini": { + "id": "ai21-labs/ai21-jamba-1.5-mini", + "name": "AI21 Jamba 1.5 Mini", + "family": "jamba", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-03", + "release_date": "2024-08-29", + "last_updated": "2024-08-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.027, "output": 0.2 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 256000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "@cf/meta/m2m100-1.2b": { - "id": "@cf/meta/m2m100-1.2b", - "name": "M2M100 1.2B", - "family": "m2m", + "ai21-labs/ai21-jamba-1.5-large": { + "id": "ai21-labs/ai21-jamba-1.5-large", + "name": "AI21 Jamba 1.5 Large", + "family": "jamba", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-03", + "release_date": "2024-08-29", + "last_updated": "2024-08-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.34, "output": 0.34 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 256000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "@cf/meta/llama-3.1-8b-instruct": { - "id": "@cf/meta/llama-3.1-8b-instruct", - "name": "Llama 3.1 8B Instruct", - "family": "llama", + "microsoft/phi-3.5-mini-instruct": { + "id": "microsoft/phi-3.5-mini-instruct", + "name": "Phi-3.5-mini instruct (128k)", + "family": "phi", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.28, "output": 0.8299999999999998 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2023-10", + "release_date": "2024-08-20", + "last_updated": "2024-08-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "@cf/meta/llama-4-scout-17b-16e-instruct": { - "id": "@cf/meta/llama-4-scout-17b-16e-instruct", - "name": "Llama 4 Scout 17B 16E Instruct", - "family": "llama", + "microsoft/phi-3-medium-4k-instruct": { + "id": "microsoft/phi-3-medium-4k-instruct", + "name": "Phi-3-medium instruct (4k)", + "family": "phi", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.27, "output": 0.85 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2023-10", + "release_date": "2024-04-23", + "last_updated": "2024-04-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 4096, + "output": 1024 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "@cf/meta/llama-3.2-11b-vision-instruct": { - "id": "@cf/meta/llama-3.2-11b-vision-instruct", - "name": "Llama 3.2 11B Vision Instruct", - "family": "llama", + "microsoft/phi-3.5-moe-instruct": { + "id": "microsoft/phi-3.5-moe-instruct", + "name": "Phi-3.5-MoE instruct (128k)", + "family": "phi", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.049, "output": 0.68 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2023-10", + "release_date": "2024-08-20", + "last_updated": "2024-08-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "@cf/meta/llama-3-8b-instruct": { - "id": "@cf/meta/llama-3-8b-instruct", - "name": "Llama 3 8B Instruct", - "family": "llama", + "microsoft/phi-3-mini-128k-instruct": { + "id": "microsoft/phi-3-mini-128k-instruct", + "name": "Phi-3-mini instruct (128k)", + "family": "phi", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.28, "output": 0.83 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2023-10", + "release_date": "2024-04-23", + "last_updated": "2024-04-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "@cf/meta/llama-guard-3-8b": { - "id": "@cf/meta/llama-guard-3-8b", - "name": "Llama Guard 3 8B", - "family": "llama", + "microsoft/phi-4-mini-instruct": { + "id": "microsoft/phi-4-mini-instruct", + "name": "Phi-4-mini-instruct", + "family": "phi", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.48, "output": 0.03 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2023-10", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "@cf/meta/llama-3.2-3b-instruct": { - "id": "@cf/meta/llama-3.2-3b-instruct", - "name": "Llama 3.2 3B Instruct", - "family": "llama", + "microsoft/phi-4-reasoning": { + "id": "microsoft/phi-4-reasoning", + "name": "Phi-4-Reasoning", + "family": "phi", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.051, "output": 0.34 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2023-10", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "@cf/meta/llama-3.1-8b-instruct-awq": { - "id": "@cf/meta/llama-3.1-8b-instruct-awq", - "name": "Llama 3.1 8B Instruct AWQ", - "family": "llama", + "microsoft/phi-3-small-8k-instruct": { + "id": "microsoft/phi-3-small-8k-instruct", + "name": "Phi-3-small instruct (8k)", + "family": "phi", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.12, "output": 0.27 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2023-10", + "release_date": "2024-04-23", + "last_updated": "2024-04-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 2048 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "@cf/meta/llama-3.1-8b-instruct-fp8": { - "id": "@cf/meta/llama-3.1-8b-instruct-fp8", - "name": "Llama 3.1 8B Instruct FP8", - "family": "llama", + "microsoft/phi-3.5-vision-instruct": { + "id": "microsoft/phi-3.5-vision-instruct", + "name": "Phi-3.5-vision instruct (128k)", + "family": "phi", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.15, "output": 0.29 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2023-10", + "release_date": "2024-08-20", + "last_updated": "2024-08-20", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "@cf/meta/llama-2-7b-chat-fp16": { - "id": "@cf/meta/llama-2-7b-chat-fp16", - "name": "Llama 2 7B Chat FP16", - "family": "llama", + "microsoft/phi-3-mini-4k-instruct": { + "id": "microsoft/phi-3-mini-4k-instruct", + "name": "Phi-3-mini instruct (4k)", + "family": "phi", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-04-03", - "last_updated": "2025-04-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.56, "output": 6.67 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2023-10", + "release_date": "2024-04-23", + "last_updated": "2024-04-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 4096, + "output": 1024 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "@cf/pfnet/plamo-embedding-1b": { - "id": "@cf/pfnet/plamo-embedding-1b", - "name": "PLaMo Embedding 1B", - "family": "plamo", + "microsoft/phi-4-mini-reasoning": { + "id": "microsoft/phi-4-mini-reasoning", + "name": "Phi-4-mini-reasoning", + "family": "phi", "attachment": false, - "reasoning": false, - "tool_call": false, + "reasoning": true, + "tool_call": true, "temperature": true, - "release_date": "2025-09-25", - "last_updated": "2025-09-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.019, "output": 0 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2023-10", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "@cf/mistralai/mistral-small-3.1-24b-instruct": { - "id": "@cf/mistralai/mistral-small-3.1-24b-instruct", - "name": "Mistral Small 3.1 24B Instruct", - "family": "mistral-small", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "release_date": "2025-04-11", - "last_updated": "2025-04-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.35, "output": 0.56 }, - "limit": { "context": 128000, "output": 16384 } - } - } - }, - "siliconflow": { - "id": "siliconflow", - "env": ["SILICONFLOW_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.siliconflow.com/v1", - "name": "SiliconFlow", - "doc": "https://cloud.siliconflow.com/models", - "models": { - "THUDM/GLM-Z1-32B-0414": { - "id": "THUDM/GLM-Z1-32B-0414", - "name": "THUDM/GLM-Z1-32B-0414", - "family": "glm-z", + "microsoft/phi-3-small-128k-instruct": { + "id": "microsoft/phi-3-small-128k-instruct", + "name": "Phi-3-small instruct (128k)", + "family": "phi", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-04-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.14, "output": 0.57 }, - "limit": { "context": 131000, "output": 131000 } + "knowledge": "2023-10", + "release_date": "2024-04-23", + "last_updated": "2024-04-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "THUDM/GLM-Z1-9B-0414": { - "id": "THUDM/GLM-Z1-9B-0414", - "name": "THUDM/GLM-Z1-9B-0414", - "family": "glm-z", + "microsoft/phi-3-medium-128k-instruct": { + "id": "microsoft/phi-3-medium-128k-instruct", + "name": "Phi-3-medium instruct (128k)", + "family": "phi", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-04-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.086, "output": 0.086 }, - "limit": { "context": 131000, "output": 131000 } + "knowledge": "2023-10", + "release_date": "2024-04-23", + "last_updated": "2024-04-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "THUDM/GLM-4-32B-0414": { - "id": "THUDM/GLM-4-32B-0414", - "name": "THUDM/GLM-4-32B-0414", - "family": "glm", + "microsoft/phi-4": { + "id": "microsoft/phi-4", + "name": "Phi-4", + "family": "phi", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-04-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.27, "output": 0.27 }, - "limit": { "context": 33000, "output": 33000 } + "knowledge": "2023-10", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 16000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "THUDM/GLM-4-9B-0414": { - "id": "THUDM/GLM-4-9B-0414", - "name": "THUDM/GLM-4-9B-0414", - "family": "glm", + "microsoft/phi-4-multimodal-instruct": { + "id": "microsoft/phi-4-multimodal-instruct", + "name": "Phi-4-multimodal-instruct", + "family": "phi", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-04-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.086, "output": 0.086 }, - "limit": { "context": 33000, "output": 33000 } + "knowledge": "2023-10", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "openai/gpt-oss-120b": { - "id": "openai/gpt-oss-120b", - "name": "openai/gpt-oss-120b", - "family": "gpt-oss", + "microsoft/mai-ds-r1": { + "id": "microsoft/mai-ds-r1", + "name": "MAI-DS-R1", + "family": "mai", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-08-13", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-06", + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.05, "output": 0.45 }, - "limit": { "context": 131000, "output": 8000 } + "limit": { + "context": 65536, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "openai/gpt-oss-20b": { - "id": "openai/gpt-oss-20b", - "name": "openai/gpt-oss-20b", - "family": "gpt-oss", + "cohere/cohere-command-r-08-2024": { + "id": "cohere/cohere-command-r-08-2024", + "name": "Cohere Command R 08-2024", + "family": "command-r", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-08-13", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-03", + "release_date": "2024-08-01", + "last_updated": "2024-08-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.04, "output": 0.18 }, - "limit": { "context": 131000, "output": 8000 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "zai-org/GLM-4.5-Air": { - "id": "zai-org/GLM-4.5-Air", - "name": "zai-org/GLM-4.5-Air", - "family": "glm-air", + "cohere/cohere-command-a": { + "id": "cohere/cohere-command-a", + "name": "Cohere Command A", + "family": "command-a", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-07-28", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-03", + "release_date": "2024-11-01", + "last_updated": "2024-11-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.14, "output": 0.86 }, - "limit": { "context": 131000, "output": 131000 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "zai-org/GLM-4.7": { - "id": "zai-org/GLM-4.7", - "name": "zai-org/GLM-4.7", - "family": "glm", + "cohere/cohere-command-r-plus": { + "id": "cohere/cohere-command-r-plus", + "name": "Cohere Command R+", + "family": "command-r", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, "temperature": true, - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-03", + "release_date": "2024-04-04", + "last_updated": "2024-08-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.6, "output": 2.2 }, - "limit": { "context": 205000, "output": 205000 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "zai-org/GLM-4.6V": { - "id": "zai-org/GLM-4.6V", - "name": "zai-org/GLM-4.6V", - "family": "glm", - "attachment": true, + "cohere/cohere-command-r": { + "id": "cohere/cohere-command-r", + "name": "Cohere Command R", + "family": "command-r", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": false, "temperature": true, - "release_date": "2025-12-07", - "last_updated": "2025-12-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-03", + "release_date": "2024-03-11", + "last_updated": "2024-08-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 0.9 }, - "limit": { "context": 131000, "output": 131000 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "zai-org/GLM-4.5V": { - "id": "zai-org/GLM-4.5V", - "name": "zai-org/GLM-4.5V", - "family": "glm", - "attachment": true, + "cohere/cohere-command-r-plus-08-2024": { + "id": "cohere/cohere-command-r-plus-08-2024", + "name": "Cohere Command R+ 08-2024", + "family": "command-r", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-08-13", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-03", + "release_date": "2024-08-01", + "last_updated": "2024-08-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.14, "output": 0.86 }, - "limit": { "context": 66000, "output": 66000 } + "limit": { + "context": 128000, + "output": 4096 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "zai-org/GLM-4.5": { - "id": "zai-org/GLM-4.5", - "name": "zai-org/GLM-4.5", - "family": "glm", + "xai/grok-3-mini": { + "id": "xai/grok-3-mini", + "name": "Grok 3 Mini", + "family": "grok", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-07-28", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-10", + "release_date": "2024-12-09", + "last_updated": "2024-12-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 131000, "output": 131000 } + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "zai-org/GLM-5": { - "id": "zai-org/GLM-5", - "name": "zai-org/GLM-5", - "family": "glm", + "xai/grok-3": { + "id": "xai/grok-3", + "name": "Grok 3", + "family": "grok", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1, "output": 3.2 }, - "limit": { "context": 205000, "output": 205000 } + "knowledge": "2024-10", + "release_date": "2024-12-09", + "last_updated": "2024-12-09", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "zai-org/GLM-4.6": { - "id": "zai-org/GLM-4.6", - "name": "zai-org/GLM-4.6", - "family": "glm", + "openai/o1-mini": { + "id": "openai/o1-mini", + "name": "OpenAI o1-mini", + "family": "o-mini", "attachment": false, + "reasoning": true, + "tool_call": false, + "temperature": false, + "knowledge": "2023-10", + "release_date": "2024-09-12", + "last_updated": "2024-12-17", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 128000, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "openai/gpt-4o-mini": { + "id": "openai/gpt-4o-mini", + "name": "GPT-4o mini", + "family": "gpt-mini", + "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-10-04", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2023-10", + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 1.9 }, - "limit": { "context": 205000, "output": 205000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "nex-agi/DeepSeek-V3.1-Nex-N1": { - "id": "nex-agi/DeepSeek-V3.1-Nex-N1", - "name": "nex-agi/DeepSeek-V3.1-Nex-N1", - "family": "deepseek", + "openai/o4-mini": { + "id": "openai/o4-mini", + "name": "OpenAI o4-mini", + "family": "o-mini", "attachment": false, "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-01-01", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "temperature": false, + "knowledge": "2024-04", + "release_date": "2025-01-31", + "last_updated": "2025-01-31", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.5, "output": 2 }, - "limit": { "context": 131000, "output": 131000 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "stepfun-ai/Step-3.5-Flash": { - "id": "stepfun-ai/Step-3.5-Flash", - "name": "stepfun-ai/Step-3.5-Flash", - "family": "step", + "openai/o1-preview": { + "id": "openai/o1-preview", + "name": "OpenAI o1-preview", + "family": "o", "attachment": false, "reasoning": true, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "tool_call": false, + "temperature": false, + "knowledge": "2023-10", + "release_date": "2024-09-12", + "last_updated": "2024-09-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.1, "output": 0.3 }, - "limit": { "context": 262000, "output": 262000 } + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "baidu/ERNIE-4.5-300B-A47B": { - "id": "baidu/ERNIE-4.5-300B-A47B", - "name": "baidu/ERNIE-4.5-300B-A47B", - "family": "ernie", + "openai/o1": { + "id": "openai/o1", + "name": "OpenAI o1", + "family": "o", "attachment": false, - "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-07-02", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": false, + "temperature": false, + "knowledge": "2023-10", + "release_date": "2024-09-12", + "last_updated": "2024-12-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.28, "output": 1.1 }, - "limit": { "context": 131000, "output": 131000 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "meta-llama/Meta-Llama-3.1-8B-Instruct": { - "id": "meta-llama/Meta-Llama-3.1-8B-Instruct", - "name": "meta-llama/Meta-Llama-3.1-8B-Instruct", - "family": "llama", + "openai/o3-mini": { + "id": "openai/o3-mini", + "name": "OpenAI o3-mini", + "family": "o-mini", "attachment": false, - "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-04-23", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "reasoning": true, + "tool_call": false, + "temperature": false, + "knowledge": "2024-04", + "release_date": "2025-01-31", + "last_updated": "2025-01-31", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.06, "output": 0.06 }, - "limit": { "context": 33000, "output": 4000 } + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "MiniMaxAI/MiniMax-M2.1": { - "id": "MiniMaxAI/MiniMax-M2.1", - "name": "MiniMaxAI/MiniMax-M2.1", - "family": "minimax", - "attachment": false, + "openai/gpt-4.1-nano": { + "id": "openai/gpt-4.1-nano", + "name": "GPT-4.1-nano", + "family": "gpt-nano", + "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 197000, "output": 131000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "MiniMaxAI/MiniMax-M2.5": { - "id": "MiniMaxAI/MiniMax-M2.5", - "name": "MiniMaxAI/MiniMax-M2.5", - "family": "minimax", + "openai/o3": { + "id": "openai/o3", + "name": "OpenAI o3", + "family": "o", "attachment": false, + "reasoning": true, + "tool_call": false, + "temperature": false, + "knowledge": "2024-04", + "release_date": "2025-01-31", + "last_updated": "2025-01-31", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 100000 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "openai/gpt-4o": { + "id": "openai/gpt-4o", + "name": "GPT-4o", + "family": "gpt", + "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": false, "temperature": true, - "release_date": "2026-02-15", - "last_updated": "2026-02-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2023-10", + "release_date": "2024-05-13", + "last_updated": "2024-05-13", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 1.2 }, - "limit": { "context": 197000, "output": 131000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "deepseek-ai/deepseek-vl2": { - "id": "deepseek-ai/deepseek-vl2", - "name": "deepseek-ai/deepseek-vl2", - "family": "deepseek", + "openai/gpt-4.1": { + "id": "openai/gpt-4.1", + "name": "GPT-4.1", + "family": "gpt", "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-12-13", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.15, "output": 0.15 }, - "limit": { "context": 4000, "output": 4000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B": { - "id": "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B", - "name": "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B", - "family": "qwen", - "attachment": false, - "reasoning": true, + "openai/gpt-4.1-mini": { + "id": "openai/gpt-4.1-mini", + "name": "GPT-4.1-mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-01-20", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.18, "output": 0.18 }, - "limit": { "context": 131000, "output": 131000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "deepseek-ai/DeepSeek-V3.1": { - "id": "deepseek-ai/DeepSeek-V3.1", - "name": "deepseek-ai/DeepSeek-V3.1", - "family": "deepseek", + "meta/llama-4-scout-17b-16e-instruct": { + "id": "meta/llama-4-scout-17b-16e-instruct", + "name": "Llama 4 Scout 17B 16E Instruct", + "family": "llama", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-08-25", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.27, "output": 1 }, - "limit": { "context": 164000, "output": 164000 } + "knowledge": "2024-12", + "release_date": "2025-01-31", + "last_updated": "2025-01-31", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "deepseek-ai/DeepSeek-V3.2-Exp": { - "id": "deepseek-ai/DeepSeek-V3.2-Exp", - "name": "deepseek-ai/DeepSeek-V3.2-Exp", - "family": "deepseek", + "meta/meta-llama-3.1-8b-instruct": { + "id": "meta/meta-llama-3.1-8b-instruct", + "name": "Meta-Llama-3.1-8B-Instruct", + "family": "llama", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-10-10", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.27, "output": 0.41 }, - "limit": { "context": 164000, "output": 164000 } + "knowledge": "2023-12", + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "deepseek-ai/DeepSeek-R1": { - "id": "deepseek-ai/DeepSeek-R1", - "name": "deepseek-ai/DeepSeek-R1", - "family": "deepseek-thinking", + "meta/llama-3.3-70b-instruct": { + "id": "meta/llama-3.3-70b-instruct", + "name": "Llama-3.3-70B-Instruct", + "family": "llama", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-05-28", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.5, "output": 2.18 }, - "limit": { "context": 164000, "output": 164000 } + "knowledge": "2023-12", + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "deepseek-ai/DeepSeek-V3.1-Terminus": { - "id": "deepseek-ai/DeepSeek-V3.1-Terminus", - "name": "deepseek-ai/DeepSeek-V3.1-Terminus", - "family": "deepseek", + "meta/meta-llama-3-70b-instruct": { + "id": "meta/meta-llama-3-70b-instruct", + "name": "Meta-Llama-3-70B-Instruct", + "family": "llama", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-09-29", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.27, "output": 1 }, - "limit": { "context": 164000, "output": 164000 } + "knowledge": "2023-12", + "release_date": "2024-04-18", + "last_updated": "2024-04-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 2048 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "deepseek-ai/DeepSeek-R1-Distill-Qwen-14B": { - "id": "deepseek-ai/DeepSeek-R1-Distill-Qwen-14B", - "name": "deepseek-ai/DeepSeek-R1-Distill-Qwen-14B", - "family": "qwen", + "meta/llama-3.2-90b-vision-instruct": { + "id": "meta/llama-3.2-90b-vision-instruct", + "name": "Llama-3.2-90B-Vision-Instruct", + "family": "llama", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-01-20", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.1 }, - "limit": { "context": 131000, "output": 131000 } + "knowledge": "2023-12", + "release_date": "2024-09-25", + "last_updated": "2024-09-25", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "deepseek-ai/DeepSeek-V3.2": { - "id": "deepseek-ai/DeepSeek-V3.2", - "name": "deepseek-ai/DeepSeek-V3.2", - "family": "deepseek", + "meta/llama-3.2-11b-vision-instruct": { + "id": "meta/llama-3.2-11b-vision-instruct", + "name": "Llama-3.2-11B-Vision-Instruct", + "family": "llama", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-12-03", - "last_updated": "2025-12-03", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.27, "output": 0.42 }, - "limit": { "context": 164000, "output": 164000 } - }, - "deepseek-ai/DeepSeek-V3": { - "id": "deepseek-ai/DeepSeek-V3", - "name": "deepseek-ai/DeepSeek-V3", - "family": "deepseek", - "attachment": false, - "reasoning": false, - "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-12-26", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 1 }, - "limit": { "context": 164000, "output": 164000 } + "knowledge": "2023-12", + "release_date": "2024-09-25", + "last_updated": "2024-09-25", + "modalities": { + "input": ["text", "image", "audio"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "ByteDance-Seed/Seed-OSS-36B-Instruct": { - "id": "ByteDance-Seed/Seed-OSS-36B-Instruct", - "name": "ByteDance-Seed/Seed-OSS-36B-Instruct", - "family": "seed", + "meta/meta-llama-3.1-405b-instruct": { + "id": "meta/meta-llama-3.1-405b-instruct", + "name": "Meta-Llama-3.1-405B-Instruct", + "family": "llama", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-09-04", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.21, "output": 0.57 }, - "limit": { "context": 262000, "output": 262000 } + "knowledge": "2023-12", + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Qwen/Qwen2.5-Coder-32B-Instruct": { - "id": "Qwen/Qwen2.5-Coder-32B-Instruct", - "name": "Qwen/Qwen2.5-Coder-32B-Instruct", - "family": "qwen", + "meta/meta-llama-3.1-70b-instruct": { + "id": "meta/meta-llama-3.1-70b-instruct", + "name": "Meta-Llama-3.1-70B-Instruct", + "family": "llama", "attachment": false, - "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2024-11-11", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.18, "output": 0.18 }, - "limit": { "context": 33000, "output": 4000 } - }, - "Qwen/Qwen3-Omni-30B-A3B-Thinking": { - "id": "Qwen/Qwen3-Omni-30B-A3B-Thinking", - "name": "Qwen/Qwen3-Omni-30B-A3B-Thinking", - "family": "qwen", - "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-10-04", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image", "audio"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4 }, - "limit": { "context": 66000, "output": 66000 } + "knowledge": "2023-12", + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Qwen/Qwen3-Next-80B-A3B-Thinking": { - "id": "Qwen/Qwen3-Next-80B-A3B-Thinking", - "name": "Qwen/Qwen3-Next-80B-A3B-Thinking", - "family": "qwen", + "meta/meta-llama-3-8b-instruct": { + "id": "meta/meta-llama-3-8b-instruct", + "name": "Meta-Llama-3-8B-Instruct", + "family": "llama", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-09-25", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.14, "output": 0.57 }, - "limit": { "context": 262000, "output": 262000 } - }, - "Qwen/Qwen3-VL-30B-A3B-Instruct": { - "id": "Qwen/Qwen3-VL-30B-A3B-Instruct", - "name": "Qwen/Qwen3-VL-30B-A3B-Instruct", - "family": "qwen", - "attachment": true, - "reasoning": false, - "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-10-05", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.29, "output": 1 }, - "limit": { "context": 262000, "output": 262000 } + "knowledge": "2023-12", + "release_date": "2024-04-18", + "last_updated": "2024-04-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 2048 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Qwen/Qwen3-VL-235B-A22B-Thinking": { - "id": "Qwen/Qwen3-VL-235B-A22B-Thinking", - "name": "Qwen/Qwen3-VL-235B-A22B-Thinking", - "family": "qwen", - "attachment": true, + "meta/llama-4-maverick-17b-128e-instruct-fp8": { + "id": "meta/llama-4-maverick-17b-128e-instruct-fp8", + "name": "Llama 4 Maverick 17B 128E Instruct FP8", + "family": "llama", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-10-04", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.45, "output": 3.5 }, - "limit": { "context": 262000, "output": 262000 } + "knowledge": "2024-12", + "release_date": "2025-01-31", + "last_updated": "2025-01-31", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Qwen/Qwen3-30B-A3B-Thinking-2507": { - "id": "Qwen/Qwen3-30B-A3B-Thinking-2507", - "name": "Qwen/Qwen3-30B-A3B-Thinking-2507", - "family": "qwen", + "core42/jais-30b-chat": { + "id": "core42/jais-30b-chat", + "name": "JAIS 30b Chat", + "family": "jais", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-07-31", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.09, "output": 0.3 }, - "limit": { "context": 262000, "output": 131000 } + "knowledge": "2023-03", + "release_date": "2023-08-30", + "last_updated": "2023-08-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 2048 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Qwen/Qwen2.5-14B-Instruct": { - "id": "Qwen/Qwen2.5-14B-Instruct", - "name": "Qwen/Qwen2.5-14B-Instruct", - "family": "qwen", + "mistral-ai/mistral-nemo": { + "id": "mistral-ai/mistral-nemo", + "name": "Mistral Nemo", + "family": "mistral-nemo", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-09-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.1 }, - "limit": { "context": 33000, "output": 4000 } + "knowledge": "2024-03", + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Qwen/Qwen3-32B": { - "id": "Qwen/Qwen3-32B", - "name": "Qwen/Qwen3-32B", - "family": "qwen", + "mistral-ai/ministral-3b": { + "id": "mistral-ai/ministral-3b", + "name": "Ministral 3B", + "family": "ministral", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-04-30", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.14, "output": 0.57 }, - "limit": { "context": 131000, "output": 131000 } + "knowledge": "2024-03", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Qwen/Qwen3-14B": { - "id": "Qwen/Qwen3-14B", - "name": "Qwen/Qwen3-14B", - "family": "qwen", + "mistral-ai/mistral-large-2411": { + "id": "mistral-ai/mistral-large-2411", + "name": "Mistral Large 24.11", + "family": "mistral-large", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-04-30", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-09", + "release_date": "2024-11-01", + "last_updated": "2024-11-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.07, "output": 0.28 }, - "limit": { "context": 131000, "output": 131000 } + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Qwen/Qwen3-235B-A22B": { - "id": "Qwen/Qwen3-235B-A22B", - "name": "Qwen/Qwen3-235B-A22B", - "family": "qwen", + "mistral-ai/mistral-small-2503": { + "id": "mistral-ai/mistral-small-2503", + "name": "Mistral Small 3.1", + "family": "mistral-small", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-04-30", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-09", + "release_date": "2025-03-01", + "last_updated": "2025-03-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.35, "output": 1.42 }, - "limit": { "context": 131000, "output": 131000 } + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Qwen/Qwen2.5-72B-Instruct-128K": { - "id": "Qwen/Qwen2.5-72B-Instruct-128K", - "name": "Qwen/Qwen2.5-72B-Instruct-128K", - "family": "qwen", + "mistral-ai/mistral-medium-2505": { + "id": "mistral-ai/mistral-medium-2505", + "name": "Mistral Medium 3 (25.05)", + "family": "mistral-medium", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-09-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-09", + "release_date": "2025-05-01", + "last_updated": "2025-05-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.59, "output": 0.59 }, - "limit": { "context": 131000, "output": 4000 } + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "Qwen/Qwen3-235B-A22B-Thinking-2507": { - "id": "Qwen/Qwen3-235B-A22B-Thinking-2507", - "name": "Qwen/Qwen3-235B-A22B-Thinking-2507", - "family": "qwen", + "mistral-ai/codestral-2501": { + "id": "mistral-ai/codestral-2501", + "name": "Codestral 25.01", + "family": "codestral", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-07-28", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-03", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.13, "output": 0.6 }, - "limit": { "context": 262000, "output": 262000 } - }, - "Qwen/Qwen3-Next-80B-A3B-Instruct": { - "id": "Qwen/Qwen3-Next-80B-A3B-Instruct", - "name": "Qwen/Qwen3-Next-80B-A3B-Instruct", - "family": "qwen", + "limit": { + "context": 32000, + "output": 8192 + }, + "cost": { + "input": 0, + "output": 0 + } + } + } + }, + "neuralwatt": { + "id": "neuralwatt", + "env": ["NEURALWATT_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.neuralwatt.com/v1", + "name": "Neuralwatt", + "doc": "https://portal.neuralwatt.com/docs", + "models": { + "glm-5-fast": { + "id": "glm-5-fast", + "name": "GLM 5 Fast", + "family": "glm", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-09-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.14, "output": 1.4 }, - "limit": { "context": 262000, "output": 262000 } + "release_date": "2026-04-07", + "last_updated": "2026-04-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 200000, + "output": 200000 + }, + "cost": { + "input": 1.1, + "output": 3.6 + } }, - "Qwen/Qwen2.5-VL-72B-Instruct": { - "id": "Qwen/Qwen2.5-VL-72B-Instruct", - "name": "Qwen/Qwen2.5-VL-72B-Instruct", - "family": "qwen", + "kimi-k2.6-fast": { + "id": "kimi-k2.6-fast", + "name": "Kimi K2.6 Fast", + "family": "kimi", "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-01-28", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.59, "output": 0.59 }, - "limit": { "context": 131000, "output": 4000 } - }, - "Qwen/Qwen3-VL-8B-Thinking": { - "id": "Qwen/Qwen3-VL-8B-Thinking", - "name": "Qwen/Qwen3-VL-8B-Thinking", - "family": "qwen", - "attachment": true, - "reasoning": true, - "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-10-15", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.18, "output": 2 }, - "limit": { "context": 262000, "output": 262000 } + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.69, + "output": 3.22 + } }, - "Qwen/Qwen3-Omni-30B-A3B-Captioner": { - "id": "Qwen/Qwen3-Omni-30B-A3B-Captioner", - "name": "Qwen/Qwen3-Omni-30B-A3B-Captioner", + "qwen3.5-397b-fast": { + "id": "qwen3.5-397b-fast", + "name": "Qwen3.5 397B Fast", "family": "qwen", - "attachment": true, + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-10-04", - "last_updated": "2025-11-25", - "modalities": { "input": ["audio"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4 }, - "limit": { "context": 66000, "output": 66000 } + "release_date": "2026-02-01", + "last_updated": "2026-02-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.69, + "output": 4.14 + } }, - "Qwen/Qwen3-VL-30B-A3B-Thinking": { - "id": "Qwen/Qwen3-VL-30B-A3B-Thinking", - "name": "Qwen/Qwen3-VL-30B-A3B-Thinking", - "family": "qwen", - "attachment": true, - "reasoning": true, + "glm-5.1-fast": { + "id": "glm-5.1-fast", + "name": "GLM 5.1 Fast", + "family": "glm", + "attachment": false, + "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-10-11", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.29, "output": 1 }, - "limit": { "context": 262000, "output": 262000 } + "release_date": "2026-04-07", + "last_updated": "2026-04-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 200000, + "output": 200000 + }, + "cost": { + "input": 1.1, + "output": 3.6 + } }, - "Qwen/Qwen2.5-VL-7B-Instruct": { - "id": "Qwen/Qwen2.5-VL-7B-Instruct", - "name": "Qwen/Qwen2.5-VL-7B-Instruct", - "family": "qwen", + "qwen3.6-35b-fast": { + "id": "qwen3.6-35b-fast", + "name": "Qwen3.6 35B Fast", + "family": "qwen3.6", "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-01-28", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.05, "output": 0.05 }, - "limit": { "context": 33000, "output": 4000 } + "release_date": "2026-04-01", + "last_updated": "2026-04-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.05, + "output": 0.1 + } }, - "Qwen/Qwen2.5-VL-32B-Instruct": { - "id": "Qwen/Qwen2.5-VL-32B-Instruct", - "name": "Qwen/Qwen2.5-VL-32B-Instruct", - "family": "qwen", + "kimi-k2.5-fast": { + "id": "kimi-k2.5-fast", + "name": "Kimi K2.5 Fast", + "family": "kimi", "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-03-24", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.27, "output": 0.27 }, - "limit": { "context": 131000, "output": 131000 } + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.52, + "output": 2.59 + } }, - "Qwen/Qwen3-Coder-30B-A3B-Instruct": { - "id": "Qwen/Qwen3-Coder-30B-A3B-Instruct", - "name": "Qwen/Qwen3-Coder-30B-A3B-Instruct", + "Qwen/Qwen3.5-397B-A17B-FP8": { + "id": "Qwen/Qwen3.5-397B-A17B-FP8", + "name": "Qwen3.5 397B A17B FP8", "family": "qwen", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-08-01", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.07, "output": 0.28 }, - "limit": { "context": 262000, "output": 262000 } + "release_date": "2026-02-01", + "last_updated": "2026-02-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.69, + "output": 4.14 + } }, - "Qwen/Qwen3-VL-8B-Instruct": { - "id": "Qwen/Qwen3-VL-8B-Instruct", - "name": "Qwen/Qwen3-VL-8B-Instruct", - "family": "qwen", + "Qwen/Qwen3.6-35B-A3B": { + "id": "Qwen/Qwen3.6-35B-A3B", + "name": "Qwen3.6 35B A3B", + "family": "qwen3.6", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-10-15", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.18, "output": 0.68 }, - "limit": { "context": 262000, "output": 262000 } + "release_date": "2026-04-01", + "last_updated": "2026-04-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.05, + "output": 0.1 + } }, - "Qwen/Qwen3-8B": { - "id": "Qwen/Qwen3-8B", - "name": "Qwen/Qwen3-8B", - "family": "qwen", + "zai-org/GLM-5.1-FP8": { + "id": "zai-org/GLM-5.1-FP8", + "name": "GLM 5.1 FP8", + "family": "glm", "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "release_date": "2026-04-07", + "last_updated": "2026-04-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 200000, + "output": 200000 + }, + "cost": { + "input": 1.1, + "output": 3.6 + } + }, + "mistralai/Devstral-Small-2-24B-Instruct-2512": { + "id": "mistralai/Devstral-Small-2-24B-Instruct-2512", + "name": "Devstral Small 2 24B Instruct 2512", + "family": "devstral", + "attachment": true, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-04-30", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.06, "output": 0.06 }, - "limit": { "context": 131000, "output": 131000 } + "release_date": "2025-12-09", + "last_updated": "2025-12-09", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.12, + "output": 0.35 + } }, - "Qwen/QwQ-32B": { - "id": "Qwen/QwQ-32B", - "name": "Qwen/QwQ-32B", - "family": "qwen", + "openai/gpt-oss-20b": { + "id": "openai/gpt-oss-20b", + "name": "GPT OSS 20B", + "family": "gpt-oss", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-03-06", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.15, "output": 0.58 }, - "limit": { "context": 131000, "output": 131000 } + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 16384, + "output": 16384 + }, + "cost": { + "input": 0.03, + "output": 0.16 + } }, - "Qwen/Qwen3-Coder-480B-A35B-Instruct": { - "id": "Qwen/Qwen3-Coder-480B-A35B-Instruct", - "name": "Qwen/Qwen3-Coder-480B-A35B-Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, + "moonshotai/Kimi-K2.6": { + "id": "moonshotai/Kimi-K2.6", + "name": "Kimi K2.6", + "family": "kimi", + "attachment": true, + "reasoning": true, "tool_call": true, - "structured_output": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-07-31", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 1 }, - "limit": { "context": 262000, "output": 262000 } + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.69, + "output": 3.22 + } }, - "Qwen/Qwen3-VL-32B-Instruct": { - "id": "Qwen/Qwen3-VL-32B-Instruct", - "name": "Qwen/Qwen3-VL-32B-Instruct", - "family": "qwen", + "moonshotai/Kimi-K2.5": { + "id": "moonshotai/Kimi-K2.5", + "name": "Kimi K2.5", + "family": "kimi", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-10-21", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 0.6 }, - "limit": { "context": 262000, "output": 262000 } + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.52, + "output": 2.59 + } }, - "Qwen/Qwen3-30B-A3B-Instruct-2507": { - "id": "Qwen/Qwen3-30B-A3B-Instruct-2507", - "name": "Qwen/Qwen3-30B-A3B-Instruct-2507", - "family": "qwen", + "MiniMaxAI/MiniMax-M2.5": { + "id": "MiniMaxAI/MiniMax-M2.5", + "name": "MiniMax M2.5", + "family": "minimax", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-07-30", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.09, "output": 0.3 }, - "limit": { "context": 262000, "output": 262000 } - }, - "Qwen/Qwen3-Omni-30B-A3B-Instruct": { - "id": "Qwen/Qwen3-Omni-30B-A3B-Instruct", - "name": "Qwen/Qwen3-Omni-30B-A3B-Instruct", - "family": "qwen", - "attachment": true, - "reasoning": false, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 196608, + "output": 196608 + }, + "cost": { + "input": 0.35, + "output": 1.38 + } + } + } + }, + "sarvam": { + "id": "sarvam", + "env": ["SARVAM_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.sarvam.ai/v1", + "name": "Sarvam AI", + "doc": "https://docs.sarvam.ai/api-reference-docs/getting-started/models", + "models": { + "sarvam-105b": { + "id": "sarvam-105b", + "name": "Sarvam-105B", + "family": "sarvam", + "attachment": false, + "reasoning": true, "tool_call": true, - "structured_output": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-10-04", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image", "audio"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4 }, - "limit": { "context": 66000, "output": 66000 } + "release_date": "2026-02-18", + "last_updated": "2026-03-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + } }, - "Qwen/Qwen2.5-7B-Instruct": { - "id": "Qwen/Qwen2.5-7B-Instruct", - "name": "Qwen/Qwen2.5-7B-Instruct", - "family": "qwen", + "sarvam-30b": { + "id": "sarvam-30b", + "name": "Sarvam-30B", + "family": "sarvam", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2024-09-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.05, "output": 0.05 }, - "limit": { "context": 33000, "output": 4000 } - }, - "Qwen/Qwen3-VL-235B-A22B-Instruct": { - "id": "Qwen/Qwen3-VL-235B-A22B-Instruct", - "name": "Qwen/Qwen3-VL-235B-A22B-Instruct", - "family": "qwen", - "attachment": true, + "release_date": "2026-02-18", + "last_updated": "2026-03-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 65536, + "output": 65536 + } + } + } + }, + "togetherai": { + "id": "togetherai", + "env": ["TOGETHER_API_KEY"], + "npm": "@ai-sdk/togetherai", + "name": "Together AI", + "doc": "https://docs.together.ai/docs/serverless-models", + "models": { + "essentialai/Rnj-1-Instruct": { + "id": "essentialai/Rnj-1-Instruct", + "name": "Rnj-1 Instruct", + "family": "rnj", + "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-10-04", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.3, "output": 1.5 }, - "limit": { "context": 262000, "output": 262000 } + "knowledge": "2024-10", + "release_date": "2025-12-05", + "last_updated": "2025-12-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 32768 + }, + "cost": { + "input": 0.15, + "output": 0.15 + } }, - "Qwen/Qwen2.5-72B-Instruct": { - "id": "Qwen/Qwen2.5-72B-Instruct", - "name": "Qwen/Qwen2.5-72B-Instruct", + "Qwen/Qwen3.5-397B-A17B": { + "id": "Qwen/Qwen3.5-397B-A17B", + "name": "Qwen3.5 397B A17B", "family": "qwen", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-09-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.59, "output": 0.59 }, - "limit": { "context": 33000, "output": 4000 } + "release_date": "2026-02-16", + "last_updated": "2026-02-16", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 130000 + }, + "cost": { + "input": 0.6, + "output": 3.6 + } }, - "Qwen/Qwen3-VL-32B-Thinking": { - "id": "Qwen/Qwen3-VL-32B-Thinking", - "name": "Qwen/Qwen3-VL-32B-Thinking", + "Qwen/Qwen3.6-Plus": { + "id": "Qwen/Qwen3.6-Plus", + "name": "Qwen3.6 Plus", "family": "qwen", - "attachment": true, + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-10-21", - "last_updated": "2025-11-25", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.2, "output": 1.5 }, - "limit": { "context": 262000, "output": 262000 } + "release_date": "2026-04-30", + "last_updated": "2026-04-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 500000 + }, + "cost": { + "input": 0.5, + "output": 3 + } }, - "Qwen/Qwen2.5-32B-Instruct": { - "id": "Qwen/Qwen2.5-32B-Instruct", - "name": "Qwen/Qwen2.5-32B-Instruct", + "Qwen/Qwen3-Coder-Next-FP8": { + "id": "Qwen/Qwen3-Coder-Next-FP8", + "name": "Qwen3 Coder Next FP8", "family": "qwen", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2024-09-19", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.18, "output": 0.18 }, - "limit": { "context": 33000, "output": 4000 } + "knowledge": "2026-02-03", + "release_date": "2026-02-03", + "last_updated": "2026-02-03", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.5, + "output": 1.2 + } }, - "Qwen/Qwen3-235B-A22B-Instruct-2507": { - "id": "Qwen/Qwen3-235B-A22B-Instruct-2507", - "name": "Qwen/Qwen3-235B-A22B-Instruct-2507", + "Qwen/Qwen3-235B-A22B-Instruct-2507-tput": { + "id": "Qwen/Qwen3-235B-A22B-Instruct-2507-tput", + "name": "Qwen3 235B A22B Instruct 2507 FP8", "family": "qwen", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-07-23", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.09, "output": 0.6 }, - "limit": { "context": 262000, "output": 262000 } + "knowledge": "2025-07", + "release_date": "2025-07-25", + "last_updated": "2025-07-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.2, + "output": 0.6 + } }, - "inclusionAI/Ling-flash-2.0": { - "id": "inclusionAI/Ling-flash-2.0", - "name": "inclusionAI/Ling-flash-2.0", - "family": "ling", + "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8": { + "id": "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8", + "name": "Qwen3 Coder 480B A35B Instruct", + "family": "qwen", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-09-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.14, "output": 0.57 }, - "limit": { "context": 131000, "output": 131000 } + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 2, + "output": 2 + } }, - "inclusionAI/Ring-flash-2.0": { - "id": "inclusionAI/Ring-flash-2.0", - "name": "inclusionAI/Ring-flash-2.0", - "family": "ring", + "zai-org/GLM-5.1": { + "id": "zai-org/GLM-5.1", + "name": "GLM-5.1", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2025-09-29", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.14, "output": 0.57 }, - "limit": { "context": 131000, "output": 131000 } + "knowledge": "2025-11", + "release_date": "2026-04-07", + "last_updated": "2026-04-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 202752, + "output": 131072 + }, + "cost": { + "input": 1.4, + "output": 4.4 + } }, - "inclusionAI/Ling-mini-2.0": { - "id": "inclusionAI/Ling-mini-2.0", - "name": "inclusionAI/Ling-mini-2.0", - "family": "ling", + "meta-llama/Llama-3.3-70B-Instruct-Turbo": { + "id": "meta-llama/Llama-3.3-70B-Instruct-Turbo", + "name": "Llama 3.3 70B", + "family": "llama", "attachment": false, "reasoning": false, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-09-10", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.07, "output": 0.28 }, - "limit": { "context": 131000, "output": 131000 } + "knowledge": "2023-12", + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.88, + "output": 0.88 + } }, - "moonshotai/Kimi-K2-Instruct": { - "id": "moonshotai/Kimi-K2-Instruct", - "name": "moonshotai/Kimi-K2-Instruct", - "family": "kimi", + "deepseek-ai/DeepSeek-V3": { + "id": "deepseek-ai/DeepSeek-V3", + "name": "DeepSeek V3", + "family": "deepseek", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-07-13", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.58, "output": 2.29 }, - "limit": { "context": 131000, "output": 131000 } + "knowledge": "2024-07", + "release_date": "2025-01-20", + "last_updated": "2025-05-29", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 1.25, + "output": 1.25 + } }, - "moonshotai/Kimi-K2.5": { - "id": "moonshotai/Kimi-K2.5", - "name": "moonshotai/Kimi-K2.5", - "family": "kimi", + "deepseek-ai/DeepSeek-R1": { + "id": "deepseek-ai/DeepSeek-R1", + "name": "DeepSeek R1", + "family": "deepseek-thinking", "attachment": false, "reasoning": true, - "tool_call": true, - "structured_output": true, + "tool_call": false, "temperature": true, - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.55, "output": 3 }, - "limit": { "context": 262000, "output": 262000 } + "knowledge": "2024-07", + "release_date": "2024-12-26", + "last_updated": "2025-03-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 163839, + "output": 163839 + }, + "cost": { + "input": 3, + "output": 7 + } }, - "moonshotai/Kimi-K2-Instruct-0905": { - "id": "moonshotai/Kimi-K2-Instruct-0905", - "name": "moonshotai/Kimi-K2-Instruct-0905", - "family": "kimi", + "deepseek-ai/DeepSeek-V3-1": { + "id": "deepseek-ai/DeepSeek-V3-1", + "name": "DeepSeek V3.1", + "family": "deepseek", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-09-08", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.4, "output": 2 }, - "limit": { "context": 262000, "output": 262000 } + "knowledge": "2025-08", + "release_date": "2025-08-21", + "last_updated": "2025-08-21", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 1.7 + } }, - "moonshotai/Kimi-K2-Thinking": { - "id": "moonshotai/Kimi-K2-Thinking", - "name": "moonshotai/Kimi-K2-Thinking", - "family": "kimi-thinking", + "deepseek-ai/DeepSeek-V4-Pro": { + "id": "deepseek-ai/DeepSeek-V4-Pro", + "name": "DeepSeek V4 Pro", + "family": "deepseek", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "structured_output": true, "temperature": true, - "release_date": "2025-11-07", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.55, "output": 2.5 }, - "limit": { "context": 262000, "output": 262000 } + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 512000, + "output": 384000 + }, + "cost": { + "input": 2.1, + "output": 4.4, + "cache_read": 0.2 + } }, - "tencent/Hunyuan-MT-7B": { - "id": "tencent/Hunyuan-MT-7B", - "name": "tencent/Hunyuan-MT-7B", - "family": "hunyuan", + "openai/gpt-oss-120b": { + "id": "openai/gpt-oss-120b", + "name": "GPT OSS 120B", + "family": "gpt-oss", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, - "release_date": "2025-09-18", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 33000, "output": 33000 } + "knowledge": "2025-08", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "tencent/Hunyuan-A13B-Instruct": { - "id": "tencent/Hunyuan-A13B-Instruct", - "name": "tencent/Hunyuan-A13B-Instruct", - "family": "hunyuan", - "attachment": false, - "reasoning": false, - "tool_call": true, - "structured_output": true, - "temperature": true, - "release_date": "2025-06-30", - "last_updated": "2025-11-25", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.14, "output": 0.57 }, - "limit": { "context": 131000, "output": 131000 } - } - } - }, - "alibaba-coding-plan": { - "id": "alibaba-coding-plan", - "env": ["ALIBABA_CODING_PLAN_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://coding-intl.dashscope.aliyuncs.com/v1", - "name": "Alibaba Coding Plan", - "doc": "https://www.alibabacloud.com/help/en/model-studio/coding-plan", - "models": { - "qwen3.5-plus": { - "id": "qwen3.5-plus", - "name": "Qwen3.5 Plus", - "family": "qwen", - "attachment": false, + "google/gemma-4-31B-it": { + "id": "google/gemma-4-31B-it", + "name": "Gemma 4 31B Instruct", + "family": "gemma", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-02-16", - "last_updated": "2026-02-16", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 1000000, "output": 65536 } - }, - "qwen3-coder-next": { - "id": "qwen3-coder-next", - "name": "Qwen3 Coder Next", - "family": "qwen", - "attachment": false, - "reasoning": false, + "knowledge": "2025-01", + "release_date": "2026-04-07", + "last_updated": "2026-04-07", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0.2, + "output": 0.5 + } + }, + "moonshotai/Kimi-K2.6": { + "id": "moonshotai/Kimi-K2.6", + "name": "Kimi K2.6", + "family": "kimi-k2.6", + "attachment": true, + "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "release_date": "2026-02-03", - "last_updated": "2026-02-03", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 262144, + "output": 131000 + }, + "cost": { + "input": 1.2, + "output": 4.5, + "cache_read": 0.2 + } }, - "kimi-k2.5": { - "id": "kimi-k2.5", + "moonshotai/Kimi-K2.5": { + "id": "moonshotai/Kimi-K2.5", "name": "Kimi K2.5", "family": "kimi", - "attachment": true, + "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "interleaved": true, "temperature": true, - "knowledge": "2025-01", + "knowledge": "2026-01", "release_date": "2026-01-27", "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 262144, "output": 32768 } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.5, + "output": 2.8 + } }, - "MiniMax-M2.5": { - "id": "MiniMax-M2.5", + "MiniMaxAI/MiniMax-M2.5": { + "id": "MiniMaxAI/MiniMax-M2.5", "name": "MiniMax-M2.5", "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, "release_date": "2026-02-12", "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 196608, "input": 196601, "output": 24576 } - }, - "glm-5": { - "id": "glm-5", - "name": "GLM-5", - "family": "glm", - "attachment": false, - "reasoning": true, - "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 202752, "output": 16384 } - }, - "qwen3-coder-plus": { - "id": "qwen3-coder-plus", - "name": "Qwen3 Coder Plus", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-23", - "last_updated": "2025-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 1000000, "output": 65536 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.06 + } }, - "glm-4.7": { - "id": "glm-4.7", - "name": "GLM-4.7", - "family": "glm", + "MiniMaxAI/MiniMax-M2.7": { + "id": "MiniMaxAI/MiniMax-M2.7", + "name": "MiniMax-M2.7", + "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 202752, "output": 16384 } - }, - "qwen3-max-2026-01-23": { - "id": "qwen3-max-2026-01-23", - "name": "Qwen3 Max", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-01-23", - "last_updated": "2026-01-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 262144, "output": 32768 } + "limit": { + "context": 202752, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.06 + } } } }, - "inception": { - "id": "inception", - "env": ["INCEPTION_API_KEY"], + "qihang-ai": { + "id": "qihang-ai", + "env": ["QIHANG_API_KEY"], "npm": "@ai-sdk/openai-compatible", - "api": "https://api.inceptionlabs.ai/v1/", - "name": "Inception", - "doc": "https://platform.inceptionlabs.ai/docs", + "api": "https://api.qhaigc.net/v1", + "name": "QiHang", + "doc": "https://www.qhaigc.net/docs", "models": { - "mercury-edit": { - "id": "mercury-edit", - "name": "Mercury Edit", - "attachment": false, + "claude-opus-4-5-20251101": { + "id": "claude-opus-4-5-20251101", + "name": "Claude Opus 4.5", + "family": "claude-opus", + "attachment": true, "reasoning": true, - "tool_call": false, + "tool_call": true, "temperature": true, - "release_date": "2026-02-24", - "last_updated": "2026-02-24", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-03", + "release_date": "2025-11-01", + "last_updated": "2025-11-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 0.75, "cache_read": 0.025 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 0.71, + "output": 3.57 + } }, - "mercury-2": { - "id": "mercury-2", - "name": "Mercury 2", - "family": "mercury", - "attachment": false, + "gemini-3-flash-preview": { + "id": "gemini-3-flash-preview", + "name": "Gemini 3 Flash Preview", + "family": "gemini-flash", + "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": true, - "knowledge": "2025-01-01", - "release_date": "2026-02-24", - "last_updated": "2026-02-24", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-01", + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 0.75, "cache_read": 0.025 }, - "limit": { "context": 128000, "output": 50000 } + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.07, + "output": 0.43, + "tiers": [ + { + "input": 0.07, + "output": 0.43, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 0.07, + "output": 0.43 + } + } }, - "mercury-coder": { - "id": "mercury-coder", - "name": "Mercury Coder", - "family": "mercury", - "attachment": false, - "reasoning": false, + "gpt-5-mini": { + "id": "gpt-5-mini", + "name": "GPT-5-Mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2023-10", - "release_date": "2025-02-26", - "last_updated": "2025-07-31", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-09-30", + "release_date": "2025-09-15", + "last_updated": "2025-09-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 1, "cache_read": 0.25, "cache_write": 1 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 0.04, + "output": 0.29 + } }, - "mercury": { - "id": "mercury", - "name": "Mercury", - "family": "mercury", - "attachment": false, - "reasoning": false, + "gemini-3-pro-preview": { + "id": "gemini-3-pro-preview", + "name": "Gemini 3 Pro Preview", + "family": "gemini-pro", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2023-10", - "release_date": "2025-06-26", - "last_updated": "2025-07-31", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-11", + "release_date": "2025-11-19", + "last_updated": "2025-11-19", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 1, "cache_read": 0.25, "cache_write": 1 }, - "limit": { "context": 128000, "output": 16384 } - } - } - }, - "zhipuai-coding-plan": { - "id": "zhipuai-coding-plan", - "env": ["ZHIPU_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://open.bigmodel.cn/api/coding/paas/v4", - "name": "Zhipu AI Coding Plan", - "doc": "https://docs.bigmodel.cn/cn/coding-plan/overview", - "models": { - "glm-5.1": { - "id": "glm-5.1", - "name": "GLM-5.1", - "family": "glm", - "attachment": false, + "limit": { + "context": 1000000, + "output": 65000 + }, + "cost": { + "input": 0.57, + "output": 3.43 + } + }, + "claude-sonnet-4-5-20250929": { + "id": "claude-sonnet-4-5-20250929", + "name": "Claude Sonnet 4.5", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, "temperature": true, - "release_date": "2026-03-27", - "last_updated": "2026-03-27", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 200000, "output": 131072 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 0.43, + "output": 2.14 + } }, - "glm-4.6v-flash": { - "id": "glm-4.6v-flash", - "name": "GLM-4.6V-Flash", - "family": "glm", + "gpt-5.2": { + "id": "gpt-5.2", + "name": "GPT-5.2", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-08", - "last_updated": "2025-12-08", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 32768 } + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.25, + "output": 2 + } }, - "glm-4.7": { - "id": "glm-4.7", - "name": "GLM-4.7", - "family": "glm", - "attachment": false, + "gpt-5.2-codex": { + "id": "gpt-5.2-codex", + "name": "GPT-5.2 Codex", + "family": "gpt-codex", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 204800, "output": 131072 } + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0.14, + "output": 1.14 + } }, - "glm-4.5v": { - "id": "glm-4.5v", - "name": "GLM-4.5V", - "family": "glm", + "gemini-2.5-flash": { + "id": "gemini-2.5-flash", + "name": "Gemini 2.5 Flash", + "family": "gemini-flash", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-08-11", - "last_updated": "2025-08-11", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 64000, "output": 16384 } + "knowledge": "2025-01", + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": ["text", "image", "video", "audio", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1048576, + "output": 65536 + }, + "cost": { + "input": 0.09, + "output": 0.71, + "tiers": [ + { + "input": 0.09, + "output": 0.71, + "tier": { + "type": "context", + "size": 200000 + } + } + ], + "context_over_200k": { + "input": 0.09, + "output": 0.71 + } + } }, - "glm-4.5-air": { - "id": "glm-4.5-air", - "name": "GLM-4.5-Air", - "family": "glm-air", - "attachment": false, + "claude-haiku-4-5-20251001": { + "id": "claude-haiku-4-5-20251001", + "name": "Claude Haiku 4.5", + "family": "claude-haiku", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 131072, "output": 98304 } - }, - "glm-5": { - "id": "glm-5", - "name": "GLM-5", - "family": "glm", + "knowledge": "2025-07-31", + "release_date": "2025-10-01", + "last_updated": "2025-10-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 0.14, + "output": 0.71 + } + } + } + }, + "tencent-tokenhub": { + "id": "tencent-tokenhub", + "env": ["TENCENT_TOKENHUB_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://tokenhub.tencentmaas.com/v1", + "name": "Tencent TokenHub", + "doc": "https://cloud.tencent.com/document/product/1823/130050", + "models": { + "hy3-preview": { + "id": "hy3-preview", + "name": "Hy3 preview", + "family": "Hy", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-20", + "last_updated": "2026-04-20", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 256000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + } + } + }, + "anthropic": { + "id": "anthropic", + "env": ["ANTHROPIC_API_KEY"], + "npm": "@ai-sdk/anthropic", + "name": "Anthropic", + "doc": "https://docs.anthropic.com/en/docs/about-claude/models", + "models": { + "claude-3-sonnet-20240229": { + "id": "claude-3-sonnet-20240229", + "name": "Claude Sonnet 3", + "family": "claude-sonnet", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2023-08-31", + "release_date": "2024-03-04", + "last_updated": "2024-03-04", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 4096 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 0.3 + } }, - "glm-4.5-flash": { - "id": "glm-4.5-flash", - "name": "GLM-4.5-Flash", - "family": "glm-flash", - "attachment": false, + "claude-haiku-4-5": { + "id": "claude-haiku-4-5", + "name": "Claude Haiku 4.5 (latest)", + "family": "claude-haiku", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 131072, "output": 98304 } + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } }, - "glm-4.6v": { - "id": "glm-4.6v", - "name": "GLM-4.6V", - "family": "glm", + "claude-opus-4-5-20251101": { + "id": "claude-opus-4-5-20251101", + "name": "Claude Opus 4.5", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-08", - "last_updated": "2025-12-08", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0 }, - "limit": { "context": 128000, "output": 32768 } + "knowledge": "2025-03-31", + "release_date": "2025-11-01", + "last_updated": "2025-11-01", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "glm-4.6": { - "id": "glm-4.6", - "name": "GLM-4.6", - "family": "glm", - "attachment": false, - "reasoning": true, + "claude-3-opus-20240229": { + "id": "claude-3-opus-20240229", + "name": "Claude Opus 3", + "family": "claude-opus", + "attachment": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-30", - "last_updated": "2025-09-30", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 204800, "output": 131072 } + "knowledge": "2023-08-31", + "release_date": "2024-02-29", + "last_updated": "2024-02-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 4096 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "glm-4.7-flashx": { - "id": "glm-4.7-flashx", - "name": "GLM-4.7-FlashX", - "family": "glm-flash", - "attachment": false, - "reasoning": true, + "claude-3-5-haiku-20241022": { + "id": "claude-3-5-haiku-20241022", + "name": "Claude Haiku 3.5", + "family": "claude-haiku", + "attachment": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-01-19", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.07, "output": 0.4, "cache_read": 0.01, "cache_write": 0 }, - "limit": { "context": 200000, "output": 131072 } + "knowledge": "2024-07-31", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 0.8, + "output": 4, + "cache_read": 0.08, + "cache_write": 1 + } }, - "glm-4.5": { - "id": "glm-4.5", - "name": "GLM-4.5", - "family": "glm", - "attachment": false, + "claude-3-5-sonnet-20241022": { + "id": "claude-3-5-sonnet-20241022", + "name": "Claude Sonnet 3.5 v2", + "family": "claude-sonnet", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04-30", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } + }, + "claude-sonnet-4-6": { + "id": "claude-sonnet-4-6", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 131072, "output": 98304 } + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "glm-5-turbo": { - "id": "glm-5-turbo", - "name": "GLM-5-Turbo", - "family": "glm", - "attachment": false, + "claude-opus-4-0": { + "id": "claude-opus-4-0", + "name": "Claude Opus 4 (latest)", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, "temperature": true, - "release_date": "2026-03-16", - "last_updated": "2026-03-16", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } + }, + "claude-opus-4-7": { + "id": "claude-opus-4-7", + "name": "Claude Opus 4.7", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 200000, "output": 131072 } + "limit": { + "context": 1000000, + "output": 128000 + }, + "experimental": { + "modes": { + "fast": { + "cost": { + "input": 30, + "output": 150, + "cache_read": 3, + "cache_write": 37.5 + }, + "provider": { + "body": { + "speed": "fast" + }, + "headers": { + "anthropic-beta": "fast-mode-2026-02-01" + } + } + } + } + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "glm-4.7-flash": { - "id": "glm-4.7-flash", - "name": "GLM-4.7-Flash", - "family": "glm-flash", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-01-19", - "last_updated": "2026-01-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0, "cache_write": 0 }, - "limit": { "context": 200000, "output": 131072 } - } - } - }, - "moonshotai-cn": { - "id": "moonshotai-cn", - "env": ["MOONSHOT_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.moonshot.cn/v1", - "name": "Moonshot AI (China)", - "doc": "https://platform.moonshot.cn/docs/api/chat", - "models": { - "kimi-k2-0711-preview": { - "id": "kimi-k2-0711-preview", - "name": "Kimi K2 0711", - "family": "kimi", - "attachment": false, + "claude-3-haiku-20240307": { + "id": "claude-3-haiku-20240307", + "name": "Claude Haiku 3", + "family": "claude-haiku", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-07-14", - "last_updated": "2025-07-14", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.5, "cache_read": 0.15 }, - "limit": { "context": 131072, "output": 16384 } + "knowledge": "2023-08-31", + "release_date": "2024-03-13", + "last_updated": "2024-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 4096 + }, + "cost": { + "input": 0.25, + "output": 1.25, + "cache_read": 0.03, + "cache_write": 0.3 + } }, - "kimi-k2-turbo-preview": { - "id": "kimi-k2-turbo-preview", - "name": "Kimi K2 Turbo", - "family": "kimi", - "attachment": false, - "reasoning": false, + "claude-sonnet-4-5-20250929": { + "id": "claude-sonnet-4-5-20250929", + "name": "Claude Sonnet 4.5", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 2.4, "output": 10, "cache_read": 0.6 }, - "limit": { "context": 262144, "output": 262144 } + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "kimi-k2-0905-preview": { - "id": "kimi-k2-0905-preview", - "name": "Kimi K2 0905", - "family": "kimi", - "attachment": false, + "claude-3-5-haiku-latest": { + "id": "claude-3-5-haiku-latest", + "name": "Claude Haiku 3.5 (latest)", + "family": "claude-haiku", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-09-05", - "last_updated": "2025-09-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.5, "cache_read": 0.15 }, - "limit": { "context": 262144, "output": 262144 } + "knowledge": "2024-07-31", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 0.8, + "output": 4, + "cache_read": 0.08, + "cache_write": 1 + } }, - "kimi-k2-thinking-turbo": { - "id": "kimi-k2-thinking-turbo", - "name": "Kimi K2 Thinking Turbo", - "family": "kimi-thinking", - "attachment": false, + "claude-opus-4-1": { + "id": "claude-opus-4-1", + "name": "Claude Opus 4.1 (latest)", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-11-06", - "last_updated": "2025-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1.15, "output": 8, "cache_read": 0.15 }, - "limit": { "context": 262144, "output": 262144 } + "knowledge": "2025-03-31", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "kimi-k2.5": { - "id": "kimi-k2.5", - "name": "Kimi K2.5", - "family": "kimi", - "attachment": false, + "claude-sonnet-4-0": { + "id": "claude-sonnet-4-0", + "name": "Claude Sonnet 4 (latest)", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, - "structured_output": true, - "temperature": false, - "knowledge": "2025-01", - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 3, "cache_read": 0.1 }, - "limit": { "context": 262144, "output": 262144 } + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "kimi-k2-thinking": { - "id": "kimi-k2-thinking", - "name": "Kimi K2 Thinking", - "family": "kimi-thinking", - "attachment": false, - "reasoning": true, + "claude-3-5-sonnet-20240620": { + "id": "claude-3-5-sonnet-20240620", + "name": "Claude Sonnet 3.5", + "family": "claude-sonnet", + "attachment": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-11-06", - "last_updated": "2025-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.5, "cache_read": 0.15 }, - "limit": { "context": 262144, "output": 262144 } - } - } - }, - "fireworks-ai": { - "id": "fireworks-ai", - "env": ["FIREWORKS_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.fireworks.ai/inference/v1/", - "name": "Fireworks AI", - "doc": "https://fireworks.ai/docs/", - "models": { - "accounts/fireworks/routers/kimi-k2p5-turbo": { - "id": "accounts/fireworks/routers/kimi-k2p5-turbo", - "name": "Kimi K2.5 Turbo", - "family": "kimi-thinking", - "attachment": false, + "knowledge": "2024-04-30", + "release_date": "2024-06-20", + "last_updated": "2024-06-20", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 8192 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } + }, + "claude-opus-4-5": { + "id": "claude-opus-4-5", + "name": "Claude Opus 4.5 (latest)", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0, "output": 0, "cache_read": 0 }, - "limit": { "context": 256000, "output": 256000 } + "knowledge": "2025-03-31", + "release_date": "2025-11-24", + "last_updated": "2025-11-24", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "accounts/fireworks/models/kimi-k2p5": { - "id": "accounts/fireworks/models/kimi-k2p5", - "name": "Kimi K2.5", - "family": "kimi-thinking", - "attachment": false, + "claude-opus-4-1-20250805": { + "id": "claude-opus-4-1-20250805", + "name": "Claude Opus 4.1", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 3, "cache_read": 0.1 }, - "limit": { "context": 256000, "output": 256000 } + "knowledge": "2025-03-31", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } }, - "accounts/fireworks/models/kimi-k2-thinking": { - "id": "accounts/fireworks/models/kimi-k2-thinking", - "name": "Kimi K2 Thinking", - "family": "kimi-thinking", - "attachment": false, + "claude-haiku-4-5-20251001": { + "id": "claude-haiku-4-5-20251001", + "name": "Claude Haiku 4.5", + "family": "claude-haiku", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "release_date": "2025-11-06", - "last_updated": "2025-11-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.5, "cache_read": 0.3 }, - "limit": { "context": 256000, "output": 256000 } + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + } }, - "accounts/fireworks/models/deepseek-v3p1": { - "id": "accounts/fireworks/models/deepseek-v3p1", - "name": "DeepSeek V3.1", - "family": "deepseek", - "attachment": false, + "claude-sonnet-4-20250514": { + "id": "claude-sonnet-4-20250514", + "name": "Claude Sonnet 4", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-07", - "release_date": "2025-08-21", - "last_updated": "2025-08-21", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.56, "output": 1.68 }, - "limit": { "context": 163840, "output": 163840 } + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "accounts/fireworks/models/minimax-m2p1": { - "id": "accounts/fireworks/models/minimax-m2p1", - "name": "MiniMax-M2.1", - "family": "minimax", - "attachment": false, + "claude-opus-4-6": { + "id": "claude-opus-4-6", + "name": "Claude Opus 4.6", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.03 }, - "limit": { "context": 200000, "output": 200000 } + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-03-13", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 128000 + }, + "experimental": { + "modes": { + "fast": { + "cost": { + "input": 30, + "output": 150, + "cache_read": 3, + "cache_write": 37.5 + }, + "provider": { + "body": { + "speed": "fast" + }, + "headers": { + "anthropic-beta": "fast-mode-2026-02-01" + } + } + } + } + }, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + } }, - "accounts/fireworks/models/minimax-m2p5": { - "id": "accounts/fireworks/models/minimax-m2p5", - "name": "MiniMax-M2.5", - "family": "minimax", - "attachment": false, + "claude-3-7-sonnet-20250219": { + "id": "claude-3-7-sonnet-20250219", + "name": "Claude Sonnet 3.7", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.03 }, - "limit": { "context": 196608, "output": 196608 } + "knowledge": "2024-10-31", + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "accounts/fireworks/models/gpt-oss-120b": { - "id": "accounts/fireworks/models/gpt-oss-120b", - "name": "GPT OSS 120B", - "family": "gpt-oss", - "attachment": false, + "claude-sonnet-4-5": { + "id": "claude-sonnet-4-5", + "name": "Claude Sonnet 4.5 (latest)", + "family": "claude-sonnet", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 131072, "output": 32768 } + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75 + } }, - "accounts/fireworks/models/glm-4p7": { - "id": "accounts/fireworks/models/glm-4p7", - "name": "GLM 4.7", - "family": "glm", - "attachment": false, + "claude-opus-4-20250514": { + "id": "claude-opus-4-20250514", + "name": "Claude Opus 4", + "family": "claude-opus", + "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.2, "cache_read": 0.3 }, - "limit": { "context": 198000, "output": 198000 } - }, - "accounts/fireworks/models/deepseek-v3p2": { - "id": "accounts/fireworks/models/deepseek-v3p2", - "name": "DeepSeek V3.2", - "family": "deepseek", + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 32000 + }, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + } + } + } + }, + "modelscope": { + "id": "modelscope", + "env": ["MODELSCOPE_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api-inference.modelscope.cn/v1", + "name": "ModelScope", + "doc": "https://modelscope.cn/docs/model-service/API-Inference/intro", + "models": { + "Qwen/Qwen3-30B-A3B-Thinking-2507": { + "id": "Qwen/Qwen3-30B-A3B-Thinking-2507", + "name": "Qwen3 30B A3B Thinking 2507", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2025-09", - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-30", + "last_updated": "2025-07-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.56, "output": 1.68, "cache_read": 0.28 }, - "limit": { "context": 160000, "output": 160000 } + "limit": { + "context": 262144, + "output": 32768 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "accounts/fireworks/models/glm-4p5": { - "id": "accounts/fireworks/models/glm-4p5", - "name": "GLM 4.5", - "family": "glm", + "Qwen/Qwen3-30B-A3B-Instruct-2507": { + "id": "Qwen/Qwen3-30B-A3B-Instruct-2507", + "name": "Qwen3 30B A3B Instruct 2507", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, "knowledge": "2025-04", - "release_date": "2025-07-29", - "last_updated": "2025-07-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-07-30", + "last_updated": "2025-07-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.55, "output": 2.19 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 262144, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "accounts/fireworks/models/glm-5": { - "id": "accounts/fireworks/models/glm-5", - "name": "GLM 5", - "family": "glm", + "Qwen/Qwen3-235B-A22B-Instruct-2507": { + "id": "Qwen/Qwen3-235B-A22B-Instruct-2507", + "name": "Qwen3 235B A22B Instruct 2507", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-04-28", + "last_updated": "2025-07-21", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1, "output": 3.2, "cache_read": 0.5 }, - "limit": { "context": 202752, "output": 131072 } + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "accounts/fireworks/models/glm-4p5-air": { - "id": "accounts/fireworks/models/glm-4p5-air", - "name": "GLM 4.5 Air", - "family": "glm-air", + "Qwen/Qwen3-Coder-30B-A3B-Instruct": { + "id": "Qwen/Qwen3-Coder-30B-A3B-Instruct", + "name": "Qwen3 Coder 30B A3B Instruct", + "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, "knowledge": "2025-04", - "release_date": "2025-08-01", - "last_updated": "2025-08-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2025-07-31", + "last_updated": "2025-07-31", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.22, "output": 0.88 }, - "limit": { "context": 131072, "output": 131072 } + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "accounts/fireworks/models/gpt-oss-20b": { - "id": "accounts/fireworks/models/gpt-oss-20b", - "name": "GPT OSS 20B", - "family": "gpt-oss", + "Qwen/Qwen3-235B-A22B-Thinking-2507": { + "id": "Qwen/Qwen3-235B-A22B-Thinking-2507", + "name": "Qwen3-235B-A22B-Thinking-2507", + "family": "qwen", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-25", + "last_updated": "2025-07-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.05, "output": 0.2 }, - "limit": { "context": 131072, "output": 32768 } + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "accounts/fireworks/models/kimi-k2-instruct": { - "id": "accounts/fireworks/models/kimi-k2-instruct", - "name": "Kimi K2 Instruct", - "family": "kimi", + "ZhipuAI/GLM-4.5": { + "id": "ZhipuAI/GLM-4.5", + "name": "GLM-4.5", + "family": "glm", "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-07-11", - "last_updated": "2025-07-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 1, "output": 3 }, - "limit": { "context": 128000, "output": 16384 } - } - } - }, - "opencode-go": { - "id": "opencode-go", - "env": ["OPENCODE_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://opencode.ai/zen/go/v1", - "name": "OpenCode Go", - "doc": "https://opencode.ai/docs/zen", - "models": { - "kimi-k2.5": { - "id": "kimi-k2.5", - "name": "Kimi K2.5", - "family": "kimi", - "attachment": true, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, "temperature": true, - "knowledge": "2024-10", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 3, "cache_read": 0.1 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 131072, + "output": 98304 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "minimax-m2.7": { - "id": "minimax-m2.7", - "name": "MiniMax M2.7", - "family": "minimax-m2.7", + "ZhipuAI/GLM-4.6": { + "id": "ZhipuAI/GLM-4.6", + "name": "GLM-4.6", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-07", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.06 }, - "limit": { "context": 204800, "output": 131072 }, - "provider": { "npm": "@ai-sdk/anthropic" } - }, - "glm-5": { - "id": "glm-5", - "name": "GLM-5", + "limit": { + "context": 202752, + "output": 98304 + }, + "cost": { + "input": 0, + "output": 0 + } + } + } + }, + "hpc-ai": { + "id": "hpc-ai", + "env": ["HPC_AI_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.hpc-ai.com/inference/v1", + "name": "HPC-AI", + "doc": "https://www.hpc-ai.com/doc/docs/quickstart/", + "models": { + "zai-org/glm-5.1": { + "id": "zai-org/glm-5.1", + "name": "GLM 5.1", "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, - "interleaved": { "field": "reasoning_content" }, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-02-11", - "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "release_date": "2026-04-08", + "last_updated": "2026-04-08", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1, "output": 3.2, "cache_read": 0.2 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 202000, + "output": 202000 + }, + "cost": { + "input": 0.66, + "output": 2, + "cache_read": 0.12 + } }, - "minimax-m2.5": { - "id": "minimax-m2.5", + "minimax/minimax-m2.5": { + "id": "minimax/minimax-m2.5", "name": "MiniMax M2.5", "family": "minimax-m2.5", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": false, "temperature": true, - "knowledge": "2025-01", "release_date": "2026-02-12", - "last_updated": "2026-02-12", - "modalities": { "input": ["text"], "output": ["text"] }, + "last_updated": "2026-03-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1000000, + "output": 131072 + }, + "cost": { + "input": 0.14, + "output": 0.56, + "cache_read": 0.014 + } + }, + "moonshotai/kimi-k2.5": { + "id": "moonshotai/kimi-k2.5", + "name": "Kimi K2.5", + "family": "kimi", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-01-01", + "release_date": "2026-01-01", + "last_updated": "2026-03-25", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.3, "output": 1.2, "cache_read": 0.03 }, - "limit": { "context": 204800, "output": 131072 }, - "provider": { "npm": "@ai-sdk/anthropic" } + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.21, + "output": 1, + "cache_read": 0.03 + } } } }, - "abacus": { - "id": "abacus", - "env": ["ABACUS_API_KEY"], - "npm": "@ai-sdk/openai-compatible", - "api": "https://routellm.abacus.ai/v1", - "name": "Abacus", - "doc": "https://abacus.ai/help/api", + "gitlab": { + "id": "gitlab", + "env": ["GITLAB_TOKEN"], + "npm": "gitlab-ai-provider", + "name": "GitLab Duo", + "doc": "https://docs.gitlab.com/user/duo_agent_platform/", "models": { - "gpt-5.2-codex": { - "id": "gpt-5.2-codex", - "name": "GPT-5.2 Codex", - "family": "gpt", + "duo-chat-gpt-5-4-nano": { + "id": "duo-chat-gpt-5-4-nano", + "name": "Agentic Chat (GPT-5.4 Nano)", + "family": "gpt-nano", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, "temperature": false, "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "llama-3.3-70b-versatile": { - "id": "llama-3.3-70b-versatile", - "name": "Llama 3.3 70B Versatile", - "family": "llama", - "attachment": false, - "reasoning": false, + "duo-chat-gpt-5-mini": { + "id": "duo-chat-gpt-5-mini", + "name": "Agentic Chat (GPT-5 Mini)", + "family": "gpt-mini", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.59, "output": 0.79 }, - "limit": { "context": 128000, "output": 32768 } + "structured_output": true, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2026-01-22", + "last_updated": "2026-01-22", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "claude-opus-4-5-20251101": { - "id": "claude-opus-4-5-20251101", - "name": "Claude Opus 4.5", - "family": "claude-opus", + "duo-chat-sonnet-4-6": { + "id": "duo-chat-sonnet-4-6", + "name": "Agentic Chat (Claude Sonnet 4.6)", + "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-11-01", - "last_updated": "2025-11-01", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-02-17", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "o3-mini": { - "id": "o3-mini", - "name": "o3-mini", - "family": "o-mini", + "duo-chat-gpt-5-2": { + "id": "duo-chat-gpt-5-2", + "name": "Agentic Chat (GPT-5.2)", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-01-23", + "last_updated": "2026-01-23", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "duo-chat-gpt-5-codex": { + "id": "duo-chat-gpt-5-codex", + "name": "Agentic Chat (GPT-5 Codex)", + "family": "gpt-codex", "attachment": false, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": false, - "knowledge": "2024-05", - "release_date": "2024-12-20", - "last_updated": "2025-01-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-09-30", + "release_date": "2026-01-22", + "last_updated": "2026-01-22", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4 }, - "limit": { "context": 200000, "output": 100000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gpt-5.2-chat-latest": { - "id": "gpt-5.2-chat-latest", - "name": "GPT-5.2 Chat Latest", + "duo-chat-gpt-5-1": { + "id": "duo-chat-gpt-5-1", + "name": "Agentic Chat (GPT-5.1)", "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, + "structured_output": true, + "temperature": false, "knowledge": "2024-09-30", - "release_date": "2026-01-01", - "last_updated": "2026-01-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-01-22", + "last_updated": "2026-01-22", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "gpt-5": { - "id": "gpt-5", - "name": "GPT-5", - "family": "gpt", + "duo-chat-gpt-5-2-codex": { + "id": "duo-chat-gpt-5-2-codex", + "name": "Agentic Chat (GPT-5.2 Codex)", + "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": true, + "structured_output": true, "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-08-31", + "release_date": "2026-01-22", + "last_updated": "2026-01-22", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "claude-opus-4-20250514": { - "id": "claude-opus-4-20250514", - "name": "Claude Opus 4", - "family": "claude-opus", + "duo-chat-sonnet-4-5": { + "id": "duo-chat-sonnet-4-5", + "name": "Agentic Chat (Claude Sonnet 4.5)", + "family": "claude-sonnet", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-05-14", - "last_updated": "2025-05-14", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2025-07-31", + "release_date": "2026-01-08", + "last_updated": "2026-01-08", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 15, "output": 75 }, - "limit": { "context": 200000, "output": 32000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "gemini-3.1-pro-preview": { - "id": "gemini-3.1-pro-preview", - "name": "Gemini 3.1 Pro Preview", - "family": "gemini-pro", + "duo-chat-gpt-5-4": { + "id": "duo-chat-gpt-5-4", + "name": "Agentic Chat (GPT-5.4)", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-02-19", - "last_updated": "2026-02-19", - "modalities": { "input": ["text", "image", "video", "audio", "pdf"], "output": ["text"] }, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2, "output": 12 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 1050000, + "input": 922000, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "claude-3-7-sonnet-20250219": { - "id": "claude-3-7-sonnet-20250219", - "name": "Claude Sonnet 3.7", - "family": "claude-sonnet", + "duo-chat-haiku-4-5": { + "id": "duo-chat-haiku-4-5", + "name": "Agentic Chat (Claude Haiku 4.5)", + "family": "claude-haiku", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10-31", - "release_date": "2025-02-19", - "last_updated": "2025-02-19", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2025-02-28", + "release_date": "2026-01-08", + "last_updated": "2026-01-08", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "kimi-k2.5": { - "id": "kimi-k2.5", - "name": "Kimi K2.5", - "family": "kimi", - "attachment": false, + "duo-chat-gpt-5-3-codex": { + "id": "duo-chat-gpt-5-3-codex", + "name": "Agentic Chat (GPT-5.3 Codex)", + "family": "gpt-codex", + "attachment": true, "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-01", - "last_updated": "2026-01", - "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 3 }, - "limit": { "context": 262144, "output": 32768 } + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } }, - "grok-4-fast-non-reasoning": { - "id": "grok-4-fast-non-reasoning", - "name": "Grok 4 Fast (Non-Reasoning)", - "family": "grok", + "duo-chat-gpt-5-4-mini": { + "id": "duo-chat-gpt-5-4-mini", + "name": "Agentic Chat (GPT-5.4 Mini)", + "family": "gpt-mini", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 400000, + "input": 272000, + "output": 128000 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "duo-chat-opus-4-7": { + "id": "duo-chat-opus-4-7", + "name": "Agentic Chat (Claude Opus 4.7)", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5 }, - "limit": { "context": 2000000, "output": 16384 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "grok-code-fast-1": { - "id": "grok-code-fast-1", - "name": "Grok Code Fast 1", - "family": "grok", + "duo-chat-opus-4-5": { + "id": "duo-chat-opus-4-5", + "name": "Agentic Chat (Claude Opus 4.5)", + "family": "claude-opus", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-09-01", - "last_updated": "2025-09-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-03-31", + "release_date": "2026-01-08", + "last_updated": "2026-01-08", + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 1.5 }, - "limit": { "context": 256000, "output": 16384 } + "limit": { + "context": 200000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "gpt-5.3-codex": { - "id": "gpt-5.3-codex", - "name": "GPT-5.3 Codex", - "family": "gpt", + "duo-chat-opus-4-6": { + "id": "duo-chat-opus-4-6", + "name": "Agentic Chat (Claude Opus 4.6)", + "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", + "temperature": true, + "knowledge": "2025-05-31", "release_date": "2026-02-05", "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.75, "output": 14 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } + } + } + }, + "xiaomi": { + "id": "xiaomi", + "env": ["XIAOMI_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.xiaomimimo.com/v1", + "name": "Xiaomi", + "doc": "https://platform.xiaomimimo.com/#/docs", + "models": { + "mimo-v2.5-pro": { + "id": "mimo-v2.5-pro", + "name": "MiMo-V2.5-Pro", + "family": "mimo", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 1, + "output": 3, + "cache_read": 0.2, + "tiers": [ + { + "input": 2, + "output": 6, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 256000 + } + } + ], + "context_over_200k": { + "input": 2, + "output": 6, + "cache_read": 0.4 + } + } }, - "gpt-5-mini": { - "id": "gpt-5-mini", - "name": "GPT-5 Mini", - "family": "gpt-mini", + "mimo-v2-omni": { + "id": "mimo-v2-omni", + "name": "MiMo-V2-Omni", + "family": "mimo", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2024-05-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.25, "output": 2 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0.4, + "output": 2, + "cache_read": 0.08 + } }, - "claude-opus-4-6": { - "id": "claude-opus-4-6", - "name": "Claude Opus 4.6", - "family": "claude-opus", + "mimo-v2.5": { + "id": "mimo-v2.5", + "name": "MiMo-V2.5", + "family": "mimo", "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2025-05", - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 0.4, + "output": 2, + "cache_read": 0.08, + "tiers": [ + { + "input": 0.8, + "output": 4, + "cache_read": 0.16, + "tier": { + "type": "context", + "size": 256000 + } + } + ], + "context_over_200k": { + "input": 0.8, + "output": 4, + "cache_read": 0.16 + } + } + }, + "mimo-v2-pro": { + "id": "mimo-v2-pro", + "name": "MiMo-V2-Pro", + "family": "mimo", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 5, "output": 25 }, - "limit": { "context": 200000, "output": 128000 } + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 1, + "output": 3, + "cache_read": 0.2, + "tiers": [ + { + "input": 2, + "output": 6, + "cache_read": 0.4, + "tier": { + "type": "context", + "size": 256000 + } + } + ], + "context_over_200k": { + "input": 2, + "output": 6, + "cache_read": 0.4 + } + } + }, + "mimo-v2-flash": { + "id": "mimo-v2-flash", + "name": "MiMo-V2-Flash", + "family": "mimo", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2024-12-01", + "release_date": "2025-12-16", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.1, + "output": 0.3, + "cache_read": 0.01 + } + } + } + }, + "clarifai": { + "id": "clarifai", + "env": ["CLARIFAI_PAT"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.clarifai.com/v2/ext/openai/v1", + "name": "Clarifai", + "doc": "https://docs.clarifai.com/compute/inference/", + "models": { + "arcee_ai/AFM/models/trinity-mini": { + "id": "arcee_ai/AFM/models/trinity-mini", + "name": "Trinity Mini", + "family": "trinity-mini", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-12", + "last_updated": "2026-02-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 131072 + }, + "cost": { + "input": 0.045, + "output": 0.15 + } + }, + "mistralai/completion/models/Ministral-3-14B-Reasoning-2512": { + "id": "mistralai/completion/models/Ministral-3-14B-Reasoning-2512", + "name": "Ministral 3 14B Reasoning 2512", + "family": "ministral", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-12", + "release_date": "2025-12-01", + "last_updated": "2025-12-12", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 2.5, + "output": 1.7 + } }, - "claude-sonnet-4-5-20250929": { - "id": "claude-sonnet-4-5-20250929", - "name": "Claude Sonnet 4.5", - "family": "claude-sonnet", + "mistralai/completion/models/Ministral-3-3B-Reasoning-2512": { + "id": "mistralai/completion/models/Ministral-3-3B-Reasoning-2512", + "name": "Ministral 3 3B Reasoning 2512", + "family": "ministral", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-07-31", - "release_date": "2025-09-29", - "last_updated": "2025-09-29", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 200000, "output": 64000 } + "release_date": "2025-12", + "last_updated": "2026-02-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 1.039, + "output": 0.54825 + } }, - "gpt-4o-mini": { - "id": "gpt-4o-mini", - "name": "GPT-4o Mini", - "family": "gpt", + "deepseek-ai/deepseek-ocr/models/DeepSeek-OCR": { + "id": "deepseek-ai/deepseek-ocr/models/DeepSeek-OCR", + "name": "DeepSeek OCR", + "family": "deepseek", "attachment": true, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "knowledge": "2024-04", - "release_date": "2024-07-18", - "last_updated": "2024-07-18", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.15, "output": 0.6 }, - "limit": { "context": 128000, "output": 16384 } + "release_date": "2025-10-20", + "last_updated": "2026-02-25", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 8192 + }, + "cost": { + "input": 0.2, + "output": 0.7 + } }, - "gpt-5.1-codex-max": { - "id": "gpt-5.1-codex-max", - "name": "GPT-5.1 Codex Max", - "family": "gpt", - "attachment": true, + "openai/chat-completion/models/gpt-oss-20b": { + "id": "openai/chat-completion/models/gpt-oss-20b", + "name": "GPT OSS 20B", + "family": "gpt-oss", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-12-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.045, + "output": 0.18 + } }, - "claude-sonnet-4-6": { - "id": "claude-sonnet-4-6", - "name": "Claude Sonnet 4.6", - "family": "claude-sonnet", - "attachment": true, + "openai/chat-completion/models/gpt-oss-120b-high-throughput": { + "id": "openai/chat-completion/models/gpt-oss-120b-high-throughput", + "name": "GPT OSS 120B High Throughput", + "family": "gpt-oss", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-08", - "release_date": "2026-02-17", - "last_updated": "2026-02-17", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 200000, "output": 64000 } + "release_date": "2025-08-05", + "last_updated": "2026-02-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 131072, + "output": 16384 + }, + "cost": { + "input": 0.09, + "output": 0.36 + } }, - "gpt-4.1": { - "id": "gpt-4.1", - "name": "GPT-4.1", - "family": "gpt", - "attachment": true, - "reasoning": false, + "minimaxai/chat-completion/models/MiniMax-M2_5-high-throughput": { + "id": "minimaxai/chat-completion/models/MiniMax-M2_5-high-throughput", + "name": "MiniMax-M2.5 High Throughput", + "family": "minimax", + "attachment": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 8 }, - "limit": { "context": 1047576, "output": 32768 } + "release_date": "2026-02-12", + "last_updated": "2026-02-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "gpt-5.1-chat-latest": { - "id": "gpt-5.1-chat-latest", - "name": "GPT-5.1 Chat Latest", - "family": "gpt", - "attachment": true, - "reasoning": true, + "qwen/qwenCoder/models/Qwen3-Coder-30B-A3B-Instruct": { + "id": "qwen/qwenCoder/models/Qwen3-Coder-30B-A3B-Instruct", + "name": "Qwen3 Coder 30B A3B Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, "tool_call": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 400000, "output": 128000 } + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-31", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0.11458, + "output": 0.74812 + } }, - "gpt-5.3-codex-xhigh": { - "id": "gpt-5.3-codex-xhigh", - "name": "GPT-5.3 Codex XHigh", - "family": "gpt", - "attachment": true, + "qwen/qwenLM/models/Qwen3-30B-A3B-Thinking-2507": { + "id": "qwen/qwenLM/models/Qwen3-30B-A3B-Thinking-2507", + "name": "Qwen3 30B A3B Thinking 2507", + "family": "qwen", + "attachment": false, "reasoning": true, "tool_call": true, "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-02-05", - "last_updated": "2026-02-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "temperature": true, + "release_date": "2025-07-31", + "last_updated": "2026-02-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0.36, + "output": 1.3 + } }, - "gpt-5.4": { - "id": "gpt-5.4", - "name": "GPT-5.4", - "family": "gpt", - "attachment": true, - "reasoning": true, + "qwen/qwenLM/models/Qwen3-30B-A3B-Instruct-2507": { + "id": "qwen/qwenLM/models/Qwen3-30B-A3B-Instruct-2507", + "name": "Qwen3 30B A3B Instruct 2507", + "family": "qwen", + "attachment": false, + "reasoning": false, "tool_call": true, "structured_output": true, - "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2026-03-05", - "last_updated": "2026-03-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2.5, "output": 15 }, - "limit": { "context": 1050000, "input": 922000, "output": 128000 } - }, - "o3": { - "id": "o3", - "name": "o3", - "family": "o", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2024-05", - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 2, "output": 8 }, - "limit": { "context": 200000, "output": 100000 } + "temperature": true, + "release_date": "2025-07-30", + "last_updated": "2026-02-25", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.3, + "output": 0.5 + } }, - "grok-4-1-fast-non-reasoning": { - "id": "grok-4-1-fast-non-reasoning", - "name": "Grok 4.1 Fast (Non-Reasoning)", - "family": "grok", + "clarifai/main/models/mm-poly-8b": { + "id": "clarifai/main/models/mm-poly-8b", + "name": "MM Poly 8B", + "family": "mm-poly", "attachment": true, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "release_date": "2025-11-17", - "last_updated": "2025-11-17", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2025-06", + "last_updated": "2026-02-25", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.2, "output": 0.5 }, - "limit": { "context": 2000000, "output": 16384 } + "limit": { + "context": 32768, + "output": 4096 + }, + "cost": { + "input": 0.658, + "output": 1.11 + } }, - "gpt-5.3-chat-latest": { - "id": "gpt-5.3-chat-latest", - "name": "GPT-5.3 Chat Latest", - "family": "gpt", + "moonshotai/chat-completion/models/Kimi-K2_6": { + "id": "moonshotai/chat-completion/models/Kimi-K2_6", + "name": "Kimi K2.6", + "family": "kimi-k2.6", "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2026-03-01", - "last_updated": "2026-03-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14 }, - "limit": { "context": 400000, "output": 128000 } - }, - "claude-sonnet-4-20250514": { - "id": "claude-sonnet-4-20250514", - "name": "Claude Sonnet 4", - "family": "claude-sonnet", - "attachment": true, + "knowledge": "2025-01", + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 262144 + }, + "cost": { + "input": 0.95, + "output": 4 + } + } + } + }, + "minimax-cn": { + "id": "minimax-cn", + "env": ["MINIMAX_API_KEY"], + "npm": "@ai-sdk/anthropic", + "api": "https://api.minimaxi.com/anthropic/v1", + "name": "MiniMax (minimaxi.com)", + "doc": "https://platform.minimaxi.com/docs/guides/quickstart", + "models": { + "MiniMax-M2": { + "id": "MiniMax-M2", + "name": "MiniMax-M2", + "family": "minimax", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-05-14", - "last_updated": "2025-05-14", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 200000, "output": 64000 } + "release_date": "2025-10-27", + "last_updated": "2025-10-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 196608, + "output": 128000 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "grok-4-0709": { - "id": "grok-4-0709", - "name": "Grok 4", - "family": "grok", - "attachment": true, + "MiniMax-M2.5": { + "id": "MiniMax-M2.5", + "name": "MiniMax-M2.5", + "family": "minimax", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-07-09", - "last_updated": "2025-07-09", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 256000, "output": 16384 } + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.03, + "cache_write": 0.375 + } }, - "gemini-3-flash-preview": { - "id": "gemini-3-flash-preview", - "name": "Gemini 3 Flash Preview", - "family": "gemini-flash", - "attachment": true, + "MiniMax-M2.7": { + "id": "MiniMax-M2.7", + "name": "MiniMax-M2.7", + "family": "minimax", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-12-17", - "last_updated": "2025-12-17", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.5, "output": 3 }, - "limit": { "context": 1048576, "output": 65536 } + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.06, + "cache_write": 0.375 + } }, - "gemini-2.5-pro": { - "id": "gemini-2.5-pro", - "name": "Gemini 2.5 Pro", - "family": "gemini-pro", - "attachment": true, + "MiniMax-M2.7-highspeed": { + "id": "MiniMax-M2.7-highspeed", + "name": "MiniMax-M2.7-highspeed", + "family": "minimax", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-03-25", - "last_updated": "2025-03-25", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 1048576, "output": 65536 } + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 2.4, + "cache_read": 0.06, + "cache_write": 0.375 + } }, - "claude-opus-4-1-20250805": { - "id": "claude-opus-4-1-20250805", - "name": "Claude Opus 4.1", - "family": "claude-opus", - "attachment": true, + "MiniMax-M2.1": { + "id": "MiniMax-M2.1", + "name": "MiniMax-M2.1", + "family": "minimax", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 15, "output": 75 }, - "limit": { "context": 200000, "output": 32000 } + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "kimi-k2-turbo-preview": { - "id": "kimi-k2-turbo-preview", - "name": "Kimi K2 Turbo Preview", - "family": "kimi", + "MiniMax-M2.5-highspeed": { + "id": "MiniMax-M2.5-highspeed", + "name": "MiniMax-M2.5-highspeed", + "family": "minimax", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-07-08", - "last_updated": "2025-07-08", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.15, "output": 8 }, - "limit": { "context": 256000, "output": 8192 } - }, - "gemini-2.5-flash": { - "id": "gemini-2.5-flash", - "name": "Gemini 2.5 Flash", - "family": "gemini-flash", - "attachment": true, + "release_date": "2026-02-13", + "last_updated": "2026-02-13", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 2.4, + "cache_read": 0.06, + "cache_write": 0.375 + } + } + } + }, + "regolo-ai": { + "id": "regolo-ai", + "env": ["REGOLO_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.regolo.ai/v1", + "name": "Regolo AI", + "doc": "https://docs.regolo.ai/", + "models": { + "mistral-small3.2": { + "id": "mistral-small3.2", + "name": "Mistral Small 3.2", + "family": "mistral-small", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-03-20", - "last_updated": "2025-06-05", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, + "release_date": "2025-01-31", + "last_updated": "2025-01-31", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 0.3, "output": 2.5 }, - "limit": { "context": 1048576, "output": 65536 } + "limit": { + "context": 120000, + "output": 120000 + }, + "cost": { + "input": 0.5, + "output": 2.2 + } }, - "gpt-4o-2024-11-20": { - "id": "gpt-4o-2024-11-20", - "name": "GPT-4o (2024-11-20)", - "family": "gpt", - "attachment": true, + "qwen3-embedding-8b": { + "id": "qwen3-embedding-8b", + "name": "Qwen3-Embedding-8B", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": false, + "release_date": "2026-02-01", + "last_updated": "2026-02-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 8192 + }, + "cost": { + "input": 0.1, + "output": 0.1 + } + }, + "llama-3.3-70b-instruct": { + "id": "llama-3.3-70b-instruct", + "name": "Llama 3.3 70B Instruct", + "family": "llama", + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-11-20", - "last_updated": "2024-11-20", - "modalities": { "input": ["text", "image", "audio"], "output": ["text"] }, + "release_date": "2025-04-28", + "last_updated": "2025-04-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 2.5, "output": 10 }, - "limit": { "context": 128000, "output": 16384 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.6, + "output": 2.7 + } }, - "gpt-5.2": { - "id": "gpt-5.2", - "name": "GPT-5.2", - "family": "gpt", - "attachment": true, - "reasoning": true, - "tool_call": true, + "qwen3-reranker-4b": { + "id": "qwen3-reranker-4b", + "name": "Qwen3-Reranker-4B", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": false, "temperature": false, - "knowledge": "2025-08-31", - "release_date": "2025-12-11", - "last_updated": "2025-12-11", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.75, "output": 14 }, - "limit": { "context": 400000, "output": 128000 } + "release_date": "2026-02-01", + "last_updated": "2026-02-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 32768, + "output": 8192 + }, + "cost": { + "input": 0.12, + "output": 0.12 + } }, - "gpt-5.1": { - "id": "gpt-5.1", - "name": "GPT-5.1", - "family": "gpt", + "mistral-small-4-119b": { + "id": "mistral-small-4-119b", + "name": "Mistral Small 4 119B", + "family": "mistral-small", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "release_date": "2026-03-15", + "last_updated": "2026-03-15", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 400000, "output": 128000 } + "limit": { + "context": 256000, + "output": 16384 + }, + "cost": { + "input": 0.75, + "output": 3 + } }, - "gpt-4.1-mini": { - "id": "gpt-4.1-mini", - "name": "GPT-4.1 Mini", - "family": "gpt", + "qwen3.5-122b": { + "id": "qwen3.5-122b", + "name": "Qwen3.5-122B", + "family": "qwen", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.4, "output": 1.6 }, - "limit": { "context": 1047576, "output": 32768 } + "release_date": "2026-02-01", + "last_updated": "2026-02-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 16384 + }, + "cost": { + "input": 0.9, + "output": 3.6 + } }, - "qwen-2.5-coder-32b": { - "id": "qwen-2.5-coder-32b", - "name": "Qwen 2.5 Coder 32B", + "qwen-image": { + "id": "qwen-image", + "name": "Qwen-Image", "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, - "release_date": "2024-11-11", - "last_updated": "2024-11-11", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.79, "output": 0.79 }, - "limit": { "context": 128000, "output": 8192 } - }, - "gpt-5-nano": { - "id": "gpt-5-nano", - "name": "GPT-5 Nano", - "family": "gpt-nano", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": false, - "knowledge": "2024-05-30", - "release_date": "2025-08-07", - "last_updated": "2025-08-07", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "release_date": "2026-03-01", + "last_updated": "2026-03-01", + "modalities": { + "input": ["text"], + "output": ["image"] + }, "open_weights": false, - "cost": { "input": 0.05, "output": 0.4 }, - "limit": { "context": 400000, "output": 128000 } - }, - "gemini-3.1-flash-lite-preview": { - "id": "gemini-3.1-flash-lite-preview", - "name": "Gemini 3.1 Flash Lite Preview", - "family": "gemini-flash", - "attachment": true, + "limit": { + "context": 8192, + "output": 4096 + }, + "cost": { + "input": 0.5, + "output": 2 + } + }, + "qwen3-coder-next": { + "id": "qwen3-coder-next", + "name": "Qwen3-Coder-Next", + "family": "qwen", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, "temperature": true, "release_date": "2026-03-01", "last_updated": "2026-03-01", - "modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.25, "output": 1.5, "cache_read": 0.025, "cache_write": 1 }, - "limit": { "context": 1048576, "output": 65536 } + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 16384 + }, + "cost": { + "input": 0.3, + "output": 1.2 + } }, - "claude-haiku-4-5-20251001": { - "id": "claude-haiku-4-5-20251001", - "name": "Claude Haiku 4.5", - "family": "claude-haiku", - "attachment": true, + "minimax-m2.5": { + "id": "minimax-m2.5", + "name": "MiniMax 2.5", + "family": "minimax", + "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-02-28", - "release_date": "2025-10-15", - "last_updated": "2025-10-15", - "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }, + "release_date": "2026-03-10", + "last_updated": "2026-03-10", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1, "output": 5 }, - "limit": { "context": 200000, "output": 64000 } + "limit": { + "context": 190000, + "output": 64000 + }, + "cost": { + "input": 0.8, + "output": 3.5 + } }, - "qwen3-max": { - "id": "qwen3-max", - "name": "Qwen3 Max", - "family": "qwen", + "gpt-oss-20b": { + "id": "gpt-oss-20b", + "name": "GPT-OSS-20B", + "family": "gpt-oss", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-05-28", - "last_updated": "2025-05-28", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 1.2, "output": 6 }, - "limit": { "context": 131072, "output": 16384 } + "release_date": "2026-03-01", + "last_updated": "2026-03-01", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 0.4, + "output": 1.8 + } }, - "o3-pro": { - "id": "o3-pro", - "name": "o3-pro", - "family": "o-pro", + "qwen3.5-9b": { + "id": "qwen3.5-9b", + "name": "Qwen3.5-9B", + "family": "qwen", "attachment": true, "reasoning": true, "tool_call": true, - "temperature": false, - "knowledge": "2024-05", - "release_date": "2025-06-10", - "last_updated": "2025-06-10", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 20, "output": 40 }, - "limit": { "context": 200000, "output": 100000 } - }, - "gpt-4.1-nano": { - "id": "gpt-4.1-nano", - "name": "GPT-4.1 Nano", - "family": "gpt", - "attachment": true, - "reasoning": false, - "tool_call": true, "temperature": true, - "knowledge": "2024-04", - "release_date": "2025-04-14", - "last_updated": "2025-04-14", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 0.1, "output": 0.4 }, - "limit": { "context": 1047576, "output": 32768 } + "release_date": "2026-02-01", + "last_updated": "2026-02-01", + "modalities": { + "input": ["text", "image"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 8192 + }, + "cost": { + "input": 0.15, + "output": 0.6 + } }, - "gpt-5-codex": { - "id": "gpt-5-codex", - "name": "GPT-5 Codex", - "family": "gpt", + "gpt-oss-120b": { + "id": "gpt-oss-120b", + "name": "GPT-OSS-120B", + "family": "gpt-oss", "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-09-15", - "last_updated": "2025-09-15", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 128000, + "output": 16384 + }, + "cost": { + "input": 1, + "output": 4.2 + } }, - "o4-mini": { - "id": "o4-mini", - "name": "o4-mini", - "family": "o-mini", - "attachment": true, - "reasoning": true, + "llama-3.1-8b-instruct": { + "id": "llama-3.1-8b-instruct", + "name": "Llama 3.1 8B Instruct", + "family": "llama", + "attachment": false, + "reasoning": false, "tool_call": true, - "temperature": false, - "knowledge": "2024-05", - "release_date": "2025-04-16", - "last_updated": "2025-04-16", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "temperature": true, + "release_date": "2025-04-07", + "last_updated": "2025-04-07", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.1, "output": 4.4 }, - "limit": { "context": 200000, "output": 100000 } - }, - "route-llm": { - "id": "route-llm", - "name": "Route LLM", - "family": "gpt", - "attachment": true, + "limit": { + "context": 120000, + "output": 120000 + }, + "cost": { + "input": 0.05, + "output": 0.25 + } + } + } + }, + "xiaomi-token-plan-ams": { + "id": "xiaomi-token-plan-ams", + "env": ["XIAOMI_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://token-plan-ams.xiaomimimo.com/v1", + "name": "Xiaomi Token Plan (Europe)", + "doc": "https://platform.xiaomimimo.com/#/docs", + "models": { + "mimo-v2-tts": { + "id": "mimo-v2-tts", + "name": "MiMo-V2-TTS", + "family": "mimo", + "attachment": false, "reasoning": false, + "tool_call": false, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["audio"] + }, + "open_weights": true, + "limit": { + "context": 8192, + "output": 16384 + }, + "cost": { + "input": 0, + "output": 0 + } + }, + "mimo-v2-flash": { + "id": "mimo-v2-flash", + "name": "MiMo-V2-Flash", + "family": "mimo", + "attachment": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "knowledge": "2024-10", - "release_date": "2024-01-01", - "last_updated": "2024-01-01", - "modalities": { "input": ["text", "image"], "output": ["text"] }, - "open_weights": false, - "cost": { "input": 3, "output": 15 }, - "limit": { "context": 128000, "output": 16384 } + "knowledge": "2024-12-01", + "release_date": "2025-12-16", + "last_updated": "2026-02-04", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": true, + "limit": { + "context": 262144, + "output": 65536 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "gpt-5.1-codex": { - "id": "gpt-5.1-codex", - "name": "GPT-5.1 Codex", - "family": "gpt", - "attachment": true, + "mimo-v2-pro": { + "id": "mimo-v2-pro", + "name": "MiMo-V2-Pro", + "family": "mimo", + "attachment": false, "reasoning": true, "tool_call": true, - "structured_output": true, - "temperature": false, - "knowledge": "2024-09-30", - "release_date": "2025-11-13", - "last_updated": "2025-11-13", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "interleaved": { + "field": "reasoning_content" + }, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": false, - "cost": { "input": 1.25, "output": 10 }, - "limit": { "context": 400000, "input": 272000, "output": 128000 } + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "openai/gpt-oss-120b": { - "id": "openai/gpt-oss-120b", - "name": "GPT-OSS 120B", - "family": "gpt-oss", + "mimo-v2.5": { + "id": "mimo-v2.5", + "name": "MiMo-V2.5", + "family": "mimo", "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text", "image", "audio", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.08, "output": 0.44 }, - "limit": { "context": 128000, "output": 32768 } + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "deepseek/deepseek-v3.1": { - "id": "deepseek/deepseek-v3.1", - "name": "DeepSeek V3.1", - "family": "deepseek", - "attachment": false, + "mimo-v2-omni": { + "id": "mimo-v2-omni", + "name": "MiMo-V2-Omni", + "family": "mimo", + "attachment": true, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.55, "output": 1.66 }, - "limit": { "context": 128000, "output": 8192 } + "knowledge": "2024-12", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": ["text", "image", "audio", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 262144, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } }, - "zai-org/glm-4.5": { - "id": "zai-org/glm-4.5", - "name": "GLM-4.5", - "family": "glm", + "mimo-v2.5-pro": { + "id": "mimo-v2.5-pro", + "name": "MiMo-V2.5-Pro", + "family": "mimo", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-07-28", - "last_updated": "2025-07-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.6, "output": 2.2 }, - "limit": { "context": 128000, "output": 8192 } - }, - "zai-org/glm-4.6": { - "id": "zai-org/glm-4.6", - "name": "GLM-4.6", + "limit": { + "context": 1048576, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0 + } + } + } + }, + "zhipuai": { + "id": "zhipuai", + "env": ["ZHIPU_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://open.bigmodel.cn/api/paas/v4", + "name": "Zhipu AI", + "doc": "https://docs.z.ai/guides/overview/pricing", + "models": { + "glm-5v-turbo": { + "id": "glm-5v-turbo", + "name": "GLM-5V-Turbo", "family": "glm", - "attachment": false, - "reasoning": false, + "attachment": true, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2025-03-01", - "last_updated": "2025-03-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.2 }, - "limit": { "context": 128000, "output": 8192 } + "release_date": "2026-04-01", + "last_updated": "2026-04-01", + "modalities": { + "input": ["text", "image", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 5, + "output": 22, + "cache_read": 1.2, + "cache_write": 0 + } }, - "zai-org/glm-5": { - "id": "zai-org/glm-5", + "glm-5": { + "id": "glm-5", "name": "GLM-5", "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, "release_date": "2026-02-11", "last_updated": "2026-02-11", - "modalities": { "input": ["text"], "output": ["text"] }, + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 1, "output": 3.2 }, - "limit": { "context": 204800, "output": 131072 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 1, + "output": 3.2, + "cache_read": 0.2, + "cache_write": 0 + } }, - "zai-org/glm-4.7": { - "id": "zai-org/glm-4.7", - "name": "GLM-4.7", + "glm-5.1": { + "id": "glm-5.1", + "name": "GLM-5.1", "family": "glm", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, + "structured_output": true, "temperature": true, - "release_date": "2025-06-01", - "last_updated": "2025-06-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.6, "output": 2.2 }, - "limit": { "context": 128000, "output": 8192 } + "release_date": "2026-03-27", + "last_updated": "2026-03-27", + "modalities": { + "input": ["text"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 6, + "output": 24, + "cache_read": 1.3, + "cache_write": 0 + } }, - "meta-llama/Meta-Llama-3.1-8B-Instruct": { - "id": "meta-llama/Meta-Llama-3.1-8B-Instruct", - "name": "Llama 3.1 8B Instruct", - "family": "llama", + "glm-4.7-flash": { + "id": "glm-4.7-flash", + "name": "GLM-4.7-Flash", + "family": "glm-flash", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-01-19", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.02, "output": 0.05 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo": { - "id": "meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo", - "name": "Llama 3.1 405B Instruct Turbo", - "family": "llama", + "glm-4.5-flash": { + "id": "glm-4.5-flash", + "name": "GLM-4.5-Flash", + "family": "glm-flash", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2024-07-23", - "last_updated": "2024-07-23", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 3.5, "output": 3.5 }, - "limit": { "context": 128000, "output": 4096 } + "limit": { + "context": 131072, + "output": 98304 + }, + "cost": { + "input": 0, + "output": 0, + "cache_read": 0, + "cache_write": 0 + } }, - "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8": { - "id": "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8", - "name": "Llama 4 Maverick 17B 128E Instruct FP8", - "family": "llama", + "glm-4.6v": { + "id": "glm-4.6v", + "name": "GLM-4.6V", + "family": "glm", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-04-05", - "last_updated": "2025-04-05", - "modalities": { "input": ["text", "image"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-12-08", + "last_updated": "2025-12-08", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.14, "output": 0.59 }, - "limit": { "context": 1000000, "output": 32768 } + "limit": { + "context": 128000, + "output": 32768 + }, + "cost": { + "input": 0.3, + "output": 0.9 + } }, - "deepseek-ai/DeepSeek-R1": { - "id": "deepseek-ai/DeepSeek-R1", - "name": "DeepSeek R1", - "family": "deepseek-thinking", + "glm-4.6": { + "id": "glm-4.6", + "name": "GLM-4.6", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-01-20", - "last_updated": "2025-01-20", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 3, "output": 7 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 2.2, + "cache_read": 0.11, + "cache_write": 0 + } }, - "deepseek-ai/DeepSeek-V3.1-Terminus": { - "id": "deepseek-ai/DeepSeek-V3.1-Terminus", - "name": "DeepSeek V3.1 Terminus", - "family": "deepseek", - "attachment": false, + "glm-4.5v": { + "id": "glm-4.5v", + "name": "GLM-4.5V", + "family": "glm", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-06-01", - "last_updated": "2025-06-01", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-08-11", + "last_updated": "2025-08-11", + "modalities": { + "input": ["text", "image", "video"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.27, "output": 1 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 64000, + "output": 16384 + }, + "cost": { + "input": 0.6, + "output": 1.8 + } }, - "deepseek-ai/DeepSeek-V3.2": { - "id": "deepseek-ai/DeepSeek-V3.2", - "name": "DeepSeek V3.2", - "family": "deepseek", + "glm-4.5-air": { + "id": "glm-4.5-air", + "name": "GLM-4.5-Air", + "family": "glm-air", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-06-15", - "last_updated": "2025-06-15", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.27, "output": 0.4 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 131072, + "output": 98304 + }, + "cost": { + "input": 0.2, + "output": 1.1, + "cache_read": 0.03, + "cache_write": 0 + } }, - "Qwen/Qwen3-32B": { - "id": "Qwen/Qwen3-32B", - "name": "Qwen3 32B", - "family": "qwen", + "glm-4.5": { + "id": "glm-4.5", + "name": "GLM-4.5", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-04-29", - "last_updated": "2025-04-29", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.09, "output": 0.29 }, - "limit": { "context": 128000, "output": 8192 } + "limit": { + "context": 131072, + "output": 98304 + }, + "cost": { + "input": 0.6, + "output": 2.2, + "cache_read": 0.11, + "cache_write": 0 + } }, - "Qwen/qwen3-coder-480b-a35b-instruct": { - "id": "Qwen/qwen3-coder-480b-a35b-instruct", - "name": "Qwen3 Coder 480B A35B Instruct", - "family": "qwen", + "glm-4.7-flashx": { + "id": "glm-4.7-flashx", + "name": "GLM-4.7-FlashX", + "family": "glm-flash", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-07-22", - "last_updated": "2025-07-22", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2026-01-19", + "last_updated": "2026-01-19", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.29, "output": 1.2 }, - "limit": { "context": 262144, "output": 65536 } + "limit": { + "context": 200000, + "output": 131072 + }, + "cost": { + "input": 0.07, + "output": 0.4, + "cache_read": 0.01, + "cache_write": 0 + } }, - "Qwen/QwQ-32B": { - "id": "Qwen/QwQ-32B", - "name": "QwQ 32B", - "family": "qwen", + "glm-4.7": { + "id": "glm-4.7", + "name": "GLM-4.7", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, + "interleaved": { + "field": "reasoning_content" + }, "temperature": true, - "release_date": "2024-11-28", - "last_updated": "2024-11-28", - "modalities": { "input": ["text"], "output": ["text"] }, + "knowledge": "2025-04", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": ["text"], + "output": ["text"] + }, "open_weights": true, - "cost": { "input": 0.4, "output": 0.4 }, - "limit": { "context": 32768, "output": 32768 } - }, - "Qwen/Qwen2.5-72B-Instruct": { - "id": "Qwen/Qwen2.5-72B-Instruct", - "name": "Qwen 2.5 72B Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, + "limit": { + "context": 204800, + "output": 131072 + }, + "cost": { + "input": 0.6, + "output": 2.2, + "cache_read": 0.11, + "cache_write": 0 + } + } + } + }, + "nova": { + "id": "nova", + "env": ["NOVA_API_KEY"], + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.nova.amazon.com/v1", + "name": "Nova", + "doc": "https://nova.amazon.com/dev/documentation", + "models": { + "nova-2-lite-v1": { + "id": "nova-2-lite-v1", + "name": "Nova 2 Lite", + "family": "nova-lite", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2024-09-19", - "last_updated": "2024-09-19", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.11, "output": 0.38 }, - "limit": { "context": 128000, "output": 8192 } + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": ["text", "image", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0, + "reasoning": 0 + } }, - "Qwen/Qwen3-235B-A22B-Instruct-2507": { - "id": "Qwen/Qwen3-235B-A22B-Instruct-2507", - "name": "Qwen3 235B A22B Instruct", - "family": "qwen", - "attachment": false, + "nova-2-pro-v1": { + "id": "nova-2-pro-v1", + "name": "Nova 2 Pro", + "family": "nova-pro", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-07-01", - "last_updated": "2025-07-01", - "modalities": { "input": ["text"], "output": ["text"] }, - "open_weights": true, - "cost": { "input": 0.13, "output": 0.6 }, - "limit": { "context": 262144, "output": 8192 } + "release_date": "2025-12-03", + "last_updated": "2026-01-03", + "modalities": { + "input": ["text", "image", "video", "pdf"], + "output": ["text"] + }, + "open_weights": false, + "limit": { + "context": 1000000, + "output": 64000 + }, + "cost": { + "input": 0, + "output": 0, + "reasoning": 0 + } } } } diff --git a/packages/opencode/test/tool/registry.test.ts b/packages/opencode/test/tool/registry.test.ts index b2beda70cad3..f00b7f5a08b1 100644 --- a/packages/opencode/test/tool/registry.test.ts +++ b/packages/opencode/test/tool/registry.test.ts @@ -6,7 +6,6 @@ import { Effect, Layer, Result, Schema } from "effect" import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner" import { ToolRegistry } from "@/tool/registry" import { Tool } from "@/tool/tool" -import { Flag } from "@opencode-ai/core/flag/flag" import { disposeAllInstances, TestInstance } from "../fixture/fixture" import { testEffect } from "../lib/effect" import { TestConfig } from "../fixture/config" @@ -31,46 +30,47 @@ import { Reference } from "@/reference/reference" import { ProviderID, ModelID } from "@/provider/schema" import { ToolJsonSchema } from "@/tool/json-schema" import { MessageID, SessionID } from "@/session/schema" +import { RuntimeFlags } from "@/effect/runtime-flags" const node = CrossSpawnSpawner.defaultLayer -const originalExperimentalScout = Flag.OPENCODE_EXPERIMENTAL_SCOUT const configLayer = TestConfig.layer({ directories: () => InstanceState.directory.pipe(Effect.map((dir) => [path.join(dir, ".opencode")])), }) -const registryLayer = ToolRegistry.layer.pipe( - Layer.provide(configLayer), - Layer.provide(Plugin.defaultLayer), - Layer.provide(Question.defaultLayer), - Layer.provide(Todo.defaultLayer), - Layer.provide(Skill.defaultLayer), - Layer.provide(Agent.defaultLayer), - Layer.provide(Session.defaultLayer), - Layer.provide(Provider.defaultLayer), - Layer.provide(Git.defaultLayer), - Layer.provide(Reference.defaultLayer), - Layer.provide(LSP.defaultLayer), - Layer.provide(Instruction.defaultLayer), - Layer.provide(AppFileSystem.defaultLayer), - Layer.provide(Bus.layer), - Layer.provide(FetchHttpClient.layer), - Layer.provide(Format.defaultLayer), - Layer.provide(node), - Layer.provide(Ripgrep.defaultLayer), - Layer.provide(Truncate.defaultLayer), -) +const registryLayer = (flags: Partial = {}) => + ToolRegistry.layer.pipe( + Layer.provide(configLayer), + Layer.provide(Plugin.defaultLayer), + Layer.provide(Question.defaultLayer), + Layer.provide(Todo.defaultLayer), + Layer.provide(Skill.defaultLayer), + Layer.provide(Agent.defaultLayer), + Layer.provide(Session.defaultLayer), + Layer.provide(Provider.defaultLayer), + Layer.provide(Git.defaultLayer), + Layer.provide(Reference.defaultLayer), + Layer.provide(LSP.defaultLayer), + Layer.provide(Instruction.defaultLayer), + Layer.provide(AppFileSystem.defaultLayer), + Layer.provide(Bus.layer), + Layer.provide(FetchHttpClient.layer), + Layer.provide(Format.defaultLayer), + Layer.provide(node), + Layer.provide(Ripgrep.defaultLayer), + Layer.provide(Truncate.defaultLayer), + Layer.provide(RuntimeFlags.layer(flags)), + ) -const it = testEffect(Layer.mergeAll(registryLayer, node, Agent.defaultLayer)) +const it = testEffect(Layer.mergeAll(registryLayer(), node, Agent.defaultLayer)) +const scout = testEffect(Layer.mergeAll(registryLayer({ experimentalScout: true }), node, Agent.defaultLayer)) afterEach(async () => { - Flag.OPENCODE_EXPERIMENTAL_SCOUT = originalExperimentalScout await disposeAllInstances() }) describe("tool.registry", () => { it.instance("hides repo research tools unless experimental", () => Effect.gen(function* () { - Flag.OPENCODE_EXPERIMENTAL_SCOUT = false const registry = yield* ToolRegistry.Service const ids = yield* registry.ids() @@ -79,9 +79,8 @@ describe("tool.registry", () => { }), ) - it.instance("shows repo research tools when experimental scout is enabled", () => + scout.instance("shows repo research tools when experimental scout is enabled", () => Effect.gen(function* () { - Flag.OPENCODE_EXPERIMENTAL_SCOUT = true const registry = yield* ToolRegistry.Service const ids = yield* registry.ids() diff --git a/packages/opencode/test/v2/plugin/provider-sdk-matching.test.ts b/packages/opencode/test/v2/plugin/provider-sdk-matching.test.ts deleted file mode 100644 index 8cd362d284a5..000000000000 --- a/packages/opencode/test/v2/plugin/provider-sdk-matching.test.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { describe, expect } from "bun:test" -import { Effect } from "effect" -import { AlibabaPlugin } from "@opencode-ai/core/plugin/provider/alibaba" -import { AmazonBedrockPlugin } from "@opencode-ai/core/plugin/provider/amazon-bedrock" -import { AnthropicPlugin } from "@opencode-ai/core/plugin/provider/anthropic" -import { AzurePlugin } from "@opencode-ai/core/plugin/provider/azure" -import { CerebrasPlugin } from "@opencode-ai/core/plugin/provider/cerebras" -import { CoherePlugin } from "@opencode-ai/core/plugin/provider/cohere" -import { DeepInfraPlugin } from "@opencode-ai/core/plugin/provider/deepinfra" -import { GatewayPlugin } from "@opencode-ai/core/plugin/provider/gateway" -import { GithubCopilotPlugin } from "@opencode-ai/core/plugin/provider/github-copilot" -import { GooglePlugin } from "@opencode-ai/core/plugin/provider/google" -import { GoogleVertexAnthropicPlugin, GoogleVertexPlugin } from "@opencode-ai/core/plugin/provider/google-vertex" -import { GroqPlugin } from "@opencode-ai/core/plugin/provider/groq" -import { MistralPlugin } from "@opencode-ai/core/plugin/provider/mistral" -import { OpenAIPlugin } from "@opencode-ai/core/plugin/provider/openai" -import { OpenAICompatiblePlugin } from "@opencode-ai/core/plugin/provider/openai-compatible" -import { OpenRouterPlugin } from "@opencode-ai/core/plugin/provider/openrouter" -import { PerplexityPlugin } from "@opencode-ai/core/plugin/provider/perplexity" -import { TogetherAIPlugin } from "@opencode-ai/core/plugin/provider/togetherai" -import { VercelPlugin } from "@opencode-ai/core/plugin/provider/vercel" -import { VenicePlugin } from "@opencode-ai/core/plugin/provider/venice" -import { XAIPlugin } from "@opencode-ai/core/plugin/provider/xai" -import { PluginV2 } from "@opencode-ai/core/plugin" -import { it, model } from "../../../../core/test/v2/plugin/provider-helper" - -const cases = [ - { name: "AlibabaPlugin", plugin: AlibabaPlugin, providerID: "custom", package: "@ai-sdk/alibaba" }, - { - name: "AmazonBedrockPlugin", - plugin: AmazonBedrockPlugin, - providerID: "custom", - package: "@ai-sdk/amazon-bedrock", - options: { bearerToken: "token" }, - }, - { name: "AnthropicPlugin", plugin: AnthropicPlugin, providerID: "custom", package: "@ai-sdk/anthropic" }, - { name: "AzurePlugin", plugin: AzurePlugin, providerID: "custom", package: "@ai-sdk/azure" }, - { name: "CerebrasPlugin", plugin: CerebrasPlugin, providerID: "custom", package: "@ai-sdk/cerebras" }, - { name: "CoherePlugin", plugin: CoherePlugin, providerID: "custom", package: "@ai-sdk/cohere" }, - { name: "DeepInfraPlugin", plugin: DeepInfraPlugin, providerID: "custom", package: "@ai-sdk/deepinfra" }, - { name: "GatewayPlugin", plugin: GatewayPlugin, providerID: "vercel", package: "@ai-sdk/gateway" }, - { name: "GithubCopilotPlugin", plugin: GithubCopilotPlugin, providerID: "custom", package: "@ai-sdk/github-copilot" }, - { name: "GooglePlugin", plugin: GooglePlugin, providerID: "custom", package: "@ai-sdk/google" }, - { - name: "GoogleVertexPlugin", - plugin: GoogleVertexPlugin, - providerID: "custom", - package: "@ai-sdk/google-vertex", - options: { project: "project" }, - }, - { - name: "GoogleVertexAnthropicPlugin", - plugin: GoogleVertexAnthropicPlugin, - providerID: "custom", - package: "@ai-sdk/google-vertex/anthropic", - options: { project: "project" }, - }, - { name: "GroqPlugin", plugin: GroqPlugin, providerID: "custom", package: "@ai-sdk/groq" }, - { name: "MistralPlugin", plugin: MistralPlugin, providerID: "custom", package: "@ai-sdk/mistral" }, - { name: "OpenAIPlugin", plugin: OpenAIPlugin, providerID: "custom", package: "@ai-sdk/openai" }, - { - name: "OpenAICompatiblePlugin", - plugin: OpenAICompatiblePlugin, - providerID: "custom", - package: "@ai-sdk/openai-compatible", - }, - { name: "OpenRouterPlugin", plugin: OpenRouterPlugin, providerID: "custom", package: "@openrouter/ai-sdk-provider" }, - { name: "PerplexityPlugin", plugin: PerplexityPlugin, providerID: "custom", package: "@ai-sdk/perplexity" }, - { name: "TogetherAIPlugin", plugin: TogetherAIPlugin, providerID: "custom", package: "@ai-sdk/togetherai" }, - { name: "VercelPlugin", plugin: VercelPlugin, providerID: "custom", package: "@ai-sdk/vercel" }, - { name: "VenicePlugin", plugin: VenicePlugin, providerID: "custom", package: "venice-ai-sdk-provider" }, - { name: "XAIPlugin", plugin: XAIPlugin, providerID: "custom", package: "@ai-sdk/xai" }, -] - -describe("provider SDK package matching", () => { - for (const item of cases) { - it.effect(`${item.name} creates an SDK only for its package`, () => - Effect.gen(function* () { - const plugin = yield* PluginV2.Service - yield* plugin.add(item.plugin) - - const ignored = yield* plugin.trigger( - "aisdk.sdk", - { model: model(item.providerID, "model"), package: "unmatched-package", options: item.options ?? {} }, - {}, - ) - expect(ignored.sdk).toBeUndefined() - - const result = yield* plugin.trigger( - "aisdk.sdk", - { model: model(item.providerID, "model"), package: item.package, options: item.options ?? {} }, - {}, - ) - expect(result.sdk).toBeDefined() - }), - ) - } -}) diff --git a/packages/opencode/test/v2/session-message-updater.test.ts b/packages/opencode/test/v2/session-message-updater.test.ts index 180483937c54..44ac031edab5 100644 --- a/packages/opencode/test/v2/session-message-updater.test.ts +++ b/packages/opencode/test/v2/session-message-updater.test.ts @@ -2,8 +2,7 @@ import { expect, test } from "bun:test" import * as DateTime from "effect/DateTime" import { SessionID } from "../../src/session/schema" import { EventV2 } from "../../src/v2/event" -import { ModelV2 } from "@opencode-ai/core/model" -import { ProviderV2 } from "@opencode-ai/core/provider" +import { Modelv2 } from "../../src/v2/model" import { SessionEvent } from "../../src/v2/session-event" import { SessionMessageUpdater } from "../../src/v2/session-message-updater" @@ -19,9 +18,9 @@ test("step snapshots carry over to assistant messages", () => { timestamp: DateTime.makeUnsafe(1), agent: "build", model: { - id: ModelV2.ID.make("model"), - providerID: ProviderV2.ID.make("provider"), - variant: ModelV2.VariantID.make("default"), + id: Modelv2.ID.make("model"), + providerID: Modelv2.ProviderID.make("provider"), + variant: Modelv2.VariantID.make("default"), }, snapshot: "before", }, @@ -63,9 +62,9 @@ test("text ended populates assistant text content", () => { timestamp: DateTime.makeUnsafe(1), agent: "build", model: { - id: ModelV2.ID.make("model"), - providerID: ProviderV2.ID.make("provider"), - variant: ModelV2.VariantID.make("default"), + id: Modelv2.ID.make("model"), + providerID: Modelv2.ProviderID.make("provider"), + variant: Modelv2.VariantID.make("default"), }, }, } satisfies SessionEvent.Event) @@ -107,9 +106,9 @@ test("tool completion stores completed timestamp", () => { timestamp: DateTime.makeUnsafe(1), agent: "build", model: { - id: ModelV2.ID.make("model"), - providerID: ProviderV2.ID.make("provider"), - variant: ModelV2.VariantID.make("default"), + id: Modelv2.ID.make("model"), + providerID: Modelv2.ProviderID.make("provider"), + variant: Modelv2.VariantID.make("default"), }, }, } satisfies SessionEvent.Event) From e5fae898e5d45e92da93a4473fed5c8cfba0384c Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Tue, 12 May 2026 23:23:23 -0400 Subject: [PATCH 16/18] test: align opencode tests with branch sources --- bun.lock | 1 + .../convert-to-copilot-messages.test.ts | 523 ---------------- .../copilot/copilot-chat-model.test.ts | 592 ------------------ .../test/server/httpapi-session.test.ts | 9 +- .../test/v2/session-message-updater.test.ts | 21 +- 5 files changed, 17 insertions(+), 1129 deletions(-) delete mode 100644 packages/opencode/test/provider/copilot/convert-to-copilot-messages.test.ts delete mode 100644 packages/opencode/test/provider/copilot/copilot-chat-model.test.ts diff --git a/bun.lock b/bun.lock index 525117fb307f..3555e407983d 100644 --- a/bun.lock +++ b/bun.lock @@ -240,6 +240,7 @@ "semver": "^7.6.3", "venice-ai-sdk-provider": "2.0.1", "xdg-basedir": "5.1.0", + "zod": "catalog:", }, "devDependencies": { "@tsconfig/bun": "catalog:", diff --git a/packages/opencode/test/provider/copilot/convert-to-copilot-messages.test.ts b/packages/opencode/test/provider/copilot/convert-to-copilot-messages.test.ts deleted file mode 100644 index 6f874db6d2e9..000000000000 --- a/packages/opencode/test/provider/copilot/convert-to-copilot-messages.test.ts +++ /dev/null @@ -1,523 +0,0 @@ -import { convertToOpenAICompatibleChatMessages as convertToCopilotMessages } from "@/provider/sdk/copilot/chat/convert-to-openai-compatible-chat-messages" -import { describe, test, expect } from "bun:test" - -describe("system messages", () => { - test("should convert system message content to string", () => { - const result = convertToCopilotMessages([ - { - role: "system", - content: "You are a helpful assistant with AGENTS.md instructions.", - }, - ]) - - expect(result).toEqual([ - { - role: "system", - content: "You are a helpful assistant with AGENTS.md instructions.", - }, - ]) - }) -}) - -describe("user messages", () => { - test("should convert messages with only a text part to a string content", () => { - const result = convertToCopilotMessages([ - { - role: "user", - content: [{ type: "text", text: "Hello" }], - }, - ]) - - expect(result).toEqual([{ role: "user", content: "Hello" }]) - }) - - test("should convert messages with image parts", () => { - const result = convertToCopilotMessages([ - { - role: "user", - content: [ - { type: "text", text: "Hello" }, - { - type: "file", - data: Buffer.from([0, 1, 2, 3]).toString("base64"), - mediaType: "image/png", - }, - ], - }, - ]) - - expect(result).toEqual([ - { - role: "user", - content: [ - { type: "text", text: "Hello" }, - { - type: "image_url", - image_url: { url: "data:image/png;base64,AAECAw==" }, - }, - ], - }, - ]) - }) - - test("should convert messages with image parts from Uint8Array", () => { - const result = convertToCopilotMessages([ - { - role: "user", - content: [ - { type: "text", text: "Hi" }, - { - type: "file", - data: new Uint8Array([0, 1, 2, 3]), - mediaType: "image/png", - }, - ], - }, - ]) - - expect(result).toEqual([ - { - role: "user", - content: [ - { type: "text", text: "Hi" }, - { - type: "image_url", - image_url: { url: "data:image/png;base64,AAECAw==" }, - }, - ], - }, - ]) - }) - - test("should handle URL-based images", () => { - const result = convertToCopilotMessages([ - { - role: "user", - content: [ - { - type: "file", - data: new URL("https://example.com/image.jpg"), - mediaType: "image/*", - }, - ], - }, - ]) - - expect(result).toEqual([ - { - role: "user", - content: [ - { - type: "image_url", - image_url: { url: "https://example.com/image.jpg" }, - }, - ], - }, - ]) - }) - - test("should handle multiple text parts without flattening", () => { - const result = convertToCopilotMessages([ - { - role: "user", - content: [ - { type: "text", text: "Part 1" }, - { type: "text", text: "Part 2" }, - ], - }, - ]) - - expect(result).toEqual([ - { - role: "user", - content: [ - { type: "text", text: "Part 1" }, - { type: "text", text: "Part 2" }, - ], - }, - ]) - }) -}) - -describe("assistant messages", () => { - test("should convert assistant text messages", () => { - const result = convertToCopilotMessages([ - { - role: "assistant", - content: [{ type: "text", text: "Hello back!" }], - }, - ]) - - expect(result).toEqual([ - { - role: "assistant", - content: "Hello back!", - tool_calls: undefined, - reasoning_text: undefined, - reasoning_opaque: undefined, - }, - ]) - }) - - test("should handle assistant message with null content when only tool calls", () => { - const result = convertToCopilotMessages([ - { - role: "assistant", - content: [ - { - type: "tool-call", - toolCallId: "call1", - toolName: "calculator", - input: { a: 1, b: 2 }, - }, - ], - }, - ]) - - expect(result).toEqual([ - { - role: "assistant", - content: null, - tool_calls: [ - { - id: "call1", - type: "function", - function: { - name: "calculator", - arguments: JSON.stringify({ a: 1, b: 2 }), - }, - }, - ], - reasoning_text: undefined, - reasoning_opaque: undefined, - }, - ]) - }) - - test("should concatenate multiple text parts", () => { - const result = convertToCopilotMessages([ - { - role: "assistant", - content: [ - { type: "text", text: "First part. " }, - { type: "text", text: "Second part." }, - ], - }, - ]) - - expect(result[0].content).toBe("First part. Second part.") - }) -}) - -describe("tool calls", () => { - test("should stringify arguments to tool calls", () => { - const result = convertToCopilotMessages([ - { - role: "assistant", - content: [ - { - type: "tool-call", - input: { foo: "bar123" }, - toolCallId: "quux", - toolName: "thwomp", - }, - ], - }, - { - role: "tool", - content: [ - { - type: "tool-result", - toolCallId: "quux", - toolName: "thwomp", - output: { type: "json", value: { oof: "321rab" } }, - }, - ], - }, - ]) - - expect(result).toEqual([ - { - role: "assistant", - content: null, - tool_calls: [ - { - id: "quux", - type: "function", - function: { - name: "thwomp", - arguments: JSON.stringify({ foo: "bar123" }), - }, - }, - ], - reasoning_text: undefined, - reasoning_opaque: undefined, - }, - { - role: "tool", - tool_call_id: "quux", - content: JSON.stringify({ oof: "321rab" }), - }, - ]) - }) - - test("should handle text output type in tool results", () => { - const result = convertToCopilotMessages([ - { - role: "tool", - content: [ - { - type: "tool-result", - toolCallId: "call-1", - toolName: "getWeather", - output: { type: "text", value: "It is sunny today" }, - }, - ], - }, - ]) - - expect(result).toEqual([ - { - role: "tool", - tool_call_id: "call-1", - content: "It is sunny today", - }, - ]) - }) - - test("should handle multiple tool results as separate messages", () => { - const result = convertToCopilotMessages([ - { - role: "tool", - content: [ - { - type: "tool-result", - toolCallId: "call1", - toolName: "api1", - output: { type: "text", value: "Result 1" }, - }, - { - type: "tool-result", - toolCallId: "call2", - toolName: "api2", - output: { type: "text", value: "Result 2" }, - }, - ], - }, - ]) - - expect(result).toHaveLength(2) - expect(result[0]).toEqual({ - role: "tool", - tool_call_id: "call1", - content: "Result 1", - }) - expect(result[1]).toEqual({ - role: "tool", - tool_call_id: "call2", - content: "Result 2", - }) - }) - - test("should handle text plus multiple tool calls", () => { - const result = convertToCopilotMessages([ - { - role: "assistant", - content: [ - { type: "text", text: "Checking... " }, - { - type: "tool-call", - toolCallId: "call1", - toolName: "searchTool", - input: { query: "Weather" }, - }, - { type: "text", text: "Almost there..." }, - { - type: "tool-call", - toolCallId: "call2", - toolName: "mapsTool", - input: { location: "Paris" }, - }, - ], - }, - ]) - - expect(result).toEqual([ - { - role: "assistant", - content: "Checking... Almost there...", - tool_calls: [ - { - id: "call1", - type: "function", - function: { - name: "searchTool", - arguments: JSON.stringify({ query: "Weather" }), - }, - }, - { - id: "call2", - type: "function", - function: { - name: "mapsTool", - arguments: JSON.stringify({ location: "Paris" }), - }, - }, - ], - reasoning_text: undefined, - reasoning_opaque: undefined, - }, - ]) - }) -}) - -describe("reasoning (copilot-specific)", () => { - test("should omit reasoning_text without reasoning_opaque", () => { - const result = convertToCopilotMessages([ - { - role: "assistant", - content: [ - { type: "reasoning", text: "Let me think about this..." }, - { type: "text", text: "The answer is 42." }, - ], - }, - ]) - - expect(result).toEqual([ - { - role: "assistant", - content: "The answer is 42.", - tool_calls: undefined, - reasoning_text: undefined, - reasoning_opaque: undefined, - }, - ]) - }) - - test("should include reasoning_opaque from providerOptions", () => { - const result = convertToCopilotMessages([ - { - role: "assistant", - content: [ - { - type: "reasoning", - text: "Thinking...", - providerOptions: { - copilot: { reasoningOpaque: "opaque-signature-123" }, - }, - }, - { type: "text", text: "Done!" }, - ], - }, - ]) - - expect(result).toEqual([ - { - role: "assistant", - content: "Done!", - tool_calls: undefined, - reasoning_text: "Thinking...", - reasoning_opaque: "opaque-signature-123", - }, - ]) - }) - - test("should include reasoning_opaque from text part providerOptions", () => { - const result = convertToCopilotMessages([ - { - role: "assistant", - content: [ - { - type: "text", - text: "Done!", - providerOptions: { - copilot: { reasoningOpaque: "opaque-text-456" }, - }, - }, - ], - }, - ]) - - expect(result).toEqual([ - { - role: "assistant", - content: "Done!", - tool_calls: undefined, - reasoning_text: undefined, - reasoning_opaque: "opaque-text-456", - }, - ]) - }) - - test("should handle reasoning-only assistant message", () => { - const result = convertToCopilotMessages([ - { - role: "assistant", - content: [ - { - type: "reasoning", - text: "Just thinking, no response yet", - providerOptions: { - copilot: { reasoningOpaque: "sig-abc" }, - }, - }, - ], - }, - ]) - - expect(result).toEqual([ - { - role: "assistant", - content: null, - tool_calls: undefined, - reasoning_text: "Just thinking, no response yet", - reasoning_opaque: "sig-abc", - }, - ]) - }) -}) - -describe("full conversation", () => { - test("should convert a multi-turn conversation with reasoning", () => { - const result = convertToCopilotMessages([ - { - role: "system", - content: "You are a helpful assistant.", - }, - { - role: "user", - content: [{ type: "text", text: "What is 2+2?" }], - }, - { - role: "assistant", - content: [ - { - type: "reasoning", - text: "Let me calculate 2+2...", - providerOptions: { - copilot: { reasoningOpaque: "sig-abc" }, - }, - }, - { type: "text", text: "2+2 equals 4." }, - ], - }, - { - role: "user", - content: [{ type: "text", text: "What about 3+3?" }], - }, - ]) - - expect(result).toHaveLength(4) - - const systemMsg = result[0] - expect(systemMsg.role).toBe("system") - - // Assistant message should have reasoning fields - const assistantMsg = result[2] as { - reasoning_text?: string - reasoning_opaque?: string - } - expect(assistantMsg.reasoning_text).toBe("Let me calculate 2+2...") - expect(assistantMsg.reasoning_opaque).toBe("sig-abc") - }) -}) diff --git a/packages/opencode/test/provider/copilot/copilot-chat-model.test.ts b/packages/opencode/test/provider/copilot/copilot-chat-model.test.ts deleted file mode 100644 index 389a72bb377b..000000000000 --- a/packages/opencode/test/provider/copilot/copilot-chat-model.test.ts +++ /dev/null @@ -1,592 +0,0 @@ -import { OpenAICompatibleChatLanguageModel } from "@/provider/sdk/copilot/chat/openai-compatible-chat-language-model" -import { describe, test, expect, mock } from "bun:test" -import type { LanguageModelV3Prompt } from "@ai-sdk/provider" - -async function convertReadableStreamToArray(stream: ReadableStream): Promise { - const reader = stream.getReader() - const result: T[] = [] - while (true) { - const { done, value } = await reader.read() - if (done) break - result.push(value) - } - return result -} - -const TEST_PROMPT: LanguageModelV3Prompt = [{ role: "user", content: [{ type: "text", text: "Hello" }] }] - -// Fixtures from copilot_test.exs -const FIXTURES = { - basicText: [ - `data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"gemini-2.0-flash-001","choices":[{"index":0,"delta":{"role":"assistant","content":"Hello"},"finish_reason":null}]}`, - `data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"gemini-2.0-flash-001","choices":[{"index":0,"delta":{"content":" world"},"finish_reason":null}]}`, - `data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"gemini-2.0-flash-001","choices":[{"index":0,"delta":{"content":"!"},"finish_reason":"stop"}]}`, - `data: [DONE]`, - ], - - reasoningWithToolCalls: [ - `data: {"choices":[{"index":0,"delta":{"content":null,"role":"assistant","reasoning_text":"**Understanding Dayzee's Purpose**\\n\\nI'm starting to get a better handle on \`dayzee\`.\\n\\n"}}],"created":1764940861,"id":"OdwyabKMI9yel7oPlbzgwQM","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-3-pro-preview"}`, - `data: {"choices":[{"index":0,"delta":{"content":null,"role":"assistant","reasoning_text":"**Assessing Dayzee's Functionality**\\n\\nI've reviewed the files.\\n\\n"}}],"created":1764940862,"id":"OdwyabKMI9yel7oPlbzgwQM","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-3-pro-preview"}`, - `data: {"choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"function":{"arguments":"{\\"filePath\\":\\"/README.md\\"}","name":"read_file"},"id":"call_abc123","index":0,"type":"function"}],"reasoning_opaque":"4CUQ6696CwSXOdQ5rtvDimqA91tBzfmga4ieRbmZ5P67T2NLW3"}}],"created":1764940862,"id":"OdwyabKMI9yel7oPlbzgwQM","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-3-pro-preview"}`, - `data: {"choices":[{"finish_reason":"tool_calls","index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"function":{"arguments":"{\\"filePath\\":\\"/mix.exs\\"}","name":"read_file"},"id":"call_def456","index":1,"type":"function"}]}}],"created":1764940862,"id":"OdwyabKMI9yel7oPlbzgwQM","usage":{"completion_tokens":53,"prompt_tokens":19581,"prompt_tokens_details":{"cached_tokens":17068},"total_tokens":19768,"reasoning_tokens":134},"model":"gemini-3-pro-preview"}`, - `data: [DONE]`, - ], - - reasoningWithOpaqueAtEnd: [ - `data: {"choices":[{"index":0,"delta":{"content":null,"role":"assistant","reasoning_text":"**Analyzing the Inquiry's Nature**\\n\\nI'm currently parsing the user's question.\\n\\n"}}],"created":1765201729,"id":"Ptc2afqsCIHqlOoP653UiAI","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-3-pro-preview"}`, - `data: {"choices":[{"index":0,"delta":{"content":null,"role":"assistant","reasoning_text":"**Reconciling User's Input**\\n\\nI'm grappling with the context.\\n\\n"}}],"created":1765201730,"id":"Ptc2afqsCIHqlOoP653UiAI","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-3-pro-preview"}`, - `data: {"choices":[{"index":0,"delta":{"content":"I am Tidewave, a highly skilled AI coding agent.\\n\\n","role":"assistant"}}],"created":1765201730,"id":"Ptc2afqsCIHqlOoP653UiAI","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-3-pro-preview"}`, - `data: {"choices":[{"finish_reason":"stop","index":0,"delta":{"content":"How can I help you?","role":"assistant","reasoning_opaque":"/PMlTqxqSJZnUBDHgnnJKLVI4eZQ"}}],"created":1765201730,"id":"Ptc2afqsCIHqlOoP653UiAI","usage":{"completion_tokens":59,"prompt_tokens":5778,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":5932,"reasoning_tokens":95},"model":"gemini-3-pro-preview"}`, - `data: [DONE]`, - ], - - // Case where reasoning_opaque and content come in the SAME chunk - reasoningWithOpaqueAndContentSameChunk: [ - `data: {"choices":[{"index":0,"delta":{"content":null,"role":"assistant","reasoning_text":"**Understanding the Query's Nature**\\n\\nI'm currently grappling with the user's philosophical query.\\n\\n"}}],"created":1766062103,"id":"FPhDacixL9zrlOoPqLSuyQ4","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-2.5-pro"}`, - `data: {"choices":[{"index":0,"delta":{"content":null,"role":"assistant","reasoning_text":"**Framing the Response's Core**\\n\\nNow, I'm structuring my response.\\n\\n"}}],"created":1766062103,"id":"FPhDacixL9zrlOoPqLSuyQ4","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-2.5-pro"}`, - `data: {"choices":[{"index":0,"delta":{"content":"Of course. I'm thinking right now.","role":"assistant","reasoning_opaque":"ExXaGwW7jBo39OXRe9EPoFGN1rOtLJBx"}}],"created":1766062103,"id":"FPhDacixL9zrlOoPqLSuyQ4","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-2.5-pro"}`, - `data: {"choices":[{"finish_reason":"stop","index":0,"delta":{"content":" What's on your mind?","role":"assistant"}}],"created":1766062103,"id":"FPhDacixL9zrlOoPqLSuyQ4","usage":{"completion_tokens":78,"prompt_tokens":3767,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":3915,"reasoning_tokens":70},"model":"gemini-2.5-pro"}`, - `data: [DONE]`, - ], - - // Case where reasoning_opaque and content come in same chunk, followed by tool calls - reasoningWithOpaqueContentAndToolCalls: [ - `data: {"choices":[{"index":0,"delta":{"content":null,"role":"assistant","reasoning_text":"**Analyzing the Structure**\\n\\nI'm currently trying to get a handle on the project's layout. My initial focus is on the file structure itself, specifically the directory organization. I'm hoping this will illuminate how different components interact. I'll need to identify the key modules and their dependencies.\\n\\n\\n"}}],"created":1766066995,"id":"MQtEafqbFYTZsbwPwuCVoAg","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-2.5-pro"}`, - `data: {"choices":[{"index":0,"delta":{"content":"Okay, I need to check out the project's file structure.","role":"assistant","reasoning_opaque":"WHOd3dYFnxEBOsKUXjbX6c2rJa0fS214FHbsj+A3Q+i63SFo7H/92RsownAzyo0h2qEy3cOcrvAatsMx51eCKiMSqt4dYWZhd5YVSgF0CehkpDbWBP/SoRqLU1dhCmUJV/6b5uYFBOzKLBGNadyhI7T1gWFlXntwc6SNjH6DujnFPeVr+L8DdOoUJGJrw2aOfm9NtkXA6wZh9t7dt+831yIIImjD9MHczuXoXj8K7tyLpIJ9KlVXMhnO4IKSYNdKRtoHlGTmudAp5MgH/vLWb6oSsL+ZJl/OdF3WBOeanGhYNoByCRDSvR7anAR/9m5zf9yUax+u/nFg+gzmhFacnzZGtSmcvJ4/4HWKNtUkRASTKeN94DXB8j1ptB/i6ldaMAz2ZyU+sbjPWI8aI4fKJ2MuO01u3uE87xVwpWiM+0rahIzJsllI5edwOaOFtF4tnlCTQafbxHwCZR62uON2E+IjGzW80MzyfYrbLBJKS5zTeHCgPYQSNaKzPfpzkQvdwo3JUnJYcEHgGeKzkq5sbvS5qitCYI7Xue0V98S6/KnUSPnDQBjNnas2i6BqJV2vuCEU/Y3ucrlKVbuRIFCZXCyLzrsGeRLRKlrf5S/HDAQ04IOPQVQhBPvhX0nDjhZB"}}],"created":1766066995,"id":"MQtEafqbFYTZsbwPwuCVoAg","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-2.5-pro"}`, - `data: {"choices":[{"finish_reason":"tool_calls","index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"function":{"arguments":"{}","name":"list_project_files"},"id":"call_MHxqRDd5WVo3NU8wUXRaMmc0MFE","index":0,"type":"function"}]}}],"created":1766066995,"id":"MQtEafqbFYTZsbwPwuCVoAg","usage":{"completion_tokens":19,"prompt_tokens":3767,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":3797,"reasoning_tokens":11},"model":"gemini-2.5-pro"}`, - `data: [DONE]`, - ], - - // Case where reasoning goes directly to tool_calls with NO content - // reasoning_opaque and tool_calls come in the same chunk - reasoningDirectlyToToolCalls: [ - `data: {"choices":[{"index":0,"delta":{"content":null,"role":"assistant","reasoning_text":"**Executing and Analyzing HTML**\\n\\nI've successfully captured the HTML snapshot using the \`browser_eval\` tool, giving me a solid understanding of the page structure. Now, I'm shifting focus to Elixir code execution with \`project_eval\` to assess my ability to work within the project's environment.\\n\\n\\n"}}],"created":1766068643,"id":"oBFEaafzD9DVlOoPkY3l4Qs","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-3-pro-preview"}`, - `data: {"choices":[{"index":0,"delta":{"content":null,"role":"assistant","reasoning_text":"**Testing Project Contexts**\\n\\nI've got the HTML body snapshot from \`browser_eval\`, which is a helpful reference. Next, I'm testing my ability to run Elixir code in the project with \`project_eval\`. I'm starting with a simple sum: \`1 + 1\`. This will confirm I'm set up to interact with the project's codebase.\\n\\n\\n"}}],"created":1766068644,"id":"oBFEaafzD9DVlOoPkY3l4Qs","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-3-pro-preview"}`, - `data: {"choices":[{"finish_reason":"tool_calls","index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"function":{"arguments":"{\\"code\\":\\"1 + 1\\"}","name":"project_eval"},"id":"call_MHw3RDhmT1J5Z3B6WlhpVjlveTc","index":0,"type":"function"}],"reasoning_opaque":"ytGNWFf2doK38peANDvm7whkLPKrd+Fv6/k34zEPBF6Qwitj4bTZT0FBXleydLb6"}}],"created":1766068644,"id":"oBFEaafzD9DVlOoPkY3l4Qs","usage":{"completion_tokens":12,"prompt_tokens":8677,"prompt_tokens_details":{"cached_tokens":3692},"total_tokens":8768,"reasoning_tokens":79},"model":"gemini-3-pro-preview"}`, - `data: [DONE]`, - ], - - reasoningOpaqueWithToolCallsNoReasoningText: [ - `data: {"choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"function":{"arguments":"{}","name":"read_file"},"id":"call_reasoning_only","index":0,"type":"function"}],"reasoning_opaque":"opaque-xyz"}}],"created":1769917420,"id":"opaque-only","usage":{"completion_tokens":0,"prompt_tokens":0,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":0,"reasoning_tokens":0},"model":"gemini-3-flash-preview"}`, - `data: {"choices":[{"finish_reason":"tool_calls","index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"function":{"arguments":"{}","name":"read_file"},"id":"call_reasoning_only_2","index":1,"type":"function"}]}}],"created":1769917420,"id":"opaque-only","usage":{"completion_tokens":12,"prompt_tokens":123,"prompt_tokens_details":{"cached_tokens":0},"total_tokens":135,"reasoning_tokens":0},"model":"gemini-3-flash-preview"}`, - `data: [DONE]`, - ], -} - -function createMockFetch(chunks: string[]) { - return mock(async () => { - const body = new ReadableStream({ - start(controller) { - for (const chunk of chunks) { - controller.enqueue(new TextEncoder().encode(chunk + "\n\n")) - } - controller.close() - }, - }) - - return new Response(body, { - status: 200, - headers: { "Content-Type": "text/event-stream" }, - }) - }) -} - -function createModel(fetchFn: ReturnType) { - return new OpenAICompatibleChatLanguageModel("test-model", { - provider: "copilot.chat", - url: () => "https://api.test.com/chat/completions", - headers: () => ({ Authorization: "Bearer test-token" }), - fetch: fetchFn as any, - }) -} - -describe("doStream", () => { - test("should stream text deltas", async () => { - const mockFetch = createMockFetch(FIXTURES.basicText) - const model = createModel(mockFetch) - - const { stream } = await model.doStream({ - prompt: TEST_PROMPT, - includeRawChunks: false, - }) - - const parts = await convertReadableStreamToArray(stream) - - // Filter to just the key events - const textParts = parts.filter( - (p) => p.type === "text-start" || p.type === "text-delta" || p.type === "text-end" || p.type === "finish", - ) - - expect(textParts).toMatchObject([ - { type: "text-start", id: "txt-0" }, - { type: "text-delta", id: "txt-0", delta: "Hello" }, - { type: "text-delta", id: "txt-0", delta: " world" }, - { type: "text-delta", id: "txt-0", delta: "!" }, - { type: "text-end", id: "txt-0" }, - { type: "finish", finishReason: { unified: "stop" } }, - ]) - }) - - test("should stream reasoning with tool calls and capture reasoning_opaque", async () => { - const mockFetch = createMockFetch(FIXTURES.reasoningWithToolCalls) - const model = createModel(mockFetch) - - const { stream } = await model.doStream({ - prompt: TEST_PROMPT, - includeRawChunks: false, - }) - - const parts = await convertReadableStreamToArray(stream) - - // Check reasoning parts - const reasoningParts = parts.filter( - (p) => p.type === "reasoning-start" || p.type === "reasoning-delta" || p.type === "reasoning-end", - ) - - expect(reasoningParts[0]).toEqual({ - type: "reasoning-start", - id: "reasoning-0", - }) - - expect(reasoningParts[1]).toMatchObject({ - type: "reasoning-delta", - id: "reasoning-0", - }) - expect((reasoningParts[1] as { delta: string }).delta).toContain("**Understanding Dayzee's Purpose**") - - expect(reasoningParts[2]).toMatchObject({ - type: "reasoning-delta", - id: "reasoning-0", - }) - expect((reasoningParts[2] as { delta: string }).delta).toContain("**Assessing Dayzee's Functionality**") - - // reasoning_opaque should be in reasoning-end providerMetadata - const reasoningEnd = reasoningParts.find((p) => p.type === "reasoning-end") - expect(reasoningEnd).toMatchObject({ - type: "reasoning-end", - id: "reasoning-0", - providerMetadata: { - copilot: { - reasoningOpaque: "4CUQ6696CwSXOdQ5rtvDimqA91tBzfmga4ieRbmZ5P67T2NLW3", - }, - }, - }) - - // Check tool calls - const toolParts = parts.filter( - (p) => p.type === "tool-input-start" || p.type === "tool-call" || p.type === "tool-input-end", - ) - - expect(toolParts).toContainEqual({ - type: "tool-input-start", - id: "call_abc123", - toolName: "read_file", - }) - - expect(toolParts).toContainEqual( - expect.objectContaining({ - type: "tool-call", - toolCallId: "call_abc123", - toolName: "read_file", - }), - ) - - expect(toolParts).toContainEqual({ - type: "tool-input-start", - id: "call_def456", - toolName: "read_file", - }) - - // Check finish - const finish = parts.find((p) => p.type === "finish") - expect(finish).toMatchObject({ - type: "finish", - finishReason: { unified: "tool-calls" }, - usage: { - inputTokens: { total: 19581 }, - outputTokens: { total: 53 }, - }, - }) - }) - - test("should handle reasoning_opaque that comes at end with text in between", async () => { - const mockFetch = createMockFetch(FIXTURES.reasoningWithOpaqueAtEnd) - const model = createModel(mockFetch) - - const { stream } = await model.doStream({ - prompt: TEST_PROMPT, - includeRawChunks: false, - }) - - const parts = await convertReadableStreamToArray(stream) - - // Check that reasoning comes first - const reasoningStart = parts.findIndex((p) => p.type === "reasoning-start") - const textStart = parts.findIndex((p) => p.type === "text-start") - expect(reasoningStart).toBeLessThan(textStart) - - // Check reasoning deltas - const reasoningDeltas = parts.filter((p) => p.type === "reasoning-delta") - expect(reasoningDeltas).toHaveLength(2) - expect((reasoningDeltas[0] as { delta: string }).delta).toContain("**Analyzing the Inquiry's Nature**") - expect((reasoningDeltas[1] as { delta: string }).delta).toContain("**Reconciling User's Input**") - - // Check text deltas - const textDeltas = parts.filter((p) => p.type === "text-delta") - expect(textDeltas).toHaveLength(2) - expect((textDeltas[0] as { delta: string }).delta).toContain("I am Tidewave") - expect((textDeltas[1] as { delta: string }).delta).toContain("How can I help you?") - - // reasoning-end should be emitted before text-start - const reasoningEndIndex = parts.findIndex((p) => p.type === "reasoning-end") - const textStartIndex = parts.findIndex((p) => p.type === "text-start") - expect(reasoningEndIndex).toBeGreaterThan(-1) - expect(reasoningEndIndex).toBeLessThan(textStartIndex) - - // In this fixture, reasoning_opaque comes AFTER content has started (in chunk 4) - // So it arrives too late to be attached to reasoning-end. But it should still - // be captured and included in the finish event's providerMetadata. - const reasoningEnd = parts.find((p) => p.type === "reasoning-end") - expect(reasoningEnd).toMatchObject({ - type: "reasoning-end", - id: "reasoning-0", - }) - - // reasoning_opaque should be in the finish event's providerMetadata - const finish = parts.find((p) => p.type === "finish") - expect(finish).toMatchObject({ - type: "finish", - finishReason: { unified: "stop" }, - usage: { - inputTokens: { total: 5778 }, - outputTokens: { total: 59 }, - }, - providerMetadata: { - copilot: { - reasoningOpaque: "/PMlTqxqSJZnUBDHgnnJKLVI4eZQ", - }, - }, - }) - }) - - test("should handle reasoning_opaque and content in the same chunk", async () => { - const mockFetch = createMockFetch(FIXTURES.reasoningWithOpaqueAndContentSameChunk) - const model = createModel(mockFetch) - - const { stream } = await model.doStream({ - prompt: TEST_PROMPT, - includeRawChunks: false, - }) - - const parts = await convertReadableStreamToArray(stream) - - // The critical test: reasoning-end should come BEFORE text-start - const reasoningEndIndex = parts.findIndex((p) => p.type === "reasoning-end") - const textStartIndex = parts.findIndex((p) => p.type === "text-start") - expect(reasoningEndIndex).toBeGreaterThan(-1) - expect(textStartIndex).toBeGreaterThan(-1) - expect(reasoningEndIndex).toBeLessThan(textStartIndex) - - // Check reasoning deltas - const reasoningDeltas = parts.filter((p) => p.type === "reasoning-delta") - expect(reasoningDeltas).toHaveLength(2) - expect((reasoningDeltas[0] as { delta: string }).delta).toContain("**Understanding the Query's Nature**") - expect((reasoningDeltas[1] as { delta: string }).delta).toContain("**Framing the Response's Core**") - - // reasoning_opaque should be in reasoning-end even though it came with content - const reasoningEnd = parts.find((p) => p.type === "reasoning-end") - expect(reasoningEnd).toMatchObject({ - type: "reasoning-end", - id: "reasoning-0", - providerMetadata: { - copilot: { - reasoningOpaque: "ExXaGwW7jBo39OXRe9EPoFGN1rOtLJBx", - }, - }, - }) - - // Check text deltas - const textDeltas = parts.filter((p) => p.type === "text-delta") - expect(textDeltas).toHaveLength(2) - expect((textDeltas[0] as { delta: string }).delta).toContain("Of course. I'm thinking right now.") - expect((textDeltas[1] as { delta: string }).delta).toContain("What's on your mind?") - - // Check finish - const finish = parts.find((p) => p.type === "finish") - expect(finish).toMatchObject({ - type: "finish", - finishReason: { unified: "stop" }, - }) - }) - - test("should handle reasoning_opaque and content followed by tool calls", async () => { - const mockFetch = createMockFetch(FIXTURES.reasoningWithOpaqueContentAndToolCalls) - const model = createModel(mockFetch) - - const { stream } = await model.doStream({ - prompt: TEST_PROMPT, - includeRawChunks: false, - }) - - const parts = await convertReadableStreamToArray(stream) - - // Check that reasoning comes first, then text, then tool calls - const reasoningEndIndex = parts.findIndex((p) => p.type === "reasoning-end") - const textStartIndex = parts.findIndex((p) => p.type === "text-start") - const toolStartIndex = parts.findIndex((p) => p.type === "tool-input-start") - - expect(reasoningEndIndex).toBeGreaterThan(-1) - expect(textStartIndex).toBeGreaterThan(-1) - expect(toolStartIndex).toBeGreaterThan(-1) - expect(reasoningEndIndex).toBeLessThan(textStartIndex) - expect(textStartIndex).toBeLessThan(toolStartIndex) - - // Check reasoning content - const reasoningDeltas = parts.filter((p) => p.type === "reasoning-delta") - expect(reasoningDeltas).toHaveLength(1) - expect((reasoningDeltas[0] as { delta: string }).delta).toContain("**Analyzing the Structure**") - - // reasoning_opaque should be in reasoning-end (comes with content in same chunk) - const reasoningEnd = parts.find((p) => p.type === "reasoning-end") - expect(reasoningEnd).toMatchObject({ - type: "reasoning-end", - id: "reasoning-0", - providerMetadata: { - copilot: { - reasoningOpaque: expect.stringContaining("WHOd3dYFnxEBOsKUXjbX6c2rJa0fS214"), - }, - }, - }) - - // Check text content - const textDeltas = parts.filter((p) => p.type === "text-delta") - expect(textDeltas).toHaveLength(1) - expect((textDeltas[0] as { delta: string }).delta).toContain( - "Okay, I need to check out the project's file structure.", - ) - - // Check tool call - const toolParts = parts.filter( - (p) => p.type === "tool-input-start" || p.type === "tool-call" || p.type === "tool-input-end", - ) - - expect(toolParts).toContainEqual({ - type: "tool-input-start", - id: "call_MHxqRDd5WVo3NU8wUXRaMmc0MFE", - toolName: "list_project_files", - }) - - expect(toolParts).toContainEqual( - expect.objectContaining({ - type: "tool-call", - toolCallId: "call_MHxqRDd5WVo3NU8wUXRaMmc0MFE", - toolName: "list_project_files", - }), - ) - - // Check finish - const finish = parts.find((p) => p.type === "finish") - expect(finish).toMatchObject({ - type: "finish", - finishReason: { unified: "tool-calls" }, - usage: { - inputTokens: { total: 3767 }, - outputTokens: { total: 19 }, - }, - }) - }) - - test("should emit reasoning-end before tool-input-start when reasoning goes directly to tool calls", async () => { - const mockFetch = createMockFetch(FIXTURES.reasoningDirectlyToToolCalls) - const model = createModel(mockFetch) - - const { stream } = await model.doStream({ - prompt: TEST_PROMPT, - includeRawChunks: false, - }) - - const parts = await convertReadableStreamToArray(stream) - - // Critical check: reasoning-end MUST come before tool-input-start - const reasoningEndIndex = parts.findIndex((p) => p.type === "reasoning-end") - const toolStartIndex = parts.findIndex((p) => p.type === "tool-input-start") - - expect(reasoningEndIndex).toBeGreaterThan(-1) - expect(toolStartIndex).toBeGreaterThan(-1) - expect(reasoningEndIndex).toBeLessThan(toolStartIndex) - - // Check reasoning parts - const reasoningDeltas = parts.filter((p) => p.type === "reasoning-delta") - expect(reasoningDeltas).toHaveLength(2) - expect((reasoningDeltas[0] as { delta: string }).delta).toContain("**Executing and Analyzing HTML**") - expect((reasoningDeltas[1] as { delta: string }).delta).toContain("**Testing Project Contexts**") - - // reasoning_opaque should be in reasoning-end providerMetadata - const reasoningEnd = parts.find((p) => p.type === "reasoning-end") - expect(reasoningEnd).toMatchObject({ - type: "reasoning-end", - id: "reasoning-0", - providerMetadata: { - copilot: { - reasoningOpaque: "ytGNWFf2doK38peANDvm7whkLPKrd+Fv6/k34zEPBF6Qwitj4bTZT0FBXleydLb6", - }, - }, - }) - - // No text parts should exist - const textParts = parts.filter((p) => p.type === "text-start" || p.type === "text-delta" || p.type === "text-end") - expect(textParts).toHaveLength(0) - - // Check tool call - const toolCall = parts.find((p) => p.type === "tool-call") - expect(toolCall).toMatchObject({ - type: "tool-call", - toolCallId: "call_MHw3RDhmT1J5Z3B6WlhpVjlveTc", - toolName: "project_eval", - }) - - // Check finish - const finish = parts.find((p) => p.type === "finish") - expect(finish).toMatchObject({ - type: "finish", - finishReason: { unified: "tool-calls" }, - }) - }) - - test("should attach reasoning_opaque to tool calls without reasoning_text", async () => { - const mockFetch = createMockFetch(FIXTURES.reasoningOpaqueWithToolCallsNoReasoningText) - const model = createModel(mockFetch) - - const { stream } = await model.doStream({ - prompt: TEST_PROMPT, - includeRawChunks: false, - }) - - const parts = await convertReadableStreamToArray(stream) - const reasoningParts = parts.filter( - (p) => p.type === "reasoning-start" || p.type === "reasoning-delta" || p.type === "reasoning-end", - ) - - expect(reasoningParts).toHaveLength(0) - - const toolCall = parts.find((p) => p.type === "tool-call" && p.toolCallId === "call_reasoning_only") - expect(toolCall).toMatchObject({ - type: "tool-call", - toolCallId: "call_reasoning_only", - toolName: "read_file", - providerMetadata: { - copilot: { - reasoningOpaque: "opaque-xyz", - }, - }, - }) - }) - - test("should include response metadata from first chunk", async () => { - const mockFetch = createMockFetch(FIXTURES.basicText) - const model = createModel(mockFetch) - - const { stream } = await model.doStream({ - prompt: TEST_PROMPT, - includeRawChunks: false, - }) - - const parts = await convertReadableStreamToArray(stream) - - const metadata = parts.find((p) => p.type === "response-metadata") - expect(metadata).toMatchObject({ - type: "response-metadata", - id: "chatcmpl-123", - modelId: "gemini-2.0-flash-001", - }) - }) - - test("should emit stream-start with warnings", async () => { - const mockFetch = createMockFetch(FIXTURES.basicText) - const model = createModel(mockFetch) - - const { stream } = await model.doStream({ - prompt: TEST_PROMPT, - includeRawChunks: false, - }) - - const parts = await convertReadableStreamToArray(stream) - - const streamStart = parts.find((p) => p.type === "stream-start") - expect(streamStart).toEqual({ - type: "stream-start", - warnings: [], - }) - }) - - test("should include raw chunks when requested", async () => { - const mockFetch = createMockFetch(FIXTURES.basicText) - const model = createModel(mockFetch) - - const { stream } = await model.doStream({ - prompt: TEST_PROMPT, - includeRawChunks: true, - }) - - const parts = await convertReadableStreamToArray(stream) - - const rawChunks = parts.filter((p) => p.type === "raw") - expect(rawChunks.length).toBeGreaterThan(0) - }) -}) - -describe("request body", () => { - test("should send tools in OpenAI format", async () => { - let capturedBody: unknown - const mockFetch = mock(async (_url: string, init?: RequestInit) => { - capturedBody = JSON.parse(init?.body as string) - return new Response( - new ReadableStream({ - start(controller) { - controller.enqueue(new TextEncoder().encode(`data: [DONE]\n\n`)) - controller.close() - }, - }), - { status: 200, headers: { "Content-Type": "text/event-stream" } }, - ) - }) - - const model = createModel(mockFetch) - - await model.doStream({ - prompt: TEST_PROMPT, - tools: [ - { - type: "function", - name: "get_weather", - description: "Get the weather for a location", - inputSchema: { - type: "object", - properties: { - location: { type: "string" }, - }, - required: ["location"], - }, - }, - ], - includeRawChunks: false, - }) - - expect((capturedBody as { tools: unknown[] }).tools).toEqual([ - { - type: "function", - function: { - name: "get_weather", - description: "Get the weather for a location", - parameters: { - type: "object", - properties: { - location: { type: "string" }, - }, - required: ["location"], - }, - }, - }, - ]) - }) -}) diff --git a/packages/opencode/test/server/httpapi-session.test.ts b/packages/opencode/test/server/httpapi-session.test.ts index 8cffb6e82571..1589add3fb4b 100644 --- a/packages/opencode/test/server/httpapi-session.test.ts +++ b/packages/opencode/test/server/httpapi-session.test.ts @@ -20,7 +20,8 @@ import { MessageV2 } from "../../src/session/message-v2" import { Database } from "@/storage/db" import { SessionMessageTable, SessionTable } from "@/session/session.sql" import { SessionMessage } from "../../src/v2/session-message" -import { Modelv2 } from "../../src/v2/model" +import { ModelV2 } from "@opencode-ai/core/model" +import { ProviderV2 } from "@opencode-ai/core/provider" import * as DateTime from "effect/DateTime" import * as Log from "@opencode-ai/core/util/log" import { eq } from "drizzle-orm" @@ -110,9 +111,9 @@ const insertLegacyAssistantMessage = (sessionID: SessionIDType) => type: "assistant", agent: "build", model: { - id: Modelv2.ID.make("model"), - providerID: Modelv2.ProviderID.make("provider"), - variant: Modelv2.VariantID.make("default"), + id: ModelV2.ID.make("model"), + providerID: ProviderV2.ID.make("provider"), + variant: ModelV2.VariantID.make("default"), }, time: { created: DateTime.makeUnsafe(1) }, content: [], diff --git a/packages/opencode/test/v2/session-message-updater.test.ts b/packages/opencode/test/v2/session-message-updater.test.ts index 44ac031edab5..180483937c54 100644 --- a/packages/opencode/test/v2/session-message-updater.test.ts +++ b/packages/opencode/test/v2/session-message-updater.test.ts @@ -2,7 +2,8 @@ import { expect, test } from "bun:test" import * as DateTime from "effect/DateTime" import { SessionID } from "../../src/session/schema" import { EventV2 } from "../../src/v2/event" -import { Modelv2 } from "../../src/v2/model" +import { ModelV2 } from "@opencode-ai/core/model" +import { ProviderV2 } from "@opencode-ai/core/provider" import { SessionEvent } from "../../src/v2/session-event" import { SessionMessageUpdater } from "../../src/v2/session-message-updater" @@ -18,9 +19,9 @@ test("step snapshots carry over to assistant messages", () => { timestamp: DateTime.makeUnsafe(1), agent: "build", model: { - id: Modelv2.ID.make("model"), - providerID: Modelv2.ProviderID.make("provider"), - variant: Modelv2.VariantID.make("default"), + id: ModelV2.ID.make("model"), + providerID: ProviderV2.ID.make("provider"), + variant: ModelV2.VariantID.make("default"), }, snapshot: "before", }, @@ -62,9 +63,9 @@ test("text ended populates assistant text content", () => { timestamp: DateTime.makeUnsafe(1), agent: "build", model: { - id: Modelv2.ID.make("model"), - providerID: Modelv2.ProviderID.make("provider"), - variant: Modelv2.VariantID.make("default"), + id: ModelV2.ID.make("model"), + providerID: ProviderV2.ID.make("provider"), + variant: ModelV2.VariantID.make("default"), }, }, } satisfies SessionEvent.Event) @@ -106,9 +107,9 @@ test("tool completion stores completed timestamp", () => { timestamp: DateTime.makeUnsafe(1), agent: "build", model: { - id: Modelv2.ID.make("model"), - providerID: Modelv2.ProviderID.make("provider"), - variant: Modelv2.VariantID.make("default"), + id: ModelV2.ID.make("model"), + providerID: ProviderV2.ID.make("provider"), + variant: ModelV2.VariantID.make("default"), }, }, } satisfies SessionEvent.Event) From 7c168d64ea94a863363a614fe9bf5c555e659090 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Wed, 13 May 2026 10:18:37 -0400 Subject: [PATCH 17/18] fix: avoid booting plugins in v2 http handlers --- .../opencode/src/server/routes/instance/httpapi/handlers/v2.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/opencode/src/server/routes/instance/httpapi/handlers/v2.ts b/packages/opencode/src/server/routes/instance/httpapi/handlers/v2.ts index ca1d397d5915..b277e770166f 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/handlers/v2.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/handlers/v2.ts @@ -1,5 +1,4 @@ import { Catalog } from "@opencode-ai/core/catalog" -import { PluginBoot } from "@/v2/plugin-boot" import { SessionV2 } from "@/v2/session" import { Layer } from "effect" import { messageHandlers } from "./v2/message" @@ -10,5 +9,4 @@ import { sessionHandlers } from "./v2/session" export const v2Handlers = Layer.mergeAll(sessionHandlers, messageHandlers, modelHandlers, providerHandlers).pipe( Layer.provide(Catalog.defaultLayer), Layer.provide(SessionV2.defaultLayer), - Layer.provide(PluginBoot.defaultLayer), ) From 7a994f84ce19f530449280aa12bd7d57e8045473 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Wed, 13 May 2026 10:31:39 -0400 Subject: [PATCH 18/18] test: cover v2 provider model routes --- packages/opencode/test/server/httpapi-exercise/index.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/opencode/test/server/httpapi-exercise/index.ts b/packages/opencode/test/server/httpapi-exercise/index.ts index 0d6bec2dfed0..293e2a3449dc 100644 --- a/packages/opencode/test/server/httpapi-exercise/index.ts +++ b/packages/opencode/test/server/httpapi-exercise/index.ts @@ -593,6 +593,12 @@ const scenarios: Scenario[] = [ check(auth.test === undefined, "auth remove should delete provider from isolated auth file") }), ), + http.protected.get("/api/model", "v2.model.list").json(200, array), + http.protected.get("/api/provider", "v2.provider.list").json(200, array), + http.protected + .get("/api/provider/{providerID}", "v2.provider.get") + .at((ctx) => ({ path: route("/api/provider/{providerID}", { providerID: "missing" }), headers: ctx.headers() })) + .json(404, object, "status"), http.protected .get("/api/session", "v2.session.list") .at((ctx) => ({ path: "/api/session?roots=true", headers: ctx.headers() }))