diff --git a/.github/workflows/close-issues.yml b/.github/workflows/close-issues.yml new file mode 100644 index 0000000000..04b6ae7ac8 --- /dev/null +++ b/.github/workflows/close-issues.yml @@ -0,0 +1,24 @@ +name: close-issues + +on: + schedule: + - cron: "0 2 * * *" # Daily at 2:00 AM + workflow_dispatch: + +jobs: + close: + runs-on: ubuntu-latest + permissions: + contents: read + issues: write + steps: + - uses: actions/checkout@v4 + + - uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Close stale issues + env: + GITHUB_TOKEN: ${{ github.token }} + run: bun script/github/close-issues.ts diff --git a/.github/workflows/stale-issues.yml b/.github/workflows/stale-issues.yml deleted file mode 100644 index 51c649d823..0000000000 --- a/.github/workflows/stale-issues.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: stale-issues - -on: - schedule: - - cron: "30 1 * * *" # Daily at 1:30 AM - workflow_dispatch: - -env: - DAYS_BEFORE_ISSUE_CLOSE: 90 - DAYS_BEFORE_PR_CLOSE: 30 - -jobs: - stale: - if: github.repository == 'Kilo-Org/kilocode' - runs-on: blacksmith-4vcpu-ubuntu-2404 - permissions: - issues: write - pull-requests: write - steps: - - uses: actions/stale@v10 - with: - days-before-issue-stale: ${{ env.DAYS_BEFORE_ISSUE_CLOSE }} - days-before-pr-stale: ${{ env.DAYS_BEFORE_PR_CLOSE }} - days-before-issue-close: 0 - days-before-pr-close: 0 - close-issue-message: | - Closing this one out since it's been inactive for a while — not because it's a bad issue, just that older items tend to lose context over time and we'd rather start fresh if this is still a problem. - - Please feel free to reopen (or open a new issue) if you're still running into this. We're happy to take another look! 🙏 - close-pr-message: | - Closing this one out since it's been inactive for a while — not because it's a bad PR, just that older items tend to lose context over time and we'd rather start fresh if this is still relevant. - - Please feel free to reopen (or open a new PR) if you're still working on this. We're happy to take another look! 🙏 - operations-per-run: 200 diff --git a/packages/app/src/context/command-keybind.test.ts b/packages/app/src/context/command-keybind.test.ts index d804195c40..c8e2dbb5d0 100644 --- a/packages/app/src/context/command-keybind.test.ts +++ b/packages/app/src/context/command-keybind.test.ts @@ -32,6 +32,25 @@ describe("command keybind helpers", () => { expect(matchKeybind(keybinds, new KeyboardEvent("keydown", { key: ",", ctrlKey: true, altKey: true }))).toBe(false) }) + test("matchKeybind supports bracket keys", () => { + const keybinds = parseKeybind("mod+alt+[, mod+alt+]") + const prev = keybinds[0] + const next = keybinds[1] + + expect( + matchKeybind( + keybinds, + new KeyboardEvent("keydown", { key: "[", ctrlKey: prev?.ctrl, metaKey: prev?.meta, altKey: true }), + ), + ).toBe(true) + expect( + matchKeybind( + keybinds, + new KeyboardEvent("keydown", { key: "]", ctrlKey: next?.ctrl, metaKey: next?.meta, altKey: true }), + ), + ).toBe(true) + }) + test("formatKeybind returns human readable output", () => { const display = formatKeybind("ctrl+alt+arrowup") diff --git a/packages/app/src/context/global-sync/bootstrap.ts b/packages/app/src/context/global-sync/bootstrap.ts index cba3d5adbc..aa8953a20c 100644 --- a/packages/app/src/context/global-sync/bootstrap.ts +++ b/packages/app/src/context/global-sync/bootstrap.ts @@ -15,7 +15,7 @@ import { retry } from "@opencode-ai/util/retry" import { batch } from "solid-js" import { reconcile, type SetStoreFunction, type Store } from "solid-js/store" import type { State, VcsCache } from "./types" -import { cmp, normalizeProviderList } from "./utils" +import { cmp, normalizeAgentList, normalizeProviderList } from "./utils" import { formatServerError } from "@/utils/server-errors" type GlobalStore = { @@ -174,7 +174,7 @@ export async function bootstrapDirectory(input: { seededProject ? Promise.resolve() : retry(() => input.sdk.project.current()).then((x) => input.setStore("project", x.data!.id)), - () => retry(() => input.sdk.app.agents().then((x) => input.setStore("agent", x.data ?? []))), + () => retry(() => input.sdk.app.agents().then((x) => input.setStore("agent", normalizeAgentList(x.data)))), () => retry(() => input.sdk.config.get().then((x) => input.setStore("config", x.data!))), () => retry(() => diff --git a/packages/app/src/context/global-sync/utils.test.ts b/packages/app/src/context/global-sync/utils.test.ts new file mode 100644 index 0000000000..24f1547c27 --- /dev/null +++ b/packages/app/src/context/global-sync/utils.test.ts @@ -0,0 +1,35 @@ +import { describe, expect, test } from "bun:test" +import type { Agent } from "@kilocode/sdk/v2/client" +import { normalizeAgentList } from "./utils" + +const agent = (name = "build") => + ({ + name, + mode: "primary", + permission: {}, + options: {}, + }) as Agent + +describe("normalizeAgentList", () => { + test("keeps array payloads", () => { + expect(normalizeAgentList([agent("build"), agent("docs")])).toEqual([agent("build"), agent("docs")]) + }) + + test("wraps a single agent payload", () => { + expect(normalizeAgentList(agent("docs"))).toEqual([agent("docs")]) + }) + + test("extracts agents from keyed objects", () => { + expect( + normalizeAgentList({ + build: agent("build"), + docs: agent("docs"), + }), + ).toEqual([agent("build"), agent("docs")]) + }) + + test("drops invalid payloads", () => { + expect(normalizeAgentList({ name: "AbortError" })).toEqual([]) + expect(normalizeAgentList([{ name: "build" }, agent("docs")])).toEqual([agent("docs")]) + }) +}) diff --git a/packages/app/src/context/global-sync/utils.ts b/packages/app/src/context/global-sync/utils.ts index 6ba7524164..e6fd6f64ba 100644 --- a/packages/app/src/context/global-sync/utils.ts +++ b/packages/app/src/context/global-sync/utils.ts @@ -1,7 +1,21 @@ -import type { Project, ProviderListResponse } from "@kilocode/sdk/v2/client" +import type { Agent, Project, ProviderListResponse } from "@kilocode/sdk/v2/client" export const cmp = (a: string, b: string) => (a < b ? -1 : a > b ? 1 : 0) +function isAgent(input: unknown): input is Agent { + if (!input || typeof input !== "object") return false + const item = input as { name?: unknown; mode?: unknown } + if (typeof item.name !== "string") return false + return item.mode === "subagent" || item.mode === "primary" || item.mode === "all" +} + +export function normalizeAgentList(input: unknown): Agent[] { + if (Array.isArray(input)) return input.filter(isAgent) + if (isAgent(input)) return [input] + if (!input || typeof input !== "object") return [] + return Object.values(input).filter(isAgent) +} + export function normalizeProviderList(input: ProviderListResponse): ProviderListResponse { return { ...input, diff --git a/packages/app/src/entry.tsx b/packages/app/src/entry.tsx index da22c55523..b5cbed6e75 100644 --- a/packages/app/src/entry.tsx +++ b/packages/app/src/entry.tsx @@ -97,15 +97,10 @@ if (!(root instanceof HTMLElement) && import.meta.env.DEV) { throw new Error(getRootNotFoundError()) } -const localUrl = () => - `http://${import.meta.env.VITE_OPENCODE_SERVER_HOST ?? "localhost"}:${import.meta.env.VITE_OPENCODE_SERVER_PORT ?? "4096"}` - -const isLocalHost = () => ["localhost", "127.0.0.1", "0.0.0.0"].includes(location.hostname) - const getCurrentUrl = () => { - if (location.hostname.includes("opencode.ai")) return localUrl() - if (import.meta.env.DEV) return localUrl() - if (isLocalHost()) return localUrl() + if (location.hostname.includes("opencode.ai")) return "http://localhost:4096" + if (import.meta.env.DEV) + return `http://${import.meta.env.VITE_OPENCODE_SERVER_HOST ?? "localhost"}:${import.meta.env.VITE_OPENCODE_SERVER_PORT ?? "4096"}` return location.origin } diff --git a/packages/app/src/i18n/ar.ts b/packages/app/src/i18n/ar.ts index 064d63d09e..2f3c359df5 100644 --- a/packages/app/src/i18n/ar.ts +++ b/packages/app/src/i18n/ar.ts @@ -137,7 +137,8 @@ export const dict = { "provider.connect.oauth.code.invalid": "رمز التفويض غير صالح", "provider.connect.oauth.auto.visit.prefix": "قم بزيارة ", "provider.connect.oauth.auto.visit.link": "هذا الرابط", - "provider.connect.oauth.auto.visit.suffix": " وأدخل الرمز أدناه لتوصيل حسابك واستخدام نماذج {{provider}} في Kilo.", + "provider.connect.oauth.auto.visit.suffix": + " وأدخل الرمز أدناه لتوصيل حسابك واستخدام نماذج {{provider}} في Kilo.", "provider.connect.oauth.auto.confirmationCode": "رمز التأكيد", "provider.connect.toast.connected.title": "تم توصيل {{provider}}", "provider.connect.toast.connected.description": "نماذج {{provider}} متاحة الآن للاستخدام.", @@ -721,8 +722,6 @@ export const dict = { "settings.permissions.tool.skill.description": "تحميل مهارة بالاسم", "settings.permissions.tool.lsp.title": "LSP", "settings.permissions.tool.lsp.description": "تشغيل استعلامات خادم اللغة", - "settings.permissions.tool.todoread.title": "قراءة المهام", - "settings.permissions.tool.todoread.description": "قراءة قائمة المهام", "settings.permissions.tool.todowrite.title": "كتابة المهام", "settings.permissions.tool.todowrite.description": "تحديث قائمة المهام", "settings.permissions.tool.webfetch.title": "جلب الويب", diff --git a/packages/app/src/i18n/br.ts b/packages/app/src/i18n/br.ts index 67f745f662..986485f804 100644 --- a/packages/app/src/i18n/br.ts +++ b/packages/app/src/i18n/br.ts @@ -732,8 +732,6 @@ export const dict = { "settings.permissions.tool.skill.description": "Carregar uma habilidade por nome", "settings.permissions.tool.lsp.title": "LSP", "settings.permissions.tool.lsp.description": "Executar consultas de servidor de linguagem", - "settings.permissions.tool.todoread.title": "Ler Tarefas", - "settings.permissions.tool.todoread.description": "Ler a lista de tarefas", "settings.permissions.tool.todowrite.title": "Escrever Tarefas", "settings.permissions.tool.todowrite.description": "Atualizar a lista de tarefas", "settings.permissions.tool.webfetch.title": "Buscar Web", diff --git a/packages/app/src/i18n/bs.ts b/packages/app/src/i18n/bs.ts index 7dce2aa49c..f306242230 100644 --- a/packages/app/src/i18n/bs.ts +++ b/packages/app/src/i18n/bs.ts @@ -806,8 +806,6 @@ export const dict = { "settings.permissions.tool.skill.description": "Učitaj vještinu po nazivu", "settings.permissions.tool.lsp.title": "LSP", "settings.permissions.tool.lsp.description": "Pokreni upite jezičnog servera", - "settings.permissions.tool.todoread.title": "Čitanje liste zadataka", - "settings.permissions.tool.todoread.description": "Čitanje liste zadataka", "settings.permissions.tool.todowrite.title": "Ažuriranje liste zadataka", "settings.permissions.tool.todowrite.description": "Ažuriraj listu zadataka", "settings.permissions.tool.webfetch.title": "Web preuzimanje", diff --git a/packages/app/src/i18n/da.ts b/packages/app/src/i18n/da.ts index eb4e5a013e..32047b71f2 100644 --- a/packages/app/src/i18n/da.ts +++ b/packages/app/src/i18n/da.ts @@ -800,8 +800,6 @@ export const dict = { "settings.permissions.tool.skill.description": "Indlæs en færdighed efter navn", "settings.permissions.tool.lsp.title": "LSP", "settings.permissions.tool.lsp.description": "Kør sprogserverforespørgsler", - "settings.permissions.tool.todoread.title": "Læs To-do", - "settings.permissions.tool.todoread.description": "Læs to-do listen", "settings.permissions.tool.todowrite.title": "Skriv To-do", "settings.permissions.tool.todowrite.description": "Opdater to-do listen", "settings.permissions.tool.webfetch.title": "Webhentning", diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts index 940e8f5e28..79422106dc 100644 --- a/packages/app/src/i18n/de.ts +++ b/packages/app/src/i18n/de.ts @@ -743,8 +743,6 @@ export const dict = { "settings.permissions.tool.skill.description": "Eine Fähigkeit nach Namen laden", "settings.permissions.tool.lsp.title": "LSP", "settings.permissions.tool.lsp.description": "Language-Server-Abfragen ausführen", - "settings.permissions.tool.todoread.title": "Todo lesen", - "settings.permissions.tool.todoread.description": "Die Todo-Liste lesen", "settings.permissions.tool.todowrite.title": "Todo schreiben", "settings.permissions.tool.todowrite.description": "Die Todo-Liste aktualisieren", "settings.permissions.tool.webfetch.title": "Web-Abruf", diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index 69ad646738..4e1a9c1f76 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -900,8 +900,6 @@ export const dict = { "settings.permissions.tool.skill.description": "Load a skill by name", "settings.permissions.tool.lsp.title": "LSP", "settings.permissions.tool.lsp.description": "Run language server queries", - "settings.permissions.tool.todoread.title": "Todo Read", - "settings.permissions.tool.todoread.description": "Read the todo list", "settings.permissions.tool.todowrite.title": "Todo Write", "settings.permissions.tool.todowrite.description": "Update the todo list", "settings.permissions.tool.webfetch.title": "Web Fetch", diff --git a/packages/app/src/i18n/es.ts b/packages/app/src/i18n/es.ts index a6410b7a23..be284d5c53 100644 --- a/packages/app/src/i18n/es.ts +++ b/packages/app/src/i18n/es.ts @@ -813,8 +813,6 @@ export const dict = { "settings.permissions.tool.skill.description": "Cargar una habilidad por nombre", "settings.permissions.tool.lsp.title": "LSP", "settings.permissions.tool.lsp.description": "Ejecutar consultas de servidor de lenguaje", - "settings.permissions.tool.todoread.title": "Leer Todo", - "settings.permissions.tool.todoread.description": "Leer la lista de tareas", "settings.permissions.tool.todowrite.title": "Escribir Todo", "settings.permissions.tool.todowrite.description": "Actualizar la lista de tareas", "settings.permissions.tool.webfetch.title": "Web Fetch", diff --git a/packages/app/src/i18n/fr.ts b/packages/app/src/i18n/fr.ts index 5324d76c2f..4e9cb212ac 100644 --- a/packages/app/src/i18n/fr.ts +++ b/packages/app/src/i18n/fr.ts @@ -741,8 +741,6 @@ export const dict = { "settings.permissions.tool.skill.description": "Charger une compétence par son nom", "settings.permissions.tool.lsp.title": "LSP", "settings.permissions.tool.lsp.description": "Exécuter des requêtes de serveur de langage", - "settings.permissions.tool.todoread.title": "Lire Todo", - "settings.permissions.tool.todoread.description": "Lire la liste de tâches", "settings.permissions.tool.todowrite.title": "Écrire Todo", "settings.permissions.tool.todowrite.description": "Mettre à jour la liste de tâches", "settings.permissions.tool.webfetch.title": "Récupération Web", diff --git a/packages/app/src/i18n/ja.ts b/packages/app/src/i18n/ja.ts index 13efedfe10..8c000dd0f3 100644 --- a/packages/app/src/i18n/ja.ts +++ b/packages/app/src/i18n/ja.ts @@ -727,8 +727,6 @@ export const dict = { "settings.permissions.tool.skill.description": "名前によるスキルの読み込み", "settings.permissions.tool.lsp.title": "LSP", "settings.permissions.tool.lsp.description": "言語サーバークエリの実行", - "settings.permissions.tool.todoread.title": "Todo読み込み", - "settings.permissions.tool.todoread.description": "Todoリストの読み込み", "settings.permissions.tool.todowrite.title": "Todo書き込み", "settings.permissions.tool.todowrite.description": "Todoリストの更新", "settings.permissions.tool.webfetch.title": "Web取得", diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts index a2cc1499d2..90fdf9ba98 100644 --- a/packages/app/src/i18n/ko.ts +++ b/packages/app/src/i18n/ko.ts @@ -726,8 +726,6 @@ export const dict = { "settings.permissions.tool.skill.description": "이름으로 기술 로드", "settings.permissions.tool.lsp.title": "LSP", "settings.permissions.tool.lsp.description": "언어 서버 쿼리 실행", - "settings.permissions.tool.todoread.title": "할 일 읽기", - "settings.permissions.tool.todoread.description": "할 일 목록 읽기", "settings.permissions.tool.todowrite.title": "할 일 쓰기", "settings.permissions.tool.todowrite.description": "할 일 목록 업데이트", "settings.permissions.tool.webfetch.title": "웹 가져오기", diff --git a/packages/app/src/i18n/no.ts b/packages/app/src/i18n/no.ts index 26f7e778ee..cd52fb43fc 100644 --- a/packages/app/src/i18n/no.ts +++ b/packages/app/src/i18n/no.ts @@ -807,8 +807,6 @@ export const dict = { "settings.permissions.tool.skill.description": "Last en ferdighet etter navn", "settings.permissions.tool.lsp.title": "LSP", "settings.permissions.tool.lsp.description": "Kjør språkserverforespørsler", - "settings.permissions.tool.todoread.title": "Les gjøremål", - "settings.permissions.tool.todoread.description": "Les gjøremålslisten", "settings.permissions.tool.todowrite.title": "Skriv gjøremål", "settings.permissions.tool.todowrite.description": "Oppdater gjøremålslisten", "settings.permissions.tool.webfetch.title": "Webhenting", diff --git a/packages/app/src/i18n/pl.ts b/packages/app/src/i18n/pl.ts index 4b9f4d7ecc..6677e122e1 100644 --- a/packages/app/src/i18n/pl.ts +++ b/packages/app/src/i18n/pl.ts @@ -729,8 +729,6 @@ export const dict = { "settings.permissions.tool.skill.description": "Ładowanie umiejętności według nazwy", "settings.permissions.tool.lsp.title": "LSP", "settings.permissions.tool.lsp.description": "Uruchamianie zapytań serwera językowego", - "settings.permissions.tool.todoread.title": "Odczyt Todo", - "settings.permissions.tool.todoread.description": "Odczyt listy zadań", "settings.permissions.tool.todowrite.title": "Zapis Todo", "settings.permissions.tool.todowrite.description": "Aktualizacja listy zadań", "settings.permissions.tool.webfetch.title": "Pobieranie z sieci", diff --git a/packages/app/src/i18n/ru.ts b/packages/app/src/i18n/ru.ts index 1790e371c8..12d003a7ac 100644 --- a/packages/app/src/i18n/ru.ts +++ b/packages/app/src/i18n/ru.ts @@ -808,8 +808,6 @@ export const dict = { "settings.permissions.tool.skill.description": "Загрузка навыка по имени", "settings.permissions.tool.lsp.title": "LSP", "settings.permissions.tool.lsp.description": "Запросы к языковому серверу", - "settings.permissions.tool.todoread.title": "Todo Read", - "settings.permissions.tool.todoread.description": "Чтение списка задач", "settings.permissions.tool.todowrite.title": "Todo Write", "settings.permissions.tool.todowrite.description": "Обновление списка задач", "settings.permissions.tool.webfetch.title": "Web Fetch", diff --git a/packages/app/src/i18n/th.ts b/packages/app/src/i18n/th.ts index 7b67c3bc45..abcbb5dc61 100644 --- a/packages/app/src/i18n/th.ts +++ b/packages/app/src/i18n/th.ts @@ -796,8 +796,6 @@ export const dict = { "settings.permissions.tool.skill.description": "โหลดทักษะตามชื่อ", "settings.permissions.tool.lsp.title": "LSP", "settings.permissions.tool.lsp.description": "เรียกใช้การสืบค้นเซิร์ฟเวอร์ภาษา", - "settings.permissions.tool.todoread.title": "อ่านรายการงาน", - "settings.permissions.tool.todoread.description": "อ่านรายการงาน", "settings.permissions.tool.todowrite.title": "เขียนรายการงาน", "settings.permissions.tool.todowrite.description": "อัปเดตรายการงาน", "settings.permissions.tool.webfetch.title": "ดึงข้อมูลจากเว็บ", diff --git a/packages/app/src/i18n/tr.ts b/packages/app/src/i18n/tr.ts index fc2591be1e..cbc183fcfd 100644 --- a/packages/app/src/i18n/tr.ts +++ b/packages/app/src/i18n/tr.ts @@ -816,8 +816,6 @@ export const dict = { "settings.permissions.tool.skill.description": "Ada göre bir beceri yükle", "settings.permissions.tool.lsp.title": "LSP", "settings.permissions.tool.lsp.description": "Dil sunucusu sorguları çalıştır", - "settings.permissions.tool.todoread.title": "Görev Oku", - "settings.permissions.tool.todoread.description": "Görev listesini oku", "settings.permissions.tool.todowrite.title": "Görev Yaz", "settings.permissions.tool.todowrite.description": "Görev listesini güncelle", "settings.permissions.tool.webfetch.title": "Web Getir", diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts index b525571ef6..8485dfb523 100644 --- a/packages/app/src/i18n/zh.ts +++ b/packages/app/src/i18n/zh.ts @@ -795,8 +795,6 @@ export const dict = { "settings.permissions.tool.skill.description": "按名称加载技能", "settings.permissions.tool.lsp.title": "LSP", "settings.permissions.tool.lsp.description": "运行语言服务器查询", - "settings.permissions.tool.todoread.title": "读取待办", - "settings.permissions.tool.todoread.description": "读取待办列表", "settings.permissions.tool.todowrite.title": "更新待办", "settings.permissions.tool.todowrite.description": "更新待办列表", "settings.permissions.tool.webfetch.title": "网页获取", diff --git a/packages/app/src/i18n/zht.ts b/packages/app/src/i18n/zht.ts index 7d2687e68a..c35834fcff 100644 --- a/packages/app/src/i18n/zht.ts +++ b/packages/app/src/i18n/zht.ts @@ -790,8 +790,6 @@ export const dict = { "settings.permissions.tool.skill.description": "按名稱載入技能", "settings.permissions.tool.lsp.title": "LSP", "settings.permissions.tool.lsp.description": "執行語言伺服器查詢", - "settings.permissions.tool.todoread.title": "讀取待辦", - "settings.permissions.tool.todoread.description": "讀取待辦清單", "settings.permissions.tool.todowrite.title": "更新待辦", "settings.permissions.tool.todowrite.description": "更新待辦清單", "settings.permissions.tool.webfetch.title": "Web Fetch", diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 465e9a083d..a3a5c73fa3 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -965,6 +965,8 @@ export default function Layout(props: ParentProps) { : projects[(index + offset + projects.length) % projects.length] if (!target) return + // warm up child store to prevent flicker + globalSync.child(target.worktree) openProject(target.worktree) } diff --git a/packages/app/src/pages/session/message-timeline.tsx b/packages/app/src/pages/session/message-timeline.tsx index e6c3d0c1d4..b2120e8470 100644 --- a/packages/app/src/pages/session/message-timeline.tsx +++ b/packages/app/src/pages/session/message-timeline.tsx @@ -896,7 +896,8 @@ export function MessageTimeline(props: {
{ id: "message.previous", title: language.t("command.message.previous"), description: language.t("command.message.previous.description"), - keybind: "mod+arrowup", + keybind: "mod+alt+[", disabled: !params.id, onSelect: () => navigateMessageByOffset(-1), }), @@ -341,7 +341,7 @@ export const useSessionCommands = (actions: SessionCommandContext) => { id: "message.next", title: language.t("command.message.next"), description: language.t("command.message.next.description"), - keybind: "mod+arrowdown", + keybind: "mod+alt+]", disabled: !params.id, onSelect: () => navigateMessageByOffset(1), }), diff --git a/packages/desktop-electron/src/main/ipc.ts b/packages/desktop-electron/src/main/ipc.ts index 543f857a5e..d2cfc25241 100644 --- a/packages/desktop-electron/src/main/ipc.ts +++ b/packages/desktop-electron/src/main/ipc.ts @@ -88,7 +88,7 @@ export function registerIpcHandlers(deps: Deps) { "open-directory-picker", async (_event: IpcMainInvokeEvent, opts?: { multiple?: boolean; title?: string; defaultPath?: string }) => { const result = await dialog.showOpenDialog({ - properties: ["openDirectory", ...(opts?.multiple ? ["multiSelections" as const] : [])], + properties: ["openDirectory", ...(opts?.multiple ? ["multiSelections" as const] : []), "createDirectory"], title: opts?.title ?? "Choose a folder", defaultPath: opts?.defaultPath, }) diff --git a/packages/desktop-electron/src/main/store.ts b/packages/desktop-electron/src/main/store.ts index fa1c5682e2..cf2d25b110 100644 --- a/packages/desktop-electron/src/main/store.ts +++ b/packages/desktop-electron/src/main/store.ts @@ -7,7 +7,7 @@ const cache = new Map() export function getStore(name = SETTINGS_STORE) { const cached = cache.get(name) if (cached) return cached - const next = new Store({ name }) + const next = new Store({ name, fileExtension: "" }) cache.set(name, next) return next } diff --git a/packages/desktop/src/i18n/de.ts b/packages/desktop/src/i18n/de.ts index 224e0b62d2..6ef1167a36 100644 --- a/packages/desktop/src/i18n/de.ts +++ b/packages/desktop/src/i18n/de.ts @@ -45,7 +45,8 @@ export const dict = { "desktop.menu.help.shareFeedback": "Feedback teilen", "desktop.menu.help.reportBug": "Einen Fehler melden", "desktop.cli.error.unsupportedPlatform": "Die CLI-Installation wird nur unter macOS und Linux unterstützt.", - "desktop.cli.error.sidecarMissing": "Das Kilo CLI-Binary fehlt. Versuchen Sie, die Desktop-App neu zu installieren.", + "desktop.cli.error.sidecarMissing": + "Das Kilo CLI-Binary fehlt. Versuchen Sie, die Desktop-App neu zu installieren.", "desktop.cli.error.scriptWriteFailed": "Das CLI-Installationsskript konnte nicht vorbereitet werden.", "desktop.cli.error.scriptPermissionFailed": "Das CLI-Installationsskript konnte nicht ausführbar gemacht werden.", "desktop.cli.error.scriptRunFailed": "Das CLI-Installationsskript konnte nicht ausgeführt werden.", diff --git a/packages/extensions/zed/extension.toml b/packages/extensions/zed/extension.toml index d3969b8591..f6679d2eca 100644 --- a/packages/extensions/zed/extension.toml +++ b/packages/extensions/zed/extension.toml @@ -1,7 +1,7 @@ id = "kilo" name = "Kilo" description = "The open source coding agent." -version = "1.3.2" +version = "1.3.3" schema_version = 1 authors = ["Anomaly"] repository = "https://github.com/Kilo-Org/kilocode" @@ -11,26 +11,26 @@ name = "Kilo" icon = "./icons/opencode.svg" [agent_servers.opencode.targets.darwin-aarch64] -archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.2/opencode-darwin-arm64.zip" +archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.3/opencode-darwin-arm64.zip" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.darwin-x86_64] -archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.2/opencode-darwin-x64.zip" +archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.3/opencode-darwin-x64.zip" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.linux-aarch64] -archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.2/opencode-linux-arm64.tar.gz" +archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.3/opencode-linux-arm64.tar.gz" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.linux-x86_64] -archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.2/opencode-linux-x64.tar.gz" +archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.3/opencode-linux-x64.tar.gz" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.windows-x86_64] -archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.2/opencode-windows-x64.zip" +archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.3/opencode-windows-x64.zip" cmd = "./opencode.exe" args = ["acp"] diff --git a/packages/kilo-docs/source-links.md b/packages/kilo-docs/source-links.md index a71c634635..430da2cc63 100644 --- a/packages/kilo-docs/source-links.md +++ b/packages/kilo-docs/source-links.md @@ -1,13 +1,125 @@ # Source Code Links - + +- + +- + +- + +- + +- + +- + +- + +- + - +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + - +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + - - @@ -23,18 +135,132 @@ - +- + - - +- + +- + +- + +- + +- + +- + +- + +- + - +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + - +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + - +- + +- + - +- + +- + +- + +- + +- + +- + +- + - - @@ -68,13 +294,38 @@ - +- + - +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + - - + - - @@ -98,10 +349,54 @@ - +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + - - +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + - - @@ -114,22 +409,74 @@ - +- + - - +- + +- + +- + - +- + - +- + +- + +- + +- + +- + +- + +- + +- + - - - +- + +- + +- + - +- + +- + +- + +- + +- + +- + +- + +- + +- + +- + - - @@ -162,11 +509,29 @@ - +- + +- + +- + - +- + - +- + +- + - +- + +- + +- + - diff --git a/packages/opencode/migration/20260323234822_events/migration.sql b/packages/opencode/migration/20260323234822_events/migration.sql new file mode 100644 index 0000000000..b0fe7e4e6b --- /dev/null +++ b/packages/opencode/migration/20260323234822_events/migration.sql @@ -0,0 +1,13 @@ +CREATE TABLE `event_sequence` ( + `aggregate_id` text PRIMARY KEY, + `seq` integer NOT NULL +); +--> statement-breakpoint +CREATE TABLE `event` ( + `id` text PRIMARY KEY, + `aggregate_id` text NOT NULL, + `seq` integer NOT NULL, + `type` text NOT NULL, + `data` text NOT NULL, + CONSTRAINT `fk_event_aggregate_id_event_sequence_aggregate_id_fk` FOREIGN KEY (`aggregate_id`) REFERENCES `event_sequence`(`aggregate_id`) ON DELETE CASCADE +); diff --git a/packages/opencode/migration/20260323234822_events/snapshot.json b/packages/opencode/migration/20260323234822_events/snapshot.json new file mode 100644 index 0000000000..07519aab71 --- /dev/null +++ b/packages/opencode/migration/20260323234822_events/snapshot.json @@ -0,0 +1,1271 @@ +{ + "version": "7", + "dialect": "sqlite", + "id": "f13dfa58-7fb4-47a2-8f6b-dc70258e14ed", + "prevIds": ["37e1554d-af4c-43f2-aa7c-307fb49a315e"], + "ddl": [ + { + "name": "account_state", + "entityType": "tables" + }, + { + "name": "account", + "entityType": "tables" + }, + { + "name": "control_account", + "entityType": "tables" + }, + { + "name": "workspace", + "entityType": "tables" + }, + { + "name": "project", + "entityType": "tables" + }, + { + "name": "message", + "entityType": "tables" + }, + { + "name": "part", + "entityType": "tables" + }, + { + "name": "permission", + "entityType": "tables" + }, + { + "name": "session", + "entityType": "tables" + }, + { + "name": "todo", + "entityType": "tables" + }, + { + "name": "session_share", + "entityType": "tables" + }, + { + "name": "event_sequence", + "entityType": "tables" + }, + { + "name": "event", + "entityType": "tables" + }, + { + "type": "integer", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "account_state" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "active_account_id", + "entityType": "columns", + "table": "account_state" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "active_org_id", + "entityType": "columns", + "table": "account_state" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "account" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "email", + "entityType": "columns", + "table": "account" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "url", + "entityType": "columns", + "table": "account" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "access_token", + "entityType": "columns", + "table": "account" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "refresh_token", + "entityType": "columns", + "table": "account" + }, + { + "type": "integer", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "token_expiry", + "entityType": "columns", + "table": "account" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "account" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "account" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "email", + "entityType": "columns", + "table": "control_account" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "url", + "entityType": "columns", + "table": "control_account" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "access_token", + "entityType": "columns", + "table": "control_account" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "refresh_token", + "entityType": "columns", + "table": "control_account" + }, + { + "type": "integer", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "token_expiry", + "entityType": "columns", + "table": "control_account" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "active", + "entityType": "columns", + "table": "control_account" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "control_account" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "control_account" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "workspace" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "type", + "entityType": "columns", + "table": "workspace" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "branch", + "entityType": "columns", + "table": "workspace" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "name", + "entityType": "columns", + "table": "workspace" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "directory", + "entityType": "columns", + "table": "workspace" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "extra", + "entityType": "columns", + "table": "workspace" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "project_id", + "entityType": "columns", + "table": "workspace" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "project" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "worktree", + "entityType": "columns", + "table": "project" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "vcs", + "entityType": "columns", + "table": "project" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "name", + "entityType": "columns", + "table": "project" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "icon_url", + "entityType": "columns", + "table": "project" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "icon_color", + "entityType": "columns", + "table": "project" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "project" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "project" + }, + { + "type": "integer", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "time_initialized", + "entityType": "columns", + "table": "project" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "sandboxes", + "entityType": "columns", + "table": "project" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "commands", + "entityType": "columns", + "table": "project" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "message" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "session_id", + "entityType": "columns", + "table": "message" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "message" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "message" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "data", + "entityType": "columns", + "table": "message" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "part" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "message_id", + "entityType": "columns", + "table": "part" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "session_id", + "entityType": "columns", + "table": "part" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "part" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "part" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "data", + "entityType": "columns", + "table": "part" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "project_id", + "entityType": "columns", + "table": "permission" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "permission" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "permission" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "data", + "entityType": "columns", + "table": "permission" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "session" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "project_id", + "entityType": "columns", + "table": "session" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "workspace_id", + "entityType": "columns", + "table": "session" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "parent_id", + "entityType": "columns", + "table": "session" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "slug", + "entityType": "columns", + "table": "session" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "directory", + "entityType": "columns", + "table": "session" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "title", + "entityType": "columns", + "table": "session" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "version", + "entityType": "columns", + "table": "session" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "share_url", + "entityType": "columns", + "table": "session" + }, + { + "type": "integer", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "summary_additions", + "entityType": "columns", + "table": "session" + }, + { + "type": "integer", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "summary_deletions", + "entityType": "columns", + "table": "session" + }, + { + "type": "integer", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "summary_files", + "entityType": "columns", + "table": "session" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "summary_diffs", + "entityType": "columns", + "table": "session" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "revert", + "entityType": "columns", + "table": "session" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "permission", + "entityType": "columns", + "table": "session" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "session" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "session" + }, + { + "type": "integer", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "time_compacting", + "entityType": "columns", + "table": "session" + }, + { + "type": "integer", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "time_archived", + "entityType": "columns", + "table": "session" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "session_id", + "entityType": "columns", + "table": "todo" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "content", + "entityType": "columns", + "table": "todo" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "status", + "entityType": "columns", + "table": "todo" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "priority", + "entityType": "columns", + "table": "todo" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "position", + "entityType": "columns", + "table": "todo" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "todo" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "todo" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "session_id", + "entityType": "columns", + "table": "session_share" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "session_share" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "secret", + "entityType": "columns", + "table": "session_share" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "url", + "entityType": "columns", + "table": "session_share" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "session_share" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "time_updated", + "entityType": "columns", + "table": "session_share" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "aggregate_id", + "entityType": "columns", + "table": "event_sequence" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "seq", + "entityType": "columns", + "table": "event_sequence" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "event" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "aggregate_id", + "entityType": "columns", + "table": "event" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "seq", + "entityType": "columns", + "table": "event" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "type", + "entityType": "columns", + "table": "event" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "data", + "entityType": "columns", + "table": "event" + }, + { + "columns": ["active_account_id"], + "tableTo": "account", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "nameExplicit": false, + "name": "fk_account_state_active_account_id_account_id_fk", + "entityType": "fks", + "table": "account_state" + }, + { + "columns": ["project_id"], + "tableTo": "project", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "nameExplicit": false, + "name": "fk_workspace_project_id_project_id_fk", + "entityType": "fks", + "table": "workspace" + }, + { + "columns": ["session_id"], + "tableTo": "session", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "nameExplicit": false, + "name": "fk_message_session_id_session_id_fk", + "entityType": "fks", + "table": "message" + }, + { + "columns": ["message_id"], + "tableTo": "message", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "nameExplicit": false, + "name": "fk_part_message_id_message_id_fk", + "entityType": "fks", + "table": "part" + }, + { + "columns": ["project_id"], + "tableTo": "project", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "nameExplicit": false, + "name": "fk_permission_project_id_project_id_fk", + "entityType": "fks", + "table": "permission" + }, + { + "columns": ["project_id"], + "tableTo": "project", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "nameExplicit": false, + "name": "fk_session_project_id_project_id_fk", + "entityType": "fks", + "table": "session" + }, + { + "columns": ["session_id"], + "tableTo": "session", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "nameExplicit": false, + "name": "fk_todo_session_id_session_id_fk", + "entityType": "fks", + "table": "todo" + }, + { + "columns": ["session_id"], + "tableTo": "session", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "nameExplicit": false, + "name": "fk_session_share_session_id_session_id_fk", + "entityType": "fks", + "table": "session_share" + }, + { + "columns": ["aggregate_id"], + "tableTo": "event_sequence", + "columnsTo": ["aggregate_id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "nameExplicit": false, + "name": "fk_event_aggregate_id_event_sequence_aggregate_id_fk", + "entityType": "fks", + "table": "event" + }, + { + "columns": ["email", "url"], + "nameExplicit": false, + "name": "control_account_pk", + "entityType": "pks", + "table": "control_account" + }, + { + "columns": ["session_id", "position"], + "nameExplicit": false, + "name": "todo_pk", + "entityType": "pks", + "table": "todo" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "account_state_pk", + "table": "account_state", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "account_pk", + "table": "account", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "workspace_pk", + "table": "workspace", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "project_pk", + "table": "project", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "message_pk", + "table": "message", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "part_pk", + "table": "part", + "entityType": "pks" + }, + { + "columns": ["project_id"], + "nameExplicit": false, + "name": "permission_pk", + "table": "permission", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "session_pk", + "table": "session", + "entityType": "pks" + }, + { + "columns": ["session_id"], + "nameExplicit": false, + "name": "session_share_pk", + "table": "session_share", + "entityType": "pks" + }, + { + "columns": ["aggregate_id"], + "nameExplicit": false, + "name": "event_sequence_pk", + "table": "event_sequence", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "event_pk", + "table": "event", + "entityType": "pks" + }, + { + "columns": [ + { + "value": "session_id", + "isExpression": false + }, + { + "value": "time_created", + "isExpression": false + }, + { + "value": "id", + "isExpression": false + } + ], + "isUnique": false, + "where": null, + "origin": "manual", + "name": "message_session_time_created_id_idx", + "entityType": "indexes", + "table": "message" + }, + { + "columns": [ + { + "value": "message_id", + "isExpression": false + }, + { + "value": "id", + "isExpression": false + } + ], + "isUnique": false, + "where": null, + "origin": "manual", + "name": "part_message_id_id_idx", + "entityType": "indexes", + "table": "part" + }, + { + "columns": [ + { + "value": "session_id", + "isExpression": false + } + ], + "isUnique": false, + "where": null, + "origin": "manual", + "name": "part_session_idx", + "entityType": "indexes", + "table": "part" + }, + { + "columns": [ + { + "value": "project_id", + "isExpression": false + } + ], + "isUnique": false, + "where": null, + "origin": "manual", + "name": "session_project_idx", + "entityType": "indexes", + "table": "session" + }, + { + "columns": [ + { + "value": "workspace_id", + "isExpression": false + } + ], + "isUnique": false, + "where": null, + "origin": "manual", + "name": "session_workspace_idx", + "entityType": "indexes", + "table": "session" + }, + { + "columns": [ + { + "value": "parent_id", + "isExpression": false + } + ], + "isUnique": false, + "where": null, + "origin": "manual", + "name": "session_parent_idx", + "entityType": "indexes", + "table": "session" + }, + { + "columns": [ + { + "value": "session_id", + "isExpression": false + } + ], + "isUnique": false, + "where": null, + "origin": "manual", + "name": "todo_session_idx", + "entityType": "indexes", + "table": "todo" + } + ], + "renames": [] +} diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 124674913c..04a9dc2f0a 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -91,15 +91,20 @@ "@aws-sdk/credential-providers": "3.1025.0", "@clack/prompts": "1.0.0-alpha.1", "@effect/platform-node": "catalog:", + "@gitlab/gitlab-ai-provider": "3.6.0", + "@gitlab/opencode-gitlab-auth": "1.3.3", "@hono/standard-validator": "0.1.5", "@hono/zod-validator": "catalog:", + "@kilocode/kilo-gateway": "workspace:*", + "@kilocode/kilo-telemetry": "workspace:*", + "@kilocode/plugin": "workspace:*", + "@kilocode/sdk": "workspace:*", "@modelcontextprotocol/sdk": "1.29.0", + "@morphllm/morphsdk": "0.2.148", "@octokit/graphql": "9.0.2", "@octokit/rest": "catalog:", "@openauthjs/openauth": "catalog:", - "@kilocode/plugin": "workspace:*", "@opencode-ai/script": "workspace:*", - "@kilocode/sdk": "workspace:*", "@opencode-ai/util": "workspace:*", "@openrouter/ai-sdk-provider": "1.5.4", "@opentui/core": "0.1.90", @@ -134,12 +139,15 @@ "minimatch": "10.2.5", "open": "10.1.2", "opencode-gitlab-auth": "2.0.0", + "opencode-poe-auth": "0.0.1", "opentui-spinner": "0.0.6", "partial-json": "0.1.7", - "opencode-poe-auth": "0.0.1", "remeda": "catalog:", + "rotating-file-stream": "3.2.9", "semver": "^7.6.3", + "simple-git": "3.35.2", "solid-js": "catalog:", + "stream-chat": "9.38.0", "strip-ansi": "7.1.2", "tree-sitter-bash": "0.25.0", "turndown": "7.2.0", @@ -150,15 +158,7 @@ "xdg-basedir": "5.1.0", "yargs": "18.0.0", "zod": "catalog:", - "zod-to-json-schema": "3.24.5", - "@gitlab/gitlab-ai-provider": "3.6.0", - "@gitlab/opencode-gitlab-auth": "1.3.3", - "@kilocode/kilo-gateway": "workspace:*", - "@kilocode/kilo-telemetry": "workspace:*", - "@morphllm/morphsdk": "0.2.148", - "rotating-file-stream": "3.2.9", - "simple-git": "3.35.2", - "stream-chat": "9.38.0" + "zod-to-json-schema": "3.24.5" }, "overrides": { "drizzle-orm": "catalog:" diff --git a/packages/opencode/script/build.ts b/packages/opencode/script/build.ts index 4e45f5cdba..8cbf31ca6b 100755 --- a/packages/opencode/script/build.ts +++ b/packages/opencode/script/build.ts @@ -21,10 +21,14 @@ const modelsData = process.env.MODELS_DEV_API_JSON ? await Bun.file(process.env.MODELS_DEV_API_JSON).text() : await fetch(`${modelsUrl}/api.json`).then((x) => x.text()) await Bun.write( - path.join(dir, "src/provider/models-snapshot.ts"), - `// Auto-generated by build.ts - do not edit\nexport const snapshot = ${modelsData} as const\n`, + path.join(dir, "src/provider/models-snapshot.js"), + `// @ts-nocheck\n// Auto-generated by build.ts - do not edit\nexport const snapshot = ${modelsData}\n`, ) -console.log("Generated models-snapshot.ts") +await Bun.write( + path.join(dir, "src/provider/models-snapshot.d.ts"), + `// Auto-generated by build.ts - do not edit\nexport declare const snapshot: Record\n`, +) +console.log("Generated models-snapshot.js") // Load migrations from migration directories const migrationDirs = ( @@ -59,6 +63,26 @@ console.log(`Loaded ${migrations.length} migrations`) const singleFlag = process.argv.includes("--single") const baselineFlag = process.argv.includes("--baseline") const skipInstall = process.argv.includes("--skip-install") +const skipEmbedWebUi = process.argv.includes("--skip-embed-web-ui") + + +const createEmbeddedWebUIBundle = async()=>{ + console.log(`Building Web UI to embed in the binary`); + const appDir = path.join(import.meta.dirname, "../../app") + await $`bun run --cwd ${appDir} build`; + const allFiles = await Array.fromAsync(new Bun.Glob("**/*").scan({ cwd: path.join(appDir, "dist")})); + const fileMap = ` + // Import all files as file_$i with type: "file" + ${allFiles.map((filePath, i) => `import file_${i} from "${path.join(appDir, "dist", filePath).replaceAll("\\", "/")}" with { type: "file" };`).join("\n")} + // Export with original mappings + export default { + ${allFiles.map((filePath, i)=>`"${filePath.replaceAll("\\", "/")}": file_${i},`).join("\n")} + } + `.trim() + return fileMap; +} + +const embeddedFileMap = skipEmbedWebUi ? null : await createEmbeddedWebUIBundle(); const allTargets: { os: string @@ -196,7 +220,10 @@ for (const item of targets) { execArgv: [`--user-agent=kilo/${Script.version}`, "--use-system-ca", "--"], // kilocode_change windows: {}, }, - entrypoints: ["./src/index.ts", parserWorker, workerPath], + files: { + ...(embeddedFileMap ? { "opencode-web-ui.gen.ts": embeddedFileMap } : {}), + }, + entrypoints: ["./src/index.ts", parserWorker, workerPath, ...(embeddedFileMap ? ["opencode-web-ui.gen.ts"] : [])], define: { KILO_VERSION: `'${Script.version}'`, KILO_MIGRATIONS: JSON.stringify(migrations), diff --git a/packages/opencode/specs/effect-migration.md b/packages/opencode/specs/effect-migration.md index cf217871da..43b3194858 100644 --- a/packages/opencode/specs/effect-migration.md +++ b/packages/opencode/specs/effect-migration.md @@ -6,7 +6,7 @@ Practical reference for new and migrated Effect code in `packages/opencode`. Use `InstanceState` (from `src/effect/instance-state.ts`) for services that need per-directory state, per-instance cleanup, or project-bound background work. InstanceState uses a `ScopedCache` keyed by directory, so each open project gets its own copy of the state that is automatically cleaned up on disposal. -Use `makeRunPromise` (from `src/effect/run-service.ts`) to create a per-service `ManagedRuntime` that lazily initializes and shares layers via a global `memoMap`. +Use `makeRuntime` (from `src/effect/run-service.ts`) to create a per-service `ManagedRuntime` that lazily initializes and shares layers via a global `memoMap`. Returns `{ runPromise, runFork, runCallback }`. - Global services (no per-directory state): Account, Auth, Installation, Truncate - Instance-scoped (per-directory state via InstanceState): File, FileTime, FileWatcher, Format, Permission, Question, Skill, Snapshot, Vcs, ProviderAuth @@ -46,7 +46,7 @@ export namespace Foo { export const defaultLayer = layer.pipe(Layer.provide(FooDep.layer)) // Per-service runtime (inside the namespace) - const runPromise = makeRunPromise(Service, defaultLayer) + const { runPromise } = makeRuntime(Service, defaultLayer) // Async facade functions export async function get(id: FooID) { @@ -79,22 +79,24 @@ See `Auth.ZodInfo` for the canonical example. The `InstanceState.make` init callback receives a `Scope`, so you can use `Effect.acquireRelease`, `Effect.addFinalizer`, and `Effect.forkScoped` inside it. Resources acquired this way are automatically cleaned up when the instance is disposed or invalidated by `ScopedCache`. This makes it the right place for: -- **Subscriptions**: Use `Effect.acquireRelease` to subscribe and auto-unsubscribe: +- **Subscriptions**: Yield `Bus.Service` at the layer level, then use `Stream` + `forkScoped` inside the init closure. The fiber is automatically interrupted when the instance scope closes: ```ts +const bus = yield * Bus.Service + const cache = yield * InstanceState.make( Effect.fn("Foo.state")(function* (ctx) { // ... load state ... - yield* Effect.acquireRelease( - Effect.sync(() => - Bus.subscribeAll((event) => { + yield* bus.subscribeAll().pipe( + Stream.runForEach((event) => + Effect.sync(() => { /* handle */ }), ), - (unsub) => Effect.sync(unsub), + Effect.forkScoped, ) return { @@ -104,6 +106,16 @@ const cache = ) ``` +- **Resource cleanup**: Use `Effect.acquireRelease` or `Effect.addFinalizer` for resources that need teardown (native watchers, process handles, etc.): + +```ts +yield * + Effect.acquireRelease( + Effect.sync(() => nativeAddon.watch(dir)), + (watcher) => Effect.sync(() => watcher.close()), + ) +``` + - **Background fibers**: Use `Effect.forkScoped` — the fiber is interrupted on disposal. - **Side effects at init**: Config notification, event wiring, etc. all belong in the init closure. Callers just do `InstanceState.get(cache)` to trigger everything, and `ScopedCache` deduplicates automatically. @@ -164,8 +176,8 @@ Still open and likely worth migrating: - [x] `Plugin` - [x] `ToolRegistry` - [ ] `Pty` -- [ ] `Worktree` -- [ ] `Bus` +- [x] `Worktree` +- [x] `Bus` - [x] `Command` - [ ] `Config` - [ ] `Session` @@ -175,4 +187,4 @@ Still open and likely worth migrating: - [ ] `Provider` - [x] `Project` - [ ] `LSP` -- [ ] `MCP` +- [x] `MCP` diff --git a/packages/opencode/src/account/index.ts b/packages/opencode/src/account/index.ts index 0a8d3687a3..82b166ef2a 100644 --- a/packages/opencode/src/account/index.ts +++ b/packages/opencode/src/account/index.ts @@ -1,7 +1,7 @@ import { Clock, Duration, Effect, Layer, Option, Schema, SchemaGetter, ServiceMap } from "effect" import { FetchHttpClient, HttpClient, HttpClientRequest, HttpClientResponse } from "effect/unstable/http" -import { makeRunPromise } from "@/effect/run-service" +import { makeRuntime } from "@/effect/run-service" import { withTransientReadRetry } from "@/util/effect-http-client" import { AccountRepo, type AccountRow } from "./repo" import { @@ -379,7 +379,7 @@ export namespace Account { export const defaultLayer = layer.pipe(Layer.provide(AccountRepo.layer), Layer.provide(FetchHttpClient.layer)) - export const runPromise = makeRunPromise(Service, defaultLayer) + export const { runPromise } = makeRuntime(Service, defaultLayer) export async function active(): Promise { return Option.getOrUndefined(await runPromise((service) => service.active())) diff --git a/packages/opencode/src/account/repo.ts b/packages/opencode/src/account/repo.ts index 96f980cdad..d02cf1b637 100644 --- a/packages/opencode/src/account/repo.ts +++ b/packages/opencode/src/account/repo.ts @@ -8,6 +8,7 @@ import { AccessToken, AccountID, AccountRepoError, Info, OrgID, RefreshToken } f export type AccountRow = (typeof AccountTable)["$inferSelect"] type DbClient = Parameters[0] extends (db: infer T) => unknown ? T : never +type DbTransactionCallback = Parameters>[0] const ACCOUNT_STATE_ID = 1 @@ -42,13 +43,13 @@ export class AccountRepo extends ServiceMap.Service(f: (db: DbClient) => A) => + const query = (f: DbTransactionCallback) => Effect.try({ try: () => Database.use(f), catch: (cause) => new AccountRepoError({ message: "Database operation failed", cause }), }) - const tx = (f: (db: DbClient) => A) => + const tx = (f: DbTransactionCallback) => Effect.try({ try: () => Database.transaction(f), catch: (cause) => new AccountRepoError({ message: "Database operation failed", cause }), diff --git a/packages/opencode/src/agent/agent.ts b/packages/opencode/src/agent/agent.ts index 7950f091cb..300f0ab0d5 100644 --- a/packages/opencode/src/agent/agent.ts +++ b/packages/opencode/src/agent/agent.ts @@ -21,7 +21,7 @@ import { Plugin } from "@/plugin" import { Skill } from "../skill" import { Effect, ServiceMap, Layer } from "effect" import { InstanceState } from "@/effect/instance-state" -import { makeRunPromise } from "@/effect/run-service" +import { makeRuntime } from "@/effect/run-service" import * as KiloAgent from "@/kilocode/agent" // kilocode_change export namespace Agent { @@ -157,7 +157,6 @@ export namespace Agent { permission: Permission.merge( defaults, Permission.fromConfig({ - todoread: "deny", todowrite: "deny", }), user, @@ -409,7 +408,7 @@ export namespace Agent { export const defaultLayer = layer.pipe(Layer.provide(Auth.layer)) - const runPromise = makeRunPromise(Service, defaultLayer) + const { runPromise } = makeRuntime(Service, defaultLayer) export async function get(agent: string) { return runPromise((svc) => svc.get(agent)) diff --git a/packages/opencode/src/auth/index.ts b/packages/opencode/src/auth/index.ts index d446d5f52f..7ca6e1bf02 100644 --- a/packages/opencode/src/auth/index.ts +++ b/packages/opencode/src/auth/index.ts @@ -1,6 +1,6 @@ import path from "path" import { Effect, Layer, Record, Result, Schema, ServiceMap } from "effect" -import { makeRunPromise } from "@/effect/run-service" +import { makeRuntime } from "@/effect/run-service" import { zod } from "@/util/effect-zod" import { Global } from "../global" import { Filesystem } from "../util/filesystem" @@ -96,7 +96,7 @@ export namespace Auth { }), ) - const runPromise = makeRunPromise(Service, layer) + const { runPromise } = makeRuntime(Service, layer) export async function get(providerID: string) { return runPromise((service) => service.get(providerID)) diff --git a/packages/opencode/src/bus/bus-event.ts b/packages/opencode/src/bus/bus-event.ts index 7fe13833c8..d97922290e 100644 --- a/packages/opencode/src/bus/bus-event.ts +++ b/packages/opencode/src/bus/bus-event.ts @@ -1,10 +1,7 @@ import z from "zod" import type { ZodType } from "zod" -import { Log } from "../util/log" export namespace BusEvent { - const log = Log.create({ service: "event" }) - export type Definition = ReturnType const registry = new Map() diff --git a/packages/opencode/src/bus/index.ts b/packages/opencode/src/bus/index.ts index 625f296622..db6327c82e 100644 --- a/packages/opencode/src/bus/index.ts +++ b/packages/opencode/src/bus/index.ts @@ -1,12 +1,14 @@ import z from "zod" +import { Effect, Exit, Layer, PubSub, Scope, ServiceMap, Stream } from "effect" import { Log } from "../util/log" import { Instance } from "../project/instance" import { BusEvent } from "./bus-event" import { GlobalBus } from "./global" +import { InstanceState } from "@/effect/instance-state" +import { makeRuntime } from "@/effect/run-service" export namespace Bus { const log = Log.create({ service: "bus" }) - type Subscription = (event: any) => void export const InstanceDisposed = BusEvent.define( "server.instance.disposed", @@ -15,91 +17,168 @@ export namespace Bus { }), ) - const state = Instance.state( - () => { - const subscriptions = new Map() + type Payload = { + type: D["type"] + properties: z.infer + } - return { - subscriptions, + type State = { + wildcard: PubSub.PubSub + typed: Map> + } + + export interface Interface { + readonly publish: ( + def: D, + properties: z.output, + ) => Effect.Effect + readonly subscribe: (def: D) => Stream.Stream> + readonly subscribeAll: () => Stream.Stream + readonly subscribeCallback: ( + def: D, + callback: (event: Payload) => unknown, + ) => Effect.Effect<() => void> + readonly subscribeAllCallback: (callback: (event: any) => unknown) => Effect.Effect<() => void> + } + + export class Service extends ServiceMap.Service()("@opencode/Bus") {} + + export const layer = Layer.effect( + Service, + Effect.gen(function* () { + const cache = yield* InstanceState.make( + Effect.fn("Bus.state")(function* (ctx) { + const wildcard = yield* PubSub.unbounded() + const typed = new Map>() + + yield* Effect.addFinalizer(() => + Effect.gen(function* () { + // Publish InstanceDisposed before shutting down so subscribers see it + yield* PubSub.publish(wildcard, { + type: InstanceDisposed.type, + properties: { directory: ctx.directory }, + }) + yield* PubSub.shutdown(wildcard) + for (const ps of typed.values()) { + yield* PubSub.shutdown(ps) + } + }), + ) + + return { wildcard, typed } + }), + ) + + function getOrCreate(state: State, def: D) { + return Effect.gen(function* () { + let ps = state.typed.get(def.type) + if (!ps) { + ps = yield* PubSub.unbounded() + state.typed.set(def.type, ps) + } + return ps as unknown as PubSub.PubSub> + }) } - }, - async (entry) => { - const wildcard = entry.subscriptions.get("*") - if (!wildcard) return - const event = { - type: InstanceDisposed.type, - properties: { - directory: Instance.directory, - }, + + function publish(def: D, properties: z.output) { + return Effect.gen(function* () { + const state = yield* InstanceState.get(cache) + const payload: Payload = { type: def.type, properties } + log.info("publishing", { type: def.type }) + + const ps = state.typed.get(def.type) + if (ps) yield* PubSub.publish(ps, payload) + yield* PubSub.publish(state.wildcard, payload) + + GlobalBus.emit("event", { + directory: Instance.directory, + payload, + }) + }) } - for (const sub of [...wildcard]) { - sub(event) + + function subscribe(def: D): Stream.Stream> { + log.info("subscribing", { type: def.type }) + return Stream.unwrap( + Effect.gen(function* () { + const state = yield* InstanceState.get(cache) + const ps = yield* getOrCreate(state, def) + return Stream.fromPubSub(ps) + }), + ).pipe(Stream.ensuring(Effect.sync(() => log.info("unsubscribing", { type: def.type })))) } - }, + + function subscribeAll(): Stream.Stream { + log.info("subscribing", { type: "*" }) + return Stream.unwrap( + Effect.gen(function* () { + const state = yield* InstanceState.get(cache) + return Stream.fromPubSub(state.wildcard) + }), + ).pipe(Stream.ensuring(Effect.sync(() => log.info("unsubscribing", { type: "*" })))) + } + + function on(pubsub: PubSub.PubSub, type: string, callback: (event: T) => unknown) { + return Effect.gen(function* () { + log.info("subscribing", { type }) + const scope = yield* Scope.make() + const subscription = yield* Scope.provide(scope)(PubSub.subscribe(pubsub)) + + yield* Scope.provide(scope)( + Stream.fromSubscription(subscription).pipe( + Stream.runForEach((msg) => + Effect.tryPromise({ + try: () => Promise.resolve().then(() => callback(msg)), + catch: (cause) => { + log.error("subscriber failed", { type, cause }) + }, + }).pipe(Effect.ignore), + ), + Effect.forkScoped, + ), + ) + + return () => { + log.info("unsubscribing", { type }) + Effect.runFork(Scope.close(scope, Exit.void)) + } + }) + } + + const subscribeCallback = Effect.fn("Bus.subscribeCallback")(function* ( + def: D, + callback: (event: Payload) => unknown, + ) { + const state = yield* InstanceState.get(cache) + const ps = yield* getOrCreate(state, def) + return yield* on(ps, def.type, callback) + }) + + const subscribeAllCallback = Effect.fn("Bus.subscribeAllCallback")(function* (callback: (event: any) => unknown) { + const state = yield* InstanceState.get(cache) + return yield* on(state.wildcard, "*", callback) + }) + + return Service.of({ publish, subscribe, subscribeAll, subscribeCallback, subscribeAllCallback }) + }), ) - export async function publish( - def: Definition, - properties: z.output, + const { runPromise, runSync } = makeRuntime(Service, layer) + + // runSync is safe here because the subscribe chain (InstanceState.get, PubSub.subscribe, + // Scope.make, Effect.forkScoped) is entirely synchronous. If any step becomes async, this will throw. + export async function publish(def: D, properties: z.output) { + return runPromise((svc) => svc.publish(def, properties)) + } + + export function subscribe( + def: D, + callback: (event: { type: D["type"]; properties: z.infer }) => unknown, ) { - const payload = { - type: def.type, - properties, - } - log.info("publishing", { - type: def.type, - }) - const pending = [] - for (const key of [def.type, "*"]) { - const match = [...(state().subscriptions.get(key) ?? [])] - for (const sub of match) { - pending.push(sub(payload)) - } - } - GlobalBus.emit("event", { - directory: Instance.directory, - payload, - }) - return Promise.all(pending) + return runSync((svc) => svc.subscribeCallback(def, callback)) } - export function subscribe( - def: Definition, - callback: (event: { type: Definition["type"]; properties: z.infer }) => void, - ) { - return raw(def.type, callback) - } - - export function once( - def: Definition, - callback: (event: { - type: Definition["type"] - properties: z.infer - }) => "done" | undefined, - ) { - const unsub = subscribe(def, (event) => { - if (callback(event)) unsub() - }) - } - - export function subscribeAll(callback: (event: any) => void) { - return raw("*", callback) - } - - function raw(type: string, callback: (event: any) => void) { - log.info("subscribing", { type }) - const subscriptions = state().subscriptions - let match = subscriptions.get(type) ?? [] - match.push(callback) - subscriptions.set(type, match) - - return () => { - log.info("unsubscribing", { type }) - const match = subscriptions.get(type) - if (!match) return - const index = match.indexOf(callback) - if (index === -1) return - match.splice(index, 1) - } + export function subscribeAll(callback: (event: any) => unknown) { + return runSync((svc) => svc.subscribeAllCallback(callback)) } } diff --git a/packages/opencode/src/cli/cmd/agent.ts b/packages/opencode/src/cli/cmd/agent.ts index 29596e9a5b..22371e6acb 100644 --- a/packages/opencode/src/cli/cmd/agent.ts +++ b/packages/opencode/src/cli/cmd/agent.ts @@ -14,19 +14,7 @@ import type { Argv } from "yargs" type AgentMode = "all" | "primary" | "subagent" -const AVAILABLE_TOOLS = [ - "bash", - "read", - "write", - "edit", - "list", - "glob", - "grep", - "webfetch", - "task", - "todowrite", - "todoread", -] +const AVAILABLE_TOOLS = ["bash", "read", "write", "edit", "list", "glob", "grep", "webfetch", "task", "todowrite"] const AgentCreateCommand = cmd({ command: "create", diff --git a/packages/opencode/src/cli/cmd/github.ts b/packages/opencode/src/cli/cmd/github.ts index 186f35705a..1b575bb93e 100644 --- a/packages/opencode/src/cli/cmd/github.ts +++ b/packages/opencode/src/cli/cmd/github.ts @@ -876,7 +876,6 @@ export const GithubRunCommand = cmd({ function subscribeSessionEvents() { const TOOL: Record = { todowrite: ["Todo", UI.Style.TEXT_WARNING_BOLD], - todoread: ["Todo", UI.Style.TEXT_WARNING_BOLD], bash: ["Bash", UI.Style.TEXT_DANGER_BOLD], edit: ["Edit", UI.Style.TEXT_SUCCESS_BOLD], glob: ["Glob", UI.Style.TEXT_INFO_BOLD], @@ -897,7 +896,7 @@ export const GithubRunCommand = cmd({ } let text = "" - Bus.subscribe(MessageV2.Event.PartUpdated, async (evt) => { + Bus.subscribe(MessageV2.Event.PartUpdated, (evt) => { if (evt.properties.part.sessionID !== session.id) return //if (evt.properties.part.messageID === messageID) return const part = evt.properties.part diff --git a/packages/opencode/src/cli/cmd/tui/app.tsx b/packages/opencode/src/cli/cmd/tui/app.tsx index 20209db9c1..cad0ae39cf 100644 --- a/packages/opencode/src/cli/cmd/tui/app.tsx +++ b/packages/opencode/src/cli/cmd/tui/app.tsx @@ -202,7 +202,7 @@ export function tui(input: { targetFps: 60, gatherStats: false, exitOnCtrlC: false, - useKittyKeyboard: {}, + useKittyKeyboard: { events: process.platform === "win32" }, autoFocus: false, openConsoleOnError: false, consoleOptions: { @@ -797,7 +797,7 @@ function App(props: { onSnapshot?: () => Promise }) { }) }) - sdk.event.on(SessionApi.Event.Deleted.type, (evt) => { + sdk.event.on("session.deleted", (evt) => { if (route.data.type === "session" && route.data.sessionID === evt.properties.info.id) { route.navigate({ type: "home" }) toast.show({ @@ -807,7 +807,7 @@ function App(props: { onSnapshot?: () => Promise }) { } }) - sdk.event.on(SessionApi.Event.Error.type, (evt) => { + sdk.event.on("session.error", (evt) => { const error = evt.properties.error if (error && typeof error === "object" && error.name === "MessageAbortedError") return // kilocode_change start - Show warning toast for Kilo errors instead of generic error toast diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx index 78122d6d21..cb3b42b8e4 100644 --- a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx @@ -18,7 +18,7 @@ import { usePromptStash } from "./stash" import { DialogStash } from "../dialog-stash" import { type AutocompleteRef, Autocomplete } from "./autocomplete" import { useCommandDialog } from "../dialog-command" -import { useRenderer } from "@opentui/solid" +import { useKeyboard, useRenderer } from "@opentui/solid" import { Editor } from "@tui/util/editor" import { useExit } from "../../context/exit" import { Clipboard } from "../../util/clipboard" @@ -357,6 +357,20 @@ export function Prompt(props: PromptProps) { ] }) + // Windows Terminal 1.25+ handles Ctrl+V on keydown when kitty events are + // enabled, but still reports the kitty key-release event. Probe on release. + if (process.platform === "win32") { + useKeyboard( + (evt) => { + if (!input.focused) return + if (evt.name === "v" && evt.ctrl && evt.eventType === "release") { + command.trigger("prompt.paste") + } + }, + { release: true }, + ) + } + const ref: PromptRef = { get focused() { return input.focused @@ -857,10 +871,9 @@ export function Prompt(props: PromptProps) { e.preventDefault() return } - // Handle clipboard paste (Ctrl+V) - check for images first on Windows - // This is needed because Windows terminal doesn't properly send image data - // through bracketed paste, so we need to intercept the keypress and - // directly read from clipboard before the terminal handles it + // Check clipboard for images before terminal-handled paste runs. + // This helps terminals that forward Ctrl+V to the app; Windows + // Terminal 1.25+ usually handles Ctrl+V before this path. if (keybind.match("input_paste", e)) { const content = await Clipboard.read() if (content?.mime.startsWith("image/")) { @@ -958,6 +971,9 @@ export function Prompt(props: PromptProps) { // Replace CRLF first, then any remaining CR const normalizedText = decodePasteBytes(event.bytes).replace(/\r\n/g, "\n").replace(/\r/g, "\n") const pastedContent = normalizedText.trim() + + // Windows Terminal <1.25 can surface image-only clipboard as an + // empty bracketed paste. Windows Terminal 1.25+ does not. if (!pastedContent) { command.trigger("prompt.paste") return diff --git a/packages/opencode/src/cli/cmd/tui/util/clipboard.ts b/packages/opencode/src/cli/cmd/tui/util/clipboard.ts index 85e13d3133..87c0a63abc 100644 --- a/packages/opencode/src/cli/cmd/tui/util/clipboard.ts +++ b/packages/opencode/src/cli/cmd/tui/util/clipboard.ts @@ -28,6 +28,14 @@ export namespace Clipboard { mime: string } + // Checks clipboard for images first, then falls back to text. + // + // On Windows prompt/ can call this from multiple paste signals because + // terminals surface image paste differently: + // 1. A forwarded Ctrl+V keypress + // 2. An empty bracketed-paste hint for image-only clipboard in Windows + // Terminal <1.25 + // 3. A kitty Ctrl+V key-release fallback for Windows Terminal 1.25+ export async function read(): Promise { const os = platform() @@ -58,6 +66,8 @@ export namespace Clipboard { } } + // Windows/WSL: probe clipboard for images via PowerShell. + // Bracketed paste can't carry image data so we read it directly. if (os === "win32" || release().includes("WSL")) { const script = "Add-Type -AssemblyName System.Windows.Forms; $img = [System.Windows.Forms.Clipboard]::GetImage(); if ($img) { $ms = New-Object System.IO.MemoryStream; $img.Save($ms, [System.Drawing.Imaging.ImageFormat]::Png); [System.Convert]::ToBase64String($ms.ToArray()) }" diff --git a/packages/opencode/src/cli/cmd/tui/worker.ts b/packages/opencode/src/cli/cmd/tui/worker.ts index e2faf7975c..234d3ec98a 100644 --- a/packages/opencode/src/cli/cmd/tui/worker.ts +++ b/packages/opencode/src/cli/cmd/tui/worker.ts @@ -6,11 +6,15 @@ import { InstanceBootstrap } from "@/project/bootstrap" import { Rpc } from "@/util/rpc" import { upgrade } from "@/cli/upgrade" import { Config } from "@/config/config" +import { Bus } from "@/bus" import { GlobalBus } from "@/bus/global" -import { createKiloClient, type Event } from "@kilocode/sdk/v2" +import { createKiloClient } from "@kilocode/sdk/v2" +import type { Event } from "@kilocode/sdk/v2" import { Flag } from "@/flag/flag" import { setTimeout as sleep } from "node:timers/promises" import { writeHeapSnapshot } from "node:v8" +import { WorkspaceContext } from "@/control-plane/workspace-context" +import { WorkspaceID } from "@/control-plane/schema" await Log.init({ print: process.argv.includes("--print-logs"), @@ -50,39 +54,55 @@ const startEventStream = (input: { directory: string; workspaceID?: string }) => eventStream.abort = abort const signal = abort.signal - const fetchFn = (async (input: RequestInfo | URL, init?: RequestInit) => { - const request = new Request(input, init) - const auth = getAuthorizationHeader() - if (auth) request.headers.set("Authorization", auth) - return Server.Default().fetch(request) - }) as typeof globalThis.fetch - - const sdk = createKiloClient({ - baseUrl: "http://kilo.internal", - directory: input.directory, - experimental_workspaceID: input.workspaceID, - fetch: fetchFn, - signal, - }) + const workspaceID = input.workspaceID ? WorkspaceID.make(input.workspaceID) : undefined ;(async () => { while (!signal.aborted) { - const events = await Promise.resolve( - sdk.event.subscribe( - {}, - { - signal, - }, - ), - ).catch(() => undefined) + const shouldReconnect = await WorkspaceContext.provide({ + workspaceID, + fn: () => + Instance.provide({ + directory: input.directory, + init: InstanceBootstrap, + fn: () => + new Promise((resolve) => { + Rpc.emit("event", { + type: "server.connected", + properties: {}, + } satisfies Event) - if (!events) { - await sleep(250) - continue - } + let settled = false + const settle = (value: boolean) => { + if (settled) return + settled = true + signal.removeEventListener("abort", onAbort) + unsub() + resolve(value) + } - for await (const event of events.stream) { - Rpc.emit("event", event as Event) + const unsub = Bus.subscribeAll((event) => { + Rpc.emit("event", event as Event) + if (event.type === Bus.InstanceDisposed.type) { + settle(true) + } + }) + + const onAbort = () => { + settle(false) + } + + signal.addEventListener("abort", onAbort, { once: true }) + }), + }), + }).catch((error) => { + Log.Default.error("event stream subscribe error", { + error: error instanceof Error ? error.message : error, + }) + return false + }) + + if (!shouldReconnect || signal.aborted) { + break } if (!signal.aborted) { diff --git a/packages/opencode/src/command/index.ts b/packages/opencode/src/command/index.ts index d8f6be4130..331ffb2672 100644 --- a/packages/opencode/src/command/index.ts +++ b/packages/opencode/src/command/index.ts @@ -1,6 +1,6 @@ import { BusEvent } from "@/bus/bus-event" import { InstanceState } from "@/effect/instance-state" -import { makeRunPromise } from "@/effect/run-service" +import { makeRuntime } from "@/effect/run-service" import { SessionID, MessageID } from "@/session/schema" import { Effect, Layer, ServiceMap } from "effect" import z from "zod" @@ -183,7 +183,7 @@ export namespace Command { }), ) - const runPromise = makeRunPromise(Service, layer) + const { runPromise } = makeRuntime(Service, layer) export async function get(name: string) { return runPromise((svc) => svc.get(name)) diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index ab49f3278e..fd4ba83722 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -976,7 +976,6 @@ export namespace Config { task: PermissionRule.optional(), external_directory: PermissionRule.optional(), todowrite: PermissionAction.optional(), - todoread: PermissionAction.optional(), question: PermissionAction.optional(), webfetch: PermissionAction.optional(), websearch: PermissionAction.optional(), diff --git a/packages/opencode/src/control-plane/adaptors/worktree.ts b/packages/opencode/src/control-plane/adaptors/worktree.ts index aed3180288..fc51577037 100644 --- a/packages/opencode/src/control-plane/adaptors/worktree.ts +++ b/packages/opencode/src/control-plane/adaptors/worktree.ts @@ -22,12 +22,11 @@ export const WorktreeAdaptor: Adaptor = { }, async create(info) { const config = Config.parse(info) - const bootstrap = await Worktree.createFromInfo({ + await Worktree.createFromInfo({ name: config.name, directory: config.directory, branch: config.branch, }) - return bootstrap() }, async remove(info) { const config = Config.parse(info) diff --git a/packages/opencode/src/effect/instance-context.ts b/packages/opencode/src/effect/instance-context.ts deleted file mode 100644 index fd45901904..0000000000 --- a/packages/opencode/src/effect/instance-context.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ServiceMap } from "effect" -import type { Project } from "@/project/project" - -export declare namespace InstanceContext { - export interface Shape { - readonly directory: string - readonly worktree: string - readonly project: Project.Info - } -} - -export class InstanceContext extends ServiceMap.Service()( - "opencode/InstanceContext", -) {} diff --git a/packages/opencode/src/effect/run-service.ts b/packages/opencode/src/effect/run-service.ts index 226c276ead..76248ca88f 100644 --- a/packages/opencode/src/effect/run-service.ts +++ b/packages/opencode/src/effect/run-service.ts @@ -3,11 +3,15 @@ import * as ServiceMap from "effect/ServiceMap" export const memoMap = Layer.makeMemoMapUnsafe() -export function makeRunPromise(service: ServiceMap.Service, layer: Layer.Layer) { +export function makeRuntime(service: ServiceMap.Service, layer: Layer.Layer) { let rt: ManagedRuntime.ManagedRuntime | undefined + const getRuntime = () => (rt ??= ManagedRuntime.make(layer, { memoMap })) - return (fn: (svc: S) => Effect.Effect, options?: Effect.RunOptions) => { - rt ??= ManagedRuntime.make(layer, { memoMap }) - return rt.runPromise(service.use(fn), options) + return { + runSync: (fn: (svc: S) => Effect.Effect) => getRuntime().runSync(service.use(fn)), + runPromise: (fn: (svc: S) => Effect.Effect, options?: Effect.RunOptions) => + getRuntime().runPromise(service.use(fn), options), + runFork: (fn: (svc: S) => Effect.Effect) => getRuntime().runFork(service.use(fn)), + runCallback: (fn: (svc: S) => Effect.Effect) => getRuntime().runCallback(service.use(fn)), } } diff --git a/packages/opencode/src/file/index.ts b/packages/opencode/src/file/index.ts index 23c77e7bf7..e70141e8dc 100644 --- a/packages/opencode/src/file/index.ts +++ b/packages/opencode/src/file/index.ts @@ -1,8 +1,8 @@ import { BusEvent } from "@/bus/bus-event" import { InstanceState } from "@/effect/instance-state" -import { makeRunPromise } from "@/effect/run-service" +import { makeRuntime } from "@/effect/run-service" import { git } from "@/util/git" -import { Effect, Fiber, Layer, Scope, ServiceMap } from "effect" +import { Effect, Layer, ServiceMap } from "effect" import { formatPatch, structuredPatch } from "diff" import fs from "fs" import fuzzysort from "fuzzysort" @@ -323,7 +323,6 @@ export namespace File { interface State { cache: Entry - fiber: Fiber.Fiber | undefined } export interface Interface { @@ -348,7 +347,6 @@ export namespace File { Effect.fn("File.state")(() => Effect.succeed({ cache: { files: [], dirs: [] } as Entry, - fiber: undefined as Fiber.Fiber | undefined, }), ), ) @@ -406,21 +404,11 @@ export namespace File { s.cache = next }) - const scope = yield* Scope.Scope + let cachedScan = yield* Effect.cached(scan().pipe(Effect.catchCause(() => Effect.void))) const ensure = Effect.fn("File.ensure")(function* () { - const s = yield* InstanceState.get(state) - if (!s.fiber) - s.fiber = yield* scan().pipe( - Effect.catchCause(() => Effect.void), - Effect.ensuring( - Effect.sync(() => { - s.fiber = undefined - }), - ), - Effect.forkIn(scope), - ) - yield* Fiber.join(s.fiber) + yield* cachedScan + cachedScan = yield* Effect.cached(scan().pipe(Effect.catchCause(() => Effect.void))) }) const init = Effect.fn("File.init")(function* () { @@ -688,7 +676,7 @@ export namespace File { }), ) - const runPromise = makeRunPromise(Service, layer) + const { runPromise } = makeRuntime(Service, layer) export function init() { return runPromise((svc) => svc.init()) diff --git a/packages/opencode/src/file/time.ts b/packages/opencode/src/file/time.ts index 38d4f39a2f..c92ed4fb69 100644 --- a/packages/opencode/src/file/time.ts +++ b/packages/opencode/src/file/time.ts @@ -1,6 +1,6 @@ import { DateTime, Effect, Layer, Semaphore, ServiceMap } from "effect" import { InstanceState } from "@/effect/instance-state" -import { makeRunPromise } from "@/effect/run-service" +import { makeRuntime } from "@/effect/run-service" import { Flag } from "@/flag/flag" import type { SessionID } from "@/session/schema" import { Filesystem } from "../util/filesystem" @@ -108,7 +108,7 @@ export namespace FileTime { }), ).pipe(Layer.orDie) - const runPromise = makeRunPromise(Service, layer) + const { runPromise } = makeRuntime(Service, layer) export function read(sessionID: SessionID, file: string) { return runPromise((s) => s.read(sessionID, file)) diff --git a/packages/opencode/src/file/watcher.ts b/packages/opencode/src/file/watcher.ts index 1642d86e66..788bf7a826 100644 --- a/packages/opencode/src/file/watcher.ts +++ b/packages/opencode/src/file/watcher.ts @@ -8,7 +8,7 @@ import z from "zod" import { Bus } from "@/bus" import { BusEvent } from "@/bus/bus-event" import { InstanceState } from "@/effect/instance-state" -import { makeRunPromise } from "@/effect/run-service" +import { makeRuntime } from "@/effect/run-service" import { Flag } from "@/flag/flag" import { Instance } from "@/project/instance" import { git } from "@/util/git" @@ -159,7 +159,7 @@ export namespace FileWatcher { }), ) - const runPromise = makeRunPromise(Service, layer) + const { runPromise } = makeRuntime(Service, layer) export function init() { return runPromise((svc) => svc.init()) diff --git a/packages/opencode/src/flag/flag.ts b/packages/opencode/src/flag/flag.ts index 9e9da0cbfd..dbc8b92999 100644 --- a/packages/opencode/src/flag/flag.ts +++ b/packages/opencode/src/flag/flag.ts @@ -65,6 +65,7 @@ export namespace Flag { export const KILO_EXPERIMENTAL_MARKDOWN = !falsy("KILO_EXPERIMENTAL_MARKDOWN") export const KILO_MODELS_URL = process.env["KILO_MODELS_URL"] export const KILO_MODELS_PATH = process.env["KILO_MODELS_PATH"] + export const KILO_DISABLE_EMBEDDED_WEB_UI = truthy("KILO_DISABLE_EMBEDDED_WEB_UI") export const KILO_DB = process.env["KILO_DB"] export const KILO_DISABLE_CHANNEL_DB = truthy("KILO_DISABLE_CHANNEL_DB") export const KILO_SKIP_MIGRATIONS = truthy("KILO_SKIP_MIGRATIONS") diff --git a/packages/opencode/src/format/index.ts b/packages/opencode/src/format/index.ts index 39e0630cfc..316ea5ba5c 100644 --- a/packages/opencode/src/format/index.ts +++ b/packages/opencode/src/format/index.ts @@ -1,12 +1,10 @@ import { Effect, Layer, ServiceMap } from "effect" import { InstanceState } from "@/effect/instance-state" -import { makeRunPromise } from "@/effect/run-service" +import { makeRuntime } from "@/effect/run-service" import path from "path" import { mergeDeep } from "remeda" import z from "zod" -import { Bus } from "../bus" import { Config } from "../config/config" -import { File } from "../file" import { Instance } from "../project/instance" import { Process } from "../util/process" import { Log } from "../util/log" @@ -29,6 +27,7 @@ export namespace Format { export interface Interface { readonly init: () => Effect.Effect readonly status: () => Effect.Effect + readonly file: (filepath: string) => Effect.Effect } export class Service extends ServiceMap.Service()("@opencode/Format") {} @@ -97,53 +96,46 @@ export namespace Format { return checks.filter((x) => x.enabled).map((x) => x.item) } - yield* Effect.acquireRelease( - Effect.sync(() => - Bus.subscribe( - File.Event.Edited, - Instance.bind(async (payload) => { - const file = payload.properties.file - log.info("formatting", { file }) - const ext = path.extname(file) + async function formatFile(filepath: string) { + log.info("formatting", { file: filepath }) + const ext = path.extname(filepath) + + for (const item of await getFormatter(ext)) { + log.info("running", { command: item.command }) + try { + const proc = Process.spawn( + item.command.map((x) => x.replace("$FILE", filepath)), + { + cwd: Instance.directory, + env: { ...process.env, ...item.environment }, + stdout: "ignore", + stderr: "ignore", + }, + ) + const exit = await proc.exited + if (exit !== 0) { + log.error("failed", { + command: item.command, + ...item.environment, + }) + } + } catch (error) { + log.error("failed to format file", { + error, + command: item.command, + ...item.environment, + file: filepath, + }) + } + } + } - for (const item of await getFormatter(ext)) { - log.info("running", { command: item.command }) - try { - const proc = Process.spawn( - item.command.map((x) => x.replace("$FILE", file)), - { - cwd: Instance.directory, - env: { ...process.env, ...item.environment }, - stdout: "ignore", - stderr: "ignore", - }, - ) - const exit = await proc.exited - if (exit !== 0) { - log.error("failed", { - command: item.command, - ...item.environment, - }) - } - } catch (error) { - log.error("failed to format file", { - error, - command: item.command, - ...item.environment, - file, - }) - } - } - }), - ), - ), - (unsubscribe) => Effect.sync(unsubscribe), - ) log.info("init") return { formatters, isEnabled, + formatFile, } }), ) @@ -166,11 +158,16 @@ export namespace Format { return result }) - return Service.of({ init, status }) + const file = Effect.fn("Format.file")(function* (filepath: string) { + const { formatFile } = yield* InstanceState.get(state) + yield* Effect.promise(() => formatFile(filepath)) + }) + + return Service.of({ init, status, file }) }), ) - const runPromise = makeRunPromise(Service, layer) + const { runPromise } = makeRuntime(Service, layer) export async function init() { return runPromise((s) => s.init()) @@ -179,4 +176,8 @@ export namespace Format { export async function status() { return runPromise((s) => s.status()) } + + export async function file(filepath: string) { + return runPromise((s) => s.file(filepath)) + } } diff --git a/packages/opencode/src/id/id.ts b/packages/opencode/src/id/id.ts index 6673297cbf..9e324962bf 100644 --- a/packages/opencode/src/id/id.ts +++ b/packages/opencode/src/id/id.ts @@ -3,6 +3,7 @@ import { randomBytes } from "crypto" export namespace Identifier { const prefixes = { + event: "evt", session: "ses", message: "msg", permission: "per", diff --git a/packages/opencode/src/installation/index.ts b/packages/opencode/src/installation/index.ts index c14931a85d..ade8e4727d 100644 --- a/packages/opencode/src/installation/index.ts +++ b/packages/opencode/src/installation/index.ts @@ -2,7 +2,7 @@ import { NodeFileSystem, NodePath } from "@effect/platform-node" import { Effect, Layer, Schema, ServiceMap, Stream } from "effect" import { FetchHttpClient, HttpClient, HttpClientRequest, HttpClientResponse } from "effect/unstable/http" import * as CrossSpawnSpawner from "@/effect/cross-spawn-spawner" -import { makeRunPromise } from "@/effect/run-service" +import { makeRuntime } from "@/effect/run-service" import { withTransientReadRetry } from "@/util/effect-http-client" import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process" import path from "path" @@ -353,7 +353,7 @@ export namespace Installation { Layer.provide(NodePath.layer), ) - const runPromise = makeRunPromise(Service, defaultLayer) + const { runPromise } = makeRuntime(Service, defaultLayer) export async function info(): Promise { return runPromise((svc) => svc.info()) diff --git a/packages/opencode/src/kilo-sessions/kilo-sessions.ts b/packages/opencode/src/kilo-sessions/kilo-sessions.ts index 71c153225b..4df239813b 100644 --- a/packages/opencode/src/kilo-sessions/kilo-sessions.ts +++ b/packages/opencode/src/kilo-sessions/kilo-sessions.ts @@ -161,14 +161,17 @@ export namespace KiloSessions { }) Bus.subscribe(Session.Event.Updated, async (evt) => { - await ingest.sync(evt.properties.info.id, [ + const sessionID = evt.properties.sessionID // kilocode_change + const session = await Session.get(sessionID).catch(() => null) // kilocode_change + if (!session) return + await ingest.sync(sessionID, [ { type: "kilo_meta", - data: await meta(evt.properties.info.id), + data: await meta(sessionID), }, { type: "session", - data: evt.properties.info, + data: session, }, ]) }) diff --git a/packages/opencode/src/lsp/index.ts b/packages/opencode/src/lsp/index.ts index 9915eebe23..4e033e502e 100644 --- a/packages/opencode/src/lsp/index.ts +++ b/packages/opencode/src/lsp/index.ts @@ -178,6 +178,12 @@ export namespace LSP { async function getClients(file: string) { const s = await state() + + // Only spawn LSP clients for files within the instance directory + if (!Instance.containsPath(file)) { + return [] + } + const extension = path.parse(file).ext || file const result: LSPClient.Info[] = [] diff --git a/packages/opencode/src/mcp/auth.ts b/packages/opencode/src/mcp/auth.ts index 399986376d..54f2ce4957 100644 --- a/packages/opencode/src/mcp/auth.ts +++ b/packages/opencode/src/mcp/auth.ts @@ -1,7 +1,9 @@ import path from "path" import z from "zod" import { Global } from "../global" -import { Filesystem } from "../util/filesystem" +import { Effect, Layer, ServiceMap } from "effect" +import { AppFileSystem } from "@/filesystem" +import { makeRuntime } from "@/effect/run-service" export namespace McpAuth { export const Tokens = z.object({ @@ -25,106 +27,155 @@ export namespace McpAuth { clientInfo: ClientInfo.optional(), codeVerifier: z.string().optional(), oauthState: z.string().optional(), - serverUrl: z.string().optional(), // Track the URL these credentials are for + serverUrl: z.string().optional(), }) export type Entry = z.infer const filepath = path.join(Global.Path.data, "mcp-auth.json") - export async function get(mcpName: string): Promise { - const data = await all() - return data[mcpName] + export interface Interface { + readonly all: () => Effect.Effect> + readonly get: (mcpName: string) => Effect.Effect + readonly getForUrl: (mcpName: string, serverUrl: string) => Effect.Effect + readonly set: (mcpName: string, entry: Entry, serverUrl?: string) => Effect.Effect + readonly remove: (mcpName: string) => Effect.Effect + readonly updateTokens: (mcpName: string, tokens: Tokens, serverUrl?: string) => Effect.Effect + readonly updateClientInfo: (mcpName: string, clientInfo: ClientInfo, serverUrl?: string) => Effect.Effect + readonly updateCodeVerifier: (mcpName: string, codeVerifier: string) => Effect.Effect + readonly clearCodeVerifier: (mcpName: string) => Effect.Effect + readonly updateOAuthState: (mcpName: string, oauthState: string) => Effect.Effect + readonly getOAuthState: (mcpName: string) => Effect.Effect + readonly clearOAuthState: (mcpName: string) => Effect.Effect + readonly isTokenExpired: (mcpName: string) => Effect.Effect } - /** - * Get auth entry and validate it's for the correct URL. - * Returns undefined if URL has changed (credentials are invalid). - */ - export async function getForUrl(mcpName: string, serverUrl: string): Promise { - const entry = await get(mcpName) - if (!entry) return undefined + export class Service extends ServiceMap.Service()("@opencode/McpAuth") {} - // If no serverUrl is stored, this is from an old version - consider it invalid - if (!entry.serverUrl) return undefined + export const layer = Layer.effect( + Service, + Effect.gen(function* () { + const fs = yield* AppFileSystem.Service - // If URL has changed, credentials are invalid - if (entry.serverUrl !== serverUrl) return undefined + const all = Effect.fn("McpAuth.all")(function* () { + return yield* fs.readJson(filepath).pipe( + Effect.map((data) => data as Record), + Effect.catch(() => Effect.succeed({} as Record)), + ) + }) - return entry - } + const get = Effect.fn("McpAuth.get")(function* (mcpName: string) { + const data = yield* all() + return data[mcpName] + }) - export async function all(): Promise> { - return Filesystem.readJson>(filepath).catch(() => ({})) - } + const getForUrl = Effect.fn("McpAuth.getForUrl")(function* (mcpName: string, serverUrl: string) { + const entry = yield* get(mcpName) + if (!entry) return undefined + if (!entry.serverUrl) return undefined + if (entry.serverUrl !== serverUrl) return undefined + return entry + }) - export async function set(mcpName: string, entry: Entry, serverUrl?: string): Promise { - const data = await all() - // Always update serverUrl if provided - if (serverUrl) { - entry.serverUrl = serverUrl - } - await Filesystem.writeJson(filepath, { ...data, [mcpName]: entry }, 0o600) - } + const set = Effect.fn("McpAuth.set")(function* (mcpName: string, entry: Entry, serverUrl?: string) { + const data = yield* all() + if (serverUrl) entry.serverUrl = serverUrl + yield* fs.writeJson(filepath, { ...data, [mcpName]: entry }, 0o600).pipe(Effect.orDie) + }) - export async function remove(mcpName: string): Promise { - const data = await all() - delete data[mcpName] - await Filesystem.writeJson(filepath, data, 0o600) - } + const remove = Effect.fn("McpAuth.remove")(function* (mcpName: string) { + const data = yield* all() + delete data[mcpName] + yield* fs.writeJson(filepath, data, 0o600).pipe(Effect.orDie) + }) - export async function updateTokens(mcpName: string, tokens: Tokens, serverUrl?: string): Promise { - const entry = (await get(mcpName)) ?? {} - entry.tokens = tokens - await set(mcpName, entry, serverUrl) - } + const updateField = (field: K, spanName: string) => + Effect.fn(`McpAuth.${spanName}`)(function* (mcpName: string, value: NonNullable, serverUrl?: string) { + const entry = (yield* get(mcpName)) ?? {} + entry[field] = value + yield* set(mcpName, entry, serverUrl) + }) - export async function updateClientInfo(mcpName: string, clientInfo: ClientInfo, serverUrl?: string): Promise { - const entry = (await get(mcpName)) ?? {} - entry.clientInfo = clientInfo - await set(mcpName, entry, serverUrl) - } + const clearField = (field: K, spanName: string) => + Effect.fn(`McpAuth.${spanName}`)(function* (mcpName: string) { + const entry = yield* get(mcpName) + if (entry) { + delete entry[field] + yield* set(mcpName, entry) + } + }) - export async function updateCodeVerifier(mcpName: string, codeVerifier: string): Promise { - const entry = (await get(mcpName)) ?? {} - entry.codeVerifier = codeVerifier - await set(mcpName, entry) - } + const updateTokens = updateField("tokens", "updateTokens") + const updateClientInfo = updateField("clientInfo", "updateClientInfo") + const updateCodeVerifier = updateField("codeVerifier", "updateCodeVerifier") + const updateOAuthState = updateField("oauthState", "updateOAuthState") + const clearCodeVerifier = clearField("codeVerifier", "clearCodeVerifier") + const clearOAuthState = clearField("oauthState", "clearOAuthState") - export async function clearCodeVerifier(mcpName: string): Promise { - const entry = await get(mcpName) - if (entry) { - delete entry.codeVerifier - await set(mcpName, entry) - } - } + const getOAuthState = Effect.fn("McpAuth.getOAuthState")(function* (mcpName: string) { + const entry = yield* get(mcpName) + return entry?.oauthState + }) - export async function updateOAuthState(mcpName: string, oauthState: string): Promise { - const entry = (await get(mcpName)) ?? {} - entry.oauthState = oauthState - await set(mcpName, entry) - } + const isTokenExpired = Effect.fn("McpAuth.isTokenExpired")(function* (mcpName: string) { + const entry = yield* get(mcpName) + if (!entry?.tokens) return null + if (!entry.tokens.expiresAt) return false + return entry.tokens.expiresAt < Date.now() / 1000 + }) - export async function getOAuthState(mcpName: string): Promise { - const entry = await get(mcpName) - return entry?.oauthState - } + return Service.of({ + all, + get, + getForUrl, + set, + remove, + updateTokens, + updateClientInfo, + updateCodeVerifier, + clearCodeVerifier, + updateOAuthState, + getOAuthState, + clearOAuthState, + isTokenExpired, + }) + }), + ) - export async function clearOAuthState(mcpName: string): Promise { - const entry = await get(mcpName) - if (entry) { - delete entry.oauthState - await set(mcpName, entry) - } - } + const defaultLayer = layer.pipe(Layer.provide(AppFileSystem.defaultLayer)) - /** - * Check if stored tokens are expired. - * Returns null if no tokens exist, false if no expiry or not expired, true if expired. - */ - export async function isTokenExpired(mcpName: string): Promise { - const entry = await get(mcpName) - if (!entry?.tokens) return null - if (!entry.tokens.expiresAt) return false - return entry.tokens.expiresAt < Date.now() / 1000 - } + const { runPromise } = makeRuntime(Service, defaultLayer) + + // Async facades for backward compat (used by McpOAuthProvider, CLI) + + export const get = async (mcpName: string) => runPromise((svc) => svc.get(mcpName)) + + export const getForUrl = async (mcpName: string, serverUrl: string) => + runPromise((svc) => svc.getForUrl(mcpName, serverUrl)) + + export const all = async () => runPromise((svc) => svc.all()) + + export const set = async (mcpName: string, entry: Entry, serverUrl?: string) => + runPromise((svc) => svc.set(mcpName, entry, serverUrl)) + + export const remove = async (mcpName: string) => runPromise((svc) => svc.remove(mcpName)) + + export const updateTokens = async (mcpName: string, tokens: Tokens, serverUrl?: string) => + runPromise((svc) => svc.updateTokens(mcpName, tokens, serverUrl)) + + export const updateClientInfo = async (mcpName: string, clientInfo: ClientInfo, serverUrl?: string) => + runPromise((svc) => svc.updateClientInfo(mcpName, clientInfo, serverUrl)) + + export const updateCodeVerifier = async (mcpName: string, codeVerifier: string) => + runPromise((svc) => svc.updateCodeVerifier(mcpName, codeVerifier)) + + export const clearCodeVerifier = async (mcpName: string) => runPromise((svc) => svc.clearCodeVerifier(mcpName)) + + export const updateOAuthState = async (mcpName: string, oauthState: string) => + runPromise((svc) => svc.updateOAuthState(mcpName, oauthState)) + + export const getOAuthState = async (mcpName: string) => runPromise((svc) => svc.getOAuthState(mcpName)) + + export const clearOAuthState = async (mcpName: string) => runPromise((svc) => svc.clearOAuthState(mcpName)) + + export const isTokenExpired = async (mcpName: string) => runPromise((svc) => svc.isTokenExpired(mcpName)) } diff --git a/packages/opencode/src/mcp/index.ts b/packages/opencode/src/mcp/index.ts index 4eaf219ab0..1b88e1c860 100644 --- a/packages/opencode/src/mcp/index.ts +++ b/packages/opencode/src/mcp/index.ts @@ -1,17 +1,17 @@ +// kilocode_change start +// The MCP SDK only sets windowsHide:true in Electron (checks `'type' in process`). +// Bun's process object lacks `type`, so stdio transports flash a CMD window on +// every MCP server start. We patch it before the SDK is imported. +if (process.platform === "win32" && !("type" in process)) { + Object.defineProperty(process, "type", { value: "kilo-bun", configurable: true }) +} +// kilocode_change end + import { dynamicTool, type Tool, jsonSchema, type JSONSchema7 } from "ai" import { Client } from "@modelcontextprotocol/sdk/client/index.js" import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js" import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js" import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js" -// kilocode_change start -// The MCP SDK only sets windowsHide:true in Electron (checks `'type' in process`). -// When running inside the VS Code extension on Windows, set process.type so the SDK -// hides cmd.exe windows when spawning MCP servers. The extension passes KILO_PLATFORM=vscode -// so we use that to scope this shim to the vscode context only. -if (process.platform === "win32" && process.env.KILO_PLATFORM === "vscode" && !("type" in process)) { - ;(process as NodeJS.Process & { type: string }).type = "browser" -} -// kilocode_change end import { UnauthorizedError } from "@modelcontextprotocol/sdk/client/auth.js" import { CallToolResultSchema, @@ -20,12 +20,12 @@ import { } from "@modelcontextprotocol/sdk/types.js" import { Config } from "../config/config" import { Log } from "../util/log" -import { Process } from "../util/process" import { NamedError } from "@opencode-ai/util/error" import z from "zod/v4" import { Instance } from "../project/instance" import { Installation } from "../installation" import { withTimeout } from "@/util/timeout" +import { AppFileSystem } from "@/filesystem" import { McpOAuthProvider } from "./oauth-provider" import { McpOAuthCallback } from "./oauth-callback" import { McpAuth } from "./auth" @@ -33,11 +33,32 @@ import { BusEvent } from "../bus/bus-event" import { Bus } from "@/bus" import { TuiEvent } from "@/cli/cmd/tui/event" import open from "open" +import { Effect, Layer, Option, ServiceMap, Stream } from "effect" +import { InstanceState } from "@/effect/instance-state" +import { makeRuntime } from "@/effect/run-service" +import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process" +import * as CrossSpawnSpawner from "@/effect/cross-spawn-spawner" +import { NodeFileSystem } from "@effect/platform-node" +import * as NodePath from "@effect/platform-node/NodePath" export namespace MCP { const log = Log.create({ service: "mcp" }) const DEFAULT_TIMEOUT = 30_000 + // kilocode_change start — inject --rm for Docker containers to prevent stopped container accumulation + export function ensureDockerRm(cmd: string, args: string[]): string[] { + const isDocker = cmd === "docker" || cmd === "podman" + if (!isDocker) return args + const runIdx = args.indexOf("run") + if (runIdx < 0) return args + const hasRm = args.includes("--rm") + if (hasRm) return args + const result = [...args] + result.splice(runIdx + 1, 0, "--rm") + return result + } + // kilocode_change end + export const Resource = z .object({ name: z.string(), @@ -64,41 +85,6 @@ export namespace MCP { }), ) - // kilocode_change start - export async function reconnectRemote() { - const cfg = await Config.get() - const list = Object.entries(cfg.mcp ?? {}) - const s = await state() - await Promise.allSettled( - list.map(async ([key, mcp]) => { - if (!isMcpConfigured(mcp)) return - if (mcp.type !== "remote") return - const result = await create(key, mcp).catch((err) => { - log.error("remote reconnect failed", { name: key, err }) - s.status[key] = { status: "failed", error: err instanceof Error ? err.message : String(err) } - const stale = s.clients[key] - if (stale) { - stale.close().catch((e) => log.error("failed to close stale client", { name: key, e })) - delete s.clients[key] - } - return undefined - }) - if (!result) return - s.status[key] = result.status - if (result.mcpClient) { - const existing = s.clients[key] - if (existing) { - await existing.close().catch((error) => { - log.error("Failed to close existing MCP client", { name: key, error }) - }) - } - s.clients[key] = result.mcpClient - } - }), - ) - } - // kilocode_change end - export const Failed = NamedError.create( "MCPFailed", z.object({ @@ -153,17 +139,21 @@ export namespace MCP { }) export type Status = z.infer - // Register notification handlers for MCP client - function registerNotificationHandlers(client: MCPClient, serverName: string) { - client.setNotificationHandler(ToolListChangedNotificationSchema, async () => { - log.info("tools list changed notification received", { server: serverName }) - ;(await state()).toolsCache.delete(serverName) // kilocode_change - Bus.publish(ToolsChanged, { server: serverName }) - }) + // Store transports for OAuth servers to allow finishing auth + type TransportWithAuth = StreamableHTTPClientTransport | SSEClientTransport + const pendingOAuthTransports = new Map() + + // Prompt cache types + type PromptInfo = Awaited>["prompts"][number] + type ResourceInfo = Awaited>["resources"][number] + type McpEntry = NonNullable[string] + + function isMcpConfigured(entry: McpEntry): entry is Config.Mcp { + return typeof entry === "object" && entry !== null && "type" in entry } // Convert MCP tool definition to AI SDK Tool type - async function convertMcpTool(mcpTool: MCPToolDef, client: MCPClient, timeout?: number): Promise { + function convertMcpTool(mcpTool: MCPToolDef, client: MCPClient, timeout?: number): Tool { const inputSchema = mcpTool.inputSchema // Spread first, then override type to ensure it's always "object" @@ -193,188 +183,33 @@ export namespace MCP { }) } - // Store transports for OAuth servers to allow finishing auth - type TransportWithAuth = StreamableHTTPClientTransport | SSEClientTransport - const pendingOAuthTransports = new Map() - - // Prompt cache types - type PromptInfo = Awaited>["prompts"][number] - - type ResourceInfo = Awaited>["resources"][number] - type McpEntry = NonNullable[string] - function isMcpConfigured(entry: McpEntry): entry is Config.Mcp { - return typeof entry === "object" && entry !== null && "type" in entry - } - - // kilocode_change — exported for testing - export function ensureDockerRm(cmd: string, args: string[]): string[] { - if (cmd !== "docker" || args[0] !== "run") return args - // Always inject --rm right after "run". Docker treats duplicate --rm as - // a no-op, so this is safe even when the user already specified it. - return ["run", "--rm", ...args.slice(1)] - } - - async function descendants(pid: number): Promise { - if (process.platform === "win32") return [] - const pids: number[] = [] - const queue = [pid] - while (queue.length > 0) { - const current = queue.shift()! - const lines = await Process.lines(["pgrep", "-P", String(current)], { nothrow: true }) - for (const tok of lines) { - const cpid = parseInt(tok, 10) - if (!isNaN(cpid) && !pids.includes(cpid)) { - pids.push(cpid) - queue.push(cpid) - } - } - } - return pids - } - - const state = Instance.state( - async () => { - const cfg = await Config.get() - const config = cfg.mcp ?? {} - const clients: Record = {} - const status: Record = {} - - await Promise.all( - Object.entries(config).map(async ([key, mcp]) => { - if (!isMcpConfigured(mcp)) { - log.error("Ignoring MCP config entry without type", { key }) - return - } - - // If disabled by config, mark as disabled without trying to connect - if (mcp.enabled === false) { - status[key] = { status: "disabled" } - return - } - - const result = await create(key, mcp).catch(() => undefined) - if (!result) return - - status[key] = result.status - - if (result.mcpClient) { - clients[key] = result.mcpClient - } - }), - ) - return { - status, - clients, - toolsCache: new Map(), // kilocode_change — per-server listTools cache - } - }, - async (state) => { - // The MCP SDK only signals the direct child process on close. - // Servers like chrome-devtools-mcp spawn grandchild processes - // (e.g. Chrome) that the SDK never reaches, leaving them orphaned. - // Kill the full descendant tree first so the server exits promptly - // and no processes are left behind. - for (const client of Object.values(state.clients)) { - const pid = (client.transport as any)?.pid - if (typeof pid !== "number") continue - for (const dpid of await descendants(pid)) { - try { - process.kill(dpid, "SIGTERM") - } catch {} - } - } - - await Promise.all( - Object.values(state.clients).map((client) => - client.close().catch((error) => { - log.error("Failed to close MCP client", { - error, - }) - }), - ), - ) - pendingOAuthTransports.clear() - }, - ) - - // Helper function to fetch prompts for a specific client - async function fetchPromptsForClient(clientName: string, client: Client) { - const prompts = await client.listPrompts().catch((e) => { - log.error("failed to get prompts", { clientName, error: e.message }) + async function defs(key: string, client: MCPClient, timeout?: number) { + const result = await withTimeout(client.listTools(), timeout ?? DEFAULT_TIMEOUT).catch((err) => { + log.error("failed to get tools from client", { key, error: err }) return undefined }) - - if (!prompts) { - return - } - - const commands: Record = {} - - for (const prompt of prompts.prompts) { - const sanitizedClientName = clientName.replace(/[^a-zA-Z0-9_-]/g, "_") - const sanitizedPromptName = prompt.name.replace(/[^a-zA-Z0-9_-]/g, "_") - const key = sanitizedClientName + ":" + sanitizedPromptName - - commands[key] = { ...prompt, client: clientName } - } - return commands + return result?.tools } - async function fetchResourcesForClient(clientName: string, client: Client) { - const resources = await client.listResources().catch((e) => { - log.error("failed to get prompts", { clientName, error: e.message }) + async function fetchFromClient( + clientName: string, + client: Client, + listFn: (c: Client) => Promise, + label: string, + ): Promise | undefined> { + const items = await listFn(client).catch((e: any) => { + log.error(`failed to get ${label}`, { clientName, error: e.message }) return undefined }) + if (!items) return undefined - if (!resources) { - return - } - - const commands: Record = {} - - for (const resource of resources.resources) { - const sanitizedClientName = clientName.replace(/[^a-zA-Z0-9_-]/g, "_") - const sanitizedResourceName = resource.name.replace(/[^a-zA-Z0-9_-]/g, "_") - const key = sanitizedClientName + ":" + sanitizedResourceName - - commands[key] = { ...resource, client: clientName } - } - return commands - } - - export async function add(name: string, mcp: Config.Mcp) { - const s = await state() - s.toolsCache.delete(name) // kilocode_change - const result = await create(name, mcp) - if (!result) { - const status = { - status: "failed" as const, - error: "unknown error", - } - s.status[name] = status - return { - status, - } - } - if (!result.mcpClient) { - s.status[name] = result.status - return { - status: s.status, - } - } - // Close existing client if present to prevent memory leaks - const existingClient = s.clients[name] - if (existingClient) { - await existingClient.close().catch((error) => { - log.error("Failed to close existing MCP client", { name, error }) - }) - } - s.clients[name] = result.mcpClient - s.status[name] = result.status - - return { - status: s.status, + const out: Record = {} + const sanitizedClient = clientName.replace(/[^a-zA-Z0-9_-]/g, "_") + for (const item of items) { + const sanitizedName = item.name.replace(/[^a-zA-Z0-9_-]/g, "_") + out[sanitizedClient + ":" + sanitizedName] = { ...item, client: clientName } } + return out } async function create(key: string, mcp: Config.Mcp) { @@ -440,7 +275,6 @@ export namespace MCP { version: Installation.VERSION, }) await withTimeout(client.connect(transport), connectTimeout) - registerNotificationHandlers(client, key) mcpClient = client log.info("connected", { key, transport: name }) status = { status: "connected" } @@ -501,19 +335,17 @@ export namespace MCP { } if (mcp.type === "local") { - const [cmd, ...args] = mcp.command - // kilocode_change — inject --rm for Docker containers to prevent stopped - // containers from accumulating when MCP servers are toggled on/off. - const finalArgs = ensureDockerRm(cmd, args) + const [cmd, ...rawArgs] = mcp.command + const args = ensureDockerRm(cmd, rawArgs) // kilocode_change const cwd = Instance.directory const transport = new StdioClientTransport({ stderr: "pipe", command: cmd, - args: finalArgs, + args, cwd, env: { ...process.env, - ...(cmd === "opencode" ? { BUN_BE_BUN: "1" } : {}), + ...(cmd === "kilo" ? { BUN_BE_BUN: "1" } : {}), // kilocode_change ...mcp.environment, }, }) @@ -528,7 +360,6 @@ export namespace MCP { version: Installation.VERSION, }) await withTimeout(client.connect(transport), connectTimeout) - registerNotificationHandlers(client, key) mcpClient = client status = { status: "connected", @@ -561,483 +392,569 @@ export namespace MCP { } } - const result = await withTimeout(mcpClient.listTools(), mcp.timeout ?? DEFAULT_TIMEOUT).catch((err) => { - log.error("failed to get tools from client", { key, error: err }) - return undefined - }) - if (!result) { + const listed = await defs(key, mcpClient, mcp.timeout) + if (!listed) { await mcpClient.close().catch((error) => { log.error("Failed to close MCP client", { error, }) }) - status = { - status: "failed", - error: "Failed to get tools", - } return { mcpClient: undefined, - status: { - status: "failed" as const, - error: "Failed to get tools", - }, + status: { status: "failed" as const, error: "Failed to get tools" }, } } - log.info("create() successfully created client", { key, toolCount: result.tools.length }) + log.info("create() successfully created client", { key, toolCount: listed.length }) return { mcpClient, status, + defs: listed, } } - export async function status() { - const s = await state() - const cfg = await Config.get() - const config = cfg.mcp ?? {} - const result: Record = {} + // --- Effect Service --- - // Include all configured MCPs from config, not just connected ones - for (const [key, mcp] of Object.entries(config)) { - if (!isMcpConfigured(mcp)) continue - result[key] = s.status[key] ?? { status: "disabled" } - } - - return result + interface State { + status: Record + clients: Record + defs: Record } - export async function clients() { - return state().then((state) => state.clients) + export interface Interface { + readonly status: () => Effect.Effect> + readonly clients: () => Effect.Effect> + readonly tools: () => Effect.Effect> + readonly prompts: () => Effect.Effect> + readonly resources: () => Effect.Effect> + readonly add: (name: string, mcp: Config.Mcp) => Effect.Effect<{ status: Record | Status }> + readonly connect: (name: string) => Effect.Effect + readonly disconnect: (name: string) => Effect.Effect + readonly getPrompt: ( + clientName: string, + name: string, + args?: Record, + ) => Effect.Effect> | undefined> + readonly readResource: ( + clientName: string, + resourceUri: string, + ) => Effect.Effect> | undefined> + readonly startAuth: (mcpName: string) => Effect.Effect<{ authorizationUrl: string; oauthState: string }> + readonly authenticate: (mcpName: string) => Effect.Effect + readonly finishAuth: (mcpName: string, authorizationCode: string) => Effect.Effect + readonly removeAuth: (mcpName: string) => Effect.Effect + readonly supportsOAuth: (mcpName: string) => Effect.Effect + readonly hasStoredTokens: (mcpName: string) => Effect.Effect + readonly getAuthStatus: (mcpName: string) => Effect.Effect } - export async function connect(name: string) { - ;(await state()).toolsCache.delete(name) // kilocode_change - const cfg = await Config.get() - const config = cfg.mcp ?? {} - const mcp = config[name] - if (!mcp) { - log.error("MCP config not found", { name }) - return - } + export class Service extends ServiceMap.Service()("@opencode/MCP") {} - if (!isMcpConfigured(mcp)) { - log.error("Ignoring MCP connect request for config without type", { name }) - return - } + export const layer = Layer.effect( + Service, + Effect.gen(function* () { + const spawner = yield* ChildProcessSpawner.ChildProcessSpawner + const auth = yield* McpAuth.Service - const result = await create(name, { ...mcp, enabled: true }) - - if (!result) { - const s = await state() - s.status[name] = { - status: "failed", - error: "Unknown error during connection", - } - return - } - - const s = await state() - s.status[name] = result.status - if (result.mcpClient) { - const existingClient = s.clients[name] - if (existingClient) { - await existingClient.close().catch((error) => { - log.error("Failed to close existing MCP client", { name, error }) - }) - } - s.clients[name] = result.mcpClient - } - } - - export async function disconnect(name: string) { - const s = await state() - s.toolsCache.delete(name) // kilocode_change - const client = s.clients[name] - if (client) { - await client.close().catch((error) => { - log.error("Failed to close MCP client", { name, error }) - }) - delete s.clients[name] - } - s.status[name] = { status: "disabled" } - } - - export async function tools() { - const result: Record = {} - const s = await state() - const cfg = await Config.get() - const config = cfg.mcp ?? {} - const clientsSnapshot = await clients() - const defaultTimeout = cfg.experimental?.mcp_timeout - - const connectedClients = Object.entries(clientsSnapshot).filter( - ([clientName]) => s.status[clientName]?.status === "connected", - ) - - const toolsResults = await Promise.all( - connectedClients.map(async ([clientName, client]) => { - // kilocode_change start — use cached listTools when available - const cached = s.toolsCache.get(clientName) - if (cached) { - return { clientName, client, toolsResult: { tools: cached } } - } - // kilocode_change end - const toolsResult = await client.listTools().catch((e) => { - log.error("failed to get tools", { clientName, error: e.message }) - const failedStatus = { - status: "failed" as const, - error: e instanceof Error ? e.message : String(e), + const descendants = Effect.fnUntraced( + function* (pid: number) { + if (process.platform === "win32") return [] as number[] + const pids: number[] = [] + const queue = [pid] + while (queue.length > 0) { + const current = queue.shift()! + const handle = yield* spawner.spawn( + ChildProcess.make("pgrep", ["-P", String(current)], { stdin: "ignore" }), + ) + const text = yield* Stream.mkString(Stream.decodeText(handle.stdout)) + yield* handle.exitCode + for (const tok of text.split("\n")) { + const cpid = parseInt(tok, 10) + if (!isNaN(cpid) && !pids.includes(cpid)) { + pids.push(cpid) + queue.push(cpid) + } + } } - s.status[clientName] = failedStatus - delete s.clients[clientName] - return undefined - }) - if (toolsResult) s.toolsCache.set(clientName, toolsResult.tools) // kilocode_change - return { clientName, client, toolsResult } - }), - ) - - for (const { clientName, client, toolsResult } of toolsResults) { - if (!toolsResult) continue - const mcpConfig = config[clientName] - const entry = isMcpConfigured(mcpConfig) ? mcpConfig : undefined - const timeout = entry?.timeout ?? defaultTimeout - for (const mcpTool of toolsResult.tools) { - const sanitizedClientName = clientName.replace(/[^a-zA-Z0-9_-]/g, "_") - const sanitizedToolName = mcpTool.name.replace(/[^a-zA-Z0-9_-]/g, "_") - result[sanitizedClientName + "_" + sanitizedToolName] = await convertMcpTool(mcpTool, client, timeout) - } - } - return result - } - - export async function prompts() { - const s = await state() - const clientsSnapshot = await clients() - - const prompts = Object.fromEntries( - ( - await Promise.all( - Object.entries(clientsSnapshot).map(async ([clientName, client]) => { - if (s.status[clientName]?.status !== "connected") { - return [] - } - - return Object.entries((await fetchPromptsForClient(clientName, client)) ?? {}) - }), - ) - ).flat(), - ) - - return prompts - } - - export async function resources() { - const s = await state() - const clientsSnapshot = await clients() - - const result = Object.fromEntries( - ( - await Promise.all( - Object.entries(clientsSnapshot).map(async ([clientName, client]) => { - if (s.status[clientName]?.status !== "connected") { - return [] - } - - return Object.entries((await fetchResourcesForClient(clientName, client)) ?? {}) - }), - ) - ).flat(), - ) - - return result - } - - export async function getPrompt(clientName: string, name: string, args?: Record) { - const clientsSnapshot = await clients() - const client = clientsSnapshot[clientName] - - if (!client) { - log.warn("client not found for prompt", { - clientName, - }) - return undefined - } - - const result = await client - .getPrompt({ - name: name, - arguments: args, - }) - .catch((e) => { - log.error("failed to get prompt from MCP server", { - clientName, - promptName: name, - error: e.message, - }) - return undefined - }) - - return result - } - - export async function readResource(clientName: string, resourceUri: string) { - const clientsSnapshot = await clients() - const client = clientsSnapshot[clientName] - - if (!client) { - log.warn("client not found for prompt", { - clientName: clientName, - }) - return undefined - } - - const result = await client - .readResource({ - uri: resourceUri, - }) - .catch((e) => { - log.error("failed to get prompt from MCP server", { - clientName: clientName, - resourceUri: resourceUri, - error: e.message, - }) - return undefined - }) - - return result - } - - /** - * Start OAuth authentication flow for an MCP server. - * Returns the authorization URL that should be opened in a browser. - */ - export async function startAuth(mcpName: string): Promise<{ authorizationUrl: string }> { - const cfg = await Config.get() - const mcpConfig = cfg.mcp?.[mcpName] - - if (!mcpConfig) { - throw new Error(`MCP server not found: ${mcpName}`) - } - - if (!isMcpConfigured(mcpConfig)) { - throw new Error(`MCP server ${mcpName} is disabled or missing configuration`) - } - - if (mcpConfig.type !== "remote") { - throw new Error(`MCP server ${mcpName} is not a remote server`) - } - - if (mcpConfig.oauth === false) { - throw new Error(`MCP server ${mcpName} has OAuth explicitly disabled`) - } - - // Start the callback server - await McpOAuthCallback.ensureRunning() - - // Generate and store a cryptographically secure state parameter BEFORE creating the provider - // The SDK will call provider.state() to read this value - const oauthState = Array.from(crypto.getRandomValues(new Uint8Array(32))) - .map((b) => b.toString(16).padStart(2, "0")) - .join("") - await McpAuth.updateOAuthState(mcpName, oauthState) - - // Create a new auth provider for this flow - // OAuth config is optional - if not provided, we'll use auto-discovery - const oauthConfig = typeof mcpConfig.oauth === "object" ? mcpConfig.oauth : undefined - let capturedUrl: URL | undefined - const authProvider = new McpOAuthProvider( - mcpName, - mcpConfig.url, - { - clientId: oauthConfig?.clientId, - clientSecret: oauthConfig?.clientSecret, - scope: oauthConfig?.scope, - }, - { - onRedirect: async (url) => { - capturedUrl = url + return pids }, - }, - ) + Effect.scoped, + Effect.catch(() => Effect.succeed([] as number[])), + ) - // Create transport with auth provider - const transport = new StreamableHTTPClientTransport(new URL(mcpConfig.url), { - authProvider, - }) + function watch(s: State, name: string, client: MCPClient, timeout?: number) { + client.setNotificationHandler(ToolListChangedNotificationSchema, async () => { + log.info("tools list changed notification received", { server: name }) + if (s.clients[name] !== client || s.status[name]?.status !== "connected") return - // Try to connect - this will trigger the OAuth flow - try { - const client = new Client({ - name: "kilo", // kilocode_change - version: Installation.VERSION, - }) - await client.connect(transport) - // If we get here, we're already authenticated - return { authorizationUrl: "" } - } catch (error) { - if (error instanceof UnauthorizedError && capturedUrl) { - // Store transport for finishAuth - pendingOAuthTransports.set(mcpName, transport) - return { authorizationUrl: capturedUrl.toString() } - } - throw error - } - } + const listed = await defs(name, client, timeout) + if (!listed) return + if (s.clients[name] !== client || s.status[name]?.status !== "connected") return - /** - * Complete OAuth authentication after user authorizes in browser. - * Opens the browser and waits for callback. - */ - export async function authenticate(mcpName: string): Promise { - const { authorizationUrl } = await startAuth(mcpName) - - if (!authorizationUrl) { - // Already authenticated - const s = await state() - return s.status[mcpName] ?? { status: "connected" } - } - - // Get the state that was already generated and stored in startAuth() - const oauthState = await McpAuth.getOAuthState(mcpName) - if (!oauthState) { - throw new Error("OAuth state not found - this should not happen") - } - - // The SDK has already added the state parameter to the authorization URL - // We just need to open the browser - log.info("opening browser for oauth", { mcpName, url: authorizationUrl, state: oauthState }) - - // Register the callback BEFORE opening the browser to avoid race condition - // when the IdP has an active SSO session and redirects immediately - const callbackPromise = McpOAuthCallback.waitForCallback(oauthState) - - try { - const subprocess = await open(authorizationUrl) - // The open package spawns a detached process and returns immediately. - // We need to listen for errors which fire asynchronously: - // - "error" event: command not found (ENOENT) - // - "exit" with non-zero code: command exists but failed (e.g., no display) - await new Promise((resolve, reject) => { - // Give the process a moment to fail if it's going to - const timeout = setTimeout(() => resolve(), 500) - subprocess.on("error", (error) => { - clearTimeout(timeout) - reject(error) + s.defs[name] = listed + await Bus.publish(ToolsChanged, { server: name }).catch((error) => + log.warn("failed to publish tools changed", { server: name, error }), + ) }) - subprocess.on("exit", (code) => { - if (code !== null && code !== 0) { - clearTimeout(timeout) - reject(new Error(`Browser open failed with exit code ${code}`)) + } + + const cache = yield* InstanceState.make( + Effect.fn("MCP.state")(function* () { + const cfg = yield* Effect.promise(() => Config.get()) + const config = cfg.mcp ?? {} + const s: State = { + status: {}, + clients: {}, + defs: {}, + } + + yield* Effect.forEach( + Object.entries(config), + ([key, mcp]) => + Effect.gen(function* () { + if (!isMcpConfigured(mcp)) { + log.error("Ignoring MCP config entry without type", { key }) + return + } + + if (mcp.enabled === false) { + s.status[key] = { status: "disabled" } + return + } + + const result = yield* Effect.promise(() => create(key, mcp).catch(() => undefined)) + if (!result) return + + s.status[key] = result.status + if (result.mcpClient) { + s.clients[key] = result.mcpClient + s.defs[key] = result.defs + watch(s, key, result.mcpClient, mcp.timeout) + } + }), + { concurrency: "unbounded" }, + ) + + yield* Effect.addFinalizer(() => + Effect.gen(function* () { + yield* Effect.forEach( + Object.values(s.clients), + (client) => + Effect.gen(function* () { + const pid = (client.transport as any)?.pid + if (typeof pid === "number") { + const pids = yield* descendants(pid) + for (const dpid of pids) { + try { + process.kill(dpid, "SIGTERM") + } catch {} + } + } + yield* Effect.tryPromise(() => client.close()).pipe(Effect.ignore) + }), + { concurrency: "unbounded" }, + ) + pendingOAuthTransports.clear() + }), + ) + + return s + }), + ) + + function closeClient(s: State, name: string) { + const client = s.clients[name] + delete s.defs[name] + if (!client) return Effect.void + return Effect.promise(() => + client.close().catch((error: any) => log.error("failed to close MCP client", { name, error })), + ) + } + + const status = Effect.fn("MCP.status")(function* () { + const s = yield* InstanceState.get(cache) + const cfg = yield* Effect.promise(() => Config.get()) + const config = cfg.mcp ?? {} + const result: Record = {} + + for (const [key, mcp] of Object.entries(config)) { + if (!isMcpConfigured(mcp)) continue + result[key] = s.status[key] ?? { status: "disabled" } + } + + return result + }) + + const clients = Effect.fn("MCP.clients")(function* () { + const s = yield* InstanceState.get(cache) + return s.clients + }) + + const createAndStore = Effect.fn("MCP.createAndStore")(function* (name: string, mcp: Config.Mcp) { + const s = yield* InstanceState.get(cache) + const result = yield* Effect.promise(() => create(name, mcp)) + + if (!result) { + yield* closeClient(s, name) + delete s.clients[name] + s.status[name] = { status: "failed" as const, error: "unknown error" } + return s.status[name] + } + + s.status[name] = result.status + if (!result.mcpClient) { + yield* closeClient(s, name) + delete s.clients[name] + return result.status + } + + yield* closeClient(s, name) + s.clients[name] = result.mcpClient + s.defs[name] = result.defs + watch(s, name, result.mcpClient, mcp.timeout) + return result.status + }) + + const add = Effect.fn("MCP.add")(function* (name: string, mcp: Config.Mcp) { + yield* createAndStore(name, mcp) + const s = yield* InstanceState.get(cache) + return { status: s.status } + }) + + const connect = Effect.fn("MCP.connect")(function* (name: string) { + const mcp = yield* getMcpConfig(name) + if (!mcp) { + log.error("MCP config not found or invalid", { name }) + return + } + yield* createAndStore(name, { ...mcp, enabled: true }) + }) + + const disconnect = Effect.fn("MCP.disconnect")(function* (name: string) { + const s = yield* InstanceState.get(cache) + yield* closeClient(s, name) + delete s.clients[name] + s.status[name] = { status: "disabled" } + }) + + const tools = Effect.fn("MCP.tools")(function* () { + const result: Record = {} + const s = yield* InstanceState.get(cache) + const cfg = yield* Effect.promise(() => Config.get()) + const config = cfg.mcp ?? {} + const defaultTimeout = cfg.experimental?.mcp_timeout + + const connectedClients = Object.entries(s.clients).filter( + ([clientName]) => s.status[clientName]?.status === "connected", + ) + + yield* Effect.forEach( + connectedClients, + ([clientName, client]) => + Effect.gen(function* () { + const mcpConfig = config[clientName] + const entry = mcpConfig && isMcpConfigured(mcpConfig) ? mcpConfig : undefined + + const listed = s.defs[clientName] + if (!listed) { + log.warn("missing cached tools for connected server", { clientName }) + return + } + + const timeout = entry?.timeout ?? defaultTimeout + for (const mcpTool of listed) { + const sanitizedClientName = clientName.replace(/[^a-zA-Z0-9_-]/g, "_") + const sanitizedToolName = mcpTool.name.replace(/[^a-zA-Z0-9_-]/g, "_") + result[sanitizedClientName + "_" + sanitizedToolName] = convertMcpTool(mcpTool, client, timeout) + } + }), + { concurrency: "unbounded" }, + ) + return result + }) + + function collectFromConnected( + s: State, + fetchFn: (clientName: string, client: Client) => Promise | undefined>, + ) { + return Effect.forEach( + Object.entries(s.clients).filter(([name]) => s.status[name]?.status === "connected"), + ([clientName, client]) => + Effect.promise(async () => Object.entries((await fetchFn(clientName, client)) ?? {})), + { concurrency: "unbounded" }, + ).pipe(Effect.map((results) => Object.fromEntries(results.flat()))) + } + + const prompts = Effect.fn("MCP.prompts")(function* () { + const s = yield* InstanceState.get(cache) + return yield* collectFromConnected(s, (name, client) => + fetchFromClient(name, client, (c) => c.listPrompts().then((r) => r.prompts), "prompts"), + ) + }) + + const resources = Effect.fn("MCP.resources")(function* () { + const s = yield* InstanceState.get(cache) + return yield* collectFromConnected(s, (name, client) => + fetchFromClient(name, client, (c) => c.listResources().then((r) => r.resources), "resources"), + ) + }) + + const withClient = Effect.fnUntraced(function* ( + clientName: string, + fn: (client: MCPClient) => Promise, + label: string, + meta?: Record, + ) { + const s = yield* InstanceState.get(cache) + const client = s.clients[clientName] + if (!client) { + log.warn(`client not found for ${label}`, { clientName }) + return undefined + } + return yield* Effect.tryPromise({ + try: () => fn(client), + catch: (e: any) => { + log.error(`failed to ${label}`, { clientName, ...meta, error: e?.message }) + return e + }, + }).pipe(Effect.orElseSucceed(() => undefined)) + }) + + const getPrompt = Effect.fn("MCP.getPrompt")(function* ( + clientName: string, + name: string, + args?: Record, + ) { + return yield* withClient(clientName, (client) => client.getPrompt({ name, arguments: args }), "getPrompt", { + promptName: name, + }) + }) + + const readResource = Effect.fn("MCP.readResource")(function* (clientName: string, resourceUri: string) { + return yield* withClient(clientName, (client) => client.readResource({ uri: resourceUri }), "readResource", { + resourceUri, + }) + }) + + const getMcpConfig = Effect.fnUntraced(function* (mcpName: string) { + const cfg = yield* Effect.promise(() => Config.get()) + const mcpConfig = cfg.mcp?.[mcpName] + if (!mcpConfig || !isMcpConfigured(mcpConfig)) return undefined + return mcpConfig + }) + + const startAuth = Effect.fn("MCP.startAuth")(function* (mcpName: string) { + const mcpConfig = yield* getMcpConfig(mcpName) + if (!mcpConfig) throw new Error(`MCP server ${mcpName} not found or disabled`) + if (mcpConfig.type !== "remote") throw new Error(`MCP server ${mcpName} is not a remote server`) + if (mcpConfig.oauth === false) throw new Error(`MCP server ${mcpName} has OAuth explicitly disabled`) + + yield* Effect.promise(() => McpOAuthCallback.ensureRunning()) + + const oauthState = Array.from(crypto.getRandomValues(new Uint8Array(32))) + .map((b) => b.toString(16).padStart(2, "0")) + .join("") + yield* auth.updateOAuthState(mcpName, oauthState) + const oauthConfig = typeof mcpConfig.oauth === "object" ? mcpConfig.oauth : undefined + let capturedUrl: URL | undefined + const authProvider = new McpOAuthProvider( + mcpName, + mcpConfig.url, + { + clientId: oauthConfig?.clientId, + clientSecret: oauthConfig?.clientSecret, + scope: oauthConfig?.scope, + }, + { + onRedirect: async (url) => { + capturedUrl = url + }, + }, + ) + + const transport = new StreamableHTTPClientTransport(new URL(mcpConfig.url), { authProvider }) + + return yield* Effect.promise(async () => { + try { + const client = new Client({ name: "kilo", version: Installation.VERSION }) // kilocode_change + await client.connect(transport) + return { authorizationUrl: "", oauthState } + } catch (error) { + if (error instanceof UnauthorizedError && capturedUrl) { + pendingOAuthTransports.set(mcpName, transport) + return { authorizationUrl: capturedUrl.toString(), oauthState } + } + throw error } }) }) - } catch (error) { - // Browser opening failed (e.g., in remote/headless sessions like SSH, devcontainers) - // Emit event so CLI can display the URL for manual opening - log.warn("failed to open browser, user must open URL manually", { mcpName, error }) - Bus.publish(BrowserOpenFailed, { mcpName, url: authorizationUrl }) - } - // Wait for callback using the already-registered promise - const code = await callbackPromise + const authenticate = Effect.fn("MCP.authenticate")(function* (mcpName: string) { + const { authorizationUrl, oauthState } = yield* startAuth(mcpName) + if (!authorizationUrl) return { status: "connected" } as Status - // Validate and clear the state - const storedState = await McpAuth.getOAuthState(mcpName) - if (storedState !== oauthState) { - await McpAuth.clearOAuthState(mcpName) - throw new Error("OAuth state mismatch - potential CSRF attack") - } + log.info("opening browser for oauth", { mcpName, url: authorizationUrl, state: oauthState }) - await McpAuth.clearOAuthState(mcpName) + const callbackPromise = McpOAuthCallback.waitForCallback(oauthState, mcpName) - // Finish auth - return finishAuth(mcpName, code) - } + yield* Effect.tryPromise(() => open(authorizationUrl)).pipe( + Effect.flatMap((subprocess) => + Effect.callback((resume) => { + const timer = setTimeout(() => resume(Effect.void), 500) + subprocess.on("error", (err) => { + clearTimeout(timer) + resume(Effect.fail(err)) + }) + subprocess.on("exit", (code) => { + if (code !== null && code !== 0) { + clearTimeout(timer) + resume(Effect.fail(new Error(`Browser open failed with exit code ${code}`))) + } + }) + }), + ), + Effect.catch(() => { + log.warn("failed to open browser, user must open URL manually", { mcpName }) + return Effect.promise(() => Bus.publish(BrowserOpenFailed, { mcpName, url: authorizationUrl })) + }), + ) - /** - * Complete OAuth authentication with the authorization code. - */ - export async function finishAuth(mcpName: string, authorizationCode: string): Promise { - const transport = pendingOAuthTransports.get(mcpName) + const code = yield* Effect.promise(() => callbackPromise) - if (!transport) { - throw new Error(`No pending OAuth flow for MCP server: ${mcpName}`) - } + const storedState = yield* auth.getOAuthState(mcpName) + if (storedState !== oauthState) { + yield* auth.clearOAuthState(mcpName) + throw new Error("OAuth state mismatch - potential CSRF attack") + } + yield* auth.clearOAuthState(mcpName) + return yield* finishAuth(mcpName, code) + }) - try { - // Call finishAuth on the transport - await transport.finishAuth(authorizationCode) + const finishAuth = Effect.fn("MCP.finishAuth")(function* (mcpName: string, authorizationCode: string) { + const transport = pendingOAuthTransports.get(mcpName) + if (!transport) throw new Error(`No pending OAuth flow for MCP server: ${mcpName}`) - // Clear the code verifier after successful auth - await McpAuth.clearCodeVerifier(mcpName) + const result = yield* Effect.tryPromise({ + try: async () => { + await transport.finishAuth(authorizationCode) + return true + }, + catch: (error) => { + log.error("failed to finish oauth", { mcpName, error }) + return error + }, + }).pipe(Effect.option) - // Now try to reconnect - const cfg = await Config.get() - const mcpConfig = cfg.mcp?.[mcpName] + if (Option.isNone(result)) { + return { status: "failed", error: "OAuth completion failed" } as Status + } - if (!mcpConfig) { - throw new Error(`MCP server not found: ${mcpName}`) - } + yield* auth.clearCodeVerifier(mcpName) + pendingOAuthTransports.delete(mcpName) - if (!isMcpConfigured(mcpConfig)) { - throw new Error(`MCP server ${mcpName} is disabled or missing configuration`) - } + const mcpConfig = yield* getMcpConfig(mcpName) + if (!mcpConfig) return { status: "failed", error: "MCP config not found after auth" } as Status - // Re-add the MCP server to establish connection - pendingOAuthTransports.delete(mcpName) - const result = await add(mcpName, mcpConfig) + return yield* createAndStore(mcpName, mcpConfig) + }) - const statusRecord = result.status as Record - return statusRecord[mcpName] ?? { status: "failed", error: "Unknown error after auth" } - } catch (error) { - log.error("failed to finish oauth", { mcpName, error }) - return { - status: "failed", - error: error instanceof Error ? error.message : String(error), - } - } - } + const removeAuth = Effect.fn("MCP.removeAuth")(function* (mcpName: string) { + yield* auth.remove(mcpName) + McpOAuthCallback.cancelPending(mcpName) + pendingOAuthTransports.delete(mcpName) + log.info("removed oauth credentials", { mcpName }) + }) - /** - * Remove OAuth credentials for an MCP server. - */ - export async function removeAuth(mcpName: string): Promise { - await McpAuth.remove(mcpName) - McpOAuthCallback.cancelPending(mcpName) - pendingOAuthTransports.delete(mcpName) - await McpAuth.clearOAuthState(mcpName) - log.info("removed oauth credentials", { mcpName }) - } + const supportsOAuth = Effect.fn("MCP.supportsOAuth")(function* (mcpName: string) { + const mcpConfig = yield* getMcpConfig(mcpName) + if (!mcpConfig) return false + return mcpConfig.type === "remote" && mcpConfig.oauth !== false + }) - /** - * Check if an MCP server supports OAuth (remote servers support OAuth by default unless explicitly disabled). - */ - export async function supportsOAuth(mcpName: string): Promise { - const cfg = await Config.get() - const mcpConfig = cfg.mcp?.[mcpName] - if (!mcpConfig) return false - if (!isMcpConfigured(mcpConfig)) return false - return mcpConfig.type === "remote" && mcpConfig.oauth !== false - } + const hasStoredTokens = Effect.fn("MCP.hasStoredTokens")(function* (mcpName: string) { + const entry = yield* auth.get(mcpName) + return !!entry?.tokens + }) - /** - * Check if an MCP server has stored OAuth tokens. - */ - export async function hasStoredTokens(mcpName: string): Promise { - const entry = await McpAuth.get(mcpName) - return !!entry?.tokens - } + const getAuthStatus = Effect.fn("MCP.getAuthStatus")(function* (mcpName: string) { + const entry = yield* auth.get(mcpName) + if (!entry?.tokens) return "not_authenticated" as AuthStatus + const expired = yield* auth.isTokenExpired(mcpName) + return (expired ? "expired" : "authenticated") as AuthStatus + }) + + return Service.of({ + status, + clients, + tools, + prompts, + resources, + add, + connect, + disconnect, + getPrompt, + readResource, + startAuth, + authenticate, + finishAuth, + removeAuth, + supportsOAuth, + hasStoredTokens, + getAuthStatus, + }) + }), + ) export type AuthStatus = "authenticated" | "expired" | "not_authenticated" - /** - * Get the authentication status for an MCP server. - */ - export async function getAuthStatus(mcpName: string): Promise { - const hasTokens = await hasStoredTokens(mcpName) - if (!hasTokens) return "not_authenticated" - const expired = await McpAuth.isTokenExpired(mcpName) - return expired ? "expired" : "authenticated" - } + // --- Per-service runtime --- + + const defaultLayer = layer.pipe( + Layer.provide(McpAuth.layer), + Layer.provide(CrossSpawnSpawner.layer), + Layer.provide(AppFileSystem.defaultLayer), + Layer.provide(NodeFileSystem.layer), + Layer.provide(NodePath.layer), + ) + + const { runPromise } = makeRuntime(Service, defaultLayer) + + // --- Async facade functions --- + + export const status = async () => runPromise((svc) => svc.status()) + + export const clients = async () => runPromise((svc) => svc.clients()) + + export const tools = async () => runPromise((svc) => svc.tools()) + + export const prompts = async () => runPromise((svc) => svc.prompts()) + + export const resources = async () => runPromise((svc) => svc.resources()) + + export const add = async (name: string, mcp: Config.Mcp) => runPromise((svc) => svc.add(name, mcp)) + + export const connect = async (name: string) => runPromise((svc) => svc.connect(name)) + + export const disconnect = async (name: string) => runPromise((svc) => svc.disconnect(name)) + + export const getPrompt = async (clientName: string, name: string, args?: Record) => + runPromise((svc) => svc.getPrompt(clientName, name, args)) + + export const readResource = async (clientName: string, resourceUri: string) => + runPromise((svc) => svc.readResource(clientName, resourceUri)) + + export const startAuth = async (mcpName: string) => runPromise((svc) => svc.startAuth(mcpName)) + + export const authenticate = async (mcpName: string) => runPromise((svc) => svc.authenticate(mcpName)) + + export const finishAuth = async (mcpName: string, authorizationCode: string) => + runPromise((svc) => svc.finishAuth(mcpName, authorizationCode)) + + export const removeAuth = async (mcpName: string) => runPromise((svc) => svc.removeAuth(mcpName)) + + export const supportsOAuth = async (mcpName: string) => runPromise((svc) => svc.supportsOAuth(mcpName)) + + export const hasStoredTokens = async (mcpName: string) => runPromise((svc) => svc.hasStoredTokens(mcpName)) + + export const getAuthStatus = async (mcpName: string) => runPromise((svc) => svc.getAuthStatus(mcpName)) } diff --git a/packages/opencode/src/mcp/oauth-callback.ts b/packages/opencode/src/mcp/oauth-callback.ts index 6132f6b789..c42a1c757a 100644 --- a/packages/opencode/src/mcp/oauth-callback.ts +++ b/packages/opencode/src/mcp/oauth-callback.ts @@ -60,6 +60,9 @@ interface PendingAuth { export namespace McpOAuthCallback { let server: ReturnType | undefined const pendingAuths = new Map() + // Reverse index: mcpName → oauthState, so cancelPending(mcpName) can + // find the right entry in pendingAuths (which is keyed by oauthState). + const mcpNameToState = new Map() const CALLBACK_TIMEOUT_MS = 5 * 60 * 1000 // 5 minutes @@ -104,6 +107,12 @@ export namespace McpOAuthCallback { const pending = pendingAuths.get(state)! clearTimeout(pending.timeout) pendingAuths.delete(state) + for (const [name, s] of mcpNameToState) { + if (s === state) { + mcpNameToState.delete(name) + break + } + } pending.reject(new Error(errorMsg)) } return new Response(HTML_ERROR(errorMsg), { @@ -132,6 +141,13 @@ export namespace McpOAuthCallback { clearTimeout(pending.timeout) pendingAuths.delete(state) + // Clean up reverse index + for (const [name, s] of mcpNameToState) { + if (s === state) { + mcpNameToState.delete(name) + break + } + } pending.resolve(code) return new Response(HTML_SUCCESS, { @@ -143,11 +159,13 @@ export namespace McpOAuthCallback { log.info("oauth callback server started", { port: OAUTH_CALLBACK_PORT }) } - export function waitForCallback(oauthState: string): Promise { + export function waitForCallback(oauthState: string, mcpName?: string): Promise { + if (mcpName) mcpNameToState.set(mcpName, oauthState) return new Promise((resolve, reject) => { const timeout = setTimeout(() => { if (pendingAuths.has(oauthState)) { pendingAuths.delete(oauthState) + if (mcpName) mcpNameToState.delete(mcpName) reject(new Error("OAuth callback timeout - authorization took too long")) } }, CALLBACK_TIMEOUT_MS) @@ -157,10 +175,14 @@ export namespace McpOAuthCallback { } export function cancelPending(mcpName: string): void { - const pending = pendingAuths.get(mcpName) + // Look up the oauthState for this mcpName via the reverse index + const oauthState = mcpNameToState.get(mcpName) + const key = oauthState ?? mcpName + const pending = pendingAuths.get(key) if (pending) { clearTimeout(pending.timeout) - pendingAuths.delete(mcpName) + pendingAuths.delete(key) + mcpNameToState.delete(mcpName) pending.reject(new Error("Authorization cancelled")) } } @@ -190,6 +212,7 @@ export namespace McpOAuthCallback { pending.reject(new Error("OAuth callback server stopped")) } pendingAuths.clear() + mcpNameToState.clear() } export function isRunning(): boolean { diff --git a/packages/opencode/src/permission/index.ts b/packages/opencode/src/permission/index.ts index 0aed80e8c0..5713230ec9 100644 --- a/packages/opencode/src/permission/index.ts +++ b/packages/opencode/src/permission/index.ts @@ -2,7 +2,7 @@ import { Bus } from "@/bus" import { BusEvent } from "@/bus/bus-event" import { Config } from "@/config/config" import { InstanceState } from "@/effect/instance-state" -import { makeRunPromise } from "@/effect/run-service" +import { makeRuntime } from "@/effect/run-service" import { ProjectID } from "@/project/schema" import { Instance } from "@/project/instance" import { MessageID, SessionID } from "@/session/schema" @@ -452,7 +452,7 @@ export namespace Permission { return result } - export const runPromise = makeRunPromise(Service, layer) + export const { runPromise } = makeRuntime(Service, layer) export async function ask(input: z.infer) { return runPromise((s) => s.ask(input)) diff --git a/packages/opencode/src/plugin/index.ts b/packages/opencode/src/plugin/index.ts index bb71d33fac..f3a923806a 100644 --- a/packages/opencode/src/plugin/index.ts +++ b/packages/opencode/src/plugin/index.ts @@ -3,7 +3,6 @@ import { Config } from "../config/config" import { Bus } from "../bus" import { Log } from "../util/log" import { createKiloClient } from "@kilocode/sdk" -import { Server } from "../server/server" import { BunProc } from "../bun" import { Flag } from "../flag/flag" import { CodexAuthPlugin } from "./codex" @@ -12,10 +11,10 @@ import { NamedError } from "@opencode-ai/util/error" import { CopilotAuthPlugin } from "./copilot" import { gitlabAuthPlugin as GitlabAuthPlugin } from "opencode-gitlab-auth" import { PoeAuthPlugin } from "opencode-poe-auth" -import { Effect, Layer, ServiceMap } from "effect" +import { Effect, Layer, ServiceMap, Stream } from "effect" import { InstanceState } from "@/effect/instance-state" import { KiloAuthPlugin } from "@kilocode/kilo-gateway" // kilocode_change -import { makeRunPromise } from "@/effect/run-service" +import { makeRuntime } from "@/effect/run-service" export namespace Plugin { const log = Log.create({ service: "plugin" }) @@ -61,11 +60,15 @@ export namespace Plugin { export const layer = Layer.effect( Service, Effect.gen(function* () { + const bus = yield* Bus.Service + const cache = yield* InstanceState.make( Effect.fn("Plugin.state")(function* (ctx) { const hooks: Hooks[] = [] yield* Effect.promise(async () => { + const { Server } = await import("../server/server") + const client = createKiloClient({ baseUrl: "http://localhost:4096", directory: ctx.directory, @@ -153,16 +156,16 @@ export namespace Plugin { } }) - // Subscribe to bus events, clean up when scope is closed - yield* Effect.acquireRelease( - Effect.sync(() => - Bus.subscribeAll(async (input) => { + // Subscribe to bus events, fiber interrupted when scope closes + yield* bus.subscribeAll().pipe( + Stream.runForEach((input) => + Effect.sync(() => { for (const hook of hooks) { - hook["event"]?.({ event: input }) + hook["event"]?.({ event: input as any }) } }), ), - (unsub) => Effect.sync(unsub), + Effect.forkScoped, ) return { hooks } @@ -199,7 +202,8 @@ export namespace Plugin { }), ) - const runPromise = makeRunPromise(Service, layer) + const defaultLayer = layer.pipe(Layer.provide(Bus.layer)) + const { runPromise } = makeRuntime(Service, defaultLayer) export async function trigger< Name extends TriggerName, diff --git a/packages/opencode/src/project/project.ts b/packages/opencode/src/project/project.ts index 4d0a72ac08..a8c205e0cb 100644 --- a/packages/opencode/src/project/project.ts +++ b/packages/opencode/src/project/project.ts @@ -11,7 +11,7 @@ import { ProjectID } from "./schema" import { Effect, Layer, Path, Scope, ServiceMap, Stream } from "effect" import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process" import { NodeFileSystem, NodePath } from "@effect/platform-node" -import { makeRunPromise } from "@/effect/run-service" +import { makeRuntime } from "@/effect/run-service" import { AppFileSystem } from "@/filesystem" import * as CrossSpawnSpawner from "@/effect/cross-spawn-spawner" @@ -465,7 +465,7 @@ export namespace Project { Layer.provide(NodeFileSystem.layer), Layer.provide(NodePath.layer), ) - const runPromise = makeRunPromise(Service, defaultLayer) + const { runPromise } = makeRuntime(Service, defaultLayer) // --------------------------------------------------------------------------- // Promise-based API (delegates to Effect service via runPromise) diff --git a/packages/opencode/src/project/vcs.ts b/packages/opencode/src/project/vcs.ts index dea25b91b4..1c595f7f14 100644 --- a/packages/opencode/src/project/vcs.ts +++ b/packages/opencode/src/project/vcs.ts @@ -1,8 +1,8 @@ -import { Effect, Layer, ServiceMap } from "effect" +import { Effect, Layer, ServiceMap, Stream } from "effect" import { Bus } from "@/bus" import { BusEvent } from "@/bus/bus-event" import { InstanceState } from "@/effect/instance-state" -import { makeRunPromise } from "@/effect/run-service" +import { makeRuntime } from "@/effect/run-service" import { FileWatcher } from "@/file/watcher" import { Log } from "@/util/log" import { git } from "@/util/git" @@ -23,7 +23,7 @@ export namespace Vcs { export const Info = z .object({ - branch: z.string(), + branch: z.string().optional(), }) .meta({ ref: "VcsInfo", @@ -41,9 +41,10 @@ export namespace Vcs { export class Service extends ServiceMap.Service()("@opencode/Vcs") {} - export const layer = Layer.effect( + export const layer: Layer.Layer = Layer.effect( Service, Effect.gen(function* () { + const bus = yield* Bus.Service const state = yield* InstanceState.make( Effect.fn("Vcs.state")((ctx) => Effect.gen(function* () { @@ -51,7 +52,7 @@ export namespace Vcs { return { current: undefined } } - const getCurrentBranch = async () => { + const get = async () => { const result = await git(["rev-parse", "--abbrev-ref", "HEAD"], { cwd: ctx.worktree, }) @@ -61,26 +62,23 @@ export namespace Vcs { } const value = { - current: yield* Effect.promise(() => getCurrentBranch()), + current: yield* Effect.promise(() => get()), } log.info("initialized", { branch: value.current }) - yield* Effect.acquireRelease( - Effect.sync(() => - Bus.subscribe( - FileWatcher.Event.Updated, - Instance.bind(async (evt) => { - if (!evt.properties.file.endsWith("HEAD")) return - const next = await getCurrentBranch() - if (next !== value.current) { - log.info("branch changed", { from: value.current, to: next }) - value.current = next - Bus.publish(Event.BranchUpdated, { branch: next }) - } - }), - ), + yield* bus.subscribe(FileWatcher.Event.Updated).pipe( + Stream.filter((evt) => evt.properties.file.endsWith("HEAD")), + Stream.runForEach(() => + Effect.gen(function* () { + const next = yield* Effect.promise(() => get()) + if (next !== value.current) { + log.info("branch changed", { from: value.current, to: next }) + value.current = next + yield* bus.publish(Event.BranchUpdated, { branch: next }) + } + }), ), - (unsubscribe) => Effect.sync(unsubscribe), + Effect.forkScoped, ) return value @@ -99,7 +97,9 @@ export namespace Vcs { }), ) - const runPromise = makeRunPromise(Service, layer) + export const defaultLayer = layer.pipe(Layer.provide(Bus.layer)) + + const { runPromise } = makeRuntime(Service, defaultLayer) export function init() { return runPromise((svc) => svc.init()) diff --git a/packages/opencode/src/provider/auth.ts b/packages/opencode/src/provider/auth.ts index 2304bed63b..4adcb2d21a 100644 --- a/packages/opencode/src/provider/auth.ts +++ b/packages/opencode/src/provider/auth.ts @@ -2,7 +2,7 @@ import type { AuthOuathResult, Hooks } from "@kilocode/plugin" import { NamedError } from "@opencode-ai/util/error" import { Auth } from "@/auth" import { InstanceState } from "@/effect/instance-state" -import { makeRunPromise } from "@/effect/run-service" +import { makeRuntime } from "@/effect/run-service" import { Plugin } from "../plugin" import { ProviderID } from "./schema" import { Array as Arr, Effect, Layer, Record, Result, ServiceMap } from "effect" @@ -218,12 +218,13 @@ export namespace ProviderAuth { } if ("refresh" in result) { + const { type: _, provider: __, refresh, access, expires, ...extra } = result yield* auth.set(input.providerID, { type: "oauth", - access: result.access, - refresh: result.refresh, - expires: result.expires, - ...(result.accountId ? { accountId: result.accountId } : {}), + access, + refresh, + expires, + ...extra, }) } }) @@ -234,7 +235,7 @@ export namespace ProviderAuth { export const defaultLayer = layer.pipe(Layer.provide(Auth.layer)) - const runPromise = makeRunPromise(Service, defaultLayer) + const { runPromise } = makeRuntime(Service, defaultLayer) export async function methods() { return runPromise((svc) => svc.methods()) diff --git a/packages/opencode/src/provider/models-snapshot.d.ts b/packages/opencode/src/provider/models-snapshot.d.ts new file mode 100644 index 0000000000..839eba6b7d --- /dev/null +++ b/packages/opencode/src/provider/models-snapshot.d.ts @@ -0,0 +1,2 @@ +// Auto-generated by build.ts - do not edit +export declare const snapshot: Record diff --git a/packages/opencode/src/provider/models-snapshot.js b/packages/opencode/src/provider/models-snapshot.js new file mode 100644 index 0000000000..c4413305ad --- /dev/null +++ b/packages/opencode/src/provider/models-snapshot.js @@ -0,0 +1,3 @@ +// @ts-nocheck +// Auto-generated by build.ts - do not edit +export const snapshot = {"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":{"id":"qwen3-235b-a22b","name":"Qwen3-235B-A22B","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}},"grok-4.1":{"id":"grok-4.1","name":"grok-4.1","attachment":true,"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"]},"open_weights":false,"cost":{"input":2,"output":10},"limit":{"context":200000,"output":64000}},"MiniMax-M2":{"id":"MiniMax-M2","name":"MiniMax-M2","attachment":false,"reasoning":false,"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}},"grok-4-1-fast-reasoning":{"id":"grok-4-1-fast-reasoning","name":"grok-4-1-fast-reasoning","attachment":true,"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"]},"open_weights":false,"cost":{"input":0.2,"output":0.5},"limit":{"context":2000000,"output":30000}},"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,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-24","last_updated":"2025-06-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.3,"output":2.5},"limit":{"context":1000000,"output":65536}},"kimi-k2-0905-preview":{"id":"kimi-k2-0905-preview","name":"kimi-k2-0905-preview","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}},"claude-opus-4-5-20251101":{"id":"claude-opus-4-5-20251101","name":"claude-opus-4-5-20251101","attachment":true,"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}},"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,"temperature":true,"knowledge":"2025-01","release_date":"2025-09-26","last_updated":"2025-09-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.1,"output":0.4},"limit":{"context":1000000,"output":65536}},"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}},"mistral-large-2512":{"id":"mistral-large-2512","name":"mistral-large-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,"cost":{"input":1.1,"output":3.3},"limit":{"context":128000,"output":262144}},"glm-4.7":{"id":"glm-4.7","name":"glm-4.7","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}},"doubao-seed-1-8-251215":{"id":"doubao-seed-1-8-251215","name":"doubao-seed-1-8-251215","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-12-18","last_updated":"2025-12-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.114,"output":0.286},"limit":{"context":224000,"output":64000}},"chatgpt-4o-latest":{"id":"chatgpt-4o-latest","name":"chatgpt-4o-latest","family":"gpt","attachment":true,"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"]},"open_weights":false,"cost":{"input":5,"output":15},"limit":{"context":128000,"output":16384}},"deepseek-chat":{"id":"deepseek-chat","name":"Deepseek-Chat","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2024-11-29","last_updated":"2024-11-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.29,"output":0.43},"limit":{"context":128000,"output":8192}},"deepseek-v3.2-thinking":{"id":"deepseek-v3.2-thinking","name":"DeepSeek-V3.2-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-thinking":{"id":"gpt-5-thinking","name":"gpt-5-thinking","attachment":true,"reasoning":true,"tool_call":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}},"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}},"qwen-plus":{"id":"qwen-plus","name":"Qwen-Plus","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.12,"output":1.2},"limit":{"context":1000000,"output":32768}},"gpt-5-mini":{"id":"gpt-5-mini","name":"gpt-5-mini","attachment":true,"reasoning":false,"tool_call":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":0.25,"output":2},"limit":{"context":400000,"output":128000}},"gemini-3-pro-preview":{"id":"gemini-3-pro-preview","name":"gemini-3-pro-preview","attachment":true,"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"]},"open_weights":false,"cost":{"input":2,"output":12},"limit":{"context":1000000,"output":64000}},"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":"2025-04","release_date":"2025-09-24","last_updated":"2025-09-24","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.86,"output":3.43},"limit":{"context":258048,"output":65536}},"claude-sonnet-4-5-20250929":{"id":"claude-sonnet-4-5-20250929","name":"claude-sonnet-4-5-20250929","attachment":true,"reasoning":false,"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}},"qwen-flash":{"id":"qwen-flash","name":"Qwen-Flash","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.022,"output":0.22},"limit":{"context":1000000,"output":32768}},"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":"2025-01","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},"limit":{"context":1000000,"output":65536}},"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":"2025-06","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},"limit":{"context":2000000,"output":30000}},"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":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}},"gpt-5.2":{"id":"gpt-5.2","name":"gpt-5.2","attachment":true,"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":400000,"output":128000}},"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":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":2,"output":120},"limit":{"context":32768,"output":64000}},"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.343,"output":1.372},"limit":{"context":131072,"output":8192}},"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}},"glm-4.5":{"id":"glm-4.5","name":"GLM-4.5","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"]},"open_weights":false,"cost":{"input":0.286,"output":1.142},"limit":{"context":128000,"output":98304}},"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"gemini-2.5-flash","family":"gemini-flash","attachment":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"],"output":["text"]},"open_weights":false,"cost":{"input":0.3,"output":2.5},"limit":{"context":1000000,"output":65536}},"gpt-5.2-chat-latest":{"id":"gpt-5.2-chat-latest","name":"gpt-5.2-chat-latest","attachment":true,"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}},"doubao-seed-1-6-vision-250815":{"id":"doubao-seed-1-6-vision-250815","name":"doubao-seed-1-6-vision-250815","attachment":true,"reasoning":false,"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}},"MiniMax-M2.1":{"id":"MiniMax-M2.1","name":"MiniMax-M2.1","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-12-19","last_updated":"2025-12-19","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.3,"output":1.2},"limit":{"context":1000000,"output":131072}},"gpt-5.1":{"id":"gpt-5.1","name":"gpt-5.1","attachment":true,"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":400000,"output":128000}},"kimi-k2-thinking-turbo":{"id":"kimi-k2-thinking-turbo","name":"kimi-k2-thinking-turbo","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":1.265,"output":9.119},"limit":{"context":262144,"output":262144}},"deepseek-reasoner":{"id":"deepseek-reasoner","name":"Deepseek-Reasoner","family":"deepseek-thinking","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"]},"open_weights":false,"cost":{"input":0.29,"output":0.43},"limit":{"context":128000,"output":128000}},"grok-4-fast-reasoning":{"id":"grok-4-fast-reasoning","name":"grok-4-fast-reasoning","attachment":true,"reasoning":true,"tool_call":true,"temperature":true,"knowledge":"2025-06","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":2000000,"output":30000}},"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,"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":15,"output":75},"limit":{"context":200000,"output":32000}},"qwen3-30b-a3b":{"id":"qwen3-30b-a3b","name":"Qwen3-30B-A3B","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.11,"output":1.08},"limit":{"context":128000,"output":8192}},"glm-4.5v":{"id":"glm-4.5v","name":"GLM-4.5V","attachment":true,"reasoning":false,"tool_call":true,"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}},"glm-4.6":{"id":"glm-4.6","name":"glm-4.6","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-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,"temperature":true,"knowledge":"2025-01","release_date":"2025-09-26","last_updated":"2025-09-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.3,"output":2.5},"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}},"claude-opus-4-1-20250805":{"id":"claude-opus-4-1-20250805","name":"claude-opus-4-1-20250805","attachment":true,"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"]},"open_weights":false,"cost":{"input":15,"output":75},"limit":{"context":200000,"output":32000}},"gpt-5.1-chat-latest":{"id":"gpt-5.1-chat-latest","name":"gpt-5.1-chat-latest","attachment":true,"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}},"claude-haiku-4-5-20251001":{"id":"claude-haiku-4-5-20251001","name":"claude-haiku-4-5-20251001","attachment":true,"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}},"MiniMax-M1":{"id":"MiniMax-M1","name":"MiniMax-M1","family":"minimax","attachment":false,"reasoning":false,"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}},"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,"cost":{"input":0.86,"output":3.43},"limit":{"context":262144,"output":65536}},"doubao-seed-code-preview-251028":{"id":"doubao-seed-code-preview-251028","name":"doubao-seed-code-preview-251028","attachment":true,"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}},"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-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}},"deepseek-v3.2":{"id":"deepseek-v3.2","name":"deepseek-v3.2","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}},"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"]},"open_weights":false,"cost":{"input":15,"output":120},"limit":{"context":400000,"output":272000}},"gpt-4o":{"id":"gpt-4o","name":"gpt-4o","family":"gpt","attachment":true,"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"]},"open_weights":false,"cost":{"input":2.5,"output":10},"limit":{"context":128000,"output":16384}},"gpt-5":{"id":"gpt-5","name":"gpt-5","attachment":true,"reasoning":false,"tool_call":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}},"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":"2025-03","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":3,"output":15},"limit":{"context":200000,"output":64000}},"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,"cost":{"input":2,"output":8},"limit":{"context":1000000,"output":32768}},"kimi-k2-thinking":{"id":"kimi-k2-thinking","name":"kimi-k2-thinking","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}},"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}},"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-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}},"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":"2025-06","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":2000000,"output":30000}},"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,"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}},"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,"cost":{"input":0.33,"output":0.33},"limit":{"context":128000,"output":128000}}}},"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":"2025-04","release_date":"2025-04","last_updated":"2025-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.7,"output":2.8,"reasoning":8.4},"limit":{"context":131072,"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"]},"open_weights":true,"cost":{"input":1,"output":5},"limit":{"context":1048576,"output":65536}},"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}},"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-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}},"qwen3-8b":{"id":"qwen3-8b","name":"Qwen3 8B","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,"cost":{"input":0.18,"output":0.7,"reasoning":2.1},"limit":{"context":131072,"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-02-16","last_updated":"2026-02-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"cost":{"input":0.6,"output":3.6,"reasoning":3.6},"limit":{"context":262144,"output":65536}},"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,"cost":{"input":0.8,"output":2.4},"limit":{"context":131072,"output":8192}},"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,"cost":{"input":0.21,"output":0.63},"limit":{"context":131072,"output":8192}},"qwen3-livetranslate-flash-realtime":{"id":"qwen3-livetranslate-flash-realtime","name":"Qwen3-LiveTranslate Flash Realtime","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"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}},"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,"cost":{"input":0.7,"output":2.8,"reasoning":8.4},"limit":{"context":131072,"output":16384}},"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,"cost":{"input":1.6,"output":6.4},"limit":{"context":32768,"output":8192}},"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,"cost":{"input":0.4,"output":1.2,"reasoning":4},"limit":{"context":1000000,"output":32768}},"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,"cost":{"input":0.07,"output":0.27,"input_audio":4.44,"output_audio":8.89},"limit":{"context":32768,"output":2048}},"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,"cost":{"input":0.05,"output":0.4},"limit":{"context":1000000,"output":32768}},"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-04","release_date":"2024-09","last_updated":"2024-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.35,"output":1.05},"limit":{"context":131072,"output":8192}},"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,"cost":{"input":0.276,"output":1.651,"cache_read":0.028,"cache_write":0.344},"limit":{"context":1000000,"output":65536}},"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,"cost":{"input":1.2,"output":6},"limit":{"context":262144,"output":65536}},"qwen3-omni-flash":{"id":"qwen3-omni-flash","name":"Qwen3-Omni Flash","family":"qwen","attachment":false,"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"]},"open_weights":false,"cost":{"input":0.43,"output":1.66,"input_audio":3.81,"output_audio":15.11},"limit":{"context":65536,"output":16384}},"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":1.4,"output":5.6},"limit":{"context":131072,"output":8192}},"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-04","release_date":"2025-04","last_updated":"2025-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.7,"output":2.8,"reasoning":8.4},"limit":{"context":131072,"output":32768}},"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}},"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-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}},"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"]},"open_weights":false,"cost":{"input":2.46,"output":7.37},"limit":{"context":16384,"output":8192}},"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,"cost":{"input":0.8,"output":3.2},"limit":{"context":131072,"output":8192}},"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":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.3,"output":1.5},"limit":{"context":1000000,"output":65536}},"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":"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-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"]},"open_weights":true,"cost":{"input":0.35,"output":1.4},"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}},"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-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.5,"output":2},"limit":{"context":131072,"output":32768}},"qwen-plus-character-ja":{"id":"qwen-plus-character-ja","name":"Qwen Plus Character (Japanese)","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"]},"open_weights":false,"cost":{"input":0.5,"output":1.4},"limit":{"context":8192,"output":512}},"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,"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.52,"output":1.99,"input_audio":4.57,"output_audio":18.13},"limit":{"context":65536,"output":16384}},"qwen3-vl-30b-a3b":{"id":"qwen3-vl-30b-a3b","name":"Qwen3-VL 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","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.2,"output":0.8,"reasoning":2.4},"limit":{"context":131072,"output":32768}},"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-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-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}},"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":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}},"qwen-turbo":{"id":"qwen-turbo","name":"Qwen Turbo","family":"qwen","attachment":false,"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.05,"output":0.2,"reasoning":0.5},"limit":{"context":1000000,"output":16384}},"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":0.16,"output":0.49},"limit":{"context":16384,"output":8192}},"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":"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}},"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","video"],"output":["text"]},"open_weights":false,"cost":{"input":0.4,"output":2.4,"reasoning":2.4},"limit":{"context":1000000,"output":65536}},"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,"cost":{"input":2.8,"output":8.4},"limit":{"context":131072,"output":8192}},"qvq-max":{"id":"qvq-max","name":"QVQ Max","family":"qvq","attachment":false,"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"]},"open_weights":false,"cost":{"input":1.2,"output":4.8},"limit":{"context":131072,"output":8192}},"qwen3-14b":{"id":"qwen3-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":true,"cost":{"input":0.35,"output":1.4,"reasoning":4.2},"limit":{"context":131072,"output":8192}}}},"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":0.1,"output":0},"limit":{"context":32768,"output":4096}},"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,"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}},"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":"2026-03-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.9,"output":0.9},"limit":{"context":100000,"output":16384}},"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"]},"open_weights":true,"cost":{"input":0.6,"output":3.6},"limit":{"context":256000,"output":16384}},"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,"release_date":"2026-01-07","last_updated":"2026-03-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.4,"output":2},"limit":{"context":256000,"output":16384}},"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}},"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"]},"open_weights":true,"cost":{"input":0.2,"output":0.2},"limit":{"context":128000,"output":4096}},"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,"cost":{"input":0.003,"output":0},"limit":{"context":0,"output":8192}},"voxtral-small-24b-2507":{"id":"voxtral-small-24b-2507","name":"Voxtral Small 24B 2507","family":"voxtral","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"]},"open_weights":true,"cost":{"input":0.15,"output":0.35},"limit":{"context":32000,"output":16384}},"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":"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}},"bge-multilingual-gemma2":{"id":"bge-multilingual-gemma2","name":"BGE Multilingual Gemma2","family":"gemma","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}},"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":true,"knowledge":"2025-04","release_date":"2025-04","last_updated":"2026-03-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.2,"output":0.8},"limit":{"context":128000,"output":32768}},"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":false,"tool_call":true,"temperature":true,"release_date":"2025-06-20","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.15,"output":0.35},"limit":{"context":128000,"output":32768}},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"GPT-OSS 120B","family":"gpt-oss","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2024-01-01","last_updated":"2026-03-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.15,"output":0.6},"limit":{"context":128000,"output":32768}},"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}},"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":true,"knowledge":"2023-12","release_date":"2025-01-01","last_updated":"2026-03-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.2,"output":0.2},"limit":{"context":128000,"output":16384}}}},"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,"structured_output":false,"release_date":"2024-08-01","last_updated":"2024-08-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.1003,"output":0.1003},"limit":{"context":128000,"input":128000,"output":4096}},"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,"structured_output":false,"release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.02,"output":0.03},"limit":{"context":128000,"input":128000,"output":16384}},"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":14.994,"output":75.004},"limit":{"context":200000,"input":200000,"output":32000}},"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,"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}},"grok-3-mini-fast-beta":{"id":"grok-3-mini-fast-beta","name":"Grok 3 Mini Fast Beta","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}},"MiniMax-M2":{"id":"MiniMax-M2","name":"MiniMax M2","attachment":false,"reasoning":true,"tool_call":false,"structured_output":false,"release_date":"2025-10-25","last_updated":"2025-10-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.17,"output":1.53},"limit":{"context":200000,"input":200000,"output":131072}},"command-a-reasoning-08-2025":{"id":"command-a-reasoning-08-2025","name":"Cohere Command A (08/2025)","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}},"brave":{"id":"brave","name":"Brave (Answers)","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}},"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"]},"open_weights":false,"cost":{"input":2.5,"output":2.5},"limit":{"context":8192,"input":8192,"output":8192}},"Llama-3.3-70B-Nova":{"id":"Llama-3.3-70B-Nova","name":"Llama 3.3 70B Nova","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}},"gemini-exp-1206":{"id":"gemini-exp-1206","name":"Gemini 2.0 Pro 1206","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"]},"open_weights":false,"cost":{"input":1.258,"output":4.998},"limit":{"context":2097152,"input":2097152,"output":8192}},"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":4.998,"output":25.007},"limit":{"context":200000,"input":200000,"output":32000}},"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"]},"open_weights":false,"cost":{"input":9.996,"output":19.992},"limit":{"context":1000000,"input":1000000,"output":1000000}},"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"]},"open_weights":false,"cost":{"input":0.1989,"output":0.408},"limit":{"context":256000,"input":256000,"output":4096}},"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,"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}},"yi-large":{"id":"yi-large","name":"Yi Large","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"]},"open_weights":false,"cost":{"input":3.196,"output":3.196},"limit":{"context":32000,"input":32000,"output":4096}},"auto-model-premium":{"id":"auto-model-premium","name":"Auto model (Premium)","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}},"azure-gpt-4o":{"id":"azure-gpt-4o","name":"Azure gpt-4o","attachment":true,"reasoning":false,"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":2.499,"output":9.996},"limit":{"context":128000,"input":128000,"output":16384}},"deepseek-v3-0324":{"id":"deepseek-v3-0324","name":"DeepSeek Chat 0324","attachment":false,"reasoning":false,"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}},"claude-3-5-haiku-20241022":{"id":"claude-3-5-haiku-20241022","name":"Claude 3.5 Haiku","attachment":true,"reasoning":false,"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}},"doubao-seed-1-8-251215":{"id":"doubao-seed-1-8-251215","name":"Doubao Seed 1.8","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.612,"output":6.12},"limit":{"context":128000,"input":128000,"output":8192}},"doubao-seed-1-6-250615":{"id":"doubao-seed-1-6-250615","name":"Doubao Seed 1.6","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"]},"open_weights":false,"cost":{"input":0.204,"output":0.51},"limit":{"context":256000,"input":256000,"output":16384}},"ernie-x1.1-preview":{"id":"ernie-x1.1-preview","name":"ERNIE X1.1","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}},"ernie-5.0-thinking-preview":{"id":"ernie-5.0-thinking-preview","name":"Ernie 5.0 Thinking Preview","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"]},"open_weights":false,"cost":{"input":1.1,"output":2},"limit":{"context":128000,"input":128000,"output":16384}},"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"]},"open_weights":false,"cost":{"input":0.1394,"output":0.1394},"limit":{"context":128000,"input":128000,"output":4096}},"fastgpt":{"id":"fastgpt","name":"Web Answer","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2023-08-01","last_updated":"2024-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":7.5,"output":7.5},"limit":{"context":32768,"input":32768,"output":32768}},"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,"structured_output":false,"release_date":"2025-06-15","last_updated":"2025-06-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.204,"output":2.04},"limit":{"context":256000,"input":256000,"output":16384}},"gemini-2.0-flash-001":{"id":"gemini-2.0-flash-001","name":"Gemini 2.0 Flash","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}},"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":14.994,"output":75.004},"limit":{"context":200000,"input":200000,"output":32000}},"Llama-3.3-70B-RAWMAW":{"id":"Llama-3.3-70B-RAWMAW","name":"Llama 3.3 70B RAWMAW","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-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,"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":220600,"input":220600,"output":65536}},"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,"cost":{"input":2.992,"output":14.994},"limit":{"context":200000,"input":200000,"output":8192}},"yi-medium-200k":{"id":"yi-medium-200k","name":"Yi Medium 200k","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}},"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,"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}},"phi-4-mini-instruct":{"id":"phi-4-mini-instruct","name":"Phi 4 Mini","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":16384}},"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,"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}},"ernie-x1-32k":{"id":"ernie-x1-32k","name":"Ernie X1 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,"cost":{"input":0.33,"output":1.32},"limit":{"context":32000,"input":32000,"output":16384}},"deepseek-chat":{"id":"deepseek-chat","name":"DeepSeek V3/Deepseek Chat","attachment":true,"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}},"glm-z1-air":{"id":"glm-z1-air","name":"GLM Z1 Air","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.07,"output":0.07},"limit":{"context":32000,"input":32000,"output":16384}},"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,"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}},"glm-4-air":{"id":"glm-4-air","name":"GLM-4 Air","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}},"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"]},"open_weights":false,"cost":{"input":0.493,"output":0.493},"limit":{"context":32768,"input":32768,"output":16384}},"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,"cost":{"input":0.306,"output":1.003},"limit":{"context":1000000,"input":1000000,"output":8192}},"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"]},"open_weights":false,"cost":{"input":0.4,"output":1.4},"limit":{"context":32768,"input":32768,"output":32768}},"doubao-1.5-pro-32k":{"id":"doubao-1.5-pro-32k","name":"Doubao 1.5 Pro 32k","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}},"venice-uncensored:web":{"id":"venice-uncensored:web","name":"Venice Uncensored Web","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}},"glm-4":{"id":"glm-4","name":"GLM-4","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}},"qwen-max":{"id":"qwen-max","name":"Qwen 2.5 Max","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}},"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":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}},"jamba-large-1.6":{"id":"jamba-large-1.6","name":"Jamba Large 1.6","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}},"qwen-plus":{"id":"qwen-plus","name":"Qwen Plus","attachment":false,"reasoning":true,"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}},"qwen25-vl-72b-instruct":{"id":"qwen25-vl-72b-instruct","name":"Qwen25 VL 72b","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"]},"open_weights":false,"cost":{"input":0.69989,"output":0.69989},"limit":{"context":32000,"input":32000,"output":32768}},"claude-sonnet-4-thinking:64000":{"id":"claude-sonnet-4-thinking:64000","name":"Claude 4 Sonnet Thinking (64K)","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}},"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}},"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,"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-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":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}},"universal-summarizer":{"id":"universal-summarizer","name":"Universal Summarizer","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}},"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":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}},"sarvan-medium":{"id":"sarvan-medium","name":"Sarvam Medium","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"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}},"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":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}},"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}},"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,"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}},"Llama-3.3-70B-Fallen-v1":{"id":"Llama-3.3-70B-Fallen-v1","name":"Llama 3.3 70B Fallen 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":0.306,"output":0.306},"limit":{"context":32768,"input":32768,"output":16384}},"qwen3-vl-235b-a22b-thinking":{"id":"qwen3-vl-235b-a22b-thinking","name":"Qwen3 VL 235B A22B Thinking","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"]},"open_weights":false,"cost":{"input":0.5,"output":6},"limit":{"context":32768,"input":32768,"output":32768}},"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":true,"release_date":"2025-07-15","last_updated":"2025-07-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":2.992,"output":14.994},"limit":{"context":200000,"input":200000,"output":64000}},"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":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}},"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":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":1000000,"input":1000000,"output":64000}},"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"]},"open_weights":false,"cost":{"input":0.306,"output":0.306},"limit":{"context":32768,"input":32768,"output":16384}},"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}},"gemini-2.5-pro":{"id":"gemini-2.5-pro","name":"Gemini 2.5 Pro","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":2.5,"output":10},"limit":{"context":1048756,"input":1048756,"output":65536}},"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":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-4-plus-0111":{"id":"glm-4-plus-0111","name":"GLM 4 Plus 0111","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":9.996,"output":9.996},"limit":{"context":128000,"input":128000,"output":4096}},"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}},"deepseek-r1-sambanova":{"id":"deepseek-r1-sambanova","name":"DeepSeek R1 Fast","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}},"deepseek-r1":{"id":"deepseek-r1","name":"DeepSeek R1","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}},"doubao-1-5-thinking-pro-250415":{"id":"doubao-1-5-thinking-pro-250415","name":"Doubao 1.5 Thinking Pro","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"]},"open_weights":false,"cost":{"input":0.6,"output":2.4},"limit":{"context":128000,"input":128000,"output":16384}},"sonar-pro":{"id":"sonar-pro","name":"Perplexity Pro","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}},"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"]},"open_weights":false,"cost":{"input":0.42,"output":0.42},"limit":{"context":32768,"input":32768,"output":96000}},"deepseek-chat-cheaper":{"id":"deepseek-chat-cheaper","name":"DeepSeek V3/Chat Cheaper","attachment":true,"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}},"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,"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}},"azure-gpt-4o-mini":{"id":"azure-gpt-4o-mini","name":"Azure gpt-4o-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.1496,"output":0.595},"limit":{"context":128000,"input":128000,"output":16384}},"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}},"claude-opus-4-thinking":{"id":"claude-opus-4-thinking","name":"Claude 4 Opus Thinking","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"]},"open_weights":false,"cost":{"input":14.994,"output":75.004},"limit":{"context":200000,"input":200000,"output":32000}},"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"]},"open_weights":false,"cost":{"input":0.306,"output":0.306},"limit":{"context":32768,"input":32768,"output":16384}},"doubao-seed-code-preview-latest":{"id":"doubao-seed-code-preview-latest","name":"Doubao Seed Code Preview","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}},"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"]},"open_weights":false,"cost":{"input":0.306,"output":0.306},"limit":{"context":32768,"input":32768,"output":16384}},"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}},"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,"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}},"hunyuan-t1-latest":{"id":"hunyuan-t1-latest","name":"Hunyuan T1","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}},"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}},"asi1-mini":{"id":"asi1-mini","name":"ASI1 Mini","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}},"ernie-5.0-thinking-latest":{"id":"ernie-5.0-thinking-latest","name":"Ernie 5.0 Thinking","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"]},"open_weights":false,"cost":{"input":1.1,"output":2},"limit":{"context":128000,"input":128000,"output":16384}},"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}},"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,"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}},"Gemma-3-27B-Nidum-Uncensored":{"id":"Gemma-3-27B-Nidum-Uncensored","name":"Gemma 3 27B Nidum Uncensored","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}},"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":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}},"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,"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}},"gemini-3-pro-image-preview":{"id":"gemini-3-pro-image-preview","name":"Gemini 3 Pro Image","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"]},"open_weights":false,"cost":{"input":2,"output":12},"limit":{"context":1048756,"input":1048756,"output":65536}},"Gemma-3-27B-CardProjector-v4":{"id":"Gemma-3-27B-CardProjector-v4","name":"Gemma 3 27B CardProjector v4","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}},"jamba-mini-1.7":{"id":"jamba-mini-1.7","name":"Jamba Mini 1.7","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":0.1989,"output":0.408},"limit":{"context":256000,"input":256000,"output":4096}},"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":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-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,"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}},"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":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}},"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"]},"open_weights":false,"cost":{"input":1.292,"output":4.998},"limit":{"context":128000,"input":128000,"output":65536}},"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,"cost":{"input":0.1462,"output":0.8738},"limit":{"context":256000,"input":256000,"output":32000}},"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":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.15,"output":0.6},"limit":{"context":1048756,"input":1048756,"output":65536}},"sonar-deep-research":{"id":"sonar-deep-research","name":"Perplexity Deep Research","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}},"Gemma-3-27B-it":{"id":"Gemma-3-27B-it","name":"Gemma 3 27B IT","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}},"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}},"Gemma-3-27B-Glitter":{"id":"Gemma-3-27B-Glitter","name":"Gemma 3 27B Glitter","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}},"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":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}},"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,"release_date":"2025-02-20","last_updated":"2025-02-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.2,"output":0.5},"limit":{"context":256000,"input":256000,"output":32768}},"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":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}},"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"Gemini 2.5 Flash","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}},"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}},"ernie-4.5-8k-preview":{"id":"ernie-4.5-8k-preview","name":"Ernie 4.5 8k Preview","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-03-25","last_updated":"2025-03-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.66,"output":2.6},"limit":{"context":8000,"input":8000,"output":16384}},"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,"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}},"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":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}},"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,"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}},"v0-1.5-lg":{"id":"v0-1.5-lg","name":"v0 1.5 LG","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}},"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}},"KAT-Coder-Pro-V1":{"id":"KAT-Coder-Pro-V1","name":"KAT Coder Pro 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":1.5,"output":6},"limit":{"context":256000,"input":256000,"output":32768}},"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":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}},"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":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}},"gemini-2.0-flash-exp-image-generation":{"id":"gemini-2.0-flash-exp-image-generation","name":"Gemini Text + Image","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":0.2,"output":0.8},"limit":{"context":32767,"input":32767,"output":8192}},"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"]},"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}},"study_gpt-chatgpt-4o-latest":{"id":"study_gpt-chatgpt-4o-latest","name":"Study Mode","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"]},"open_weights":false,"cost":{"input":4.998,"output":14.994},"limit":{"context":200000,"input":200000,"output":16384}},"glm-4-airx":{"id":"glm-4-airx","name":"GLM-4 AirX","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":2.006,"output":2.006},"limit":{"context":8000,"input":8000,"output":4096}},"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"]},"open_weights":false,"cost":{"input":0.2006,"output":0.408},"limit":{"context":8000,"input":8000,"output":4096}},"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":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}},"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":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}},"deepseek-reasoner":{"id":"deepseek-reasoner","name":"DeepSeek Reasoner","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}},"glm-z1-airx":{"id":"glm-z1-airx","name":"GLM Z1 AirX","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}},"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"]},"open_weights":false,"cost":{"input":0.1989,"output":0.408},"limit":{"context":256000,"input":256000,"output":4096}},"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,"cost":{"input":14.994,"output":75.004},"limit":{"context":200000,"input":200000,"output":32000}},"grok-3-beta":{"id":"grok-3-beta","name":"Grok 3 Beta","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}},"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":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}},"sonar":{"id":"sonar","name":"Perplexity Simple","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":1.003,"output":1.003},"limit":{"context":127000,"input":127000,"output":128000}},"z-image-turbo":{"id":"z-image-turbo","name":"Z Image Turbo","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"]},"open_weights":false,"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,"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}},"jamba-large":{"id":"jamba-large","name":"Jamba Large","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}},"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"]},"open_weights":false,"cost":{"input":3,"output":15},"limit":{"context":128000,"input":128000,"output":8192}},"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,"cost":{"input":0.495,"output":1.43},"limit":{"context":32000,"input":32000,"output":16384}},"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,"cost":{"input":0.01,"output":0.01},"limit":{"context":16384,"input":16384,"output":16384}},"doubao-seed-1-6-flash-250615":{"id":"doubao-seed-1-6-flash-250615","name":"Doubao Seed 1.6 Flash","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"]},"open_weights":false,"cost":{"input":0.0374,"output":0.374},"limit":{"context":256000,"input":256000,"output":16384}},"qwq-32b":{"id":"qwq-32b","name":"Qwen: QwQ 32B","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}},"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":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}},"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":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}},"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,"cost":{"input":0.165,"output":0.66},"limit":{"context":32000,"input":32000,"output":16384}},"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"]},"open_weights":false,"cost":{"input":0.6,"output":2.2},"limit":{"context":128000,"input":128000,"output":65536}},"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"]},"open_weights":false,"cost":{"input":0.306,"output":0.306},"limit":{"context":32768,"input":32768,"output":16384}},"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,"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}},"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}},"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":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-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":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":131072,"input":131072,"output":98304}},"Llama-3.3-70B-Bigger-Body":{"id":"Llama-3.3-70B-Bigger-Body","name":"Llama 3.3 70B Bigger Body","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}},"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":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}},"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,"cost":{"input":0.187,"output":0.374},"limit":{"context":24000,"input":24000,"output":8192}},"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,"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}},"GLM-4.6-Derestricted-v5":{"id":"GLM-4.6-Derestricted-v5","name":"GLM 4.6 Derestricted v5","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}},"glm-4-plus":{"id":"glm-4-plus","name":"GLM-4 Plus","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"]},"open_weights":false,"cost":{"input":7.497,"output":7.497},"limit":{"context":128000,"input":128000,"output":4096}},"Gemma-3-27B-Big-Tiger-v3":{"id":"Gemma-3-27B-Big-Tiger-v3","name":"Gemma 3 27B Big Tiger v3","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}},"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,"cost":{"input":5,"output":5},"limit":{"context":16384,"input":16384,"output":16384}},"hidream":{"id":"hidream","name":"Hidream","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2024-01-01","last_updated":"2024-01-01","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0}},"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,"cost":{"input":1.2002,"output":6.001},"limit":{"context":256000,"input":256000,"output":32768}},"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,"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}},"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,"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},"limit":{"context":200000,"input":200000,"output":64000}},"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}},"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,"cost":{"input":0.3,"output":2.5},"limit":{"context":1048756,"input":1048756,"output":65536}},"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}},"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,"cost":{"input":5,"output":25},"limit":{"context":131072,"input":131072,"output":131072}},"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,"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}},"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}},"claude-3-7-sonnet-thinking":{"id":"claude-3-7-sonnet-thinking","name":"Claude 3.7 Sonnet Thinking","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":16000}},"claude-opus-4-thinking:8192":{"id":"claude-opus-4-thinking:8192","name":"Claude 4 Opus 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":14.994,"output":75.004},"limit":{"context":200000,"input":200000,"output":32000}},"claude-sonnet-4-thinking:1024":{"id":"claude-sonnet-4-thinking:1024","name":"Claude 4 Sonnet Thinking (1K)","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}},"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":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}},"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"]},"open_weights":false,"cost":{"input":2.5,"output":11},"limit":{"context":128000,"input":128000,"output":65536}},"ernie-x1-32k-preview":{"id":"ernie-x1-32k-preview","name":"Ernie X1 32k","attachment":false,"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}},"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":0.306,"output":0.306},"limit":{"context":32768,"input":32768,"output":16384}},"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":0.1,"output":0.2},"limit":{"context":128000,"input":128000,"output":32768}},"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":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}},"claude-opus-4-thinking:1024":{"id":"claude-opus-4-thinking:1024","name":"Claude 4 Opus Thinking (1K)","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}},"claude-sonnet-4-20250514":{"id":"claude-sonnet-4-20250514","name":"Claude 4 Sonnet","attachment":true,"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}},"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":0.306,"output":0.306},"limit":{"context":32768,"input":32768,"output":16384}},"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":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}},"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":5,"output":5},"limit":{"context":8192,"input":8192,"output":8192}},"step-2-16k-exp":{"id":"step-2-16k-exp","name":"Step-2 16k Exp","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"]},"open_weights":false,"cost":{"input":7.004,"output":19.992},"limit":{"context":16000,"input":16000,"output":8192}},"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":0.306,"output":0.306},"limit":{"context":32768,"input":32768,"output":16384}},"claude-sonnet-4-thinking":{"id":"claude-sonnet-4-thinking","name":"Claude 4 Sonnet Thinking","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}},"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"]},"open_weights":false,"cost":{"input":0.799,"output":1.445},"limit":{"context":256000,"input":256000,"output":16384}},"claude-3-7-sonnet-20250219":{"id":"claude-3-7-sonnet-20250219","name":"Claude 3.7 Sonnet","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}},"learnlm-1.5-pro-experimental":{"id":"learnlm-1.5-pro-experimental","name":"Gemini LearnLM Experimental","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"]},"open_weights":false,"cost":{"input":3.502,"output":10.506},"limit":{"context":32767,"input":32767,"output":8192}},"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,"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}},"chroma":{"id":"chroma","name":"Chroma","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"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}},"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":0.306,"output":0.306},"limit":{"context":32768,"input":32768,"output":16384}},"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":0.306,"output":0.306},"limit":{"context":32768,"input":32768,"output":16384}},"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}},"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":0.4,"output":0.4},"limit":{"context":128000,"input":128000,"output":16384}},"step-3":{"id":"step-3","name":"Step-3","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}},"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"]},"open_weights":false,"cost":{"input":0.306,"output":0.306},"limit":{"context":32768,"input":32768,"output":16384}},"auto-model":{"id":"auto-model","name":"Auto model","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":0,"output":0},"limit":{"context":1000000,"input":1000000,"output":1000000}},"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"]},"open_weights":false,"cost":{"input":14.994,"output":75.004},"limit":{"context":200000,"input":200000,"output":32000}},"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"]},"open_weights":false,"cost":{"input":0.306,"output":0.306},"limit":{"context":32768,"input":32768,"output":16384}},"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"]},"open_weights":false,"cost":{"input":0.157,"output":0.157},"limit":{"context":32768,"input":32768,"output":32768}},"kimi-thinking-preview":{"id":"kimi-thinking-preview","name":"Kimi Thinking Preview","attachment":true,"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":31.46,"output":31.46},"limit":{"context":128000,"input":128000,"output":16384}},"qwen-turbo":{"id":"qwen-turbo","name":"Qwen Turbo","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}},"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":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}},"claude-opus-4-thinking:32768":{"id":"claude-opus-4-thinking:32768","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":14.994,"output":75.004},"limit":{"context":200000,"input":200000,"output":32000}},"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"]},"open_weights":false,"cost":{"input":0.306,"output":0.306},"limit":{"context":32768,"input":32768,"output":16384}},"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,"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}},"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}},"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.07,"output":0.11},"limit":{"context":128000,"input":128000,"output":16384}},"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":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.893},"limit":{"context":256000,"input":256000,"output":128000}},"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"]},"open_weights":false,"cost":{"input":0.4,"output":1.7},"limit":{"context":128000,"input":128000,"output":65536}},"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":2.5,"output":2.5},"limit":{"context":4096,"input":4096,"output":4096}},"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":3,"output":15},"limit":{"context":200000,"input":200000,"output":64000}},"glm-4.1v-thinking-flash":{"id":"glm-4.1v-thinking-flash","name":"GLM 4.1V Thinking Flash","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}},"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}},"GLM-4.5-Air-Derestricted":{"id":"GLM-4.5-Air-Derestricted","name":"GLM 4.5 Air Derestricted","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}},"azure-o3-mini":{"id":"azure-o3-mini","name":"Azure o3-mini","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}},"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.306,"output":0.306},"limit":{"context":32768,"input":32768,"output":16384}},"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":0.306,"output":0.306},"limit":{"context":32768,"input":32768,"output":16384}},"QwQ-32B-ArliAI-RpR-v1":{"id":"QwQ-32B-ArliAI-RpR-v1","name":"QwQ 32b Arli V1","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}},"claude-opus-4-20250514":{"id":"claude-opus-4-20250514","name":"Claude 4 Opus","attachment":true,"reasoning":false,"tool_call":true,"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}},"yi-lightning":{"id":"yi-lightning","name":"Yi Lightning","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"]},"open_weights":false,"cost":{"input":0.2006,"output":0.2006},"limit":{"context":12000,"input":12000,"output":4096}},"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":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}},"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}},"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":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}},"grok-3-mini-beta":{"id":"grok-3-mini-beta","name":"Grok 3 Mini Beta","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}},"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"]},"open_weights":false,"cost":{"input":9.996,"output":19.992},"limit":{"context":1000000,"input":1000000,"output":1000000}},"claude-sonnet-4-5-20250929-thinking":{"id":"claude-sonnet-4-5-20250929-thinking","name":"Claude Sonnet 4.5 Thinking","attachment":true,"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"]},"open_weights":false,"cost":{"input":2.992,"output":14.994},"limit":{"context":1000000,"input":1000000,"output":64000}},"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}},"kimi-k2-instruct-fast":{"id":"kimi-k2-instruct-fast","name":"Kimi K2 0711 Fast","attachment":true,"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}},"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"]},"open_weights":false,"cost":{"input":0.2006,"output":0.2006},"limit":{"context":1000000,"input":1000000,"output":4096}},"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}},"jamba-large-1.7":{"id":"jamba-large-1.7","name":"Jamba Large 1.7","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}},"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}},"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":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.0-flash-lite":{"id":"gemini-2.0-flash-lite","name":"Gemini 2.0 Flash Lite","attachment":true,"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}},"azure-gpt-4-turbo":{"id":"azure-gpt-4-turbo","name":"Azure gpt-4-turbo","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}},"Baichuan-M2":{"id":"Baichuan-M2","name":"Baichuan M2 32B Medical","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":15.73,"output":15.73},"limit":{"context":32768,"input":32768,"output":32768}},"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}},"sonar-reasoning-pro":{"id":"sonar-reasoning-pro","name":"Perplexity Reasoning Pro","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}},"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":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}},"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}},"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"]},"open_weights":false,"cost":{"input":0.306,"output":0.306},"limit":{"context":32768,"input":32768,"output":16384}},"Baichuan4-Turbo":{"id":"Baichuan4-Turbo","name":"Baichuan 4 Turbo","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":2.42,"output":2.42},"limit":{"context":128000,"input":128000,"output":32768}},"doubao-1.5-vision-pro-32k":{"id":"doubao-1.5-vision-pro-32k","name":"Doubao 1.5 Vision Pro 32k","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}},"inflection/inflection-3-pi":{"id":"inflection/inflection-3-pi","name":"Inflection 3 Pi","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"]},"open_weights":false,"cost":{"input":2.499,"output":9.996},"limit":{"context":8000,"input":8000,"output":4096}},"inflection/inflection-3-productivity":{"id":"inflection/inflection-3-productivity","name":"Inflection 3 Productivity","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"]},"open_weights":false,"cost":{"input":2.499,"output":9.996},"limit":{"context":8000,"input":8000,"output":4096}},"essentialai/rnj-1-instruct":{"id":"essentialai/rnj-1-instruct","name":"RNJ-1 Instruct 8B","family":"rnj","attachment":false,"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}},"LLM360/K2-Think":{"id":"LLM360/K2-Think","name":"K2-Think","family":"kimi-thinking","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}},"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"]},"open_weights":false,"cost":{"input":0.3,"output":1.9},"limit":{"context":128000,"input":128000,"output":65535}},"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"]},"open_weights":false,"cost":{"input":0.85,"output":3.3},"limit":{"context":131000,"input":131000,"output":65535}},"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"]},"open_weights":false,"cost":{"input":0.6,"output":3.6},"limit":{"context":258048,"input":258048,"output":65536}},"TEE/glm-5":{"id":"TEE/glm-5","name":"GLM 5 TEE","family":"glm","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2026-02-11","last_updated":"2026-02-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":1.2,"output":3.5},"limit":{"context":203000,"input":203000,"output":65535}},"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}},"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,"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}},"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"]},"open_weights":false,"cost":{"input":0.15,"output":0.44999999999999996},"limit":{"context":262000,"input":262000,"output":32768}},"TEE/deepseek-v3.1":{"id":"TEE/deepseek-v3.1","name":"DeepSeek V3.1 TEE","family":"deepseek","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"]},"open_weights":false,"cost":{"input":1,"output":2.5},"limit":{"context":164000,"input":164000,"output":8192}},"TEE/llama3-3-70b":{"id":"TEE/llama3-3-70b","name":"Llama 3.3 70B","family":"llama","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":2,"output":2},"limit":{"context":128000,"input":128000,"output":16384}},"TEE/glm-4.6":{"id":"TEE/glm-4.6","name":"GLM 4.6 TEE","family":"glm","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"]},"open_weights":false,"cost":{"input":0.75,"output":2},"limit":{"context":203000,"input":203000,"output":65535}},"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":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}},"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,"cost":{"input":0.2,"output":0.8},"limit":{"context":131072,"input":131072,"output":8192}},"TEE/deepseek-v3.2":{"id":"TEE/deepseek-v3.2","name":"DeepSeek V3.2 TEE","family":"deepseek","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.5,"output":1},"limit":{"context":164000,"input":164000,"output":65536}},"TEE/gpt-oss-20b":{"id":"TEE/gpt-oss-20b","name":"GPT-OSS 20B TEE","family":"gpt-oss","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.2,"output":0.8},"limit":{"context":131072,"input":131072,"output":8192}},"TEE/qwen3-coder":{"id":"TEE/qwen3-coder","name":"Qwen3 Coder 480B TEE","family":"qwen","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"]},"open_weights":false,"cost":{"input":1.5,"output":2},"limit":{"context":128000,"input":128000,"output":32768}},"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":false,"structured_output":false,"release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.15,"output":0.5},"limit":{"context":203000,"input":203000,"output":65535}},"TEE/gpt-oss-120b":{"id":"TEE/gpt-oss-120b","name":"GPT-OSS 120B TEE","family":"gpt-oss","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":2,"output":2},"limit":{"context":131072,"input":131072,"output":16384}},"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"]},"open_weights":false,"cost":{"input":2,"output":2},"limit":{"context":128000,"input":128000,"output":65536}},"TEE/kimi-k2-thinking":{"id":"TEE/kimi-k2-thinking","name":"Kimi K2 Thinking TEE","family":"kimi-thinking","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}},"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"]},"open_weights":false,"cost":{"input":0.49299999999999994,"output":0.49299999999999994},"limit":{"context":16384,"input":16384,"output":16384}},"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,"structured_output":true,"release_date":"2025-12-01","last_updated":"2025-12-01","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-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":1,"output":2.5},"limit":{"context":160000,"input":160000,"output":16384}},"deepseek/deepseek-v3.2-speciale":{"id":"deepseek/deepseek-v3.2-speciale","name":"DeepSeek V3.2 Speciale","family":"deepseek","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"]},"open_weights":false,"cost":{"input":0.27999999999999997,"output":0.42000000000000004},"limit":{"context":163000,"input":163000,"output":65536}},"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":0.49299999999999994,"output":0.49299999999999994},"limit":{"context":16384,"input":16384,"output":32768}},"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","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}},"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":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}},"Steelskull/L3.3-Nevoria-R1-70b":{"id":"Steelskull/L3.3-Nevoria-R1-70b","name":"Steelskull Nevoria R1 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"]},"open_weights":false,"cost":{"input":0.49299999999999994,"output":0.49299999999999994},"limit":{"context":16384,"input":16384,"output":16384}},"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,"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}},"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,"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}},"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"]},"open_weights":false,"cost":{"input":0.49299999999999994,"output":0.49299999999999994},"limit":{"context":16384,"input":16384,"output":16384}},"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":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}},"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"]},"open_weights":false,"cost":{"input":0.3,"output":1.2},"limit":{"context":32768,"input":32768,"output":4000}},"pamanseau/OpenReasoning-Nemotron-32B":{"id":"pamanseau/OpenReasoning-Nemotron-32B","name":"OpenReasoning Nemotron 32B","family":"nemotron","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}},"arcee-ai/trinity-mini":{"id":"arcee-ai/trinity-mini","name":"Trinity Mini","family":"trinity-mini","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.045000000000000005,"output":0.15},"limit":{"context":131072,"input":131072,"output":8192}},"arcee-ai/trinity-large":{"id":"arcee-ai/trinity-large","name":"Trinity Large","family":"trinity","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"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}},"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":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}},"deepcogito/cogito-v1-preview-qwen-32B":{"id":"deepcogito/cogito-v1-preview-qwen-32B","name":"Cogito v1 Preview Qwen 32B","family":"qwen","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"]},"open_weights":false,"cost":{"input":1.7999999999999998,"output":1.7999999999999998},"limit":{"context":128000,"input":128000,"output":32768}},"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}},"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,"structured_output":false,"release_date":"2025-04-13","last_updated":"2025-04-13","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":2.5,"output":2.5},"limit":{"context":128000,"input":128000,"output":16384}},"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,"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/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"]},"open_weights":false,"cost":{"input":0.3,"output":0.3},"limit":{"context":128000,"input":128000,"output":32768}},"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"]},"open_weights":false,"cost":{"input":0.2006,"output":0.39949999999999997},"limit":{"context":128000,"input":128000,"output":8192}},"NousResearch 2/hermes-4-405b":{"id":"NousResearch 2/hermes-4-405b","name":"Hermes 4 Large","family":"nousresearch","attachment":false,"reasoning":false,"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/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":{"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}},"soob3123/Veiled-Calla-12B":{"id":"soob3123/Veiled-Calla-12B","name":"Veiled Calla 12B","family":"llama","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}},"soob3123/GrayLine-Qwen3-8B":{"id":"soob3123/GrayLine-Qwen3-8B","name":"Grayline Qwen3 8B","family":"qwen","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"]},"open_weights":false,"cost":{"input":0.3,"output":0.3},"limit":{"context":16384,"input":16384,"output":32768}},"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,"structured_output":false,"release_date":"2025-05-23","last_updated":"2025-05-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.3,"output":0.3},"limit":{"context":32768,"input":32768,"output":8192}},"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":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}},"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,"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":0.49299999999999994,"output":0.49299999999999994},"limit":{"context":16384,"input":16384,"output":8192}},"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":false,"structured_output":false,"release_date":"2024-12-01","last_updated":"2024-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.49299999999999994,"output":0.49299999999999994},"limit":{"context":16384,"input":16384,"output":8192}},"anthracite-org/magnum-v4-72b":{"id":"anthracite-org/magnum-v4-72b","name":"Magnum v4 72B","family":"llama","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"]},"open_weights":false,"cost":{"input":2.006,"output":2.992},"limit":{"context":16384,"input":16384,"output":8192}},"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,"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}},"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,"structured_output":false,"release_date":"2024-12-01","last_updated":"2024-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.7,"output":0.95},"limit":{"context":16384,"input":16384,"output":16384}},"undi95/remm-slerp-l2-13b":{"id":"undi95/remm-slerp-l2-13b","name":"ReMM SLERP 13B","family":"llama","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}},"MarinaraSpaghetti/NemoMix-Unleashed-12B":{"id":"MarinaraSpaghetti/NemoMix-Unleashed-12B","name":"NemoMix 12B Unleashed","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.49299999999999994,"output":0.49299999999999994},"limit":{"context":32768,"input":32768,"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}},"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.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,"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/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}},"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}},"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,"release_date":"2026-01-29","last_updated":"2026-01-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.15,"output":0.8},"limit":{"context":200000,"input":200000,"output":128000}},"zai-org/glm-5":{"id":"zai-org/glm-5","name":"GLM 5","family":"glm","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"]},"open_weights":true,"cost":{"input":0.3,"output":2.55},"limit":{"context":200000,"input":200000,"output":128000}},"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,"release_date":"2026-03-27","last_updated":"2026-03-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.3,"output":2.55},"limit":{"context":200000,"input":200000,"output":131072}},"zai-org/glm-5.1:thinking":{"id":"zai-org/glm-5.1:thinking","name":"GLM 5.1 Thinking","family":"glm","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"]},"open_weights":true,"cost":{"input":0.3,"output":2.55},"limit":{"context":200000,"input":200000,"output":131072}},"zai-org/glm-5:thinking":{"id":"zai-org/glm-5:thinking","name":"GLM 5 Thinking","family":"glm","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"]},"open_weights":true,"cost":{"input":0.3,"output":2.55},"limit":{"context":200000,"input":200000,"output":128000}},"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,"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,"input":200000,"output":128000}},"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":0.5,"output":0.5},"limit":{"context":32000,"input":32000,"output":8192}},"mlabonne/NeuralDaredevil-8B-abliterated":{"id":"mlabonne/NeuralDaredevil-8B-abliterated","name":"Neural Daredevil 8B abliterated","family":"llama","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":0.44,"output":0.44},"limit":{"context":8192,"input":8192,"output":8192}},"raifle/sorcererlm-8x22b":{"id":"raifle/sorcererlm-8x22b","name":"SorcererLM 8x22B","family":"mixtral","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}},"mistralai/mixtral-8x7b-instruct-v0.1":{"id":"mistralai/mixtral-8x7b-instruct-v0.1","name":"Mixtral 8x7B","family":"mixtral","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"]},"open_weights":false,"cost":{"input":0.27,"output":0.27},"limit":{"context":32768,"input":32768,"output":32768}},"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"]},"open_weights":false,"cost":{"input":0.1989,"output":0.595},"limit":{"context":32000,"input":32000,"output":32768}},"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":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}},"mistralai/devstral-2-123b-instruct-2512":{"id":"mistralai/devstral-2-123b-instruct-2512","name":"Devstral 2 123B","family":"devstral","attachment":false,"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":0.4,"output":1.4},"limit":{"context":262144,"input":262144,"output":65536}},"mistralai/codestral-2508":{"id":"mistralai/codestral-2508","name":"Codestral 2508","family":"codestral","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"]},"open_weights":false,"cost":{"input":0.3,"output":0.8999999999999999},"limit":{"context":256000,"input":256000,"output":32768}},"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.1,"output":0.4},"limit":{"context":262144,"input":262144,"output":32768}},"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"]},"open_weights":false,"cost":{"input":0.25499999999999995,"output":0.25499999999999995},"limit":{"context":32000,"input":32000,"output":8192}},"mistralai/ministral-8b-2512":{"id":"mistralai/ministral-8b-2512","name":"Ministral 8B","family":"ministral","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"]},"open_weights":false,"cost":{"input":0.15,"output":0.15},"limit":{"context":262144,"input":262144,"output":32768}},"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,"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}},"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}},"mistralai/ministral-3b-2512":{"id":"mistralai/ministral-3b-2512","name":"Ministral 3B","family":"ministral","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"]},"open_weights":false,"cost":{"input":0.1,"output":0.1},"limit":{"context":131072,"input":131072,"output":32768}},"mistralai/Mistral-Nemo-Instruct-2407":{"id":"mistralai/Mistral-Nemo-Instruct-2407","name":"Mistral Nemo","family":"mistral-nemo","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.1003,"output":0.1207},"limit":{"context":16384,"input":16384,"output":8192}},"mistralai/mistral-medium-3":{"id":"mistralai/mistral-medium-3","name":"Mistral Medium 3","family":"mistral-medium","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.4,"output":2},"limit":{"context":131072,"input":131072,"output":32768}},"mistralai/mistral-7b-instruct":{"id":"mistralai/mistral-7b-instruct","name":"Mistral 7B Instruct","family":"mistral","attachment":true,"reasoning":false,"tool_call":false,"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}},"mistralai/Devstral-Small-2505":{"id":"mistralai/Devstral-Small-2505","name":"Mistral Devstral Small 2505","family":"devstral","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-small-creative":{"id":"mistralai/mistral-small-creative","name":"Mistral Small Creative","family":"mistral-small","attachment":false,"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}},"mistralai/mistral-large":{"id":"mistralai/mistral-large","name":"Mistral Large 2411","family":"mistral-large","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}},"mistralai/ministral-14b-2512":{"id":"mistralai/ministral-14b-2512","name":"Ministral 14B","family":"ministral","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"]},"open_weights":false,"cost":{"input":0.2,"output":0.2},"limit":{"context":262144,"input":262144,"output":32768}},"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":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.5,"output":0.5},"limit":{"context":32768,"input":32768,"output":4096}},"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":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}},"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,"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}},"meta-llama/llama-4-scout":{"id":"meta-llama/llama-4-scout","name":"Llama 4 Scout","family":"llama","attachment":true,"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}},"meta-llama/llama-4-maverick":{"id":"meta-llama/llama-4-maverick","name":"Llama 4 Maverick","family":"llama","attachment":true,"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.18000000000000002,"output":0.8},"limit":{"context":1048576,"input":1048576,"output":65536}},"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,"structured_output":false,"release_date":"2025-09-25","last_updated":"2025-09-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.9009999999999999,"output":0.9009999999999999},"limit":{"context":131072,"input":131072,"output":16384}},"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":false,"tool_call":false,"structured_output":false,"release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":0.0306,"output":0.0493},"limit":{"context":131072,"input":131072,"output":8192}},"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,"structured_output":false,"release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.0544,"output":0.0544},"limit":{"context":131072,"input":131072,"output":16384}},"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,"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}},"baseten/Kimi-K2-Instruct-FP4":{"id":"baseten/Kimi-K2-Instruct-FP4","name":"Kimi K2 0711 Instruct FP4","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}},"Gryphe/MythoMax-L2-13b":{"id":"Gryphe/MythoMax-L2-13b","name":"MythoMax 13B","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}},"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,"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},"limit":{"context":2000000,"input":2000000,"output":131072}},"x-ai/grok-4-07-09":{"id":"x-ai/grok-4-07-09","name":"Grok 4","family":"grok","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"]},"open_weights":false,"cost":{"input":3,"output":15},"limit":{"context":256000,"input":256000,"output":131072}},"x-ai/grok-4-fast":{"id":"x-ai/grok-4-fast","name":"Grok 4 Fast","family":"grok","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"]},"open_weights":false,"cost":{"input":0.2,"output":0.5},"limit":{"context":2000000,"input":2000000,"output":131072}},"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":false,"structured_output":false,"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},"limit":{"context":256000,"input":256000,"output":131072}},"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,"structured_output":true,"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},"limit":{"context":2000000,"input":2000000,"output":131072}},"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":false,"structured_output":false,"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},"limit":{"context":2000000,"input":2000000,"output":131072}},"tencent/Hunyuan-MT-7B":{"id":"tencent/Hunyuan-MT-7B","name":"Hunyuan MT 7B","family":"hunyuan","attachment":false,"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,"cost":{"input":10,"output":20},"limit":{"context":8192,"input":8192,"output":8192}},"microsoft/wizardlm-2-8x22b":{"id":"microsoft/wizardlm-2-8x22b","name":"WizardLM-2 8x22B","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"]},"open_weights":false,"cost":{"input":0.49299999999999994,"output":0.49299999999999994},"limit":{"context":65536,"input":65536,"output":8192}},"microsoft/MAI-DS-R1-FP8":{"id":"microsoft/MAI-DS-R1-FP8","name":"Microsoft DeepSeek R1","family":"deepseek","attachment":true,"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.3,"output":0.3},"limit":{"context":128000,"input":128000,"output":8192}},"cohere/command-r":{"id":"cohere/command-r","name":"Cohere: Command R","family":"command-r","attachment":false,"reasoning":false,"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":0.476,"output":1.428},"limit":{"context":128000,"input":128000,"output":4096}},"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,"structured_output":false,"release_date":"2024-08-30","last_updated":"2024-08-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":2.856,"output":14.246},"limit":{"context":128000,"input":128000,"output":4096}},"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":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}},"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":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.4,"output":0.8},"limit":{"context":128000,"input":128000,"output":16384}},"nvidia/nemotron-3-nano-30b-a3b":{"id":"nvidia/nemotron-3-nano-30b-a3b","name":"Nvidia Nemotron 3 Nano 30B","family":"nemotron","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}},"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":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}},"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":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}},"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":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.15,"output":0.15},"limit":{"context":128000,"input":128000,"output":16384}},"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":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}},"TheDrummer 2/Anubis-70B-v1":{"id":"TheDrummer 2/Anubis-70B-v1","name":"Anubis 70B v1","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}},"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":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}},"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":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}},"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":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}},"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,"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}},"TheDrummer 2/Rocinante-12B-v1.1":{"id":"TheDrummer 2/Rocinante-12B-v1.1","name":"Rocinante 12b","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.408,"output":0.595},"limit":{"context":16384,"input":16384,"output":8192}},"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":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}},"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":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":0.49299999999999994,"output":0.49299999999999994},"limit":{"context":32768,"input":32768,"output":8192}},"TheDrummer 2/Cydonia-24B-v2":{"id":"TheDrummer 2/Cydonia-24B-v2","name":"The Drummer Cydonia 24B v2","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}},"TheDrummer 2/skyfall-36b-v2":{"id":"TheDrummer 2/skyfall-36b-v2","name":"TheDrummer Skyfall 36B V2","family":"llama","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"]},"open_weights":false,"cost":{"input":0.49299999999999994,"output":0.49299999999999994},"limit":{"context":64000,"input":64000,"output":32768}},"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"]},"open_weights":false,"cost":{"input":0.2,"output":0.7},"limit":{"context":128000,"input":128000,"output":65536}},"deepseek-ai/DeepSeek-V3.1":{"id":"deepseek-ai/DeepSeek-V3.1","name":"DeepSeek V3.1","family":"deepseek","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"]},"open_weights":false,"cost":{"input":0.2,"output":0.7},"limit":{"context":128000,"input":128000,"output":65536}},"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,"structured_output":true,"release_date":"2025-09-22","last_updated":"2025-09-22","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.25,"output":0.7},"limit":{"context":128000,"input":128000,"output":65536}},"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":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}},"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":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}},"deepseek-ai/DeepSeek-R1-0528":{"id":"deepseek-ai/DeepSeek-R1-0528","name":"DeepSeek R1 0528","family":"deepseek","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}},"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,"structured_output":true,"release_date":"2025-08-02","last_updated":"2025-08-02","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.25,"output":0.7},"limit":{"context":128000,"input":128000,"output":65536}},"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-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":2.5,"output":20},"limit":{"context":400000,"input":400000,"output":128000}},"openai/gpt-5.2-chat":{"id":"openai/gpt-5.2-chat","name":"GPT 5.2 Chat","family":"gpt","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"]},"open_weights":false,"cost":{"input":1.75,"output":14},"limit":{"context":400000,"input":400000,"output":16384}},"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,"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/chatgpt-4o-latest":{"id":"openai/chatgpt-4o-latest","name":"ChatGPT 4o","family":"gpt","attachment":true,"reasoning":false,"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":4.998,"output":14.993999999999998},"limit":{"context":128000,"input":128000,"output":16384}},"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,"release_date":"2026-01-01","last_updated":"2026-01-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":21,"output":168},"limit":{"context":400000,"input":400000,"output":128000}},"openai/gpt-5-mini":{"id":"openai/gpt-5-mini","name":"GPT 5 Mini","family":"gpt-mini","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-5-nano":{"id":"openai/gpt-5-nano","name":"GPT 5 Nano","family":"gpt-nano","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.05,"output":0.4},"limit":{"context":400000,"input":400000,"output":128000}},"openai/gpt-4-turbo":{"id":"openai/gpt-4-turbo","name":"GPT-4 Turbo","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"]},"open_weights":false,"cost":{"input":10,"output":30},"limit":{"context":128000,"input":128000,"output":4096}},"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,"release_date":"2026-01-01","last_updated":"2026-01-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":1.75,"output":14},"limit":{"context":400000,"input":400000,"output":128000}},"openai/o3-mini-high":{"id":"openai/o3-mini-high","name":"OpenAI o3-mini (High)","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"]},"open_weights":false,"cost":{"input":0.64,"output":2.588},"limit":{"context":200000,"input":200000,"output":100000}},"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,"release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.1496,"output":0.595},"limit":{"context":128000,"input":128000,"output":16384}},"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,"cost":{"input":9.996,"output":19.992},"limit":{"context":200000,"input":200000,"output":100000}},"openai/gpt-5.1-chat":{"id":"openai/gpt-5.1-chat","name":"GPT 5.1 Chat","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"]},"open_weights":false,"cost":{"input":1.25,"output":10},"limit":{"context":400000,"input":400000,"output":128000}},"openai/o4-mini":{"id":"openai/o4-mini","name":"OpenAI o4-mini","family":"o-mini","attachment":false,"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-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,"release_date":"2026-01-14","last_updated":"2026-01-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":1.75,"output":14},"limit":{"context":400000,"input":400000,"output":128000}},"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":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":0.25,"output":2},"limit":{"context":400000,"input":400000,"output":128000}},"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,"cost":{"input":14.993999999999998,"output":59.993},"limit":{"context":128000,"input":128000,"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}},"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,"release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image","pdf"],"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/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/o3-deep-research":{"id":"openai/o3-deep-research","name":"OpenAI o3 Deep Research","family":"o","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,"cost":{"input":9.996,"output":19.992},"limit":{"context":200000,"input":200000,"output":100000}},"openai/o3-mini":{"id":"openai/o3-mini","name":"OpenAI o3-mini","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"]},"open_weights":false,"cost":{"input":1.1,"output":4.4},"limit":{"context":200000,"input":200000,"output":100000}},"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"]},"open_weights":false,"cost":{"input":9.996,"output":30.004999999999995},"limit":{"context":128000,"input":128000,"output":4096}},"openai/o1-pro":{"id":"openai/o1-pro","name":"OpenAI o1 Pro","family":"o-pro","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/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}},"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":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-4o-search-preview":{"id":"openai/gpt-4o-search-preview","name":"GPT-4o Search Preview","family":"gpt","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"]},"open_weights":false,"cost":{"input":1.47,"output":5.88},"limit":{"context":128000,"input":128000,"output":16384}},"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,"cost":{"input":0.1,"output":0.4},"limit":{"context":1047576,"input":1047576,"output":32768}},"openai/o4-mini-high":{"id":"openai/o4-mini-high","name":"OpenAI o4-mini high","family":"o-mini","attachment":false,"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/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"]},"open_weights":false,"cost":{"input":2,"output":8},"limit":{"context":200000,"input":200000,"output":100000}},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT OSS 20B","family":"gpt-oss","attachment":false,"reasoning":true,"tool_call":false,"structured_output":false,"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}},"openai/gpt-5-pro":{"id":"openai/gpt-5-pro","name":"GPT 5 Pro","family":"gpt-pro","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":15,"output":120},"limit":{"context":400000,"input":400000,"output":128000}},"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":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":{"id":"openai/gpt-4o","name":"GPT-4o","family":"gpt","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"]},"open_weights":false,"cost":{"input":2.499,"output":9.996},"limit":{"context":128000,"input":128000,"output":16384}},"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"]},"open_weights":false,"cost":{"input":9.996,"output":19.992},"limit":{"context":200000,"input":200000,"output":100000}},"openai/gpt-5":{"id":"openai/gpt-5","name":"GPT 5","family":"gpt","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"]},"open_weights":false,"cost":{"input":1.25,"output":10},"limit":{"context":400000,"input":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":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}},"openai/o3-pro-2025-06-10":{"id":"openai/o3-pro-2025-06-10","name":"OpenAI o3-pro (2025-06-10)","family":"o-pro","attachment":false,"reasoning":true,"tool_call":true,"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}},"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"]},"open_weights":false,"cost":{"input":0.05,"output":0.25},"limit":{"context":128000,"input":128000,"output":16384}},"openai/gpt-5-chat-latest":{"id":"openai/gpt-5-chat-latest","name":"GPT 5 Chat","family":"gpt","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":1.25,"output":10},"limit":{"context":400000,"input":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,"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":2,"output":8},"limit":{"context":1047576,"input":1047576,"output":32768}},"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/gpt-5.1-codex":{"id":"openai/gpt-5.1-codex","name":"GPT 5.1 Codex","family":"gpt-codex","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/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"]},"open_weights":false,"cost":{"input":2.5,"output":10},"limit":{"context":128000,"input":128000,"output":16384}},"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.49299999999999994,"output":0.49299999999999994},"limit":{"context":16384,"input":16384,"output":8192}},"amazon/nova-lite-v1":{"id":"amazon/nova-lite-v1","name":"Amazon Nova Lite 1.0","family":"nova-lite","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}},"amazon/nova-pro-v1":{"id":"amazon/nova-pro-v1","name":"Amazon Nova Pro 1.0","family":"nova-pro","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.7989999999999999,"output":3.1959999999999997},"limit":{"context":300000,"input":300000,"output":32000}},"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":0.5099999999999999,"output":4.25},"limit":{"context":1000000,"input":1000000,"output":65535}},"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":0.0357,"output":0.1394},"limit":{"context":128000,"input":128000,"output":5120}},"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":0.49299999999999994,"output":0.49299999999999994},"limit":{"context":20480,"input":20480,"output":16384}},"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":0.306,"output":0.357},"limit":{"context":20480,"input":20480,"output":16384}},"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"]},"open_weights":false,"cost":{"input":0.49299999999999994,"output":0.49299999999999994},"limit":{"context":16384,"input":16384,"output":16384}},"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":0.2006,"output":0.2006},"limit":{"context":16384,"input":16384,"output":8192}},"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":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}},"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":{"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}},"z-ai/glm-4.6":{"id":"z-ai/glm-4.6","name":"GLM 4.6","family":"glm","attachment":false,"reasoning":true,"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: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}},"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}},"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.35,"output":1.15},"limit":{"context":131072,"input":131072,"output":16384}},"dmind/dmind-1":{"id":"dmind/dmind-1","name":"DMind-1","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.3,"output":0.6},"limit":{"context":32768,"input":32768,"output":8192}},"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.4},"limit":{"context":32768,"input":32768,"output":8192}},"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"]},"open_weights":false,"cost":{"input":0.25499999999999995,"output":0.49299999999999994},"limit":{"context":16384,"input":16384,"output":8192}},"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,"structured_output":true,"release_date":"2025-08-31","last_updated":"2025-08-31","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.15,"output":0.7},"limit":{"context":128000,"input":128000,"output":32768}},"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":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}},"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.060000000000000005,"output":0.5},"limit":{"context":32768,"input":32768,"output":32768}},"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":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":16384,"input":16384,"output":16384}},"minimax/minimax-m2.7":{"id":"minimax/minimax-m2.7","name":"MiniMax M2.7","family":"minimax","attachment":false,"reasoning":true,"tool_call":true,"structured_output":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.3,"output":1.2},"limit":{"context":204800,"input":204800,"output":131072}},"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,"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"]},"open_weights":false,"cost":{"input":0.33,"output":1.32},"limit":{"context":200000,"input":200000,"output":131072}},"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,"cost":{"input":0.30200000000000005,"output":1.2069999999999999},"limit":{"context":65532,"input":65532,"output":2048}},"minimax/minimax-m2.5":{"id":"minimax/minimax-m2.5","name":"MiniMax M2.5","family":"minimax","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"]},"open_weights":false,"cost":{"input":0.3,"output":1.2},"limit":{"context":204800,"input":204800,"output":131072}},"qwen/qwen3.5-397b-a17b":{"id":"qwen/qwen3.5-397b-a17b","name":"Qwen3.5 397B A17B","family":"qwen","attachment":false,"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}},"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,"cost":{"input":0.1003,"output":0.1003},"limit":{"context":128000,"input":128000,"output":8192}},"unsloth/gemma-3-12b-it":{"id":"unsloth/gemma-3-12b-it","name":"Gemma 3 12B IT","family":"unsloth","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"]},"open_weights":false,"cost":{"input":0.272,"output":0.272},"limit":{"context":128000,"input":128000,"output":131072}},"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":false,"release_date":"2025-03-10","last_updated":"2025-03-10","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":0.2006,"output":0.2006},"limit":{"context":128000,"input":128000,"output":8192}},"unsloth/gemma-3-27b-it":{"id":"unsloth/gemma-3-27b-it","name":"Gemma 3 27B IT","family":"unsloth","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"]},"open_weights":false,"cost":{"input":0.2992,"output":0.2992},"limit":{"context":128000,"input":128000,"output":96000}},"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":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}},"THUDM/GLM-4-9B-0414":{"id":"THUDM/GLM-4-9B-0414","name":"GLM 4 9B 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"]},"open_weights":false,"cost":{"input":0.2,"output":0.2},"limit":{"context":32000,"input":32000,"output":8000}},"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":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}},"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"]},"open_weights":false,"cost":{"input":0.2,"output":0.2},"limit":{"context":128000,"input":128000,"output":65536}},"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.2,"output":0.2},"limit":{"context":128000,"input":128000,"output":65536}},"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,"release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.5,"output":3},"limit":{"context":1048756,"input":1048756,"output":65536}},"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"]},"open_weights":false,"cost":{"input":0.0748,"output":0.306},"limit":{"context":2000000,"input":2000000,"output":8192}},"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":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":0.5,"output":3},"limit":{"context":1048756,"input":1048756,"output":65536}},"moonshotai/kimi-k2.5":{"id":"moonshotai/kimi-k2.5","name":"Kimi K2.5","family":"kimi","attachment":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"]},"open_weights":false,"cost":{"input":0.3,"output":1.9},"limit":{"context":256000,"input":256000,"output":65536}},"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,"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}},"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":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.6,"output":2.5},"limit":{"context":256000,"input":256000,"output":16384}},"moonshotai/kimi-k2-instruct-0711":{"id":"moonshotai/kimi-k2-instruct-0711","name":"Kimi K2 0711","family":"kimi","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"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":8192}},"moonshotai/Kimi-Dev-72B":{"id":"moonshotai/Kimi-Dev-72B","name":"Kimi Dev 72B","family":"kimi","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"]},"open_weights":false,"cost":{"input":0.4,"output":0.4},"limit":{"context":128000,"input":128000,"output":131072}},"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":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"]},"open_weights":false,"cost":{"input":0.4,"output":2},"limit":{"context":256000,"input":256000,"output":262144}},"moonshotai/kimi-k2-thinking":{"id":"moonshotai/kimi-k2-thinking","name":"Kimi K2 Thinking","family":"kimi-thinking","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"release_date":"2025-11-06","last_updated":"2025-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.3,"output":1.2},"limit":{"context":256000,"input":256000,"output":262144}},"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,"structured_output":false,"release_date":"2026-01-26","last_updated":"2026-01-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.3,"output":1.9},"limit":{"context":256000,"input":256000,"output":65536}},"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,"cost":{"input":0.13999999999999999,"output":0.6},"limit":{"context":128000,"input":128000,"output":40960}},"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}},"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,"cost":{"input":3.995,"output":7.99},"limit":{"context":65536,"input":65536,"output":8192}},"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,"cost":{"input":0.2006,"output":0.2006},"limit":{"context":32768,"input":32768,"output":16384}},"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":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.7989999999999999,"output":1.394},"limit":{"context":131072,"input":131072,"output":8192}},"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":false,"structured_output":false,"release_date":"2025-08-26","last_updated":"2025-08-26","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.08,"output":0.24000000000000002},"limit":{"context":128000,"input":128000,"output":65536}},"MiniMaxAI/MiniMax-M1-80k":{"id":"MiniMaxAI/MiniMax-M1-80k","name":"MiniMax M1 80K","family":"minimax","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.6052,"output":2.4225000000000003},"limit":{"context":1000000,"input":1000000,"output":131072}},"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":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-opus-4.6":{"id":"anthropic/claude-opus-4.6","name":"Claude 4.6 Opus","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:thinking":{"id":"anthropic/claude-sonnet-4.6:thinking","name":"Claude Sonnet 4.6 Thinking","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"]},"open_weights":false,"cost":{"input":2.992,"output":14.993999999999998},"limit":{"context":1000000,"input":1000000,"output":128000}},"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":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-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,"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"]},"open_weights":false,"cost":{"input":2.992,"output":14.993999999999998},"limit":{"context":1000000,"input":1000000,"output":128000}},"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,"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}},"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"]},"open_weights":false,"cost":{"input":0.49299999999999994,"output":0.49299999999999994},"limit":{"context":16384,"input":16384,"output":8192}},"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":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}},"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,"release_date":"2025-09-25","last_updated":"2025-09-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.7989999999999999,"output":0.7989999999999999},"limit":{"context":16384,"input":16384,"output":8192}},"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":false,"structured_output":false,"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":16384,"input":16384,"output":16384}},"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":0.7989999999999999,"output":0.7989999999999999},"limit":{"context":16384,"input":16384,"output":8192}},"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":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.4,"output":1.4},"limit":{"context":16384,"input":16384,"output":8192}},"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":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"]},"open_weights":false,"cost":{"input":0.7,"output":0.7},"limit":{"context":16384,"input":16384,"output":16384}},"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":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}},"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.7,"output":0.7},"limit":{"context":16384,"input":16384,"output":16384}},"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,"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}},"xiaomi/mimo-v2-flash-thinking":{"id":"xiaomi/mimo-v2-flash-thinking","name":"MiMo V2 Flash (Thinking)","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.102,"output":0.306},"limit":{"context":256000,"input":256000,"output":32768}},"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.102,"output":0.306},"limit":{"context":256000,"input":256000,"output":32768}},"xiaomi/mimo-v2-flash-original":{"id":"xiaomi/mimo-v2-flash-original","name":"MiMo V2 Flash Original","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.102,"output":0.306},"limit":{"context":256000,"input":256000,"output":32768}},"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":false,"cost":{"input":0.31,"output":0.31},"limit":{"context":128000,"input":128000,"output":8192}},"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"]},"open_weights":false,"cost":{"input":0.3,"output":1.2},"limit":{"context":128000,"input":128000,"output":65536}},"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,"cost":{"input":0.49299999999999994,"output":0.49299999999999994},"limit":{"context":16384,"input":16384,"output":8192}},"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,"cost":{"input":0.7,"output":0.7},"limit":{"context":8192,"input":8192,"output":8192}}}},"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,"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}},"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,"cost":{"input":5,"output":25},"limit":{"context":200000,"output":64000}},"kimi-k2.5":{"id":"kimi-k2.5","name":"Kimi K2.5","family":"kimi","attachment":false,"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}},"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,"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}},"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-02-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":3,"output":15},"limit":{"context":200000,"output":64000}},"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,"cost":{"input":2,"output":12},"limit":{"context":1048576,"output":65536}},"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,"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}},"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,"cost":{"input":0.5,"output":3},"limit":{"context":1048576,"output":65536}},"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,"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}},"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.25,"output":2},"limit":{"context":400000,"output":128000}},"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.05,"output":0.4},"limit":{"context":400000,"output":128000}},"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":"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}},"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,"cost":{"input":3,"output":15},"limit":{"context":200000,"output":64000}},"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,"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}},"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,"cost":{"input":0.2,"output":0.5},"limit":{"context":2000000,"output":16384}},"gpt-5.2":{"id":"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,"cost":{"input":1.75,"output":14},"limit":{"context":400000,"output":128000}},"o3-pro":{"id":"o3-pro","name":"o3-pro","family":"o-pro","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-4o-mini":{"id":"gpt-4o-mini","name":"GPT-4o Mini","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"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}},"qwen3-max":{"id":"qwen3-max","name":"Qwen3 Max","family":"qwen","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}},"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":1.1,"output":4.4},"limit":{"context":200000,"output":100000}},"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":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":1.75,"output":14},"limit":{"context":400000,"input":272000,"output":128000}},"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-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.3,"output":2.5},"limit":{"context":1048576,"output":65536}},"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,"cost":{"input":1.75,"output":14},"limit":{"context":400000,"output":128000}},"gpt-5.3-codex-xhigh":{"id":"gpt-5.3-codex-xhigh","name":"GPT-5.3 Codex XHigh","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"]},"open_weights":false,"cost":{"input":1.75,"output":14},"limit":{"context":400000,"input":272000,"output":128000}},"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":0.2,"output":1.5},"limit":{"context":256000,"output":16384}},"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":1.25,"output":10},"limit":{"context":400000,"output":128000}},"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},"limit":{"context":200000,"output":100000}},"grok-4-0709":{"id":"grok-4-0709","name":"Grok 4","family":"grok","attachment":true,"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}},"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"]},"open_weights":false,"cost":{"input":3,"output":15},"limit":{"context":128000,"output":16384}},"qwen-2.5-coder-32b":{"id":"qwen-2.5-coder-32b","name":"Qwen 2.5 Coder 32B","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"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-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-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},"limit":{"context":400000,"input":272000,"output":128000}},"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,"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}},"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,"cost":{"input":2.5,"output":15},"limit":{"context":1050000,"input":922000,"output":128000}},"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,"cost":{"input":1.25,"output":10},"limit":{"context":400000,"output":128000}},"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":1,"output":5},"limit":{"context":200000,"output":64000}},"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,"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}},"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,"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}},"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"]},"open_weights":false,"cost":{"input":5,"output":25},"limit":{"context":200000,"output":128000}},"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}},"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":3,"output":15},"limit":{"context":200000,"output":64000}},"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}},"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":1.25,"output":10},"limit":{"context":400000,"output":128000}},"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,"release_date":"2025-05-14","last_updated":"2025-05-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":15,"output":75},"limit":{"context":200000,"output":32000}},"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,"cost":{"input":2,"output":8},"limit":{"context":1047576,"output":32768}},"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":0.4,"output":1.6},"limit":{"context":1047576,"output":32768}},"gpt-5.1-codex":{"id":"gpt-5.1-codex","name":"GPT-5.1 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"]},"open_weights":false,"cost":{"input":1.25,"output":10},"limit":{"context":400000,"input":272000,"output":128000}},"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,"temperature":true,"knowledge":"2024-10","release_date":"2024-11-20","last_updated":"2024-11-20","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"cost":{"input":2.5,"output":10},"limit":{"context":128000,"output":16384}},"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,"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},"limit":{"context":2000000,"output":16384}},"deepseek/deepseek-v3.1":{"id":"deepseek/deepseek-v3.1","name":"DeepSeek V3.1","family":"deepseek","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.55,"output":1.66},"limit":{"context":128000,"output":8192}},"Qwen/QwQ-32B":{"id":"Qwen/QwQ-32B","name":"QwQ 32B","family":"qwen","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2024-11-28","last_updated":"2024-11-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.4,"output":0.4},"limit":{"context":32768,"output":32768}},"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,"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}},"Qwen/Qwen3-32B":{"id":"Qwen/Qwen3-32B","name":"Qwen3 32B","family":"qwen","attachment":false,"reasoning":true,"tool_call":true,"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.29},"limit":{"context":128000,"output":8192}},"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,"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.29,"output":1.2},"limit":{"context":262144,"output":65536}},"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":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}},"zai-org/glm-4.7":{"id":"zai-org/glm-4.7","name":"GLM-4.7","family":"glm","attachment":false,"reasoning":false,"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":0.6,"output":2.2},"limit":{"context":128000,"output":8192}},"zai-org/glm-5":{"id":"zai-org/glm-5","name":"GLM-5","family":"glm","attachment":false,"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":1,"output":3.2},"limit":{"context":204800,"output":131072}},"zai-org/glm-4.5":{"id":"zai-org/glm-4.5","name":"GLM-4.5","family":"glm","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.6,"output":2.2},"limit":{"context":128000,"output":8192}},"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,"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}},"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":false,"tool_call":true,"temperature":true,"release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":3.5,"output":3.5},"limit":{"context":128000,"output":4096}},"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":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.14,"output":0.59},"limit":{"context":1000000,"output":32768}},"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":false,"tool_call":true,"temperature":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":128000,"output":4096}},"deepseek-ai/DeepSeek-R1":{"id":"deepseek-ai/DeepSeek-R1","name":"DeepSeek R1","family":"deepseek-thinking","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":3,"output":7},"limit":{"context":128000,"output":8192}},"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,"release_date":"2025-06-15","last_updated":"2025-06-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.27,"output":0.4},"limit":{"context":128000,"output":8192}},"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,"release_date":"2025-06-01","last_updated":"2025-06-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.27,"output":1},"limit":{"context":128000,"output":8192}},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT-OSS 120B","family":"gpt-oss","attachment":true,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.08,"output":0.44},"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":{"perplexity/sonar":{"id":"perplexity/sonar","name":"Sonar","family":"sonar","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"]},"open_weights":false,"cost":{"input":0.25,"output":2.5,"cache_read":0.0625},"limit":{"context":128000,"output":8192}},"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,"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}},"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}},"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.25,"output":2,"cache_read":0.025},"limit":{"context":400000,"input":272000,"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"]},"open_weights":false,"cost":{"input":1.75,"output":14,"cache_read":0.175},"limit":{"context":400000,"input":272000,"output":128000}},"openai/gpt-5.1":{"id":"openai/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":1.25,"output":10,"cache_read":0.125},"limit":{"context":400000,"input":272000,"output":128000}},"openai/gpt-5.4":{"id":"openai/gpt-5.4","name":"GPT-5.4","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,"cost":{"input":2.5,"output":15,"cache_read":0.25},"limit":{"context":1050000,"input":922000,"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,"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"]},"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":1048576,"output":65536}},"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":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.5,"output":3,"cache_read":0.05,"context_over_200k":{"input":0.5,"output":3,"cache_read":0.05}},"limit":{"context":1048576,"output":65536}},"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,"cost":{"input":1.25,"output":10,"cache_read":0.125,"context_over_200k":{"input":2.5,"output":15,"cache_read":0.25}},"limit":{"context":1048576,"output":65536}},"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-03-20","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},"limit":{"context":1048576,"output":65536}},"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,"cost":{"input":1,"output":5,"cache_read":0.1},"limit":{"context":200000,"output":64000}},"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,"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},"limit":{"context":200000,"output":64000}},"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":5,"output":25,"cache_read":0.5},"limit":{"context":200000,"output":64000}},"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","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},"limit":{"context":200000,"output":128000}},"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,"cost":{"input":3,"output":15,"cache_read":0.3},"limit":{"context":200000,"output":64000}}}},"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":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}},"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":"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.29,"output":1.74},"limit":{"context":262144,"output":65536}},"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":"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.23,"output":1.86},"limit":{"context":262144,"output":65536}},"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,"temperature":true,"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.29,"output":2.32},"limit":{"context":262144,"output":65536}},"Qwen/Qwen3.5-9B":{"id":"Qwen/Qwen3.5-9B","name":"Qwen/Qwen3.5-9B","family":"qwen","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"]},"open_weights":true,"cost":{"input":0.22,"output":1.74},"limit":{"context":262144,"output":65536}},"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,"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.26,"output":2.09},"limit":{"context":262144,"output":65536}},"Qwen/Qwen3.5-4B":{"id":"Qwen/Qwen3.5-4B","name":"Qwen/Qwen3.5-4B","family":"qwen","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"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":262144,"output":65536}},"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,"cost":{"input":0.59,"output":0.59},"limit":{"context":33000,"output":4000}},"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,"cost":{"input":0.25,"output":1},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.18,"output":0.68},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.2,"output":0.6},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.29,"output":1},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.1,"output":0.1},"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,"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}},"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,"cost":{"input":0.14,"output":0.57},"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,"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}},"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}},"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,"cost":{"input":0.13,"output":0.6},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.18,"output":0.18},"limit":{"context":33000,"output":4000}},"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,"cost":{"input":0.59,"output":0.59},"limit":{"context":131000,"output":4000}},"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,"cost":{"input":0.07,"output":0.28},"limit":{"context":131000,"output":131000}},"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}},"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,"cost":{"input":0.07,"output":0.28},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.14,"output":0.57},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.09,"output":0.6},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.09,"output":0.3},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.06,"output":0.06},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.14,"output":1.4},"limit":{"context":262000,"output":262000}},"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}},"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,"cost":{"input":0.1,"output":0.4},"limit":{"context":66000,"output":66000}},"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,"cost":{"input":0.15,"output":0.58},"limit":{"context":131000,"output":131000}},"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}},"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,"cost":{"input":0.18,"output":0.18},"limit":{"context":33000,"output":4000}},"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,"cost":{"input":0.05,"output":0.05},"limit":{"context":33000,"output":4000}},"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,"cost":{"input":0.45,"output":3.5},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.09,"output":0.3},"limit":{"context":262000,"output":131000}},"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}},"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,"cost":{"input":0.59,"output":0.59},"limit":{"context":131000,"output":4000}},"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,"cost":{"input":0.1,"output":0.3},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.14,"output":0.86},"limit":{"context":66000,"output":66000}},"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,"cost":{"input":0.5,"output":1.9},"limit":{"context":205000,"output":205000}},"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,"cost":{"input":0.3,"output":0.9},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.14,"output":0.86},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.14,"output":0.57},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.07,"output":0.28},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.14,"output":0.57},"limit":{"context":131000,"output":131000}},"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"]},"open_weights":false,"cost":{"input":0.2,"output":0.6},"limit":{"context":128000,"output":128000}},"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,"cost":{"input":0,"output":0},"limit":{"context":33000,"output":33000}},"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}},"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"},"structured_output":true,"temperature":true,"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},"limit":{"context":205000,"output":205000}},"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"},"structured_output":true,"temperature":true,"release_date":"2026-04-08","last_updated":"2026-04-08","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":1.4,"output":4.4,"cache_write":0},"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/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,"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/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,"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}},"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":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}},"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":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}},"Pro/moonshotai/Kimi-K2-Thinking":{"id":"Pro/moonshotai/Kimi-K2-Thinking","name":"Pro/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,"cost":{"input":0.55,"output":2.5},"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"]},"open_weights":false,"cost":{"input":0.4,"output":2},"limit":{"context":262000,"output":262000}},"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,"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/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,"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}},"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}},"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}},"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}},"deepseek-ai/DeepSeek-OCR":{"id":"deepseek-ai/DeepSeek-OCR","name":"deepseek-ai/DeepSeek-OCR","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-10-20","last_updated":"2025-10-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":8192,"output":8192}},"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,"cost":{"input":0.27,"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}},"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,"cost":{"input":0.1,"output":0.1},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.5,"output":2.18},"limit":{"context":164000,"output":164000}},"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,"cost":{"input":0.18,"output":0.18},"limit":{"context":131000,"output":131000}},"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}},"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}},"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,"cost":{"input":0.28,"output":1.1},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.14,"output":0.57},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.27,"output":0.27},"limit":{"context":33000,"output":33000}},"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,"cost":{"input":0.086,"output":0.086},"limit":{"context":33000,"output":33000}},"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,"cost":{"input":0.086,"output":0.086},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.4,"output":2},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.55,"output":2.5},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.21,"output":0.57},"limit":{"context":262000,"output":262000}}}},"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,"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}},"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,"temperature":true,"release_date":"2025-08-23","last_updated":"2025-08-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.2,"output":0.8},"limit":{"context":262144,"output":262144}},"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-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}},"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,"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}},"zai-org/GLM-4.5-FP8":{"id":"zai-org/GLM-4.5-FP8","name":"GLM 4.5 FP8","family":"glm","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}},"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,"release_date":"2025-08-23","last_updated":"2025-08-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.2,"output":0.8},"limit":{"context":75000,"output":163840}},"deepseek-ai/DeepSeek-V3-0324":{"id":"deepseek-ai/DeepSeek-V3-0324","name":"DeepSeek V3 0324","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-08-23","last_updated":"2025-08-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.2,"output":0.8},"limit":{"context":75000,"output":163840}},"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,"temperature":true,"release_date":"2025-08-23","last_updated":"2025-08-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.5,"output":2.15},"limit":{"context":75000,"output":163840}},"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,"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}}}},"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,"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}},"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,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":204800,"output":131072}},"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}},"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,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":204800,"output":131072}},"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":0,"output":0},"limit":{"context":204800,"output":131072}},"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,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":204800,"output":131072}}}},"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,"cost":{"input":3,"output":15},"limit":{"context":200000,"output":8192}},"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"]},"open_weights":false,"cost":{"input":2,"output":8,"reasoning":3},"limit":{"context":128000,"output":32768}},"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,"cost":{"input":1,"output":1},"limit":{"context":128000,"output":4096}},"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,"cost":{"input":2,"output":8},"limit":{"context":128000,"output":4096}}}},"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-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":131072,"output":8192}},"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":{"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,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"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,"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}},"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":"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}},"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-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}},"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":"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}},"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,"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}},"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,"output":0},"limit":{"context":128000,"output":4096}}}},"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":{"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-06","release_date":"2026-01-20","last_updated":"2026-01-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":131072,"output":32768}},"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":false,"temperature":true,"knowledge":"2025-06","release_date":"2026-01-20","last_updated":"2026-01-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":131072,"output":32768}},"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-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}},"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":"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}},"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":"2024-07","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-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":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}},"deepseek/deepseek-v3.2":{"id":"deepseek/deepseek-v3.2","name":"DeepSeek V3.2","family":"deepseek","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"]},"open_weights":true,"cost":{"input":0.28,"output":0.4},"limit":{"context":163840,"output":65536}},"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":"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}},"deepseek/deepseek-chat-v3-0324":{"id":"deepseek/deepseek-chat-v3-0324","name":"DeepSeek V3 0324","family":"deepseek","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"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}},"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":"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}},"openrouter/free":{"id":"openrouter/free","name":"Free Models Router","attachment":true,"reasoning":true,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-01","last_updated":"2026-02-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":200000,"input":200000,"output":8000}},"arcee-ai/trinity-mini:free":{"id":"arcee-ai/trinity-mini:free","name":"Trinity Mini","family":"trinity-mini","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"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":131072,"output":131072}},"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,"cost":{"input":0.22,"output":0.85},"limit":{"context":262144,"output":80000}},"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-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}},"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}},"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,"cost":{"input":0,"output":0},"limit":{"context":4096,"output":4096}},"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,"output":0},"limit":{"context":46864,"output":46864}},"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,"output":0},"limit":{"context":67344,"output":67344}},"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":0,"output":0},"limit":{"context":46864,"output":46864}},"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,"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}},"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":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}},"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":"2023-12","release_date":"2025-08-25","last_updated":"2025-08-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":1,"output":3},"limit":{"context":131072,"output":131072}},"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":"2023-12","release_date":"2025-08-25","last_updated":"2025-08-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.13,"output":0.4},"limit":{"context":131072,"output":131072}},"stepfun/step-3.5-flash:free":{"id":"stepfun/step-3.5-flash:free","name":"Step 3.5 Flash (free)","family":"step","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}},"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,"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}},"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":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"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":8192}},"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-12","release_date":"2025-09-12","last_updated":"2025-09-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.15,"output":0.6},"limit":{"context":262144,"output":262144}},"mistralai/codestral-2508":{"id":"mistralai/codestral-2508","name":"Codestral 2508","family":"codestral","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"]},"open_weights":true,"cost":{"input":0.3,"output":0.9},"limit":{"context":256000,"output":256000}},"mistralai/mistral-medium-3.1":{"id":"mistralai/mistral-medium-3.1","name":"Mistral Medium 3.1","family":"mistral-medium","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}},"mistralai/mistral-small-2603":{"id":"mistralai/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,"cost":{"input":0.15,"output":0.6},"limit":{"context":262144,"output":262144}},"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":"2025-05","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":131072}},"mistralai/devstral-small-2505":{"id":"mistralai/devstral-small-2505","name":"Devstral Small","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.06,"output":0.12},"limit":{"context":128000,"output":128000}},"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":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":96000,"output":8192}},"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-05","release_date":"2025-07-10","last_updated":"2025-07-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.4,"output":2},"limit":{"context":131072,"output":131072}},"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-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":131072,"output":131072}},"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":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}},"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":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":131072}},"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-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":131072,"output":131072}},"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":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-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":"2024-11","release_date":"2025-08-19","last_updated":"2025-08-19","modalities":{"input":["text","image"],"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}},"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-08","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":10000}},"x-ai/grok-3-beta":{"id":"x-ai/grok-3-beta","name":"Grok 3 Beta","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,"cost":{"input":3,"output":15,"cache_read":0.75,"cache_write":15},"limit":{"context":131072,"output":8192}},"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-07","release_date":"2025-07-09","last_updated":"2025-07-09","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}},"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":"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,"cache_read":0.075,"cache_write":0.5},"limit":{"context":131072,"output":8192}},"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-11","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,"cache_write":0.05},"limit":{"context":2000000,"output":30000}},"x-ai/grok-4.20-beta":{"id":"x-ai/grok-4.20-beta","name":"Grok 4.20 Beta","family":"grok","attachment":true,"reasoning":true,"tool_call":true,"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-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":"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,"cache_read":0.075,"cache_write":0.5},"limit":{"context":131072,"output":8192}},"x-ai/grok-3":{"id":"x-ai/grok-3","name":"Grok 3","family":"grok","attachment":false,"reasoning":false,"tool_call":true,"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,"cache_write":15},"limit":{"context":131072,"output":8192}},"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":"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}},"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":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}},"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,"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}},"nvidia/nemotron-nano-9b-v2:free":{"id":"nvidia/nemotron-nano-9b-v2:free","name":"Nemotron Nano 9B V2 (free)","family":"nemotron","attachment":false,"reasoning":true,"tool_call":true,"structured_output":true,"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}},"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":"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}},"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-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}},"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":true,"tool_call":true,"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}},"inception/mercury-2":{"id":"inception/mercury-2","name":"Mercury 2","family":"mercury","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"]},"open_weights":false,"cost":{"input":0.25,"output":0.75,"cache_read":0.025},"limit":{"context":128000,"output":50000}},"inception/mercury":{"id":"inception/mercury","name":"Mercury","family":"mercury","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}},"inception/mercury-coder":{"id":"inception/mercury-coder","name":"Mercury Coder","family":"mercury","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}},"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":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-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-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,"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}},"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":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":1.25,"output":10},"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}},"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":"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.25,"output":2},"limit":{"context":400000,"output":128000}},"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-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-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,"output":128000}},"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-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,"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}},"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":"2024-10","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}},"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-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":7.5e-7,"output":0.0000045,"cache_read":7.5e-8},"limit":{"context":400000,"output":128000}},"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":"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":128000,"output":16384}},"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":"2024-06","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":100000}},"openai/gpt-5.4-nano":{"id":"openai/gpt-5.4-nano","name":"GPT-5.4 Nano","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"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":2e-7,"output":0.00000125,"cache_read":2e-8},"limit":{"context":400000,"output":128000}},"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}},"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.25,"output":2,"cache_read":0.025},"limit":{"context":400000,"output":100000}},"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":5,"output":10,"cache_read":1.25},"limit":{"context":400000,"output":128000}},"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":"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.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,"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":30,"output":180,"cache_read":30},"limit":{"context":1050000,"input":922000,"output":128000}},"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":"2024-10-01","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,"output":128000}},"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,"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}},"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-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}},"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,"cost":{"input":15,"output":120},"limit":{"context":400000,"output":272000}},"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,"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}},"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":"2024-10-01","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,"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,"temperature":true,"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":131072,"output":65536}},"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,"cost":{"input":0.072,"output":0.28},"limit":{"context":131072,"output":32768}},"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,"cost":{"input":2,"output":8,"cache_read":0.5},"limit":{"context":1047576,"output":32768}},"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,"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"limit":{"context":1047576,"output":32768}},"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,"cost":{"input":1.25,"output":10,"cache_read":0.125},"limit":{"context":400000,"output":128000}},"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_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.6,"output":2.2,"cache_read":0.11},"limit":{"context":204800,"output":131072}},"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":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}},"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":"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}},"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":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"limit":{"context":202752,"output":131072}},"z-ai/glm-4.5":{"id":"z-ai/glm-4.5","name":"GLM 4.5","family":"glm","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"]},"open_weights":true,"cost":{"input":0.6,"output":2.2},"limit":{"context":128000,"output":96000}},"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":"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}},"z-ai/glm-4.5-air":{"id":"z-ai/glm-4.5-air","name":"GLM 4.5 Air","family":"glm-air","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"]},"open_weights":true,"cost":{"input":0.2,"output":1.1},"limit":{"context":128000,"output":96000}},"z-ai/glm-5-turbo":{"id":"z-ai/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-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.96,"output":3.2,"cache_read":0.192,"cache_write":0},"limit":{"context":202752,"output":131072}},"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,"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}},"z-ai/glm-4.6":{"id":"z-ai/glm-4.6","name":"GLM 4.6","family":"glm","attachment":false,"reasoning":true,"tool_call":true,"structured_output":true,"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}},"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_details"},"structured_output":true,"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}},"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,"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}},"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":"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}},"minimax/minimax-m2":{"id":"minimax/minimax-m2","name":"MiniMax M2","family":"minimax","attachment":false,"reasoning":true,"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"release_date":"2025-10-23","last_updated":"2025-10-23","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}},"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"]},"open_weights":true,"cost":{"input":0.2,"output":1.1},"limit":{"context":1000000,"output":1000000}},"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_details"},"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}},"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_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,"output":0},"limit":{"context":204800,"output":131072}},"minimax/minimax-m1":{"id":"minimax/minimax-m1","name":"MiniMax M1","family":"minimax","attachment":false,"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.4,"output":2.2},"limit":{"context":1000000,"output":40000}},"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-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}},"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,"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.6,"output":3.6},"limit":{"context":262144,"output":65536}},"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,"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}},"qwen/qwen3-coder:free":{"id":"qwen/qwen3-coder:free","name":"Qwen3 Coder 480B A35B Instruct (free)","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,"output":0},"limit":{"context":262144,"output":66536}},"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,"structured_output":true,"temperature":true,"release_date":"2026-02-25","last_updated":"2026-02-25","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"cost":{"input":0.065,"output":0.26},"limit":{"context":1000000,"output":65536}},"qwen/qwen3.6-plus":{"id":"qwen/qwen3.6-plus","name":"Qwen3.6 Plus","family":"qwen","attachment":true,"reasoning":true,"tool_call":true,"structured_output":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,"cost":{"input":0.325,"output":1.95},"limit":{"context":1000000,"output":65536}},"qwen/qwen3-max":{"id":"qwen/qwen3-max","name":"Qwen3 Max","family":"qwen","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-09-05","last_updated":"2025-09-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":1.2,"output":6},"limit":{"context":262144,"output":32768}},"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,"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}},"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,"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}},"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,"knowledge":"2025-04","release_date":"2025-07-25","last_updated":"2025-07-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.078,"output":0.312},"limit":{"context":262144,"output":81920}},"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,"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}},"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,"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}},"qwen/qwen3-4b:free":{"id":"qwen/qwen3-4b:free","name":"Qwen3 4B (free)","family":"qwen","attachment":false,"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}},"qwen/qwen3-next-80b-a3b-instruct:free":{"id":"qwen/qwen3-next-80b-a3b-instruct:free","name":"Qwen3 Next 80B A3B Instruct (free)","family":"qwen","attachment":false,"reasoning":false,"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,"output":0},"limit":{"context":262144,"output":262144}},"qwen/qwen3-coder-flash":{"id":"qwen/qwen3-coder-flash","name":"Qwen3 Coder Flash","family":"qwen","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"]},"open_weights":false,"cost":{"input":0.3,"output":1.5},"limit":{"context":128000,"output":66536}},"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,"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}},"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}},"qwen/qwen3-coder-30b-a3b-instruct":{"id":"qwen/qwen3-coder-30b-a3b-instruct","name":"Qwen3 Coder 30B A3B Instruct","family":"qwen","attachment":false,"reasoning":false,"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"]},"open_weights":true,"cost":{"input":0.07,"output":0.27},"limit":{"context":160000,"output":65536}},"qwen/qwen3-coder":{"id":"qwen/qwen3-coder","name":"Qwen3 Coder","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"]},"open_weights":true,"cost":{"input":0.3,"output":1.2},"limit":{"context":262144,"output":66536}},"qwen/qwen3.5-plus-02-15":{"id":"qwen/qwen3.5-plus-02-15","name":"Qwen3.5 Plus 2026-02-15","family":"qwen","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"]},"open_weights":false,"cost":{"input":0.4,"output":2.4},"limit":{"context":1000000,"output":65536}},"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":true,"structured_output":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.15,"output":0.85},"limit":{"context":262144,"output":131072}},"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,"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}},"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,"cost":{"input":2,"output":12,"reasoning":12,"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"limit":{"context":1048576,"output":65536}},"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,"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}},"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,"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}},"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,"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":0.1,"output":0.4,"cache_read":0.025},"limit":{"context":1048576,"output":8192}},"google/gemma-3n-e4b-it":{"id":"google/gemma-3n-e4b-it","name":"Gemma 3n 4B","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.02,"output":0.04},"limit":{"context":32768,"output":32768}},"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,"structured_output":true,"temperature":true,"release_date":"2026-03-03","last_updated":"2026-03-03","modalities":{"input":["text","image","video","pdf","audio"],"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":1048576,"output":65536}},"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,"output":0},"limit":{"context":8192,"output":2000}},"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_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,"cost":{"input":2,"output":12,"reasoning":12,"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"limit":{"context":1048576,"output":65536}},"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,"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,"cache_read":0.05},"limit":{"context":1048576,"output":65536}},"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_details"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-11-18","last_updated":"2025-11","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":2,"output":12},"limit":{"context":1050000,"output":66000}},"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,"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}},"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,"cost":{"input":1.25,"output":10,"cache_read":0.31},"limit":{"context":1048576,"output":65536}},"google/gemma-2-9b-it":{"id":"google/gemma-2-9b-it","name":"Gemma 2 9B","family":"gemma","attachment":false,"reasoning":false,"tool_call":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}},"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,"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.14,"output":0.4},"limit":{"context":262144,"output":262144}},"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,"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}},"google/gemma-3-12b-it":{"id":"google/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,"cost":{"input":0.03,"output":0.1},"limit":{"context":131072,"output":131072}},"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,"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}},"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-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}},"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,"structured_output":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,"cost":{"input":0,"output":0},"limit":{"context":262144,"output":32768}},"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}},"google/gemma-3-4b-it":{"id":"google/gemma-3-4b-it","name":"Gemma 3 4B","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.01703,"output":0.06815},"limit":{"context":96000,"output":96000}},"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":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.031},"limit":{"context":1048576,"output":65536}},"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.04,"output":0.15},"limit":{"context":96000,"output":96000}},"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,"structured_output":true,"temperature":true,"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.13,"output":0.4},"limit":{"context":262144,"output":262144}},"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,"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,"output":0},"limit":{"context":262144,"output":32768}},"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,"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}},"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_details"},"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}},"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,"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":16384}},"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":"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":16384}},"moonshotai/kimi-k2":{"id":"moonshotai/kimi-k2","name":"Kimi K2","family":"kimi","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":0.55,"output":2.2},"limit":{"context":131072,"output":32768}},"moonshotai/kimi-k2:free":{"id":"moonshotai/kimi-k2:free","name":"Kimi K2 (free)","family":"kimi","attachment":false,"reasoning":false,"tool_call":true,"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}},"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":"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}},"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-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}},"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,"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"limit":{"context":200000,"output":128000}},"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-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}},"limit":{"context":1000000,"output":128000}},"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,"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":200000,"output":64000}},"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,"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}},"limit":{"context":1000000,"output":64000}},"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":"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}},"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,"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"limit":{"context":200000,"output":32000}},"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,"cost":{"input":0.8,"output":4,"cache_read":0.08,"cache_write":1},"limit":{"context":200000,"output":8192}},"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":"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}},"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":"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}},"limit":{"context":1000000,"output":128000}},"xiaomi/mimo-v2-omni":{"id":"xiaomi/mimo-v2-omni","name":"MiMo-V2-Omni","family":"mimo","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"]},"open_weights":true,"cost":{"input":0.4,"output":2,"cache_read":0.08},"limit":{"context":262144,"output":65536}},"xiaomi/mimo-v2-pro":{"id":"xiaomi/mimo-v2-pro","name":"MiMo-V2-Pro","family":"mimo","attachment":false,"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"]},"open_weights":true,"cost":{"input":1,"output":3,"cache_read":0.2},"limit":{"context":1048576,"output":65536}},"xiaomi/mimo-v2-flash":{"id":"xiaomi/mimo-v2-flash","name":"MiMo-V2-Flash","family":"mimo","attachment":false,"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"]},"open_weights":true,"cost":{"input":0.1,"output":0.3,"cache_read":0.01},"limit":{"context":262144,"output":65536}}}},"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,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"limit":{"context":202800,"output":131072}},"accounts/fireworks/models/deepseek-v3p2":{"id":"accounts/fireworks/models/deepseek-v3p2","name":"DeepSeek V3.2","family":"deepseek","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"]},"open_weights":true,"cost":{"input":0.56,"output":1.68,"cache_read":0.28},"limit":{"context":160000,"output":160000}},"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":"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}},"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,"knowledge":"2025-04","release_date":"2025-08-01","last_updated":"2025-08-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.22,"output":0.88},"limit":{"context":131072,"output":131072}},"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,"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.5},"limit":{"context":202752,"output":131072}},"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":"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}},"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-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}},"accounts/fireworks/models/qwen3p6-plus":{"id":"accounts/fireworks/models/qwen3p6-plus","name":"Qwen 3.6 Plus","family":"qwen","attachment":true,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2026-04-04","last_updated":"2026-04-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.5,"output":3,"cache_read":0.1},"limit":{"context":128000,"output":8192}},"accounts/fireworks/models/minimax-m2p1":{"id":"accounts/fireworks/models/minimax-m2p1","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,"cost":{"input":0.3,"output":1.2,"cache_read":0.03},"limit":{"context":200000,"output":200000}},"accounts/fireworks/models/glm-4p7":{"id":"accounts/fireworks/models/glm-4p7","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.3},"limit":{"context":198000,"output":198000}},"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-07-29","last_updated":"2025-07-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.55,"output":2.19},"limit":{"context":131072,"output":131072}},"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"},"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}},"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,"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}},"accounts/fireworks/models/gpt-oss-120b":{"id":"accounts/fireworks/models/gpt-oss-120b","name":"GPT OSS 120B","family":"gpt-oss","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}},"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-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}},"accounts/fireworks/routers/kimi-k2p5-turbo":{"id":"accounts/fireworks/routers/kimi-k2p5-turbo","name":"Kimi K2.5 Turbo (firepass)","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"],"output":["text"]},"open_weights":true,"cost":{"input":0,"output":0,"cache_read":0},"limit":{"context":256000,"output":256000}}}},"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":{"k2p5":{"id":"k2p5","name":"Kimi K2.5","family":"kimi-thinking","attachment":false,"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}},"kimi-k2-thinking":{"id":"kimi-k2-thinking","name":"Kimi K2 Thinking","family":"kimi-thinking","attachment":false,"reasoning":true,"tool_call":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":32768}}}},"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,"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}},"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}}}},"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-01","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":131072},"provider":{"npm":"@ai-sdk/anthropic"}},"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"]},"open_weights":true,"cost":{"input":0.6,"output":3,"cache_read":0.1},"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"},"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":1,"output":3.2,"cache_read":0.2},"limit":{"context":204800,"output":131072}},"mimo-v2-omni":{"id":"mimo-v2-omni","name":"MiMo V2 Omni","family":"mimo-omni","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","pdf"],"output":["text"]},"open_weights":true,"cost":{"input":0.4,"output":2,"cache_read":0.08},"limit":{"context":262144,"output":64000}},"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,"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"limit":{"context":204800,"output":131072}},"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-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.03},"limit":{"context":204800,"output":131072},"provider":{"npm":"@ai-sdk/anthropic"}},"mimo-v2-pro":{"id":"mimo-v2-pro","name":"MiMo V2 Pro","family":"mimo-pro","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,"context_over_200k":{"input":2,"output":6,"cache_read":0.4}},"limit":{"context":1048576,"output":64000}}}},"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":"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}},"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-12","release_date":"2025-01-10","last_updated":"2025-01-10","modalities":{"input":["text"],"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}},"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":"2024-12","release_date":"2025-07-01","last_updated":"2025-07-01","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}},"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":"2024-09","release_date":"2024-11-01","last_updated":"2024-11-01","modalities":{"input":["text","image"],"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}},"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":"2024-10","release_date":"2024-11-15","last_updated":"2024-11-15","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}},"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-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}},"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":"2024-10","release_date":"2024-11-01","last_updated":"2024-11-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":2,"output":6,"cache_read":1,"cache_write":4},"limit":{"context":128000,"output":4096}},"mistralai/Mistral-Nemo-Instruct-2407":{"id":"mistralai/Mistral-Nemo-Instruct-2407","name":"Mistral Nemo Instruct 2407","family":"mistral-nemo","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-05","release_date":"2024-07-01","last_updated":"2024-07-01","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}},"mistralai/Devstral-Small-2505":{"id":"mistralai/Devstral-Small-2505","name":"Devstral Small 2505","family":"devstral","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2025-05-01","last_updated":"2025-05-01","modalities":{"input":["text"],"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}},"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-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}},"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,"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}},"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":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":0.35,"output":0.4,"cache_read":0.175,"cache_write":0.7},"limit":{"context":16000,"output":4096}},"deepseek-ai/DeepSeek-R1-0528":{"id":"deepseek-ai/DeepSeek-R1-0528","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-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}},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT-OSS 20B","family":"gpt-oss","attachment":false,"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.03,"output":0.14,"cache_read":0.015,"cache_write":0.06},"limit":{"context":64000,"output":4096}},"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":"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}},"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-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}},"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":"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}}}},"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-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}},"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"]},"open_weights":false,"cost":{"input":0.115,"output":0.287},"limit":{"context":32768,"output":4096}},"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-04","release_date":"2024-09","last_updated":"2024-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.144,"output":0.287},"limit":{"context":4096,"output":3072}},"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":"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}},"qwen-doc-turbo":{"id":"qwen-doc-turbo","name":"Qwen Doc Turbo","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"]},"open_weights":false,"cost":{"input":0.087,"output":0.144},"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.717,"output":0.717},"limit":{"context":34096,"output":4096}},"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-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.23,"output":0.918,"input_audio":3.584,"output_audio":7.168},"limit":{"context":32768,"output":2048}},"qwen3-8b":{"id":"qwen3-8b","name":"Qwen3 8B","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,"cost":{"input":0.072,"output":0.287,"reasoning":0.717},"limit":{"context":131072,"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-02-16","last_updated":"2026-02-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"cost":{"input":0.43,"output":2.58,"reasoning":2.58},"limit":{"context":262144,"output":65536}},"qwen-math-turbo":{"id":"qwen-math-turbo","name":"Qwen Math Turbo","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"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}},"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,"cost":{"input":0.23,"output":0.574},"limit":{"context":131072,"output":8192}},"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,"cost":{"input":0.115,"output":0.287},"limit":{"context":131072,"output":8192}},"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.86,"output":3.15},"limit":{"context":202752,"output":16384}},"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,"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}},"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,"cost":{"input":0.287,"output":1.147,"reasoning":2.868},"limit":{"context":131072,"output":16384}},"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.3,"output":1.2},"limit":{"context":204800,"output":131072}},"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,"cost":{"input":0.345,"output":1.377},"limit":{"context":131072,"output":8192}},"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,"cost":{"input":0.115,"output":0.287,"reasoning":1.147},"limit":{"context":1000000,"output":32768}},"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,"cost":{"input":0.058,"output":0.23,"input_audio":3.584,"output_audio":7.168},"limit":{"context":32768,"output":2048}},"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,"cost":{"input":0.022,"output":0.216},"limit":{"context":1000000,"output":32768}},"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-04","release_date":"2024-09","last_updated":"2024-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.287,"output":0.717},"limit":{"context":131072,"output":8192}},"deepseek-r1":{"id":"deepseek-r1","name":"DeepSeek R1","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.574,"output":2.294},"limit":{"context":131072,"output":16384}},"qwen3.5-flash":{"id":"qwen3.5-flash","name":"Qwen3.5 Flash","family":"qwen","attachment":true,"reasoning":true,"tool_call":true,"structured_output":true,"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}},"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,"cost":{"input":0.276,"output":1.651,"cache_read":0.028,"cache_write":0.344},"limit":{"context":1000000,"output":65536}},"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,"cost":{"input":0.861,"output":3.441},"limit":{"context":262144,"output":65536}},"qwen3-omni-flash":{"id":"qwen3-omni-flash","name":"Qwen3-Omni Flash","family":"qwen","attachment":false,"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"]},"open_weights":false,"cost":{"input":0.058,"output":0.23,"input_audio":3.584,"output_audio":7.168},"limit":{"context":65536,"output":16384}},"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-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}},"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}},"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-04","release_date":"2025-04","last_updated":"2025-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.286705,"output":1.14682,"reasoning":2.867051},"limit":{"context":131072,"output":32768}},"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"]},"open_weights":false,"cost":{"input":0.574,"output":1.721},"limit":{"context":4096,"output":3072}},"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,"knowledge":"2024-04","release_date":"2024-11","last_updated":"2024-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.287,"output":0.861},"limit":{"context":131072,"output":8192}},"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.032,"output":0.032},"limit":{"context":53248,"output":4096}},"qwen-deep-research":{"id":"qwen-deep-research","name":"Qwen Deep Research","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"]},"open_weights":false,"cost":{"input":7.742,"output":23.367},"limit":{"context":1000000,"output":32768}},"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-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.144,"output":1.434},"limit":{"context":131072,"output":32768}},"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"]},"open_weights":false,"cost":{"input":0.259,"output":0.775},"limit":{"context":16384,"output":8192}},"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,"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}},"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,"cost":{"input":0.23,"output":0.574},"limit":{"context":131072,"output":8192}},"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":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.144,"output":0.574},"limit":{"context":1000000,"output":65536}},"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-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}},"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":"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-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"]},"open_weights":true,"cost":{"input":0.144,"output":0.431},"limit":{"context":131072,"output":8192}},"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":"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}},"qwq-32b":{"id":"qwq-32b","name":"QwQ 32B","family":"qwen","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-12","last_updated":"2024-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.287,"output":0.861},"limit":{"context":131072,"output":8192}},"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,"release_date":"2025-01-01","last_updated":"2025-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.574,"output":2.294},"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.287,"output":0.861},"limit":{"context":131072,"output":8192}},"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-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.144,"output":0.574},"limit":{"context":131072,"output":32768}},"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,"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.23,"output":0.918,"input_audio":3.584,"output_audio":7.168},"limit":{"context":65536,"output":16384}},"qwen3-vl-30b-a3b":{"id":"qwen3-vl-30b-a3b","name":"Qwen3-VL 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","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.108,"output":0.431,"reasoning":1.076},"limit":{"context":131072,"output":32768}},"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.143353,"output":1.433525,"reasoning":4.300576},"limit":{"context":262144,"output":32768}},"deepseek-v3-2-exp":{"id":"deepseek-v3-2-exp","name":"DeepSeek V3.2 Exp","family":"deepseek","attachment":false,"reasoning":false,"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.287,"output":0.431},"limit":{"context":131072,"output":65536}},"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-04","release_date":"2025-04","last_updated":"2025-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.861,"output":3.441},"limit":{"context":262144,"output":65536}},"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,"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-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":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}},"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,"temperature":true,"knowledge":"2024-04","release_date":"2024-11","last_updated":"2024-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.144,"output":0.287},"limit":{"context":131072,"output":8192}},"qwen-turbo":{"id":"qwen-turbo","name":"Qwen Turbo","family":"qwen","attachment":false,"reasoning":true,"tool_call":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-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":0.101,"output":0.28},"limit":{"context":16384,"output":8192}},"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}},"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":"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}},"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","video"],"output":["text"]},"open_weights":false,"cost":{"input":0.573,"output":3.44,"reasoning":3.44},"limit":{"context":1000000,"output":65536}},"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,"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}},"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,"cost":{"input":2.294,"output":6.881},"limit":{"context":131072,"output":8192}},"deepseek-v3":{"id":"deepseek-v3","name":"DeepSeek V3","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2024-12-01","last_updated":"2024-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.287,"output":1.147},"limit":{"context":65536,"output":8192}},"deepseek-r1-0528":{"id":"deepseek-r1-0528","name":"DeepSeek R1 0528","family":"deepseek-thinking","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":0.574,"output":2.294},"limit":{"context":131072,"output":16384}},"qvq-max":{"id":"qvq-max","name":"QVQ Max","family":"qvq","attachment":false,"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"]},"open_weights":false,"cost":{"input":1.147,"output":4.588},"limit":{"context":131072,"output":8192}},"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.574,"output":2.294},"limit":{"context":262144,"output":16384}},"qwen3-14b":{"id":"qwen3-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":true,"cost":{"input":0.144,"output":0.574,"reasoning":1.434},"limit":{"context":131072,"output":8192}},"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}},"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,"cost":{"input":0.072,"output":0.287},"limit":{"context":10000000,"output":8192}},"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,"cost":{"input":0.6,"output":3,"cache_read":0.1},"limit":{"context":262144,"output":262144}},"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":"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}},"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"]},"open_weights":false,"cost":{"input":0.25,"output":1},"limit":{"context":163840,"output":163840}},"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-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}},"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,"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}},"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,"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}},"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,"cost":{"input":1,"output":5},"limit":{"context":1048576,"output":65536}}}},"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,"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}},"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,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":204800,"output":131072}},"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}},"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,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":204800,"output":131072}},"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":0,"output":0},"limit":{"context":204800,"output":131072}},"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,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":204800,"output":131072}}}},"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":true,"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":1.125,"output":9},"limit":{"context":400000,"output":128000}},"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":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.18,"output":0.45},"limit":{"context":2000000,"output":2000000}},"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,"release_date":"2026-01","last_updated":"2026-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":4.5,"output":22.5},"limit":{"context":200000,"output":65536}},"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"]},"open_weights":false,"cost":{"input":0.09,"output":0.36},"limit":{"context":1048576,"output":65536}},"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":"2026-01","last_updated":"2026-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":18.9,"output":151.2},"limit":{"context":400000,"output":128000}},"gemini-3-flash-preview":{"id":"gemini-3-flash-preview","name":"gemini-3-flash-preview","family":"gemini-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","video","audio"],"output":["text"]},"open_weights":false,"cost":{"input":0.5,"output":3},"limit":{"context":1048576,"output":65536}},"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"]},"open_weights":false,"cost":{"input":0.225,"output":1.8},"limit":{"context":400000,"output":128000}},"gpt-5-nano":{"id":"gpt-5-nano","name":"gpt-5-nano","family":"gpt-nano","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.045,"output":0.36},"limit":{"context":400000,"output":128000}},"gemini-3-pro-preview":{"id":"gemini-3-pro-preview","name":"gemini-3-pro-preview","family":"gemini-pro","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"]},"open_weights":false,"cost":{"input":1.8,"output":10.8},"limit":{"context":1048576,"output":65536}},"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,"structured_output":true,"temperature":true,"release_date":"2026-01","last_updated":"2026-01","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"cost":{"input":0.135,"output":3.15},"limit":{"context":1048576,"output":200000}},"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":"2026-01","last_updated":"2026-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":2.7,"output":13.5},"limit":{"context":200000,"output":64000}},"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,"release_date":"2026-01","last_updated":"2026-01","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"cost":{"input":1.125,"output":9},"limit":{"context":1048576,"output":65535}},"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":"2026-01","last_updated":"2026-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.18,"output":0.45},"limit":{"context":2000000,"output":2000000}},"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-01","last_updated":"2026-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":1.575,"output":12.6},"limit":{"context":400000,"output":128000}},"o4-mini":{"id":"o4-mini","name":"o4-mini","family":"o","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":1.1,"output":4.4},"limit":{"context":200000,"output":100000}},"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":"2026-01","last_updated":"2026-01","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"cost":{"input":1.125,"output":9},"limit":{"context":1048576,"output":200000}},"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}},"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,"release_date":"2026-01","last_updated":"2026-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":1.75,"output":14},"limit":{"context":400000,"output":128000}},"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,"release_date":"2026-01","last_updated":"2026-01","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"cost":{"input":0.27,"output":2.25},"limit":{"context":1048576,"output":65535}},"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"]},"open_weights":false,"cost":{"input":0.225,"output":1.8},"limit":{"context":400000,"output":128000}},"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":"2026-01","last_updated":"2026-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.18,"output":1.35},"limit":{"context":256000,"output":256000}},"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":"2026-02","last_updated":"2026-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":1.125,"output":9},"limit":{"context":400000,"output":128000}},"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":"2026-01","last_updated":"2026-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.18,"output":0.45},"limit":{"context":2000000,"output":2000000}},"o3-mini":{"id":"o3-mini","name":"o3-mini","family":"o","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":1.1,"output":4.4},"limit":{"context":131072,"output":131072}},"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":"2026-01","last_updated":"2026-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":2.7,"output":13.5},"limit":{"context":256000,"output":8192}},"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":"2026-01","last_updated":"2026-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":1.125,"output":9},"limit":{"context":400000,"output":128000}},"claude-opus-4-1-20250805":{"id":"claude-opus-4-1-20250805","name":"claude-opus-4-1-20250805","family":"claude-opus","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":13.5,"output":67.5},"limit":{"context":200000,"output":32000}},"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}},"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":"2026-01","last_updated":"2026-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":2.7,"output":13.5},"limit":{"context":200000,"output":64000}},"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"]},"open_weights":false,"cost":{"input":5,"output":25},"limit":{"context":1000000,"output":128000}},"o3":{"id":"o3","name":"o3","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":10,"output":40},"limit":{"context":131072,"output":131072}},"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"]},"open_weights":false,"cost":{"input":13.5,"output":108},"limit":{"context":400000,"output":272000}},"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":true,"structured_output":true,"temperature":true,"release_date":"2026-01","last_updated":"2026-01","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"cost":{"input":0.09,"output":0.36},"limit":{"context":1048576,"output":65535}},"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,"release_date":"2026-01","last_updated":"2026-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":1.125,"output":9},"limit":{"context":400000,"output":128000}},"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":"2026-01","last_updated":"2026-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":13.5,"output":67.5},"limit":{"context":200000,"output":32000}},"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,"release_date":"2026-01","last_updated":"2026-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":1.125,"output":9},"limit":{"context":400000,"output":128000}},"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,"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.18,"output":0.45},"limit":{"context":2000000,"output":2000000}},"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":"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}},"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":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}},"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,"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}},"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,"cost":{"input":0.6,"output":1.8},"limit":{"context":65536,"output":16384}},"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":"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}},"minimaxai/minimax-m1-80k":{"id":"minimaxai/minimax-m1-80k","name":"MiniMax M1","family":"minimax","attachment":false,"reasoning":true,"tool_call":true,"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}},"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":"2026-01","last_updated":"2026-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":262144,"output":131072}},"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,"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}},"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":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}},"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,"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}},"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":"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}},"qwen/qwen3-32b-fp8":{"id":"qwen/qwen3-32b-fp8","name":"Qwen3 32B","family":"qwen","attachment":false,"reasoning":true,"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}},"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":"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}},"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":"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}},"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":"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}},"qwen/qwen3-30b-a3b-fp8":{"id":"qwen/qwen3-30b-a3b-fp8","name":"Qwen3 30B A3B","family":"qwen","attachment":false,"reasoning":true,"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}},"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,"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}},"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,"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}},"qwen/qwen3-235b-a22b-fp8":{"id":"qwen/qwen3-235b-a22b-fp8","name":"Qwen3 235B A22B","family":"qwen","attachment":false,"reasoning":true,"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}},"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}},"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":"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}},"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,"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}}}},"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":{"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,"cost":{"input":0.57,"output":2.29},"limit":{"context":128000,"output":32000}},"Ling-1T":{"id":"Ling-1T","name":"Ling-1T","family":"ling","attachment":false,"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}}}},"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,"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-32b":{"id":"qwen3-32b","name":"Qwen3-32B","family":"qwen","attachment":false,"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}},"deepseek-r1":{"id":"deepseek-r1","name":"DeepSeek-R1","family":"deepseek-thinking","attachment":false,"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}},"qwen3-max":{"id":"qwen3-max","name":"Qwen3-Max","family":"qwen","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":false,"cost":{"input":0,"output":0},"limit":{"context":256000,"output":32000}},"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}},"kimi-k2-0905":{"id":"kimi-k2-0905","name":"Kimi-K2-0905","family":"kimi","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2025-09-05","last_updated":"2025-09-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":256000,"output":64000}},"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":"2024-12-01","last_updated":"2025-11-13","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":200000,"output":128000}},"qwen3-vl-plus":{"id":"qwen3-vl-plus","name":"Qwen3-VL-Plus","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":false,"cost":{"input":0,"output":0},"limit":{"context":256000,"output":32000}},"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}},"qwen3-235b":{"id":"qwen3-235b","name":"Qwen3-235B-A22B","family":"qwen","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":true,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":32000}},"kimi-k2":{"id":"kimi-k2","name":"Kimi-K2","family":"kimi","attachment":false,"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":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":64000}},"qwen3-max-preview":{"id":"qwen3-max-preview","name":"Qwen3-Max-Preview","family":"qwen","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":false,"cost":{"input":0,"output":0},"limit":{"context":256000,"output":32000}},"deepseek-v3":{"id":"deepseek-v3","name":"DeepSeek-V3","family":"deepseek","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"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":32000}}}},"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"]},"open_weights":false,"cost":{"input":15,"output":75},"limit":{"context":512000,"output":32000}},"v0-1.0-md":{"id":"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,"cost":{"input":3,"output":15},"limit":{"context":128000,"output":32000}},"v0-1.5-md":{"id":"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,"cost":{"input":3,"output":15},"limit":{"context":128000,"output":32000}}}},"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":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-Coder-Next":{"id":"Qwen/Qwen3-Coder-Next","name":"Qwen3-Coder-Next","family":"qwen","attachment":false,"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}},"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-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}},"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-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-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}},"Qwen/Qwen3-Embedding-4B":{"id":"Qwen/Qwen3-Embedding-4B","name":"Qwen 3 Embedding 4B","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":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,"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}},"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":"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}},"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.6,"output":2.2,"cache_read":0.11},"limit":{"context":204800,"output":131072}},"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,"release_date":"2026-04-03","last_updated":"2026-04-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":1,"output":3.2,"cache_read":0.2},"limit":{"context":202752,"output":131072}},"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,"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}},"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":"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}},"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,"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}},"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":"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}},"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":"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}},"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,"cost":{"input":1,"output":3},"limit":{"context":131072,"output":16384}},"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}},"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"},"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}},"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,"cache_read":0.03},"limit":{"context":204800,"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}}}},"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,"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}},"deepseek/deepseek-v3.2-exp":{"id":"deepseek/deepseek-v3.2-exp","name":"DeepSeek-V3.2-Exp","attachment":false,"reasoning":true,"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}},"deepseek/deepseek-v3.2":{"id":"deepseek/deepseek-v3.2","name":"DeepSeek V3.2","attachment":false,"reasoning":true,"tool_call":true,"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}},"inclusionai/ring-1t":{"id":"inclusionai/ring-1t","name":"Ring-1T","attachment":false,"reasoning":true,"tool_call":true,"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}},"inclusionai/ling-1t":{"id":"inclusionai/ling-1t","name":"Ling-1T","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}},"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,"temperature":true,"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,"output":0},"limit":{"context":256000,"output":64000}},"stepfun/step-3.5-flash":{"id":"stepfun/step-3.5-flash","name":"Step 3.5 Flash","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"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.1,"output":0.3},"limit":{"context":256000,"output":64000}},"stepfun/step-3":{"id":"stepfun/step-3","name":"Step-3","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"]},"open_weights":false,"cost":{"input":0.21,"output":0.57},"limit":{"context":65536,"output":64000}},"kuaishou/kat-coder-pro-v2":{"id":"kuaishou/kat-coder-pro-v2","name":"KAT-Coder-Pro-V2","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2026-03-30","last_updated":"2026-03-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"limit":{"context":256000,"output":80000}},"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"]},"open_weights":false,"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"limit":{"context":2000000,"output":64000}},"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,"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}},"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":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}},"x-ai/grok-4":{"id":"x-ai/grok-4","name":"Grok 4","attachment":true,"reasoning":true,"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}},"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,"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}},"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,"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}},"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,"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}},"openai/gpt-5.3-chat":{"id":"openai/gpt-5.3-chat","name":"GPT-5.3 Chat","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":1.75,"output":14},"limit":{"context":128000,"output":16380},"provider":{"npm":"@ai-sdk/openai","api":"https://zenmux.ai/api/v1"}},"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,"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"}},"openai/gpt-5.3-codex":{"id":"openai/gpt-5.3-codex","name":"GPT-5.3 Codex","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"],"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"}},"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.4-mini":{"id":"openai/gpt-5.4-mini","name":"GPT-5.4 Mini","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"}},"openai/gpt-5.1-chat":{"id":"openai/gpt-5.1-chat","name":"GPT-5.1 Chat","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"]},"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"}},"openai/gpt-5.4-nano":{"id":"openai/gpt-5.4-nano","name":"GPT-5.4 Nano","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"}},"openai/gpt-5.2-codex":{"id":"openai/gpt-5.2-codex","name":"GPT-5.2-Codex","attachment":true,"reasoning":true,"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"}},"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,"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,"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"}},"openai/gpt-5.1":{"id":"openai/gpt-5.1","name":"GPT-5.1","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":["image","text","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"}},"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,"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"}},"openai/gpt-5-codex":{"id":"openai/gpt-5-codex","name":"GPT-5 Codex","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"]},"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"}},"openai/gpt-5.4":{"id":"openai/gpt-5.4","name":"GPT-5.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":3.75,"output":18.75},"limit":{"context":1050000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://zenmux.ai/api/v1"}},"openai/gpt-5":{"id":"openai/gpt-5","name":"GPT-5","attachment":true,"reasoning":true,"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"}},"openai/gpt-5.1-codex":{"id":"openai/gpt-5.1-codex","name":"GPT-5.1-Codex","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"]},"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"}},"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":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-5v-turbo":{"id":"z-ai/glm-5v-turbo","name":"GLM 5V Turbo","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","video","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":0.726,"output":3.1946,"cache_read":0.1743},"limit":{"context":200000,"output":128000}},"z-ai/glm-4.7":{"id":"z-ai/glm-4.7","name":"GLM 4.7","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"]},"open_weights":false,"cost":{"input":0.28,"output":1.14,"cache_read":0.06},"limit":{"context":200000,"output":64000}},"z-ai/glm-5":{"id":"z-ai/glm-5","name":"GLM 5","attachment":false,"reasoning":true,"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-01-01","release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.58,"output":2.6,"cache_read":0.14},"limit":{"context":200000,"output":128000}},"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,"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}},"z-ai/glm-4.6v-flash-free":{"id":"z-ai/glm-4.6v-flash-free","name":"GLM 4.6V Flash (Free)","attachment":true,"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"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":200000,"output":64000}},"z-ai/glm-5.1":{"id":"z-ai/glm-5.1","name":"GLM-5.1","attachment":false,"reasoning":true,"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-03","last_updated":"2026-04-03","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.8781,"output":3.5126,"cache_read":0.1903},"limit":{"context":200000,"output":131072}},"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":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}},"z-ai/glm-4.5":{"id":"z-ai/glm-4.5","name":"GLM 4.5","attachment":false,"reasoning":true,"tool_call":true,"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}},"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,"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}},"z-ai/glm-5-turbo":{"id":"z-ai/glm-5-turbo","name":"GLM 5 Turbo","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"]},"open_weights":false,"cost":{"input":0.88,"output":3.48},"limit":{"context":200000,"output":128000}},"z-ai/glm-4.6":{"id":"z-ai/glm-4.6","name":"GLM 4.6","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,"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}},"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,"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.9,"output":4.48},"limit":{"context":256000,"output":32000}},"volcengine/doubao-seed-code":{"id":"volcengine/doubao-seed-code","name":"Doubao-Seed-Code","attachment":true,"reasoning":true,"tool_call":true,"temperature":true,"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":0.17,"output":1.12,"cache_read":0.03},"limit":{"context":256000,"output":64000}},"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,"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":0.03,"output":0.28,"cache_read":0.01,"cache_write":0.0024},"limit":{"context":256000,"output":64000}},"volcengine/doubao-seed-2.0-lite":{"id":"volcengine/doubao-seed-2.0-lite","name":"Doubao-Seed-2.0-lite","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"]},"open_weights":false,"cost":{"input":0.09,"output":0.51,"cache_read":0.02,"cache_write":0.0024},"limit":{"context":256000,"output":64000}},"volcengine/doubao-seed-1.8":{"id":"volcengine/doubao-seed-1.8","name":"Doubao-Seed-1.8","attachment":true,"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"]},"open_weights":false,"cost":{"input":0.11,"output":0.28,"cache_read":0.02,"cache_write":0.0024},"limit":{"context":256000,"output":64000}},"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,"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":0.45,"output":2.24,"cache_read":0.09,"cache_write":0.0024},"limit":{"context":256000,"output":64000}},"baidu/ernie-5.0-thinking-preview":{"id":"baidu/ernie-5.0-thinking-preview","name":"ERNIE 5.0","attachment":true,"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}},"minimax/minimax-m2.7":{"id":"minimax/minimax-m2.7","name":"MiniMax M2.7","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"]},"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"}},"minimax/minimax-m2.7-highspeed":{"id":"minimax/minimax-m2.7-highspeed","name":"MiniMax M2.7 highspeed","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"]},"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":{"id":"minimax/minimax-m2","name":"MiniMax M2","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"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.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"}},"minimax/minimax-m2.1":{"id":"minimax/minimax-m2.1","name":"MiniMax M2.1","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"]},"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"}},"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,"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"}},"minimax/minimax-m2.5":{"id":"minimax/minimax-m2.5","name":"MiniMax M2.5","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.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"}},"qwen/qwen3-coder-plus":{"id":"qwen/qwen3-coder-plus","name":"Qwen3-Coder-Plus","attachment":false,"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"]},"open_weights":false,"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"limit":{"context":1000000,"output":64000}},"qwen/qwen3.5-flash":{"id":"qwen/qwen3.5-flash","name":"Qwen3.5 Flash","attachment":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","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.1,"output":0.4},"limit":{"context":1020000,"output":1020000}},"qwen/qwen3.6-plus":{"id":"qwen/qwen3.6-plus","name":"Qwen3.6-Plus","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2026-03-30","last_updated":"2026-03-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"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}},"limit":{"context":1000000,"output":64000}},"qwen/qwen3-max":{"id":"qwen/qwen3-max","name":"Qwen3-Max-Thinking","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"knowledge":"2025-01-01","release_date":"2026-01-23","last_updated":"2026-01-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":1.2,"output":6},"limit":{"context":256000,"output":64000}},"qwen/qwen3.5-plus":{"id":"qwen/qwen3.5-plus","name":"Qwen3.5 Plus","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"]},"open_weights":false,"cost":{"input":0.8,"output":4.8},"limit":{"context":1000000,"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}},"google/gemini-3.1-pro-preview":{"id":"google/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","attachment":true,"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}},"google/gemini-3-flash-preview":{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","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","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}},"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,"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":1.25,"output":10,"cache_read":0.31,"cache_write":4.5},"limit":{"context":1048000,"output":64000}},"google/gemini-2.5-flash":{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","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"],"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-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,"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}},"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":"2026-03-26","last_updated":"2026-03-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.12,"output":0.6},"limit":{"context":256000,"output":256000}},"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":"2026-03-21","last_updated":"2026-03-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.16,"output":0.8},"limit":{"context":256000,"output":256000}},"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,"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":0.58,"output":3.02,"cache_read":0.1},"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}},"moonshotai/kimi-k2-0905":{"id":"moonshotai/kimi-k2-0905","name":"Kimi K2 0905","attachment":false,"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":{"id":"moonshotai/kimi-k2-thinking","name":"Kimi K2 Thinking","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":0.6,"output":2.5,"cache_read":0.15},"limit":{"context":262000,"output":64000}},"anthropic/claude-opus-4.1":{"id":"anthropic/claude-opus-4.1","name":"Claude Opus 4.1","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"]},"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"}},"anthropic/claude-3.7-sonnet":{"id":"anthropic/claude-3.7-sonnet","name":"Claude 3.7 Sonnet","attachment":true,"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"]},"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"}},"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,"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"}},"anthropic/claude-sonnet-4":{"id":"anthropic/claude-sonnet-4","name":"Claude Sonnet 4","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"]},"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"}},"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,"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":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"}},"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,"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":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"}},"anthropic/claude-opus-4":{"id":"anthropic/claude-opus-4","name":"Claude Opus 4","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"]},"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"}},"anthropic/claude-3.5-haiku":{"id":"anthropic/claude-3.5-haiku","name":"Claude 3.5 Haiku","attachment":true,"reasoning":false,"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"]},"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"}},"anthropic/claude-haiku-4.5":{"id":"anthropic/claude-haiku-4.5","name":"Claude Haiku 4.5","attachment":true,"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"}},"anthropic/claude-sonnet-4.6":{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","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"]},"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"}},"xiaomi/mimo-v2-omni":{"id":"xiaomi/mimo-v2-omni","name":"MiMo V2 Omni","attachment":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","image","video"],"output":["text"]},"open_weights":false,"cost":{"input":0.4,"output":2},"limit":{"context":265000,"output":265000}},"xiaomi/mimo-v2-pro":{"id":"xiaomi/mimo-v2-pro","name":"MiMo V2 Pro","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"]},"open_weights":false,"cost":{"input":1.5,"output":4.5},"limit":{"context":1000000,"output":256000}},"xiaomi/mimo-v2-flash":{"id":"xiaomi/mimo-v2-flash","name":"MiMo-V2-Flash","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"],"output":["text"]},"open_weights":false,"cost":{"input":0.1,"output":0.3,"cache_read":0.01},"limit":{"context":262000,"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-pro2":{"id":"solar-pro2","name":"solar-pro2","family":"solar-pro","attachment":false,"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"]},"open_weights":false,"cost":{"input":0.25,"output":0.25},"limit":{"context":65536,"output":8192}},"solar-mini":{"id":"solar-mini","name":"solar-mini","family":"solar-mini","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"]},"open_weights":false,"cost":{"input":0.15,"output":0.15},"limit":{"context":32768,"output":4096}},"solar-pro3":{"id":"solar-pro3","name":"solar-pro3","family":"solar-pro","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"]},"open_weights":false,"cost":{"input":0.25,"output":0.25},"limit":{"context":131072,"output":8192}}}},"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":"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}},"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-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}},"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"]},"open_weights":true,"cost":{"input":0.03,"output":0.03},"limit":{"context":8192,"output":8192}},"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-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}},"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,"release_date":"2025-01-27","last_updated":"2025-01-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.8,"output":0.8},"limit":{"context":8192,"output":8192}},"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":"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}},"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":false,"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-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-09-29","last_updated":"2025-09-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.27,"output":0.41},"limit":{"context":163840,"output":65536}},"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"]},"open_weights":true,"cost":{"input":0.27,"output":1,"cache_read":0.135},"limit":{"context":131072,"output":32768}},"deepseek/deepseek-v3.2":{"id":"deepseek/deepseek-v3.2","name":"Deepseek V3.2","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}},"deepseek/deepseek-v3-turbo":{"id":"deepseek/deepseek-v3-turbo","name":"DeepSeek V3 (Turbo)\t","attachment":false,"reasoning":false,"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.4,"output":1.3},"limit":{"context":64000,"output":16000}},"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,"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}},"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-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}},"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"]},"open_weights":true,"cost":{"input":0.02,"output":0.02},"limit":{"context":16384,"output":16384}},"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}},"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":"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}},"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-11","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":202800,"output":131072}},"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-03-27","last_updated":"2026-03-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"limit":{"context":204800,"output":131072}},"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":"2025-07-28","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.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,"knowledge":"2025-04","release_date":"2025-10-13","last_updated":"2025-10-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.13,"output":0.85},"limit":{"context":131072,"output":98304}},"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,"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.6,"output":1.8,"cache_read":0.11},"limit":{"context":65536,"output":16384}},"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":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"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,"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"]},"open_weights":true,"cost":{"input":0.3,"output":0.9,"cache_read":0.055},"limit":{"context":131072,"output":32768}},"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,"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},"limit":{"context":200000,"output":128000}},"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-10","last_updated":"2025-12-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.035,"output":0.138},"limit":{"context":65536,"output":65536}},"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}},"baichuan/baichuan-m2-32b":{"id":"baichuan/baichuan-m2-32b","name":"baichuan-m2-32b","family":"baichuan","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"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}},"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.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-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.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-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}},"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":"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}},"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-04-25","last_updated":"2024-04-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.09,"output":0.09},"limit":{"context":4096,"output":3200}},"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":"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}},"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":"2024-06-18","last_updated":"2024-06-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":1.48,"output":1.48},"limit":{"context":8192,"output":8192}},"sao10k/L3-8B-Stheno-v3.2":{"id":"sao10k/L3-8B-Stheno-v3.2","name":"L3 8B Stheno V3.2","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2024-11-29","last_updated":"2024-11-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.05,"output":0.05},"limit":{"context":8192,"output":32000}},"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":"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}},"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}},"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}},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"OpenAI GPT OSS 120B","attachment":true,"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}},"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":"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}},"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,"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}},"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-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}},"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}},"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,"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-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,"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}},"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":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}},"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":"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":131072}},"minimax/minimax-m2":{"id":"minimax/minimax-m2","name":"MiniMax-M2","family":"minimax","attachment":false,"reasoning":true,"tool_call":true,"interleaved":{"field":"reasoning_content"},"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}},"minimax/minimax-m2.1":{"id":"minimax/minimax-m2.1","name":"Minimax M2.1","family":"minimax","attachment":false,"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}},"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":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.3,"output":1.2,"cache_read":0.03},"limit":{"context":204800,"output":131100}},"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":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.6,"output":2.4,"cache_read":0.03},"limit":{"context":204800,"output":131100}},"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":"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.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-26","last_updated":"2026-02-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"cost":{"input":0.4,"output":3.2},"limit":{"context":262144,"output":65536}},"qwen/qwen3.5-27b":{"id":"qwen/qwen3.5-27b","name":"Qwen3.5-27B","family":"qwen","attachment":true,"reasoning":true,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-26","last_updated":"2026-02-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"cost":{"input":0.3,"output":2.4},"limit":{"context":262144,"output":65536}},"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-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/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":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}},"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":"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}},"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,"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}},"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-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/qwen3-vl-30b-a3b-thinking":{"id":"qwen/qwen3-vl-30b-a3b-thinking","name":"qwen/qwen3-vl-30b-a3b-thinking","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}},"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":"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}},"qwen/qwen3-vl-8b-instruct":{"id":"qwen/qwen3-vl-8b-instruct","name":"qwen/qwen3-vl-8b-instruct","attachment":true,"reasoning":false,"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}},"qwen/qwen3-max":{"id":"qwen/qwen3-max","name":"Qwen3 Max","family":"qwen","attachment":false,"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"]},"open_weights":false,"cost":{"input":2.11,"output":8.45},"limit":{"context":262144,"output":65536}},"qwen/qwen3-32b-fp8":{"id":"qwen/qwen3-32b-fp8","name":"Qwen3 32B","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.1,"output":0.45},"limit":{"context":40960,"output":20000}},"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-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}},"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":131072,"output":32768}},"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,"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}},"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}},"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-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}},"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-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":"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-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":"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}},"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-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}},"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":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}},"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}},"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}},"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":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}},"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}},"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-26","last_updated":"2026-02-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"cost":{"input":0.25,"output":2},"limit":{"context":262144,"output":65536}},"kwaipilot/kat-coder-pro":{"id":"kwaipilot/kat-coder-pro","name":"Kat Coder Pro","attachment":false,"reasoning":false,"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}},"google/gemma-4-31b-it":{"id":"google/gemma-4-31b-it","name":"Gemma 4 31B","family":"gemma","attachment":true,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.14,"output":0.4},"limit":{"context":262144,"output":131072}},"google/gemma-3-27b-it":{"id":"google/gemma-3-27b-it","name":"Gemma 3 27B","family":"gemma","attachment":true,"reasoning":false,"tool_call":false,"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}},"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,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.13,"output":0.4},"limit":{"context":262144,"output":131072}},"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-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}},"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-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}},"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":"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}},"moonshotai/kimi-k2-thinking":{"id":"moonshotai/kimi-k2-thinking","name":"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-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}}}},"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-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":true,"cost":{"input":0,"output":0,"cache_read":0},"limit":{"context":256000,"output":128000}},"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,"cost":{"input":0,"output":0},"limit":{"context":8000,"output":16000}},"mimo-v2-pro":{"id":"mimo-v2-pro","name":"MiMo-V2-Pro","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":0,"output":0,"cache_read":0},"limit":{"context":1000000,"output":128000}}}},"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":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}},"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,"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}},"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":"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}},"zai-org/GLM-5-FP8":{"id":"zai-org/GLM-5-FP8","name":"GLM 5","family":"glm","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}},"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,"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}},"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,"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}},"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,"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}},"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,"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}},"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-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}},"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,"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}},"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-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}},"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":"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}},"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-08-05","last_updated":"2026-03-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.05,"output":0.2},"limit":{"context":131072,"output":131072}},"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-08-05","last_updated":"2026-03-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.15,"output":0.6},"limit":{"context":131072,"output":131072}},"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":"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}},"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-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}}}},"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":{"miromind-ai/MiroThinker-v1.5-235B":{"id":"miromind-ai/MiroThinker-v1.5-235B","name":"MiroThinker V1.5 235B","attachment":false,"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}},"OpenGVLab/InternVL3-78B-TEE":{"id":"OpenGVLab/InternVL3-78B-TEE","name":"InternVL3 78B TEE","family":"opengvlab","attachment":false,"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"]},"open_weights":true,"cost":{"input":0.1,"output":0.39},"limit":{"context":32768,"output":32768}},"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":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.02,"output":0.1},"limit":{"context":32768,"output":32768}},"NousResearch/Hermes-4-405B-FP8-TEE":{"id":"NousResearch/Hermes-4-405B-FP8-TEE","name":"Hermes 4 405B FP8 TEE","family":"nousresearch","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.3,"output":1.2},"limit":{"context":131072,"output":65536}},"NousResearch/Hermes-4.3-36B":{"id":"NousResearch/Hermes-4.3-36B","name":"Hermes 4.3 36B","family":"nousresearch","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"]},"open_weights":true,"cost":{"input":0.1,"output":0.39},"limit":{"context":32768,"output":8192}},"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-12-29","last_updated":"2026-01-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.01,"output":0.05},"limit":{"context":40960,"output":40960}},"NousResearch/Hermes-4-70B":{"id":"NousResearch/Hermes-4-70B","name":"Hermes 4 70B","family":"nousresearch","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.11,"output":0.38},"limit":{"context":131072,"output":131072}},"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-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}},"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":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.07,"output":0.3},"limit":{"context":262144,"output":65536}},"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":"2025-12-29","last_updated":"2026-01-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.03,"output":0.11},"limit":{"context":32768,"output":32768}},"Qwen/Qwen3-235B-A22B":{"id":"Qwen/Qwen3-235B-A22B","name":"Qwen3 235B A22B","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"]},"open_weights":true,"cost":{"input":0.3,"output":1.2},"limit":{"context":40960,"output":40960}},"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,"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}},"Qwen/Qwen3Guard-Gen-0.6B":{"id":"Qwen/Qwen3Guard-Gen-0.6B","name":"Qwen3Guard Gen 0.6B","family":"qwen","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"]},"open_weights":true,"cost":{"input":0.01,"output":0.01,"cache_read":0.005},"limit":{"context":32768,"output":8192}},"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.1,"output":0.8},"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-12-29","last_updated":"2026-01-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.08,"output":0.33},"limit":{"context":262144,"output":262144}},"Qwen/Qwen3-32B":{"id":"Qwen/Qwen3-32B","name":"Qwen3 32B","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"]},"open_weights":true,"cost":{"input":0.08,"output":0.24,"cache_read":0.04},"limit":{"context":40960,"output":40960}},"Qwen/Qwen3-14B":{"id":"Qwen/Qwen3-14B","name":"Qwen3 14B","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"]},"open_weights":true,"cost":{"input":0.05,"output":0.22},"limit":{"context":40960,"output":40960}},"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-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}},"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-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.11,"output":0.6},"limit":{"context":262144,"output":262144}},"Qwen/Qwen2.5-VL-32B-Instruct":{"id":"Qwen/Qwen2.5-VL-32B-Instruct","name":"Qwen2.5 VL 32B Instruct","family":"qwen","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"]},"open_weights":true,"cost":{"input":0.05,"output":0.22},"limit":{"context":16384,"output":16384}},"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":"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}},"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","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.22,"output":0.95,"cache_read":0.11},"limit":{"context":262144,"output":262144}},"Qwen/Qwen3-VL-235B-A22B-Instruct":{"id":"Qwen/Qwen3-VL-235B-A22B-Instruct","name":"Qwen3 VL 235B A22B 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","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.3,"output":1.2},"limit":{"context":262144,"output":262144}},"Qwen/Qwen2.5-72B-Instruct":{"id":"Qwen/Qwen2.5-72B-Instruct","name":"Qwen2.5 72B 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.13,"output":0.52},"limit":{"context":32768,"output":32768}},"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":"2026-04-08","last_updated":"2026-04-08","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.95,"output":3.15,"cache_read":0.475},"limit":{"context":202752,"output":65535}},"zai-org/GLM-4.7-Flash":{"id":"zai-org/GLM-4.7-Flash","name":"GLM 4.7 Flash","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.06,"output":0.35},"limit":{"context":202752,"output":65535}},"zai-org/GLM-4.5-TEE":{"id":"zai-org/GLM-4.5-TEE","name":"GLM 4.5 TEE","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"]},"open_weights":true,"cost":{"input":0.35,"output":1.55},"limit":{"context":131072,"output":65536}},"zai-org/GLM-4.6-FP8":{"id":"zai-org/GLM-4.6-FP8","name":"GLM 4.6 FP8","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}},"zai-org/GLM-4.5-Air":{"id":"zai-org/GLM-4.5-Air","name":"GLM 4.5 Air","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"]},"open_weights":true,"cost":{"input":0.05,"output":0.22},"limit":{"context":131072,"output":131072}},"zai-org/GLM-4.7-FP8":{"id":"zai-org/GLM-4.7-FP8","name":"GLM 4.7 FP8","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}},"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":"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}},"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,"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":131072,"output":65536}},"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-12-29","last_updated":"2026-01-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.4,"output":1.5},"limit":{"context":202752,"output":65535}},"zai-org/GLM-4.6V":{"id":"zai-org/GLM-4.6V","name":"GLM 4.6V","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","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.3,"output":0.9,"cache_read":0.15},"limit":{"context":131072,"output":65536}},"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-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}},"zai-org/GLM-4.6-TEE":{"id":"zai-org/GLM-4.6-TEE","name":"GLM 4.6 TEE","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"]},"open_weights":true,"cost":{"input":0.4,"output":1.7,"cache_read":0.2},"limit":{"context":202752,"output":65536}},"mistralai/Devstral-2-123B-Instruct-2512-TEE":{"id":"mistralai/Devstral-2-123B-Instruct-2512-TEE","name":"Devstral 2 123B Instruct 2512 TEE","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"]},"open_weights":true,"cost":{"input":0.05,"output":0.22},"limit":{"context":262144,"output":65536}},"XiaomiMiMo/MiMo-V2-Flash":{"id":"XiaomiMiMo/MiMo-V2-Flash","name":"MiMo V2 Flash","family":"mimo","attachment":false,"reasoning":true,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-29","last_updated":"2026-01-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.09,"output":0.29},"limit":{"context":262144,"output":32000}},"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,"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}},"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,"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}},"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","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.06,"output":0.24},"limit":{"context":262144,"output":262144}},"deepseek-ai/DeepSeek-R1-TEE":{"id":"deepseek-ai/DeepSeek-R1-TEE","name":"DeepSeek R1 TEE","family":"deepseek-thinking","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"]},"open_weights":true,"cost":{"input":0.3,"output":1.2},"limit":{"context":163840,"output":163840}},"deepseek-ai/DeepSeek-V3":{"id":"deepseek-ai/DeepSeek-V3","name":"DeepSeek V3","family":"deepseek","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.3,"output":1.2},"limit":{"context":163840,"output":163840}},"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":"2025-12-29","last_updated":"2026-01-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.03,"output":0.11},"limit":{"context":131072,"output":131072}},"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-12-29","last_updated":"2026-01-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.2,"output":0.8},"limit":{"context":163840,"output":65536}},"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-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-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"]},"open_weights":true,"cost":{"input":0.27,"output":0.41},"limit":{"context":163840,"output":65536}},"deepseek-ai/DeepSeek-V3.1-Terminus-TEE":{"id":"deepseek-ai/DeepSeek-V3.1-Terminus-TEE","name":"DeepSeek V3.1 Terminus 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.23,"output":0.9},"limit":{"context":163840,"output":65536}},"deepseek-ai/DeepSeek-R1-0528-TEE":{"id":"deepseek-ai/DeepSeek-R1-0528-TEE","name":"DeepSeek R1 0528 TEE","family":"deepseek-thinking","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.4,"output":1.75},"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}},"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"},"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.1},"limit":{"context":131072,"output":131072}},"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-12-29","last_updated":"2026-01-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.04,"output":0.18},"limit":{"context":131072,"output":65536}},"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"]},"open_weights":true,"cost":{"input":0.03,"output":0.1},"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/gemma-3-4b-it":{"id":"unsloth/gemma-3-4b-it","name":"gemma 3 4b 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"]},"open_weights":true,"cost":{"input":0.01,"output":0.03},"limit":{"context":96000,"output":96000}},"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-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/Mistral-Small-24B-Instruct-2501":{"id":"unsloth/Mistral-Small-24B-Instruct-2501","name":"Mistral Small 24B Instruct 2501","family":"unsloth","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","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.03,"output":0.11},"limit":{"context":32768,"output":32768}},"unsloth/gemma-3-27b-it":{"id":"unsloth/gemma-3-27b-it","name":"gemma 3 27b it","family":"unsloth","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","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.04,"output":0.15,"cache_read":0.02},"limit":{"context":128000,"output":65536}},"moonshotai/Kimi-K2-Thinking-TEE":{"id":"moonshotai/Kimi-K2-Thinking-TEE","name":"Kimi K2 Thinking TEE","family":"kimi-thinking","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.4,"output":1.75},"limit":{"context":262144,"output":65535}},"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-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,"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.6,"output":3},"limit":{"context":262144,"output":65535}},"MiniMaxAI/MiniMax-M2.1-TEE":{"id":"MiniMaxAI/MiniMax-M2.1-TEE","name":"MiniMax M2.1 TEE","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-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.27,"output":1.12},"limit":{"context":196608,"output":65536}},"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"]},"open_weights":true,"cost":{"input":0.3,"output":1.1,"cache_read":0.15},"limit":{"context":196608,"output":65536}},"rednote-hilab/dots.ocr":{"id":"rednote-hilab/dots.ocr","name":"dots.ocr","family":"rednote","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"]},"open_weights":true,"cost":{"input":0.01,"output":0.01,"cache_read":0.005},"limit":{"context":131072,"output":131072}},"tngtech/TNG-R1T-Chimera-Turbo":{"id":"tngtech/TNG-R1T-Chimera-Turbo","name":"TNG R1T Chimera Turbo","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.22,"output":0.6},"limit":{"context":163840,"output":65536}},"tngtech/DeepSeek-TNG-R1T2-Chimera":{"id":"tngtech/DeepSeek-TNG-R1T2-Chimera","name":"DeepSeek TNG R1T2 Chimera","family":"tngtech","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.25,"output":0.85},"limit":{"context":163840,"output":163840}},"tngtech/DeepSeek-R1T-Chimera":{"id":"tngtech/DeepSeek-R1T-Chimera","name":"DeepSeek R1T Chimera","family":"tngtech","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"]},"open_weights":true,"cost":{"input":0.3,"output":1.2},"limit":{"context":163840,"output":163840}},"tngtech/TNG-R1T-Chimera-TEE":{"id":"tngtech/TNG-R1T-Chimera-TEE","name":"TNG R1T Chimera TEE","family":"tngtech","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.25,"output":0.85},"limit":{"context":163840,"output":65536}}}},"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":{"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}},"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}},"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}}}},"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":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}},"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,"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"}},"glm-5":{"id":"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,"cost":{"input":1,"output":3.2,"cache_read":0.2},"limit":{"context":202752,"output":131000},"provider":{"npm":"@ai-sdk/openai-compatible"}},"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,"cost":{"input":2,"output":12,"cache_read":0.2,"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"limit":{"context":1048576,"output":65536},"provider":{"npm":"@ai-sdk/openai-compatible"}},"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.25,"output":2,"cache_read":0.03},"limit":{"context":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai-compatible"}},"gpt-5.3-codex":{"id":"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"]},"open_weights":false,"cost":{"input":1.75,"output":14,"cache_read":0.175},"limit":{"context":400000,"output":128000}},"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},"provider":{"npm":"@ai-sdk/openai-compatible"}},"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.2,"output":1.25,"cache_read":0.02},"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai-compatible"}},"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":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}},"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":2.5,"output":15,"cache_read":0.25},"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai-compatible"}},"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.28,"output":0.42},"limit":{"context":128000,"output":128000},"provider":{"npm":"@ai-sdk/openai-compatible"}},"gpt-5.1-codex":{"id":"gpt-5.1-codex","name":"GPT-5.1 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"]},"open_weights":false,"cost":{"input":1.25,"output":10,"cache_read":0.125},"limit":{"context":400000,"output":128000}}}},"deepinfra":{"id":"deepinfra","env":["DEEPINFRA_API_KEY"],"npm":"@ai-sdk/deepinfra","name":"Deep Infra","doc":"https://deepinfra.com/models","models":{"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":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}},"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,"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}},"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,"interleaved":{"field":"reasoning_content"},"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.06,"output":0.4},"limit":{"context":202752,"output":16384}},"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,"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":131072,"output":98304},"status":"deprecated"},"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.43,"output":1.75,"cache_read":0.08},"limit":{"context":202752,"output":16384}},"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,"knowledge":"2025-04","release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"limit":{"context":202752,"output":16384}},"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-12","release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.8,"output":2.56,"cache_read":0.16},"limit":{"context":202752,"output":16384}},"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"},"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.3,"output":0.9},"limit":{"context":204800,"output":131072}},"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":"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}},"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,"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}},"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,"release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.4,"output":0.4},"limit":{"context":131072,"output":16384}},"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,"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}},"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,"release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.1,"output":0.32},"limit":{"context":131072,"output":16384}},"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,"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":1000000,"output":16384}},"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,"release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.4,"output":0.4},"limit":{"context":131072,"output":16384}},"deepseek-ai/DeepSeek-R1-0528":{"id":"deepseek-ai/DeepSeek-R1-0528","name":"DeepSeek-R1-0528","attachment":false,"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,"cost":{"input":0.5,"output":2.15,"cache_read":0.35},"limit":{"context":163840,"output":64000}},"deepseek-ai/DeepSeek-V3.2":{"id":"deepseek-ai/DeepSeek-V3.2","name":"DeepSeek-V3.2","attachment":false,"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"]},"open_weights":false,"cost":{"input":0.26,"output":0.38,"cache_read":0.13},"limit":{"context":163840,"output":64000}},"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,"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":16384}},"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,"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":16384}},"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":"2024-10","release_date":"2025-11-06","last_updated":"2025-11-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.47,"output":2},"limit":{"context":131072,"output":32768}},"moonshotai/Kimi-K2-Instruct":{"id":"moonshotai/Kimi-K2-Instruct","name":"Kimi K2","family":"kimi","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":0.5,"output":2},"limit":{"context":131072,"output":32768}},"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,"knowledge":"2024-10","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":262144,"output":262144}},"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-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}},"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,"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}},"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":"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}},"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-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}},"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,"cost":{"input":3.3,"output":16.5,"cache_read":0.33},"limit":{"context":200000,"output":64000}},"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,"cost":{"input":16.5,"output":82.5},"limit":{"context":200000,"output":32000}}}},"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":{"qwen3-235b-a22b":{"id":"qwen3-235b-a22b","name":"Qwen 3 235B A22B","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"]},"open_weights":false,"limit":{"context":128000,"output":32000}},"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":false,"temperature":true,"release_date":"2025-08-15","last_updated":"2025-08-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000}},"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":true,"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}},"deepseek-v3-0324":{"id":"deepseek-v3-0324","name":"DeepSeek-V3-0324","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"]},"open_weights":false,"limit":{"context":128000,"output":16000}},"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":false,"temperature":true,"release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16000}},"claude-3.7-sonnet":{"id":"claude-3.7-sonnet","name":"Claude 3.7 Sonnet","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":128000}},"qwen3.5-397b-a17b":{"id":"qwen3.5-397b-a17b","name":"Qwen3.5 397B A17B","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"]},"open_weights":false,"limit":{"context":256000,"output":64000}},"qwen-vl-max-2025-01-25":{"id":"qwen-vl-max-2025-01-25","name":"Qwen VL-MAX-2025-01-25","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":4096}},"qwen3-32b":{"id":"qwen3-32b","name":"Qwen3 32B","attachment":false,"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"]},"open_weights":false,"limit":{"context":40000,"output":4096}},"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"]},"open_weights":false,"limit":{"context":128000,"output":12000}},"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}},"gemini-2.0-flash":{"id":"gemini-2.0-flash","name":"Gemini 2.0 Flash","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":8192}},"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":false,"temperature":true,"release_date":"2026-02-09","last_updated":"2026-02-09","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32000}},"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":false,"temperature":true,"release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536}},"claude-4.5-opus":{"id":"claude-4.5-opus","name":"Claude 4.5 Opus","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"]},"open_weights":false,"limit":{"context":200000,"output":200000}},"deepseek-r1":{"id":"deepseek-r1","name":"DeepSeek-R1","attachment":false,"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"]},"open_weights":false,"limit":{"context":128000,"output":32000}},"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":"2025-08-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000}},"claude-4.5-haiku":{"id":"claude-4.5-haiku","name":"Claude 4.5 Haiku","attachment":true,"reasoning":true,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-10-16","last_updated":"2025-10-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000}},"qwen3-max":{"id":"qwen3-max","name":"Qwen3 Max","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-09-24","last_updated":"2025-09-24","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536}},"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":false,"temperature":true,"release_date":"2025-12-18","last_updated":"2025-12-18","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000}},"gemini-2.5-flash-image":{"id":"gemini-2.5-flash-image","name":"Gemini 2.5 Flash Image","attachment":true,"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"]},"open_weights":false,"limit":{"context":32768,"output":8192}},"glm-4.5":{"id":"glm-4.5","name":"GLM 4.5","attachment":false,"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"]},"open_weights":false,"limit":{"context":131072,"output":98304}},"claude-3.5-sonnet":{"id":"claude-3.5-sonnet","name":"Claude 3.5 Sonnet","attachment":true,"reasoning":true,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-09-09","last_updated":"2025-09-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8200}},"claude-4.0-sonnet":{"id":"claude-4.0-sonnet","name":"Claude 4.0 Sonnet","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}},"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":false,"temperature":true,"release_date":"2026-02-04","last_updated":"2026-02-04","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32000}},"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":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}},"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"Gemini 2.5 Flash","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","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":64000}},"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":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":4096}},"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":false,"temperature":true,"release_date":"2025-09-12","last_updated":"2025-09-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":32768}},"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-02-04","last_updated":"2026-02-04","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":126000,"output":32000}},"glm-4.5-air":{"id":"glm-4.5-air","name":"GLM 4.5 Air","attachment":false,"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"]},"open_weights":false,"limit":{"context":131000,"output":4096}},"deepseek-v3.1":{"id":"deepseek-v3.1","name":"DeepSeek-V3.1","attachment":false,"reasoning":true,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-08-19","last_updated":"2025-08-19","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32000}},"qwen3-30b-a3b":{"id":"qwen3-30b-a3b","name":"Qwen3 30B A3B","attachment":false,"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"]},"open_weights":false,"limit":{"context":40000,"output":4096}},"claude-4.1-opus":{"id":"claude-4.1-opus","name":"Claude 4.1 Opus","attachment":true,"reasoning":true,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-08-06","last_updated":"2025-08-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000}},"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,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000}},"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":false,"temperature":true,"release_date":"2025-09-12","last_updated":"2025-09-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":32768}},"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,"release_date":"2025-08-15","last_updated":"2025-08-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000}},"qwen2.5-vl-7b-instruct":{"id":"qwen2.5-vl-7b-instruct","name":"Qwen 2.5 VL 7B 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}},"kling-v2-6":{"id":"kling-v2-6","name":"Kling-V2 6","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"]},"open_weights":false,"limit":{"context":99999999,"output":99999999}},"MiniMax-M1":{"id":"MiniMax-M1","name":"MiniMax M1","attachment":false,"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"]},"open_weights":false,"limit":{"context":1000000,"output":80000}},"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,"release_date":"2025-11-19","last_updated":"2025-11-19","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000}},"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":false,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000}},"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,"release_date":"2025-08-14","last_updated":"2025-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262000,"output":4096}},"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,"release_date":"2025-08-26","last_updated":"2025-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8192}},"gpt-oss-20b":{"id":"gpt-oss-20b","name":"gpt-oss-20b","attachment":false,"reasoning":true,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-08-06","last_updated":"2025-08-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096}},"qwen-turbo":{"id":"qwen-turbo","name":"Qwen-Turbo","attachment":false,"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"]},"open_weights":false,"limit":{"context":1000000,"output":4096}},"kimi-k2":{"id":"kimi-k2","name":"Kimi K2","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"]},"open_weights":false,"limit":{"context":128000,"output":128000}},"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}},"mimo-v2-flash":{"id":"mimo-v2-flash","name":"Mimo-V2-Flash","attachment":false,"reasoning":true,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000}},"qwen3-max-preview":{"id":"qwen3-max-preview","name":"Qwen3 Max Preview","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-09-06","last_updated":"2025-09-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":64000}},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"gpt-oss-120b","attachment":false,"reasoning":true,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-08-06","last_updated":"2025-08-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096}},"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,"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}},"claude-4.5-sonnet":{"id":"claude-4.5-sonnet","name":"Claude 4.5 Sonnet","attachment":true,"reasoning":true,"tool_call":true,"structured_output":false,"temperature":true,"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-v3":{"id":"deepseek-v3","name":"DeepSeek-V3","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"]},"open_weights":false,"limit":{"context":128000,"output":16000}},"deepseek-r1-0528":{"id":"deepseek-r1-0528","name":"DeepSeek-R1-0528","attachment":false,"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"]},"open_weights":false,"limit":{"context":128000,"output":32000}},"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":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":8192}},"qwen-max-2025-01-25":{"id":"qwen-max-2025-01-25","name":"Qwen2.5-Max-2025-01-25","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"]},"open_weights":false,"limit":{"context":128000,"output":4096}},"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,"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}},"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":false,"structured_output":false,"temperature":true,"release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32000}},"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":false,"structured_output":false,"temperature":true,"release_date":"2025-09-22","last_updated":"2025-09-22","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32000}},"deepseek/deepseek-v3.2-exp":{"id":"deepseek/deepseek-v3.2-exp","name":"DeepSeek/DeepSeek-V3.2-Exp","attachment":false,"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"]},"open_weights":false,"limit":{"context":128000,"output":32000}},"deepseek/deepseek-v3.2-251201":{"id":"deepseek/deepseek-v3.2-251201","name":"Deepseek/DeepSeek-V3.2","attachment":false,"reasoning":true,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32000}},"deepseek/deepseek-math-v2":{"id":"deepseek/deepseek-math-v2","name":"Deepseek/Deepseek-Math-V2","attachment":false,"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"]},"open_weights":false,"limit":{"context":160000,"output":160000}},"deepseek/deepseek-v3.1-terminus":{"id":"deepseek/deepseek-v3.1-terminus","name":"DeepSeek/DeepSeek-V3.1-Terminus","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-09-22","last_updated":"2025-09-22","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32000}},"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,"release_date":"2026-02-02","last_updated":"2026-02-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":64000,"output":4096}},"x-ai/grok-4-fast":{"id":"x-ai/grok-4-fast","name":"x-AI/Grok-4-Fast","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"]},"open_weights":false,"limit":{"context":2000000,"output":2000000}},"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":false,"temperature":true,"release_date":"2025-09-02","last_updated":"2025-09-02","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":10000}},"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":false,"temperature":true,"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}},"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,"structured_output":false,"temperature":true,"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}},"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":false,"temperature":true,"release_date":"2025-11-20","last_updated":"2025-11-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":2000000}},"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,"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}},"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":false,"temperature":true,"release_date":"2025-12-19","last_updated":"2025-12-19","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":20000000,"output":2000000}},"openai/gpt-5.2":{"id":"openai/gpt-5.2","name":"OpenAI/GPT-5.2","attachment":true,"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"]},"open_weights":false,"limit":{"context":400000,"output":128000}},"openai/gpt-5":{"id":"openai/gpt-5","name":"OpenAI/GPT-5","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-09-19","last_updated":"2025-09-19","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000}},"z-ai/glm-4.7":{"id":"z-ai/glm-4.7","name":"Z-Ai/GLM 4.7","attachment":false,"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":false,"limit":{"context":200000,"output":200000}},"z-ai/glm-5":{"id":"z-ai/glm-5","name":"Z-Ai/GLM 5","attachment":false,"reasoning":true,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":128000}},"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":false,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":12800,"output":4096}},"z-ai/glm-4.6":{"id":"z-ai/glm-4.6","name":"Z-AI/GLM 4.6","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-10-11","last_updated":"2025-10-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":200000}},"minimax/minimax-m2":{"id":"minimax/minimax-m2","name":"Minimax/Minimax-M2","attachment":false,"reasoning":true,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-10-28","last_updated":"2025-10-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":128000}},"minimax/minimax-m2.1":{"id":"minimax/minimax-m2.1","name":"Minimax/Minimax-M2.1","attachment":false,"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":false,"limit":{"context":204800,"output":128000}},"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,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":204800,"output":128000}},"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":false,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":204800,"output":128000}},"moonshotai/kimi-k2.5":{"id":"moonshotai/kimi-k2.5","name":"Moonshotai/Kimi-K2.5","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-01-28","last_updated":"2026-01-28","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000}},"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,"release_date":"2025-09-08","last_updated":"2025-09-08","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":100000}},"moonshotai/kimi-k2-thinking":{"id":"moonshotai/kimi-k2-thinking","name":"Kimi K2 Thinking","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-11-07","last_updated":"2025-11-07","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":100000}},"xiaomi/mimo-v2-flash":{"id":"xiaomi/mimo-v2-flash","name":"Xiaomi/Mimo-V2-Flash","attachment":false,"reasoning":true,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-12-26","last_updated":"2025-12-26","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000}},"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":false,"temperature":true,"release_date":"2026-02-06","last_updated":"2026-02-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":320000}}}},"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,"cost":{"input":0.1,"output":0.1},"limit":{"context":16384,"output":16384}},"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,"cost":{"input":0.1,"output":0.2},"limit":{"context":65536,"output":65536}},"ai21/jamba-large-1.7":{"id":"ai21/jamba-large-1.7","name":"AI21: Jamba Large 1.7","attachment":false,"reasoning":false,"tool_call":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}},"alibaba/tongyi-deepresearch-30b-a3b":{"id":"alibaba/tongyi-deepresearch-30b-a3b","name":"Tongyi DeepResearch 30B A3B","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-09-18","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.09,"output":0.45},"limit":{"context":131072,"output":131072}},"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"]},"open_weights":false,"cost":{"input":2.5,"output":10},"limit":{"context":8000,"output":1024}},"inflection/inflection-3-productivity":{"id":"inflection/inflection-3-productivity","name":"Inflection: Inflection 3 Productivity","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2024-10-11","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":2.5,"output":10},"limit":{"context":8000,"output":1024}},"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,"release_date":"2026-02-26","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.03,"output":0.12},"limit":{"context":32768,"output":32768}},"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"]},"open_weights":false,"cost":{"input":0.6,"output":6},"limit":{"context":1040000,"output":8192}},"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,"release_date":"2025-10-20","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.017,"output":0.11},"limit":{"context":131000,"output":32768}},"essentialai/rnj-1-instruct":{"id":"essentialai/rnj-1-instruct","name":"EssentialAI: Rnj 1 Instruct","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-12-05","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.15,"output":0.15},"limit":{"context":32768,"output":6554}},"perplexity/sonar-pro":{"id":"perplexity/sonar-pro","name":"Perplexity: Sonar Pro","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":3,"output":15},"limit":{"context":200000,"output":8000}},"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}},"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,"cost":{"input":1,"output":1},"limit":{"context":127072,"output":25415}},"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,"cost":{"input":3,"output":15},"limit":{"context":200000,"output":8000}},"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,"cost":{"input":2,"output":8},"limit":{"context":128000,"output":25600}},"deepseek/deepseek-chat-v3.1":{"id":"deepseek/deepseek-chat-v3.1","name":"DeepSeek: DeepSeek V3.1","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.15,"output":0.75},"limit":{"context":32768,"output":7168}},"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"]},"open_weights":true,"cost":{"input":0.32,"output":0.89,"cache_read":0.15},"limit":{"context":163840,"output":163840}},"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":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-v3.2-speciale":{"id":"deepseek/deepseek-v3.2-speciale","name":"DeepSeek: DeepSeek V3.2 Speciale","attachment":false,"reasoning":true,"tool_call":false,"temperature":true,"release_date":"2025-12-01","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.4,"output":1.2,"cache_read":0.135},"limit":{"context":163840,"output":163840}},"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":false,"temperature":true,"release_date":"2025-01-01","last_updated":"2025-11-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.29,"output":0.29},"limit":{"context":32768,"output":32768}},"deepseek/deepseek-v3.2-exp":{"id":"deepseek/deepseek-v3.2-exp","name":"DeepSeek: DeepSeek V3.2 Exp","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-01-01","last_updated":"2025-09-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.27,"output":0.41},"limit":{"context":163840,"output":65536}},"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-12-01","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.26,"output":0.38,"cache_read":0.125},"limit":{"context":163840,"output":65536}},"deepseek/deepseek-chat-v3-0324":{"id":"deepseek/deepseek-chat-v3-0324","name":"DeepSeek: DeepSeek V3 0324","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-03-24","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.2,"output":0.77,"cache_read":0.095},"limit":{"context":163840,"output":65536}},"deepseek/deepseek-r1-0528":{"id":"deepseek/deepseek-r1-0528","name":"DeepSeek: R1 0528","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-05-28","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.45,"output":2.15,"cache_read":0.2},"limit":{"context":163840,"output":65536}},"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"]},"open_weights":true,"cost":{"input":0.21,"output":0.79,"cache_read":0.13},"limit":{"context":163840,"output":32768}},"openrouter/auto":{"id":"openrouter/auto","name":"Auto Router","attachment":true,"reasoning":true,"tool_call":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}},"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,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":32768},"status":"beta"},"openrouter/free":{"id":"openrouter/free","name":"Free Models Router","attachment":true,"reasoning":true,"tool_call":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}},"arcee-ai/trinity-mini":{"id":"arcee-ai/trinity-mini","name":"Arcee AI: Trinity Mini","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-12","last_updated":"2026-01-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.045,"output":0.15},"limit":{"context":131072,"output":131072}},"arcee-ai/virtuoso-large":{"id":"arcee-ai/virtuoso-large","name":"Arcee AI: Virtuoso Large","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-05-06","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.75,"output":1.2},"limit":{"context":131072,"output":64000}},"arcee-ai/trinity-large-thinking":{"id":"arcee-ai/trinity-large-thinking","name":"Arcee AI: Trinity Large Thinking","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2026-04-01","last_updated":"2026-04-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.22,"output":0.85},"limit":{"context":262144,"output":262144}},"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,"cost":{"input":0.18,"output":0.18},"limit":{"context":131072,"output":65537}},"arcee-ai/trinity-large-thinking:free":{"id":"arcee-ai/trinity-large-thinking:free","name":"Arcee AI: Trinity Large Thinking (free)","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-08-26","last_updated":"2026-04-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":262144,"output":262144}},"arcee-ai/maestro-reasoning":{"id":"arcee-ai/maestro-reasoning","name":"Arcee AI: Maestro Reasoning","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-05-06","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.9,"output":3.3},"limit":{"context":131072,"output":32000}},"arcee-ai/coder-large":{"id":"arcee-ai/coder-large","name":"Arcee AI: Coder Large","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-05-06","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.5,"output":0.8},"limit":{"context":32768,"output":32768}},"deepcogito/cogito-v2.1-671b":{"id":"deepcogito/cogito-v2.1-671b","name":"Deep Cogito: Cogito v2.1 671B","attachment":false,"reasoning":true,"tool_call":false,"temperature":true,"release_date":"2025-11-14","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":1.25,"output":1.25},"limit":{"context":128000,"output":32768}},"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":"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}},"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,"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}},"bytedance-seed/dola-seed-2.0-pro:free":{"id":"bytedance-seed/dola-seed-2.0-pro:free","name":"ByteDance Seed: Dola Seed 2.0 Pro (free)","attachment":true,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-08-26","last_updated":"2026-04-11","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":256000,"output":128000}},"bytedance-seed/seed-1.6":{"id":"bytedance-seed/seed-1.6","name":"ByteDance Seed: Seed 1.6","attachment":true,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["image","text","video"],"output":["text"]},"open_weights":false,"cost":{"input":0.25,"output":2},"limit":{"context":262144,"output":32768}},"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,"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}},"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,"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}},"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,"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}},"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}},"anthracite-org/magnum-v4-72b":{"id":"anthracite-org/magnum-v4-72b","name":"Magnum v4 72B","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2024-10-22","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":3,"output":5},"limit":{"context":16384,"output":2048}},"kilo-auto/balanced":{"id":"kilo-auto/balanced","name":"Kilo Auto Balanced","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2026-03-15","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.6,"output":3},"limit":{"context":204800,"output":131072}},"kilo-auto/frontier":{"id":"kilo-auto/frontier","name":"Kilo Auto Frontier","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,"cost":{"input":5,"output":25},"limit":{"context":1000000,"output":128000}},"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,"cost":{"input":0.05,"output":0.4},"limit":{"context":400000,"output":128000}},"kilo-auto/free":{"id":"kilo-auto/free","name":"Kilo Auto Free","attachment":false,"reasoning":true,"tool_call":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}},"undi95/remm-slerp-l2-13b":{"id":"undi95/remm-slerp-l2-13b","name":"ReMM SLERP 13B","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2023-07-22","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.45,"output":0.65},"limit":{"context":6144,"output":4096}},"allenai/olmo-2-0325-32b-instruct":{"id":"allenai/olmo-2-0325-32b-instruct","name":"AllenAI: Olmo 2 32B Instruct","attachment":false,"reasoning":false,"tool_call":false,"release_date":"2025-03-15","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.05,"output":0.2},"limit":{"context":128000,"output":32768}},"allenai/olmo-3.1-32b-instruct":{"id":"allenai/olmo-3.1-32b-instruct","name":"AllenAI: Olmo 3.1 32B Instruct","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2026-01-07","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.2,"output":0.6},"limit":{"context":65536,"output":32768}},"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,"release_date":"2025-11-22","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.15,"output":0.5},"limit":{"context":65536,"output":65536}},"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":false,"tool_call":false,"temperature":true,"release_date":"2024-05-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}},"nousresearch/hermes-4-405b":{"id":"nousresearch/hermes-4-405b","name":"Nous: Hermes 4 405B","attachment":false,"reasoning":true,"tool_call":false,"temperature":true,"release_date":"2025-08-25","last_updated":"2025-08-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":1,"output":3},"limit":{"context":131072,"output":26215}},"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":false,"temperature":true,"release_date":"2024-08-18","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.3,"output":0.3},"limit":{"context":131072,"output":32768}},"nousresearch/hermes-4-70b":{"id":"nousresearch/hermes-4-70b","name":"Nous: Hermes 4 70B","attachment":false,"reasoning":true,"tool_call":false,"temperature":true,"release_date":"2025-08-25","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.13,"output":0.4,"cache_read":0.055},"limit":{"context":131072,"output":131072}},"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}},"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"]},"open_weights":false,"cost":{"input":0.8,"output":1.2},"limit":{"context":81920,"output":38000}},"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}},"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}},"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,"cost":{"input":0.1,"output":0.3,"cache_read":0.02},"limit":{"context":256000,"output":256000}},"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,"cost":{"input":3.75,"output":7.5},"limit":{"context":6144,"output":1024}},"mistralai/mistral-nemo":{"id":"mistralai/mistral-nemo","name":"Mistral: Mistral Nemo","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2024-07-01","last_updated":"2024-07-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.02,"output":0.04},"limit":{"context":131072,"output":16384}},"mistralai/mistral-saba":{"id":"mistralai/mistral-saba","name":"Mistral: Saba","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-02-17","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.2,"output":0.6},"limit":{"context":32768,"output":32768}},"mistralai/mistral-large-2512":{"id":"mistralai/mistral-large-2512","name":"Mistral: Mistral Large 3 2512","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2024-11-01","last_updated":"2025-12-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.5,"output":1.5},"limit":{"context":262144,"output":52429}},"mistralai/devstral-medium":{"id":"mistralai/devstral-medium","name":"Mistral: Devstral Medium","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-07-10","last_updated":"2025-07-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.4,"output":2},"limit":{"context":131072,"output":26215}},"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":false,"tool_call":false,"temperature":true,"release_date":"2025-03-17","last_updated":"2026-03-15","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"cost":{"input":0.35,"output":0.56,"cache_read":0.015},"limit":{"context":128000,"output":131072}},"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,"cost":{"input":2,"output":6},"limit":{"context":131072,"output":32768}},"mistralai/devstral-2512":{"id":"mistralai/devstral-2512","name":"Mistral: Devstral 2 2512","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-09-12","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.4,"output":2,"cache_read":0.025},"limit":{"context":262144,"output":65536}},"mistralai/codestral-2508":{"id":"mistralai/codestral-2508","name":"Mistral: Codestral 2508","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-08-01","last_updated":"2025-08-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.3,"output":0.9},"limit":{"context":256000,"output":51200}},"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,"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.08},"limit":{"context":32768,"output":16384}},"mistralai/mistral-large-2411":{"id":"mistralai/mistral-large-2411","name":"Mistral Large 2411","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2024-07-24","last_updated":"2024-11-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":2,"output":6},"limit":{"context":131072,"output":26215}},"mistralai/mixtral-8x22b-instruct":{"id":"mistralai/mixtral-8x22b-instruct","name":"Mistral: Mixtral 8x22B Instruct","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"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":65536,"output":13108}},"mistralai/mistral-large-2407":{"id":"mistralai/mistral-large-2407","name":"Mistral Large 2407","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2024-11-19","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":2,"output":6},"limit":{"context":131072,"output":32768}},"mistralai/ministral-8b-2512":{"id":"mistralai/ministral-8b-2512","name":"Mistral: Ministral 3 8B 2512","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2026-03-15","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"cost":{"input":0.15,"output":0.15},"limit":{"context":262144,"output":32768}},"mistralai/mistral-medium-3.1":{"id":"mistralai/mistral-medium-3.1","name":"Mistral: Mistral Medium 3.1","attachment":true,"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}},"mistralai/mistral-small-2603":{"id":"mistralai/mistral-small-2603","name":"Mistral: Mistral Small 4","attachment":true,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2026-03-16","last_updated":"2026-04-11","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"limit":{"context":262144,"output":262144}},"mistralai/ministral-3b-2512":{"id":"mistralai/ministral-3b-2512","name":"Mistral: Ministral 3 3B 2512","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2026-03-15","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"cost":{"input":0.1,"output":0.1},"limit":{"context":131072,"output":32768}},"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,"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}},"mistralai/mixtral-8x7b-instruct":{"id":"mistralai/mixtral-8x7b-instruct","name":"Mistral: Mixtral 8x7B Instruct","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2023-12-10","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.54,"output":0.54},"limit":{"context":32768,"output":16384}},"mistralai/mistral-medium-3":{"id":"mistralai/mistral-medium-3","name":"Mistral: Mistral Medium 3","attachment":true,"reasoning":false,"tool_call":true,"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}},"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":false,"tool_call":true,"temperature":true,"release_date":"2025-06-20","last_updated":"2025-06-20","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"cost":{"input":0.06,"output":0.18,"cache_read":0.03},"limit":{"context":131072,"output":131072}},"mistralai/mistral-small-creative":{"id":"mistralai/mistral-small-creative","name":"Mistral: Mistral Small Creative","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}},"mistralai/devstral-small":{"id":"mistralai/devstral-small","name":"Mistral: Devstral Small 1.1","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-05-07","last_updated":"2025-07-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.1,"output":0.3},"limit":{"context":131072,"output":26215}},"mistralai/mistral-large":{"id":"mistralai/mistral-large","name":"Mistral Large","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2024-07-24","last_updated":"2025-12-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":2,"output":6},"limit":{"context":128000,"output":25600}},"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":0.11,"output":0.19},"limit":{"context":2824,"output":565}},"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}},"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,"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}},"meta-llama/llama-4-scout":{"id":"meta-llama/llama-4-scout","name":"Meta: Llama 4 Scout","attachment":true,"reasoning":false,"tool_call":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.08,"output":0.3},"limit":{"context":327680,"output":16384}},"meta-llama/llama-guard-3-8b":{"id":"meta-llama/llama-guard-3-8b","name":"Llama Guard 3 8B","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2024-04-18","last_updated":"2026-02-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.02,"output":0.06},"limit":{"context":131072,"output":26215}},"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,"release_date":"2025-04-05","last_updated":"2025-12-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.15,"output":0.6},"limit":{"context":1048576,"output":16384}},"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":false,"tool_call":false,"temperature":true,"release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.049,"output":0.049},"limit":{"context":131072,"output":16384}},"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,"cost":{"input":0.18,"output":0.18},"limit":{"context":163840,"output":32768}},"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,"release_date":"2024-07-16","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.4,"output":0.4},"limit":{"context":131072,"output":26215}},"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,"cost":{"input":0.027,"output":0.2},"limit":{"context":60000,"output":12000}},"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,"cost":{"input":0.051,"output":0.34},"limit":{"context":80000,"output":16384}},"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,"release_date":"2024-04-25","last_updated":"2025-04-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.03,"output":0.04},"limit":{"context":8192,"output":16384}},"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,"release_date":"2024-07-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.02,"output":0.05},"limit":{"context":16384,"output":16384}},"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,"cost":{"input":0.51,"output":0.74},"limit":{"context":8192,"output":8000}},"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,"release_date":"2026-03-31","last_updated":"2026-04-11","modalities":{"input":["image","pdf","text"],"output":["text"]},"open_weights":false,"cost":{"input":2,"output":6,"cache_read":0.2},"limit":{"context":2000000,"output":2000000}},"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,"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}},"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,"release_date":"2025-08-19","last_updated":"2025-08-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}},"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,"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":10000}},"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,"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}},"x-ai/grok-4":{"id":"x-ai/grok-4","name":"xAI: Grok 4","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-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"]},"open_weights":false,"cost":{"input":0.3,"output":0.5,"cache_read":0.075},"limit":{"context":131072,"output":26215}},"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,"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}},"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,"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,"cache_read":0.075},"limit":{"context":131072,"output":26215}},"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":false,"temperature":true,"release_date":"2026-03-31","last_updated":"2026-04-11","modalities":{"input":["image","pdf","text"],"output":["text"]},"open_weights":false,"cost":{"input":2,"output":6,"cache_read":0.2},"limit":{"context":2000000,"output":2000000}},"x-ai/grok-3":{"id":"x-ai/grok-3","name":"xAI: Grok 3","attachment":false,"reasoning":false,"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}},"tencent/hunyuan-a13b-instruct":{"id":"tencent/hunyuan-a13b-instruct","name":"Tencent: Hunyuan A13B Instruct","attachment":false,"reasoning":true,"tool_call":false,"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":131072,"output":131072}},"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"]},"open_weights":true,"cost":{"input":0.06,"output":0.06},"limit":{"context":4096,"output":4096}},"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"]},"open_weights":true,"cost":{"input":1.48,"output":1.48},"limit":{"context":8192,"output":8192}},"sao10k/l3-lunaris-8b":{"id":"sao10k/l3-lunaris-8b","name":"Sao10K: Llama 3 8B Lunaris","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2024-08-13","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.04,"output":0.05},"limit":{"context":8192,"output":8192}},"sao10k/l3.3-euryale-70b":{"id":"sao10k/l3.3-euryale-70b","name":"Sao10K: Llama 3.3 Euryale 70B","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-70b-hanami-x1":{"id":"sao10k/l3.1-70b-hanami-x1","name":"Sao10K: Llama 3.1 70B Hanami x1","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-01-08","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":3,"output":3},"limit":{"context":16000,"output":16000}},"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}},"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}},"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}},"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}},"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-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}},"prime-intellect/intellect-3":{"id":"prime-intellect/intellect-3","name":"Prime Intellect: INTELLECT-3","attachment":false,"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}},"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,"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}},"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,"release_date":"2026-03-11","last_updated":"2026-04-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.1,"output":0.5,"cache_read":0.1},"limit":{"context":262144,"output":262144}},"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,"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}},"nvidia/llama-3.1-nemotron-ultra-253b-v1":{"id":"nvidia/llama-3.1-nemotron-ultra-253b-v1","name":"NVIDIA: Llama 3.1 Nemotron Ultra 253B v1","attachment":false,"reasoning":true,"tool_call":false,"temperature":true,"release_date":"2025-04-08","last_updated":"2026-04-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.6,"output":1.8},"limit":{"context":131072,"output":131072}},"nvidia/nemotron-nano-12b-v2-vl":{"id":"nvidia/nemotron-nano-12b-v2-vl","name":"NVIDIA: Nemotron Nano 12B 2 VL","attachment":true,"reasoning":true,"tool_call":false,"temperature":true,"release_date":"2025-10-28","last_updated":"2026-01-31","modalities":{"input":["image","text","video"],"output":["text"]},"open_weights":true,"cost":{"input":0.2,"output":0.6},"limit":{"context":131072,"output":26215}},"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,"release_date":"2026-03-12","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":262144,"output":262144}},"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,"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":26215}},"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":false,"tool_call":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}},"inception/mercury-2":{"id":"inception/mercury-2","name":"Inception: Mercury 2","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}},"inception/mercury":{"id":"inception/mercury","name":"Inception: Mercury","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-06-26","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.25,"output":0.75},"limit":{"context":128000,"output":32000}},"inception/mercury-coder":{"id":"inception/mercury-coder","name":"Inception: Mercury Coder","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-02-26","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.25,"output":0.75},"limit":{"context":128000,"output":32000}},"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":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,"cache_read":0.125},"limit":{"context":400000,"output":128000}},"openai/gpt-5.2-chat":{"id":"openai/gpt-5.2-chat","name":"OpenAI: GPT-5.2 Chat","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-12-11","last_updated":"2026-03-15","modalities":{"input":["image","pdf","text"],"output":["text"]},"open_weights":false,"cost":{"input":1.75,"output":14,"cache_read":0.175},"limit":{"context":128000,"output":16384}},"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"]},"open_weights":false,"cost":{"input":0.15,"output":0.6},"limit":{"context":128000,"output":16384}},"openai/gpt-5-chat":{"id":"openai/gpt-5-chat","name":"OpenAI: GPT-5 Chat","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"]},"open_weights":false,"cost":{"input":1.25,"output":10,"cache_read":0.125},"limit":{"context":128000,"output":16384}},"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"]},"open_weights":false,"cost":{"input":5,"output":15},"limit":{"context":128000,"output":4096}},"openai/gpt-5.3-chat":{"id":"openai/gpt-5.3-chat","name":"OpenAI: GPT-5.3 Chat","attachment":true,"reasoning":false,"tool_call":true,"release_date":"2026-03-04","last_updated":"2026-03-15","modalities":{"input":["image","pdf","text"],"output":["text"]},"open_weights":false,"cost":{"input":1.75,"output":14},"limit":{"context":128000,"output":16384}},"openai/gpt-5.2-pro":{"id":"openai/gpt-5.2-pro","name":"OpenAI: GPT-5.2 Pro","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"]},"open_weights":false,"cost":{"input":21,"output":168},"limit":{"context":400000,"output":128000}},"openai/gpt-4-1106-preview":{"id":"openai/gpt-4-1106-preview","name":"OpenAI: GPT-4 Turbo (older v1106)","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2023-11-06","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":10,"output":30},"limit":{"context":128000,"output":4096}},"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,"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/gpt-5-mini":{"id":"openai/gpt-5-mini","name":"OpenAI: GPT-5 Mini","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"]},"open_weights":false,"cost":{"input":0.25,"output":2,"cache_read":0.025},"limit":{"context":400000,"output":128000}},"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"]},"open_weights":false,"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"limit":{"context":400000,"output":128000}},"openai/gpt-5.3-codex":{"id":"openai/gpt-5.3-codex","name":"OpenAI: GPT-5.3-Codex","attachment":true,"reasoning":true,"tool_call":true,"release_date":"2026-02-25","last_updated":"2026-03-15","modalities":{"input":["image","text"],"output":["text"]},"open_weights":false,"cost":{"input":1.75,"output":14},"limit":{"context":400000,"output":128000}},"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,"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}},"openai/gpt-4-turbo":{"id":"openai/gpt-4-turbo","name":"OpenAI: GPT-4 Turbo","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"]},"open_weights":false,"cost":{"input":10,"output":30},"limit":{"context":128000,"output":4096}},"openai/gpt-5.2":{"id":"openai/gpt-5.2","name":"OpenAI: GPT-5.2","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"]},"open_weights":false,"cost":{"input":1.75,"output":14,"cache_read":0.175},"limit":{"context":400000,"output":128000}},"openai/o3-pro":{"id":"openai/o3-pro","name":"OpenAI: o3 Pro","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"]},"open_weights":false,"cost":{"input":20,"output":80},"limit":{"context":200000,"output":100000}},"openai/o3-mini-high":{"id":"openai/o3-mini-high","name":"OpenAI: o3 Mini High","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-01-31","last_updated":"2026-03-15","modalities":{"input":["pdf","text"],"output":["text"]},"open_weights":false,"cost":{"input":1.1,"output":4.4,"cache_read":0.55},"limit":{"context":200000,"output":100000}},"openai/gpt-4o-mini":{"id":"openai/gpt-4o-mini","name":"OpenAI: GPT-4o-mini","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,"cache_read":0.075},"limit":{"context":128000,"output":16384}},"openai/o4-mini-deep-research":{"id":"openai/o4-mini-deep-research","name":"OpenAI: o4 Mini Deep Research","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-5.4-mini":{"id":"openai/gpt-5.4-mini","name":"OpenAI: GPT-5.4 Mini","attachment":true,"reasoning":true,"tool_call":true,"temperature":false,"release_date":"2026-03-17","last_updated":"2026-04-11","modalities":{"input":["image","pdf","text"],"output":["text"]},"open_weights":false,"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"limit":{"context":400000,"output":128000}},"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/o4-mini":{"id":"openai/o4-mini","name":"OpenAI: o4 Mini","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"]},"open_weights":false,"cost":{"input":1.1,"output":4.4,"cache_read":0.275},"limit":{"context":200000,"output":100000}},"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,"release_date":"2026-03-17","last_updated":"2026-04-11","modalities":{"input":["image","pdf","text"],"output":["text"]},"open_weights":false,"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"limit":{"context":400000,"output":128000}},"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,"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}},"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":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.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":false,"release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["image","text"],"output":["text"]},"open_weights":false,"cost":{"input":0.25,"output":2,"cache_read":0.025},"limit":{"context":400000,"output":100000}},"openai/gpt-4o-2024-08-06":{"id":"openai/gpt-4o-2024-08-06","name":"OpenAI: GPT-4o (2024-08-06)","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2024-08-06","last_updated":"2026-03-15","modalities":{"input":["image","pdf","text"],"output":["text"]},"open_weights":false,"cost":{"input":2.5,"output":10,"cache_read":1.25},"limit":{"context":128000,"output":16384}},"openai/gpt-5-image":{"id":"openai/gpt-5-image","name":"OpenAI: GPT-5 Image","attachment":true,"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"]},"open_weights":false,"cost":{"input":10,"output":10},"limit":{"context":400000,"output":128000}},"openai/gpt-5.1":{"id":"openai/gpt-5.1","name":"OpenAI: GPT-5.1","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/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"]},"open_weights":false,"cost":{"input":15,"output":60,"cache_read":7.5},"limit":{"context":200000,"output":100000}},"openai/gpt-5.4-pro":{"id":"openai/gpt-5.4-pro","name":"OpenAI: GPT-5.4 Pro","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,"cost":{"input":30,"output":180},"limit":{"context":1050000,"output":128000}},"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,"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},"limit":{"context":16385,"output":4096}},"openai/o3-deep-research":{"id":"openai/o3-deep-research","name":"OpenAI: o3 Deep Research","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":10,"output":40,"cache_read":2.5},"limit":{"context":200000,"output":100000}},"openai/o3-mini":{"id":"openai/o3-mini","name":"OpenAI: o3 Mini","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2024-12-20","last_updated":"2026-03-15","modalities":{"input":["pdf","text"],"output":["text"]},"open_weights":false,"cost":{"input":1.1,"output":4.4,"cache_read":0.55},"limit":{"context":200000,"output":100000}},"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,"release_date":"2024-01-25","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":10,"output":30},"limit":{"context":128000,"output":4096}},"openai/o1-pro":{"id":"openai/o1-pro","name":"OpenAI: o1-pro","attachment":true,"reasoning":true,"tool_call":false,"temperature":false,"release_date":"2025-03-19","last_updated":"2026-03-15","modalities":{"input":["image","pdf","text"],"output":["text"]},"open_weights":false,"cost":{"input":150,"output":600},"limit":{"context":200000,"output":100000}},"openai/gpt-4":{"id":"openai/gpt-4","name":"OpenAI: GPT-4","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2023-03-14","last_updated":"2024-04-09","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":30,"output":60},"limit":{"context":8191,"output":4096}},"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,"cost":{"input":30,"output":60},"limit":{"context":8191,"output":4096}},"openai/gpt-5-codex":{"id":"openai/gpt-5-codex","name":"OpenAI: GPT-5 Codex","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"]},"open_weights":false,"cost":{"input":1.25,"output":10,"cache_read":0.125},"limit":{"context":400000,"output":128000}},"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,"cost":{"input":2.5,"output":15},"limit":{"context":1050000,"output":128000}},"openai/gpt-audio":{"id":"openai/gpt-audio","name":"OpenAI: GPT Audio","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"]},"open_weights":false,"cost":{"input":2.5,"output":10},"limit":{"context":128000,"output":16384}},"openai/gpt-4o:extended":{"id":"openai/gpt-4o:extended","name":"OpenAI: GPT-4o (extended)","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"]},"open_weights":false,"cost":{"input":6,"output":18},"limit":{"context":128000,"output":64000}},"openai/gpt-4o-search-preview":{"id":"openai/gpt-4o-search-preview","name":"OpenAI: GPT-4o Search Preview","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/gpt-4.1-nano":{"id":"openai/gpt-4.1-nano","name":"OpenAI: GPT-4.1 Nano","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"]},"open_weights":false,"cost":{"input":0.1,"output":0.4,"cache_read":0.025},"limit":{"context":1047576,"output":32768}},"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/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"]},"open_weights":false,"cost":{"input":2,"output":8,"cache_read":0.5},"limit":{"context":200000,"output":100000}},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"OpenAI: gpt-oss-20b","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}},"openai/gpt-5-pro":{"id":"openai/gpt-5-pro","name":"OpenAI: GPT-5 Pro","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"]},"open_weights":false,"cost":{"input":15,"output":120},"limit":{"context":400000,"output":128000}},"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"]},"open_weights":false,"cost":{"input":0.6,"output":2.4},"limit":{"context":128000,"output":16384}},"openai/gpt-4o":{"id":"openai/gpt-4o","name":"OpenAI: GPT-4o","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"]},"open_weights":false,"cost":{"input":2.5,"output":10,"cache_read":1.25},"limit":{"context":128000,"output":16384}},"openai/gpt-3.5-turbo-0613":{"id":"openai/gpt-3.5-turbo-0613","name":"OpenAI: GPT-3.5 Turbo (older v0613)","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2023-06-13","last_updated":"2023-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":1,"output":2},"limit":{"context":4095,"output":4096}},"openai/gpt-5-image-mini":{"id":"openai/gpt-5-image-mini","name":"OpenAI: GPT-5 Image Mini","attachment":true,"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"]},"open_weights":false,"cost":{"input":2.5,"output":2},"limit":{"context":400000,"output":128000}},"openai/gpt-5":{"id":"openai/gpt-5","name":"OpenAI: GPT-5","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"]},"open_weights":false,"cost":{"input":1.25,"output":10,"cache_read":0.125},"limit":{"context":400000,"output":128000}},"openai/gpt-oss-safeguard-20b":{"id":"openai/gpt-oss-safeguard-20b","name":"OpenAI: gpt-oss-safeguard-20b","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"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,"cache_read":0.037},"limit":{"context":131072,"output":65536}},"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,"cost":{"input":0.039,"output":0.19},"limit":{"context":131072,"output":26215}},"openai/gpt-3.5-turbo-instruct":{"id":"openai/gpt-3.5-turbo-instruct","name":"OpenAI: GPT-3.5 Turbo Instruct","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2023-03-01","last_updated":"2023-09-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":1.5,"output":2},"limit":{"context":4095,"output":4096}},"openai/gpt-4.1":{"id":"openai/gpt-4.1","name":"OpenAI: GPT-4.1","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"]},"open_weights":false,"cost":{"input":2,"output":8,"cache_read":0.5},"limit":{"context":1047576,"output":32768}},"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,"release_date":"2025-04-14","last_updated":"2026-03-15","modalities":{"input":["image","pdf","text"],"output":["text"]},"open_weights":false,"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"limit":{"context":1047576,"output":32768}},"openai/gpt-5.1-codex":{"id":"openai/gpt-5.1-codex","name":"OpenAI: GPT-5.1-Codex","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"]},"open_weights":false,"cost":{"input":1.25,"output":10,"cache_read":0.125},"limit":{"context":400000,"output":128000}},"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,"release_date":"2024-11-20","last_updated":"2026-03-15","modalities":{"input":["image","pdf","text"],"output":["text"]},"open_weights":false,"cost":{"input":2.5,"output":10,"cache_read":1.25},"limit":{"context":128000,"output":16384}},"amazon/nova-lite-v1":{"id":"amazon/nova-lite-v1","name":"Amazon: Nova Lite 1.0","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2024-12-06","last_updated":"2026-03-15","modalities":{"input":["image","text"],"output":["text"]},"open_weights":false,"cost":{"input":0.06,"output":0.24},"limit":{"context":300000,"output":5120}},"amazon/nova-pro-v1":{"id":"amazon/nova-pro-v1","name":"Amazon: Nova Pro 1.0","attachment":true,"reasoning":false,"tool_call":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}},"amazon/nova-premier-v1":{"id":"amazon/nova-premier-v1","name":"Amazon: Nova Premier 1.0","attachment":true,"reasoning":false,"tool_call":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}},"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,"release_date":"2024-12-01","last_updated":"2026-03-15","modalities":{"input":["image","pdf","text","video"],"output":["text"]},"open_weights":false,"cost":{"input":0.3,"output":2.5},"limit":{"context":1000000,"output":65535}},"amazon/nova-micro-v1":{"id":"amazon/nova-micro-v1","name":"Amazon: Nova Micro 1.0","attachment":false,"reasoning":false,"tool_call":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}},"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,"release_date":"2026-04-01","last_updated":"2026-04-11","modalities":{"input":["image","text","video"],"output":["text"]},"open_weights":true,"cost":{"input":1.2,"output":4,"cache_read":0.24},"limit":{"context":202752,"output":131072}},"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,"release_date":"2025-12-22","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.38,"output":1.98,"cache_read":0.2},"limit":{"context":202752,"output":65535}},"z-ai/glm-5":{"id":"z-ai/glm-5","name":"Z.ai: GLM 5","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.72,"output":2.3},"limit":{"context":202752,"output":131072}},"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,"release_date":"2025-07-25","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.1,"output":0.1},"limit":{"context":128000,"output":32768}},"z-ai/glm-5.1":{"id":"z-ai/glm-5.1","name":"Z.ai: GLM 5.1","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2026-03-27","last_updated":"2026-03-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":1.26,"output":3.96},"limit":{"context":202752,"output":131072}},"z-ai/glm-4.5":{"id":"z-ai/glm-4.5","name":"Z.ai: GLM 4.5","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-07-28","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.6,"output":2.2,"cache_read":0.175},"limit":{"context":131072,"output":98304}},"z-ai/glm-4.5-air":{"id":"z-ai/glm-4.5-air","name":"Z.ai: GLM 4.5 Air","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.13,"output":0.85,"cache_read":0.025},"limit":{"context":131072,"output":98304}},"z-ai/glm-5-turbo":{"id":"z-ai/glm-5-turbo","name":"Z.ai: GLM 5 Turbo","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2026-03-15","last_updated":"2026-04-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":1.2,"output":4,"cache_read":0.24},"limit":{"context":202752,"output":131072}},"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,"release_date":"2025-08-11","last_updated":"2025-08-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.6,"output":1.8,"cache_read":0.11},"limit":{"context":65536,"output":16384}},"z-ai/glm-4.6":{"id":"z-ai/glm-4.6","name":"Z.ai: GLM 4.6","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-09-30","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.39,"output":1.9,"cache_read":0.175},"limit":{"context":204800,"output":204800}},"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,"release_date":"2025-09-30","last_updated":"2026-01-10","modalities":{"input":["image","text","video"],"output":["text"]},"open_weights":true,"cost":{"input":0.3,"output":0.9},"limit":{"context":131072,"output":131072}},"z-ai/glm-4.7-flash":{"id":"z-ai/glm-4.7-flash","name":"Z.ai: GLM 4.7 Flash","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.06,"output":0.4,"cache_read":0.01},"limit":{"context":202752,"output":40551}},"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,"release_date":"2025-06-30","last_updated":"2026-01","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"cost":{"input":0.42,"output":1.25},"limit":{"context":123000,"output":16000}},"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,"release_date":"2025-06-30","last_updated":"2025-06-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.14,"output":0.56},"limit":{"context":30000,"output":8000}},"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":true,"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":{"id":"baidu/ernie-4.5-300b-a47b","name":"Baidu: ERNIE 4.5 300B A47B ","attachment":false,"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,"temperature":true,"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}},"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}},"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}},"minimax/minimax-m2.7":{"id":"minimax/minimax-m2.7","name":"MiniMax: MiniMax M2.7","family":"minimax-m2.7","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},"limit":{"context":204800,"output":131072}},"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,"cost":{"input":0.255,"output":1,"cache_read":0.03},"limit":{"context":196608,"output":196608}},"minimax/minimax-01":{"id":"minimax/minimax-01","name":"MiniMax: MiniMax-01","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-01-15","last_updated":"2025-01-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.2,"output":1.1},"limit":{"context":1000192,"output":1000192}},"minimax/minimax-m2.1":{"id":"minimax/minimax-m2.1","name":"MiniMax: MiniMax M2.1","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":0.27,"output":0.95,"cache_read":0.03},"limit":{"context":196608,"output":39322}},"minimax/minimax-m1":{"id":"minimax/minimax-m1","name":"MiniMax: MiniMax M1","attachment":false,"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.4,"output":2.2},"limit":{"context":1000000,"output":40000}},"minimax/minimax-m2-her":{"id":"minimax/minimax-m2-her","name":"MiniMax: MiniMax M2-her","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-m2.5":{"id":"minimax/minimax-m2.5","name":"MiniMax: MiniMax M2.5","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.25,"output":1.2,"cache_read":0.029},"limit":{"context":196608,"output":196608}},"qwen/qwen3-235b-a22b":{"id":"qwen/qwen3-235b-a22b","name":"Qwen: Qwen3 235B A22B","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2024-12-01","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.455,"output":1.82,"cache_read":0.15},"limit":{"context":131072,"output":8192}},"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,"release_date":"2026-02-26","last_updated":"2026-03-15","modalities":{"input":["image","text","video"],"output":["text"]},"open_weights":true,"cost":{"input":0.26,"output":2.08},"limit":{"context":262144,"output":65536}},"qwen/qwen2.5-coder-7b-instruct":{"id":"qwen/qwen2.5-coder-7b-instruct","name":"Qwen: Qwen2.5 Coder 7B Instruct","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2024-09-17","last_updated":"2024-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.03,"output":0.09},"limit":{"context":32768,"output":6554}},"qwen/qwen3-coder-plus":{"id":"qwen/qwen3-coder-plus","name":"Qwen: Qwen3 Coder Plus","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-07-01","last_updated":"2026-03-15","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.5-27b":{"id":"qwen/qwen3.5-27b","name":"Qwen: Qwen3.5-27B","attachment":true,"reasoning":true,"tool_call":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.195,"output":1.56},"limit":{"context":262144,"output":65536}},"qwen/qwen3-235b-a22b-2507":{"id":"qwen/qwen3-235b-a22b-2507","name":"Qwen: Qwen3 235B A22B Instruct 2507","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-04","last_updated":"2026-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.071,"output":0.1},"limit":{"context":262144,"output":52429}},"qwen/qwen3-8b":{"id":"qwen/qwen3-8b","name":"Qwen: Qwen3 8B","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-04","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.05,"output":0.4,"cache_read":0.05},"limit":{"context":40960,"output":8192}},"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}},"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}},"qwen/qwen3-32b":{"id":"qwen/qwen3-32b","name":"Qwen: Qwen3 32B","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2024-12-01","last_updated":"2026-02-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.08,"output":0.24,"cache_read":0.04},"limit":{"context":40960,"output":40960}},"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,"release_date":"2025-02-01","last_updated":"2026-03-15","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"cost":{"input":0.8,"output":0.8,"cache_read":0.075},"limit":{"context":32768,"output":32768}},"qwen/qwen-max":{"id":"qwen/qwen-max","name":"Qwen: Qwen-Max ","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/qwen-plus":{"id":"qwen/qwen-plus","name":"Qwen: Qwen-Plus","attachment":false,"reasoning":false,"tool_call":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}},"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,"cost":{"input":0.26,"output":2.6},"limit":{"context":131072,"output":32768}},"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,"cost":{"input":0.13,"output":1.56},"limit":{"context":131072,"output":32768}},"qwen/qwen2.5-vl-32b-instruct":{"id":"qwen/qwen2.5-vl-32b-instruct","name":"Qwen: Qwen2.5 VL 32B Instruct","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-03-24","last_updated":"2026-03-15","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"cost":{"input":0.2,"output":0.6,"cache_read":0.025},"limit":{"context":128000,"output":16384}},"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,"release_date":"2025-10-15","last_updated":"2025-11-25","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"cost":{"input":0.08,"output":0.5},"limit":{"context":131072,"output":32768}},"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,"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.6-plus":{"id":"qwen/qwen3.6-plus","name":"Qwen: Qwen3.6 Plus","attachment":true,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-08-26","last_updated":"2026-04-11","modalities":{"input":["image","text"],"output":["text"]},"open_weights":false,"cost":{"input":0.325,"output":1.95,"cache_read":0.0325,"cache_write":0.40625},"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}},"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,"release_date":"2025-09-09","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.26,"output":0.78},"limit":{"context":1000000,"output":32768}},"qwen/qwen3-30b-a3b-instruct-2507":{"id":"qwen/qwen3-30b-a3b-instruct-2507","name":"Qwen: Qwen3 30B A3B Instruct 2507","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-07-29","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.09,"output":0.3,"cache_read":0.04},"limit":{"context":262144,"output":262144}},"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"]},"open_weights":false,"cost":{"input":0.104,"output":0.416},"limit":{"context":131072,"output":32768}},"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,"release_date":"2025-07-25","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.11,"output":0.6},"limit":{"context":262144,"output":262144}},"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,"release_date":"2025-09-11","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.0975,"output":0.78},"limit":{"context":131072,"output":32768}},"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,"release_date":"2025-07-29","last_updated":"2025-07-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.051,"output":0.34},"limit":{"context":32768,"output":6554}},"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}},"qwen/qwen-vl-max":{"id":"qwen/qwen-vl-max","name":"Qwen: Qwen VL Max","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2024-04-08","last_updated":"2025-08-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.8,"output":3.2},"limit":{"context":131072,"output":32768}},"qwen/qwen3-coder-flash":{"id":"qwen/qwen3-coder-flash","name":"Qwen: Qwen3 Coder Flash","attachment":false,"reasoning":false,"tool_call":true,"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}},"qwen/qwen3-30b-a3b":{"id":"qwen/qwen3-30b-a3b","name":"Qwen: Qwen3 30B A3B","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-04","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.08,"output":0.28,"cache_read":0.03},"limit":{"context":40960,"output":40960}},"qwen/qwq-32b":{"id":"qwen/qwq-32b","name":"Qwen: QwQ 32B","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2024-11-28","last_updated":"2025-04-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.15,"output":0.4},"limit":{"context":32768,"output":32768}},"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":true,"release_date":"2025-09-11","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.09,"output":1.1},"limit":{"context":131072,"output":52429}},"qwen/qwen3-coder-next":{"id":"qwen/qwen3-coder-next","name":"Qwen: Qwen3 Coder Next","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2026-02-02","last_updated":"2026-03-15","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-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,"release_date":"2024-11-11","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.2,"output":0.2,"cache_read":0.015},"limit":{"context":32768,"output":8192}},"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,"release_date":"2025-10-05","last_updated":"2025-11-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.13,"output":0.52},"limit":{"context":131072,"output":32768}},"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":true,"release_date":"2025-07-31","last_updated":"2025-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.07,"output":0.27},"limit":{"context":160000,"output":32768}},"qwen/qwen3-max-thinking":{"id":"qwen/qwen3-max-thinking","name":"Qwen: Qwen3 Max Thinking","attachment":false,"reasoning":true,"tool_call":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}},"qwen/qwen-turbo":{"id":"qwen/qwen-turbo","name":"Qwen: Qwen-Turbo","attachment":false,"reasoning":false,"tool_call":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}},"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,"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}},"qwen/qwen3-coder":{"id":"qwen/qwen3-coder","name":"Qwen: Qwen3 Coder 480B A35B","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-07-23","last_updated":"2025-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.22,"output":1,"cache_read":0.022},"limit":{"context":262144,"output":52429}},"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,"cost":{"input":0.05,"output":0.15},"limit":{"context":256000,"output":32768}},"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.117,"output":1.365},"limit":{"context":131072,"output":32768}},"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,"release_date":"2025-09-09","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.26,"output":0.78},"limit":{"context":1000000,"output":32768}},"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":true,"release_date":"2024-09","last_updated":"2026-01-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.12,"output":0.39},"limit":{"context":32768,"output":16384}},"qwen/qwen3-14b":{"id":"qwen/qwen3-14b","name":"Qwen: Qwen3 14B","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-04","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.06,"output":0.24,"cache_read":0.025},"limit":{"context":40960,"output":40960}},"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,"release_date":"2026-02-26","last_updated":"2026-03-15","modalities":{"input":["image","text","video"],"output":["text"]},"open_weights":true,"cost":{"input":0.1625,"output":1.3},"limit":{"context":262144,"output":65536}},"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.26,"output":1.56},"limit":{"context":1000000,"output":65536}},"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,"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}},"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,"release_date":"2026-03-27","last_updated":"2026-04-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"limit":{"context":256000,"output":80000}},"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,"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}},"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,"release_date":"2026-03-30","last_updated":"2026-04-11","modalities":{"input":["image","text"],"output":["audio","text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":1048576,"output":65536}},"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":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}},"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}},"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":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}},"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":true,"release_date":"2026-03-30","last_updated":"2026-04-11","modalities":{"input":["image","text"],"output":["audio","text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":1048576,"output":65536}},"google/gemma-3n-e4b-it":{"id":"google/gemma-3n-e4b-it","name":"Google: Gemma 3n 4B","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"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":6554}},"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":"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}},"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}},"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-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}},"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":"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}},"google/gemma-2-9b-it":{"id":"google/gemma-2-9b-it","name":"Google: Gemma 2 9B","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"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":1639}},"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":false,"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}},"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,"release_date":"2026-04-02","last_updated":"2026-04-11","modalities":{"input":["image","text","video"],"output":["text"]},"open_weights":true,"cost":{"input":0.14,"output":0.4},"limit":{"context":262144,"output":131072}},"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}},"google/gemma-3-12b-it":{"id":"google/gemma-3-12b-it","name":"Google: Gemma 3 12B","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-03-13","last_updated":"2026-03-15","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"cost":{"input":0.04,"output":0.13,"cache_read":0.015},"limit":{"context":131072,"output":131072}},"google/gemini-2.5-flash":{"id":"google/gemini-2.5-flash","name":"Google: Gemini 2.5 Flash","attachment":true,"reasoning":true,"tool_call":true,"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}},"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":false,"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/gemma-3-4b-it":{"id":"google/gemma-3-4b-it","name":"Google: Gemma 3 4B","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-03-13","last_updated":"2026-03-15","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"cost":{"input":0.04,"output":0.08},"limit":{"context":131072,"output":19200}},"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,"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}},"google/gemma-2-27b-it":{"id":"google/gemma-2-27b-it","name":"Google: Gemma 2 27B","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2024-06-24","last_updated":"2024-06-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.65,"output":0.65},"limit":{"context":8192,"output":2048}},"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-03-12","last_updated":"2026-03-15","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"cost":{"input":0.03,"output":0.11,"cache_read":0.02},"limit":{"context":128000,"output":65536}},"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":"2026-04-03","last_updated":"2026-04-11","modalities":{"input":["image","text","video"],"output":["text"]},"open_weights":true,"cost":{"input":0.12,"output":0.4},"limit":{"context":262144,"output":262144}},"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.0-flash-lite-001":{"id":"google/gemini-2.0-flash-lite-001","name":"Google: Gemini 2.0 Flash Lite","attachment":true,"reasoning":false,"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}},"moonshotai/kimi-k2.5":{"id":"moonshotai/kimi-k2.5","name":"MoonshotAI: Kimi K2.5","attachment":true,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2026-01-27","last_updated":"2026-03-15","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"cost":{"input":0.45,"output":2.2},"limit":{"context":262144,"output":65535}},"moonshotai/kimi-k2-0905":{"id":"moonshotai/kimi-k2-0905","name":"MoonshotAI: Kimi K2 0905","attachment":false,"reasoning":false,"tool_call":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}},"moonshotai/kimi-k2":{"id":"moonshotai/kimi-k2","name":"MoonshotAI: Kimi K2 0711","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-07-11","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.55,"output":2.2},"limit":{"context":131000,"output":26215}},"moonshotai/kimi-k2-thinking":{"id":"moonshotai/kimi-k2-thinking","name":"MoonshotAI: Kimi K2 Thinking","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-11-06","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.47,"output":2,"cache_read":0.2},"limit":{"context":131072,"output":65535}},"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}},"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-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-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}},"thedrummer/unslopnemo-12b":{"id":"thedrummer/unslopnemo-12b","name":"TheDrummer: UnslopNemo 12B","attachment":false,"reasoning":false,"tool_call":true,"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":32768,"output":32768}},"thedrummer/cydonia-24b-v4.1":{"id":"thedrummer/cydonia-24b-v4.1","name":"TheDrummer: Cydonia 24B V4.1","attachment":false,"reasoning":false,"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.3,"output":0.5},"limit":{"context":131072,"output":131072}},"thedrummer/skyfall-36b-v2":{"id":"thedrummer/skyfall-36b-v2","name":"TheDrummer: Skyfall 36B V2","attachment":false,"reasoning":false,"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.55,"output":0.8},"limit":{"context":32768,"output":32768}},"thedrummer/rocinante-12b":{"id":"thedrummer/rocinante-12b","name":"TheDrummer: Rocinante 12B","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2024-09-30","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.17,"output":0.43},"limit":{"context":32768,"output":32768}},"anthropic/claude-opus-4.1":{"id":"anthropic/claude-opus-4.1","name":"Anthropic: Claude Opus 4.1","attachment":true,"reasoning":true,"tool_call":true,"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}},"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,"temperature":true,"release_date":"2025-02-19","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":200000,"output":64000}},"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,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-11","modalities":{"input":["image","text"],"output":["text"]},"open_weights":false,"cost":{"input":30,"output":150,"cache_read":3,"cache_write":37.5},"limit":{"context":1000000,"output":128000}},"anthropic/claude-3.7-sonnet":{"id":"anthropic/claude-3.7-sonnet","name":"Anthropic: Claude 3.7 Sonnet","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"]},"open_weights":false,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":64000}},"anthropic/claude-opus-4.6":{"id":"anthropic/claude-opus-4.6","name":"Anthropic: Claude Opus 4.6","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"]},"open_weights":false,"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"limit":{"context":1000000,"output":128000}},"anthropic/claude-sonnet-4":{"id":"anthropic/claude-sonnet-4","name":"Anthropic: Claude Sonnet 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,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":64000}},"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}},"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,"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"limit":{"context":200000,"output":64000}},"anthropic/claude-3-haiku":{"id":"anthropic/claude-3-haiku","name":"Anthropic: Claude 3 Haiku","attachment":true,"reasoning":false,"tool_call":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-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,"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"limit":{"context":200000,"output":32000}},"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,"release_date":"2024-10-22","last_updated":"2024-10-22","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}},"anthropic/claude-haiku-4.5":{"id":"anthropic/claude-haiku-4.5","name":"Anthropic: Claude Haiku 4.5","attachment":true,"reasoning":true,"tool_call":true,"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}},"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,"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}},"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}},"xiaomi/mimo-v2-omni":{"id":"xiaomi/mimo-v2-omni","name":"Xiaomi: MiMo-V2-Omni","attachment":true,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-04-11","modalities":{"input":["audio","image","text","video"],"output":["text"]},"open_weights":true,"cost":{"input":0.4,"output":2,"cache_read":0.08},"limit":{"context":262144,"output":65536}},"xiaomi/mimo-v2-pro":{"id":"xiaomi/mimo-v2-pro","name":"Xiaomi: MiMo-V2-Pro","attachment":false,"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,"cost":{"input":1,"output":3,"cache_read":0.2},"limit":{"context":1048576,"output":131072}},"xiaomi/mimo-v2-flash":{"id":"xiaomi/mimo-v2-flash","name":"Xiaomi: MiMo-V2-Flash","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-12-14","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.09,"output":0.29,"cache_read":0.045},"limit":{"context":262144,"output":65536}},"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}},"tngtech/deepseek-r1t2-chimera":{"id":"tngtech/deepseek-r1t2-chimera","name":"TNG: DeepSeek R1T2 Chimera","attachment":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":true,"cost":{"input":0.25,"output":0.85,"cache_read":0.125},"limit":{"context":163840,"output":163840}},"meituan/longcat-flash-chat":{"id":"meituan/longcat-flash-chat","name":"Meituan: LongCat Flash Chat","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-08-30","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.2,"output":0.8,"cache_read":0.2},"limit":{"context":131072,"output":131072}}}},"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":{"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,"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"limit":{"context":1000000,"output":128000}},"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":"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}},"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":"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}},"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}},"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,"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"limit":{"context":400000,"output":128000}},"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-25","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.125},"limit":{"context":1048576,"output":65536}},"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":"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":200000,"output":64000}},"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,"cost":{"input":3,"output":15},"limit":{"context":200000,"output":8192}},"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,"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}},"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":"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":1000000,"output":64000}},"sonar-deep-research":{"id":"sonar-deep-research","name":"sonar-deep-research","family":"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"]},"open_weights":false,"cost":{"input":2,"output":8,"reasoning":3},"limit":{"context":128000,"output":32768}},"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-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}},"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,"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"limit":{"context":200000,"output":64000}},"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,"cost":{"input":1,"output":1},"limit":{"context":128000,"output":4096}},"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-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}},"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"]},"open_weights":false,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":4096}},"anthropic--claude-4-sonnet":{"id":"anthropic--claude-4-sonnet","name":"anthropic--claude-4-sonnet","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":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":64000}},"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,"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}},"anthropic--claude-4.5-haiku":{"id":"anthropic--claude-4.5-haiku","name":"anthropic--claude-4.5-haiku","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":1,"output":5,"cache_read":0.1,"cache_write":1.25},"limit":{"context":200000,"output":64000}},"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.25,"output":10,"cache_read":0.125},"limit":{"context":400000,"output":128000}},"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-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}},"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":"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}},"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-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}}}},"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":false,"tool_call":false,"temperature":false,"release_date":"2024-06-01","last_updated":"2024-06-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.85,"output":1.55},"limit":{"context":32000,"output":32000}},"morph-v3-fast":{"id":"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,"cost":{"input":0.8,"output":1.2},"limit":{"context":16000,"output":16000}},"morph-v3-large":{"id":"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,"cost":{"input":0.9,"output":1.9},"limit":{"context":32000,"output":32000}}}},"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,"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}},"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":false,"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/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,"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}},"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"]},"open_weights":true,"cost":{"input":0.06,"output":0.4},"limit":{"context":131072,"output":131072}},"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,"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}},"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,"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}},"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":false,"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}},"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":false,"tool_call":false,"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}},"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"},"temperature":true,"release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.5,"output":1.5},"limit":{"context":256000,"output":256000}},"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":false,"temperature":true,"release_date":"2025-04-03","last_updated":"2025-04-03","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.5,"output":4.88},"limit":{"context":128000,"output":16384}},"workers-ai/@cf/openai/gpt-oss-20b":{"id":"workers-ai/@cf/openai/gpt-oss-20b","name":"GPT OSS 20B","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/openai/gpt-oss-120b":{"id":"workers-ai/@cf/openai/gpt-oss-120b","name":"GPT OSS 120B","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.35,"output":0.75},"limit":{"context":128000,"output":16384}},"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":false,"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}},"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":false,"tool_call":false,"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}},"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,"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}},"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":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.48,"output":0.03},"limit":{"context":128000,"output":16384}},"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,"release_date":"2025-04-03","last_updated":"2025-04-03","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.34,"output":0.34},"limit":{"context":128000,"output":16384}},"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,"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}},"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,"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}},"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":false,"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}},"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,"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.027,"output":0.2},"limit":{"context":128000,"output":16384}},"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":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.15,"output":0.29},"limit":{"context":128000,"output":16384}},"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":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.051,"output":0.34},"limit":{"context":128000,"output":16384}},"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,"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}},"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":false,"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}},"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":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.28,"output":0.8299999999999998},"limit":{"context":128000,"output":16384}},"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":false,"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}},"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":false,"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}},"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"]},"open_weights":false,"cost":{"input":0.66,"output":1},"limit":{"context":128000,"output":16384}},"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":false,"temperature":true,"release_date":"2025-11-14","last_updated":"2025-11-14","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.051,"output":0.34},"limit":{"context":128000,"output":16384}},"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,"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}},"workers-ai/@cf/moonshotai/kimi-k2.5":{"id":"workers-ai/@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,"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}},"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":false,"temperature":true,"release_date":"2025-09-25","last_updated":"2025-09-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.34,"output":0.34},"limit":{"context":128000,"output":16384}},"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":false,"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}},"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":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.02,"output":0},"limit":{"context":128000,"output":16384}},"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":false,"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}},"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"]},"open_weights":false,"cost":{"input":0.0031,"output":0},"limit":{"context":128000,"output":16384}},"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":false,"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}},"workers-ai/@cf/baai/bge-m3":{"id":"workers-ai/@cf/baai/bge-m3","name":"BGE M3","family":"bge","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.012,"output":0},"limit":{"context":128000,"output":16384}},"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":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}},"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":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}},"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":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}},"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,"cost":{"input":1.75,"output":14,"cache_read":0.175},"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"ai-gateway-provider"}},"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,"cost":{"input":10,"output":30},"limit":{"context":128000,"output":4096}},"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,"cost":{"input":1.75,"output":14,"cache_read":0.175},"limit":{"context":400000,"output":128000}},"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/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"],"output":["text"]},"open_weights":false,"cost":{"input":0.15,"output":0.6,"cache_read":0.08},"limit":{"context":128000,"output":16384}},"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,"cost":{"input":1.1,"output":4.4,"cache_read":0.28},"limit":{"context":200000,"output":100000}},"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"]},"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"}},"openai/gpt-5.1":{"id":"openai/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":1.25,"output":10,"cache_read":0.13},"limit":{"context":400000,"output":128000}},"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"],"output":["text"]},"open_weights":false,"cost":{"input":15,"output":60,"cache_read":7.5},"limit":{"context":200000,"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,"structured_output":false,"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}},"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,"cost":{"input":1.1,"output":4.4,"cache_read":0.55},"limit":{"context":200000,"output":100000}},"openai/gpt-4":{"id":"openai/gpt-4","name":"GPT-4","family":"gpt","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"]},"open_weights":false,"cost":{"input":30,"output":60},"limit":{"context":8192,"output":8192}},"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,"cost":{"input":2.5,"output":15,"cache_read":0.25},"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"ai-gateway-provider"}},"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,"cost":{"input":2,"output":8,"cache_read":0.5},"limit":{"context":200000,"output":100000}},"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"],"output":["text"]},"open_weights":false,"cost":{"input":2.5,"output":10,"cache_read":1.25},"limit":{"context":128000,"output":16384}},"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,"cost":{"input":1.25,"output":10,"cache_read":0.125},"limit":{"context":400000,"output":128000}},"anthropic/claude-haiku-4-5":{"id":"anthropic/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,"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"limit":{"context":200000,"output":64000}},"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-07-31","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}},"limit":{"context":1000000,"output":64000},"provider":{"npm":"ai-gateway-provider"}},"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-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}},"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,"cost":{"input":0.8,"output":4,"cache_read":0.08,"cache_write":1},"limit":{"context":200000,"output":8192}},"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,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":8192}},"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":"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}},"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,"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}},"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,"cost":{"input":0.25,"output":1.25,"cache_read":0.03,"cache_write":0.3},"limit":{"context":200000,"output":4096}},"anthropic/claude-opus-4":{"id":"anthropic/claude-opus-4","name":"Claude Opus 4 (latest)","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,"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"limit":{"context":200000,"output":32000}},"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,"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}},"limit":{"context":1000000,"output":128000}},"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,"cost":{"input":0.8,"output":4,"cache_read":0.08,"cache_write":1},"limit":{"context":200000,"output":8192}},"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":"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}},"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":"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}},"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,"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"limit":{"context":200000,"output":4096}}}},"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":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}},"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-03-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":144000,"input":128000,"output":64000}},"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"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"input":128000,"output":64000}},"gemini-3-flash-preview":{"id":"gemini-3-flash-preview","name":"Gemini 3 Flash","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","audio","video"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"input":128000,"output":64000}},"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-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}},"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":"2025-11-18","last_updated":"2025-11-18","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"input":128000,"output":64000}},"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,"cost":{"input":0,"output":0},"limit":{"context":400000,"input":272000,"output":128000}},"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":"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}},"gpt-5.2":{"id":"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,"cost":{"input":0,"output":0},"limit":{"context":264000,"input":128000,"output":64000}},"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,"cost":{"input":0,"output":0},"limit":{"context":400000,"input":272000,"output":128000}},"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":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":400000,"input":272000,"output":128000}},"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,"cost":{"input":0,"output":0},"limit":{"context":400000,"input":128000,"output":128000}},"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"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":216000,"input":128000,"output":16000}},"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":"2025-08","release_date":"2025-08-27","last_updated":"2025-08-27","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"input":128000,"output":64000}},"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-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}},"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-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}},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","family":"gpt","attachment":false,"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":0,"output":0},"limit":{"context":400000,"input":272000,"output":128000}},"gpt-4o":{"id":"gpt-4o","name":"GPT-4o","family":"gpt","attachment":true,"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"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"input":64000,"output":4096}},"gpt-5":{"id":"gpt-5","name":"GPT-5","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"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":128000}},"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"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":144000,"input":128000,"output":32000}},"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,"cost":{"input":0,"output":0},"limit":{"context":128000,"input":64000,"output":16384}},"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,"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}},"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}}}},"mixlayer":{"id":"mixlayer","env":["MIXLAYER_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://models.mixlayer.ai/v1","name":"Mixlayer","doc":"https://docs.mixlayer.com","models":{"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,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.4,"output":3.2},"limit":{"context":262144,"output":262144}},"qwen/qwen3.5-27b":{"id":"qwen/qwen3.5-27b","name":"Qwen3.5 27B","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.3,"output":2.4},"limit":{"context":262144,"output":262144}},"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,"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":3.6},"limit":{"context":262144,"output":262144}},"qwen/qwen3.5-9b":{"id":"qwen/qwen3.5-9b","name":"Qwen3.5 9B","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.1,"output":0.4},"limit":{"context":262144,"output":262144}},"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,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.25,"output":1.3},"limit":{"context":262144,"output":262144}}}},"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-pro":{"id":"mimo-v2-pro","name":"MiMo-V2-Pro","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":0,"output":0,"cache_read":0},"limit":{"context":1000000,"output":128000}},"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,"cost":{"input":0,"output":0},"limit":{"context":8000,"output":16000}},"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":true,"cost":{"input":0,"output":0,"cache_read":0},"limit":{"context":256000,"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-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,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":1.2,"output":4,"cache_read":0.24,"cache_write":0},"limit":{"context":200000,"output":131072}},"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}},"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.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,"cost":{"input":0.07,"output":0.4,"cache_read":0.01,"cache_write":0},"limit":{"context":200000,"output":131072}},"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,"cost":{"input":1.4,"output":4.4,"cache_read":0.26,"cache_write":0},"limit":{"context":200000,"output":131072}},"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,"cost":{"input":0.6,"output":2.2,"cache_read":0.11,"cache_write":0},"limit":{"context":131072,"output":98304}},"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-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":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":1.2,"output":4,"cache_read":0.24,"cache_write":0},"limit":{"context":200000,"output":131072}},"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.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.11,"cache_write":0},"limit":{"context":204800,"output":131072}},"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,"cost":{"input":0.3,"output":0.9},"limit":{"context":128000,"output":32768}},"glm-4.5-flash":{"id":"glm-4.5-flash","name":"GLM-4.5-Flash","family":"glm-flash","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.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}}}},"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.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":1.25,"output":10,"cache_read":0.125},"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai"}},"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,"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"limit":{"context":200000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic"}},"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"]},"open_weights":true,"cost":{"input":0.6,"output":3,"cache_read":0.08},"limit":{"context":262144,"output":65536}},"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.1},"limit":{"context":204800,"output":131072},"status":"deprecated"},"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-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":204800,"output":131072}},"glm-4.7-free":{"id":"glm-4.7-free","name":"GLM-4.7 Free","family":"glm-free","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},"limit":{"context":204800,"output":131072},"status":"deprecated"},"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":"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}},"limit":{"context":1048576,"output":65536},"provider":{"npm":"@ai-sdk/google"}},"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":"2025-07-31","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":1000000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic"}},"kimi-k2.5-free":{"id":"kimi-k2.5-free","name":"Kimi K2.5 Free","family":"kimi-free","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"]},"open_weights":true,"cost":{"input":0,"output":0,"cache_read":0},"limit":{"context":262144,"output":262144},"status":"deprecated"},"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,"cost":{"input":0,"output":0,"cache_read":0},"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai"}},"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-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"}},"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,"cost":{"input":0,"output":0,"cache_read":0},"limit":{"context":204800,"output":131072},"provider":{"npm":"@ai-sdk/anthropic"}},"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.175},"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai"}},"big-pickle":{"id":"big-pickle","name":"Big Pickle","family":"big-pickle","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"]},"open_weights":false,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":200000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic"}},"claude-opus-4-1":{"id":"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},"provider":{"npm":"@ai-sdk/anthropic"}},"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},"provider":{"npm":"@ai-sdk/openai"}},"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,"cost":{"input":0.8,"output":4,"cache_read":0.08,"cache_write":1},"limit":{"context":200000,"output":8192},"provider":{"npm":"@ai-sdk/anthropic"}},"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,"cost":{"input":0.3,"output":1.2,"cache_read":0.1},"limit":{"context":204800,"output":131072},"status":"deprecated"},"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,"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"limit":{"context":204800,"output":131072}},"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.2,"output":1.25,"cache_read":0.02},"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai"}},"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"]},"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"}},"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.25,"output":2,"cache_read":0.025},"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai"}},"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","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}},"limit":{"context":1000000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic"}},"gemini-3-flash":{"id":"gemini-3-flash","name":"Gemini 3 Flash","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,"cost":{"input":0.5,"output":3,"cache_read":0.05},"limit":{"context":1048576,"output":65536},"provider":{"npm":"@ai-sdk/google"}},"trinity-large-preview-free":{"id":"trinity-large-preview-free","name":"Trinity Large Preview","family":"trinity","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"},"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":"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.07,"output":8.5,"cache_read":0.107},"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai"}},"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","pdf"],"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"}},"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":"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"},"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-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},"provider":{"npm":"@ai-sdk/anthropic"}},"minimax-m2.1-free":{"id":"minimax-m2.1-free","name":"MiniMax M2.1 Free","family":"minimax-free","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"}},"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,"knowledge":"2024-12","release_date":"2026-03-30","last_updated":"2026-03-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0,"cache_read":0},"limit":{"context":1048576,"output":64000},"status":"deprecated"},"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"},"gemini-3-pro":{"id":"gemini-3-pro","name":"Gemini 3 Pro","family":"gemini-pro","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}},"limit":{"context":1048576,"output":65536},"status":"deprecated","provider":{"npm":"@ai-sdk/google"}},"gpt-5-codex":{"id":"gpt-5-codex","name":"GPT-5 Codex","family":"gpt-codex","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"]},"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"}},"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":2.5,"output":15,"cache_read":0.25},"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai"}},"grok-code":{"id":"grok-code","name":"Grok Code Fast 1","family":"grok","attachment":true,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-08-20","last_updated":"2025-08-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":256000,"output":256000},"status":"deprecated"},"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-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"},"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":1.75,"output":14,"cache_read":0.175},"limit":{"context":128000,"input":128000,"output":128000},"provider":{"npm":"@ai-sdk/openai"}},"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-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":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic"}},"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-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}},"kimi-k2":{"id":"kimi-k2","name":"Kimi K2","family":"kimi","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"]},"open_weights":true,"cost":{"input":0.4,"output":2.5,"cache_read":0.4},"limit":{"context":262144,"output":262144},"status":"deprecated"},"claude-sonnet-4-5":{"id":"claude-sonnet-4-5","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":"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}},"limit":{"context":1000000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic"}},"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"},"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.07,"output":8.5,"cache_read":0.107},"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai"}},"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":"2024-12","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},"limit":{"context":1048576,"output":64000},"status":"deprecated"},"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":"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":204800,"output":128000}},"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-10","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"},"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"],"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"}},"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":"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},"status":"deprecated"}}},"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":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.1,"output":0.3,"cache_read":0.02},"limit":{"context":256000,"input":256000,"output":256000}},"step-1-32k":{"id":"step-1-32k","name":"Step 1 (32K)","attachment":false,"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"]},"open_weights":false,"cost":{"input":2.05,"output":9.59,"cache_read":0.41},"limit":{"context":32768,"input":32768,"output":32768}},"step-3.5-flash":{"id":"step-3.5-flash","name":"Step 3.5 Flash","attachment":false,"reasoning":true,"tool_call":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}},"step-2-16k":{"id":"step-2-16k","name":"Step 2 (16K)","attachment":false,"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"]},"open_weights":false,"cost":{"input":5.21,"output":16.44,"cache_read":1.04},"limit":{"context":16384,"input":16384,"output":8192}}}},"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,"knowledge":"2025-11","release_date":"2026-01-30","last_updated":"2026-02-04","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}},"NousResearch/Hermes-4-405B":{"id":"NousResearch/Hermes-4-405B","name":"Hermes-4-405B","attachment":false,"reasoning":true,"tool_call":true,"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}},"black-forest-labs/flux-schnell":{"id":"black-forest-labs/flux-schnell","name":"FLUX.1-schnell","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}},"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}},"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,"cost":{"input":0.25,"output":0.75,"cache_read":0.025,"cache_write":0.31},"limit":{"context":128000,"input":120000,"output":8192}},"Qwen/Qwen3-30B-A3B-Thinking-2507":{"id":"Qwen/Qwen3-30B-A3B-Thinking-2507","name":"Qwen3-30B-A3B-Thinking-2507","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}},"Qwen/Qwen3-32B-fast":{"id":"Qwen/Qwen3-32B-fast","name":"Qwen3-32B (Fast)","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}},"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}},"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,"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}},"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":"2025-07","release_date":"2025-07-25","last_updated":"2025-10-04","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.2,"output":0.6},"limit":{"context":262144,"output":8192}},"Qwen/Qwen3-32B":{"id":"Qwen/Qwen3-32B","name":"Qwen3-32B","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}},"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":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}},"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-07","release_date":"2025-07-25","last_updated":"2025-10-04","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.2,"output":0.8},"limit":{"context":262144,"output":8192}},"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}},"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,"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}},"Qwen/Qwen2.5-Coder-7B-fast":{"id":"Qwen/Qwen2.5-Coder-7B-fast","name":"Qwen2.5-Coder-7B (Fast)","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}},"PrimeIntellect/INTELLECT-3":{"id":"PrimeIntellect/INTELLECT-3","name":"INTELLECT-3","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-10","release_date":"2026-01-25","last_updated":"2026-02-04","modalities":{"input":["text"],"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}},"zai-org/GLM-4.5":{"id":"zai-org/GLM-4.5","name":"GLM-4.5","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"]},"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}},"zai-org/GLM-4.5-Air":{"id":"zai-org/GLM-4.5-Air","name":"GLM-4.5-Air","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"]},"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}},"zai-org/GLM-4.7-FP8":{"id":"zai-org/GLM-4.7-FP8","name":"GLM-4.7 (FP8)","attachment":false,"reasoning":false,"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"]},"open_weights":false,"cost":{"input":0.4,"output":2,"cache_read":0.04,"cache_write":0.5},"limit":{"context":128000,"input":124000,"output":4096}},"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,"knowledge":"2026-01","release_date":"2026-03-01","last_updated":"2026-03-10","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}},"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}},"BAAI/bge-multilingual-gemma2":{"id":"BAAI/bge-multilingual-gemma2","name":"bge-multilingual-gemma2","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":8192,"input":8192,"output":0}},"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,"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}},"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)","attachment":false,"reasoning":false,"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}},"meta-llama/Llama-3.3-70B-Instruct-fast":{"id":"meta-llama/Llama-3.3-70B-Instruct-fast","name":"Llama-3.3-70B-Instruct (Fast)","attachment":false,"reasoning":false,"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}},"meta-llama/Llama-Guard-3-8B":{"id":"meta-llama/Llama-Guard-3-8B","name":"Llama-Guard-3-8B","attachment":false,"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"]},"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}},"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-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}},"nvidia/Nemotron-Nano-V2-12b":{"id":"nvidia/Nemotron-Nano-V2-12b","name":"Nemotron-Nano-V2-12b","attachment":false,"reasoning":false,"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}},"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":"2026-02","release_date":"2026-03-11","last_updated":"2026-03-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.3,"output":0.9},"limit":{"context":256000,"input":256000,"output":32768}},"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":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}},"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,"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}},"deepseek-ai/DeepSeek-V3-0324":{"id":"deepseek-ai/DeepSeek-V3-0324","name":"DeepSeek-V3-0324","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}},"deepseek-ai/DeepSeek-V3-0324-fast":{"id":"deepseek-ai/DeepSeek-V3-0324-fast","name":"DeepSeek-V3-0324 (Fast)","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}},"deepseek-ai/DeepSeek-R1-0528-fast":{"id":"deepseek-ai/DeepSeek-R1-0528-fast","name":"DeepSeek R1 0528 Fast","family":"deepseek","attachment":false,"reasoning":true,"tool_call":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}},"deepseek-ai/DeepSeek-R1-0528":{"id":"deepseek-ai/DeepSeek-R1-0528","name":"DeepSeek-R1-0528","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}},"deepseek-ai/DeepSeek-V3.2":{"id":"deepseek-ai/DeepSeek-V3.2","name":"DeepSeek-V3.2","attachment":false,"reasoning":true,"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}},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"gpt-oss-20b","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}},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"gpt-oss-120b","attachment":false,"reasoning":true,"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}},"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,"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}},"google/gemma-2-9b-it-fast":{"id":"google/gemma-2-9b-it-fast","name":"Gemma-2-9b-it (Fast)","attachment":false,"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"]},"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}},"google/gemma-3-27b-it-fast":{"id":"google/gemma-3-27b-it-fast","name":"Gemma-3-27b-it (Fast)","attachment":true,"reasoning":false,"tool_call":true,"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}},"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":"2025-10","release_date":"2026-01-20","last_updated":"2026-02-04","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}},"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}},"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"]},"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-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":"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}},"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}},"MiniMaxAI/MiniMax-M2.1":{"id":"MiniMaxAI/MiniMax-M2.1","name":"MiniMax-M2.1","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}},"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}}}},"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":false,"release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":204,"output":0}},"novita/kimi-k2.5":{"id":"novita/kimi-k2.5","name":"kimi-k2.5","attachment":true,"reasoning":true,"tool_call":true,"temperature":false,"release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":262144}},"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"]},"open_weights":false,"limit":{"context":205000,"output":131072}},"novita/glm-5":{"id":"novita/glm-5","name":"glm-5","attachment":true,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2026-02-11","last_updated":"2026-02-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":205000,"output":131072}},"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"]},"open_weights":false,"limit":{"context":205000,"output":131072}},"novita/glm-4.6":{"id":"novita/glm-4.6","name":"GLM-4.6","family":"glm","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":0,"output":0}},"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"]},"open_weights":false,"limit":{"context":131000,"output":32768}},"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}},"novita/glm-4.7-flash":{"id":"novita/glm-4.7-flash","name":"glm-4.7-flash","attachment":true,"reasoning":true,"tool_call":true,"temperature":false,"release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":65500}},"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-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":205000,"output":131072}},"novita/kimi-k2-thinking":{"id":"novita/kimi-k2-thinking","name":"kimi-k2-thinking","family":"kimi","attachment":true,"reasoning":true,"tool_call":true,"temperature":false,"release_date":"2025-11-07","last_updated":"2025-11-07","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":0}},"fireworks-ai/kimi-k2.5-fw":{"id":"fireworks-ai/kimi-k2.5-fw","name":"Kimi-K2.5-FW","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":262144,"input":245760,"output":16384}},"elevenlabs/elevenlabs-v2.5-turbo":{"id":"elevenlabs/elevenlabs-v2.5-turbo","name":"ElevenLabs-v2.5-Turbo","family":"elevenlabs","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2024-10-28","last_updated":"2024-10-28","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":128000,"output":0}},"elevenlabs/elevenlabs-v3":{"id":"elevenlabs/elevenlabs-v3","name":"ElevenLabs-v3","family":"elevenlabs","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-06-05","last_updated":"2025-06-05","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":128000,"output":0}},"elevenlabs/elevenlabs-music":{"id":"elevenlabs/elevenlabs-music","name":"ElevenLabs-Music","family":"elevenlabs","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-08-29","last_updated":"2025-08-29","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":2000,"output":0}},"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,"limit":{"context":0,"output":0}},"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":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}},"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-15","last_updated":"2025-05-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":0,"output":0}},"cerebras/qwen3-235b-2507-cs":{"id":"cerebras/qwen3-235b-2507-cs","name":"qwen3-235b-2507-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,"limit":{"context":0,"output":0}},"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}},"stabilityai/stablediffusionxl":{"id":"stabilityai/stablediffusionxl","name":"StableDiffusionXL","family":"stable-diffusion","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2023-07-09","last_updated":"2023-07-09","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":200,"output":0}},"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,"temperature":false,"release_date":"2025-08-22","last_updated":"2025-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.2,"output":1.5,"cache_read":0.02},"limit":{"context":256000,"output":128000}},"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"]},"open_weights":false,"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"limit":{"context":2000000,"output":128000}},"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,"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":{"id":"xai/grok-4","name":"Grok-4","family":"grok","attachment":true,"reasoning":true,"tool_call":true,"temperature":false,"release_date":"2025-07-10","last_updated":"2025-07-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":3,"output":15,"cache_read":0.75},"limit":{"context":256000,"output":128000}},"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"]},"open_weights":false,"cost":{"input":0.3,"output":0.5,"cache_read":0.075},"limit":{"context":131072,"output":8192}},"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":false,"release_date":"2026-03-13","last_updated":"2026-03-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":2,"output":6,"cache_read":0.2},"limit":{"context":128000,"output":0}},"xai/grok-3":{"id":"xai/grok-3","name":"Grok 3","family":"grok","attachment":true,"reasoning":false,"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":3,"output":15,"cache_read":0.75},"limit":{"context":131072,"output":8192}},"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"]},"open_weights":false,"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"limit":{"context":2000000,"output":128000}},"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"]},"open_weights":false,"limit":{"context":2000000,"output":30000}},"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"]},"open_weights":false,"limit":{"context":256,"output":0}},"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":false,"release_date":"2025-05-09","last_updated":"2025-05-09","modalities":{"input":["text","image"],"output":["video"]},"open_weights":false,"limit":{"context":256,"output":0}},"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-12-08","last_updated":"2025-12-08","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/sora-2-pro":{"id":"openai/sora-2-pro","name":"Sora-2-Pro","family":"sora","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/chatgpt-4o-latest":{"id":"openai/chatgpt-4o-latest","name":"ChatGPT-4o-Latest","family":"gpt","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"]},"open_weights":false,"cost":{"input":4.5,"output":14},"limit":{"context":128000,"output":8192}},"openai/gpt-5-chat":{"id":"openai/gpt-5-chat","name":"GPT-5-Chat","family":"gpt-codex","attachment":true,"reasoning":false,"tool_call":true,"temperature":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}},"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}},"openai/gpt-4o-aug":{"id":"openai/gpt-4o-aug","name":"GPT-4o-Aug","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2024-11-21","last_updated":"2024-11-21","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":2.2,"output":9,"cache_read":1.1},"limit":{"context":128000,"output":8192}},"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":false,"release_date":"2024-08-26","last_updated":"2024-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":27,"output":54},"limit":{"context":8192,"output":4096}},"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-5-nano":{"id":"openai/gpt-5-nano","name":"GPT-5-nano","family":"gpt-nano","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"]},"open_weights":false,"cost":{"input":0.045,"output":0.36,"cache_read":0.0045},"limit":{"context":400000,"output":128000}},"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"]},"open_weights":false,"cost":{"input":1.6,"output":13,"cache_read":0.16},"limit":{"context":400000,"output":128000}},"openai/gpt-4-turbo":{"id":"openai/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"]},"open_weights":false,"cost":{"input":9,"output":27},"limit":{"context":128000,"output":4096}},"openai/gpt-5.2":{"id":"openai/gpt-5.2","name":"GPT-5.2","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"]},"open_weights":false,"cost":{"input":1.6,"output":13,"cache_read":0.16},"limit":{"context":400000,"output":128000}},"openai/o3-pro":{"id":"openai/o3-pro","name":"o3-pro","family":"o-pro","attachment":true,"reasoning":true,"tool_call":true,"temperature":false,"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/o3-mini-high":{"id":"openai/o3-mini-high","name":"o3-mini-high","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"]},"open_weights":false,"cost":{"input":0.99,"output":4},"limit":{"context":200000,"output":100000}},"openai/gpt-4o-mini":{"id":"openai/gpt-4o-mini","name":"GPT-4o-mini","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2024-07-18","last_updated":"2024-07-18","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}},"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":false,"release_date":"2025-06-27","last_updated":"2025-06-27","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":1.8,"output":7.2,"cache_read":0.45},"limit":{"context":200000,"output":100000}},"openai/gpt-5.4-mini":{"id":"openai/gpt-5.4-mini","name":"GPT-5.4-Mini","attachment":true,"reasoning":true,"tool_call":true,"temperature":false,"release_date":"2026-03-12","last_updated":"2026-03-12","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}},"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"]},"open_weights":false,"limit":{"context":800,"output":0}},"openai/o4-mini":{"id":"openai/o4-mini","name":"o4-mini","family":"o-mini","attachment":true,"reasoning":true,"tool_call":true,"temperature":false,"release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.99,"output":4,"cache_read":0.25},"limit":{"context":200000,"output":100000}},"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"]},"open_weights":false,"cost":{"input":0.18,"output":1.1,"cache_read":0.018},"limit":{"context":400000,"input":272000,"output":128000}},"openai/gpt-image-1":{"id":"openai/gpt-image-1","name":"GPT-Image-1","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-03-31","last_updated":"2025-03-31","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":128000,"output":0}},"openai/gpt-5.2-codex":{"id":"openai/gpt-5.2-codex","name":"GPT-5.2-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"]},"open_weights":false,"cost":{"input":1.6,"output":13,"cache_read":0.16},"limit":{"context":400000,"output":128000}},"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":false,"release_date":"2025-11-12","last_updated":"2025-11-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.22,"output":1.8,"cache_read":0.022},"limit":{"context":400000,"output":128000}},"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":"2025-11-12","last_updated":"2025-11-12","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-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"]},"open_weights":false,"limit":{"context":0,"output":0}},"openai/o1":{"id":"openai/o1","name":"o1","family":"o","attachment":true,"reasoning":true,"tool_call":true,"temperature":false,"release_date":"2024-12-18","last_updated":"2024-12-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":14,"output":54},"limit":{"context":200000,"output":100000}},"openai/gpt-5.4-pro":{"id":"openai/gpt-5.4-pro","name":"GPT-5.4-Pro","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"]},"open_weights":false,"cost":{"input":27,"output":160},"limit":{"context":1050000,"input":922000,"output":128000}},"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":false,"release_date":"2023-09-13","last_updated":"2023-09-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.45,"output":1.4},"limit":{"context":16384,"output":2048}},"openai/o3-deep-research":{"id":"openai/o3-deep-research","name":"o3-deep-research","family":"o","attachment":true,"reasoning":true,"tool_call":true,"temperature":false,"release_date":"2025-06-27","last_updated":"2025-06-27","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":9,"output":36,"cache_read":2.2},"limit":{"context":200000,"output":100000}},"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"]},"open_weights":false,"cost":{"input":0.99,"output":4},"limit":{"context":200000,"output":100000}},"openai/o1-pro":{"id":"openai/o1-pro","name":"o1-pro","family":"o-pro","attachment":true,"reasoning":true,"tool_call":true,"temperature":false,"release_date":"2025-03-19","last_updated":"2025-03-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":140,"output":540},"limit":{"context":200000,"output":100000}},"openai/gpt-4o-search":{"id":"openai/gpt-4o-search","name":"GPT-4o-Search","family":"gpt","attachment":true,"reasoning":false,"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":2.2,"output":9},"limit":{"context":128000,"output":8192}},"openai/gpt-5-codex":{"id":"openai/gpt-5-codex","name":"GPT-5-Codex","family":"gpt-codex","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"]},"open_weights":false,"cost":{"input":1.1,"output":9},"limit":{"context":400000,"output":128000}},"openai/gpt-5.4":{"id":"openai/gpt-5.4","name":"GPT-5.4","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"]},"open_weights":false,"cost":{"input":2.2,"output":14,"cache_read":0.22},"limit":{"context":1050000,"input":922000,"output":128000}},"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":false,"release_date":"2026-03-04","last_updated":"2026-03-04","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":16384}},"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":false,"release_date":"2023-09-27","last_updated":"2023-09-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.45,"output":1.4},"limit":{"context":4524,"output":2048}},"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"]},"open_weights":false,"cost":{"input":0.09,"output":0.36,"cache_read":0.022},"limit":{"context":1047576,"output":32768}},"openai/o3":{"id":"openai/o3","name":"o3","family":"o","attachment":true,"reasoning":true,"tool_call":true,"temperature":false,"release_date":"2025-04-16","last_updated":"2025-04-16","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}},"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-10-06","last_updated":"2025-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":14,"output":110},"limit":{"context":400000,"output":128000}},"openai/sora-2":{"id":"openai/sora-2","name":"Sora-2","family":"sora","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-4o":{"id":"openai/gpt-4o","name":"GPT-4o","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":{"id":"openai/gpt-5","name":"GPT-5","family":"gpt","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"]},"open_weights":false,"cost":{"input":1.1,"output":9,"cache_read":0.11},"limit":{"context":400000,"output":128000}},"openai/gpt-5.2-instant":{"id":"openai/gpt-5.2-instant","name":"GPT-5.2-Instant","attachment":true,"reasoning":false,"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":1.6,"output":13,"cache_read":0.16},"limit":{"context":128000,"output":16384}},"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":true,"temperature":false,"release_date":"2025-03-11","last_updated":"2025-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.14,"output":0.54},"limit":{"context":128000,"output":8192}},"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-12-16","last_updated":"2025-12-16","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":128000,"output":0}},"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":false,"release_date":"2023-09-20","last_updated":"2023-09-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":1.4,"output":1.8},"limit":{"context":3500,"output":1024}},"openai/gpt-4.1":{"id":"openai/gpt-4.1","name":"GPT-4.1","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":1.8,"output":7.2,"cache_read":0.45},"limit":{"context":1047576,"output":32768}},"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":1.1,"output":9,"cache_read":0.11},"limit":{"context":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":true,"temperature":false,"release_date":"2025-04-15","last_updated":"2025-04-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.36,"output":1.4,"cache_read":0.09},"limit":{"context":1047576,"output":32768}},"openai/gpt-4-classic":{"id":"openai/gpt-4-classic","name":"GPT-4-Classic","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"]},"open_weights":false,"cost":{"input":27,"output":54},"limit":{"context":8192,"output":4096}},"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,"temperature":false,"release_date":"2025-11-12","last_updated":"2025-11-12","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-5.3-instant":{"id":"openai/gpt-5.3-instant","name":"GPT-5.3-Instant","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2026-03-03","last_updated":"2026-03-03","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":1.6,"output":13,"cache_read":0.16},"limit":{"context":128000,"input":111616,"output":16384}},"google/veo-3-fast":{"id":"google/veo-3-fast","name":"Veo-3-Fast","family":"veo","attachment":true,"reasoning":false,"tool_call":true,"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}},"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":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}},"google/gemini-3.1-pro":{"id":"google/gemini-3.1-pro","name":"Gemini-3.1-Pro","attachment":true,"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"]},"open_weights":false,"cost":{"input":2,"output":12,"cache_read":0.2},"limit":{"context":1048576,"output":65536}},"google/imagen-3-fast":{"id":"google/imagen-3-fast","name":"Imagen-3-Fast","family":"imagen","attachment":true,"reasoning":false,"tool_call":true,"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}},"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":false,"release_date":"2024-12-11","last_updated":"2024-12-11","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"cost":{"input":0.1,"output":0.42},"limit":{"context":990000,"output":8192}},"google/gemini-deep-research":{"id":"google/gemini-deep-research","name":"gemini-deep-research","attachment":true,"reasoning":true,"tool_call":true,"temperature":false,"release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"cost":{"input":1.6,"output":9.6},"limit":{"context":1048576,"output":0}},"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"]},"open_weights":false,"cost":{"input":0.87,"output":7,"cache_read":0.087},"limit":{"context":1065535,"output":65535}},"google/imagen-3":{"id":"google/imagen-3","name":"Imagen-3","family":"imagen","attachment":true,"reasoning":false,"tool_call":true,"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}},"google/nano-banana":{"id":"google/nano-banana","name":"Nano-Banana","family":"nano-banana","attachment":true,"reasoning":false,"tool_call":true,"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.21,"output":1.8,"cache_read":0.021},"limit":{"context":65536,"output":0}},"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":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.21,"output":1.8,"cache_read":0.021},"limit":{"context":1065535,"output":65535}},"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":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.25,"output":1.5},"limit":{"context":1048576,"output":65536}},"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.4,"output":2.4,"cache_read":0.04},"limit":{"context":1048576,"output":65536}},"google/veo-3.1":{"id":"google/veo-3.1","name":"Veo-3.1","family":"veo","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text"],"output":["video"]},"open_weights":false,"limit":{"context":480,"output":0}},"google/lyria":{"id":"google/lyria","name":"Lyria","family":"lyria","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-06-04","last_updated":"2025-06-04","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":0,"output":0}},"google/imagen-4-ultra":{"id":"google/imagen-4-ultra","name":"Imagen-4-Ultra","family":"imagen","attachment":true,"reasoning":false,"tool_call":true,"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/nano-banana-pro":{"id":"google/nano-banana-pro","name":"Nano-Banana-Pro","family":"nano-banana","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-11-19","last_updated":"2025-11-19","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"cost":{"input":2,"output":12,"cache_read":0.2},"limit":{"context":65536,"output":0}},"google/gemini-3-pro":{"id":"google/gemini-3-pro","name":"Gemini-3-Pro","family":"gemini-pro","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"]},"open_weights":false,"cost":{"input":1.6,"output":9.6,"cache_read":0.16},"limit":{"context":1048576,"output":65536}},"google/imagen-4-fast":{"id":"google/imagen-4-fast","name":"Imagen-4-Fast","family":"imagen","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-06-25","last_updated":"2025-06-25","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":480,"output":0}},"google/veo-3":{"id":"google/veo-3","name":"Veo-3","family":"veo","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-05-21","last_updated":"2025-05-21","modalities":{"input":["text"],"output":["video"]},"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":false,"release_date":"2025-06-19","last_updated":"2025-06-19","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"cost":{"input":0.07,"output":0.28},"limit":{"context":1024000,"output":64000}},"google/imagen-4":{"id":"google/imagen-4","name":"Imagen-4","family":"imagen","attachment":true,"reasoning":false,"tool_call":true,"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/gemma-4-31b":{"id":"google/gemma-4-31b","name":"Gemma-4-31B","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":262144,"output":8192}},"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":false,"release_date":"2025-02-05","last_updated":"2025-02-05","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"cost":{"input":0.052,"output":0.21},"limit":{"context":990000,"output":8192}},"google/veo-2":{"id":"google/veo-2","name":"Veo-2","family":"veo","attachment":true,"reasoning":false,"tool_call":true,"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}},"lumalabs/ray2":{"id":"lumalabs/ray2","name":"Ray2","family":"ray","attachment":true,"reasoning":false,"tool_call":true,"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}},"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"]},"open_weights":false,"cost":{"input":13,"output":64,"cache_read":1.3,"cache_write":16},"limit":{"context":196608,"output":32000}},"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":false,"release_date":"2024-06-05","last_updated":"2024-06-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":2.6,"output":13,"cache_read":0.26,"cache_write":3.2},"limit":{"context":189096,"output":8192}},"anthropic/claude-haiku-3":{"id":"anthropic/claude-haiku-3","name":"Claude-Haiku-3","family":"claude-haiku","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2024-03-09","last_updated":"2024-03-09","modalities":{"input":["text","image","pdf"],"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}},"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"]},"open_weights":false,"cost":{"input":4.3,"output":21,"cache_read":0.43,"cache_write":5.3},"limit":{"context":983040,"output":128000}},"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"]},"open_weights":false,"cost":{"input":2.6,"output":13,"cache_read":0.26,"cache_write":3.2},"limit":{"context":983040,"output":64000}},"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":false,"release_date":"2025-09-26","last_updated":"2025-09-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":2.6,"output":13,"cache_read":0.26,"cache_write":3.2},"limit":{"context":983040,"output":32768}},"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"]},"open_weights":false,"cost":{"input":4.3,"output":21,"cache_read":0.43,"cache_write":5.3},"limit":{"context":196608,"output":64000}},"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"]},"open_weights":false,"cost":{"input":2.6,"output":13,"cache_read":0.26,"cache_write":3.2},"limit":{"context":196608,"output":128000}},"anthropic/claude-opus-4":{"id":"anthropic/claude-opus-4","name":"Claude-Opus-4","family":"claude-opus","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}},"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":false,"release_date":"2024-10-01","last_updated":"2024-10-01","modalities":{"input":["text","image","pdf"],"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}},"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"]},"open_weights":false,"cost":{"input":0.85,"output":4.3,"cache_read":0.085,"cache_write":1.1},"limit":{"context":192000,"output":64000}},"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,"temperature":false,"release_date":"2024-11-18","last_updated":"2024-11-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":2.6,"output":13,"cache_read":0.26,"cache_write":3.2},"limit":{"context":189096,"output":8192}},"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"]},"open_weights":false,"cost":{"input":2.6,"output":13,"cache_read":0.26,"cache_write":3.2},"limit":{"context":983040,"output":128000}},"ideogramai/ideogram":{"id":"ideogramai/ideogram","name":"Ideogram","family":"ideogram","attachment":true,"reasoning":false,"tool_call":true,"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}},"ideogramai/ideogram-v2":{"id":"ideogramai/ideogram-v2","name":"Ideogram-v2","family":"ideogram","attachment":true,"reasoning":false,"tool_call":true,"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}},"ideogramai/ideogram-v2a-turbo":{"id":"ideogramai/ideogram-v2a-turbo","name":"Ideogram-v2a-Turbo","family":"ideogram","attachment":true,"reasoning":false,"tool_call":true,"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}},"ideogramai/ideogram-v2a":{"id":"ideogramai/ideogram-v2a","name":"Ideogram-v2a","family":"ideogram","attachment":true,"reasoning":false,"tool_call":true,"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}},"trytako/tako":{"id":"trytako/tako","name":"Tako","family":"tako","attachment":true,"reasoning":false,"tool_call":true,"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,"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}}}},"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,"knowledge":"2024-07","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":20,"output":40},"limit":{"context":128000,"output":16400}},"grok-4-1-fast-reasoning":{"id":"grok-4-1-fast-reasoning","name":"xAI Grok 4.1 Fast Reasoning","family":"grok","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}},"gemma2-9b-it":{"id":"gemma2-9b-it","name":"Google Gemma 2","family":"gemma","attachment":false,"reasoning":false,"tool_call":false,"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}},"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,"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}},"llama-4-scout":{"id":"llama-4-scout","name":"Meta Llama 4 Scout 17B 16E","family":"llama","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"]},"open_weights":false,"cost":{"input":0.08,"output":0.3},"limit":{"context":131072,"output":8192}},"chatgpt-4o-latest":{"id":"chatgpt-4o-latest","name":"OpenAI ChatGPT-4o","family":"gpt","attachment":false,"reasoning":false,"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}},"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":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":3,"output":15,"cache_read":0.30000000000000004,"cache_write":3.75},"limit":{"context":200000,"output":8192}},"hermes-2-pro-llama-3-8b":{"id":"hermes-2-pro-llama-3-8b","name":"Hermes 2 Pro Llama 3 8B","family":"llama","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}},"claude-3.7-sonnet":{"id":"claude-3.7-sonnet","name":"Anthropic: Claude 3.7 Sonnet","family":"claude-sonnet","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}},"llama-prompt-guard-2-22m":{"id":"llama-prompt-guard-2-22m","name":"Meta Llama Prompt Guard 2 22M","family":"llama","attachment":false,"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"]},"open_weights":false,"cost":{"input":0.01,"output":0.01},"limit":{"context":512,"output":2}},"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":1.1,"output":4.4,"cache_read":0.55},"limit":{"context":128000,"output":65536}},"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,"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}},"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":"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}},"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-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.29,"output":0.59},"limit":{"context":131072,"output":40960}},"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":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.59,"output":0.7899999999999999},"limit":{"context":131072,"output":32678}},"gpt-5-mini":{"id":"gpt-5-mini","name":"OpenAI GPT-5 Mini","family":"gpt-mini","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}},"gpt-5-nano":{"id":"gpt-5-nano","name":"OpenAI GPT-5 Nano","family":"gpt-nano","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.049999999999999996,"output":0.39999999999999997,"cache_read":0.005},"limit":{"context":400000,"output":128000}},"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,"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}},"claude-3-haiku-20240307":{"id":"claude-3-haiku-20240307","name":"Anthropic: Claude 3 Haiku","family":"claude-haiku","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-03","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}},"llama-4-maverick":{"id":"llama-4-maverick","name":"Meta Llama 4 Maverick 17B 128E","family":"llama","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"]},"open_weights":false,"cost":{"input":0.15,"output":0.6},"limit":{"context":131072,"output":8192}},"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,"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}},"gemini-2.5-pro":{"id":"gemini-2.5-pro","name":"Google Gemini 2.5 Pro","family":"gemini-pro","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":1.25,"output":10,"cache_read":0.3125,"cache_write":1.25},"limit":{"context":1048576,"output":65536}},"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,"temperature":true,"knowledge":"2025-11","release_date":"2025-11-24","last_updated":"2025-11-24","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}},"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,"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}},"sonar-pro":{"id":"sonar-pro","name":"Perplexity Sonar Pro","family":"sonar-pro","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"]},"open_weights":false,"cost":{"input":3,"output":15},"limit":{"context":200000,"output":4096}},"mistral-large-2411":{"id":"mistral-large-2411","name":"Mistral-Large","family":"mistral-large","attachment":false,"reasoning":false,"tool_call":true,"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}},"o3-pro":{"id":"o3-pro","name":"OpenAI o3 Pro","family":"o-pro","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}},"claude-opus-4-1":{"id":"claude-opus-4-1","name":"Anthropic: Claude Opus 4.1","family":"claude-opus","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}},"gpt-4o-mini":{"id":"gpt-4o-mini","name":"OpenAI GPT-4o-mini","family":"gpt-mini","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","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"limit":{"context":128000,"output":16384}},"claude-4.5-haiku":{"id":"claude-4.5-haiku","name":"Anthropic: Claude 4.5 Haiku","family":"claude-haiku","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}},"kimi-k2-0711":{"id":"kimi-k2-0711","name":"Kimi K2 (07/11)","family":"kimi","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"],"output":["text"]},"open_weights":false,"cost":{"input":0.5700000000000001,"output":2.3},"limit":{"context":131072,"output":16384}},"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,"cost":{"input":1.1,"output":4.4,"cache_read":0.275},"limit":{"context":200000,"output":100000}},"sonar-deep-research":{"id":"sonar-deep-research","name":"Perplexity Sonar Deep Research","family":"sonar-deep-research","attachment":false,"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"]},"open_weights":false,"cost":{"input":2,"output":8},"limit":{"context":127000,"output":4096}},"gemma-3-12b-it":{"id":"gemma-3-12b-it","name":"Google Gemma 3 12B","family":"gemma","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}},"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"Google Gemini 2.5 Flash","family":"gemini-flash","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}},"deepseek-tng-r1t2-chimera":{"id":"deepseek-tng-r1t2-chimera","name":"DeepSeek TNG R1T2 Chimera","family":"deepseek-thinking","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"]},"open_weights":false,"cost":{"input":0.3,"output":1.2},"limit":{"context":130000,"output":163840}},"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,"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.25,"output":2,"cache_read":0.024999999999999998},"limit":{"context":400000,"output":128000}},"claude-sonnet-4":{"id":"claude-sonnet-4","name":"Anthropic: Claude Sonnet 4","family":"claude-sonnet","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}},"grok-code-fast-1":{"id":"grok-code-fast-1","name":"xAI Grok Code Fast 1","family":"grok","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-08","release_date":"2024-08-25","last_updated":"2024-08-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.19999999999999998,"output":1.5,"cache_read":0.02},"limit":{"context":256000,"output":10000}},"gpt-5.1":{"id":"gpt-5.1","name":"OpenAI GPT-5.1","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","image"]},"open_weights":false,"cost":{"input":1.25,"output":10,"cache_read":0.12500000000000003},"limit":{"context":400000,"output":128000}},"deepseek-reasoner":{"id":"deepseek-reasoner","name":"DeepSeek Reasoner","family":"deepseek-thinking","attachment":false,"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}},"grok-4-fast-reasoning":{"id":"grok-4-fast-reasoning","name":"xAI: Grok 4 Fast Reasoning","family":"grok","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"]},"open_weights":false,"cost":{"input":0.19999999999999998,"output":0.5,"cache_read":0.049999999999999996},"limit":{"context":2000000,"output":2000000}},"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,"cost":{"input":15,"output":60,"cache_read":7.5},"limit":{"context":200000,"output":100000}},"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,"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}},"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"]},"open_weights":false,"cost":{"input":1.1,"output":4.4,"cache_read":0.55},"limit":{"context":200000,"output":100000}},"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"]},"open_weights":false,"cost":{"input":1,"output":1},"limit":{"context":127000,"output":4096}},"kimi-k2-0905":{"id":"kimi-k2-0905","name":"Kimi K2 (09/05)","family":"kimi","attachment":false,"reasoning":false,"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}},"mistral-small":{"id":"mistral-small","name":"Mistral Small","family":"mistral-small","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}},"qwen3-30b-a3b":{"id":"qwen3-30b-a3b","name":"Qwen3 30B A3B","family":"qwen","attachment":false,"reasoning":false,"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}},"codex-mini-latest":{"id":"codex-mini-latest","name":"OpenAI Codex Mini Latest","family":"gpt-codex-mini","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.5,"output":6,"cache_read":0.375},"limit":{"context":200000,"output":100000}},"grok-4":{"id":"grok-4","name":"xAI Grok 4","family":"grok","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2024-07-09","last_updated":"2024-07-09","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":3,"output":15,"cache_read":0.75},"limit":{"context":256000,"output":256000}},"qwen3-235b-a22b-thinking":{"id":"qwen3-235b-a22b-thinking","name":"Qwen3 235B A22B Thinking","family":"qwen","attachment":false,"reasoning":true,"tool_call":false,"temperature":true,"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":0.3,"output":2.9000000000000004},"limit":{"context":262144,"output":81920}},"qwen2.5-coder-7b-fast":{"id":"qwen2.5-coder-7b-fast","name":"Qwen2.5 Coder 7B fast","family":"qwen","attachment":false,"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}},"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":false,"tool_call":true,"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.03},"limit":{"context":128000,"output":128000}},"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-01","release_date":"2025-01-01","last_updated":"2025-01-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"cost":{"input":0.14,"output":1.4},"limit":{"context":262000,"output":16384}},"glm-4.6":{"id":"glm-4.6","name":"Zai GLM-4.6","family":"glm","attachment":false,"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"]},"open_weights":false,"cost":{"input":0.44999999999999996,"output":1.5},"limit":{"context":204800,"output":131072}},"gpt-5-codex":{"id":"gpt-5-codex","name":"OpenAI: GPT-5 Codex","family":"gpt-codex","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"],"output":["text"]},"open_weights":false,"cost":{"input":1.25,"output":10,"cache_read":0.12500000000000003},"limit":{"context":400000,"output":128000}},"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,"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}},"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,"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}},"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,"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}},"sonar-reasoning":{"id":"sonar-reasoning","name":"Perplexity Sonar Reasoning","family":"sonar-reasoning","attachment":false,"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"]},"open_weights":false,"cost":{"input":1,"output":5},"limit":{"context":127000,"output":4096}},"claude-opus-4":{"id":"claude-opus-4","name":"Anthropic: Claude Opus 4","family":"claude-opus","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}},"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":false,"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}},"gpt-4.1-nano":{"id":"gpt-4.1-nano","name":"OpenAI GPT-4.1 Nano","family":"gpt-nano","attachment":false,"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.09999999999999999,"output":0.39999999999999997,"cache_read":0.024999999999999998},"limit":{"context":1047576,"output":32768}},"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":true,"knowledge":"2025-07","release_date":"2025-07-31","last_updated":"2025-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.09999999999999999,"output":0.3},"limit":{"context":262144,"output":262144}},"claude-3.5-haiku":{"id":"claude-3.5-haiku","name":"Anthropic: Claude 3.5 Haiku","family":"claude-haiku","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}},"grok-3-mini":{"id":"grok-3-mini","name":"xAI Grok 3 Mini","family":"grok","attachment":false,"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":0.3,"output":0.5,"cache_read":0.075},"limit":{"context":131072,"output":131072}},"o3":{"id":"o3","name":"OpenAI o3","family":"o","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":2,"output":8,"cache_read":0.5},"limit":{"context":200000,"output":100000}},"deepseek-v3.2":{"id":"deepseek-v3.2","name":"DeepSeek V3.2","family":"deepseek","attachment":false,"reasoning":false,"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":0.41},"limit":{"context":163840,"output":65536}},"gpt-oss-20b":{"id":"gpt-oss-20b","name":"OpenAI GPT-OSS 20b","family":"gpt-oss","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}},"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}},"llama-guard-4":{"id":"llama-guard-4","name":"Meta Llama Guard 4 12B","family":"llama","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"]},"open_weights":false,"cost":{"input":0.21,"output":0.21},"limit":{"context":131072,"output":1024}},"gpt-4o":{"id":"gpt-4o","name":"OpenAI GPT-4o","family":"gpt","attachment":false,"reasoning":false,"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}},"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":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}},"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,"temperature":true,"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.09999999999999999,"output":0.39999999999999997,"cache_read":0.024999999999999998,"cache_write":0.09999999999999999},"limit":{"context":1048576,"output":65535}},"qwen3-coder":{"id":"qwen3-coder","name":"Qwen3 Coder 480B A35B Instruct Turbo","family":"qwen","attachment":false,"reasoning":false,"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}},"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}},"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,"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}},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"OpenAI GPT-OSS 120b","family":"gpt-oss","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}},"gpt-5-chat-latest":{"id":"gpt-5-chat-latest","name":"OpenAI GPT-5 Chat Latest","family":"gpt-codex","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}},"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,"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}},"deepseek-v3":{"id":"deepseek-v3","name":"DeepSeek V3","family":"deepseek","attachment":false,"reasoning":false,"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}},"llama-3.1-8b-instruct":{"id":"llama-3.1-8b-instruct","name":"Meta Llama 3.1 8B Instruct","family":"llama","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"]},"open_weights":false,"cost":{"input":0.02,"output":0.049999999999999996},"limit":{"context":16384,"output":16384}},"gpt-4.1":{"id":"gpt-4.1","name":"OpenAI GPT-4.1","family":"gpt","attachment":false,"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":2,"output":8,"cache_read":0.5},"limit":{"context":1047576,"output":32768}},"kimi-k2-thinking":{"id":"kimi-k2-thinking","name":"Kimi K2 Thinking","family":"kimi-thinking","attachment":false,"reasoning":false,"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}},"gpt-4.1-mini":{"id":"gpt-4.1-mini","name":"OpenAI GPT-4.1 Mini","family":"gpt-mini","attachment":false,"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}},"deepseek-v3.1-terminus":{"id":"deepseek-v3.1-terminus","name":"DeepSeek V3.1 Terminus","family":"deepseek","attachment":false,"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}},"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,"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":400000,"output":128000}},"grok-3":{"id":"grok-3","name":"xAI Grok 3","family":"grok","attachment":false,"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}},"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,"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}},"sonar-reasoning-pro":{"id":"sonar-reasoning-pro","name":"Perplexity Sonar Reasoning Pro","family":"sonar-reasoning","attachment":false,"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"]},"open_weights":false,"cost":{"input":2,"output":8},"limit":{"context":127000,"output":4096}}}},"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","family":"minimax","attachment":false,"reasoning":true,"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}},"gpt-oss:20b":{"id":"gpt-oss:20b","name":"gpt-oss:20b","family":"gpt-oss","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}},"kimi-k2.5":{"id":"kimi-k2.5","name":"kimi-k2.5","family":"kimi","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}},"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}},"gemma4:31b":{"id":"gemma4:31b","name":"gemma4:31b","family":"gemma","attachment":true,"reasoning":true,"tool_call":true,"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":8192}},"gpt-oss:120b":{"id":"gpt-oss:120b","name":"gpt-oss:120b","family":"gpt-oss","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}},"qwen3.5:397b":{"id":"qwen3.5:397b","name":"qwen3.5:397b","family":"qwen","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}},"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}},"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}},"qwen3-vl:235b-instruct":{"id":"qwen3-vl:235b-instruct","name":"qwen3-vl:235b-instruct","family":"qwen","attachment":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":131072}},"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}},"gemini-3-flash-preview":{"id":"gemini-3-flash-preview","name":"gemini-3-flash-preview","family":"gemini-flash","attachment":true,"reasoning":true,"tool_call":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2026-04-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536}},"ministral-3:14b":{"id":"ministral-3:14b","name":"ministral-3:14b","family":"ministral","attachment":true,"reasoning":false,"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}},"minimax-m2":{"id":"minimax-m2","name":"minimax-m2","family":"minimax","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}},"qwen3-next:80b":{"id":"qwen3-next:80b","name":"qwen3-next:80b","family":"qwen","attachment":false,"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}},"qwen3-vl:235b":{"id":"qwen3-vl:235b","name":"qwen3-vl:235b","family":"qwen","attachment":true,"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":32768}},"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}},"minimax-m2.1":{"id":"minimax-m2.1","name":"minimax-m2.1","family":"minimax","attachment":false,"reasoning":true,"tool_call":true,"release_date":"2025-12-23","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072}},"glm-5.1":{"id":"glm-5.1","name":"glm-5.1","family":"glm","attachment":false,"reasoning":true,"tool_call":true,"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}},"mistral-large-3:675b":{"id":"mistral-large-3:675b","name":"mistral-large-3:675b","family":"mistral-large","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}},"ministral-3:8b":{"id":"ministral-3:8b","name":"ministral-3:8b","family":"ministral","attachment":true,"reasoning":false,"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:12b":{"id":"gemma3:12b","name":"gemma3:12b","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}},"qwen3-coder:480b":{"id":"qwen3-coder:480b","name":"qwen3-coder:480b","family":"qwen","attachment":false,"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}},"nemotron-3-nano:30b":{"id":"nemotron-3-nano:30b","name":"nemotron-3-nano:30b","family":"nemotron","attachment":false,"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}},"glm-4.6":{"id":"glm-4.6","name":"glm-4.6","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}},"ministral-3:3b":{"id":"ministral-3:3b","name":"ministral-3:3b","family":"ministral","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}},"gemma3:27b":{"id":"gemma3:27b","name":"gemma3:27b","family":"gemma","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}},"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}},"cogito-2.1:671b":{"id":"cogito-2.1:671b","name":"cogito-2.1:671b","family":"cogito","attachment":false,"reasoning":true,"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}},"qwen3-coder-next":{"id":"qwen3-coder-next","name":"qwen3-coder-next","family":"qwen","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}},"nemotron-3-super":{"id":"nemotron-3-super","name":"nemotron-3-super","family":"nemotron","attachment":false,"reasoning":true,"tool_call":true,"release_date":"2026-03-11","last_updated":"2026-03-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536}},"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}},"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}},"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,"release_date":"2025-12-09","last_updated":"2026-01-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144}},"kimi-k2:1t":{"id":"kimi-k2:1t","name":"kimi-k2:1t","family":"kimi","attachment":false,"reasoning":false,"tool_call":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}}}},"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-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,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":200000,"output":131072}},"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,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":204800,"output":131072}},"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.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,"cost":{"input":0.07,"output":0.4,"cache_read":0.01,"cache_write":0},"limit":{"context":200000,"output":131072}},"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,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":200000,"output":131072}},"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,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":131072,"output":98304}},"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-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":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":200000,"output":131072}},"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}},"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,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":204800,"output":131072}},"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,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":32768}},"glm-4.5-flash":{"id":"glm-4.5-flash","name":"GLM-4.5-Flash","family":"glm-flash","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.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}}}},"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":{"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,"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}},"anthropic.claude-3-5-sonnet-20241022-v2:0":{"id":"anthropic.claude-3-5-sonnet-20241022-v2:0","name":"Claude Sonnet 3.5 v2","family":"claude-sonnet","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","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}},"openai.gpt-oss-safeguard-120b":{"id":"openai.gpt-oss-safeguard-120b","name":"GPT OSS Safeguard 120B","family":"gpt-oss","attachment":false,"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"]},"open_weights":false,"cost":{"input":0.15,"output":0.6},"limit":{"context":128000,"output":4096}},"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-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.06,"output":0.24},"limit":{"context":128000,"output":4096}},"meta.llama3-2-90b-instruct-v1:0":{"id":"meta.llama3-2-90b-instruct-v1:0","name":"Llama 3.2 90B 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,"cost":{"input":0.72,"output":0.72},"limit":{"context":128000,"output":4096}},"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":"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}},"writer.palmyra-x5-v1:0":{"id":"writer.palmyra-x5-v1:0","name":"Palmyra X5","family":"palmyra","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.6,"output":6},"limit":{"context":1040000,"output":8192}},"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":"2024-12-01","last_updated":"2024-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.15,"output":0.15},"limit":{"context":128000,"output":4096}},"anthropic.claude-3-5-sonnet-20240620-v1:0":{"id":"anthropic.claude-3-5-sonnet-20240620-v1:0","name":"Claude Sonnet 3.5","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,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":8192}},"mistral.ministral-3-3b-instruct":{"id":"mistral.ministral-3-3b-instruct","name":"Ministral 3 3B","family":"ministral","attachment":false,"reasoning":false,"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":256000,"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,"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}},"amazon.nova-premier-v1:0":{"id":"amazon.nova-premier-v1:0","name":"Nova Premier","family":"nova","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"]},"open_weights":false,"cost":{"input":2.5,"output":12.5},"limit":{"context":1000000,"output":16384}},"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,"temperature":true,"knowledge":"2024-04","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}},"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,"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,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":64000}},"mistral.devstral-2-123b":{"id":"mistral.devstral-2-123b","name":"Devstral 2 123B","family":"devstral","attachment":false,"reasoning":false,"tool_call":true,"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}},"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,"temperature":true,"knowledge":"2024-04","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}},"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":true,"tool_call":true,"structured_output":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":5,"output":25,"cache_read":0.5,"cache_write":6.25},"limit":{"context":200000,"output":64000}},"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,"structured_output":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}},"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":true,"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}},"amazon.nova-pro-v1:0":{"id":"amazon.nova-pro-v1:0","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,"cost":{"input":0.8,"output":3.2,"cache_read":0.2},"limit":{"context":300000,"output":8192}},"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":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,"output":5,"cache_read":0.1,"cache_write":1.25},"limit":{"context":200000,"output":64000}},"minimax.minimax-m2":{"id":"minimax.minimax-m2","name":"MiniMax M2","family":"minimax","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}},"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"]},"open_weights":false,"cost":{"input":2,"output":6},"limit":{"context":128000,"output":8192}},"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":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.24,"output":0.97},"limit":{"context":1000000,"output":16384}},"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,"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}},"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":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,"output":5,"cache_read":0.1,"cache_write":1.25},"limit":{"context":200000,"output":64000}},"amazon.nova-micro-v1:0":{"id":"amazon.nova-micro-v1:0","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,"cost":{"input":0.035,"output":0.14,"cache_read":0.00875},"limit":{"context":128000,"output":8192}},"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,"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}},"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,"temperature":true,"knowledge":"2025-08","release_date":"2026-02-17","last_updated":"2026-03-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}},"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":true,"temperature":true,"release_date":"2024-12-01","last_updated":"2024-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.07,"output":0.3},"limit":{"context":128000,"output":4096}},"us.anthropic.claude-sonnet-4-20250514-v1:0":{"id":"us.anthropic.claude-sonnet-4-20250514-v1:0","name":"Claude Sonnet 4 (US)","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"]},"open_weights":false,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":64000}},"zai.glm-5":{"id":"zai.glm-5","name":"GLM-5","family":"glm","attachment":false,"reasoning":true,"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":1,"output":3.2},"limit":{"context":202752,"output":101376}},"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,"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}},"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":"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}},"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,"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}},"zai.glm-4.7-flash":{"id":"zai.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.07,"output":0.4},"limit":{"context":200000,"output":131072}},"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":"2024-12-01","last_updated":"2024-12-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"cost":{"input":0.33,"output":2.75},"limit":{"context":128000,"output":4096}},"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,"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":5,"output":25,"cache_read":0.5,"cache_write":6.25},"limit":{"context":200000,"output":64000}},"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":false,"tool_call":true,"structured_output":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}},"meta.llama3-2-1b-instruct-v1:0":{"id":"meta.llama3-2-1b-instruct-v1:0","name":"Llama 3.2 1B Instruct","family":"llama","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.1,"output":0.1},"limit":{"context":131000,"output":4096}},"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":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"cost":{"input":0.06,"output":0.24,"cache_read":0.015},"limit":{"context":300000,"output":8192}},"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-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}},"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":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"]},"open_weights":false,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":1000000,"output":64000}},"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-08","release_date":"2026-02-17","last_updated":"2026-03-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}},"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":"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}},"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-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}},"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,"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"limit":{"context":200000,"output":64000}},"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,"release_date":"2024-12-01","last_updated":"2024-12-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.04,"output":0.08},"limit":{"context":128000,"output":4096}},"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":"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}},"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.17,"output":0.66},"limit":{"context":3500000,"output":16384}},"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,"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}},"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-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}},"mistral.magistral-small-2509":{"id":"mistral.magistral-small-2509","name":"Magistral Small 1.2","family":"magistral","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"]},"open_weights":true,"cost":{"input":0.5,"output":1.5},"limit":{"context":128000,"output":40000}},"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,"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}},"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"},"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}},"moonshot.kimi-k2-thinking":{"id":"moonshot.kimi-k2-thinking","name":"Kimi K2 Thinking","family":"kimi-thinking","attachment":false,"reasoning":true,"tool_call":true,"interleaved":true,"structured_output":true,"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}},"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":"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":5,"output":25,"cache_read":0.5,"cache_write":6.25},"limit":{"context":200000,"output":64000}},"mistral.ministral-3-14b-instruct":{"id":"mistral.ministral-3-14b-instruct","name":"Ministral 14B 3.0","family":"ministral","attachment":false,"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"]},"open_weights":false,"cost":{"input":0.2,"output":0.2},"limit":{"context":128000,"output":4096}},"anthropic.claude-3-haiku-20240307-v1:0":{"id":"anthropic.claude-3-haiku-20240307-v1:0","name":"Claude Haiku 3","family":"claude-haiku","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-02","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},"limit":{"context":200000,"output":4096}},"global.anthropic.claude-sonnet-4-20250514-v1:0":{"id":"global.anthropic.claude-sonnet-4-20250514-v1:0","name":"Claude Sonnet 4 (Global)","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"]},"open_weights":false,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":64000}},"deepseek.r1-v1:0":{"id":"deepseek.r1-v1:0","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,"cost":{"input":1.35,"output":5.4},"limit":{"context":128000,"output":32768}},"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,"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}},"mistral.voxtral-mini-3b-2507":{"id":"mistral.voxtral-mini-3b-2507","name":"Voxtral Mini 3B 2507","family":"mistral","attachment":false,"reasoning":false,"tool_call":true,"structured_output":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-6":{"id":"eu.anthropic.claude-sonnet-4-6","name":"Claude Sonnet 4.6 (EU)","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"]},"open_weights":false,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":1000000,"output":64000}},"openai.gpt-oss-120b-1:0":{"id":"openai.gpt-oss-120b-1:0","name":"gpt-oss-120b","family":"gpt-oss","attachment":false,"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"]},"open_weights":false,"cost":{"input":0.15,"output":0.6},"limit":{"context":128000,"output":4096}},"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":true,"structured_output":true,"temperature":true,"release_date":"2024-12-01","last_updated":"2024-12-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.2,"output":0.6},"limit":{"context":128000,"output":4096}},"minimax.minimax-m2.5":{"id":"minimax.minimax-m2.5","name":"MiniMax M2.5","family":"minimax","attachment":false,"reasoning":true,"tool_call":true,"structured_output":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}},"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,"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}},"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":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}},"meta.llama3-2-3b-instruct-v1:0":{"id":"meta.llama3-2-3b-instruct-v1:0","name":"Llama 3.2 3B Instruct","family":"llama","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}},"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":"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}},"anthropic.claude-opus-4-20250514-v1:0":{"id":"anthropic.claude-opus-4-20250514-v1:0","name":"Claude Opus 4","family":"claude-opus","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"]},"open_weights":false,"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"limit":{"context":200000,"output":32000}},"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":"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":5,"output":25,"cache_read":0.5,"cache_write":6.25},"limit":{"context":200000,"output":64000}},"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,"temperature":true,"knowledge":"2024-04","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}},"meta.llama3-2-11b-instruct-v1:0":{"id":"meta.llama3-2-11b-instruct-v1:0","name":"Llama 3.2 11B 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,"cost":{"input":0.16,"output":0.16},"limit":{"context":128000,"output":4096}},"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,"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}},"openai.gpt-oss-safeguard-20b":{"id":"openai.gpt-oss-safeguard-20b","name":"GPT OSS Safeguard 20B","family":"gpt-oss","attachment":false,"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"]},"open_weights":false,"cost":{"input":0.07,"output":0.2},"limit":{"context":128000,"output":4096}},"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","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}},"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-04","release_date":"2025-09-18","last_updated":"2025-09-18","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.15,"output":0.6},"limit":{"context":262144,"output":131072}},"minimax.minimax-m2.1":{"id":"minimax.minimax-m2.1","name":"MiniMax M2.1","family":"minimax","attachment":false,"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}},"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"]},"open_weights":false,"cost":{"input":0.3,"output":1.5},"limit":{"context":262000,"output":262000}},"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":true,"release_date":"2026-02-06","last_updated":"2026-02-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.22,"output":1.8},"limit":{"context":131072,"output":65536}},"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,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-07","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}},"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":true,"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":0.06,"output":0.23},"limit":{"context":128000,"output":4096}},"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":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.5,"output":1.5},"limit":{"context":256000,"output":8192}},"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-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}},"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,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","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":8192}},"writer.palmyra-x4-v1:0":{"id":"writer.palmyra-x4-v1:0","name":"Palmyra X4","family":"palmyra","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"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":122880,"output":8192}}}},"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":true,"release_date":"2026-02-26","last_updated":"2026-02-26","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":30000},"status":"beta"},"text-standard":{"id":"text-standard","name":"Text Standard","attachment":false,"reasoning":true,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-26","last_updated":"2026-02-26","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16000},"status":"beta"},"text-max":{"id":"text-max","name":"Text Max","attachment":false,"reasoning":true,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-24","last_updated":"2026-03-24","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"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":"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}},"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":"2026-01","release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.95,"output":3.15},"limit":{"context":202752,"output":131072}},"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-08-31","release_date":"2025-09-16","last_updated":"2025-09-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.6,"output":2.2},"limit":{"context":200000,"output":200000}},"nvidia/Nemotron-120B-A12B":{"id":"nvidia/Nemotron-120B-A12B","name":"Nemotron 3 Super","family":"nemotron","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"]},"open_weights":true,"cost":{"input":0.3,"output":0.75},"limit":{"context":262144,"output":32678}},"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,"release_date":"2025-08-25","last_updated":"2025-08-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.5,"output":1.5},"limit":{"context":164000,"output":131000}},"deepseek-ai/DeepSeek-V3-0324":{"id":"deepseek-ai/DeepSeek-V3-0324","name":"DeepSeek V3 0324","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"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}},"deepseek-ai/DeepSeek-V3.2":{"id":"deepseek-ai/DeepSeek-V3.2","name":"DeepSeek V3.2","family":"deepseek","attachment":false,"reasoning":true,"tool_call":true,"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,"cost":{"input":0.3,"output":0.45},"limit":{"context":163800,"output":131100},"status":"deprecated"},"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":"2025-08","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.1,"output":0.5},"limit":{"context":128000,"output":128000}},"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":"2024-08","release_date":"2025-11-06","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"},"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":"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"},"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"},"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}},"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":"2026-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},"limit":{"context":204000,"output":204000}}}},"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,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":200000,"output":131072}},"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,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":200000,"output":131072}},"glm-4.6v-flash":{"id":"glm-4.6v-flash","name":"GLM-4.6V-Flash","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,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":32768}},"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}},"glm-4.5-flash":{"id":"glm-4.5-flash","name":"GLM-4.5-Flash","family":"glm-flash","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,"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}},"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,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":204800,"output":131072}},"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}},"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":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":200000,"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.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,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":131072,"output":98304}},"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,"cost":{"input":0.07,"output":0.4,"cache_read":0.01,"cache_write":0},"limit":{"context":200000,"output":131072}},"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.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,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":204800,"output":131072}}}},"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":"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,"cache_read":0,"cache_write":0},"limit":{"context":1000000,"output":65536}},"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","video"],"output":["text"]},"open_weights":true,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":262144,"output":32768}},"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,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":202752,"output":16384}},"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}},"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":196608,"input":196601,"output":24576}},"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,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":1000000,"output":65536}},"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}},"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,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":262144,"output":65536}},"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","video"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":1000000,"output":65536}}}},"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":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"]},"open_weights":false,"cost":{"input":0.1875,"output":0.75,"cache_read":0.09375},"limit":{"context":128000,"output":16384}},"qwen3-next-80b":{"id":"qwen3-next-80b","name":"Qwen 3 Next 80b","family":"qwen","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"]},"open_weights":true,"cost":{"input":0.35,"output":1.9},"limit":{"context":256000,"output":16384}},"qwen3-235b-a22b-instruct-2507":{"id":"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-07","release_date":"2025-04-29","last_updated":"2026-03-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.15,"output":0.75},"limit":{"context":128000,"output":16384}},"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":"2025-07","release_date":"2025-12-01","last_updated":"2026-04-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.23,"output":0.57,"cache_read":0.06},"limit":{"context":1000000,"output":30000}},"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,"release_date":"2026-02-17","last_updated":"2026-03-16","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}},"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,"structured_output":true,"temperature":true,"release_date":"2026-03-24","last_updated":"2026-04-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.14,"output":0.8},"limit":{"context":256000,"output":32768}},"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}},"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,"cost":{"input":0.35,"output":1.5,"cache_read":0.04},"limit":{"context":256000,"output":65536}},"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":true,"release_date":"2026-02-16","last_updated":"2026-04-09","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"cost":{"input":0.75,"output":4.5},"limit":{"context":128000,"output":32768}},"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-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}},"openai-gpt-54":{"id":"openai-gpt-54","name":"GPT-5.4","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"]},"open_weights":false,"cost":{"input":3.13,"output":18.8,"cache_read":0.313},"limit":{"context":1000000,"output":131072}},"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,"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}},"nvidia-nemotron-3-nano-30b-a3b":{"id":"nvidia-nemotron-3-nano-30b-a3b","name":"NVIDIA Nemotron 3 Nano 30B","family":"nemotron","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-01-27","last_updated":"2026-03-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.075,"output":0.3},"limit":{"context":128000,"output":16384}},"qwen3-vl-235b-a22b":{"id":"qwen3-vl-235b-a22b","name":"Qwen3 VL 235B","family":"qwen","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}},"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,"release_date":"2026-02-24","last_updated":"2026-03-12","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}},"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,"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}},"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}},"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,"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}},"claude-opus-45":{"id":"claude-opus-45","name":"Claude Opus 4.5","family":"claude-opus","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}},"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,"temperature":true,"release_date":"2026-03-12","last_updated":"2026-04-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":2.27,"output":6.8,"cache_read":0.23,"context_over_200k":{"input":4.53,"output":13.6,"cache_read":0.23}},"limit":{"context":2000000,"output":128000}},"minimax-m27":{"id":"minimax-m27","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.375,"output":1.5,"cache_read":0.075},"limit":{"context":198000,"output":32768}},"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-07","release_date":"2025-04-29","last_updated":"2026-03-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.45,"output":3.5},"limit":{"context":128000,"output":16384}},"grok-code-fast-1":{"id":"grok-code-fast-1","name":"Grok Code Fast 1","family":"grok","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}},"qwen3-5-35b-a3b":{"id":"qwen3-5-35b-a3b","name":"Qwen 3.5 35B A3B","family":"qwen","attachment":true,"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}},"mercury-2":{"id":"mercury-2","name":"Mercury 2","family":"mercury","attachment":false,"reasoning":true,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-20","last_updated":"2026-04-09","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.3125,"output":0.9375,"cache_read":0.03125},"limit":{"context":128000,"output":50000}},"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,"cost":{"input":0.12,"output":0.2},"limit":{"context":198000,"output":16384}},"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,"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}},"openai-gpt-52-codex":{"id":"openai-gpt-52-codex","name":"GPT-5.2 Codex","family":"gpt-codex","attachment":true,"reasoning":true,"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"]},"open_weights":false,"cost":{"input":2.19,"output":17.5,"cache_read":0.219},"limit":{"context":256000,"output":65536}},"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,"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}},"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-11","last_updated":"2026-03-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":1,"output":3.2,"cache_read":0.2},"limit":{"context":198000,"output":32000}},"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":"2024-04-01","last_updated":"2026-04-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.85,"output":2.75,"cache_read":0.3},"limit":{"context":198000,"output":16384}},"mistral-small-2603":{"id":"mistral-small-2603","name":"Mistral Small 4","family":"mistral-small","attachment":true,"reasoning":true,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-16","last_updated":"2026-04-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.1875,"output":0.75},"limit":{"context":256000,"output":65536}},"openai-gpt-oss-120b":{"id":"openai-gpt-oss-120b","name":"OpenAI GPT OSS 120B","family":"gpt-oss","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"]},"open_weights":true,"cost":{"input":0.07,"output":0.3},"limit":{"context":128000,"output":16384}},"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,"release_date":"2026-03-05","last_updated":"2026-04-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.05,"output":0.15},"limit":{"context":256000,"output":32768}},"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,"release_date":"2026-03-05","last_updated":"2026-03-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":37.5,"output":225,"context_over_200k":{"input":75,"output":337.5}},"limit":{"context":1000000,"output":128000}},"aion-labs.aion-2-0":{"id":"aion-labs.aion-2-0","name":"Aion 2.0","family":"o","attachment":false,"reasoning":true,"tool_call":false,"temperature":true,"release_date":"2026-03-24","last_updated":"2026-03-31","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":1,"output":2,"cache_read":0.25},"limit":{"context":128000,"output":32768}},"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,"release_date":"2026-03-27","last_updated":"2026-03-31","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.9375,"output":5.625,"cache_read":0.09375},"limit":{"context":400000,"output":128000}},"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":"2026-04-03","last_updated":"2026-04-09","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"cost":{"input":0.175,"output":0.5},"limit":{"context":256000,"output":8192}},"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-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.34,"output":1.19,"cache_read":0.04},"limit":{"context":198000,"output":32768}},"qwen3-coder-480b-a35b-instruct":{"id":"qwen3-coder-480b-a35b-instruct","name":"Qwen 3 Coder 480b","family":"qwen","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"]},"open_weights":true,"cost":{"input":0.75,"output":3},"limit":{"context":256000,"output":65536}},"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-08","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":1.75,"output":5.5,"cache_read":0.325},"limit":{"context":200000,"output":24000}},"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-05","last_updated":"2026-03-16","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}},"deepseek-v3.2":{"id":"deepseek-v3.2","name":"DeepSeek V3.2","family":"deepseek","attachment":false,"reasoning":true,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-10","release_date":"2025-12-04","last_updated":"2026-03-24","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":{"id":"venice-uncensored","name":"Venice Uncensored 1.1","family":"venice","attachment":false,"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"]},"open_weights":true,"cost":{"input":0.2,"output":0.9},"limit":{"context":32000,"output":8192}},"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":"2026-04-06","last_updated":"2026-04-09","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"cost":{"input":0.625,"output":3.75,"cache_read":0.0625,"cache_write":0.78,"context_over_200k":{"input":2.5,"output":7.5}},"limit":{"context":1000000,"output":65536}},"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,"release_date":"2026-04-02","last_updated":"2026-04-09","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"cost":{"input":0.1625,"output":0.5},"limit":{"context":256000,"output":8192}},"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"]},"open_weights":false,"cost":{"input":3.125,"output":12.5},"limit":{"context":128000,"output":16384}},"llama-3.3-70b":{"id":"llama-3.3-70b","name":"Llama 3.3 70B","family":"llama","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"]},"open_weights":true,"cost":{"input":0.7,"output":2.8},"limit":{"context":128000,"output":4096}},"kimi-k2-5":{"id":"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-04","release_date":"2026-01-27","last_updated":"2026-03-16","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}},"grok-4-20-beta":{"id":"grok-4-20-beta","name":"Grok 4.20 Beta","family":"grok-beta","attachment":true,"reasoning":true,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-12","last_updated":"2026-04-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":2.27,"output":6.8,"cache_read":0.23,"context_over_200k":{"input":4.53,"output":13.6,"cache_read":0.23}},"limit":{"context":2000000,"output":128000}},"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}},"llama-3.2-3b":{"id":"llama-3.2-3b","name":"Llama 3.2 3B","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-10-03","last_updated":"2026-03-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.15,"output":0.6},"limit":{"context":128000,"output":4096}},"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,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.3125,"output":1.125,"cache_read":0.075},"limit":{"context":256000,"output":65536}},"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,"cost":{"input":1.1,"output":3},"limit":{"context":128000,"output":16384}},"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,"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}},"kimi-k2-thinking":{"id":"kimi-k2-thinking","name":"Kimi K2 Thinking","family":"kimi-thinking","attachment":false,"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}},"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,"release_date":"2026-04-08","last_updated":"2026-04-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":36,"output":180,"cache_read":3.6,"cache_write":45},"limit":{"context":1000000,"output":128000}}}},"aihubmix":{"id":"aihubmix","env":["AIHUBMIX_API_KEY"],"npm":"@aihubmix/ai-sdk-provider","name":"AIHubMix","doc":"https://docs.aihubmix.com","models":{"gpt-5.1-codex-max":{"id":"gpt-5.1-codex-max","name":"GPT-5.1-Codex-Max","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}},"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"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":204800,"output":131072}},"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-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":5.5,"cache_read":0.11,"cache_write":1.25},"limit":{"context":200000,"output":64000}},"coding-glm-4.7":{"id":"coding-glm-4.7","name":"Coding-GLM-4.7","family":"glm","attachment":false,"reasoning":true,"tool_call":true,"interleaved":{"field":"reasoning_details"},"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}},"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,"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}},"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-07","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}},"glm-4.7":{"id":"glm-4.7","name":"GLM-4.7","family":"glm","attachment":false,"reasoning":true,"tool_call":true,"interleaved":{"field":"reasoning_details"},"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}},"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}},"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.88,"output":2.82},"limit":{"context":204800,"output":131072}},"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-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}},"limit":{"context":200000,"output":64000}},"Kimi-K2-0905":{"id":"Kimi-K2-0905","name":"Kimi K2 0905","family":"kimi","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"]},"open_weights":true,"cost":{"input":0.55,"output":2.19},"limit":{"context":262144,"output":262144}},"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-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}},"gpt-5-nano":{"id":"gpt-5-nano","name":"GPT-5-Nano","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":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":0.5,"output":2,"cache_read":0.25},"limit":{"context":128000,"output":16384}},"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":"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}},"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,"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}},"coding-minimax-m2.1-free":{"id":"coding-minimax-m2.1-free","name":"Coding MiniMax M2.1 Free","family":"minimax","attachment":false,"reasoning":true,"tool_call":true,"interleaved":{"field":"reasoning_details"},"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}},"gpt-5.2":{"id":"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,"cost":{"input":1.75,"output":14,"cache_read":0.175},"limit":{"context":400000,"output":128000}},"claude-opus-4-1":{"id":"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":16.5,"output":82.5,"cache_read":1.5,"cache_write":18.75},"limit":{"context":200000,"output":32000}},"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"]},"open_weights":true,"cost":{"input":1.1,"output":3.29},"limit":{"context":128000,"output":128000}},"minimax-m2.1":{"id":"minimax-m2.1","name":"MiniMax M2.1","family":"minimax","attachment":false,"reasoning":true,"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.29,"output":1.15},"limit":{"context":204800,"output":131072}},"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}},"deepseek-v3.2-think":{"id":"deepseek-v3.2-think","name":"DeepSeek-V3.2-Think","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.3,"output":0.45},"limit":{"context":131000,"output":64000}},"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-2.5-flash":{"id":"gemini-2.5-flash","name":"Gemini 2.5 Flash","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":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}},"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-11","release_date":"2025-11-15","last_updated":"2025-11-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.25,"output":2,"cache_read":0.03},"limit":{"context":400000,"output":128000}},"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,"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}},"gpt-5.1":{"id":"gpt-5.1","name":"GPT-5.1","family":"gpt","attachment":true,"reasoning":true,"tool_call":true,"temperature":true,"knowledge":"2025-11","release_date":"2025-11-15","last_updated":"2025-11-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":1.25,"output":10,"cache_read":0.125},"limit":{"context":400000,"output":128000}},"claude-opus-4-6-think":{"id":"claude-opus-4-6-think","name":"Claude Opus 4.6 Think","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"]},"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":200000,"output":128000}},"claude-opus-4-5":{"id":"claude-opus-4-5","name":"Claude Opus 4.5","attachment":true,"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,"cache_read":0.5,"cache_write":6.25},"limit":{"context":200000,"output":32000}},"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,"cost":{"input":0.14,"output":0.41},"limit":{"context":128000,"output":32768}},"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}},"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}},"coding-glm-4.7-free":{"id":"coding-glm-4.7-free","name":"Coding GLM 4.7 Free","family":"glm","attachment":false,"reasoning":true,"tool_call":true,"interleaved":{"field":"reasoning_details"},"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}},"qwen3-coder-next":{"id":"qwen3-coder-next","name":"Qwen3 Coder Next","family":"qwen","attachment":false,"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"]},"open_weights":true,"cost":{"input":0.14,"output":0.55},"limit":{"context":262144,"input":262144,"output":65536}},"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,"release_date":"2025-08-01","last_updated":"2025-08-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.82,"output":3.29},"limit":{"context":262144,"output":131000}},"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"]},"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":200000,"output":128000}},"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-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}},"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,"cost":{"input":0.29,"output":1.15},"limit":{"context":204800,"output":131072}},"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.3,"output":0.45},"limit":{"context":131000,"output":64000}},"gpt-5-pro":{"id":"gpt-5-pro","name":"GPT-5-Pro","family":"gpt-pro","attachment":true,"reasoning":true,"tool_call":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":7,"output":28,"cache_read":3.5},"limit":{"context":400000,"output":128000}},"gpt-4o":{"id":"gpt-4o","name":"GPT-4o","family":"gpt","attachment":true,"reasoning":false,"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":2.5,"output":10,"cache_read":1.25},"limit":{"context":128000,"output":16384}},"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-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}},"gpt-5":{"id":"gpt-5","name":"GPT-5","family":"gpt","attachment":true,"reasoning":true,"tool_call":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":5,"output":20,"cache_read":2.5},"limit":{"context":400000,"output":128000}},"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}},"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,"cost":{"input":2,"output":8,"cache_read":0.5},"limit":{"context":1047576,"output":32768}},"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-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}},"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-11","release_date":"2025-11-15","last_updated":"2025-11-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}},"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-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}},"limit":{"context":200000,"output":64000}}}},"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":"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}},"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":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.6,"output":1.2},"limit":{"context":131000,"output":32000}},"zai-glm-4.7":{"id":"zai-glm-4.7","name":"Z.AI GLM-4.7","attachment":false,"reasoning":false,"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}},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"GPT OSS 120B","family":"gpt-oss","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.25,"output":0.69},"limit":{"context":131072,"output":32768}}}},"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","models":{"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,"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.2,"output":0.5,"cache_read":0.05},"limit":{"context":2000000,"output":128000}},"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,"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"limit":{"context":200000,"output":64000}},"kimi-k2.5":{"id":"kimi-k2.5","name":"Kimi-K2.5","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.6,"output":3,"cache_read":0.1},"limit":{"context":256000,"output":128000}},"gpt-5-4":{"id":"gpt-5-4","name":"GPT-5.4","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,"cost":{"input":2.5,"output":15,"cache_read":0.25},"limit":{"context":272000,"output":128000}},"deepseek-v3-2":{"id":"deepseek-v3-2","name":"DeepSeek v3.2","family":"deepseek","attachment":true,"reasoning":false,"tool_call":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}},"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":"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}},"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,"cost":{"input":0.5,"output":3,"cache_read":0.05},"limit":{"context":1048576,"output":65536}},"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.03},"limit":{"context":400000,"output":128000}},"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,"cost":{"input":0.05,"output":0.4,"cache_read":0.01},"limit":{"context":400000,"output":128000}},"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":"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}},"zai-glm-5-1":{"id":"zai-glm-5-1","name":"GLM-5","family":"glm","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2025-01-20","last_updated":"2025-02-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"limit":{"context":198000,"output":8192}},"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,"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}},"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-11","release_date":"2025-11-25","last_updated":"2025-11-25","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}},"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-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}},"grok-code-fast-1":{"id":"grok-code-fast-1","name":"Grok 4.1 Fast (Reasoning)","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":128000}},"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-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}},"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}},"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.07,"output":0.2},"limit":{"context":131072,"output":32768}},"qwen-3-6-plus":{"id":"qwen-3-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,"cost":{"input":0.5,"output":3,"cache_read":0.1},"limit":{"context":1000000,"output":64000}},"minimax-m2-5":{"id":"minimax-m2-5","name":"MiniMax-M2.5","family":"minimax","attachment":true,"reasoning":false,"tool_call":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}},"gpt-4o":{"id":"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"],"output":["text"]},"open_weights":false,"cost":{"input":2.5,"output":10,"cache_read":1.25},"limit":{"context":128000,"output":16384}},"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-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}},"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.15,"output":0.6},"limit":{"context":131072,"output":32768}},"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":"2026-01","release_date":"2026-02-18","last_updated":"2026-02-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}},"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"]},"open_weights":false,"cost":{"input":1.75,"output":14,"cache_read":0.175},"limit":{"context":400000,"output":128000}}}},"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,"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}},"qwen/qwen3-coder-30b":{"id":"qwen/qwen3-coder-30b","name":"Qwen3 Coder 30B","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,"output":0},"limit":{"context":262144,"output":65536}},"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-30","last_updated":"2025-07-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":262144,"output":16384}}}},"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,"cost":{"input":2,"output":5},"limit":{"context":120000,"output":8000}},"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}}}},"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-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}},"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}},"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-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}},"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,"cost":{"input":1.15,"output":8,"cache_read":0.15},"limit":{"context":262144,"output":262144}},"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-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}},"kimi-k2-0905-preview":{"id":"kimi-k2-0905-preview","name":"Kimi K2 0905","family":"kimi","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"]},"open_weights":true,"cost":{"input":0.6,"output":2.5,"cache_read":0.15},"limit":{"context":262144,"output":262144}}}},"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":{"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":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"}},"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-03-31","release_date":"2025-11-18","last_updated":"2025-11-18","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_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"}},"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.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.2,"output":1.25,"cache_read":0.02},"limit":{"context":400000,"input":272000,"output":128000}},"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":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"}},"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"]},"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":200000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"}},"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"]},"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"}},"mai-ds-r1":{"id":"mai-ds-r1","name":"MAI-DS-R1","family":"mai","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}},"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":"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.5,"cache_read":0.05},"limit":{"context":2000000,"output":30000}},"grok-3":{"id":"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,"cost":{"input":3,"output":15,"cache_read":0.75},"limit":{"context":131072,"output":8192}},"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}},"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"]},"open_weights":false,"cost":{"input":0.3,"output":0.9},"limit":{"context":256000,"output":256000}},"gpt-5.1-codex":{"id":"gpt-5.1-codex","name":"GPT-5.1 Codex","family":"gpt-codex","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}},"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"]},"open_weights":false,"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"limit":{"context":1047576,"output":32768}},"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,"cost":{"input":0.6,"output":2.5,"cache_read":0.15},"limit":{"context":262144,"output":262144}},"gpt-4.1":{"id":"gpt-4.1","name":"GPT-4.1","family":"gpt","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"]},"open_weights":false,"cost":{"input":2,"output":8,"cache_read":0.5},"limit":{"context":1047576,"output":32768}},"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,"cost":{"input":1.35,"output":5.4},"limit":{"context":163840,"output":163840}},"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":1.5,"output":2},"limit":{"context":4096,"output":4096}},"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,"cost":{"input":0.4,"output":2},"limit":{"context":128000,"output":128000}},"phi-4-reasoning-plus":{"id":"phi-4-reasoning-plus","name":"Phi-4-reasoning-plus","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}},"cohere-embed-v3-english":{"id":"cohere-embed-v3-english","name":"Embed v3 English","family":"cohere-embed","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-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"]},"open_weights":false,"cost":{"input":60,"output":120},"limit":{"context":32768,"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"]},"open_weights":false,"cost":{"input":1.25,"output":10,"cache_read":0.13},"limit":{"context":272000,"output":128000}},"phi-4":{"id":"phi-4","name":"Phi-4","family":"phi","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}},"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,"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}},"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}},"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,"cost":{"input":0.17,"output":0.68},"limit":{"context":128000,"output":4096}},"gpt-4o":{"id":"gpt-4o","name":"GPT-4o","family":"gpt","attachment":true,"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"]},"open_weights":false,"cost":{"input":2.5,"output":10,"cache_read":1.25},"limit":{"context":128000,"output":16384}},"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}},"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}},"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,"cache_read":0.5},"limit":{"context":200000,"output":100000}},"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"]},"open_weights":false,"cost":{"input":0.3,"output":0.5,"reasoning":0.5,"cache_read":0.075},"limit":{"context":131072,"output":8192}},"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"]},"open_weights":false,"cost":{"input":0.1,"output":0.4,"cache_read":0.03},"limit":{"context":1047576,"output":32768}},"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,"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}},"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"]},"open_weights":false,"cost":{"input":1.5,"output":2},"limit":{"context":4096,"output":4096}},"phi-4-mini":{"id":"phi-4-mini","name":"Phi-4-mini","family":"phi","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}},"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":2.5,"output":15,"cache_read":0.25},"limit":{"context":400000,"input":272000,"output":128000}},"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}},"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,"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}},"gpt-4":{"id":"gpt-4","name":"GPT-4","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"]},"open_weights":false,"cost":{"input":60,"output":120},"limit":{"context":8192,"output":8192}},"phi-4-mini-reasoning":{"id":"phi-4-mini-reasoning","name":"Phi-4-mini-reasoning","family":"phi","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"]},"open_weights":true,"cost":{"input":0.075,"output":0.3},"limit":{"context":128000,"output":4096}},"grok-4":{"id":"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,"cost":{"input":3,"output":15,"reasoning":15,"cache_read":0.75},"limit":{"context":256000,"output":64000}},"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":"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}},"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,"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}},"deepseek-v3.1":{"id":"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":true,"cost":{"input":0.56,"output":1.68},"limit":{"context":131072,"output":131072}},"text-embedding-3-small":{"id":"text-embedding-3-small","name":"text-embedding-3-small","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.02,"output":0},"limit":{"context":8191,"output":1536}},"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-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,"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":1,"output":2},"limit":{"context":16384,"output":16384}},"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}},"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":30,"output":180},"limit":{"context":400000,"input":272000,"output":128000}},"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}},"o1":{"id":"o1","name":"o1","family":"o","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}},"grok-4-fast-reasoning":{"id":"grok-4-fast-reasoning","name":"Grok 4 Fast (Reasoning)","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.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":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":272000,"output":128000}},"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}},"cohere-embed-v3-multilingual":{"id":"cohere-embed-v3-multilingual","name":"Embed v3 Multilingual","family":"cohere-embed","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}},"o1-preview":{"id":"o1-preview","name":"o1-preview","family":"o","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-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,"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.5,"output":1.5},"limit":{"context":16384,"output":16384}},"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":"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}},"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}},"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}},"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":1.1,"output":4.4,"cache_read":0.28},"limit":{"context":200000,"output":100000}},"gpt-4-turbo-vision":{"id":"gpt-4-turbo-vision","name":"GPT-4 Turbo Vision","family":"gpt","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"]},"open_weights":false,"cost":{"input":10,"output":30},"limit":{"context":128000,"output":4096}},"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":"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}},"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,"cost":{"input":5.33,"output":16},"limit":{"context":128000,"output":32768}},"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,"cost":{"input":0.37,"output":0.37},"limit":{"context":128000,"output":8192}},"cohere-command-a":{"id":"cohere-command-a","name":"Command A","family":"command-a","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}},"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,"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}},"gpt-4o-mini":{"id":"gpt-4o-mini","name":"GPT-4o mini","family":"gpt-mini","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"]},"open_weights":false,"cost":{"input":0.15,"output":0.6,"cache_read":0.08},"limit":{"context":128000,"output":16384}},"mistral-large-2411":{"id":"mistral-large-2411","name":"Mistral Large 24.11","family":"mistral-large","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"]},"open_weights":false,"cost":{"input":2,"output":6},"limit":{"context":128000,"output":32768}},"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}},"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,"cost":{"input":0.58,"output":1.68},"limit":{"context":128000,"output":128000}},"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,"cost":{"input":1.35,"output":5.4},"limit":{"context":163840,"output":163840}},"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":"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}},"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}},"gpt-4-turbo":{"id":"gpt-4-turbo","name":"GPT-4 Turbo","family":"gpt","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"]},"open_weights":false,"cost":{"input":10,"output":30},"limit":{"context":128000,"output":4096}},"gpt-5.3-codex":{"id":"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"]},"open_weights":false,"cost":{"input":1.75,"output":14,"cache_read":0.175},"limit":{"context":400000,"output":128000}},"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"]},"open_weights":true,"cost":{"input":0.15,"output":0.6},"limit":{"context":8192,"output":2048}},"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"]},"open_weights":true,"cost":{"input":2.68,"output":3.54},"limit":{"context":8192,"output":2048}},"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.05,"output":0.4,"cache_read":0.01},"limit":{"context":272000,"output":128000}},"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.25,"output":2,"cache_read":0.03},"limit":{"context":272000,"output":128000}},"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}},"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}},"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.13,"output":0},"limit":{"context":8191,"output":3072}},"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}},"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":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}},"gpt-5-chat":{"id":"gpt-5-chat","name":"GPT-5 Chat","family":"gpt-codex","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}},"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,"cost":{"input":1.14,"output":4.56},"limit":{"context":131072,"output":131072}},"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":"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}},"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"}},"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":"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}},"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}},"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":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":4096,"output":1024}},"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,"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.78},"limit":{"context":128000,"output":8192}},"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":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}},"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"]},"open_weights":true,"cost":{"input":0.08,"output":0.32,"input_audio":4},"limit":{"context":128000,"output":4096}},"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":1.5,"output":6,"cache_read":0.375},"limit":{"context":200000,"output":100000}},"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"]},"open_weights":false,"cost":{"input":1.75,"output":14,"cache_read":0.175},"limit":{"context":128000,"output":16384}},"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,"cost":{"input":0.15,"output":0.15},"limit":{"context":128000,"output":128000}}}},"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,"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}},"command-r7b-12-2024":{"id":"command-r7b-12-2024","name":"Command R7B","family":"command-r","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"]},"open_weights":true,"cost":{"input":0.0375,"output":0.15},"limit":{"context":128000,"output":4000}},"c4ai-aya-vision-8b":{"id":"c4ai-aya-vision-8b","name":"Aya Vision 8B","attachment":true,"reasoning":false,"tool_call":false,"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}},"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":"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}},"c4ai-aya-expanse-8b":{"id":"c4ai-aya-expanse-8b","name":"Aya Expanse 8B","attachment":false,"reasoning":false,"tool_call":false,"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}},"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,"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}},"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,"temperature":true,"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":2.5,"output":10},"limit":{"context":128000,"output":8000}},"c4ai-aya-vision-32b":{"id":"c4ai-aya-vision-32b","name":"Aya Vision 32B","attachment":true,"reasoning":false,"tool_call":false,"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}},"command-a-translate-08-2025":{"id":"command-a-translate-08-2025","name":"Command A Translate","family":"command-a","attachment":false,"reasoning":false,"tool_call":true,"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}},"command-r-08-2024":{"id":"command-r-08-2024","name":"Command R","family":"command-r","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}},"c4ai-aya-expanse-32b":{"id":"c4ai-aya-expanse-32b","name":"Aya Expanse 32B","attachment":false,"reasoning":false,"tool_call":false,"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}},"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":"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}}}},"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,"temperature":true,"knowledge":"2024-10-09","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":2.92,"output":2.92},"limit":{"context":70000,"output":70000}},"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-28","last_updated":"2025-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":2.92,"output":2.92},"limit":{"context":131000,"output":131000}},"speakleash/Bielik-11B-v3.0-Instruct":{"id":"speakleash/Bielik-11B-v3.0-Instruct","name":"Bielik 11B v3.0 Instruct","attachment":false,"reasoning":false,"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"]},"open_weights":true,"cost":{"input":0.67,"output":0.67},"limit":{"context":32000,"output":32000}},"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,"knowledge":"2025-03","release_date":"2025-03-13","last_updated":"2025-03-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.67,"output":0.67},"limit":{"context":32000,"output":32000}},"MiniMaxAI/MiniMax-M2.5":{"id":"MiniMaxAI/MiniMax-M2.5","name":"MiniMax-M2.5","family":"minimax","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"]},"open_weights":true,"cost":{"input":0.3,"output":1.2},"limit":{"context":196000,"output":196000}}}},"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,"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}}}},"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,"temperature":true,"knowledge":"2024-08","release_date":"2024-12-12","last_updated":"2024-12-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":2,"output":10,"cache_read":2},"limit":{"context":131072,"output":8192}},"grok-vision-beta":{"id":"grok-vision-beta","name":"Grok Vision Beta","family":"grok-vision","attachment":true,"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"]},"open_weights":false,"cost":{"input":5,"output":15,"cache_read":5},"limit":{"context":8192,"output":4096}},"grok-3-mini-fast":{"id":"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,"cost":{"input":0.6,"output":4,"reasoning":4,"cache_read":0.15},"limit":{"context":131072,"output":8192}},"grok-3-mini-latest":{"id":"grok-3-mini-latest","name":"Grok 3 Mini Latest","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,"cost":{"input":0.3,"output":0.5,"reasoning":0.5,"cache_read":0.075},"limit":{"context":131072,"output":8192}},"grok-3-fast":{"id":"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,"cost":{"input":5,"output":25,"cache_read":1.25},"limit":{"context":131072,"output":8192}},"grok-2-vision-latest":{"id":"grok-2-vision-latest","name":"Grok 2 Vision Latest","family":"grok","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"]},"open_weights":false,"cost":{"input":2,"output":10,"cache_read":2},"limit":{"context":8192,"output":4096}},"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":"2026-03-09","last_updated":"2026-03-09","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,"cache_read":0.4}},"limit":{"context":2000000,"output":30000}},"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,"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"limit":{"context":2000000,"output":30000}},"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,"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}},"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.2,"output":0.5,"cache_read":0.05},"limit":{"context":2000000,"output":30000}},"grok-3-latest":{"id":"grok-3-latest","name":"Grok 3 Latest","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,"cost":{"input":3,"output":15,"cache_read":0.75},"limit":{"context":131072,"output":8192}},"grok-2":{"id":"grok-2","name":"Grok 2","family":"grok","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"]},"open_weights":false,"cost":{"input":2,"output":10,"cache_read":2},"limit":{"context":131072,"output":8192}},"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}},"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":"2026-03-09","last_updated":"2026-03-09","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,"cache_read":0.4}},"limit":{"context":2000000,"output":30000}},"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,"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}},"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,"release_date":"2026-03-09","last_updated":"2026-03-09","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,"cache_read":0.4}},"limit":{"context":2000000,"output":30000}},"grok-4":{"id":"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,"cost":{"input":3,"output":15,"reasoning":15,"cache_read":0.75},"limit":{"context":256000,"output":64000}},"grok-2-latest":{"id":"grok-2-latest","name":"Grok 2 Latest","family":"grok","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"]},"open_weights":false,"cost":{"input":2,"output":10,"cache_read":2},"limit":{"context":131072,"output":8192}},"grok-beta":{"id":"grok-beta","name":"Grok Beta","family":"grok-beta","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"]},"open_weights":false,"cost":{"input":5,"output":15,"cache_read":5},"limit":{"context":131072,"output":4096}},"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"]},"open_weights":false,"cost":{"input":2,"output":10,"cache_read":2},"limit":{"context":8192,"output":4096}},"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.2,"output":0.5,"cache_read":0.05},"limit":{"context":2000000,"output":30000}},"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"]},"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-1212":{"id":"grok-2-vision-1212","name":"Grok 2 Vision (1212)","family":"grok","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"]},"open_weights":false,"cost":{"input":2,"output":10,"cache_read":2},"limit":{"context":8192,"output":4096}},"grok-3":{"id":"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,"cost":{"input":3,"output":15,"cache_read":0.75},"limit":{"context":131072,"output":8192}},"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":"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.5,"cache_read":0.05},"limit":{"context":2000000,"output":30000}}}},"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,"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}},"Qwen/Qwen3.5-Plus":{"id":"Qwen/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","last_updated":"2026-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"cost":{"input":0.4,"output":2.4,"reasoning":2.4},"limit":{"context":1000000,"output":65536}},"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,"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}},"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}},"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,"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}},"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":"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}},"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":"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}},"mistralai/Mistral-Nemo-Instruct-2407":{"id":"mistralai/Mistral-Nemo-Instruct-2407","name":"Mistral Nemo Instruct 2407","family":"mistral","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"]},"open_weights":true,"cost":{"input":0.02,"output":0.04},"limit":{"context":131072,"output":65536}},"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":"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}},"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,"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}},"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":"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}},"deepseek-ai/DeepSeek-V3-0324":{"id":"deepseek-ai/DeepSeek-V3-0324","name":"DeepSeek V3 0324","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"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}},"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,"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-R1-0528":{"id":"deepseek-ai/DeepSeek-R1-0528","name":"DeepSeek R1 0528","family":"deepseek-thinking","attachment":false,"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":true,"cost":{"input":0.5,"output":2.15},"limit":{"context":163840,"output":64000}},"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":"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}},"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":"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}},"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":"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}},"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}},"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,"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}}}},"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":1,"output":5,"cache_read":0.1,"cache_write":1.25},"limit":{"context":200000,"output":64000}},"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","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}},"limit":{"context":200000,"output":64000}},"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-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}},"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,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":8192}},"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,"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"limit":{"context":200000,"output":32000}},"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":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":64000}},"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":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":64000}},"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"]},"open_weights":false,"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"limit":{"context":200000,"output":32000}},"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-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}},"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,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":64000}},"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":"2025-05","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}},"limit":{"context":1000000,"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":{"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-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}},"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}},"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/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}},"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}},"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}},"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}},"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}},"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}},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","family":"gpt-oss","attachment":false,"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}},"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,"cost":{"input":1.47,"output":5.9},"limit":{"context":262144,"output":262144}},"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}}}},"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: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,"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}},"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,"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}},"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,"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}},"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,"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}},"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,"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}},"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":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}},"hf:MiniMaxAI/MiniMax-M2":{"id":"hf:MiniMaxAI/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,"cost":{"input":0.55,"output":2.19},"limit":{"context":196608,"output":131000}},"hf:MiniMaxAI/MiniMax-M2.5":{"id":"hf: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-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}},"hf:MiniMaxAI/MiniMax-M2.1":{"id":"hf:MiniMaxAI/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,"cost":{"input":0.55,"output":2.19},"limit":{"context":204800,"output":131072}},"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,"temperature":true,"release_date":"2026-02-11","last_updated":"2026-02-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.6,"output":3,"cache_read":0.6},"limit":{"context":262144,"output":65536},"status":"beta"},"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,"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-Instruct-2507":{"id":"hf:Qwen/Qwen3-235B-A22B-Instruct-2507","name":"Qwen 3 235B Instruct","family":"qwen","attachment":false,"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}},"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}},"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":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}},"hf:deepseek-ai/DeepSeek-V3.1":{"id":"hf:deepseek-ai/DeepSeek-V3.1","name":"DeepSeek V3.1","family":"deepseek","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.56,"output":1.68},"limit":{"context":128000,"output":128000}},"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":true,"temperature":true,"release_date":"2025-08-01","last_updated":"2025-08-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":1.2,"output":1.2},"limit":{"context":128000,"output":128000}},"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:deepseek-ai/DeepSeek-R1":{"id":"hf:deepseek-ai/DeepSeek-R1","name":"DeepSeek R1","family":"deepseek-thinking","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":true,"cost":{"input":0.55,"output":2.19},"limit":{"context":128000,"output":128000}},"hf:deepseek-ai/DeepSeek-R1-0528":{"id":"hf:deepseek-ai/DeepSeek-R1-0528","name":"DeepSeek R1 (0528)","family":"deepseek-thinking","attachment":false,"reasoning":true,"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":3,"output":8},"limit":{"context":128000,"output":128000}},"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.1-Terminus":{"id":"hf:deepseek-ai/DeepSeek-V3.1-Terminus","name":"DeepSeek V3.1 Terminus","family":"deepseek","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2025-09-22","last_updated":"2025-09-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":1.2,"output":1.2},"limit":{"context":128000,"output":128000}},"hf:openai/gpt-oss-120b":{"id":"hf:openai/gpt-oss-120b","name":"GPT OSS 120B","family":"gpt-oss","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.1,"output":0.1},"limit":{"context":128000,"output":32768}},"hf:moonshotai/Kimi-K2-Thinking":{"id":"hf:moonshotai/Kimi-K2-Thinking","name":"Kimi K2 Thinking","family":"kimi-thinking","attachment":false,"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,"cost":{"input":0.55,"output":2.19},"limit":{"context":262144,"output":262144}},"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":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}},"hf:moonshotai/Kimi-K2.5":{"id":"hf:moonshotai/Kimi-K2.5","name":"Kimi K2.5","family":"kimi","attachment":false,"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}},"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":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,"cost":{"input":0.3,"output":1,"cache_read":0.3},"limit":{"context":262144,"output":65536}},"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":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}},"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":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}},"hf:zai-org/GLM-4.7":{"id":"hf: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.55,"output":2.19},"limit":{"context":200000,"output":64000}},"hf:zai-org/GLM-5":{"id":"hf: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-04-08","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":1,"output":3,"cache_read":1},"limit":{"context":196608,"output":65536}},"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":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}}}},"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":{"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,"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,"output":0},"limit":{"context":4096,"output":0}},"stepfun-ai/step-3.5-flash":{"id":"stepfun-ai/step-3.5-flash","name":"Step 3.5 Flash","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"release_date":"2026-02-02","last_updated":"2026-02-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":256000,"output":16384}},"mistralai/codestral-22b-instruct-v0.1":{"id":"mistralai/codestral-22b-instruct-v0.1","name":"Codestral 22b Instruct V0.1","attachment":false,"reasoning":false,"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-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":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}},"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,"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}},"mistralai/ministral-14b-instruct-2512":{"id":"mistralai/ministral-14b-instruct-2512","name":"Ministral 3 14B Instruct 2512","family":"ministral","attachment":true,"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/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,"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}},"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}},"mistralai/mistral-large-2-instruct":{"id":"mistralai/mistral-large-2-instruct","name":"Mistral Large 2 Instruct","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}},"microsoft/phi-3-medium-4k-instruct":{"id":"microsoft/phi-3-medium-4k-instruct","name":"Phi 3 Medium 4k 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"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":4000,"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,"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}},"microsoft/phi-4-mini-instruct":{"id":"microsoft/phi-4-mini-instruct","name":"Phi-4-Mini","family":"phi","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"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":131072,"output":8192}},"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"]},"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","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}},"microsoft/phi-3.5-vision-instruct":{"id":"microsoft/phi-3.5-vision-instruct","name":"Phi 3.5 Vision Instruct","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2024-08-16","last_updated":"2024-08-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"microsoft/phi-3-small-128k-instruct":{"id":"microsoft/phi-3-small-128k-instruct","name":"Phi 3 Small 128k 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"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"microsoft/phi-3-medium-128k-instruct":{"id":"microsoft/phi-3-medium-128k-instruct","name":"Phi 3 Medium 128k 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"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"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,"temperature":true,"release_date":"2025-03-16","last_updated":"2025-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"nvidia/nemotron-4-340b-instruct":{"id":"nvidia/nemotron-4-340b-instruct","name":"Nemotron 4 340b Instruct","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2024-06-13","last_updated":"2024-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"nvidia/llama3-chatqa-1.5-70b":{"id":"nvidia/llama3-chatqa-1.5-70b","name":"Llama3 Chatqa 1.5 70b","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2024-04-28","last_updated":"2024-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"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,"temperature":true,"release_date":"2025-03-16","last_updated":"2025-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"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":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}},"nvidia/parakeet-tdt-0.6b-v2":{"id":"nvidia/parakeet-tdt-0.6b-v2","name":"Parakeet TDT 0.6B v2","family":"parakeet","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"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":0,"output":4096}},"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,"cost":{"input":0,"output":0},"limit":{"context":131072,"output":131072}},"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","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}},"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,"cost":{"input":0,"output":0},"limit":{"context":131072,"output":131072}},"nvidia/cosmos-nemotron-34b":{"id":"nvidia/cosmos-nemotron-34b","name":"Cosmos Nemotron 34B","family":"nemotron","attachment":false,"reasoning":true,"tool_call":false,"temperature":true,"knowledge":"2024-01","release_date":"2024-01-01","last_updated":"2025-09-05","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":131072,"output":8192}},"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"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":32768,"output":2048}},"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,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2024-09-22","last_updated":"2024-09-22","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"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,"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":0,"output":0},"limit":{"context":128000,"output":4096}},"nvidia/nemoretriever-ocr-v1":{"id":"nvidia/nemoretriever-ocr-v1","name":"NeMo Retriever OCR v1","family":"nemoretriever","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2024-01","release_date":"2024-01-01","last_updated":"2025-09-05","modalities":{"input":["image"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":0,"output":4096}},"deepseek-ai/deepseek-r1":{"id":"deepseek-ai/deepseek-r1","name":"Deepseek R1","attachment":false,"reasoning":true,"tool_call":false,"structured_output":false,"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}},"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":"2024-07","release_date":"2025-08-20","last_updated":"2025-08-26","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":8192}},"deepseek-ai/deepseek-coder-6.7b-instruct":{"id":"deepseek-ai/deepseek-coder-6.7b-instruct","name":"Deepseek Coder 6.7b Instruct","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}},"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":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":163840,"output":65536}},"deepseek-ai/deepseek-r1-0528":{"id":"deepseek-ai/deepseek-r1-0528","name":"Deepseek R1 0528","attachment":false,"reasoning":true,"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}},"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-01","release_date":"2025-09-22","last_updated":"2025-09-22","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}},"openai/gpt-oss-120b":{"id":"openai/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}},"minimaxai/minimax-m2.1":{"id":"minimaxai/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":0,"output":0},"limit":{"context":204800,"output":131072}},"minimaxai/minimax-m2.5":{"id":"minimaxai/minimax-m2.5","name":"MiniMax-M2.5","family":"minimax","attachment":false,"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,"cost":{"input":0,"output":0},"limit":{"context":204800,"output":131072}},"z-ai/glm4.7":{"id":"z-ai/glm4.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,"output":0},"limit":{"context":204800,"output":131072}},"z-ai/glm5":{"id":"z-ai/glm5","name":"GLM5","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":0,"output":0},"limit":{"context":202752,"output":131000}},"meta/llama-4-scout-17b-16e-instruct":{"id":"meta/llama-4-scout-17b-16e-instruct","name":"Llama 4 Scout 17b 16e Instruct","attachment":true,"reasoning":false,"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}},"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":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}},"meta/llama3-8b-instruct":{"id":"meta/llama3-8b-instruct","name":"Llama3 8b Instruct","attachment":false,"reasoning":false,"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}},"meta/llama3-70b-instruct":{"id":"meta/llama3-70b-instruct","name":"Llama3 70b Instruct","attachment":false,"reasoning":false,"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}},"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}},"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":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}},"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":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}},"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,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"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":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}},"meta/llama-3.1-405b-instruct":{"id":"meta/llama-3.1-405b-instruct","name":"Llama 3.1 405b Instruct","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}},"qwen/qwen3-235b-a22b":{"id":"qwen/qwen3-235b-a22b","name":"Qwen3-235B-A22B","family":"qwen","attachment":false,"reasoning":true,"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":0,"output":0},"limit":{"context":131072,"output":8192}},"qwen/qwen2.5-coder-7b-instruct":{"id":"qwen/qwen2.5-coder-7b-instruct","name":"Qwen2.5 Coder 7b Instruct","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}},"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,"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}},"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,"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}},"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,"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}},"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}},"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":"2024-12","release_date":"2024-12-01","last_updated":"2025-09-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":262144,"output":16384}},"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,"knowledge":"2025-04","release_date":"2025-07-23","last_updated":"2025-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":262144,"output":66536}},"google/gemma-2-2b-it":{"id":"google/gemma-2-2b-it","name":"Gemma 2 2b It","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}},"google/gemma-3n-e4b-it":{"id":"google/gemma-3n-e4b-it","name":"Gemma 3n E4b It","attachment":true,"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}},"google/gemma-3-1b-it":{"id":"google/gemma-3-1b-it","name":"Gemma 3 1b It","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-03-10","last_updated":"2025-03-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"google/codegemma-7b":{"id":"google/codegemma-7b","name":"Codegemma 7b","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"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}},"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,"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,"output":0},"limit":{"context":256000,"output":16384}},"google/gemma-3-12b-it":{"id":"google/gemma-3-12b-it","name":"Gemma 3 12b It","attachment":false,"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}},"google/codegemma-1.1-7b":{"id":"google/codegemma-1.1-7b","name":"Codegemma 1.1 7b","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"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}},"google/gemma-3n-e2b-it":{"id":"google/gemma-3n-e2b-it","name":"Gemma 3n E2b It","attachment":true,"reasoning":false,"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,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"google/gemma-2-27b-it":{"id":"google/gemma-2-27b-it","name":"Gemma 2 27b It","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}},"google/gemma-3-27b-it":{"id":"google/gemma-3-27b-it","name":"Gemma-3-27B-IT","family":"gemma","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"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":131072,"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"},"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":{"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"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":8192}},"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,"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-thinking":{"id":"moonshotai/kimi-k2-thinking","name":"Kimi K2 Thinking","family":"kimi-thinking","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}}}},"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,"cost":{"input":0.038,"output":0.1},"limit":{"context":16000,"output":4096}},"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":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}},"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":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}},"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":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}},"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":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}},"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}},"qwen/qwen3-embedding-4b":{"id":"qwen/qwen3-embedding-4b","name":"Qwen 3 Embedding 4B","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":2048}},"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,"cost":{"input":0.15,"output":0.3},"limit":{"context":125000,"output":4096}},"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}}}},"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":{"id":"mercury-edit","name":"Mercury Edit","attachment":false,"reasoning":true,"tool_call":false,"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":8192}},"mercury-2":{"id":"mercury-2","name":"Mercury 2","family":"mercury","attachment":false,"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"]},"open_weights":false,"cost":{"input":0.25,"output":0.75,"cache_read":0.025},"limit":{"context":128000,"output":50000}},"mercury":{"id":"mercury","name":"Mercury","family":"mercury","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-10","release_date":"2025-06-26","last_updated":"2025-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.25,"output":1,"cache_read":0.25,"cache_write":1},"limit":{"context":128000,"output":16384}},"mercury-coder":{"id":"mercury-coder","name":"Mercury Coder","family":"mercury","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-10","release_date":"2025-02-26","last_updated":"2025-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.25,"output":1,"cache_read":0.25,"cache_write":1},"limit":{"context":128000,"output":16384}}}},"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":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,"input":272000,"output":128000}},"gpt-4o-2024-05-13":{"id":"gpt-4o-2024-05-13","name":"GPT-4o (2024-05-13)","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-05-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":5,"output":15},"limit":{"context":128000,"output":4096}},"o1-mini":{"id":"o1-mini","name":"o1-mini","family":"o-mini","attachment":false,"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"]},"open_weights":false,"cost":{"input":1.1,"output":4.4,"cache_read":0.55},"limit":{"context":128000,"output":65536}},"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,"cost":{"input":21,"output":168},"limit":{"context":400000,"input":272000,"output":128000}},"text-embedding-3-large":{"id":"text-embedding-3-large","name":"text-embedding-3-large","family":"text-embedding","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"]},"open_weights":false,"cost":{"input":0.13,"output":0},"limit":{"context":8191,"output":3072}},"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,"cost":{"input":1.75,"output":14,"cache_read":0.175},"limit":{"context":128000,"output":16384}},"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,"input":272000,"output":128000}},"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,"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"limit":{"context":400000,"input":272000,"output":128000}},"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,"cost":{"input":1.75,"output":14,"cache_read":0.175},"limit":{"context":400000,"input":272000,"output":128000}},"gpt-4-turbo":{"id":"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,"cost":{"input":10,"output":30},"limit":{"context":128000,"output":4096}},"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"]},"open_weights":false,"cost":{"input":0.1,"output":0},"limit":{"context":8192,"output":1536}},"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.175},"limit":{"context":400000,"input":272000,"output":128000}},"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":20,"output":80},"limit":{"context":200000,"output":100000}},"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,"cost":{"input":0.15,"output":0.6,"cache_read":0.08},"limit":{"context":128000,"output":16384}},"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":2,"output":8,"cache_read":0.5},"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"],"output":["text"]},"open_weights":false,"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"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"}}}}}},"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":1.1,"output":4.4,"cache_read":0.28},"limit":{"context":200000,"output":100000}},"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.2,"output":1.25,"cache_read":0.02},"limit":{"context":400000,"input":272000,"output":128000}},"gpt-image-1":{"id":"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,"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,"cost":{"input":1.75,"output":14,"cache_read":0.175},"limit":{"context":400000,"input":272000,"output":128000}},"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.75,"output":14,"cache_read":0.175},"limit":{"context":128000,"output":16384}},"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.25,"output":2,"cache_read":0.025},"limit":{"context":400000,"input":272000,"output":128000}},"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"]},"open_weights":false,"cost":{"input":15,"output":60,"cache_read":7.5},"limit":{"context":128000,"output":32768}},"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":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":2.5,"output":10,"cache_read":1.25},"limit":{"context":128000,"output":16384}},"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":"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":400000,"input":272000,"output":128000}},"gpt-image-1-mini":{"id":"gpt-image-1-mini","name":"gpt-image-1-mini","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-09-26","last_updated":"2025-09-26","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":0,"input":0,"output":0}},"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":15,"output":60,"cache_read":7.5},"limit":{"context":200000,"output":100000}},"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":30,"output":180,"context_over_200k":{"input":60,"output":270}},"limit":{"context":1050000,"input":922000,"output":128000}},"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,"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}},"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,"cost":{"input":10,"output":40,"cache_read":2.5},"limit":{"context":200000,"output":100000}},"o3-mini":{"id":"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,"cost":{"input":1.1,"output":4.4,"cache_read":0.55},"limit":{"context":200000,"output":100000}},"text-embedding-3-small":{"id":"text-embedding-3-small","name":"text-embedding-3-small","family":"text-embedding","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"]},"open_weights":false,"cost":{"input":0.02,"output":0},"limit":{"context":8191,"output":1536}},"o1-pro":{"id":"o1-pro","name":"o1-pro","family":"o-pro","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"]},"open_weights":false,"cost":{"input":150,"output":600},"limit":{"context":200000,"output":100000}},"codex-mini-latest":{"id":"codex-mini-latest","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":1.5,"output":6,"cache_read":0.375},"limit":{"context":200000,"output":100000}},"gpt-4":{"id":"gpt-4","name":"GPT-4","family":"gpt","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"]},"open_weights":false,"cost":{"input":30,"output":60},"limit":{"context":8192,"output":8192}},"gpt-5-codex":{"id":"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,"cost":{"input":1.25,"output":10,"cache_read":0.125},"limit":{"context":400000,"input":272000,"output":128000}},"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":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},"experimental":{"modes":{"fast":{"cost":{"input":5,"output":30,"cache_read":0.5},"provider":{"body":{"service_tier":"priority"}}}}}},"gpt-5.1-chat-latest":{"id":"gpt-5.1-chat-latest","name":"GPT-5.1 Chat","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":1.25,"output":10,"cache_read":0.125},"limit":{"context":128000,"output":16384}},"gpt-5.3-codex-spark":{"id":"gpt-5.3-codex-spark","name":"GPT-5.3 Codex Spark","family":"gpt-codex-spark","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,"cost":{"input":1.75,"output":14,"cache_read":0.175},"limit":{"context":128000,"input":100000,"output":32000}},"chatgpt-image-latest":{"id":"chatgpt-image-latest","name":"chatgpt-image-latest","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-12-16","last_updated":"2025-12-16","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":0,"input":0,"output":0}},"gpt-4.1-nano":{"id":"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,"cost":{"input":0.1,"output":0.4,"cache_read":0.03},"limit":{"context":1047576,"output":32768}},"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":2,"output":8,"cache_read":0.5},"limit":{"context":200000,"output":100000}},"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,"input":272000,"output":272000}},"gpt-4o":{"id":"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,"cost":{"input":2.5,"output":10,"cache_read":1.25},"limit":{"context":128000,"output":16384}},"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.25,"output":10,"cache_read":0.125},"limit":{"context":400000,"input":272000,"output":128000}},"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":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":1.25,"output":10},"limit":{"context":400000,"input":272000,"output":128000}},"gpt-image-1.5":{"id":"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":["text","image"]},"open_weights":false,"limit":{"context":0,"input":0,"output":0}},"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-04","release_date":"2025-04-14","last_updated":"2025-04-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}},"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":"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.4,"output":1.6,"cache_read":0.1},"limit":{"context":1047576,"output":32768}},"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"],"output":["text"]},"open_weights":false,"cost":{"input":1.25,"output":10,"cache_read":0.125},"limit":{"context":400000,"input":272000,"output":128000}},"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,"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":2.5,"output":10,"cache_read":1.25},"limit":{"context":128000,"output":16384}}}},"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,"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}},"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":3,"output":15,"cache_read":0.75,"cache_write":3},"limit":{"context":256000,"output":64000}},"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":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-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-chat":{"id":"openai/gpt-5-chat","name":"GPT-5 Chat (latest)","family":"gpt-codex","attachment":true,"reasoning":true,"tool_call":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"]},"open_weights":false,"cost":{"input":1.25,"output":10},"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}},"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.25,"output":2,"cache_read":0.03},"limit":{"context":128000,"output":32000}},"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.05,"output":0.4,"cache_read":0.01},"limit":{"context":16000,"output":4000}},"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-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,"output":128000}},"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-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"]},"open_weights":false,"cost":{"input":0.15,"output":0.6,"cache_read":0.08},"limit":{"context":128000,"output":16384}},"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":"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":128000,"output":16384}},"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":1.1,"output":4.4,"cache_read":0.28},"limit":{"context":200000,"output":100000}},"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}},"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.25,"output":2,"cache_read":0.025},"limit":{"context":400000,"output":100000}},"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":5,"output":10,"cache_read":1.25},"limit":{"context":400000,"output":128000}},"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":"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.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,"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":30,"output":180,"cache_read":30},"limit":{"context":1050000,"input":922000,"output":128000}},"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":"2024-10-01","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,"output":128000}},"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,"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}},"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,"cost":{"input":15,"output":120},"limit":{"context":400000,"output":272000}},"openai/gpt-5":{"id":"openai/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","audio","image","video"],"output":["text","audio","image"]},"open_weights":false,"cost":{"input":1.25,"output":10,"cache_read":0.13},"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"]},"open_weights":false,"cost":{"input":2,"output":8,"cache_read":0.5},"limit":{"context":1047576,"output":32768}},"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.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,"cost":{"input":1.25,"output":10,"cache_read":0.125},"limit":{"context":400000,"output":128000}},"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,"cost":{"input":0.5,"output":3,"cache_read":0.05,"cache_write":1},"limit":{"context":1048576,"output":65536}},"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,"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":4.5},"limit":{"context":1048576,"output":65536}},"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-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":1.25,"output":10,"cache_read":0.31,"cache_write":2.375},"limit":{"context":1048576,"output":65536}},"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}},"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,"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"limit":{"context":200000,"output":62000}},"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":"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}},"limit":{"context":1000000,"output":128000}},"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,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":64000}},"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}},"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,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":64000}},"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":5,"output":25,"cache_read":0.5,"cache_write":6.25},"limit":{"context":200000,"output":64000}},"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,"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"limit":{"context":200000,"output":32000}},"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-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}},"limit":{"context":1000000,"output":128000}},"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,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":1000000,"output":64000}}}},"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,"cost":{"input":0.3,"output":1.2},"limit":{"context":194000,"output":4096}},"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,"cost":{"input":0.85,"output":3.1},"limit":{"context":200000,"output":131072}},"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,"cost":{"input":0.55,"output":1.65},"limit":{"context":127000,"output":4096}},"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,"cost":{"input":0.15,"output":0.6},"limit":{"context":129000,"output":4096}},"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,"cost":{"input":0.55,"output":2.75},"limit":{"context":254000,"output":32768}}}},"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,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":1000000,"output":65536}},"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,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":262144,"output":32768}},"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,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":202752,"output":16384}},"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}},"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":196608,"output":24576}},"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,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":1000000,"output":65536}},"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}},"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,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":262144,"output":65536}},"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,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":1000000,"output":65536}}}},"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,"cost":{"input":0.15,"output":0.6},"limit":{"context":256000,"output":256000}},"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}},"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}},"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,"cost":{"input":0,"output":0},"limit":{"context":256000,"output":256000}},"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,"cost":{"input":0.4,"output":2},"limit":{"context":262144,"output":262144}},"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,"cost":{"input":2,"output":5},"limit":{"context":128000,"output":16384}},"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,"cost":{"input":0.7,"output":0.7},"limit":{"context":32000,"output":32000}},"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-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,"cost":{"input":2,"output":6},"limit":{"context":131072,"output":16384}},"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,"cost":{"input":0.3,"output":0.9},"limit":{"context":256000,"output":4096}},"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,"cost":{"input":0.5,"output":1.5},"limit":{"context":262144,"output":262144}},"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,"cost":{"input":0.1,"output":0.3},"limit":{"context":128000,"output":16384}},"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,"cost":{"input":0.15,"output":0.15},"limit":{"context":128000,"output":128000}},"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,"cost":{"input":0.1,"output":0.1},"limit":{"context":128000,"output":128000}},"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,"cost":{"input":0.1,"output":0},"limit":{"context":8000,"output":3072}},"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,"cost":{"input":0.5,"output":1.5},"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"]},"open_weights":true,"cost":{"input":0.15,"output":0.6},"limit":{"context":256000,"output":256000}},"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,"cost":{"input":0.04,"output":0.04},"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}},"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}},"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,"cost":{"input":0.4,"output":2},"limit":{"context":128000,"output":128000}},"mistral-medium-latest":{"id":"mistral-medium-latest","name":"Mistral Medium (latest)","family":"mistral-medium","attachment":false,"reasoning":false,"tool_call":true,"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}},"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,"cost":{"input":0.25,"output":0.25},"limit":{"context":8000,"output":8000}},"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,"cost":{"input":0.4,"output":2},"limit":{"context":262144,"output":262144}},"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,"cost":{"input":0.4,"output":2},"limit":{"context":131072,"output":131072}},"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,"cost":{"input":0.1,"output":0.3},"limit":{"context":128000,"output":128000}},"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,"cost":{"input":0.4,"output":2},"limit":{"context":262144,"output":262144}}}},"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":{"mixtral-8x7b-instruct-v0.1":{"id":"mixtral-8x7b-instruct-v0.1","name":"Mixtral-8x7B-Instruct-v0.1","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-04-01","last_updated":"2025-04-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.7,"output":0.7},"limit":{"context":32768,"output":32768}},"qwen2.5-coder-32b-instruct":{"id":"qwen2.5-coder-32b-instruct","name":"Qwen2.5-Coder-32B-Instruct","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-03-24","last_updated":"2025-03-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.96,"output":0.96},"limit":{"context":32768,"output":32768}},"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,"cost":{"input":0.74,"output":0.74},"limit":{"context":131072,"output":131072}},"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,"cost":{"input":0.11,"output":0.11},"limit":{"context":65536,"output":65536}},"deepseek-r1-distill-llama-70b":{"id":"deepseek-r1-distill-llama-70b","name":"DeepSeek-R1-Distill-Llama-70B","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,"cost":{"input":0.74,"output":0.74},"limit":{"context":131072,"output":131072}},"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,"cost":{"input":0.09,"output":0.25},"limit":{"context":32768,"output":32768}},"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,"cost":{"input":1.01,"output":1.01},"limit":{"context":32768,"output":32768}},"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,"cost":{"input":0.07,"output":0.26},"limit":{"context":262144,"output":262144}},"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,"cost":{"input":0.05,"output":0.18},"limit":{"context":131072,"output":131072}},"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,"cost":{"input":0.1,"output":0.31},"limit":{"context":131072,"output":131072}},"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,"cost":{"input":0.09,"output":0.47},"limit":{"context":131072,"output":131072}},"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,"cost":{"input":0.14,"output":0.14},"limit":{"context":65536,"output":65536}},"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,"cost":{"input":0.11,"output":0.11},"limit":{"context":131072,"output":131072}}}},"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,"cost":{"input":0.2,"output":0.8},"limit":{"context":262144,"output":262144}},"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,"cost":{"input":1.4,"output":4.4},"limit":{"context":202752,"output":202752}},"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,"cost":{"input":1,"output":3.2},"limit":{"context":202752,"output":202752}},"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,"cost":{"input":0.6,"output":0.6},"limit":{"context":131072,"output":131072}},"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,"cost":{"input":0.1,"output":0.1},"limit":{"context":131072,"output":8000}},"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,"cost":{"input":0.3,"output":1.2},"limit":{"context":196608,"output":196608}}}},"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-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,"cost":{"input":1.09,"output":5.43},"limit":{"context":200000,"output":200000}},"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,"cost":{"input":0.55,"output":2.76},"limit":{"context":256000,"output":256000}},"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,"cost":{"input":0.551,"output":1.654},"limit":{"context":128000,"output":128000}},"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.45,"output":2.23},"limit":{"context":198000,"output":198000}},"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.08,"output":3.44},"limit":{"context":202752,"output":202752}},"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}},"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,"cost":{"input":0,"output":0},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.099,"output":0.33},"limit":{"context":16384,"output":16384}},"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,"cost":{"input":3.259,"output":16.296},"limit":{"context":200000,"output":200000}},"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,"cost":{"input":0.551,"output":2.646},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.39,"output":1.57},"limit":{"context":400000,"output":400000}},"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,"cost":{"input":1.654,"output":11.024},"limit":{"context":1048576,"output":65535}},"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","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}},"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,"cost":{"input":0,"output":0},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.34,"output":1.34},"limit":{"context":196000,"output":196000}},"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,"cost":{"input":0.67,"output":2.46},"limit":{"context":131072,"output":131072}},"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,"cost":{"input":5.98,"output":29.89},"limit":{"context":200000,"output":200000}},"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,"cost":{"input":3.307,"output":16.536},"limit":{"context":200000,"output":64000}},"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,"cost":{"input":0.164,"output":1.311},"limit":{"context":128000,"output":128000}},"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,"cost":{"input":0.22,"output":1.34},"limit":{"context":131072,"output":131072}},"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,"cost":{"input":0.158,"output":0.84},"limit":{"context":256000,"output":65536}},"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","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":3.59,"output":17.92},"limit":{"context":1000000,"output":1000000}},"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,"cost":{"input":0.441,"output":1.984},"limit":{"context":262000,"output":262000}},"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.32,"output":1.18},"limit":{"context":196608,"output":196608}},"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,"cost":{"input":0.219,"output":1.202},"limit":{"context":128000,"output":128000}},"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,"cost":{"input":0.09,"output":0.53},"limit":{"context":203000,"output":203000}},"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,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":128000}},"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,"cost":{"input":2.354,"output":9.417},"limit":{"context":1047576,"output":32768}},"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,"cost":{"input":0.656,"output":2.731},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":128000}}}},"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,"cost":{"input":0.5,"output":2},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.59,"output":0.59},"limit":{"context":131000,"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}},"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,"cost":{"input":0.09,"output":0.3},"limit":{"context":262000,"output":131000}},"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,"cost":{"input":0.45,"output":3.5},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.05,"output":0.05},"limit":{"context":33000,"output":4000}},"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,"cost":{"input":0.18,"output":0.18},"limit":{"context":33000,"output":4000}},"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}},"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,"cost":{"input":0.15,"output":0.58},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.35,"output":1.42},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.1,"output":0.4},"limit":{"context":66000,"output":66000}},"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}},"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,"cost":{"input":0.05,"output":0.05},"limit":{"context":33000,"output":4000}},"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,"cost":{"input":0.14,"output":1.4},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.06,"output":0.06},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.09,"output":0.3},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.09,"output":0.6},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.14,"output":0.57},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.07,"output":0.28},"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,"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}},"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,"cost":{"input":0.07,"output":0.28},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.59,"output":0.59},"limit":{"context":131000,"output":4000}},"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,"cost":{"input":0.18,"output":0.18},"limit":{"context":33000,"output":4000}},"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,"cost":{"input":0.13,"output":0.6},"limit":{"context":262000,"output":262000}},"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}},"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,"cost":{"input":0.27,"output":0.27},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.14,"output":0.57},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.3,"output":1.5},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.1,"output":0.1},"limit":{"context":33000,"output":4000}},"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,"cost":{"input":0.29,"output":1},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.2,"output":0.6},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.18,"output":0.68},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.25,"output":1},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.59,"output":0.59},"limit":{"context":33000,"output":4000}},"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,"cost":{"input":0.1,"output":0.3},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.4,"output":2},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":1.2,"output":4,"cache_write":0},"limit":{"context":200000,"output":131072}},"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,"cost":{"input":0.6,"output":2.2},"limit":{"context":205000,"output":205000}},"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,"cost":{"input":1.4,"output":4.4,"cache_write":0},"limit":{"context":205000,"output":205000}},"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,"cost":{"input":0.14,"output":0.86},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":1,"output":3.2},"limit":{"context":205000,"output":205000}},"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,"cost":{"input":0.3,"output":0.9},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.5,"output":1.9},"limit":{"context":205000,"output":205000}},"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,"cost":{"input":0.14,"output":0.86},"limit":{"context":66000,"output":66000}},"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,"cost":{"input":0.06,"output":0.06},"limit":{"context":33000,"output":4000}},"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,"cost":{"input":0.14,"output":0.57},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.07,"output":0.28},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.14,"output":0.57},"limit":{"context":131000,"output":131000}},"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}},"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,"cost":{"input":0,"output":0},"limit":{"context":33000,"output":33000}},"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,"cost":{"input":0.27,"output":1},"limit":{"context":164000,"output":164000}},"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}},"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}},"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,"cost":{"input":0.18,"output":0.18},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.5,"output":2.18},"limit":{"context":164000,"output":164000}},"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,"cost":{"input":0.1,"output":0.1},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.27,"output":0.41},"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}},"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,"cost":{"input":0.27,"output":1},"limit":{"context":164000,"output":164000}},"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,"cost":{"input":0.04,"output":0.18},"limit":{"context":131000,"output":8000}},"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,"cost":{"input":0.05,"output":0.45},"limit":{"context":131000,"output":8000}},"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,"cost":{"input":0.28,"output":1.1},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.086,"output":0.086},"limit":{"context":131000,"output":131000}},"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,"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","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}},"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,"cost":{"input":0.14,"output":0.57},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.55,"output":2.5},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.58,"output":2.29},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.4,"output":2},"limit":{"context":262000,"output":262000}},"moonshotai/Kimi-K2.5":{"id":"moonshotai/Kimi-K2.5","name":"moonshotai/Kimi-K2.5","family":"kimi","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","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.55,"output":3},"limit":{"context":262000,"output":262000}},"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,"cost":{"input":0.3,"output":1.2},"limit":{"context":197000,"output":131000}},"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,"cost":{"input":0.3,"output":1.2},"limit":{"context":197000,"output":131000}},"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,"cost":{"input":0.21,"output":0.57},"limit":{"context":262000,"output":262000}}}},"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,"cost":{"input":1,"output":5},"limit":{"context":1000000,"output":1000000}},"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,"cost":{"input":0.05,"output":0},"limit":{"context":32768,"output":32768}},"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,"cost":{"input":0.08,"output":0.29},"limit":{"context":40960,"output":16384}},"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,"cost":{"input":0.13,"output":0.6},"limit":{"context":40960,"output":16384}},"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,"cost":{"input":0.1,"output":0.4,"cache_read":0.001,"cache_write":0.125},"limit":{"context":1000000,"output":64000}},"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,"cost":{"input":0.5,"output":3,"cache_read":0.09999999999999999,"cache_write":0.625},"limit":{"context":1000000,"output":64000}},"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,"cost":{"input":1.2,"output":6},"limit":{"context":262144,"output":32768}},"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,"cost":{"input":0.01,"output":0},"limit":{"context":32768,"output":32768}},"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,"cost":{"input":0.1,"output":0.3},"limit":{"context":40960,"output":16384}},"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}},"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,"cost":{"input":0.7,"output":8.4},"limit":{"context":131072,"output":129024}},"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,"cost":{"input":0.3,"output":2.9},"limit":{"context":262114,"output":262114}},"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-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,"cost":{"input":0.5,"output":1.2},"limit":{"context":256000,"output":256000}},"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,"cost":{"input":0.02,"output":0},"limit":{"context":32768,"output":32768}},"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,"cost":{"input":1.2,"output":6,"cache_read":0.24},"limit":{"context":256000,"output":65536}},"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,"cost":{"input":0.38,"output":1.53},"limit":{"context":262144,"output":66536}},"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,"cost":{"input":1.2,"output":6,"cache_read":0.24},"limit":{"context":262144,"output":32768}},"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,"cost":{"input":0.4,"output":2.4,"cache_read":0.04,"cache_write":0.5},"limit":{"context":1000000,"output":64000}},"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,"cost":{"input":0.06,"output":0.24},"limit":{"context":40960,"output":16384}},"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,"cost":{"input":0.7,"output":2.8},"limit":{"context":131072,"output":129024}},"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,"cost":{"input":0.07,"output":0.27},"limit":{"context":160000,"output":32768}},"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,"cost":{"input":3,"output":15},"limit":{"context":200000,"output":8000}},"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,"cost":{"input":1,"output":1},"limit":{"context":127000,"output":8000}},"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,"cost":{"input":1,"output":5},"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"]},"open_weights":false,"cost":{"input":2,"output":8},"limit":{"context":127000,"output":8000}},"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,"cost":{"input":0.28,"output":0.42,"cache_read":0.03},"limit":{"context":128000,"output":64000}},"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,"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","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}},"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,"cost":{"input":0.27,"output":0.4,"cache_read":0.22},"limit":{"context":163842,"output":8000}},"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,"cost":{"input":0.77,"output":0.77},"limit":{"context":163840,"output":16384}},"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,"cost":{"input":0.27,"output":1},"limit":{"context":131072,"output":65536}},"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,"cost":{"input":1.35,"output":5.4},"limit":{"context":128000,"output":32768}},"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,"cost":{"input":0.05,"output":0.15},"limit":{"context":131072,"output":131072}},"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,"cost":{"input":0.25,"output":0.8999999999999999},"limit":{"context":262100,"output":80000}},"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,"cost":{"input":0.25,"output":1},"limit":{"context":131000,"output":131000}},"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,"cost":{"input":0.18,"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"]},"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,"cost":{"input":0.02,"output":0},"limit":{"context":8192,"output":1536}},"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,"cost":{"input":0.18,"output":0},"limit":{"context":8192,"output":1536}},"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,"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"]},"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,"cost":{"input":0.12,"output":0},"limit":{"context":8192,"output":1536}},"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,"cost":{"input":0.12,"output":0},"limit":{"context":8192,"output":1536}},"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,"cost":{"input":0.06,"output":0},"limit":{"context":8192,"output":1536}},"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,"cost":{"input":0.9,"output":1.9},"limit":{"context":32000,"output":32000}},"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,"cost":{"input":0.8,"output":1.2},"limit":{"context":16000,"output":16000}},"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,"cost":{"input":1.2,"output":4,"cache_read":0.24},"limit":{"context":200000,"output":128000}},"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,"cost":{"input":0.43,"output":1.75,"cache_read":0.08},"limit":{"context":202752,"output":120000}},"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,"cost":{"input":1,"output":3.2,"cache_read":0.2},"limit":{"context":202800,"output":131072}},"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,"cost":{"input":0.06,"output":0.4,"cache_read":0.01},"limit":{"context":200000,"output":128000}},"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,"cost":{"input":0.6,"output":2.2},"limit":{"context":131072,"output":131072}},"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,"cost":{"input":0.2,"output":1.1},"limit":{"context":128000,"output":96000}},"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,"cost":{"input":1.2,"output":4,"cache_read":0.24},"limit":{"context":202800,"output":131100}},"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,"cost":{"input":0.6,"output":1.8},"limit":{"context":66000,"output":66000}},"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,"cost":{"input":0.45,"output":1.8},"limit":{"context":200000,"output":96000}},"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,"cost":{"input":0.3,"output":0.9,"cache_read":0.05},"limit":{"context":128000,"output":24000}},"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,"cost":{"input":0.07,"output":0.39999999999999997},"limit":{"context":200000,"output":131000}},"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,"cost":{"input":2.5,"output":10},"limit":{"context":256000,"output":8000}},"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}},"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,"cost":{"input":0.2,"output":1.1},"limit":{"context":131072,"output":131072}},"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,"cost":{"input":2,"output":6,"cache_read":0.19999999999999998},"limit":{"context":2000000,"output":2000000}},"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,"cost":{"input":2,"output":6,"cache_read":0.19999999999999998},"limit":{"context":2000000,"output":2000000}},"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,"cost":{"input":2,"output":6,"cache_read":0.19999999999999998},"limit":{"context":2000000,"output":2000000}},"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,"cost":{"input":2,"output":6,"cache_read":0.19999999999999998},"limit":{"context":2000000,"output":2000000}},"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,"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"limit":{"context":2000000,"output":256000}},"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,"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"limit":{"context":2000000,"output":30000}},"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,"cost":{"input":2,"output":6,"cache_read":0.19999999999999998},"limit":{"context":2000000,"output":2000000}},"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,"cost":{"input":2,"output":6,"cache_read":0.19999999999999998},"limit":{"context":2000000,"output":2000000}},"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,"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"limit":{"context":2000000,"output":30000}},"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,"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"limit":{"context":2000000,"output":30000}},"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,"cost":{"input":3,"output":15,"cache_read":0.75},"limit":{"context":131072,"output":8192}},"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,"cost":{"input":0.3,"output":0.5,"reasoning":0.5,"cache_read":0.075},"limit":{"context":131072,"output":8192}},"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,"cost":{"input":2,"output":10,"cache_read":2},"limit":{"context":8192,"output":4096}},"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,"cost":{"input":3,"output":15,"reasoning":15,"cache_read":0.75},"limit":{"context":256000,"output":64000}},"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,"cost":{"input":0.2,"output":1.5,"cache_read":0.02},"limit":{"context":256000,"output":10000}},"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,"cost":{"input":5,"output":25,"cache_read":1.25},"limit":{"context":131072,"output":8192}},"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,"cost":{"input":0.6,"output":4,"reasoning":4,"cache_read":0.15},"limit":{"context":131072,"output":8192}},"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,"cost":{"input":0.15,"output":0.65},"limit":{"context":256000,"output":32000}},"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,"cost":{"input":0.06,"output":0.24},"limit":{"context":262144,"output":262144}},"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,"cost":{"input":0.2,"output":0.6},"limit":{"context":131072,"output":131072}},"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,"cost":{"input":0.04,"output":0.16},"limit":{"context":131072,"output":131072}},"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,"cost":{"input":0.25,"output":0.75,"cache_read":0.024999999999999998},"limit":{"context":128000,"output":128000}},"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,"knowledge":"2024-10","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":32000,"output":16384}},"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,"cost":{"input":1.25,"output":10,"cache_read":0.13},"limit":{"context":400000,"input":272000,"output":128000}},"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,"cost":{"input":1.75,"output":14,"cache_read":0.18},"limit":{"context":128000,"input":111616,"output":16384}},"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,"cost":{"input":0.15,"output":0.6},"limit":{"context":128000,"input":111616,"output":16384}},"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,"cost":{"input":1.5,"output":6,"cache_read":0.38},"limit":{"context":200000,"input":100000,"output":100000}},"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,"cost":{"input":1.25,"output":10,"cache_read":0.13},"limit":{"context":128000,"input":111616,"output":16384}},"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,"cost":{"input":1.75,"output":14,"cache_read":0.175},"limit":{"context":128000,"input":111616,"output":16384}},"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,"cost":{"input":21,"output":168},"limit":{"context":400000,"input":272000,"output":128000}},"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,"cost":{"input":0.13,"output":0},"limit":{"context":8192,"input":6656,"output":1536}},"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,"cost":{"input":1.75,"output":14,"cache_read":0.175},"limit":{"context":400000,"input":272000,"output":128000}},"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,"cost":{"input":0.1,"output":0},"limit":{"context":8192,"input":6656,"output":1536}},"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,"cost":{"input":1.75,"output":14,"cache_read":0.18},"limit":{"context":400000,"input":272000,"output":128000}},"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,"cost":{"input":20,"output":80},"limit":{"context":200000,"input":100000,"output":100000}},"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,"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"limit":{"context":400000,"input":272000,"output":128000}},"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,"cost":{"input":0.19999999999999998,"output":1.25,"cache_read":0.02},"limit":{"context":400000,"input":272000,"output":128000}},"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,"cost":{"input":1.75,"output":14,"cache_read":0.175},"limit":{"context":400000,"input":272000,"output":128000}},"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}},"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,"cost":{"input":1.25,"output":10,"cache_read":0.13},"limit":{"context":400000,"input":272000,"output":128000}},"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,"cost":{"input":30,"output":180},"limit":{"context":1050000,"input":922000,"output":128000}},"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}},"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,"cost":{"input":10,"output":40,"cache_read":2.5},"limit":{"context":200000,"input":100000,"output":100000}},"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}},"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,"cost":{"input":2.5,"output":15,"cache_read":0.25},"limit":{"context":1050000,"input":922000,"output":128000}},"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,"cost":{"input":0.07,"output":0.3},"limit":{"context":131072,"input":98304,"output":32768}},"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,"cost":{"input":15,"output":120},"limit":{"context":400000,"input":128000,"output":272000}},"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,"cost":{"input":0.08,"output":0.3,"cache_read":0.04},"limit":{"context":131072,"input":65536,"output":65536}},"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,"cost":{"input":0.1,"output":0.5},"limit":{"context":131072,"output":131072}},"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,"cost":{"input":1.5,"output":2},"limit":{"context":8192,"input":4096,"output":4096}},"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,"cost":{"input":1.25,"output":10,"cache_read":0.13},"limit":{"context":128000,"input":111616,"output":16384}},"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,"cost":{"input":1.25,"output":10,"cache_read":0.13},"limit":{"context":400000,"input":272000,"output":128000}},"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,"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"limit":{"context":1047576,"output":32768}},"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,"cost":{"input":2,"output":8,"cache_read":0.5},"limit":{"context":1047576,"output":32768}},"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,"cost":{"input":1.25,"output":10,"cache_read":0.125},"limit":{"context":400000,"input":272000,"output":128000}},"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,"cost":{"input":2.5,"output":10,"cache_read":1.25},"limit":{"context":128000,"output":16384}},"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,"cost":{"input":2,"output":8,"cache_read":0.5},"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,"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.1,"output":0.4,"cache_read":0.03},"limit":{"context":1047576,"output":32768}},"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,"cost":{"input":1.25,"output":10,"cache_read":0.125},"limit":{"context":400000,"input":272000,"output":128000}},"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,"cost":{"input":1.1,"output":4.4,"cache_read":0.55},"limit":{"context":200000,"output":100000}},"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,"cost":{"input":15,"output":60,"cache_read":7.5},"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"]},"open_weights":false,"cost":{"input":1.1,"output":4.4,"cache_read":0.28},"limit":{"context":200000,"output":100000}},"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,"cost":{"input":0.15,"output":0.6,"cache_read":0.08},"limit":{"context":128000,"output":16384}},"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,"cost":{"input":10,"output":30},"limit":{"context":128000,"output":4096}},"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,"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"limit":{"context":400000,"input":272000,"output":128000}},"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,"cost":{"input":0.25,"output":2,"cache_read":0.025},"limit":{"context":400000,"input":272000,"output":128000}},"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,"cost":{"input":0.02,"output":0},"limit":{"context":8192,"output":1536}},"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,"cost":{"input":0.3,"output":2.5},"limit":{"context":1000000,"output":1000000}},"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,"cost":{"input":0.8,"output":3.2,"cache_read":0.2},"limit":{"context":300000,"output":8192}},"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,"cost":{"input":0.06,"output":0.24,"cache_read":0.015},"limit":{"context":300000,"output":8192}},"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,"cost":{"input":0.035,"output":0.14,"cache_read":0.00875},"limit":{"context":128000,"output":8192}},"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,"cost":{"input":0.04,"output":0.17},"limit":{"context":60288,"output":16000}},"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,"cost":{"input":0.2,"output":0.2},"limit":{"context":256000,"output":256000}},"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,"cost":{"input":0.15,"output":0},"limit":{"context":8192,"output":1536}},"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,"cost":{"input":0.4,"output":2},"limit":{"context":128000,"output":64000}},"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,"cost":{"input":0.1,"output":0},"limit":{"context":8192,"output":1536}},"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,"cost":{"input":0.5,"output":1.5},"limit":{"context":256000,"output":256000}},"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,"cost":{"input":0.1,"output":0.3},"limit":{"context":128000,"output":64000}},"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,"cost":{"input":0.1,"output":0.1},"limit":{"context":128000,"output":128000}},"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,"cost":{"input":2,"output":5},"limit":{"context":128000,"output":16384}},"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,"cost":{"input":0.15,"output":0.6},"limit":{"context":256000,"output":256000}},"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,"cost":{"input":0.5,"output":1.5},"limit":{"context":128000,"output":128000}},"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,"cost":{"input":0.15,"output":0.15},"limit":{"context":128000,"output":128000}},"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,"cost":{"input":2,"output":6},"limit":{"context":64000,"output":64000}},"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,"cost":{"input":2,"output":6},"limit":{"context":128000,"output":128000}},"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,"cost":{"input":0.04,"output":0.04},"limit":{"context":128000,"output":128000}},"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,"cost":{"input":0.3,"output":0.9},"limit":{"context":256000,"output":4096}},"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,"cost":{"input":0.1,"output":0.1},"limit":{"context":128000,"output":8192}},"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,"cost":{"input":0.03,"output":0.05},"limit":{"context":131072,"output":16384}},"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,"cost":{"input":0.72,"output":0.72},"limit":{"context":128000,"output":8192}},"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,"cost":{"input":0.15,"output":0.15},"limit":{"context":128000,"output":8192}},"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,"cost":{"input":0.16,"output":0.16},"limit":{"context":128000,"output":8192}},"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,"cost":{"input":0.4,"output":0.4},"limit":{"context":131072,"output":16384}},"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,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"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,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"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,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"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,"cost":{"input":3,"output":15},"limit":{"context":128000,"output":32000}},"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,"cost":{"input":3,"output":15},"limit":{"context":128000,"output":32000}},"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,"cost":{"input":0.3,"output":1.2,"cache_read":0.06,"cache_write":0.375},"limit":{"context":204800,"output":131000}},"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,"cost":{"input":0.6,"output":2.4,"cache_read":0.06,"cache_write":0.375},"limit":{"context":204800,"output":131100}},"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}},"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,"cost":{"input":0.3,"output":1.2,"cache_read":0.03,"cache_write":0.38},"limit":{"context":204800,"output":131072}},"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,"cost":{"input":0.3,"output":2.4,"cache_read":0.03,"cache_write":0.38},"limit":{"context":204800,"output":131072}},"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,"cost":{"input":0.3,"output":1.2,"cache_read":0.03,"cache_write":0.375},"limit":{"context":204800,"output":131000}},"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,"cost":{"input":0.6,"output":2.4,"cache_read":0.03,"cache_write":0.375},"limit":{"context":0,"output":0}},"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,"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"limit":{"context":256000,"output":256000}},"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,"cost":{"input":0.1,"output":0.4,"cache_read":0.01},"limit":{"context":1048576,"output":65536}},"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,"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"cache_write":1},"limit":{"context":1000000,"output":65000}},"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,"cost":{"input":2,"output":120},"limit":{"context":65536,"output":32768}},"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,"cost":{"input":2,"output":12,"cache_read":0.2},"limit":{"context":1000000,"output":64000}},"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,"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-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,"cost":{"input":0.15,"output":0},"limit":{"context":8192,"output":1536}},"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,"cost":{"input":0.14,"output":0.39999999999999997},"limit":{"context":262144,"output":131072}},"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,"cost":{"input":0.3,"output":2.5},"limit":{"context":32768,"output":32768}},"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,"cost":{"input":0.03,"output":0},"limit":{"context":8192,"output":1536}},"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,"cost":{"input":0.03,"output":0},"limit":{"context":8192,"output":1536}},"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,"cost":{"input":0.5,"output":3},"limit":{"context":131072,"output":32768}},"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,"cost":{"input":0.5,"output":3,"cache_read":0.05},"limit":{"context":1000000,"output":64000}},"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,"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"cache_write":0.383},"limit":{"context":1048576,"output":65536}},"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,"cost":{"input":0.13,"output":0.39999999999999997},"limit":{"context":262144,"output":131072}},"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,"cost":{"input":0.1,"output":0.4,"cache_read":0.01},"limit":{"context":1048576,"output":65536}},"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,"cost":{"input":0.3,"output":2.5},"limit":{"context":32768,"output":32768}},"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,"cost":{"input":0.075,"output":0.3},"limit":{"context":1048576,"output":8192}},"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,"cost":{"input":0.3,"output":2.5,"cache_read":0.075,"input_audio":1},"limit":{"context":1048576,"output":65536}},"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,"cost":{"input":1.25,"output":10,"cache_read":0.31},"limit":{"context":1048576,"output":65536}},"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,"cost":{"input":0.1,"output":0.4,"cache_read":0.025},"limit":{"context":1048576,"output":8192}},"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,"cost":{"input":2.4,"output":10},"limit":{"context":256000,"output":16384}},"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,"cost":{"input":0.6,"output":1.2},"limit":{"context":262144,"output":262144}},"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,"cost":{"input":1.15,"output":8,"cache_read":0.15},"limit":{"context":262114,"output":262114}},"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,"cost":{"input":0.6,"output":2.5},"limit":{"context":131072,"output":16384}},"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,"cost":{"input":0.47,"output":2,"cache_read":0.14},"limit":{"context":216144,"output":216144}},"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,"cost":{"input":1,"output":3},"limit":{"context":131072,"output":16384},"status":"deprecated"},"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,"cost":{"input":3,"output":15},"limit":{"context":200000,"output":8192}},"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","release_date":"2026-02","last_updated":"2026-02","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}},"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,"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":18.75},"limit":{"context":200000,"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,"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,"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"limit":{"context":200000,"output":64000}},"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","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}},"limit":{"context":1000000,"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"]},"open_weights":false,"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"limit":{"context":200000,"output":4096}},"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,"cost":{"input":0.8,"output":4,"cache_read":0.08,"cache_write":1},"limit":{"context":200000,"output":8192}},"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,"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"limit":{"context":200000,"output":32000}},"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,"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":"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,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":64000}},"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,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":64000}},"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,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":8192}},"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,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":64000}},"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,"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"limit":{"context":200000,"output":32000}},"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,"cost":{"input":1,"output":3,"cache_read":0.19999999999999998},"limit":{"context":1000000,"output":128000}},"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,"cost":{"input":0.1,"output":0.29},"limit":{"context":262144,"output":32000}},"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,"cost":{"input":0.25,"output":2,"cache_read":0.05},"limit":{"context":256000,"output":32000}},"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,"cost":{"input":0.25,"output":2,"cache_read":0.05},"limit":{"context":256000,"output":64000}},"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,"cost":{"input":0.15,"output":1.5},"limit":{"context":128000,"output":8192}},"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,"cost":{"input":0.3,"output":1.2},"limit":{"context":196608,"output":128000}},"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,"cost":{"input":0.3,"output":1.2,"cache_read":0.03,"cache_write":0.375},"limit":{"context":204800,"output":131072}},"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.3,"output":1.2,"cache_read":0.06,"cache_write":0.375},"limit":{"context":204800,"output":131072}},"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}},"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":0.3,"output":1.2},"limit":{"context":204800,"output":131072}},"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,"cost":{"input":0.6,"output":2.4,"cache_read":0.06,"cache_write":0.375},"limit":{"context":204800,"output":131072}}}},"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":{"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":"2024-01-01","last_updated":"2024-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"limit":{"context":204800,"output":131100}},"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}},"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}},"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,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":2,"output":6,"cache_read":0.2},"limit":{"context":2000000,"output":30000}},"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-09-23","last_updated":"2025-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":6,"output":60},"limit":{"context":1000000,"output":66000}},"claude-haiku-4-5":{"id":"claude-haiku-4-5","name":"Claude Haiku 4.5","family":"claude","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}},"claude-opus-4-5-20251101":{"id":"claude-opus-4-5-20251101","name":"Claude Opus 4.5","family":"claude","attachment":true,"reasoning":true,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":5,"output":25,"cache_read":0.5},"limit":{"context":200000,"output":32000}},"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"]},"open_weights":false,"cost":{"input":0.1,"output":0.4,"cache_read":0.01},"limit":{"context":1048576,"output":65535}},"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-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"},"kimi-k2.5":{"id":"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-26","last_updated":"2026-01-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.6,"output":3,"cache_read":0.1},"limit":{"context":262144,"output":32768}},"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,"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}},"mistral-large-2512":{"id":"mistral-large-2512","name":"Mistral Large 3","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,"cost":{"input":0.5,"output":1.5},"limit":{"context":262144,"output":16384}},"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,"cost":{"input":0.18,"output":0.59},"limit":{"context":32768,"output":16384},"status":"beta"},"glm-4.7":{"id":"glm-4.7","name":"GLM-4.7","family":"glm","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"]},"open_weights":false,"cost":{"input":0.6,"output":2.2,"cache_read":0.11},"limit":{"context":200000,"output":128000}},"minimax-m2.7-highspeed":{"id":"minimax-m2.7-highspeed","name":"MiniMax M2.7 Highspeed","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"]},"open_weights":true,"cost":{"input":0.6,"output":2.4,"cache_read":0.06},"limit":{"context":204800,"output":131100}},"hermes-2-pro-llama-3-8b":{"id":"hermes-2-pro-llama-3-8b","name":"Hermes 2 Pro Llama 3 8B","family":"nousresearch","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,"cost":{"input":0.14,"output":0.14},"limit":{"context":8192,"output":8192},"status":"beta"},"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":true,"cost":{"input":1,"output":5},"limit":{"context":131072,"output":8192}},"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,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":16384}},"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}},"claude-3-5-sonnet-20241022":{"id":"claude-3-5-sonnet-20241022","name":"Claude 3.5 Sonnet (2024-10-22)","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,"cost":{"input":3,"output":15,"cache_read":0.3},"limit":{"context":200000,"output":8192},"status":"deprecated"},"gpt-5.2-pro":{"id":"gpt-5.2-pro","name":"GPT-5.2 Pro","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":21,"output":168},"limit":{"context":400000,"output":272000}},"qwq-plus":{"id":"qwq-plus","name":"QwQ Plus","family":"qwen","attachment":false,"reasoning":true,"tool_call":false,"structured_output":false,"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}},"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,"cost":{"input":0.04,"output":0.4,"cache_read":0},"limit":{"context":128000,"output":16000}},"gemini-3.1-flash-lite-preview":{"id":"gemini-3.1-flash-lite-preview","name":"Gemini 3.1 Flash Lite (Preview)","family":"gemini","attachment":true,"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}},"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}},"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,"cost":{"input":0.08,"output":0.08},"limit":{"context":8192,"output":16384}},"glm-5":{"id":"glm-5","name":"GLM-5","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}},"devstral-2512":{"id":"devstral-2512","name":"Devstral 2","family":"mistral","attachment":false,"reasoning":false,"tool_call":false,"structured_output":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}},"qwen3-32b":{"id":"qwen3-32b","name":"Qwen3 32B","family":"qwen","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}},"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}},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"Claude Sonnet 4.6","family":"claude","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"]},"open_weights":false,"cost":{"input":3,"output":15,"cache_read":0.3},"limit":{"context":200000,"output":64000}},"glm-4.7-flashx":{"id":"glm-4.7-flashx","name":"GLM-4.7 FlashX","family":"glm","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"]},"open_weights":false,"cost":{"input":0.07,"output":0.4,"cache_read":0.01},"limit":{"context":200000,"output":128000}},"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,"cost":{"input":0.08,"output":0.3},"limit":{"context":1000000,"output":16384}},"gemini-3.1-pro-preview":{"id":"gemini-3.1-pro-preview","name":"Gemini 3.1 Pro (Preview)","family":"gemini","attachment":true,"reasoning":true,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":2,"output":12,"cache_read":0.2},"limit":{"context":1048576,"output":65536}},"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-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}},"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}},"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"]},"open_weights":false,"cost":{"input":1.75,"output":14,"cache_read":0.18},"limit":{"context":128000,"output":16384}},"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"},"gemini-3-flash-preview":{"id":"gemini-3-flash-preview","name":"Gemini 3 Flash (Preview)","family":"gemini","attachment":true,"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"]},"open_weights":false,"cost":{"input":0.5,"output":3,"cache_read":0.05},"limit":{"context":1048576,"output":65535}},"qwen-plus":{"id":"qwen-plus","name":"Qwen Plus","family":"qwen","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}},"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,"cost":{"input":0.1,"output":0.1},"limit":{"context":128000,"output":16384}},"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":false,"cost":{"input":0.07,"output":0.3,"cache_read":0.02},"limit":{"context":256000,"output":16384}},"qwen-omni-turbo":{"id":"qwen-omni-turbo","name":"Qwen Omni Turbo","family":"qwen","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"]},"open_weights":true,"cost":{"input":0.2,"output":0.8},"limit":{"context":32768,"output":8192}},"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}},"gpt-5-nano":{"id":"gpt-5-nano","name":"GPT-5 Nano","family":"gpt","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}},"claude-3-haiku-20240307":{"id":"claude-3-haiku-20240307","name":"Claude 3 Haiku (2024-03-07)","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,"cost":{"input":0.25,"output":1.25,"cache_read":0.03},"limit":{"context":200000,"output":4096}},"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":false,"cost":{"input":0.25,"output":2,"cache_read":0.05},"limit":{"context":256000,"output":16384}},"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}},"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-11","last_updated":"2025-10-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.2,"output":1},"limit":{"context":131072,"output":32768}},"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":true,"release_date":"2026-02-24","last_updated":"2026-02-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":1.75,"output":14,"cache_read":0.18},"limit":{"context":400000,"output":128000}},"minimax-m2":{"id":"minimax-m2","name":"MiniMax M2","family":"minimax","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}},"claude-sonnet-4-5-20250929":{"id":"claude-sonnet-4-5-20250929","name":"Claude Sonnet 4.5 (2025-09-29)","family":"claude","attachment":false,"reasoning":true,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":3,"output":15,"cache_read":0.3},"limit":{"context":200000,"output":64000}},"qwen-flash":{"id":"qwen-flash","name":"Qwen Flash","family":"qwen","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.05,"output":0.4,"cache_read":0.01},"limit":{"context":1000000,"output":32000}},"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"]},"open_weights":false,"cost":{"input":10,"output":30},"limit":{"context":128000,"output":16384}},"cogview-4":{"id":"cogview-4","name":"CogView-4","family":"glm","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}},"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":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}},"gemini-2.5-pro":{"id":"gemini-2.5-pro","name":"Gemini 2.5 Pro","family":"gemini","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}},"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-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}},"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}},"pixtral-large-latest":{"id":"pixtral-large-latest","name":"Pixtral Large Latest","family":"mistral","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"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}},"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}},"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}},"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,"cost":{"input":3,"output":15,"cache_read":0.3},"limit":{"context":200000,"output":8192}},"grok-4-20-beta-0309-reasoning":{"id":"grok-4-20-beta-0309-reasoning","name":"Grok 4.20 Beta Reasoning (0309)","family":"grok","attachment":true,"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"]},"open_weights":false,"cost":{"input":2,"output":6,"cache_read":0.2},"limit":{"context":2000000,"output":30000}},"grok-imagine-image":{"id":"grok-imagine-image","name":"Grok Imagine Image","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"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":2000,"output":4096}},"gpt-4o-mini":{"id":"gpt-4o-mini","name":"GPT-4o Mini","family":"gpt","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"]},"open_weights":false,"cost":{"input":0.15,"output":0.6,"cache_read":0.08},"limit":{"context":128000,"output":16384}},"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,"cost":{"input":2,"output":12,"cache_read":0.2},"limit":{"context":1048576,"output":65536}},"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"]},"open_weights":false,"cost":{"input":0.75,"output":4.5,"cache_read":0.08},"limit":{"context":400000,"output":128000}},"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,"cost":{"input":0.8,"output":4,"cache_read":0.08},"limit":{"context":200000,"output":8192},"status":"deprecated"},"qwen3-max":{"id":"qwen3-max","name":"Qwen3 Max","family":"qwen","attachment":true,"reasoning":true,"tool_call":true,"structured_output":true,"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}},"minimax-m2.1":{"id":"minimax-m2.1","name":"MiniMax M2.1","family":"minimax","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.27,"output":1.1},"limit":{"context":196608,"output":131072}},"gemini-3-pro-image-preview":{"id":"gemini-3-pro-image-preview","name":"Gemini 3 Pro Image (Preview)","family":"gemini","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}},"mixtral-8x7b-instruct-together":{"id":"mixtral-8x7b-instruct-together","name":"Mixtral 8x7B Instruct","family":"mistral","attachment":false,"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"]},"open_weights":true,"cost":{"input":0.06,"output":0.06},"limit":{"context":32768,"output":16384}},"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":true,"cost":{"input":1.6,"output":6.4},"limit":{"context":131072,"output":32000}},"o4-mini":{"id":"o4-mini","name":"o4 Mini","family":"gpt","attachment":true,"reasoning":true,"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}},"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":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":16000}},"gpt-5.4-nano":{"id":"gpt-5.4-nano","name":"GPT-5.4 Nano","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"]},"open_weights":false,"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"limit":{"context":400000,"output":128000}},"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}},"glm-4.5":{"id":"glm-4.5","name":"GLM-4.5","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,"cost":{"input":0.6,"output":2.2,"cache_read":0.11},"limit":{"context":128000,"output":16384}},"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}},"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}},"gemma-3-12b-it":{"id":"gemma-3-12b-it","name":"Gemma 3 12B IT","family":"gemma","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}},"seedream-4-0":{"id":"seedream-4-0","name":"Seedream 4.0","family":"seed","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-09-16","last_updated":"2025-09-16","modalities":{"input":["text"],"output":["text","image"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":2000,"output":4096}},"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-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}},"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":true,"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.18},"limit":{"context":400000,"output":128000}},"minimax-text-01":{"id":"minimax-text-01","name":"MiniMax Text 01","family":"minimax","attachment":false,"reasoning":false,"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,"cost":{"input":0.2,"output":1.1},"limit":{"context":1000000,"output":131072}},"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"]},"open_weights":true,"cost":{"input":0.1,"output":0.45},"limit":{"context":40960,"output":20000}},"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"Gemini 2.5 Flash","family":"gemini","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}},"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":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"},"gpt-5.2-chat-latest":{"id":"gpt-5.2-chat-latest","name":"GPT-5.2 Chat","family":"gpt","attachment":true,"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"]},"open_weights":false,"cost":{"input":1.75,"output":14,"cache_read":0.18},"limit":{"context":128000,"output":16400}},"qwen3-4b-fp8":{"id":"qwen3-4b-fp8","name":"Qwen3 4B 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"]},"open_weights":true,"cost":{"input":0.03,"output":0.03},"limit":{"context":128000,"output":20000}},"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"},"llama-guard-4-12b":{"id":"llama-guard-4-12b","name":"Llama Guard 4 12B","family":"llama","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}},"gemma-3n-e2b-it":{"id":"gemma-3n-e2b-it","name":"Gemma 3n E2B 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}},"gpt-5.1-codex-mini":{"id":"gpt-5.1-codex-mini","name":"GPT-5.1 Codex mini","family":"gpt","attachment":true,"reasoning":true,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-11-12","last_updated":"2025-11-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.25,"output":2,"cache_read":0.03},"limit":{"context":400000,"output":128000}},"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}},"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,"cost":{"input":0.15,"output":0.15},"limit":{"context":262144,"output":16384}},"grok-4-fast":{"id":"grok-4-fast","name":"Grok 4 Fast","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,"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"limit":{"context":2000000,"output":30000}},"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,"cost":{"input":0.27,"output":0.27},"limit":{"context":128000,"output":16384}},"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"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":2000,"output":4096}},"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}},"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,"cost":{"input":0.72,"output":0.72},"limit":{"context":128000,"output":2048},"status":"beta"},"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":false,"cost":{"input":0.25,"output":2,"cache_read":0.05},"limit":{"context":256000,"output":16384}},"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-25","last_updated":"2025-07-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.2,"output":0.6},"limit":{"context":262000,"output":8192},"status":"beta"},"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"]},"open_weights":true,"cost":{"input":0.5,"output":6},"limit":{"context":131072,"output":32768},"status":"beta"},"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":false,"cost":{"input":0.25,"output":2,"cache_read":0.05},"limit":{"context":256000,"output":16384}},"grok-code-fast-1":{"id":"grok-code-fast-1","name":"Grok Code Fast 1","family":"grok","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"]},"open_weights":false,"cost":{"input":0.2,"output":1.5},"limit":{"context":256000,"output":10000}},"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,"cost":{"input":2.2,"output":8.9,"cache_read":0.45},"limit":{"context":128000,"output":16384},"status":"beta"},"veo-3.1-fast-generate-preview":{"id":"veo-3.1-fast-generate-preview","name":"Veo 3.1 Fast","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"},"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}},"gemma-3-4b-it":{"id":"gemma-3-4b-it","name":"Gemma 3 4B IT","family":"gemma","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}},"kimi-k2-thinking-turbo":{"id":"kimi-k2-thinking-turbo","name":"Kimi K2 Thinking Turbo","family":"kimi","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"]},"open_weights":false,"cost":{"input":1.15,"output":8,"cache_read":0.15},"limit":{"context":262144,"output":262144}},"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}},"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-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}},"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,"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"limit":{"context":2000000,"output":30000}},"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"]},"open_weights":false,"cost":{"input":15,"output":60,"cache_read":7.5},"limit":{"context":200000,"output":16384}},"glm-4.5-air":{"id":"glm-4.5-air","name":"GLM-4.5 Air","family":"glm","attachment":false,"reasoning":false,"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}},"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"]},"open_weights":false,"cost":{"input":30,"output":180},"limit":{"context":1050000,"output":128000}},"claude-3-5-sonnet":{"id":"claude-3-5-sonnet","name":"Claude 3.5 Sonnet","family":"claude","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"]},"open_weights":false,"cost":{"input":3,"output":15,"cache_read":0.3},"limit":{"context":200000,"output":16384}},"gpt-3.5-turbo":{"id":"gpt-3.5-turbo","name":"GPT-3.5 Turbo","family":"gpt","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2022-11-30","last_updated":"2022-11-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.5,"output":1.5},"limit":{"context":16385,"output":16384}},"o3-mini":{"id":"o3-mini","name":"o3 Mini","family":"gpt","attachment":false,"reasoning":true,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-06-01","last_updated":"2025-06-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}},"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"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":2000,"output":4096}},"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}},"sonar":{"id":"sonar","name":"Sonar","family":"sonar","attachment":false,"reasoning":false,"tool_call":false,"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":1,"output":1},"limit":{"context":130000,"output":16384}},"qwen3-coder-flash":{"id":"qwen3-coder-flash","name":"Qwen3 Coder Flash","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.3,"output":1.5,"cache_read":0.06},"limit":{"context":1000000,"output":65536}},"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,"cost":{"input":0.56,"output":1.68,"cache_read":0.11},"limit":{"context":128000,"output":32768}},"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,"cost":{"input":0.1,"output":0.1},"limit":{"context":131072,"output":16384}},"grok-4-20-multi-agent-beta-0309":{"id":"grok-4-20-multi-agent-beta-0309","name":"Grok 4.20 Multi-Agent Beta (0309)","family":"grok","attachment":true,"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"]},"open_weights":false,"cost":{"input":2,"output":6,"cache_read":0.2},"limit":{"context":2000000,"output":30000}},"qwen-plus-latest":{"id":"qwen-plus-latest","name":"Qwen Plus Latest","family":"qwen","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}},"glm-4.5v":{"id":"glm-4.5v","name":"GLM-4.5V","family":"glm","attachment":true,"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}},"seedream-4-5":{"id":"seedream-4-5","name":"Seedream 4.5","family":"seed","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}},"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,"cost":{"input":0.6,"output":1.8},"limit":{"context":128000,"output":16384}},"grok-4":{"id":"grok-4","name":"Grok 4","family":"grok","attachment":true,"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"]},"open_weights":false,"cost":{"input":3,"output":15},"limit":{"context":256000,"output":256000}},"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":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"},"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,"cost":{"input":3,"output":15},"limit":{"context":256000,"output":256000}},"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":"2025-09-10","last_updated":"2025-09-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.5,"output":2},"limit":{"context":129024,"output":32768}},"gpt-4":{"id":"gpt-4","name":"GPT-4","family":"gpt","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2023-03-14","last_updated":"2023-03-14","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":30,"output":60},"limit":{"context":8192,"output":8192}},"qwen-image":{"id":"qwen-image","name":"Qwen Image","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}},"qwen-image-edit-plus":{"id":"qwen-image-edit-plus","name":"Qwen Image Edit Plus","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","image"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":2000,"output":4096}},"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-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0.6,"output":2.2,"cache_read":0.11},"limit":{"context":200000,"output":16384}},"qwen3-30b-a3b-fp8":{"id":"qwen3-30b-a3b-fp8","name":"Qwen3 30B A3B 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"]},"open_weights":true,"cost":{"input":0.09,"output":0.45},"limit":{"context":40960,"output":20000}},"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,"cost":{"input":0.12,"output":0.48},"limit":{"context":196608,"output":131072}},"claude-3-haiku":{"id":"claude-3-haiku","name":"Claude 3 Haiku","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,"cost":{"input":0.25,"output":1.25,"cache_read":0.03},"limit":{"context":200000,"output":4096}},"glm-image":{"id":"glm-image","name":"GLM-Image","family":"glm","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-01-14","last_updated":"2025-01-14","modalities":{"input":["text"],"output":["text","image"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":2000,"output":4096}},"glm-4.6v":{"id":"glm-4.6v","name":"GLM-4.6V","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,"cost":{"input":0.3,"output":0.9,"cache_read":0.05},"limit":{"context":128000,"output":16000}},"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":true,"cost":{"input":1.2,"output":6,"cache_read":0.24},"limit":{"context":262144,"output":65536}},"claude-opus-4-1-20250805":{"id":"claude-opus-4-1-20250805","name":"Claude Opus 4.1","family":"claude","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","image"],"output":["text"]},"open_weights":false,"cost":{"input":15,"output":75,"cache_read":1.5},"limit":{"context":200000,"output":32000}},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","family":"gpt","attachment":true,"reasoning":true,"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}},"claude-haiku-4-5-20251001":{"id":"claude-haiku-4-5-20251001","name":"Claude Haiku 4.5 (2025-10-01)","family":"claude","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}},"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.5-flash":{"id":"glm-4.5-flash","name":"GLM-4.5 Flash","family":"glm","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}},"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,"cost":{"input":0.03,"output":0.05},"limit":{"context":32768,"output":32000},"status":"beta"},"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":"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}},"qwen-image-plus":{"id":"qwen-image-plus","name":"Qwen Image Plus","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}},"qwen3-vl-plus":{"id":"qwen3-vl-plus","name":"Qwen3 VL Plus","family":"qwen","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"]},"open_weights":true,"cost":{"input":0.2,"output":1.6,"cache_read":0.04},"limit":{"context":262144,"output":32768}},"grok-4-1-fast":{"id":"grok-4-1-fast","name":"Grok 4.1 Fast","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}},"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"]},"open_weights":false,"cost":{"input":3,"output":15,"cache_read":0.3},"limit":{"context":200000,"output":16384}},"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":true,"temperature":true,"release_date":"2025-01-31","last_updated":"2025-01-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.4,"output":1.8},"limit":{"context":262000,"output":8192}},"claude-opus-4-6":{"id":"claude-opus-4-6","name":"Claude Opus 4.6","family":"claude","attachment":true,"reasoning":true,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":5,"output":25,"cache_read":0.5},"limit":{"context":1000000,"output":128000}},"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,"cost":{"input":2.5,"output":10},"limit":{"context":128000,"output":16384}},"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,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":16384}},"gpt-4.1-nano":{"id":"gpt-4.1-nano","name":"GPT-4.1 Nano","family":"gpt","attachment":true,"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"]},"open_weights":false,"cost":{"input":0.1,"output":0.4,"cache_read":0.03},"limit":{"context":1000000,"output":16384}},"claude-3-7-sonnet-20250219":{"id":"claude-3-7-sonnet-20250219","name":"Claude 3.7 Sonnet (2025-02-19)","family":"claude","attachment":false,"reasoning":true,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-02-19","last_updated":"2025-02-19","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":3,"output":15,"cache_read":0.3},"limit":{"context":200000,"output":8192}},"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":false,"temperature":true,"release_date":"2025-10-05","last_updated":"2025-10-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.2,"output":0.7},"limit":{"context":131072,"output":32768}},"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,"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}},"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,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.3,"output":1.2,"cache_read":0.03},"limit":{"context":204800,"output":131100}},"o3":{"id":"o3","name":"o3","family":"gpt","attachment":true,"reasoning":true,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-06-01","last_updated":"2025-06-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":2,"output":8,"cache_read":0.5},"limit":{"context":200000,"output":16384}},"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,"cost":{"input":0.28,"output":0.42,"cache_read":0.03},"limit":{"context":163840,"output":16384}},"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}},"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,"cost":{"input":0.1,"output":0.5},"limit":{"context":131072,"output":32766}},"gpt-5-pro":{"id":"gpt-5-pro","name":"GPT-5 Pro","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":15,"output":120},"limit":{"context":400000,"output":272000}},"gpt-4o":{"id":"gpt-4o","name":"GPT-4o","family":"gpt","attachment":true,"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"]},"open_weights":false,"cost":{"input":2.5,"output":10,"cache_read":1.25},"limit":{"context":128000,"output":16384}},"minimax-m2.5-highspeed":{"id":"minimax-m2.5-highspeed","name":"MiniMax M2.5 Highspeed","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"]},"open_weights":true,"cost":{"input":0.6,"output":2.4,"cache_read":0.03},"limit":{"context":204800,"output":131100}},"qwen-turbo":{"id":"qwen-turbo","name":"Qwen Turbo","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":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}},"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":false,"cost":{"input":1,"output":3,"cache_read":0.5},"limit":{"context":131072,"output":16384}},"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,"cost":{"input":0.04,"output":0.04},"limit":{"context":8192,"output":8192}},"claude-sonnet-4-5":{"id":"claude-sonnet-4-5","name":"Claude Sonnet 4.5","family":"claude","attachment":false,"reasoning":true,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":3,"output":15,"cache_read":0.3},"limit":{"context":200000,"output":64000}},"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-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}},"gemini-2.5-flash-lite":{"id":"gemini-2.5-flash-lite","name":"Gemini 2.5 Flash Lite","family":"gemini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-22","last_updated":"2025-07-22","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}},"gpt-5":{"id":"gpt-5","name":"GPT-5","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":1.25,"output":10,"cache_read":0.13},"limit":{"context":400000,"output":128000}},"glm-4.7-flash":{"id":"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-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":200000,"output":128000}},"gemini-2.5-flash-image-preview":{"id":"gemini-2.5-flash-image-preview","name":"Gemini 2.5 Flash Image (Preview)","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":2.5},"limit":{"context":32768,"output":32768}},"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,"cost":{"input":0.15,"output":0.75},"limit":{"context":131072,"output":32766}},"gpt-5-chat-latest":{"id":"gpt-5-chat-latest","name":"GPT-5 Chat Latest","family":"gpt","attachment":true,"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}},"claude-opus-4-20250514":{"id":"claude-opus-4-20250514","name":"Claude Opus 4 (2025-05-14)","family":"claude","attachment":false,"reasoning":true,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":15,"output":75,"cache_read":1.5},"limit":{"context":200000,"output":16384}},"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,"temperature":true,"release_date":"2025-01-26","last_updated":"2025-01-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.13,"output":0.4},"limit":{"context":32768,"output":8192}},"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,"cost":{"input":0.01,"output":0.03},"limit":{"context":32768,"output":8192}},"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,"cost":{"input":0.22,"output":0.22},"limit":{"context":128000,"output":2048},"status":"beta"},"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,"cost":{"input":0.51,"output":0.74},"limit":{"context":8192,"output":8000}},"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,"cost":{"input":0.8,"output":2.4},"limit":{"context":64000,"output":16384},"status":"beta"},"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,"cost":{"input":1.1,"output":4.5,"cache_read":0.22},"limit":{"context":128000,"output":16384}},"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":"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":1000000,"output":16384}},"devstral-small-2507":{"id":"devstral-small-2507","name":"Devstral Small 1.1","family":"mistral","attachment":false,"reasoning":false,"tool_call":false,"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.1,"output":0.3},"limit":{"context":131072,"output":16384}},"kimi-k2-thinking":{"id":"kimi-k2-thinking","name":"Kimi K2 Thinking","family":"kimi","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"]},"open_weights":false,"cost":{"input":0.6,"output":2.5,"cache_read":0.15},"limit":{"context":262144,"output":262144}},"gemini-2.0-flash-lite":{"id":"gemini-2.0-flash-lite","name":"Gemini 2.0 Flash Lite","family":"gemini","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"]},"open_weights":false,"cost":{"input":0.08,"output":0.3},"limit":{"context":1048576,"output":8192},"status":"deprecated"},"gpt-4.1-mini":{"id":"gpt-4.1-mini","name":"GPT-4.1 Mini","family":"gpt","attachment":true,"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"]},"open_weights":false,"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"limit":{"context":1000000,"output":16384}},"gpt-5.1-codex":{"id":"gpt-5.1-codex","name":"GPT-5.1 Codex","family":"gpt","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"]},"open_weights":false,"cost":{"input":1.25,"output":10},"limit":{"context":400000,"output":272000}},"grok-3":{"id":"grok-3","name":"Grok-3","family":"grok","attachment":false,"reasoning":false,"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}},"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,"structured_output":true,"temperature":true,"release_date":"2025-10-10","last_updated":"2025-10-10","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}},"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,"cost":{"input":0.2,"output":0.2},"limit":{"context":262144,"output":16384}},"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,"cost":{"input":0.07,"output":0.33},"limit":{"context":128000,"output":16384},"status":"beta"},"sonar-reasoning-pro":{"id":"sonar-reasoning-pro","name":"Sonar Reasoning Pro","family":"sonar","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"]},"open_weights":false,"cost":{"input":2,"output":8},"limit":{"context":128000,"output":16384}},"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,"cost":{"input":15,"output":75,"cache_read":1.5},"limit":{"context":200000,"output":4096}}}},"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-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":0.1,"output":0.4,"cache_read":0.025},"limit":{"context":1048576,"output":65536}},"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,"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-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":2,"output":12,"cache_read":0.2,"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"limit":{"context":1048576,"output":65536}},"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,"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}},"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,"cost":{"input":2,"output":12,"cache_read":0.2,"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"limit":{"context":1048576,"output":65536}},"gemini-2.0-flash":{"id":"gemini-2.0-flash","name":"Gemini 2.0 Flash","family":"gemini-flash","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"]},"open_weights":false,"cost":{"input":0.15,"output":0.6,"cache_read":0.025},"limit":{"context":1048576,"output":8192}},"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,"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}},"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":"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":1048576,"output":65536}},"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,"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.15,"output":0.6,"cache_read":0.0375},"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"]},"open_weights":false,"cost":{"input":0.15,"output":0},"limit":{"context":2048,"output":3072}},"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,"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}},"gemini-flash-latest":{"id":"gemini-flash-latest","name":"Gemini Flash Latest","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,"cost":{"input":0.3,"output":2.5,"cache_read":0.075,"cache_write":0.383},"limit":{"context":1048576,"output":65536}},"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,"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}},"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,"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}},"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-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.383},"limit":{"context":1048576,"output":65536}},"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,"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}},"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,"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-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,"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}},"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"]},"open_weights":false,"cost":{"input":0.075,"output":0.3},"limit":{"context":1048576,"output":8192}},"zai-org/glm-5-maas":{"id":"zai-org/glm-5-maas","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.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"}},"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,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-06","last_updated":"2026-01-06","modalities":{"input":["text","pdf"],"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"}},"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":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,"cost":{"input":0.56,"output":1.68,"cache_read":0.056},"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"}},"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":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,"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"}},"openai/gpt-oss-120b-maas":{"id":"openai/gpt-oss-120b-maas","name":"GPT OSS 120B","family":"gpt-oss","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.09,"output":0.36},"limit":{"context":131072,"output":32768}},"openai/gpt-oss-20b-maas":{"id":"openai/gpt-oss-20b-maas","name":"GPT OSS 20B","family":"gpt-oss","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.07,"output":0.25},"limit":{"context":131072,"output":32768}},"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":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,"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"}},"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":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,"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"}},"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":true,"structured_output":true,"temperature":true,"release_date":"2025-08-13","last_updated":"2025-08-13","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"}},"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,"temperature":true,"knowledge":"2024-08","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.6,"output":2.5},"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"}}}},"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,"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.06,"output":0.4},"limit":{"context":131072,"output":131072}},"@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.5,"output":1.5},"limit":{"context":256000,"output":256000}},"@cf/openai/gpt-oss-20b":{"id":"@cf/openai/gpt-oss-20b","name":"GPT OSS 20B","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.2,"output":0.3},"limit":{"context":128000,"output":16384}},"@cf/openai/gpt-oss-120b":{"id":"@cf/openai/gpt-oss-120b","name":"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,"cost":{"input":0.35,"output":0.75},"limit":{"context":128000,"output":16384}},"@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.27,"output":0.85},"limit":{"context":128000,"output":16384}},"@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,"temperature":true,"release_date":"2025-12-15","last_updated":"2025-12-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.1,"output":0.3},"limit":{"context":256000,"output":16384}},"@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,"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}}}},"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":true,"temperature":true,"knowledge":"2024-06","release_date":"2024-06-27","last_updated":"2024-06-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.2,"output":0.2},"limit":{"context":8192,"output":8192},"status":"deprecated"},"mistral-saba-24b":{"id":"mistral-saba-24b","name":"Mistral Saba 24B","family":"mistral","attachment":false,"reasoning":false,"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.79,"output":0.79},"limit":{"context":32768,"output":32768},"status":"deprecated"},"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":"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"},"llama-guard-3-8b":{"id":"llama-guard-3-8b","name":"Llama Guard 3 8B","family":"llama","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,"cost":{"input":0.2,"output":0.2},"limit":{"context":8192,"output":8192},"status":"deprecated"},"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":"2023-12","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":131072,"output":32768}},"allam-2-7b":{"id":"allam-2-7b","name":"ALLaM-2-7b","family":"allam","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-09","release_date":"2024-09","last_updated":"2024-09","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":4096,"output":4096}},"whisper-large-v3":{"id":"whisper-large-v3","name":"Whisper Large V3","family":"whisper","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"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":448,"output":448}},"llama-3.1-8b-instant":{"id":"llama-3.1-8b-instant","name":"Llama 3.1 8B Instant","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.05,"output":0.08},"limit":{"context":131072,"output":131072}},"llama3-70b-8192":{"id":"llama3-70b-8192","name":"Llama 3 70B","family":"llama","attachment":false,"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"},"qwen-qwq-32b":{"id":"qwen-qwq-32b","name":"Qwen QwQ 32B","family":"qwen","attachment":false,"reasoning":true,"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,"cost":{"input":0.29,"output":0.39},"limit":{"context":131072,"output":16384},"status":"deprecated"},"whisper-large-v3-turbo":{"id":"whisper-large-v3-turbo","name":"Whisper Large v3 Turbo","family":"whisper","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-10","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":448,"output":448}},"llama3-8b-8192":{"id":"llama3-8b-8192","name":"Llama 3 8B","family":"llama","attachment":false,"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.05,"output":0.08},"limit":{"context":8192,"output":8192},"status":"deprecated"},"canopylabs/orpheus-arabic-saudi":{"id":"canopylabs/orpheus-arabic-saudi","name":"Orpheus Arabic Saudi","family":"canopylabs","attachment":false,"reasoning":false,"tool_call":false,"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":40,"output":0},"limit":{"context":4000,"output":50000}},"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"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":4000,"output":50000}},"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,"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.11,"output":0.34},"limit":{"context":131072,"output":8192}},"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,"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.03,"output":0.03},"limit":{"context":512,"output":512}},"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,"temperature":true,"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.2},"limit":{"context":131072,"output":1024},"status":"deprecated"},"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":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"},"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,"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}},"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-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}},"openai/gpt-oss-safeguard-20b":{"id":"openai/gpt-oss-safeguard-20b","name":"Safety GPT OSS 20B","family":"gpt-oss","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.075,"output":0.3,"cache_read":0.037},"limit":{"context":131072,"output":65536}},"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,"cost":{"input":0.15,"output":0.6},"limit":{"context":131072,"output":65536}},"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,"cost":{"input":0.29,"output":0.59},"limit":{"context":131072,"output":40960}},"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,"output":0},"limit":{"context":131072,"output":8192}},"groq/compound-mini":{"id":"groq/compound-mini","name":"Compound Mini","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,"output":0},"limit":{"context":131072,"output":8192}},"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,"cost":{"input":1,"output":3},"limit":{"context":131072,"output":16384},"status":"deprecated"},"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,"cost":{"input":1,"output":3},"limit":{"context":262144,"output":16384}}}},"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,"cost":{"input":0.15,"output":0.15},"limit":{"context":128000,"output":128000}},"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":1.25,"output":10,"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"]},"open_weights":false,"cost":{"input":1.75,"output":14,"cache_read":0.175},"limit":{"context":128000,"output":16384}},"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":1.5,"output":6,"cache_read":0.375},"limit":{"context":200000,"output":100000}},"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"]},"open_weights":true,"cost":{"input":0.08,"output":0.32,"input_audio":4},"limit":{"context":128000,"output":4096}},"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":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}},"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,"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.78},"limit":{"context":128000,"output":8192}},"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.2,"output":0.5,"cache_read":0.05},"limit":{"context":128000,"input":128000,"output":8192},"status":"beta"},"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":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":4096,"output":1024}},"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}},"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":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"}},"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":"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}},"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"}},"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":"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}},"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,"cost":{"input":1.14,"output":4.56},"limit":{"context":131072,"output":131072}},"gpt-5-chat":{"id":"gpt-5-chat","name":"GPT-5 Chat","family":"gpt-codex","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}},"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":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}},"gpt-5.3-chat":{"id":"gpt-5.3-chat","name":"GPT-5.3 Chat","family":"gpt-codex","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"]},"open_weights":false,"cost":{"input":1.75,"output":14,"cache_read":0.175},"limit":{"context":128000,"output":16384}},"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}},"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.13,"output":0},"limit":{"context":8191,"output":3072}},"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-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}},"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.25,"output":2,"cache_read":0.03},"limit":{"context":272000,"output":128000}},"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.05,"output":0.4,"cache_read":0.01},"limit":{"context":272000,"output":128000}},"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"]},"open_weights":true,"cost":{"input":2.68,"output":3.54},"limit":{"context":8192,"output":2048}},"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"]},"open_weights":true,"cost":{"input":0.15,"output":0.6},"limit":{"context":8192,"output":2048}},"gpt-5.3-codex":{"id":"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"]},"open_weights":false,"cost":{"input":1.75,"output":14,"cache_read":0.175},"limit":{"context":400000,"output":128000}},"gpt-4-turbo":{"id":"gpt-4-turbo","name":"GPT-4 Turbo","family":"gpt","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"]},"open_weights":false,"cost":{"input":10,"output":30},"limit":{"context":128000,"output":4096}},"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}},"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":"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}},"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,"cost":{"input":1.35,"output":5.4},"limit":{"context":163840,"output":163840}},"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-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"},"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,"cost":{"input":0.58,"output":1.68},"limit":{"context":128000,"output":128000}},"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}},"mistral-large-2411":{"id":"mistral-large-2411","name":"Mistral Large 24.11","family":"mistral-large","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"]},"open_weights":false,"cost":{"input":2,"output":6},"limit":{"context":128000,"output":32768}},"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-03-31","release_date":"2025-11-18","last_updated":"2025-11-18","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"}},"gpt-4o-mini":{"id":"gpt-4o-mini","name":"GPT-4o mini","family":"gpt-mini","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"]},"open_weights":false,"cost":{"input":0.15,"output":0.6,"cache_read":0.08},"limit":{"context":128000,"output":16384}},"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}},"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,"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}},"cohere-command-a":{"id":"cohere-command-a","name":"Command A","family":"command-a","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}},"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,"cost":{"input":0.37,"output":0.37},"limit":{"context":128000,"output":8192}},"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,"cost":{"input":5.33,"output":16},"limit":{"context":128000,"output":32768}},"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":"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}},"gpt-4-turbo-vision":{"id":"gpt-4-turbo-vision","name":"GPT-4 Turbo Vision","family":"gpt","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"]},"open_weights":false,"cost":{"input":10,"output":30},"limit":{"context":128000,"output":4096}},"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":1.1,"output":4.4,"cache_read":0.28},"limit":{"context":200000,"output":100000}},"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.2,"output":1.25,"cache_read":0.02},"limit":{"context":400000,"input":272000,"output":128000}},"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}},"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}},"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":"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}},"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,"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.5,"output":1.5},"limit":{"context":16384,"output":16384}},"o1-preview":{"id":"o1-preview","name":"o1-preview","family":"o","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}},"cohere-embed-v3-multilingual":{"id":"cohere-embed-v3-multilingual","name":"Embed v3 Multilingual","family":"cohere-embed","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}},"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":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":2,"output":6},"limit":{"context":262000,"output":8192},"status":"beta"},"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}},"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":"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":272000,"output":128000}},"grok-4-fast-reasoning":{"id":"grok-4-fast-reasoning","name":"Grok 4 Fast (Reasoning)","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.2,"output":0.5,"cache_read":0.05},"limit":{"context":2000000,"output":30000}},"o1":{"id":"o1","name":"o1","family":"o","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}},"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}},"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":30,"output":180},"limit":{"context":400000,"input":272000,"output":128000}},"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}},"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,"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":1,"output":2},"limit":{"context":16384,"output":16384}},"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}},"text-embedding-3-small":{"id":"text-embedding-3-small","name":"text-embedding-3-small","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.02,"output":0},"limit":{"context":8191,"output":1536}},"deepseek-v3.1":{"id":"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":true,"cost":{"input":0.56,"output":1.68},"limit":{"context":131072,"output":131072}},"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":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"}},"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,"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}},"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":"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}},"grok-4":{"id":"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,"cost":{"input":3,"output":15,"reasoning":15,"cache_read":0.75},"limit":{"context":256000,"output":64000}},"phi-4-mini-reasoning":{"id":"phi-4-mini-reasoning","name":"Phi-4-mini-reasoning","family":"phi","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"]},"open_weights":true,"cost":{"input":0.075,"output":0.3},"limit":{"context":128000,"output":4096}},"gpt-4":{"id":"gpt-4","name":"GPT-4","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"]},"open_weights":false,"cost":{"input":60,"output":120},"limit":{"context":8192,"output":8192}},"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,"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}},"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}},"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":2.5,"output":15,"cache_read":0.25},"limit":{"context":400000,"input":272000,"output":128000}},"phi-4-mini":{"id":"phi-4-mini","name":"Phi-4-mini","family":"phi","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}},"grok-4-20-reasoning":{"id":"grok-4-20-reasoning","name":"Grok 4.20 (Reasoning)","family":"grok","attachment":false,"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":2,"output":6},"limit":{"context":262000,"output":8192},"status":"beta"},"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"]},"open_weights":false,"cost":{"input":1.5,"output":2},"limit":{"context":4096,"output":4096}},"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"]},"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":200000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"}},"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,"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}},"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"]},"open_weights":false,"cost":{"input":0.1,"output":0.4,"cache_read":0.03},"limit":{"context":1047576,"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"]},"open_weights":false,"cost":{"input":0.3,"output":0.5,"reasoning":0.5,"cache_read":0.075},"limit":{"context":131072,"output":8192}},"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,"cache_read":0.5},"limit":{"context":200000,"output":100000}},"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}},"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-4o":{"id":"gpt-4o","name":"GPT-4o","family":"gpt","attachment":true,"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"]},"open_weights":false,"cost":{"input":2.5,"output":10,"cache_read":1.25},"limit":{"context":128000,"output":16384}},"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,"cost":{"input":0.17,"output":0.68},"limit":{"context":128000,"output":4096}},"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}},"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,"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}},"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"]},"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"}},"phi-4":{"id":"phi-4","name":"Phi-4","family":"phi","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}},"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":1.25,"output":10,"cache_read":0.13},"limit":{"context":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"]},"open_weights":false,"cost":{"input":60,"output":120},"limit":{"context":32768,"output":32768}},"cohere-embed-v3-english":{"id":"cohere-embed-v3-english","name":"Embed v3 English","family":"cohere-embed","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}},"phi-4-reasoning-plus":{"id":"phi-4-reasoning-plus","name":"Phi-4-reasoning-plus","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}},"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,"cost":{"input":0.4,"output":2},"limit":{"context":128000,"output":128000}},"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":1.5,"output":2},"limit":{"context":4096,"output":4096}},"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,"cost":{"input":1.35,"output":5.4},"limit":{"context":163840,"output":163840}},"gpt-4.1":{"id":"gpt-4.1","name":"GPT-4.1","family":"gpt","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"]},"open_weights":false,"cost":{"input":2,"output":8,"cache_read":0.5},"limit":{"context":1047576,"output":32768}},"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,"cost":{"input":0.6,"output":2.5,"cache_read":0.15},"limit":{"context":262144,"output":262144}},"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"]},"open_weights":false,"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"limit":{"context":1047576,"output":32768}},"gpt-5.1-codex":{"id":"gpt-5.1-codex","name":"GPT-5.1 Codex","family":"gpt-codex","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}},"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"]},"open_weights":false,"cost":{"input":0.3,"output":0.9},"limit":{"context":256000,"output":256000}},"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}},"grok-3":{"id":"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,"cost":{"input":3,"output":15,"cache_read":0.75},"limit":{"context":131072,"output":8192}},"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":"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.5,"cache_read":0.05},"limit":{"context":2000000,"output":30000}},"mai-ds-r1":{"id":"mai-ds-r1","name":"MAI-DS-R1","family":"mai","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}}}},"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":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":3,"output":15,"cache_read":0.75,"cache_write":15},"limit":{"context":256000,"output":64000}},"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":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.03,"output":0.14},"limit":{"context":131072,"output":131072}},"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.25,"output":2,"cache_read":0.025},"limit":{"context":400000,"output":128000}},"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.05,"output":0.4,"cache_read":0.005},"limit":{"context":400000,"output":128000}},"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,"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}},"openai/gpt-5":{"id":"openai/gpt-5","name":"GPT-5","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"]},"open_weights":false,"cost":{"input":1.25,"output":10,"cache_read":0.125},"limit":{"context":400000,"output":128000}},"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,"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-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,"cost":{"input":2,"output":8,"cache_read":0.5},"limit":{"context":1047576,"output":32768}},"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"},"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}},"qwen/qwen3-coder":{"id":"qwen/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.3,"output":1.2},"limit":{"context":262144,"output":66536}},"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-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":1.25,"output":10,"cache_read":0.31},"limit":{"context":1048576,"output":65536}},"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":2.5,"cache_read":0.0375},"limit":{"context":1048576,"output":65536}},"moonshotai/kimi-k2":{"id":"moonshotai/kimi-k2","name":"Kimi K2","family":"kimi","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":0.55,"output":2.2},"limit":{"context":131072,"output":32768}},"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}},"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,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":64000}}}},"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":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}},"Qwen/Qwen3-VL-235B-A22B-Instruct-FP8":{"id":"Qwen/Qwen3-VL-235B-A22B-Instruct-FP8","name":"Qwen3-VL 235B","family":"qwen","attachment":true,"reasoning":false,"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}},"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":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}},"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,"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}},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT-OSS 120B","family":"gpt","attachment":false,"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"]},"open_weights":true,"cost":{"input":0.49,"output":0.71},"limit":{"context":131000,"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"]},"open_weights":true,"cost":{"input":0.49,"output":0.71},"limit":{"context":128000,"output":8192}},"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,"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}},"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,"temperature":false,"release_date":"2023-12-11","last_updated":"2023-12-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.02,"output":0.02},"limit":{"context":4096,"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":{"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","video"],"output":["text"]},"open_weights":true,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":262144,"output":32768}},"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}},"hunyuan-turbos":{"id":"hunyuan-turbos","name":"Hunyuan-TurboS","family":"hunyuan","attachment":false,"reasoning":false,"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,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":131072,"output":16384}},"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"]},"open_weights":false,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":131072,"output":16384}},"hunyuan-2.0-instruct":{"id":"hunyuan-2.0-instruct","name":"Tencent HY 2.0 Instruct","family":"hunyuan","attachment":false,"reasoning":false,"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,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":131072,"output":16384}},"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}},"tc-code-latest":{"id":"tc-code-latest","name":"Auto","family":"auto","attachment":false,"reasoning":false,"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,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":131072,"output":16384}},"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,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":131072,"output":16384}}}},"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,"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}},"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}},"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}},"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-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}}}},"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-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.4,"cache_read":0.025},"limit":{"context":1048576,"output":65536}},"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":1.25,"output":10,"cache_read":0.31},"limit":{"context":1048576,"output":65536}},"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":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}},"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":2,"output":12,"cache_read":0.2,"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"limit":{"context":1048576,"output":65536}},"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,"cost":{"input":0.1,"output":0.4,"cache_read":0.025},"limit":{"context":1048576,"output":65536}},"gemini-1.5-flash":{"id":"gemini-1.5-flash","name":"Gemini 1.5 Flash","family":"gemini-flash","attachment":true,"reasoning":false,"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":0.075,"output":0.3,"cache_read":0.01875},"limit":{"context":1000000,"output":8192}},"gemini-1.5-pro":{"id":"gemini-1.5-pro","name":"Gemini 1.5 Pro","family":"gemini-pro","attachment":true,"reasoning":false,"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":1.25,"output":5,"cache_read":0.3125},"limit":{"context":1000000,"output":8192}},"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,"cost":{"input":0,"output":0},"limit":{"context":8192,"output":2000}},"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,"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"cache_write":1},"limit":{"context":1048576,"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,"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}},"limit":{"context":1048576,"output":65536}},"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,"cost":{"input":0.1,"output":0.4,"cache_read":0.025},"limit":{"context":1048576,"output":8192}},"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,"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}},"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":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-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":"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}},"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,"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.15,"output":0.6,"cache_read":0.0375},"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"]},"open_weights":false,"cost":{"input":0.15,"output":0},"limit":{"context":2048,"output":3072}},"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,"cost":{"input":1.25,"output":10,"cache_read":0.31},"limit":{"context":1048576,"output":65536}},"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,"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-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":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":8192}},"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":"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}},"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,"cost":{"input":0.3,"output":30,"cache_read":0.075},"limit":{"context":32768,"output":32768}},"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,"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,"input_audio":0.3},"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"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":32768,"output":8192}},"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,"cost":{"input":0.3,"output":2.5,"cache_read":0.075,"input_audio":1},"limit":{"context":1048576,"output":65536}},"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,"cost":{"input":0,"output":0},"limit":{"context":8192,"output":2000}},"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,"knowledge":"2025-01","release_date":"2026-02-26","last_updated":"2026-02-26","modalities":{"input":["text","image","pdf"],"output":["text","image"]},"open_weights":false,"cost":{"input":0.25,"output":60},"limit":{"context":131072,"output":32768}},"gemma-3-4b-it":{"id":"gemma-3-4b-it","name":"Gemma 3 4B","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}},"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,"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}},"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":false,"knowledge":"2025-01","release_date":"2025-05-01","last_updated":"2025-05-01","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"cost":{"input":1,"output":20},"limit":{"context":8000,"output":16000}},"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,"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-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":"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}},"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,"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}},"gemma-4-26b-it":{"id":"gemma-4-26b-it","name":"Gemma 4 26B","family":"gemma","attachment":false,"reasoning":true,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":8192}},"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}},"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":true,"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}},"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,"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}},"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,"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":0.075,"output":0.3},"limit":{"context":1048576,"output":8192}}}},"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":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/minimax-m25":{"id":"public/minimax-m25","name":"MiniMax M2.5","family":"minimax","attachment":false,"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"]},"open_weights":false,"cost":{"input":0.29,"output":1.16},"limit":{"context":204800,"output":131072}},"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}}}},"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":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}},"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-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}},"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,"cost":{"input":1.15,"output":8,"cache_read":0.15},"limit":{"context":262144,"output":262144}},"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-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}},"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}},"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}}}},"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":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"]},"open_weights":true,"cost":{"input":0.7,"output":2.3},"limit":{"context":128000,"output":8192}},"BAAI/bge-reranker-v2-m3":{"id":"BAAI/bge-reranker-v2-m3","name":"bge-reranker-v2-m3","family":"bge","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"]},"open_weights":true,"cost":{"input":0.1,"output":0.1},"limit":{"context":512,"output":512}},"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":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"]},"open_weights":true,"cost":{"input":0.3,"output":0.3},"limit":{"context":32000,"output":8192}},"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,"knowledge":"2023-12","release_date":"2025-04-27","last_updated":"2025-04-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.9,"output":0.9},"limit":{"context":128000,"output":8192}},"KBLab/kb-whisper-large":{"id":"KBLab/kb-whisper-large","name":"KB-Whisper-Large","family":"whisper","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"]},"open_weights":true,"cost":{"input":3,"output":3},"limit":{"context":480000,"output":4800}},"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,"knowledge":"2025-08","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.3,"output":0.9},"limit":{"context":128000,"output":8192}},"intfloat/multilingual-e5-large-instruct":{"id":"intfloat/multilingual-e5-large-instruct","name":"Multilingual-E5-large-instruct","family":"text-embedding","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"]},"open_weights":true,"cost":{"input":0.02,"output":0},"limit":{"context":512,"output":1024}},"intfloat/multilingual-e5-large":{"id":"intfloat/multilingual-e5-large","name":"Multilingual-E5-large","family":"text-embedding","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"]},"open_weights":true,"cost":{"input":0.02,"output":0},"limit":{"context":512,"output":1024}}}},"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":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}},"deepseek/deepseek-r1":{"id":"deepseek/deepseek-r1","name":"DeepSeek-R1","family":"deepseek-thinking","attachment":false,"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}},"deepseek/deepseek-r1-0528":{"id":"deepseek/deepseek-r1-0528","name":"DeepSeek-R1-0528","family":"deepseek-thinking","attachment":false,"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}},"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":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}},"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}},"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":true,"tool_call":true,"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,"output":0},"limit":{"context":128000,"output":4096}},"microsoft/phi-3-medium-4k-instruct":{"id":"microsoft/phi-3-medium-4k-instruct","name":"Phi-3-medium instruct (4k)","family":"phi","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"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":4096,"output":1024}},"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":true,"tool_call":true,"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,"output":0},"limit":{"context":128000,"output":4096}},"microsoft/phi-3-mini-128k-instruct":{"id":"microsoft/phi-3-mini-128k-instruct","name":"Phi-3-mini instruct (128k)","family":"phi","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"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"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,"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,"output":0},"limit":{"context":128000,"output":4096}},"microsoft/phi-4-reasoning":{"id":"microsoft/phi-4-reasoning","name":"Phi-4-Reasoning","family":"phi","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"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"microsoft/phi-3-small-8k-instruct":{"id":"microsoft/phi-3-small-8k-instruct","name":"Phi-3-small instruct (8k)","family":"phi","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"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":8192,"output":2048}},"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":true,"tool_call":true,"temperature":true,"knowledge":"2023-10","release_date":"2024-08-20","last_updated":"2024-08-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"microsoft/phi-3-mini-4k-instruct":{"id":"microsoft/phi-3-mini-4k-instruct","name":"Phi-3-mini instruct (4k)","family":"phi","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"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":4096,"output":1024}},"microsoft/phi-4-mini-reasoning":{"id":"microsoft/phi-4-mini-reasoning","name":"Phi-4-mini-reasoning","family":"phi","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"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"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,"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,"output":0},"limit":{"context":128000,"output":4096}},"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,"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,"output":0},"limit":{"context":128000,"output":4096}},"microsoft/phi-4":{"id":"microsoft/phi-4","name":"Phi-4","family":"phi","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"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":16000,"output":4096}},"microsoft/phi-4-multimodal-instruct":{"id":"microsoft/phi-4-multimodal-instruct","name":"Phi-4-multimodal-instruct","family":"phi","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","image","audio"],"output":["text"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"microsoft/mai-ds-r1":{"id":"microsoft/mai-ds-r1","name":"MAI-DS-R1","family":"mai","attachment":false,"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":false,"cost":{"input":0,"output":0},"limit":{"context":65536,"output":8192}},"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,"temperature":true,"knowledge":"2024-03","release_date":"2024-08-01","last_updated":"2024-08-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"cohere/cohere-command-a":{"id":"cohere/cohere-command-a","name":"Cohere Command A","family":"command-a","attachment":false,"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"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"cohere/cohere-command-r-plus":{"id":"cohere/cohere-command-r-plus","name":"Cohere Command R+","family":"command-r","attachment":false,"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"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"cohere/cohere-command-r":{"id":"cohere/cohere-command-r","name":"Cohere Command R","family":"command-r","attachment":false,"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"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"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,"temperature":true,"knowledge":"2024-03","release_date":"2024-08-01","last_updated":"2024-08-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":4096}},"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-10","release_date":"2024-12-09","last_updated":"2024-12-09","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":8192}},"xai/grok-3":{"id":"xai/grok-3","name":"Grok 3","family":"grok","attachment":false,"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"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":8192}},"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}},"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":"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,"output":0},"limit":{"context":128000,"output":16384}},"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-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/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}},"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-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":"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/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,"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"]},"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,"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,"output":0},"limit":{"context":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":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}},"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,"temperature":true,"knowledge":"2024-12","release_date":"2025-01-31","last_updated":"2025-01-31","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":8192}},"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,"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,"output":0},"limit":{"context":128000,"output":32768}},"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,"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":32768}},"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,"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,"output":0},"limit":{"context":8192,"output":2048}},"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,"temperature":true,"knowledge":"2023-12","release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":8192}},"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,"temperature":true,"knowledge":"2023-12","release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":8192}},"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":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,"output":0},"limit":{"context":128000,"output":32768}},"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":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,"output":0},"limit":{"context":128000,"output":32768}},"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,"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,"output":0},"limit":{"context":8192,"output":2048}},"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,"temperature":true,"knowledge":"2024-12","release_date":"2025-01-31","last_updated":"2025-01-31","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":8192}},"core42/jais-30b-chat":{"id":"core42/jais-30b-chat","name":"JAIS 30b Chat","family":"jais","attachment":false,"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}},"mistral-ai/mistral-nemo":{"id":"mistral-ai/mistral-nemo","name":"Mistral Nemo","family":"mistral-nemo","attachment":false,"reasoning":true,"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}},"mistral-ai/ministral-3b":{"id":"mistral-ai/ministral-3b","name":"Ministral 3B","family":"ministral","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}},"mistral-ai/mistral-large-2411":{"id":"mistral-ai/mistral-large-2411","name":"Mistral Large 24.11","family":"mistral-large","attachment":false,"reasoning":true,"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,"output":0},"limit":{"context":128000,"output":32768}},"mistral-ai/mistral-small-2503":{"id":"mistral-ai/mistral-small-2503","name":"Mistral Small 3.1","family":"mistral-small","attachment":false,"reasoning":true,"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,"output":0},"limit":{"context":128000,"output":32768}},"mistral-ai/mistral-medium-2505":{"id":"mistral-ai/mistral-medium-2505","name":"Mistral Medium 3 (25.05)","family":"mistral-medium","attachment":false,"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"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":128000,"output":32768}},"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"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":32000,"output":8192}}}},"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,"temperature":true,"knowledge":"2024-10","release_date":"2025-12-05","last_updated":"2025-12-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.15,"output":0.15},"limit":{"context":32768,"output":32768}},"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,"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":130000}},"Qwen/Qwen3-Coder-Next-FP8":{"id":"Qwen/Qwen3-Coder-Next-FP8","name":"Qwen3 Coder Next FP8","family":"qwen","attachment":false,"reasoning":true,"tool_call":true,"temperature":true,"knowledge":"2026-02-03","release_date":"2026-02-03","last_updated":"2026-02-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.5,"output":1.2},"limit":{"context":262144,"output":262144}},"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":true,"tool_call":true,"temperature":true,"knowledge":"2025-07","release_date":"2025-07-25","last_updated":"2025-07-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.2,"output":0.6},"limit":{"context":262144,"output":262144}},"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,"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":262144}},"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,"knowledge":"2025-11","release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":1.4,"output":4.4},"limit":{"context":202752,"output":131072}},"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,"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.88,"output":0.88},"limit":{"context":131072,"output":131072}},"deepseek-ai/DeepSeek-V3":{"id":"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":131072,"output":131072}},"deepseek-ai/DeepSeek-R1":{"id":"deepseek-ai/DeepSeek-R1","name":"DeepSeek R1","family":"deepseek-thinking","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}},"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-08","release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"cost":{"input":0.6,"output":1.7},"limit":{"context":131072,"output":131072}},"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":"2025-08","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":131072}},"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-01","release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.2,"output":0.5},"limit":{"context":262144,"output":131072}},"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":"2026-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"cost":{"input":0.5,"output":2.8},"limit":{"context":262144,"output":262144}},"MiniMaxAI/MiniMax-M2.5":{"id":"MiniMaxAI/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,"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"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":{"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","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}},"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,"cost":{"input":0.07,"output":0.43,"context_over_200k":{"input":0.07,"output":0.43}},"limit":{"context":1048576,"output":65536}},"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-09-30","release_date":"2025-09-15","last_updated":"2025-09-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0.04,"output":0.29},"limit":{"context":200000,"output":64000}},"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":"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.57,"output":3.43},"limit":{"context":1000000,"output":65000}},"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,"cost":{"input":0.43,"output":2.14},"limit":{"context":200000,"output":64000}},"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-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":2},"limit":{"context":400000,"input":272000,"output":128000}},"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"],"output":["text"]},"open_weights":false,"cost":{"input":0.14,"output":1.14},"limit":{"context":400000,"input":272000,"output":128000}},"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-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","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}},"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-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}}}},"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,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":0.3},"limit":{"context":200000,"output":4096}},"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,"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"limit":{"context":200000,"output":64000}},"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,"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"limit":{"context":200000,"output":64000}},"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":"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}},"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-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}},"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,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":8192}},"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"]},"open_weights":false,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":1000000,"output":64000}},"claude-opus-4-0":{"id":"claude-opus-4-0","name":"Claude Opus 4 (latest)","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,"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"limit":{"context":200000,"output":32000}},"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":"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}},"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,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":64000}},"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-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}},"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,"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}},"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"]},"open_weights":false,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":64000}},"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,"temperature":true,"knowledge":"2024-04-30","release_date":"2024-06-20","last_updated":"2024-06-20","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}},"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"]},"open_weights":false,"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"limit":{"context":200000,"output":64000}},"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,"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"limit":{"context":200000,"output":32000}},"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":1,"output":5,"cache_read":0.1,"cache_write":1.25},"limit":{"context":200000,"output":64000}},"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":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":64000}},"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-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},"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"}}}}}},"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":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":64000}},"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"]},"open_weights":false,"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"limit":{"context":200000,"output":64000}},"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"]},"open_weights":false,"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"limit":{"context":200000,"output":32000}}}},"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,"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,"output":0},"limit":{"context":262144,"output":32768}},"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,"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,"output":0},"limit":{"context":262144,"output":16384}},"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,"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,"output":0},"limit":{"context":262144,"output":131072}},"Qwen/Qwen3-Coder-30B-A3B-Instruct":{"id":"Qwen/Qwen3-Coder-30B-A3B-Instruct","name":"Qwen3 Coder 30B A3B Instruct","family":"qwen","attachment":false,"reasoning":false,"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,"cost":{"input":0,"output":0},"limit":{"context":262144,"output":65536}},"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,"output":0},"limit":{"context":262144,"output":131072}},"ZhipuAI/GLM-4.5":{"id":"ZhipuAI/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,"cost":{"input":0,"output":0},"limit":{"context":131072,"output":98304}},"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-07","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":202752,"output":98304}}}},"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-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":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":400000,"input":272000,"output":128000}},"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,"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,"cost":{"input":0,"output":0},"limit":{"context":400000,"input":272000,"output":128000}},"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-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,"cache_read":0,"cache_write":0},"limit":{"context":1000000,"output":64000}},"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,"cost":{"input":0,"output":0},"limit":{"context":400000,"input":272000,"output":128000}},"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-09-30","release_date":"2026-01-22","last_updated":"2026-01-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":400000,"input":272000,"output":128000}},"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,"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"]},"open_weights":false,"cost":{"input":0,"output":0},"limit":{"context":400000,"input":272000,"output":128000}},"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":"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":0,"output":0},"limit":{"context":400000,"input":272000,"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,"temperature":true,"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":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":200000,"output":64000}},"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-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":"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":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":200000,"output":64000}},"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":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}},"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":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,"output":0},"limit":{"context":400000,"input":272000,"output":128000}},"duo-chat-opus-4-5":{"id":"duo-chat-opus-4-5","name":"Agentic Chat (Claude Opus 4.5)","family":"claude-opus","attachment":true,"reasoning":true,"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"]},"open_weights":false,"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"limit":{"context":200000,"output":64000}},"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,"temperature":true,"knowledge":"2025-03-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,"cache_read":0,"cache_write":0},"limit":{"context":1000000,"output":64000}}}},"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-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":true,"cost":{"input":0.4,"output":2,"cache_read":0.08},"limit":{"context":256000,"output":128000}},"mimo-v2-pro":{"id":"mimo-v2-pro","name":"MiMo-V2-Pro","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}},"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,"cost":{"input":0.1,"output":0.3,"cache_read":0.01},"limit":{"context":256000,"output":64000}}}},"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,"cost":{"input":0.045,"output":0.15},"limit":{"context":131072,"output":131072}},"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,"cost":{"input":2.5,"output":1.7},"limit":{"context":262144,"output":262144}},"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,"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}},"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":false,"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}},"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"]},"open_weights":true,"cost":{"input":0.045,"output":0.18},"limit":{"context":131072,"output":16384}},"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,"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}},"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,"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}},"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":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}},"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":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}},"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":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}},"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":false,"temperature":true,"release_date":"2025-06","last_updated":"2026-02-25","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"cost":{"input":0.658,"output":1.11},"limit":{"context":32768,"output":4096}}}},"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-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}},"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,"cost":{"input":0.3,"output":1.2,"cache_read":0.03,"cache_write":0.375},"limit":{"context":204800,"output":131072}},"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.3,"output":1.2,"cache_read":0.06,"cache_write":0.375},"limit":{"context":204800,"output":131072}},"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}},"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":0.3,"output":1.2},"limit":{"context":204800,"output":131072}},"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,"cost":{"input":0.6,"output":2.4,"cache_read":0.06,"cache_write":0.375},"limit":{"context":204800,"output":131072}}}},"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-pro":{"id":"mimo-v2-pro","name":"MiMo-V2-Pro","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":0,"output":0,"cache_read":0},"limit":{"context":1000000,"output":128000}},"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,"cost":{"input":0,"output":0},"limit":{"context":8000,"output":16000}},"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":true,"cost":{"input":0,"output":0,"cache_read":0},"limit":{"context":256000,"output":128000}}}},"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":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","video","pdf"],"output":["text"]},"open_weights":false,"cost":{"input":5,"output":22,"cache_read":1.2,"cache_write":0},"limit":{"context":200000,"output":131072}},"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-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,"cost":{"input":6,"output":24,"cache_read":1.3,"cache_write":0},"limit":{"context":200000,"output":131072}},"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}},"glm-4.5-flash":{"id":"glm-4.5-flash","name":"GLM-4.5-Flash","family":"glm-flash","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,"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}},"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.11,"cache_write":0},"limit":{"context":204800,"output":131072}},"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.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.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,"cost":{"input":0.6,"output":2.2,"cache_read":0.11,"cache_write":0},"limit":{"context":131072,"output":98304}},"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,"cost":{"input":0.07,"output":0.4,"cache_read":0.01,"cache_write":0},"limit":{"context":200000,"output":131072}},"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}}}},"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"]},"open_weights":false,"cost":{"input":0,"output":0,"reasoning":0},"limit":{"context":1000000,"output":64000}},"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}}}}} diff --git a/packages/opencode/src/provider/models.ts b/packages/opencode/src/provider/models.ts index 4b143e18e1..9d5e4d0047 100644 --- a/packages/opencode/src/provider/models.ts +++ b/packages/opencode/src/provider/models.ts @@ -120,7 +120,7 @@ export namespace ModelsDev { const result = await Filesystem.readJson(Flag.KILO_MODELS_PATH ?? filepath).catch(() => {}) if (result) return result // @ts-ignore - const snapshot = await import("./models-snapshot") + const snapshot = await import("./models-snapshot.js") .then((m) => m.snapshot as Record) .catch(() => undefined) if (snapshot) return snapshot diff --git a/packages/opencode/src/pty/index.ts b/packages/opencode/src/pty/index.ts index 55adc8020e..a084dcef02 100644 --- a/packages/opencode/src/pty/index.ts +++ b/packages/opencode/src/pty/index.ts @@ -1,7 +1,7 @@ import { BusEvent } from "@/bus/bus-event" import { Bus } from "@/bus" import { InstanceState } from "@/effect/instance-state" -import { makeRunPromise } from "@/effect/run-service" +import { makeRuntime } from "@/effect/run-service" import { Instance } from "@/project/instance" import { type IPty } from "bun-pty" import z from "zod" @@ -361,7 +361,7 @@ export namespace Pty { }), ) - const runPromise = makeRunPromise(Service, layer) + const { runPromise } = makeRuntime(Service, layer) export async function list() { return runPromise((svc) => svc.list()) diff --git a/packages/opencode/src/question/index.ts b/packages/opencode/src/question/index.ts index a0d62d94b8..f46cdd1081 100644 --- a/packages/opencode/src/question/index.ts +++ b/packages/opencode/src/question/index.ts @@ -2,7 +2,7 @@ import { Deferred, Effect, Layer, Schema, ServiceMap } from "effect" import { Bus } from "@/bus" import { BusEvent } from "@/bus/bus-event" import { InstanceState } from "@/effect/instance-state" -import { makeRunPromise } from "@/effect/run-service" +import { makeRuntime } from "@/effect/run-service" import { SessionID, MessageID } from "@/session/schema" import { Log } from "@/util/log" import z from "zod" @@ -197,7 +197,7 @@ export namespace Question { }), ) - const runPromise = makeRunPromise(Service, layer) + const { runPromise } = makeRuntime(Service, layer) export async function ask(input: { sessionID: SessionID diff --git a/packages/opencode/src/server/projectors.ts b/packages/opencode/src/server/projectors.ts new file mode 100644 index 0000000000..eb85a8017f --- /dev/null +++ b/packages/opencode/src/server/projectors.ts @@ -0,0 +1,28 @@ +import z from "zod" +import sessionProjectors from "../session/projectors" +import { SyncEvent } from "@/sync" +import { Session } from "@/session" +import { SessionTable } from "@/session/session.sql" +import { Database, eq } from "@/storage/db" + +export function initProjectors() { + SyncEvent.init({ + projectors: sessionProjectors, + convertEvent: (type, data) => { + if (type === "session.updated") { + const id = (data as z.infer).sessionID + const row = Database.use((db) => db.select().from(SessionTable).where(eq(SessionTable.id, id)).get()) + + if (!row) return data + + return { + sessionID: id, + info: Session.fromRow(row), + } + } + return data + }, + }) +} + +initProjectors() diff --git a/packages/opencode/src/server/routes/event.ts b/packages/opencode/src/server/routes/event.ts index f34ff05667..178da59949 100644 --- a/packages/opencode/src/server/routes/event.ts +++ b/packages/opencode/src/server/routes/event.ts @@ -6,7 +6,6 @@ import { BusEvent } from "@/bus/bus-event" import { Bus } from "@/bus" import { lazy } from "../../util/lazy" import { AsyncQueue } from "../../util/queue" -import { Instance } from "@/project/instance" const log = Log.create({ service: "server" }) @@ -53,13 +52,6 @@ export const EventRoutes = lazy(() => ) }, 10_000) - const unsub = Bus.subscribeAll((event) => { - q.push(JSON.stringify(event)) - if (event.type === Bus.InstanceDisposed.type) { - stop() - } - }) - const stop = () => { if (done) return done = true @@ -69,6 +61,13 @@ export const EventRoutes = lazy(() => log.info("event disconnected") } + const unsub = Bus.subscribeAll((event) => { + q.push(JSON.stringify(event)) + if (event.type === Bus.InstanceDisposed.type) { + stop() + } + }) + stream.onAbort(stop) try { diff --git a/packages/opencode/src/server/routes/experimental.ts b/packages/opencode/src/server/routes/experimental.ts index a592ad1062..c18a79cd5e 100644 --- a/packages/opencode/src/server/routes/experimental.ts +++ b/packages/opencode/src/server/routes/experimental.ts @@ -115,7 +115,7 @@ export const ExperimentalRoutes = lazy(() => ...errors(400), }, }), - validator("json", Worktree.create.schema), + validator("json", Worktree.CreateInput.optional()), async (c) => { const body = c.req.valid("json") const worktree = await Worktree.create(body) @@ -162,7 +162,7 @@ export const ExperimentalRoutes = lazy(() => ...errors(400), }, }), - validator("json", Worktree.remove.schema), + validator("json", Worktree.RemoveInput), async (c) => { const body = c.req.valid("json") await Worktree.remove(body) @@ -188,7 +188,7 @@ export const ExperimentalRoutes = lazy(() => ...errors(400), }, }), - validator("json", Worktree.reset.schema), + validator("json", Worktree.ResetInput), async (c) => { const body = c.req.valid("json") await Worktree.reset(body) diff --git a/packages/opencode/src/server/routes/global.ts b/packages/opencode/src/server/routes/global.ts index e591efb5bb..6b89466a08 100644 --- a/packages/opencode/src/server/routes/global.ts +++ b/packages/opencode/src/server/routes/global.ts @@ -1,9 +1,9 @@ -import { Hono } from "hono" -import { describeRoute, validator, resolver } from "hono-openapi" +import { Hono, type Context } from "hono" +import { describeRoute, resolver, validator } from "hono-openapi" import { streamSSE } from "hono/streaming" import z from "zod" -import { Bus } from "../../bus" import { BusEvent } from "@/bus/bus-event" +import { SyncEvent } from "@/sync" import { GlobalBus } from "@/bus/global" import { AsyncQueue } from "@/util/queue" import { Instance } from "../../project/instance" @@ -17,6 +17,56 @@ const log = Log.create({ service: "server" }) export const GlobalDisposedEvent = BusEvent.define("global.disposed", z.object({})) +async function streamEvents(c: Context, subscribe: (q: AsyncQueue) => () => void) { + return streamSSE(c, async (stream) => { + const q = new AsyncQueue() + let done = false + + q.push( + JSON.stringify({ + payload: { + type: "server.connected", + properties: {}, + }, + }), + ) + + // Send heartbeat every 10s to prevent stalled proxy streams. + const heartbeat = setInterval(() => { + q.push( + JSON.stringify({ + payload: { + type: "server.heartbeat", + properties: {}, + }, + }), + ) + }, 10_000) + + const stop = () => { + if (done) return + done = true + clearInterval(heartbeat) + unsub() + q.push(null) + log.info("global event disconnected") + } + + const unsub = subscribe(q) + + stream.onAbort(stop) + + try { + for await (const data of q) { + if (data === null) return + await stream.writeSSE({ data }) + } + } finally { + stop() + } + }) +} + export const GlobalRoutes = lazy(() => new Hono() .get( @@ -70,55 +120,58 @@ export const GlobalRoutes = lazy(() => log.info("global event connected") c.header("X-Accel-Buffering", "no") c.header("X-Content-Type-Options", "nosniff") - return streamSSE(c, async (stream) => { - const q = new AsyncQueue() - let done = false - - q.push( - JSON.stringify({ - payload: { - type: "server.connected", - properties: {}, - }, - }), - ) - - // Send heartbeat every 10s to prevent stalled proxy streams. - const heartbeat = setInterval(() => { - q.push( - JSON.stringify({ - payload: { - type: "server.heartbeat", - properties: {}, - }, - }), - ) - }, 10_000) + return streamEvents(c, (q) => { async function handler(event: any) { q.push(JSON.stringify(event)) } GlobalBus.on("event", handler) - - const stop = () => { - if (done) return - done = true - clearInterval(heartbeat) - GlobalBus.off("event", handler) - q.push(null) - log.info("event disconnected") - } - - stream.onAbort(stop) - - try { - for await (const data of q) { - if (data === null) return - await stream.writeSSE({ data }) - } - } finally { - stop() - } + return () => GlobalBus.off("event", handler) + }) + }, + ) + .get( + "/sync-event", + describeRoute({ + summary: "Subscribe to global sync events", + description: "Get global sync events", + operationId: "global.sync-event.subscribe", + responses: { + 200: { + description: "Event stream", + content: { + "text/event-stream": { + schema: resolver( + z + .object({ + payload: SyncEvent.payloads(), + }) + .meta({ + ref: "SyncEvent", + }), + ), + }, + }, + }, + }, + }), + async (c) => { + log.info("global sync event connected") + c.header("X-Accel-Buffering", "no") + c.header("X-Content-Type-Options", "nosniff") + return streamEvents(c, (q) => { + return SyncEvent.subscribeAll(({ def, event }) => { + // TODO: don't pass def, just pass the type (and it should + // be versioned) + q.push( + JSON.stringify({ + payload: { + ...event, + type: SyncEvent.versionedType(def.type, def.version), + }, + }), + ) + }) }) }, ) diff --git a/packages/opencode/src/server/routes/session.ts b/packages/opencode/src/server/routes/session.ts index ada8ffdc7b..8854a45906 100644 --- a/packages/opencode/src/server/routes/session.ts +++ b/packages/opencode/src/server/routes/session.ts @@ -281,14 +281,14 @@ export const SessionRoutes = lazy(() => const sessionID = c.req.valid("param").sessionID const updates = c.req.valid("json") - let session = await Session.get(sessionID) if (updates.title !== undefined) { - session = await Session.setTitle({ sessionID, title: updates.title }) + await Session.setTitle({ sessionID, title: updates.title }) } if (updates.time?.archived !== undefined) { - session = await Session.setArchived({ sessionID, time: updates.time.archived }) + await Session.setArchived({ sessionID, time: updates.time.archived }) } + const session = await Session.get(sessionID) return c.json(session) }, ) diff --git a/packages/opencode/src/server/server.ts b/packages/opencode/src/server/server.ts index dbc0060df4..5c50ed1962 100644 --- a/packages/opencode/src/server/server.ts +++ b/packages/opencode/src/server/server.ts @@ -57,10 +57,13 @@ import { PermissionRoutes } from "./routes/permission" import { GlobalRoutes } from "./routes/global" import { MDNS } from "./mdns" import { lazy } from "@/util/lazy" +import { initProjectors } from "./projectors" // @ts-ignore This global is needed to prevent ai-sdk from logging warnings to stdout https://github.com/vercel/ai/blob/2dc67e0ef538307f21368db32d5a12345d98831b/packages/ai/src/logger/log-warnings.ts#L85 globalThis.AI_SDK_LOG_WARNINGS = false +initProjectors() + export namespace Server { const log = Log.create({ service: "server" }) @@ -117,9 +120,7 @@ export namespace Server { path: c.req.path, }) await next() - if (!skipLogging) { - timer.stop() - } + timer.stop() }) .use( cors({ @@ -561,8 +562,8 @@ export namespace Server { // kilocode_change start - disable external proxy to app.opencode.ai for privacy/security .all("/*", async (c) => { return c.notFound() - }) - // kilocode_change end + }) as unknown as Hono + // kilocode_change end ) } diff --git a/packages/opencode/src/session/compaction.ts b/packages/opencode/src/session/compaction.ts index 072ea1d574..f6145b7a47 100644 --- a/packages/opencode/src/session/compaction.ts +++ b/packages/opencode/src/session/compaction.ts @@ -13,6 +13,7 @@ import { fn } from "@/util/fn" import { Agent } from "@/agent/agent" import { Plugin } from "@/plugin" import { Config } from "@/config/config" +import { NotFoundError } from "@/storage/db" import { ProviderTransform } from "@/provider/transform" import { ModelID, ProviderID } from "@/provider/schema" @@ -60,7 +61,11 @@ export namespace SessionCompaction { const config = await Config.get() if (config.compaction?.prune === false) return log.info("pruning") - const msgs = await Session.messages({ sessionID: input.sessionID }) + const msgs = await Session.messages({ sessionID: input.sessionID }).catch((err) => { + if (NotFoundError.isInstance(err)) return undefined + throw err + }) + if (!msgs) return let total = 0 let pruned = 0 const toPrune = [] diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts index c1d33215bf..831f22abf6 100644 --- a/packages/opencode/src/session/index.ts +++ b/packages/opencode/src/session/index.ts @@ -9,12 +9,14 @@ import { Config } from "../config/config" import { Flag } from "../flag/flag" import { Installation } from "../installation" -import { Database, NotFoundError, eq, and, or, gte, isNull, desc, like, inArray, lt } from "../storage/db" +import { Database, NotFoundError, eq, and, gte, isNull, desc, like, inArray, lt } from "../storage/db" +import { SyncEvent } from "../sync" import type { SQL } from "../storage/db" -import { SessionTable, MessageTable, PartTable } from "./session.sql" +import { SessionTable } from "./session.sql" import { ProjectTable } from "../project/project.sql" import { Storage } from "@/storage/storage" import { Log } from "../util/log" +import { updateSchema } from "../util/update-schema" import { MessageV2 } from "./message-v2" import { Instance } from "../project/instance" import { SessionPrompt } from "./prompt" @@ -218,24 +220,40 @@ export namespace Session { export type GlobalInfo = z.output export const Event = { - Created: BusEvent.define( - "session.created", - z.object({ + Created: SyncEvent.define({ + type: "session.created", + version: 1, + aggregate: "sessionID", + schema: z.object({ + sessionID: SessionID.zod, info: Info, }), - ), - Updated: BusEvent.define( - "session.updated", - z.object({ + }), + Updated: SyncEvent.define({ + type: "session.updated", + version: 1, + aggregate: "sessionID", + schema: z.object({ + sessionID: SessionID.zod, + info: updateSchema(Info).extend({ + share: updateSchema(Info.shape.share.unwrap()).optional(), + time: updateSchema(Info.shape.time).optional(), + }), + }), + busSchema: z.object({ + sessionID: SessionID.zod, info: Info, }), - ), - Deleted: BusEvent.define( - "session.deleted", - z.object({ + }), + Deleted: SyncEvent.define({ + type: "session.deleted", + version: 1, + aggregate: "sessionID", + schema: z.object({ + sessionID: SessionID.zod, info: Info, }), - ), + }), Diff: BusEvent.define( "session.diff", z.object({ @@ -349,18 +367,8 @@ export namespace Session { ) export const touch = fn(SessionID.zod, async (sessionID) => { - const now = Date.now() - Database.use((db) => { - const row = db - .update(SessionTable) - .set({ time_updated: now }) - .where(eq(SessionTable.id, sessionID)) - .returning() - .get() - if (!row) throw new NotFoundError({ message: `Session not found: ${sessionID}` }) - const info = fromRow(row) - Database.effect(() => Bus.publish(Event.Updated, { info })) - }) + const time = Date.now() + SyncEvent.run(Event.Updated, { sessionID, info: { time: { updated: time } } }) }) export async function createNext(input: { @@ -387,22 +395,24 @@ export namespace Session { }, } log.info("created", result) - Database.use((db) => { - db.insert(SessionTable).values(toRow(result)).run() - Database.effect(() => - Bus.publish(Event.Created, { - info: result, - }), - ) - }) + + SyncEvent.run(Event.Created, { sessionID: result.id, info: result }) + const cfg = await Config.get() if (!result.parentID && (Flag.KILO_AUTO_SHARE || cfg.share === "auto")) share(result.id).catch(() => { // Silently ignore sharing errors during session creation }) - Bus.publish(Event.Updated, { - info: result, - }) + + if (!Flag.KILO_EXPERIMENTAL_WORKSPACES) { + // This only exist for backwards compatibility. We should not be + // manually publishing this event; it is a sync event now + Bus.publish(Event.Updated, { + sessionID: result.id, + info: result, + }) + } + return result } @@ -424,27 +434,20 @@ export namespace Session { if (cfg.share === "disabled") { throw new Error("Sharing is disabled in configuration") } - const { KiloSessions } = await import("@/kilo-sessions/kilo-sessions") + const { KiloSessions } = await import("@/kilo-sessions/kilo-sessions") // kilocode_change const share = await KiloSessions.share(id) // kilocode_change - Database.use((db) => { - const row = db.update(SessionTable).set({ share_url: share.url }).where(eq(SessionTable.id, id)).returning().get() - if (!row) throw new NotFoundError({ message: `Session not found: ${id}` }) - const info = fromRow(row) - Database.effect(() => Bus.publish(Event.Updated, { info })) - }) + + SyncEvent.run(Event.Updated, { sessionID: id, info: { share: { url: share.url } } }) + return share }) export const unshare = fn(SessionID.zod, async (id) => { // Use ShareNext to remove the share (same as share function uses ShareNext to create) - const { KiloSessions } = await import("@/kilo-sessions/kilo-sessions") + const { KiloSessions } = await import("@/kilo-sessions/kilo-sessions") // kilocode_change await KiloSessions.unshare(id) // kilocode_change - Database.use((db) => { - const row = db.update(SessionTable).set({ share_url: null }).where(eq(SessionTable.id, id)).returning().get() - if (!row) throw new NotFoundError({ message: `Session not found: ${id}` }) - const info = fromRow(row) - Database.effect(() => Bus.publish(Event.Updated, { info })) - }) + + SyncEvent.run(Event.Updated, { sessionID: id, info: { share: { url: null } } }) }) export const setTitle = fn( @@ -453,18 +456,7 @@ export namespace Session { title: z.string(), }), async (input) => { - return Database.use((db) => { - const row = db - .update(SessionTable) - .set({ title: input.title }) - .where(eq(SessionTable.id, input.sessionID)) - .returning() - .get() - if (!row) throw new NotFoundError({ message: `Session not found: ${input.sessionID}` }) - const info = fromRow(row) - Database.effect(() => Bus.publish(Event.Updated, { info })) - return info - }) + SyncEvent.run(Event.Updated, { sessionID: input.sessionID, info: { title: input.title } }) }, ) @@ -474,18 +466,7 @@ export namespace Session { time: z.number().optional(), }), async (input) => { - return Database.use((db) => { - const row = db - .update(SessionTable) - .set({ time_archived: input.time }) - .where(eq(SessionTable.id, input.sessionID)) - .returning() - .get() - if (!row) throw new NotFoundError({ message: `Session not found: ${input.sessionID}` }) - const info = fromRow(row) - Database.effect(() => Bus.publish(Event.Updated, { info })) - return info - }) + SyncEvent.run(Event.Updated, { sessionID: input.sessionID, info: { time: { archived: input.time } } }) }, ) @@ -495,17 +476,9 @@ export namespace Session { permission: Permission.Ruleset, }), async (input) => { - return Database.use((db) => { - const row = db - .update(SessionTable) - .set({ permission: input.permission, time_updated: Date.now() }) - .where(eq(SessionTable.id, input.sessionID)) - .returning() - .get() - if (!row) throw new NotFoundError({ message: `Session not found: ${input.sessionID}` }) - const info = fromRow(row) - Database.effect(() => Bus.publish(Event.Updated, { info })) - return info + SyncEvent.run(Event.Updated, { + sessionID: input.sessionID, + info: { permission: input.permission, time: { updated: Date.now() } }, }) }, ) @@ -517,43 +490,24 @@ export namespace Session { summary: Info.shape.summary, }), async (input) => { - return Database.use((db) => { - const row = db - .update(SessionTable) - .set({ - revert: input.revert ?? null, - summary_additions: input.summary?.additions, - summary_deletions: input.summary?.deletions, - summary_files: input.summary?.files, - summary_diffs: input.summary?.diffs ?? null, // kilocode_change - time_updated: Date.now(), - }) - .where(eq(SessionTable.id, input.sessionID)) - .returning() - .get() - if (!row) throw new NotFoundError({ message: `Session not found: ${input.sessionID}` }) - const info = fromRow(row) - Database.effect(() => Bus.publish(Event.Updated, { info })) - return info + SyncEvent.run(Event.Updated, { + sessionID: input.sessionID, + info: { + summary: input.summary, + time: { updated: Date.now() }, + revert: input.revert, + }, }) }, ) export const clearRevert = fn(SessionID.zod, async (sessionID) => { - return Database.use((db) => { - const row = db - .update(SessionTable) - .set({ - revert: null, - time_updated: Date.now(), - }) - .where(eq(SessionTable.id, sessionID)) - .returning() - .get() - if (!row) throw new NotFoundError({ message: `Session not found: ${sessionID}` }) - const info = fromRow(row) - Database.effect(() => Bus.publish(Event.Updated, { info })) - return info + SyncEvent.run(Event.Updated, { + sessionID, + info: { + time: { updated: Date.now() }, + revert: null, + }, }) }) @@ -563,22 +517,12 @@ export namespace Session { summary: Info.shape.summary, }), async (input) => { - return Database.use((db) => { - const row = db - .update(SessionTable) - .set({ - summary_additions: input.summary?.additions, - summary_deletions: input.summary?.deletions, - summary_files: input.summary?.files, - time_updated: Date.now(), - }) - .where(eq(SessionTable.id, input.sessionID)) - .returning() - .get() - if (!row) throw new NotFoundError({ message: `Session not found: ${input.sessionID}` }) - const info = fromRow(row) - Database.effect(() => Bus.publish(Event.Updated, { info })) - return info + SyncEvent.run(Event.Updated, { + sessionID: input.sessionID, + info: { + time: { updated: Date.now() }, + summary: input.summary, + }, }) }, ) @@ -769,52 +713,33 @@ export namespace Session { }) export const remove = fn(SessionID.zod, async (sessionID) => { - const project = Instance.project try { const session = await get(sessionID) for (const child of await children(sessionID)) { await remove(child.id) } - const { KiloSessions } = await import("@/kilo-sessions/kilo-sessions") + const { KiloSessions } = await import("@/kilo-sessions/kilo-sessions") // kilocode_change await KiloSessions.remove(sessionID).catch(() => {}) // kilocode_change platformOverrides.delete(sessionID) // kilocode_change - clean up platform override // kilocode_change start - cancel running processor before deleting to avoid FK constraint errors SessionPrompt.cancel(sessionID) // kilocode_change end - // CASCADE delete handles messages and parts automatically - Database.use((db) => { - db.delete(SessionTable).where(eq(SessionTable.id, sessionID)).run() - Database.effect(() => - Bus.publish(Event.Deleted, { - info: session, - }), - ) - }) + + SyncEvent.run(Event.Deleted, { sessionID, info: session }) + + // Eagerly remove event sourcing data to free up space + SyncEvent.remove(sessionID) } catch (e) { log.error(e) } }) export const updateMessage = fn(MessageV2.Info, async (msg) => { - const time_created = msg.time.created - const { id, sessionID, ...data } = msg // kilocode_change start - ignore FK errors when session was deleted while processor was still running try { - Database.use((db) => { - db.insert(MessageTable) - .values({ - id, - session_id: sessionID, - time_created, - data, - }) - .onConflictDoUpdate({ target: MessageTable.id, set: { data } }) - .run() - Database.effect(() => - Bus.publish(MessageV2.Event.Updated, { - info: msg, - }), - ) + SyncEvent.run(MessageV2.Event.Updated, { + sessionID: msg.sessionID, + info: msg, }) } catch (e: any) { if (e?.code === "SQLITE_CONSTRAINT_FOREIGNKEY") { @@ -833,17 +758,9 @@ export namespace Session { messageID: MessageID.zod, }), async (input) => { - // CASCADE delete handles parts automatically - Database.use((db) => { - db.delete(MessageTable) - .where(and(eq(MessageTable.id, input.messageID), eq(MessageTable.session_id, input.sessionID))) - .run() - Database.effect(() => - Bus.publish(MessageV2.Event.Removed, { - sessionID: input.sessionID, - messageID: input.messageID, - }), - ) + SyncEvent.run(MessageV2.Event.Removed, { + sessionID: input.sessionID, + messageID: input.messageID, }) return input.messageID }, @@ -856,17 +773,10 @@ export namespace Session { partID: PartID.zod, }), async (input) => { - Database.use((db) => { - db.delete(PartTable) - .where(and(eq(PartTable.id, input.partID), eq(PartTable.session_id, input.sessionID))) - .run() - Database.effect(() => - Bus.publish(MessageV2.Event.PartRemoved, { - sessionID: input.sessionID, - messageID: input.messageID, - partID: input.partID, - }), - ) + SyncEvent.run(MessageV2.Event.PartRemoved, { + sessionID: input.sessionID, + messageID: input.messageID, + partID: input.partID, }) return input.partID }, @@ -875,26 +785,12 @@ export namespace Session { const UpdatePartInput = MessageV2.Part export const updatePart = fn(UpdatePartInput, async (part) => { - const { id, messageID, sessionID, ...data } = part - const time = Date.now() // kilocode_change start - ignore FK errors when session was deleted while processor was still running try { - Database.use((db) => { - db.insert(PartTable) - .values({ - id, - message_id: messageID, - session_id: sessionID, - time_created: time, - data, - }) - .onConflictDoUpdate({ target: PartTable.id, set: { data } }) - .run() - Database.effect(() => - Bus.publish(MessageV2.Event.PartUpdated, { - part: structuredClone(part), - }), - ) + SyncEvent.run(MessageV2.Event.PartUpdated, { + sessionID: part.sessionID, + part: structuredClone(part), + time: Date.now(), }) } catch (e: any) { if (e?.code === "SQLITE_CONSTRAINT_FOREIGNKEY") { diff --git a/packages/opencode/src/session/message-v2.ts b/packages/opencode/src/session/message-v2.ts index cfa9dc8459..99a3ddbabb 100644 --- a/packages/opencode/src/session/message-v2.ts +++ b/packages/opencode/src/session/message-v2.ts @@ -6,11 +6,9 @@ import { APICallError, convertToModelMessages, LoadAPIKeyError, type ModelMessag import { LSP } from "../lsp" import { Snapshot } from "@/snapshot" import { fn } from "@/util/fn" +import { SyncEvent } from "../sync" import { Database, NotFoundError, and, desc, eq, inArray, lt, or } from "@/storage/db" import { MessageTable, PartTable, SessionTable } from "./session.sql" -import { ProviderTransform } from "@/provider/transform" -import { STATUS_CODES } from "http" -import { Storage } from "@/storage/storage" import { ProviderError } from "@/provider/error" import { iife } from "@/util/iife" import type { SystemError } from "bun" @@ -18,6 +16,13 @@ import type { Provider } from "@/provider/provider" import { ModelID, ProviderID } from "@/provider/schema" import { SessionNetwork } from "./network" // kilocode_change +/** Error shape thrown by Bun's fetch() when gzip/br decompression fails mid-stream */ +interface FetchDecompressionError extends Error { + code: "ZlibError" + errno: number + path: string +} + export namespace MessageV2 { export function isMedia(mime: string) { return mime.startsWith("image/") || mime === "application/pdf" @@ -460,25 +465,34 @@ export namespace MessageV2 { export type Info = z.infer export const Event = { - Updated: BusEvent.define( - "message.updated", - z.object({ + Updated: SyncEvent.define({ + type: "message.updated", + version: 1, + aggregate: "sessionID", + schema: z.object({ + sessionID: SessionID.zod, info: Info, }), - ), - Removed: BusEvent.define( - "message.removed", - z.object({ + }), + Removed: SyncEvent.define({ + type: "message.removed", + version: 1, + aggregate: "sessionID", + schema: z.object({ sessionID: SessionID.zod, messageID: MessageID.zod, }), - ), - PartUpdated: BusEvent.define( - "message.part.updated", - z.object({ + }), + PartUpdated: SyncEvent.define({ + type: "message.part.updated", + version: 1, + aggregate: "sessionID", + schema: z.object({ + sessionID: SessionID.zod, part: Part, + time: z.number(), }), - ), + }), PartDelta: BusEvent.define( "message.part.delta", z.object({ @@ -489,14 +503,16 @@ export namespace MessageV2 { delta: z.string(), }), ), - PartRemoved: BusEvent.define( - "message.part.removed", - z.object({ + PartRemoved: SyncEvent.define({ + type: "message.part.removed", + version: 1, + aggregate: "sessionID", + schema: z.object({ sessionID: SessionID.zod, messageID: MessageID.zod, partID: PartID.zod, }), - ), + }), } export const WithParts = z.object({ @@ -966,7 +982,10 @@ export namespace MessageV2 { return result } - export function fromError(e: unknown, ctx: { providerID: ProviderID }): NonNullable { + export function fromError( + e: unknown, + ctx: { providerID: ProviderID; aborted?: boolean }, + ): NonNullable { switch (true) { case e instanceof DOMException && e.name === "AbortError": return new MessageV2.AbortedError( @@ -998,6 +1017,21 @@ export namespace MessageV2 { }, { cause: e }, ).toObject() + case e instanceof Error && (e as FetchDecompressionError).code === "ZlibError": + if (ctx.aborted) { + return new MessageV2.AbortedError({ message: e.message }, { cause: e }).toObject() + } + return new MessageV2.APIError( + { + message: "Response decompression failed", + isRetryable: true, + metadata: { + code: (e as FetchDecompressionError).code, + message: e.message, + }, + }, + { cause: e }, + ).toObject() case APICallError.isInstance(e): const parsed = ProviderError.parseAPICallError({ providerID: ctx.providerID, diff --git a/packages/opencode/src/session/network.ts b/packages/opencode/src/session/network.ts index cf4978724f..2509982ad9 100644 --- a/packages/opencode/src/session/network.ts +++ b/packages/opencode/src/session/network.ts @@ -231,9 +231,21 @@ export namespace SessionNetwork { return } delete s.pending[input.requestID] - void MCP.reconnectRemote().catch((err) => { - log.error("remote reconnect failed", { err }) - }) + // kilocode_change start — reconnect failed remote MCP servers after network recovery + void MCP.status() + .then((statuses) => { + for (const [name, s] of Object.entries(statuses)) { + if (s.status === "failed") { + MCP.connect(name).catch((err) => { + log.error("remote reconnect failed", { name, err }) + }) + } + } + }) + .catch((err) => { + log.error("failed to get MCP status for reconnect", { err }) + }) + // kilocode_change end Bus.publish(Event.Replied, { sessionID: req.info.sessionID, requestID: req.info.id, diff --git a/packages/opencode/src/session/processor.ts b/packages/opencode/src/session/processor.ts index 1914ebf97d..46a6d8e31b 100644 --- a/packages/opencode/src/session/processor.ts +++ b/packages/opencode/src/session/processor.ts @@ -405,7 +405,7 @@ export namespace SessionProcessor { error: e, stack: JSON.stringify(e.stack), }) - const error = MessageV2.fromError(e, { providerID: input.model.providerID }) + const error = MessageV2.fromError(e, { providerID: input.model.providerID, aborted: input.abort.aborted }) if (MessageV2.ContextOverflowError.isInstance(error)) { needsCompaction = true Bus.publish(Session.Event.Error, { diff --git a/packages/opencode/src/session/projectors.ts b/packages/opencode/src/session/projectors.ts new file mode 100644 index 0000000000..81929cddca --- /dev/null +++ b/packages/opencode/src/session/projectors.ts @@ -0,0 +1,135 @@ +import { NotFoundError, eq, and } from "../storage/db" +import { SyncEvent } from "@/sync" +import { Session } from "./index" +import { MessageV2 } from "./message-v2" +import { SessionTable, MessageTable, PartTable } from "./session.sql" +import { ProjectTable } from "../project/project.sql" +import { Log } from "../util/log" + +const log = Log.create({ service: "session.projector" }) + +function foreign(err: unknown) { + if (typeof err !== "object" || err === null) return false + if ("code" in err && err.code === "SQLITE_CONSTRAINT_FOREIGNKEY") return true + return "message" in err && typeof err.message === "string" && err.message.includes("FOREIGN KEY constraint failed") +} + +export type DeepPartial = T extends object ? { [K in keyof T]?: DeepPartial | null } : T + +function grab( + obj: T, + field1: K1, + cb?: (val: NonNullable) => X, +): X | undefined { + if (obj == undefined || !(field1 in obj)) return undefined + + const val = obj[field1] + if (val && typeof val === "object" && cb) { + return cb(val) + } + if (val === undefined) { + throw new Error( + "Session update failure: pass `null` to clear a field instead of `undefined`: " + JSON.stringify(obj), + ) + } + return val as X | undefined +} + +export function toPartialRow(info: DeepPartial) { + const obj = { + id: grab(info, "id"), + project_id: grab(info, "projectID"), + workspace_id: grab(info, "workspaceID"), + parent_id: grab(info, "parentID"), + slug: grab(info, "slug"), + directory: grab(info, "directory"), + title: grab(info, "title"), + version: grab(info, "version"), + share_url: grab(info, "share", (v) => grab(v, "url")), + summary_additions: grab(info, "summary", (v) => grab(v, "additions")), + summary_deletions: grab(info, "summary", (v) => grab(v, "deletions")), + summary_files: grab(info, "summary", (v) => grab(v, "files")), + summary_diffs: grab(info, "summary", (v) => grab(v, "diffs")), + revert: grab(info, "revert"), + permission: grab(info, "permission"), + time_created: grab(info, "time", (v) => grab(v, "created")), + time_updated: grab(info, "time", (v) => grab(v, "updated")), + time_compacting: grab(info, "time", (v) => grab(v, "compacting")), + time_archived: grab(info, "time", (v) => grab(v, "archived")), + } + + return Object.fromEntries(Object.entries(obj).filter(([_, val]) => val !== undefined)) +} + +export default [ + SyncEvent.project(Session.Event.Created, (db, data) => { + db.insert(SessionTable).values(Session.toRow(data.info)).run() + }), + + SyncEvent.project(Session.Event.Updated, (db, data) => { + const info = data.info + const row = db + .update(SessionTable) + .set(toPartialRow(info)) + .where(eq(SessionTable.id, data.sessionID)) + .returning() + .get() + if (!row) throw new NotFoundError({ message: `Session not found: ${data.sessionID}` }) + }), + + SyncEvent.project(Session.Event.Deleted, (db, data) => { + db.delete(SessionTable).where(eq(SessionTable.id, data.sessionID)).run() + }), + + SyncEvent.project(MessageV2.Event.Updated, (db, data) => { + const time_created = data.info.time.created + const { id, sessionID, ...rest } = data.info + + try { + db.insert(MessageTable) + .values({ + id, + session_id: sessionID, + time_created, + data: rest, + }) + .onConflictDoUpdate({ target: MessageTable.id, set: { data: rest } }) + .run() + } catch (err) { + if (!foreign(err)) throw err + log.warn("ignored late message update", { messageID: id, sessionID }) + } + }), + + SyncEvent.project(MessageV2.Event.Removed, (db, data) => { + db.delete(MessageTable) + .where(and(eq(MessageTable.id, data.messageID), eq(MessageTable.session_id, data.sessionID))) + .run() + }), + + SyncEvent.project(MessageV2.Event.PartRemoved, (db, data) => { + db.delete(PartTable) + .where(and(eq(PartTable.id, data.partID), eq(PartTable.session_id, data.sessionID))) + .run() + }), + + SyncEvent.project(MessageV2.Event.PartUpdated, (db, data) => { + const { id, messageID, sessionID, ...rest } = data.part + + try { + db.insert(PartTable) + .values({ + id, + message_id: messageID, + session_id: sessionID, + time_created: data.time, + data: rest, + }) + .onConflictDoUpdate({ target: PartTable.id, set: { data: rest } }) + .run() + } catch (err) { + if (!foreign(err)) throw err + log.warn("ignored late part update", { partID: id, messageID, sessionID }) + } + }), +] diff --git a/packages/opencode/src/session/revert.ts b/packages/opencode/src/session/revert.ts index af2e1a8948..0a6a481fef 100644 --- a/packages/opencode/src/session/revert.ts +++ b/packages/opencode/src/session/revert.ts @@ -4,8 +4,7 @@ import { Snapshot } from "../snapshot" import { MessageV2 } from "./message-v2" import { Session } from "." import { Log } from "../util/log" -import { Database, eq } from "../storage/db" -import { MessageTable, PartTable } from "./session.sql" +import { SyncEvent } from "../sync" import { Storage } from "@/storage/storage" import { Bus } from "../bus" import { SessionPrompt } from "./prompt" @@ -126,8 +125,10 @@ export namespace SessionRevert { remove.push(msg) } for (const msg of remove) { - Database.use((db) => db.delete(MessageTable).where(eq(MessageTable.id, msg.info.id)).run()) - await Bus.publish(MessageV2.Event.Removed, { sessionID: sessionID, messageID: msg.info.id }) + SyncEvent.run(MessageV2.Event.Removed, { + sessionID: sessionID, + messageID: msg.info.id, + }) } if (session.revert.partID && target) { const partID = session.revert.partID @@ -137,8 +138,7 @@ export namespace SessionRevert { const removeParts = target.parts.slice(removeStart) target.parts = preserveParts for (const part of removeParts) { - Database.use((db) => db.delete(PartTable).where(eq(PartTable.id, part.id)).run()) - await Bus.publish(MessageV2.Event.PartRemoved, { + SyncEvent.run(MessageV2.Event.PartRemoved, { sessionID: sessionID, messageID: target.info.id, partID: part.id, diff --git a/packages/opencode/src/session/status.ts b/packages/opencode/src/session/status.ts index bba64e7c8f..ff009ec4d0 100644 --- a/packages/opencode/src/session/status.ts +++ b/packages/opencode/src/session/status.ts @@ -1,7 +1,7 @@ import { BusEvent } from "@/bus/bus-event" import { Bus } from "@/bus" import { InstanceState } from "@/effect/instance-state" -import { makeRunPromise } from "@/effect/run-service" +import { makeRuntime } from "@/effect/run-service" import { SessionID } from "./schema" import { Effect, Layer, ServiceMap } from "effect" import z from "zod" @@ -62,6 +62,8 @@ export namespace SessionStatus { export const layer = Layer.effect( Service, Effect.gen(function* () { + const bus = yield* Bus.Service + const state = yield* InstanceState.make( Effect.fn("SessionStatus.state")(() => Effect.succeed(new Map())), ) @@ -77,9 +79,9 @@ export namespace SessionStatus { const set = Effect.fn("SessionStatus.set")(function* (sessionID: SessionID, status: Info) { const data = yield* InstanceState.get(state) - yield* Effect.promise(() => Bus.publish(Event.Status, { sessionID, status })) + yield* bus.publish(Event.Status, { sessionID, status }) if (status.type === "idle") { - yield* Effect.promise(() => Bus.publish(Event.Idle, { sessionID })) + yield* bus.publish(Event.Idle, { sessionID }) data.delete(sessionID) return } @@ -90,7 +92,8 @@ export namespace SessionStatus { }), ) - const runPromise = makeRunPromise(Service, layer) + const defaultLayer = layer.pipe(Layer.provide(Bus.layer)) + const { runPromise } = makeRuntime(Service, defaultLayer) export async function get(sessionID: SessionID) { return runPromise((svc) => svc.get(sessionID)) diff --git a/packages/opencode/src/share/share-next.ts b/packages/opencode/src/share/share-next.ts index 4c0d951ca7..702b3af541 100644 --- a/packages/opencode/src/share/share-next.ts +++ b/packages/opencode/src/share/share-next.ts @@ -66,29 +66,28 @@ export namespace ShareNext { export async function init() { if (disabled) return Bus.subscribe(Session.Event.Updated, async (evt) => { - await sync(evt.properties.info.id, [ + const session = await Session.get(evt.properties.sessionID) + + await sync(session.id, [ { type: "session", - data: evt.properties.info, + data: session, }, ]) }) Bus.subscribe(MessageV2.Event.Updated, async (evt) => { - await sync(evt.properties.info.sessionID, [ + const info = evt.properties.info + await sync(info.sessionID, [ { type: "message", data: evt.properties.info, }, ]) - if (evt.properties.info.role === "user") { - await sync(evt.properties.info.sessionID, [ + if (info.role === "user") { + await sync(info.sessionID, [ { type: "model", - data: [ - await Provider.getModel(evt.properties.info.model.providerID, evt.properties.info.model.modelID).then( - (m) => m, - ), - ], + data: [await Provider.getModel(info.model.providerID, info.model.modelID).then((m) => m)], }, ]) } diff --git a/packages/opencode/src/skill/index.ts b/packages/opencode/src/skill/index.ts index 15987463f2..e1ae897d5d 100644 --- a/packages/opencode/src/skill/index.ts +++ b/packages/opencode/src/skill/index.ts @@ -7,7 +7,7 @@ import { NamedError } from "@opencode-ai/util/error" import type { Agent } from "@/agent/agent" import { Bus } from "@/bus" import { InstanceState } from "@/effect/instance-state" -import { makeRunPromise } from "@/effect/run-service" +import { makeRuntime } from "@/effect/run-service" import { Flag } from "@/flag/flag" import { Global } from "@/global" import { Permission } from "@/permission" @@ -26,7 +26,7 @@ export namespace Skill { // kilocode_change end const EXTERNAL_DIRS = [".claude", ".agents"] const EXTERNAL_SKILL_PATTERN = "skills/**/SKILL.md" - const OPENCODE_SKILL_PATTERN = "{skill,skills}/**/SKILL.md" + const KILO_SKILL_PATTERN = "{skill,skills}/**/SKILL.md" // kilocode_change const SKILL_PATTERN = "**/SKILL.md" export const Info = z.object({ @@ -58,11 +58,6 @@ export namespace Skill { type State = { skills: Record dirs: Set - task?: Promise - } - - type Cache = State & { - ensure: () => Promise } export interface Interface { @@ -120,66 +115,47 @@ export namespace Skill { }) } - // TODO: Migrate to Effect - const create = (discovery: Discovery.Interface, directory: string, worktree: string): Cache => { - const state: State = { - skills: {}, - dirs: new Set(), + async function loadSkills(state: State, discovery: Discovery.Interface, directory: string, worktree: string) { + if (!Flag.KILO_DISABLE_EXTERNAL_SKILLS) { + for (const dir of EXTERNAL_DIRS) { + const root = path.join(Global.Path.home, dir) + if (!(await Filesystem.isDir(root))) continue + await scan(state, root, EXTERNAL_SKILL_PATTERN, { dot: true, scope: "global" }) + } + + for await (const root of Filesystem.up({ + targets: EXTERNAL_DIRS, + start: directory, + stop: worktree, + })) { + await scan(state, root, EXTERNAL_SKILL_PATTERN, { dot: true, scope: "project" }) + } } - const load = async () => { - if (!Flag.KILO_DISABLE_EXTERNAL_SKILLS) { - for (const dir of EXTERNAL_DIRS) { - const root = path.join(Global.Path.home, dir) - if (!(await Filesystem.isDir(root))) continue - await scan(state, root, EXTERNAL_SKILL_PATTERN, { dot: true, scope: "global" }) - } + for (const dir of await Config.directories()) { + await scan(state, dir, KILO_SKILL_PATTERN) + } - for await (const root of Filesystem.up({ - targets: EXTERNAL_DIRS, - start: directory, - stop: worktree, - })) { - await scan(state, root, EXTERNAL_SKILL_PATTERN, { dot: true, scope: "project" }) - } + const cfg = await Config.get() + for (const item of cfg.skills?.paths ?? []) { + const expanded = item.startsWith("~/") ? path.join(os.homedir(), item.slice(2)) : item + const dir = path.isAbsolute(expanded) ? expanded : path.join(directory, expanded) + if (!(await Filesystem.isDir(dir))) { + log.warn("skill path not found", { path: dir }) + continue } - for (const dir of await Config.directories()) { - await scan(state, dir, OPENCODE_SKILL_PATTERN) - } - - const cfg = await Config.get() - for (const item of cfg.skills?.paths ?? []) { - const expanded = item.startsWith("~/") ? path.join(os.homedir(), item.slice(2)) : item - const dir = path.isAbsolute(expanded) ? expanded : path.join(directory, expanded) - if (!(await Filesystem.isDir(dir))) { - log.warn("skill path not found", { path: dir }) - continue - } + await scan(state, dir, SKILL_PATTERN) + } + for (const url of cfg.skills?.urls ?? []) { + for (const dir of await Effect.runPromise(discovery.pull(url))) { + state.dirs.add(dir) await scan(state, dir, SKILL_PATTERN) } - - for (const url of cfg.skills?.urls ?? []) { - for (const dir of await Effect.runPromise(discovery.pull(url))) { - state.dirs.add(dir) - await scan(state, dir, SKILL_PATTERN) - } - } - - log.info("init", { count: Object.keys(state.skills).length }) } - const ensure = () => { - if (state.task) return state.task - state.task = load().catch((err) => { - state.task = undefined - throw err - }) - return state.task - } - - return { ...state, ensure } + log.info("init", { count: Object.keys(state.skills).length }) } export class Service extends ServiceMap.Service()("@opencode/Skill") {} @@ -189,33 +165,33 @@ export namespace Skill { Effect.gen(function* () { const discovery = yield* Discovery.Service const state = yield* InstanceState.make( - Effect.fn("Skill.state")((ctx) => Effect.sync(() => create(discovery, ctx.directory, ctx.worktree))), + Effect.fn("Skill.state")((ctx) => + Effect.gen(function* () { + const s: State = { skills: {}, dirs: new Set() } + yield* Effect.promise(() => loadSkills(s, discovery, ctx.directory, ctx.worktree)) + return s + }), + ), ) - const ensure = Effect.fn("Skill.ensure")(function* () { - const cache = yield* InstanceState.get(state) - yield* Effect.promise(() => cache.ensure()) - return cache - }) - const get = Effect.fn("Skill.get")(function* (name: string) { - const cache = yield* ensure() - return cache.skills[name] + const s = yield* InstanceState.get(state) + return s.skills[name] }) const all = Effect.fn("Skill.all")(function* () { - const cache = yield* ensure() - return Object.values(cache.skills) + const s = yield* InstanceState.get(state) + return Object.values(s.skills) }) const dirs = Effect.fn("Skill.dirs")(function* () { - const cache = yield* ensure() - return Array.from(cache.dirs) + const s = yield* InstanceState.get(state) + return Array.from(s.dirs) }) const available = Effect.fn("Skill.available")(function* (agent?: Agent.Info) { - const cache = yield* ensure() - const list = Object.values(cache.skills).toSorted((a, b) => a.name.localeCompare(b.name)) + const s = yield* InstanceState.get(state) + const list = Object.values(s.skills).toSorted((a, b) => a.name.localeCompare(b.name)) if (!agent) return list return list.filter((skill) => Permission.evaluate("skill", skill.name, agent.permission).action !== "deny") }) @@ -246,7 +222,7 @@ export namespace Skill { return ["## Available Skills", ...list.map((skill) => `- **${skill.name}**: ${skill.description}`)].join("\n") } - const runPromise = makeRunPromise(Service, defaultLayer) + const { runPromise } = makeRuntime(Service, defaultLayer) export async function get(name: string) { return runPromise((skill) => skill.get(name)) diff --git a/packages/opencode/src/snapshot/index.ts b/packages/opencode/src/snapshot/index.ts index 2beda72100..6b1c132b15 100644 --- a/packages/opencode/src/snapshot/index.ts +++ b/packages/opencode/src/snapshot/index.ts @@ -1,11 +1,11 @@ import { NodeFileSystem, NodePath } from "@effect/platform-node" -import { Cause, Duration, Effect, Layer, Schedule, ServiceMap, Stream } from "effect" +import { Cause, Duration, Effect, Layer, Schedule, Semaphore, ServiceMap, Stream } from "effect" import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process" import path from "path" import z from "zod" import * as CrossSpawnSpawner from "@/effect/cross-spawn-spawner" import { InstanceState } from "@/effect/instance-state" -import { makeRunPromise } from "@/effect/run-service" +import { makeRuntime } from "@/effect/run-service" import { AppFileSystem } from "@/filesystem" import { Config } from "../config/config" import { Global } from "../global" @@ -36,13 +36,13 @@ export namespace Snapshot { const log = Log.create({ service: "snapshot" }) const prune = "7.days" + const limit = 2 * 1024 * 1024 const core = ["-c", "core.longpaths=true", "-c", "core.symlinks=true"] const cfg = ["-c", "core.autocrlf=false", ...core] const quote = [...cfg, "-c", "core.quotepath=false"] // kilocode_change start export const MAX_DIFF_SIZE = 256 * 1024 - const MAX_SNAPSHOT_FILE_SIZE = 2 * 1024 * 1024 // skip files >2MB during snapshot add // kilocode_change end interface GitResult { @@ -72,6 +72,17 @@ export namespace Snapshot { Effect.gen(function* () { const fs = yield* AppFileSystem.Service const spawner = yield* ChildProcessSpawner.ChildProcessSpawner + const locks = new Map() + + const lock = (key: string) => { + const hit = locks.get(key) + if (hit) return hit + + const next = Semaphore.makeUnsafe(1) + locks.set(key, next) + return next + } + const state = yield* InstanceState.make( Effect.fn("Snapshot.state")(function* (ctx) { // kilocode_change start — use KiloSnapshot for worktree-scoped gitdir @@ -118,6 +129,7 @@ export namespace Snapshot { const exists = (file: string) => fs.exists(file).pipe(Effect.orDie) const read = (file: string) => fs.readFileString(file).pipe(Effect.catch(() => Effect.succeed(""))) const remove = (file: string) => fs.remove(file).pipe(Effect.catch(() => Effect.void)) + const locked = (fx: Effect.Effect) => lock(state.gitdir).withPermits(1)(fx) // kilocode_change start — ACP guard: disable snapshots for ACP clients const enabled = Effect.fnUntraced(function* () { @@ -137,148 +149,165 @@ export namespace Snapshot { return file }) - // kilocode_change start — sync exclude with large file filtering - const sync = Effect.fnUntraced(function* (largeFiles: string[] = []) { + const sync = Effect.fnUntraced(function* (list: string[] = []) { const file = yield* excludes() const target = path.join(state.gitdir, "info", "exclude") + const text = [ + file ? (yield* read(file)).trimEnd() : "", + ...list.map((item) => `/${item.replaceAll("\\", "/")}`), + ] + .filter(Boolean) + .join("\n") yield* fs.ensureDir(path.join(state.gitdir, "info")).pipe(Effect.orDie) - const parts: string[] = [] - if (file) { - const text = yield* read(file) - if (text.trim()) parts.push(text.trimEnd()) - } - for (const item of largeFiles) { - parts.push(`/${item.replaceAll("\\", "/")}`) - } - yield* fs.writeFileString(target, parts.length ? parts.join("\n") + "\n" : "").pipe(Effect.orDie) + yield* fs.writeFileString(target, text ? `${text}\n` : "").pipe(Effect.orDie) }) - // kilocode_change end - // kilocode_change start — incremental add with size filter const add = Effect.fnUntraced(function* () { - const cwd = state.directory - const worktree = state.worktree - - // Run diff-files and ls-files concurrently to find changed + untracked files - const [diffResult, otherResult] = yield* Effect.all( + yield* sync() + const [diff, other] = yield* Effect.all( [ - git([...quote, ...args(["diff-files", "--name-only", "-z", "--", "."])], { cwd }), - git([...quote, ...args(["ls-files", "--others", "--exclude-standard", "-z", "--", "."])], { cwd }), + git([...quote, ...args(["diff-files", "--name-only", "-z", "--", "."])], { + cwd: state.directory, + }), + git([...quote, ...args(["ls-files", "--others", "--exclude-standard", "-z", "--", "."])], { + cwd: state.directory, + }), ], { concurrency: 2 }, ) - - if (diffResult.code !== 0 || otherResult.code !== 0) { + if (diff.code !== 0 || other.code !== 0) { log.warn("failed to list snapshot files", { - diffCode: diffResult.code, - diffStderr: diffResult.stderr, - otherCode: otherResult.code, - otherStderr: otherResult.stderr, + diffCode: diff.code, + diffStderr: diff.stderr, + otherCode: other.code, + otherStderr: other.stderr, }) return } - const tracked = diffResult.text.split("\0").filter(Boolean) - const all = Array.from(new Set([...tracked, ...otherResult.text.split("\0").filter(Boolean)])) - if (!all.length) { - yield* sync() - return - } - - // Filter out oversized files (>2MB) - const large: string[] = [] - for (const item of all) { - const fullPath = path.join(cwd, item) - const fileExists = yield* fs.exists(fullPath).pipe(Effect.catch(() => Effect.succeed(false))) - if (fileExists) { - const stat = yield* fs.stat(fullPath).pipe(Effect.catch(() => Effect.succeed(null))) - if (stat && stat.type === "File" && stat.size > MAX_SNAPSHOT_FILE_SIZE) { - large.push(item) - } - } - } + const tracked = diff.text.split("\0").filter(Boolean) + const all = Array.from(new Set([...tracked, ...other.text.split("\0").filter(Boolean)])) + if (!all.length) return + const large = (yield* Effect.all( + all.map((item) => + fs + .stat(path.join(state.directory, item)) + .pipe(Effect.catch(() => Effect.void)) + .pipe( + Effect.map((stat) => { + if (!stat || stat.type !== "File") return + const size = typeof stat.size === "bigint" ? Number(stat.size) : stat.size + return size > limit ? item : undefined + }), + ), + ), + { concurrency: 8 }, + )).filter((item): item is string => Boolean(item)) yield* sync(large) - yield* git([...cfg, ...args(["add", "--sparse", "."])], { cwd }) - }) - // kilocode_change end - - const cleanup = Effect.fnUntraced(function* () { - if (!(yield* enabled())) return - if (!(yield* exists(state.gitdir))) return - const result = yield* git(args(["gc", `--prune=${prune}`]), { cwd: state.directory }) + const result = yield* git([...cfg, ...args(["add", "--sparse", "."])], { cwd: state.directory }) if (result.code !== 0) { - log.warn("cleanup failed", { + log.warn("failed to add snapshot files", { exitCode: result.code, stderr: result.stderr, }) - return } - log.info("cleanup", { prune }) + }) + + const cleanup = Effect.fnUntraced(function* () { + return yield* locked( + Effect.gen(function* () { + if (!(yield* enabled())) return + if (!(yield* exists(state.gitdir))) return + const result = yield* git(args(["gc", `--prune=${prune}`]), { cwd: state.directory }) + if (result.code !== 0) { + log.warn("cleanup failed", { + exitCode: result.code, + stderr: result.stderr, + }) + return + } + log.info("cleanup", { prune }) + }), + ) }) const track = Effect.fnUntraced(function* () { - if (!(yield* enabled())) return - const existed = yield* exists(state.gitdir) - yield* fs.ensureDir(state.gitdir).pipe(Effect.orDie) - if (!existed) { - yield* git(["init"], { - env: { GIT_DIR: state.gitdir, GIT_WORK_TREE: state.worktree }, - }) - yield* git(["--git-dir", state.gitdir, "config", "core.autocrlf", "false"]) - yield* git(["--git-dir", state.gitdir, "config", "core.longpaths", "true"]) - yield* git(["--git-dir", state.gitdir, "config", "core.symlinks", "true"]) - yield* git(["--git-dir", state.gitdir, "config", "core.fsmonitor", "false"]) - log.info("initialized") - } - yield* add() - const result = yield* git(args(["write-tree"]), { cwd: state.directory }) - const hash = result.text.trim() - log.info("tracking", { hash, cwd: state.directory, git: state.gitdir }) - return hash + return yield* locked( + Effect.gen(function* () { + if (!(yield* enabled())) return + const existed = yield* exists(state.gitdir) + yield* fs.ensureDir(state.gitdir).pipe(Effect.orDie) + if (!existed) { + yield* git(["init"], { + env: { GIT_DIR: state.gitdir, GIT_WORK_TREE: state.worktree }, + }) + yield* git(["--git-dir", state.gitdir, "config", "core.autocrlf", "false"]) + yield* git(["--git-dir", state.gitdir, "config", "core.longpaths", "true"]) + yield* git(["--git-dir", state.gitdir, "config", "core.symlinks", "true"]) + yield* git(["--git-dir", state.gitdir, "config", "core.fsmonitor", "false"]) + log.info("initialized") + } + yield* add() + const result = yield* git(args(["write-tree"]), { cwd: state.directory }) + const hash = result.text.trim() + log.info("tracking", { hash, cwd: state.directory, git: state.gitdir }) + return hash + }), + ) }) const patch = Effect.fnUntraced(function* (hash: string) { - yield* add() - const result = yield* git( - [...quote, ...args(["diff", "--no-ext-diff", "--name-only", hash, "--", "."])], - { - cwd: state.directory, - }, + return yield* locked( + Effect.gen(function* () { + yield* add() + const result = yield* git( + [...quote, ...args(["diff", "--cached", "--no-ext-diff", "--name-only", hash, "--", "."])], + { + cwd: state.directory, + }, + ) + if (result.code !== 0) { + log.warn("failed to get diff", { hash, exitCode: result.code }) + return { hash, files: [] } + } + return { + hash, + files: result.text + .trim() + .split("\n") + .map((x) => x.trim()) + .filter(Boolean) + .map((x) => path.join(state.worktree, x).replaceAll("\\", "/")), + } + }), ) - if (result.code !== 0) { - log.warn("failed to get diff", { hash, exitCode: result.code }) - return { hash, files: [] } - } - return { - hash, - files: result.text - .trim() - .split("\n") - .map((x) => x.trim()) - .filter(Boolean) - .map((x) => path.join(state.worktree, x).replaceAll("\\", "/")), - } }) const restore = Effect.fnUntraced(function* (snapshot: string) { - log.info("restore", { commit: snapshot }) - const result = yield* git([...core, ...args(["read-tree", snapshot])], { cwd: state.worktree }) - if (result.code === 0) { - const checkout = yield* git([...core, ...args(["checkout-index", "-a", "-f"])], { cwd: state.worktree }) - if (checkout.code === 0) return - log.error("failed to restore snapshot", { - snapshot, - exitCode: checkout.code, - stderr: checkout.stderr, - }) - return - } - log.error("failed to restore snapshot", { - snapshot, - exitCode: result.code, - stderr: result.stderr, - }) + return yield* locked( + Effect.gen(function* () { + log.info("restore", { commit: snapshot }) + const result = yield* git([...core, ...args(["read-tree", snapshot])], { cwd: state.worktree }) + if (result.code === 0) { + const checkout = yield* git([...core, ...args(["checkout-index", "-a", "-f"])], { + cwd: state.worktree, + }) + if (checkout.code === 0) return + log.error("failed to restore snapshot", { + snapshot, + exitCode: checkout.code, + stderr: checkout.stderr, + }) + return + } + log.error("failed to restore snapshot", { + snapshot, + exitCode: result.code, + stderr: result.stderr, + }) + }), + ) }) // kilocode_change start — batched revert: group up to 100 files per git checkout @@ -375,114 +404,135 @@ export namespace Snapshot { return batches } + // kilocode_change start — batched revert (ported from v1.3.14) const revert = Effect.fnUntraced(function* (patches: Snapshot.Patch[]) { - const ops: RevertOp[] = [] - const seen = new Set() - for (const item of patches) { - for (const file of item.files) { - if (seen.has(file)) continue - seen.add(file) - ops.push({ hash: item.hash, file, rel: path.relative(state.worktree, file).replaceAll("\\", "/") }) - } - } + return yield* locked( + Effect.gen(function* () { + const ops: RevertOp[] = [] + const seen = new Set() + for (const item of patches) { + for (const file of item.files) { + if (seen.has(file)) continue + seen.add(file) + ops.push({ + hash: item.hash, + file, + rel: path.relative(state.worktree, file).replaceAll("\\", "/"), + }) + } + } - for (const batch of groupIntoBatches(ops)) { - if (batch.length === 1) { - yield* revertSingle(batch[0]!) - } else { - yield* revertBatch(batch) - } - } + for (const batch of groupIntoBatches(ops)) { + if (batch.length === 1) { + yield* revertSingle(batch[0]!) + } else { + yield* revertBatch(batch) + } + } + }), + ) }) // kilocode_change end const diff = Effect.fnUntraced(function* (hash: string) { - yield* add() - const result = yield* git([...quote, ...args(["diff", "--no-ext-diff", hash, "--", "."])], { - cwd: state.worktree, - }) - if (result.code !== 0) { - log.warn("failed to get diff", { - hash, - exitCode: result.code, - stderr: result.stderr, - }) - return "" - } - return result.text.trim() + return yield* locked( + Effect.gen(function* () { + yield* add() + const result = yield* git( + [...quote, ...args(["diff", "--cached", "--no-ext-diff", hash, "--", "."])], + { + cwd: state.worktree, + }, + ) + if (result.code !== 0) { + log.warn("failed to get diff", { + hash, + exitCode: result.code, + stderr: result.stderr, + }) + return "" + } + return result.text.trim() + }), + ) }) // kilocode_change start — MAX_DIFF_SIZE check in diffFull const diffFull = Effect.fnUntraced(function* (from: string, to: string) { - const result: Snapshot.FileDiff[] = [] - const status = new Map() + return yield* locked( + Effect.gen(function* () { + const result: Snapshot.FileDiff[] = [] + const status = new Map() - const statuses = yield* git( - [...quote, ...args(["diff", "--no-ext-diff", "--name-status", "--no-renames", from, to, "--", "."])], - { cwd: state.directory }, - ) - - for (const line of statuses.text.trim().split("\n")) { - if (!line) continue - const [code, file] = line.split("\t") - if (!code || !file) continue - status.set(file, code.startsWith("A") ? "added" : code.startsWith("D") ? "deleted" : "modified") - } - - const numstat = yield* git( - [...quote, ...args(["diff", "--no-ext-diff", "--no-renames", "--numstat", from, to, "--", "."])], - { - cwd: state.directory, - }, - ) - - for (const line of numstat.text.trim().split("\n")) { - if (!line) continue - const [adds, dels, file] = line.split("\t") - if (!file) continue - const binary = adds === "-" && dels === "-" - - // kilocode_change start — skip oversized files - let oversized = false - if (!binary) { - const [fromSize, toSize] = yield* Effect.all( + const statuses = yield* git( [ - git(["--git-dir", state.gitdir, "cat-file", "-s", `${from}:${file}`]).pipe( - Effect.map((r) => parseInt(r.text) || 0), - ), - git(["--git-dir", state.gitdir, "cat-file", "-s", `${to}:${file}`]).pipe( - Effect.map((r) => parseInt(r.text) || 0), - ), + ...quote, + ...args(["diff", "--no-ext-diff", "--name-status", "--no-renames", from, to, "--", "."]), ], - { concurrency: 2 }, + { cwd: state.directory }, ) - oversized = fromSize > MAX_DIFF_SIZE || toSize > MAX_DIFF_SIZE - } - const skip = binary || oversized - // kilocode_change end - const [before, after] = skip - ? ["", ""] - : yield* Effect.all( - [ - git([...cfg, ...args(["show", `${from}:${file}`])]).pipe(Effect.map((item) => item.text)), - git([...cfg, ...args(["show", `${to}:${file}`])]).pipe(Effect.map((item) => item.text)), - ], - { concurrency: 2 }, - ) - const additions = binary ? 0 : parseInt(adds) - const deletions = binary ? 0 : parseInt(dels) - result.push({ - file, - before, - after, - additions: Number.isFinite(additions) ? additions : 0, - deletions: Number.isFinite(deletions) ? deletions : 0, - status: status.get(file) ?? "modified", - }) - } + for (const line of statuses.text.trim().split("\n")) { + if (!line) continue + const [code, file] = line.split("\t") + if (!code || !file) continue + status.set(file, code.startsWith("A") ? "added" : code.startsWith("D") ? "deleted" : "modified") + } - return result + const numstat = yield* git( + [...quote, ...args(["diff", "--no-ext-diff", "--no-renames", "--numstat", from, to, "--", "."])], + { + cwd: state.directory, + }, + ) + + for (const line of numstat.text.trim().split("\n")) { + if (!line) continue + const [adds, dels, file] = line.split("\t") + if (!file) continue + const binary = adds === "-" && dels === "-" + // kilocode_change start — skip oversized files + let oversized = false + if (!binary) { + const [fromSize, toSize] = yield* Effect.all( + [ + git(["--git-dir", state.gitdir, "cat-file", "-s", `${from}:${file}`]).pipe( + Effect.map((r) => parseInt(r.text) || 0), + ), + git(["--git-dir", state.gitdir, "cat-file", "-s", `${to}:${file}`]).pipe( + Effect.map((r) => parseInt(r.text) || 0), + ), + ], + { concurrency: 2 }, + ) + oversized = fromSize > MAX_DIFF_SIZE || toSize > MAX_DIFF_SIZE + } + const skip = binary || oversized + // kilocode_change end + const [before, after] = skip + ? ["", ""] + : yield* Effect.all( + [ + git([...cfg, ...args(["show", `${from}:${file}`])]).pipe(Effect.map((item) => item.text)), + git([...cfg, ...args(["show", `${to}:${file}`])]).pipe(Effect.map((item) => item.text)), + ], + { concurrency: 2 }, + ) + const additions = binary ? 0 : parseInt(adds) + const deletions = binary ? 0 : parseInt(dels) + result.push({ + file, + before, + after, + additions: Number.isFinite(additions) ? additions : 0, + deletions: Number.isFinite(deletions) ? deletions : 0, + status: status.get(file) ?? "modified", + }) + } + + return result + }), + ) }) // kilocode_change end @@ -536,7 +586,7 @@ export namespace Snapshot { Layer.provide(NodePath.layer), ) as Layer.Layer - const runPromise = makeRunPromise(Service, defaultLayer) + const { runPromise } = makeRuntime(Service, defaultLayer) // kilocode_change start — cache diffFull results to prevent redundant git spawning const diffCache = new Map>() diff --git a/packages/opencode/src/storage/db.ts b/packages/opencode/src/storage/db.ts index 0605201b9d..aab8d8e583 100644 --- a/packages/opencode/src/storage/db.ts +++ b/packages/opencode/src/storage/db.ts @@ -29,7 +29,7 @@ const log = Log.create({ service: "db" }) export namespace Database { export const Path = iife(() => { if (Flag.KILO_DB) { - if (path.isAbsolute(Flag.KILO_DB)) return Flag.KILO_DB + if (Flag.KILO_DB === ":memory:" || path.isAbsolute(Flag.KILO_DB)) return Flag.KILO_DB return path.join(Global.Path.data, Flag.KILO_DB) } const channel = Installation.CHANNEL @@ -145,17 +145,27 @@ export namespace Database { } } - export function transaction(callback: (tx: TxOrDb) => T): T { + type NotPromise = T extends Promise ? never : T + + export function transaction( + callback: (tx: TxOrDb) => NotPromise, + options?: { + behavior?: "deferred" | "immediate" | "exclusive" + }, + ): NotPromise { try { return callback(ctx.use().tx) } catch (err) { if (err instanceof Context.NotFound) { const effects: (() => void | Promise)[] = [] - const result = (Client().transaction as any)((tx: TxOrDb) => { - return ctx.provide({ tx, effects }, () => callback(tx)) - }) + const result = Client().transaction( + (tx: TxOrDb) => { + return ctx.provide({ tx, effects }, () => callback(tx)) + }, + { behavior: options?.behavior }, + ) for (const effect of effects) effect() - return result + return result as NotPromise } throw err } diff --git a/packages/opencode/src/sync/README.md b/packages/opencode/src/sync/README.md new file mode 100644 index 0000000000..546cf3ced4 --- /dev/null +++ b/packages/opencode/src/sync/README.md @@ -0,0 +1,179 @@ +tl;dr All of these APIs work, are properly type-checked, and are sync events are backwards compatible with `Bus`: + +```ts +// The schema from `Updated` typechecks the object correctly +SyncEvent.run(Updated, { sessionID: id, info: { title: "foo" } }) + +// `subscribeAll` passes a generic sync event +SyncEvent.subscribeAll((event) => { + // These will be type-checked correctly + event.id + event.seq + // This will be unknown because we are listening for all events, + // and this API is only used to record them + event.data +}) + +// This works, but you shouldn't publish sync event like this (should fail in the future) +Bus.publish(Updated, { sessionID: id, info: { title: "foo" } }) + +// Update event is fully type-checked +Bus.subscribe(Updated, (event) => event.properties.info.title) + +// Update event is fully type-checked +client.subscribe("session.updated", (evt) => evt.properties.info.title) +``` + +# Goal + +## Syncing with only one writer + +This system defines a basic event sourcing system for session replayability. The goal is to allow for one device to control and modify the session, and allow multiple other devices to "sync" session data. The sync works by getting a log of events to replay and replaying them locally. + +Because only one device is allowed to write, we don't need any kind of sophisticated distributed system clocks or causal ordering. We implement total ordering with a simple sequence id (a number) and increment it by one every time we generate an event. + +## Bus event integration and backwards compatibility + +This initial implementation aims to be fully backwards compatible. We should be able to land this without any visible changes to the user. + +An existing `Bus` abstraction to send events already exists. We already send events like `session.created` through the system. We should not duplicate this. + +The difference in event sourcing is events are sent _before_ the mutation happens, and "projectors" handle the effects and perform the mutations. This difference is subtle, and a necessary change for syncing to work. + +So the goal is: + +- Introduce a new syncing abstraction to handle event sourcing and projectors +- Seamlessly integrate these new events into the same existing `Bus` abstraction +- Maintain full backwards compatibility to reduce risk + +## My approach + +This directory introduces a new abstraction: `SyncEvent`. This handles all of the event sourcing. + +There are now "sync events" which are different than "bus events". Bus events are defined like this: + +```ts +const Diff = BusEvent.define( + "session.diff", + z.object({ + sessionID: SessionID.zod, + diff: Snapshot.FileDiff.array(), + }), +) +``` + +You can do `Bus.publish(Diff, { ... })` to push these events, and `Bus.subscribe(Diff, handler)` to listen to them. + +Sync events are a lower-level abstraction which are similar, but also handle the requirements for recording and replaying. Defining them looks like this: + +```ts +const Created = SyncEvent.define({ + type: "session.created", + version: 1, + aggregate: "sessionID", + schema: z.object({ + sessionID: SessionID.zod, + info: Info, + }), +}) +``` + +Not too different, except they track a version and an "aggregate" field (will explain that later). + +You do this to run an event, which is kind of like `Bus.publish` except that it runs through the event sourcing system: + +``` +SyncEvent.run(Created, { ... }) +``` + +The data passed as the second argument is properly type-checked based on the schema defined in `Created`. + +Importantly, **sync events automatically re-publish as bus events**. This makes them backwards compatible, and allows the `Bus` to still be the single abstraction that the system uses to listen for individual events. + +**We have upgraded many of the session events to be sync events** (all of the ones that mutate the db). Sync and bus events are largely compatible. Here are the differences: + +### Event shape + +- The shape of the events are slightly different. A sync event has the `type`, `id`, `seq`, `aggregateID`, and `data` fields. A bus event has the `type` and `properties` fields. `data` and `properties` are largely the same thing. This conversion is automatically handled when the sync system re-published the event throught the bus. + +The reason for this is because sync events need to track more information. I chose not to copy the `properties` naming to more clearly disambiguate the event types. + +### Event flow + +There is no way to subscribe to individual sync events in `SyncEvent`. You can use `subscribeAll` to receive _all_ of the events, which is needed for clients that want to record them. + +To listen for individual events, use `Bus.subscribe`. You can pass in a sync event definition to it: `Bus.subscribe(Created, handler)`. This is fully supported. + +You should never "publish" a sync event however: `Bus.publish(Created, ...)`. I would like to force this to be a type error in the future. You should never be touching the db directly, and should not be manually handling these events. + +### Backwards compatibility + +The system install projectors in `server/projectors.js`. It calls `SyncEvent.init` to do this. It also installs a hook for dynamically converting an event at runtime (`convertEvent`). + +This allows you to "reshape" an event from the sync system before it's published to the bus. This should be avoided, but might be necessary for temporary backwards compat. + +The only time we use this is the `session.updated` event. Previously this event contained the entire session object. The sync even only contains the fields updated. We convert the event to contain to full object for backwards compatibility (but ideally we'd remove this). + +It's very important that types are correct when working with events. Event definitions have a `schema` which carries the defintiion of the event shape (provided by a zod schema, inferred into a TypeScript type). Examples: + +```ts +// The schema from `Updated` typechecks the object correctly +SyncEvent.run(Updated, { sessionID: id, info: { title: "foo" } }) + +// `subscribeAll` passes a generic sync event +SyncEvent.subscribeAll((event) => { + // These will be type-checked correctly + event.id + event.seq + // This will be unknown because we are listening for all events, + // and this API is only used to record them + event.data +}) + +// This works, but you shouldn't publish sync event like this (should fail in the future) +Bus.publish(Updated, { sessionID: id, info: { title: "foo" } }) + +// Update event is fully type-checked +Bus.subscribe(Updated, (event) => event.properties.info.title) + +// Update event is fully type-checked +client.subscribe("session.updated", (evt) => evt.properties.info.title) +``` + +The last two examples look similar to `SyncEvent.run`, but they were the cause of a lot of grief. Those are existing APIs that we can't break, but we are passing in the new sync event definitions to these APIs, which sometimes have a different event shape. + +I previously mentioned the runtime conversion of events, but we still need to the types to work! To do that, the `define` API supports an optional `busSchema` prop to give it the schema for backwards compatibility. For example this is the full definition of `Session.Update`: + +```ts +const Update = SyncEvent.define({ + type: "session.updated", + version: 1, + aggregate: "sessionID", + schema: z.object({ + sessionID: SessionID.zod, + info: partialSchema(Info), + }), + busSchema: z.object({ + sessionID: SessionID.zod, + info: Info, + }), +}) +``` + +_Important_: the conversion done in `convertEvent` is not automatically type-checked with `busSchema`. It's very important they match, but because we need this at type-checking time this needs to live here. + +Internally, the way this works is `busSchema` is stored on a `properties` field which is what the bus system expects. Doing this made everything with `Bus` "just work". This is why you can pass a sync event to the bus APIs. + +_Alternatives_ + +These are some other paths I explored: + +- Providing a way to subscribe to individual sync events, and change all the instances of `Bus.subscribe` in our code to it. Then you are directly only working with sync events always. + - Two big problems. First, `Bus` is instance-scoped, and we'd need to make the sync event system instance-scoped too for backwards compat. If we didn't, those listeners would get calls for events they weren't expecting. + - Second, we can't change consumers of our SDK. So they still have to use the old events, and we might as well stick with them for consistency +- Directly add sync event support to bus system + - I explored adding sync events to the bus, but due to backwards compat, it only made it more complicated (still need to support both shapes) +- I explored a `convertSchema` function to convert the event schema at runtime so we didn't need `busSchema` + - Fatal flaw: we need type-checking done earlier. We can't do this at run-time. This worked for consumers of our SDK (because it gets generated TS types from the converted schema) but breaks for our internal usage of `Bus.subscribe` calls + +I explored many other permutations of the above solutions. What we have today I think is the best balance of backwards compatibility while opening a path forward for the new events. diff --git a/packages/opencode/src/sync/event.sql.ts b/packages/opencode/src/sync/event.sql.ts new file mode 100644 index 0000000000..b51b5a5dfe --- /dev/null +++ b/packages/opencode/src/sync/event.sql.ts @@ -0,0 +1,16 @@ +import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core" + +export const EventSequenceTable = sqliteTable("event_sequence", { + aggregate_id: text().notNull().primaryKey(), + seq: integer().notNull(), +}) + +export const EventTable = sqliteTable("event", { + id: text().primaryKey(), + aggregate_id: text() + .notNull() + .references(() => EventSequenceTable.aggregate_id, { onDelete: "cascade" }), + seq: integer().notNull(), + type: text().notNull(), + data: text({ mode: "json" }).$type>().notNull(), +}) diff --git a/packages/opencode/src/sync/index.ts b/packages/opencode/src/sync/index.ts new file mode 100644 index 0000000000..f2e55ba5ba --- /dev/null +++ b/packages/opencode/src/sync/index.ts @@ -0,0 +1,263 @@ +import z from "zod" +import type { ZodObject } from "zod" +import { EventEmitter } from "events" +import { Database, eq } from "@/storage/db" +import { Bus as ProjectBus } from "@/bus" +import { BusEvent } from "@/bus/bus-event" +import { EventSequenceTable, EventTable } from "./event.sql" +import { EventID } from "./schema" +import { Flag } from "@/flag/flag" + +export namespace SyncEvent { + export type Definition = { + type: string + version: number + aggregate: string + schema: z.ZodObject + + // This is temporary and only exists for compatibility with bus + // event definitions + properties: z.ZodObject + } + + export type Event = { + id: string + seq: number + aggregateID: string + data: z.infer + } + + export type SerializedEvent = Event & { type: string } + + type ProjectorFunc = (db: Database.TxOrDb, data: unknown) => void + + export const registry = new Map() + let projectors: Map | undefined + const versions = new Map() + let frozen = false + let convertEvent: (type: string, event: Event["data"]) => Promise> | Record + + const Bus = new EventEmitter<{ event: [{ def: Definition; event: Event }] }>() + + export function reset() { + frozen = false + projectors = undefined + convertEvent = (_, data) => data + } + + export function init(input: { projectors: Array<[Definition, ProjectorFunc]>; convertEvent?: typeof convertEvent }) { + projectors = new Map(input.projectors) + + // Install all the latest event defs to the bus. We only ever emit + // latest versions from code, and keep around old versions for + // replaying. Replaying does not go through the bus, and it + // simplifies the bus to only use unversioned latest events + for (let [type, version] of versions.entries()) { + let def = registry.get(versionedType(type, version))! + + BusEvent.define(def.type, def.properties || def.schema) + } + + // Freeze the system so it clearly errors if events are defined + // after `init` which would cause bugs + frozen = true + convertEvent = input.convertEvent || ((_, data) => data) + } + + export function versionedType(type: A): A + export function versionedType(type: A, version: B): `${A}/${B}` + export function versionedType(type: string, version?: number) { + return version ? `${type}.${version}` : type + } + + export function define< + Type extends string, + Agg extends string, + Schema extends ZodObject>>, + BusSchema extends ZodObject = Schema, + >(input: { type: Type; version: number; aggregate: Agg; schema: Schema; busSchema?: BusSchema }) { + if (frozen) { + throw new Error("Error defining sync event: sync system has been frozen") + } + + const def = { + type: input.type, + version: input.version, + aggregate: input.aggregate, + schema: input.schema, + properties: input.busSchema ? input.busSchema : input.schema, + } + + versions.set(def.type, Math.max(def.version, versions.get(def.type) || 0)) + + registry.set(versionedType(def.type, def.version), def) + + return def + } + + export function project( + def: Def, + func: (db: Database.TxOrDb, data: Event["data"]) => void, + ): [Definition, ProjectorFunc] { + return [def, func as ProjectorFunc] + } + + function process(def: Def, event: Event, options: { publish: boolean }) { + if (projectors == null) { + throw new Error("No projectors available. Call `SyncEvent.init` to install projectors") + } + + const projector = projectors.get(def) + if (!projector) { + throw new Error(`Projector not found for event: ${def.type}`) + } + + // idempotent: need to ignore any events already logged + + Database.transaction((tx) => { + projector(tx, event.data) + + if (Flag.KILO_EXPERIMENTAL_WORKSPACES) { + tx.insert(EventSequenceTable) + .values({ + aggregate_id: event.aggregateID, + seq: event.seq, + }) + .onConflictDoUpdate({ + target: EventSequenceTable.aggregate_id, + set: { seq: event.seq }, + }) + .run() + tx.insert(EventTable) + .values({ + id: event.id, + seq: event.seq, + aggregate_id: event.aggregateID, + type: versionedType(def.type, def.version), + data: event.data as Record, + }) + .run() + } + + Database.effect(() => { + Bus.emit("event", { + def, + event, + }) + + if (options?.publish) { + const result = convertEvent(def.type, event.data) + if (result instanceof Promise) { + result.then((data) => { + ProjectBus.publish({ type: def.type, properties: def.schema }, data) + }) + } else { + ProjectBus.publish({ type: def.type, properties: def.schema }, result) + } + } + }) + }) + } + + // TODO: + // + // * Support applying multiple events at one time. One transaction, + // and it validets all the sequence ids + // * when loading events from db, apply zod validation to ensure shape + + export function replay(event: SerializedEvent, options?: { republish: boolean }) { + const def = registry.get(event.type) + if (!def) { + throw new Error(`Unknown event type: ${event.type}`) + } + + const row = Database.use((db) => + db + .select({ seq: EventSequenceTable.seq }) + .from(EventSequenceTable) + .where(eq(EventSequenceTable.aggregate_id, event.aggregateID)) + .get(), + ) + + const latest = row?.seq ?? -1 + if (event.seq <= latest) { + return + } + + const expected = latest + 1 + if (event.seq !== expected) { + throw new Error(`Sequence mismatch for aggregate "${event.aggregateID}": expected ${expected}, got ${event.seq}`) + } + + process(def, event, { publish: !!options?.republish }) + } + + export function run(def: Def, data: Event["data"]) { + const agg = (data as Record)[def.aggregate] + // This should never happen: we've enforced it via typescript in + // the definition + if (agg == null) { + throw new Error(`SyncEvent.run: "${def.aggregate}" required but not found: ${JSON.stringify(data)}`) + } + + if (def.version !== versions.get(def.type)) { + throw new Error(`SyncEvent.run: running old versions of events is not allowed: ${def.type}`) + } + + // Note that this is an "immediate" transaction which is critical. + // We need to make sure we can safely read and write with nothing + // else changing the data from under us + Database.transaction( + (tx) => { + const id = EventID.ascending() + const row = tx + .select({ seq: EventSequenceTable.seq }) + .from(EventSequenceTable) + .where(eq(EventSequenceTable.aggregate_id, agg)) + .get() + const seq = row?.seq != null ? row.seq + 1 : 0 + + const event = { id, seq, aggregateID: agg, data } + process(def, event, { publish: true }) + }, + { + behavior: "immediate", + }, + ) + } + + export function remove(aggregateID: string) { + Database.transaction((tx) => { + tx.delete(EventSequenceTable).where(eq(EventSequenceTable.aggregate_id, aggregateID)).run() + tx.delete(EventTable).where(eq(EventTable.aggregate_id, aggregateID)).run() + }) + } + + export function subscribeAll(handler: (event: { def: Definition; event: Event }) => void) { + Bus.on("event", handler) + return () => Bus.off("event", handler) + } + + export function payloads() { + return z + .union( + registry + .entries() + .map(([type, def]) => { + return z + .object({ + type: z.literal(type), + aggregate: z.literal(def.aggregate), + data: def.schema, + }) + .meta({ + ref: "SyncEvent" + "." + def.type, + }) + }) + .toArray() as any, + ) + .meta({ + ref: "SyncEvent", + }) + } +} diff --git a/packages/opencode/src/sync/schema.ts b/packages/opencode/src/sync/schema.ts new file mode 100644 index 0000000000..8e734e5981 --- /dev/null +++ b/packages/opencode/src/sync/schema.ts @@ -0,0 +1,14 @@ +import { Schema } from "effect" +import z from "zod" + +import { Identifier } from "@/id/id" +import { withStatics } from "@/util/schema" + +export const EventID = Schema.String.pipe( + Schema.brand("EventID"), + withStatics((s) => ({ + make: (id: string) => s.makeUnsafe(id), + ascending: (id?: string) => s.makeUnsafe(Identifier.ascending("event", id)), + zod: Identifier.schema("event").pipe(z.custom>()), + })), +) diff --git a/packages/opencode/src/tool/apply_patch.ts b/packages/opencode/src/tool/apply_patch.ts index 8e932a9ba2..31fd33da27 100644 --- a/packages/opencode/src/tool/apply_patch.ts +++ b/packages/opencode/src/tool/apply_patch.ts @@ -14,6 +14,7 @@ import { Filesystem } from "../util/filesystem" import DESCRIPTION from "./apply_patch.txt" import { File } from "../file" import { filterDiagnostics } from "./diagnostics" // kilocode_change +import { Format } from "../format" const PatchParams = z.object({ patchText: z.string().describe("The full patch text that describes all changes to be made"), @@ -221,9 +222,8 @@ export const ApplyPatchTool = Tool.define("apply_patch", { } if (edited) { - await Bus.publish(File.Event.Edited, { - file: edited, - }) + await Format.file(edited) + Bus.publish(File.Event.Edited, { file: edited }) } } diff --git a/packages/opencode/src/tool/edit.ts b/packages/opencode/src/tool/edit.ts index d2b95fc05c..df795f2b52 100644 --- a/packages/opencode/src/tool/edit.ts +++ b/packages/opencode/src/tool/edit.ts @@ -12,6 +12,7 @@ import DESCRIPTION from "./edit.txt" import { File } from "../file" import { FileWatcher } from "../file/watcher" import { Bus } from "../bus" +import { Format } from "../format" import { FileTime } from "../file/time" import { Filesystem } from "../util/filesystem" import { Instance } from "../project/instance" @@ -97,9 +98,8 @@ export const EditTool = Tool.define("edit", { }, }) await Filesystem.write(filePath, params.newString) - await Bus.publish(File.Event.Edited, { - file: filePath, - }) + await Format.file(filePath) + Bus.publish(File.Event.Edited, { file: filePath }) await Bus.publish(FileWatcher.Event.Updated, { file: filePath, event: existed ? "change" : "add", @@ -136,9 +136,8 @@ export const EditTool = Tool.define("edit", { }) await Filesystem.write(filePath, contentNew) - await Bus.publish(File.Event.Edited, { - file: filePath, - }) + await Format.file(filePath) + Bus.publish(File.Event.Edited, { file: filePath }) await Bus.publish(FileWatcher.Event.Updated, { file: filePath, event: "change", diff --git a/packages/opencode/src/tool/registry.ts b/packages/opencode/src/tool/registry.ts index 62b8d38456..ebd1167eda 100644 --- a/packages/opencode/src/tool/registry.ts +++ b/packages/opencode/src/tool/registry.ts @@ -33,7 +33,7 @@ import { Glob } from "../util/glob" import { pathToFileURL } from "url" import { Effect, Layer, ServiceMap } from "effect" import { InstanceState } from "@/effect/instance-state" -import { makeRunPromise } from "@/effect/run-service" +import { makeRuntime } from "@/effect/run-service" export namespace ToolRegistry { const log = Log.create({ service: "tool.registry" }) @@ -205,7 +205,7 @@ export namespace ToolRegistry { }), ) - const runPromise = makeRunPromise(Service, layer) + const { runPromise } = makeRuntime(Service, layer) export async function register(tool: Tool.Info) { return runPromise((svc) => svc.register(tool)) diff --git a/packages/opencode/src/tool/task.ts b/packages/opencode/src/tool/task.ts index 5fa792510a..be380a9f91 100644 --- a/packages/opencode/src/tool/task.ts +++ b/packages/opencode/src/tool/task.ts @@ -4,7 +4,6 @@ import z from "zod" import { Session } from "../session" import { SessionID, MessageID } from "../session/schema" import { MessageV2 } from "../session/message-v2" -import { Identifier } from "../id/id" import { Agent } from "../agent/agent" import { SessionPrompt } from "../session/prompt" import { iife } from "@/util/iife" @@ -86,6 +85,8 @@ export const TaskTool = Tool.define("task", async (ctx) => { (r) => r.permission === "edit" || r.permission === "bash" || isMcpRule(r.permission), ) // kilocode_change end + const hasTaskPermission = agent.permission.some((rule) => rule.permission === "task") + const hasTodoWritePermission = agent.permission.some((rule) => rule.permission === "todowrite") const session = await iife(async () => { if (params.task_id) { @@ -110,6 +111,24 @@ export const TaskTool = Tool.define("task", async (ctx) => { // kilocode_change start — unconditionally deny task for all subagent sessions { permission: "task", pattern: "*", action: "deny" }, // kilocode_change end + ...(hasTodoWritePermission + ? [] + : [ + { + permission: "todowrite" as const, + pattern: "*" as const, + action: "deny" as const, + }, + ]), + ...(hasTaskPermission + ? [] + : [ + { + permission: "task" as const, + pattern: "*" as const, + action: "deny" as const, + }, + ]), ...(config.experimental?.primary_tools?.map((t) => ({ pattern: "*", action: "allow" as const, @@ -156,6 +175,8 @@ export const TaskTool = Tool.define("task", async (ctx) => { todowrite: false, todoread: false, task: false, // kilocode_change + ...(hasTodoWritePermission ? {} : { todowrite: false }), + ...(hasTaskPermission ? {} : { task: false }), ...Object.fromEntries((config.experimental?.primary_tools ?? []).map((t) => [t, false])), }, parts: promptParts, diff --git a/packages/opencode/src/tool/todo.ts b/packages/opencode/src/tool/todo.ts index 440f1563c7..53b687b1d1 100644 --- a/packages/opencode/src/tool/todo.ts +++ b/packages/opencode/src/tool/todo.ts @@ -16,7 +16,7 @@ export const TodoWriteTool = Tool.define("todowrite", { metadata: {}, }) - await Todo.update({ + Todo.update({ sessionID: ctx.sessionID, todos: params.todos, }) @@ -29,25 +29,3 @@ export const TodoWriteTool = Tool.define("todowrite", { } }, }) - -export const TodoReadTool = Tool.define("todoread", { - description: "Use this tool to read your todo list", - parameters: z.object({}), - async execute(_params, ctx) { - await ctx.ask({ - permission: "todoread", - patterns: ["*"], - always: ["*"], - metadata: {}, - }) - - const todos = await Todo.get(ctx.sessionID) - return { - title: `${todos.filter((x) => x.status !== "completed").length} todos`, - metadata: { - todos, - }, - output: JSON.stringify(todos, null, 2), - } - }, -}) diff --git a/packages/opencode/src/tool/todoread.txt b/packages/opencode/src/tool/todoread.txt deleted file mode 100644 index 9ef8d913fc..0000000000 --- a/packages/opencode/src/tool/todoread.txt +++ /dev/null @@ -1,14 +0,0 @@ -Use this tool to read the current to-do list for the session. This tool should be used proactively and frequently to ensure that you are aware of -the status of the current task list. You should make use of this tool as often as possible, especially in the following situations: -- At the beginning of conversations to see what's pending -- Before starting new tasks to prioritize work -- When the user asks about previous tasks or plans -- Whenever you're uncertain about what to do next -- After completing tasks to update your understanding of remaining work -- After every few messages to ensure you're on track - -Usage: -- This tool takes in no parameters. So leave the input blank or empty. DO NOT include a dummy object, placeholder string or a key like "input" or "empty". LEAVE IT BLANK. -- Returns a list of todo items with their status, priority, and content -- Use this information to track progress and plan next steps -- If no todos exist yet, an empty list will be returned diff --git a/packages/opencode/src/tool/truncate.ts b/packages/opencode/src/tool/truncate.ts index 031ca6f241..97a1c92e3a 100644 --- a/packages/opencode/src/tool/truncate.ts +++ b/packages/opencode/src/tool/truncate.ts @@ -1,7 +1,7 @@ import { Cause, Duration, Effect, Layer, Schedule, ServiceMap } from "effect" import path from "path" import type { Agent } from "../agent/agent" -import { makeRunPromise } from "@/effect/run-service" +import { makeRuntime } from "@/effect/run-service" import { AppFileSystem } from "@/filesystem" import { evaluate } from "@/permission/evaluate" import { Identifier } from "../id/id" @@ -135,7 +135,7 @@ export namespace Truncate { export const defaultLayer = layer.pipe(Layer.provide(AppFileSystem.defaultLayer)) as Layer.Layer - const runPromise = makeRunPromise(Service, defaultLayer) + const { runPromise } = makeRuntime(Service, defaultLayer) export async function output(text: string, options: Options = {}, agent?: Agent.Info): Promise { return runPromise((s) => s.output(text, options, agent)) diff --git a/packages/opencode/src/tool/write.ts b/packages/opencode/src/tool/write.ts index 5f5b1ea234..d5561aedfb 100644 --- a/packages/opencode/src/tool/write.ts +++ b/packages/opencode/src/tool/write.ts @@ -7,6 +7,7 @@ import DESCRIPTION from "./write.txt" import { Bus } from "../bus" import { File } from "../file" import { FileWatcher } from "../file/watcher" +import { Format } from "../format" import { FileTime } from "../file/time" import { Filesystem } from "../util/filesystem" import { Instance } from "../project/instance" @@ -45,9 +46,8 @@ export const WriteTool = Tool.define("write", { }) await Filesystem.write(filepath, params.content) - await Bus.publish(File.Event.Edited, { - file: filepath, - }) + await Format.file(filepath) + Bus.publish(File.Event.Edited, { file: filepath }) await Bus.publish(FileWatcher.Event.Updated, { file: filepath, event: exists ? "change" : "add", diff --git a/packages/opencode/src/util/update-schema.ts b/packages/opencode/src/util/update-schema.ts new file mode 100644 index 0000000000..f2246ece33 --- /dev/null +++ b/packages/opencode/src/util/update-schema.ts @@ -0,0 +1,13 @@ +import z from "zod" + +export function updateSchema(schema: z.ZodObject) { + const next = {} as { + [K in keyof T]: z.ZodOptional> + } + + for (const [k, v] of Object.entries(schema.required().shape) as [keyof T & string, z.ZodTypeAny][]) { + next[k] = v.nullable() as unknown as (typeof next)[typeof k] + } + + return z.object(next) +} diff --git a/packages/opencode/src/worktree/index.ts b/packages/opencode/src/worktree/index.ts index 6ed0e48202..3aeee983f4 100644 --- a/packages/opencode/src/worktree/index.ts +++ b/packages/opencode/src/worktree/index.ts @@ -1,5 +1,3 @@ -import fs from "fs/promises" -import path from "path" import z from "zod" import { NamedError } from "@opencode-ai/util/error" import { Global } from "../global" @@ -9,12 +7,15 @@ import { Project } from "../project/project" import { Database, eq } from "../storage/db" import { ProjectTable } from "../project/project.sql" import type { ProjectID } from "../project/schema" -import { fn } from "../util/fn" import { Log } from "../util/log" -import { Process } from "../util/process" -import { git } from "../util/git" +import { Slug } from "@opencode-ai/util/slug" import { BusEvent } from "@/bus/bus-event" import { GlobalBus } from "@/bus/global" +import { Effect, FileSystem, Layer, Path, Scope, ServiceMap, Stream } from "effect" +import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process" +import { NodeFileSystem, NodePath } from "@effect/platform-node" +import { makeRuntime } from "@/effect/run-service" +import * as CrossSpawnSpawner from "@/effect/cross-spawn-spawner" export namespace Worktree { const log = Log.create({ service: "worktree" }) @@ -123,77 +124,7 @@ export namespace Worktree { }), ) - const ADJECTIVES = [ - "brave", - "calm", - "clever", - "cosmic", - "crisp", - "curious", - "eager", - "gentle", - "glowing", - "happy", - "hidden", - "jolly", - "kind", - "lucky", - "mighty", - "misty", - "neon", - "nimble", - "playful", - "proud", - "quick", - "quiet", - "shiny", - "silent", - "stellar", - "sunny", - "swift", - "tidy", - "witty", - ] as const - - const NOUNS = [ - "cabin", - "cactus", - "canyon", - "circuit", - "comet", - "eagle", - "engine", - "falcon", - "forest", - "garden", - "harbor", - "island", - "knight", - "lagoon", - "meadow", - "moon", - "mountain", - "nebula", - "orchid", - "otter", - "panda", - "pixel", - "planet", - "river", - "rocket", - "sailor", - "squid", - "star", - "tiger", - "wizard", - "wolf", - ] as const - - function pick(list: T) { - return list[Math.floor(Math.random() * list.length)] - } - - function slug(input: string) { + function slugify(input: string) { return input .trim() .toLowerCase() @@ -202,28 +133,8 @@ export namespace Worktree { .replace(/-+$/, "") } - function randomName() { - return `${pick(ADJECTIVES)}-${pick(NOUNS)}` - } - - async function exists(target: string) { - return fs - .stat(target) - .then(() => true) - .catch(() => false) - } - - function outputText(input: Uint8Array | undefined) { - if (!input?.length) return "" - return new TextDecoder().decode(input).trim() - } - - function errorText(result: { stdout?: Uint8Array; stderr?: Uint8Array }) { - return [outputText(result.stderr), outputText(result.stdout)].filter(Boolean).join("\n") - } - - function failed(result: { stdout?: Uint8Array; stderr?: Uint8Array }) { - return [outputText(result.stderr), outputText(result.stdout)].filter(Boolean).flatMap((chunk) => + function failedRemoves(...chunks: string[]) { + return chunks.filter(Boolean).flatMap((chunk) => chunk .split("\n") .map((line) => line.trim()) @@ -237,436 +148,484 @@ export namespace Worktree { ) } - async function prune(root: string, entries: string[]) { - const base = await canonical(root) - await Promise.all( - entries.map(async (entry) => { - const target = await canonical(path.resolve(root, entry)) - if (target === base) return - if (!target.startsWith(`${base}${path.sep}`)) return - await fs.rm(target, { recursive: true, force: true }).catch(() => undefined) - }), - ) + // --------------------------------------------------------------------------- + // Effect service + // --------------------------------------------------------------------------- + + export interface Interface { + readonly makeWorktreeInfo: (name?: string) => Effect.Effect + readonly createFromInfo: (info: Info, startCommand?: string) => Effect.Effect + readonly create: (input?: CreateInput) => Effect.Effect + readonly remove: (input: RemoveInput) => Effect.Effect + readonly reset: (input: ResetInput) => Effect.Effect } - async function sweep(root: string) { - const first = await git(["clean", "-ffdx"], { cwd: root }) - if (first.exitCode === 0) return first + export class Service extends ServiceMap.Service()("@opencode/Worktree") {} - const entries = failed(first) - if (!entries.length) return first + type GitResult = { code: number; text: string; stderr: string } - await prune(root, entries) - return git(["clean", "-ffdx"], { cwd: root }) - } + export const layer: Layer.Layer< + Service, + never, + FileSystem.FileSystem | Path.Path | ChildProcessSpawner.ChildProcessSpawner + > = Layer.effect( + Service, + Effect.gen(function* () { + const scope = yield* Scope.Scope + const fsys = yield* FileSystem.FileSystem + const pathSvc = yield* Path.Path + const spawner = yield* ChildProcessSpawner.ChildProcessSpawner - async function canonical(input: string) { - const abs = path.resolve(input) - const real = await fs.realpath(abs).catch(() => abs) - const normalized = path.normalize(real) - return process.platform === "win32" ? normalized.toLowerCase() : normalized - } + const git = Effect.fnUntraced( + function* (args: string[], opts?: { cwd?: string }) { + const handle = yield* spawner.spawn( + ChildProcess.make("git", args, { cwd: opts?.cwd, extendEnv: true, stdin: "ignore" }), + ) + const [text, stderr] = yield* Effect.all( + [Stream.mkString(Stream.decodeText(handle.stdout)), Stream.mkString(Stream.decodeText(handle.stderr))], + { concurrency: 2 }, + ) + const code = yield* handle.exitCode + return { code, text, stderr } satisfies GitResult + }, + Effect.scoped, + Effect.catch((e) => + Effect.succeed({ code: 1, text: "", stderr: e instanceof Error ? e.message : String(e) } satisfies GitResult), + ), + ) - async function candidate(root: string, base?: string) { - for (const attempt of Array.from({ length: 26 }, (_, i) => i)) { - const name = base ? (attempt === 0 ? base : `${base}-${randomName()}`) : randomName() - const branch = `opencode/${name}` - const directory = path.join(root, name) + const MAX_NAME_ATTEMPTS = 26 + const candidate = Effect.fn("Worktree.candidate")(function* (root: string, base?: string) { + for (const attempt of Array.from({ length: MAX_NAME_ATTEMPTS }, (_, i) => i)) { + const name = base ? (attempt === 0 ? base : `${base}-${Slug.create()}`) : Slug.create() + const branch = `opencode/${name}` + const directory = pathSvc.join(root, name) - if (await exists(directory)) continue + if (yield* fsys.exists(directory).pipe(Effect.orDie)) continue - const ref = `refs/heads/${branch}` - const branchCheck = await git(["show-ref", "--verify", "--quiet", ref], { - cwd: Instance.worktree, + const ref = `refs/heads/${branch}` + const branchCheck = yield* git(["show-ref", "--verify", "--quiet", ref], { cwd: Instance.worktree }) + if (branchCheck.code === 0) continue + + return Info.parse({ name, branch, directory }) + } + throw new NameGenerationFailedError({ message: "Failed to generate a unique worktree name" }) }) - if (branchCheck.exitCode === 0) continue - return Info.parse({ name, branch, directory }) - } + const makeWorktreeInfo = Effect.fn("Worktree.makeWorktreeInfo")(function* (name?: string) { + if (Instance.project.vcs !== "git") { + throw new NotGitError({ message: "Worktrees are only supported for git projects" }) + } - throw new NameGenerationFailedError({ message: "Failed to generate a unique worktree name" }) - } + const root = pathSvc.join(Global.Path.data, "worktree", Instance.project.id) + yield* fsys.makeDirectory(root, { recursive: true }).pipe(Effect.orDie) - async function runStartCommand(directory: string, cmd: string) { - if (process.platform === "win32") { - return Process.run(["cmd", "/c", cmd], { cwd: directory, nothrow: true }) - } - return Process.run(["bash", "-lc", cmd], { cwd: directory, nothrow: true }) - } - - type StartKind = "project" | "worktree" - - async function runStartScript(directory: string, cmd: string, kind: StartKind) { - const text = cmd.trim() - if (!text) return true - - const ran = await runStartCommand(directory, text) - if (ran.code === 0) return true - - log.error("worktree start command failed", { - kind, - directory, - message: errorText(ran), - }) - return false - } - - async function runStartScripts(directory: string, input: { projectID: ProjectID; extra?: string }) { - const row = Database.use((db) => db.select().from(ProjectTable).where(eq(ProjectTable.id, input.projectID)).get()) - const project = row ? Project.fromRow(row) : undefined - const startup = project?.commands?.start?.trim() ?? "" - const ok = await runStartScript(directory, startup, "project") - if (!ok) return false - - const extra = input.extra ?? "" - await runStartScript(directory, extra, "worktree") - return true - } - - function queueStartScripts(directory: string, input: { projectID: ProjectID; extra?: string }) { - setTimeout(() => { - const start = async () => { - await runStartScripts(directory, input) - } - - void start().catch((error) => { - log.error("worktree start task failed", { directory, error }) + const base = name ? slugify(name) : "" + return yield* candidate(root, base || undefined) }) - }, 0) - } - export async function makeWorktreeInfo(name?: string): Promise { - if (Instance.project.vcs !== "git") { - throw new NotGitError({ message: "Worktrees are only supported for git projects" }) - } + const setup = Effect.fnUntraced(function* (info: Info) { + const created = yield* git(["worktree", "add", "--no-checkout", "-b", info.branch, info.directory], { + cwd: Instance.worktree, + }) + if (created.code !== 0) { + throw new CreateFailedError({ message: created.stderr || created.text || "Failed to create git worktree" }) + } - const root = path.join(Global.Path.data, "worktree", Instance.project.id) - await fs.mkdir(root, { recursive: true }) + yield* Effect.promise(() => Project.addSandbox(Instance.project.id, info.directory).catch(() => undefined)) + }) - const base = name ? slug(name) : "" - return candidate(root, base || undefined) - } + const boot = Effect.fnUntraced(function* (info: Info, startCommand?: string) { + const projectID = Instance.project.id + const extra = startCommand?.trim() - export async function createFromInfo(info: Info, startCommand?: string) { - const created = await git(["worktree", "add", "--no-checkout", "-b", info.branch, info.directory], { - cwd: Instance.worktree, - }) - if (created.exitCode !== 0) { - throw new CreateFailedError({ message: errorText(created) || "Failed to create git worktree" }) - } - - await Project.addSandbox(Instance.project.id, info.directory).catch(() => undefined) - - const projectID = Instance.project.id - const extra = startCommand?.trim() - - return () => { - const start = async () => { - const populated = await git(["reset", "--hard"], { cwd: info.directory }) - if (populated.exitCode !== 0) { - const message = errorText(populated) || "Failed to populate worktree" + const populated = yield* git(["reset", "--hard"], { cwd: info.directory }) + if (populated.code !== 0) { + const message = populated.stderr || populated.text || "Failed to populate worktree" log.error("worktree checkout failed", { directory: info.directory, message }) GlobalBus.emit("event", { directory: info.directory, - payload: { - type: Event.Failed.type, - properties: { - message, - }, - }, + payload: { type: Event.Failed.type, properties: { message } }, }) return } - const booted = await Instance.provide({ - directory: info.directory, - init: InstanceBootstrap, - fn: () => undefined, - }) - .then(() => true) - .catch((error) => { - const message = error instanceof Error ? error.message : String(error) - log.error("worktree bootstrap failed", { directory: info.directory, message }) - GlobalBus.emit("event", { - directory: info.directory, - payload: { - type: Event.Failed.type, - properties: { - message, - }, - }, - }) - return false + const booted = yield* Effect.promise(() => + Instance.provide({ + directory: info.directory, + init: InstanceBootstrap, + fn: () => undefined, }) + .then(() => true) + .catch((error) => { + const message = error instanceof Error ? error.message : String(error) + log.error("worktree bootstrap failed", { directory: info.directory, message }) + GlobalBus.emit("event", { + directory: info.directory, + payload: { type: Event.Failed.type, properties: { message } }, + }) + return false + }), + ) if (!booted) return GlobalBus.emit("event", { directory: info.directory, payload: { type: Event.Ready.type, - properties: { - name: info.name, - branch: info.branch, - }, + properties: { name: info.name, branch: info.branch }, }, }) - await runStartScripts(info.directory, { projectID, extra }) + yield* runStartScripts(info.directory, { projectID, extra }) + }) + + const createFromInfo = Effect.fn("Worktree.createFromInfo")(function* (info: Info, startCommand?: string) { + yield* setup(info) + yield* boot(info, startCommand) + }) + + const create = Effect.fn("Worktree.create")(function* (input?: CreateInput) { + const info = yield* makeWorktreeInfo(input?.name) + yield* setup(info) + yield* boot(info, input?.startCommand).pipe( + Effect.catchCause((cause) => Effect.sync(() => log.error("worktree bootstrap failed", { cause }))), + Effect.forkIn(scope), + ) + return info + }) + + const canonical = Effect.fnUntraced(function* (input: string) { + const abs = pathSvc.resolve(input) + const real = yield* fsys.realPath(abs).pipe(Effect.catch(() => Effect.succeed(abs))) + const normalized = pathSvc.normalize(real) + return process.platform === "win32" ? normalized.toLowerCase() : normalized + }) + + function parseWorktreeList(text: string) { + return text + .split("\n") + .map((line) => line.trim()) + .reduce<{ path?: string; branch?: string }[]>((acc, line) => { + if (!line) return acc + if (line.startsWith("worktree ")) { + acc.push({ path: line.slice("worktree ".length).trim() }) + return acc + } + const current = acc[acc.length - 1] + if (!current) return acc + if (line.startsWith("branch ")) { + current.branch = line.slice("branch ".length).trim() + } + return acc + }, []) } - return start().catch((error) => { - log.error("worktree start task failed", { directory: info.directory, error }) - }) - } - } - - export const create = fn(CreateInput.optional(), async (input) => { - const info = await makeWorktreeInfo(input?.name) - const bootstrap = await createFromInfo(info, input?.startCommand) - // This is needed due to how worktrees currently work in the - // desktop app - setTimeout(() => { - bootstrap() - }, 0) - return info - }) - - export const remove = fn(RemoveInput, async (input) => { - if (Instance.project.vcs !== "git") { - throw new NotGitError({ message: "Worktrees are only supported for git projects" }) - } - - const directory = await canonical(input.directory) - const locate = async (stdout: Uint8Array | undefined) => { - const lines = outputText(stdout) - .split("\n") - .map((line) => line.trim()) - const entries = lines.reduce<{ path?: string; branch?: string }[]>((acc, line) => { - if (!line) return acc - if (line.startsWith("worktree ")) { - acc.push({ path: line.slice("worktree ".length).trim() }) - return acc - } - const current = acc[acc.length - 1] - if (!current) return acc - if (line.startsWith("branch ")) { - current.branch = line.slice("branch ".length).trim() - } - return acc - }, []) - - return (async () => { + const locateWorktree = Effect.fnUntraced(function* ( + entries: { path?: string; branch?: string }[], + directory: string, + ) { for (const item of entries) { if (!item.path) continue - const key = await canonical(item.path) + const key = yield* canonical(item.path) if (key === directory) return item } - })() - } + return undefined + }) - const clean = (target: string) => - fs - .rm(target, { - recursive: true, - force: true, - maxRetries: 5, - retryDelay: 100, - }) - .catch((error) => { - const message = error instanceof Error ? error.message : String(error) - throw new RemoveFailedError({ message: message || "Failed to remove git worktree directory" }) - }) - - const stop = async (target: string) => { - if (!(await exists(target))) return - await git(["fsmonitor--daemon", "stop"], { cwd: target }) - } - - const list = await git(["worktree", "list", "--porcelain"], { cwd: Instance.worktree }) - if (list.exitCode !== 0) { - throw new RemoveFailedError({ message: errorText(list) || "Failed to read git worktrees" }) - } - - const entry = await locate(list.stdout) - - if (!entry?.path) { - const directoryExists = await exists(directory) - if (directoryExists) { - await stop(directory) - await clean(directory) - } - return true - } - - await stop(entry.path) - const removed = await git(["worktree", "remove", "--force", entry.path], { - cwd: Instance.worktree, - }) - if (removed.exitCode !== 0) { - const next = await git(["worktree", "list", "--porcelain"], { cwd: Instance.worktree }) - if (next.exitCode !== 0) { - throw new RemoveFailedError({ - message: errorText(removed) || errorText(next) || "Failed to remove git worktree", - }) + function stopFsmonitor(target: string) { + return fsys.exists(target).pipe( + Effect.orDie, + Effect.flatMap((exists) => (exists ? git(["fsmonitor--daemon", "stop"], { cwd: target }) : Effect.void)), + ) } - const stale = await locate(next.stdout) - if (stale?.path) { - throw new RemoveFailedError({ message: errorText(removed) || "Failed to remove git worktree" }) + function cleanDirectory(target: string) { + return Effect.promise(() => + import("fs/promises").then((fsp) => + fsp.rm(target, { recursive: true, force: true, maxRetries: 5, retryDelay: 100 }), + ), + ) } - } - await clean(entry.path) + const remove = Effect.fn("Worktree.remove")(function* (input: RemoveInput) { + if (Instance.project.vcs !== "git") { + throw new NotGitError({ message: "Worktrees are only supported for git projects" }) + } - const branch = entry.branch?.replace(/^refs\/heads\//, "") - if (branch) { - const deleted = await git(["branch", "-D", branch], { cwd: Instance.worktree }) - if (deleted.exitCode !== 0) { - throw new RemoveFailedError({ message: errorText(deleted) || "Failed to delete worktree branch" }) - } - } + const directory = yield* canonical(input.directory) - return true - }) + const list = yield* git(["worktree", "list", "--porcelain"], { cwd: Instance.worktree }) + if (list.code !== 0) { + throw new RemoveFailedError({ message: list.stderr || list.text || "Failed to read git worktrees" }) + } - export const reset = fn(ResetInput, async (input) => { - if (Instance.project.vcs !== "git") { - throw new NotGitError({ message: "Worktrees are only supported for git projects" }) - } + const entries = parseWorktreeList(list.text) + const entry = yield* locateWorktree(entries, directory) - const directory = await canonical(input.directory) - const primary = await canonical(Instance.worktree) - if (directory === primary) { - throw new ResetFailedError({ message: "Cannot reset the primary workspace" }) - } + if (!entry?.path) { + const directoryExists = yield* fsys.exists(directory).pipe(Effect.orDie) + if (directoryExists) { + yield* stopFsmonitor(directory) + yield* cleanDirectory(directory) + } + return true + } - const list = await git(["worktree", "list", "--porcelain"], { cwd: Instance.worktree }) - if (list.exitCode !== 0) { - throw new ResetFailedError({ message: errorText(list) || "Failed to read git worktrees" }) - } + yield* stopFsmonitor(entry.path) + const removed = yield* git(["worktree", "remove", "--force", entry.path], { cwd: Instance.worktree }) + if (removed.code !== 0) { + const next = yield* git(["worktree", "list", "--porcelain"], { cwd: Instance.worktree }) + if (next.code !== 0) { + throw new RemoveFailedError({ + message: removed.stderr || removed.text || next.stderr || next.text || "Failed to remove git worktree", + }) + } - const lines = outputText(list.stdout) - .split("\n") - .map((line) => line.trim()) - const entries = lines.reduce<{ path?: string; branch?: string }[]>((acc, line) => { - if (!line) return acc - if (line.startsWith("worktree ")) { - acc.push({ path: line.slice("worktree ".length).trim() }) - return acc - } - const current = acc[acc.length - 1] - if (!current) return acc - if (line.startsWith("branch ")) { - current.branch = line.slice("branch ".length).trim() - } - return acc - }, []) + const stale = yield* locateWorktree(parseWorktreeList(next.text), directory) + if (stale?.path) { + throw new RemoveFailedError({ message: removed.stderr || removed.text || "Failed to remove git worktree" }) + } + } - const entry = await (async () => { - for (const item of entries) { - if (!item.path) continue - const key = await canonical(item.path) - if (key === directory) return item - } - })() - if (!entry?.path) { - throw new ResetFailedError({ message: "Worktree not found" }) - } + yield* cleanDirectory(entry.path) - const remoteList = await git(["remote"], { cwd: Instance.worktree }) - if (remoteList.exitCode !== 0) { - throw new ResetFailedError({ message: errorText(remoteList) || "Failed to list git remotes" }) - } + const branch = entry.branch?.replace(/^refs\/heads\//, "") + if (branch) { + const deleted = yield* git(["branch", "-D", branch], { cwd: Instance.worktree }) + if (deleted.code !== 0) { + throw new RemoveFailedError({ + message: deleted.stderr || deleted.text || "Failed to delete worktree branch", + }) + } + } - const remotes = outputText(remoteList.stdout) - .split("\n") - .map((line) => line.trim()) - .filter(Boolean) + return true + }) - const remote = remotes.includes("origin") - ? "origin" - : remotes.length === 1 - ? remotes[0] - : remotes.includes("upstream") - ? "upstream" - : "" + const gitExpect = Effect.fnUntraced(function* ( + args: string[], + opts: { cwd: string }, + error: (r: GitResult) => Error, + ) { + const result = yield* git(args, opts) + if (result.code !== 0) throw error(result) + return result + }) - const remoteHead = remote - ? await git(["symbolic-ref", `refs/remotes/${remote}/HEAD`], { cwd: Instance.worktree }) - : { exitCode: 1, stdout: undefined, stderr: undefined } + const runStartCommand = Effect.fnUntraced( + function* (directory: string, cmd: string) { + const [shell, args] = process.platform === "win32" ? ["cmd", ["/c", cmd]] : ["bash", ["-lc", cmd]] + const handle = yield* spawner.spawn( + ChildProcess.make(shell, args, { cwd: directory, extendEnv: true, stdin: "ignore" }), + ) + // Drain stdout, capture stderr for error reporting + const [, stderr] = yield* Effect.all( + [Stream.runDrain(handle.stdout), Stream.mkString(Stream.decodeText(handle.stderr))], + { concurrency: 2 }, + ).pipe(Effect.orDie) + const code = yield* handle.exitCode + return { code, stderr } + }, + Effect.scoped, + Effect.catch(() => Effect.succeed({ code: 1, stderr: "" })), + ) - const remoteRef = remoteHead.exitCode === 0 ? outputText(remoteHead.stdout) : "" - const remoteTarget = remoteRef ? remoteRef.replace(/^refs\/remotes\//, "") : "" - const remoteBranch = remote && remoteTarget.startsWith(`${remote}/`) ? remoteTarget.slice(`${remote}/`.length) : "" + const runStartScript = Effect.fnUntraced(function* (directory: string, cmd: string, kind: string) { + const text = cmd.trim() + if (!text) return true + const result = yield* runStartCommand(directory, text) + if (result.code === 0) return true + log.error("worktree start command failed", { kind, directory, message: result.stderr }) + return false + }) - const mainCheck = await git(["show-ref", "--verify", "--quiet", "refs/heads/main"], { - cwd: Instance.worktree, - }) - const masterCheck = await git(["show-ref", "--verify", "--quiet", "refs/heads/master"], { - cwd: Instance.worktree, - }) - const localBranch = mainCheck.exitCode === 0 ? "main" : masterCheck.exitCode === 0 ? "master" : "" + const runStartScripts = Effect.fnUntraced(function* ( + directory: string, + input: { projectID: ProjectID; extra?: string }, + ) { + const row = yield* Effect.sync(() => + Database.use((db) => db.select().from(ProjectTable).where(eq(ProjectTable.id, input.projectID)).get()), + ) + const project = row ? Project.fromRow(row) : undefined + const startup = project?.commands?.start?.trim() ?? "" + const ok = yield* runStartScript(directory, startup, "project") + if (!ok) return false + yield* runStartScript(directory, input.extra ?? "", "worktree") + return true + }) - const target = remoteBranch ? `${remote}/${remoteBranch}` : localBranch - if (!target) { - throw new ResetFailedError({ message: "Default branch not found" }) - } + const prune = Effect.fnUntraced(function* (root: string, entries: string[]) { + const base = yield* canonical(root) + yield* Effect.forEach( + entries, + (entry) => + Effect.gen(function* () { + const target = yield* canonical(pathSvc.resolve(root, entry)) + if (target === base) return + if (!target.startsWith(`${base}${pathSvc.sep}`)) return + yield* fsys.remove(target, { recursive: true }).pipe(Effect.ignore) + }), + { concurrency: "unbounded" }, + ) + }) - if (remoteBranch) { - const fetch = await git(["fetch", remote, remoteBranch], { cwd: Instance.worktree }) - if (fetch.exitCode !== 0) { - throw new ResetFailedError({ message: errorText(fetch) || `Failed to fetch ${target}` }) - } - } + const sweep = Effect.fnUntraced(function* (root: string) { + const first = yield* git(["clean", "-ffdx"], { cwd: root }) + if (first.code === 0) return first - if (!entry.path) { - throw new ResetFailedError({ message: "Worktree path not found" }) - } + const entries = failedRemoves(first.stderr, first.text) + if (!entries.length) return first - const worktreePath = entry.path + yield* prune(root, entries) + return yield* git(["clean", "-ffdx"], { cwd: root }) + }) - const resetToTarget = await git(["reset", "--hard", target], { cwd: worktreePath }) - if (resetToTarget.exitCode !== 0) { - throw new ResetFailedError({ message: errorText(resetToTarget) || "Failed to reset worktree to target" }) - } + const reset = Effect.fn("Worktree.reset")(function* (input: ResetInput) { + if (Instance.project.vcs !== "git") { + throw new NotGitError({ message: "Worktrees are only supported for git projects" }) + } - const clean = await sweep(worktreePath) - if (clean.exitCode !== 0) { - throw new ResetFailedError({ message: errorText(clean) || "Failed to clean worktree" }) - } + const directory = yield* canonical(input.directory) + const primary = yield* canonical(Instance.worktree) + if (directory === primary) { + throw new ResetFailedError({ message: "Cannot reset the primary workspace" }) + } - const update = await git(["submodule", "update", "--init", "--recursive", "--force"], { cwd: worktreePath }) - if (update.exitCode !== 0) { - throw new ResetFailedError({ message: errorText(update) || "Failed to update submodules" }) - } + const list = yield* git(["worktree", "list", "--porcelain"], { cwd: Instance.worktree }) + if (list.code !== 0) { + throw new ResetFailedError({ message: list.stderr || list.text || "Failed to read git worktrees" }) + } - const subReset = await git(["submodule", "foreach", "--recursive", "git", "reset", "--hard"], { - cwd: worktreePath, - }) - if (subReset.exitCode !== 0) { - throw new ResetFailedError({ message: errorText(subReset) || "Failed to reset submodules" }) - } + const entry = yield* locateWorktree(parseWorktreeList(list.text), directory) + if (!entry?.path) { + throw new ResetFailedError({ message: "Worktree not found" }) + } - const subClean = await git(["submodule", "foreach", "--recursive", "git", "clean", "-fdx"], { - cwd: worktreePath, - }) - if (subClean.exitCode !== 0) { - throw new ResetFailedError({ message: errorText(subClean) || "Failed to clean submodules" }) - } + const worktreePath = entry.path - const status = await git(["-c", "core.fsmonitor=false", "status", "--porcelain=v1"], { cwd: worktreePath }) - if (status.exitCode !== 0) { - throw new ResetFailedError({ message: errorText(status) || "Failed to read git status" }) - } + const remoteList = yield* git(["remote"], { cwd: Instance.worktree }) + if (remoteList.code !== 0) { + throw new ResetFailedError({ message: remoteList.stderr || remoteList.text || "Failed to list git remotes" }) + } - const dirty = outputText(status.stdout) - if (dirty) { - throw new ResetFailedError({ message: `Worktree reset left local changes:\n${dirty}` }) - } + const remotes = remoteList.text + .split("\n") + .map((l) => l.trim()) + .filter(Boolean) + const remote = remotes.includes("origin") + ? "origin" + : remotes.length === 1 + ? remotes[0] + : remotes.includes("upstream") + ? "upstream" + : "" - const projectID = Instance.project.id - queueStartScripts(worktreePath, { projectID }) + const remoteHead = remote + ? yield* git(["symbolic-ref", `refs/remotes/${remote}/HEAD`], { cwd: Instance.worktree }) + : { code: 1, text: "", stderr: "" } - return true - }) + const remoteRef = remoteHead.code === 0 ? remoteHead.text.trim() : "" + const remoteTarget = remoteRef ? remoteRef.replace(/^refs\/remotes\//, "") : "" + const remoteBranch = + remote && remoteTarget.startsWith(`${remote}/`) ? remoteTarget.slice(`${remote}/`.length) : "" + + const [mainCheck, masterCheck] = yield* Effect.all( + [ + git(["show-ref", "--verify", "--quiet", "refs/heads/main"], { cwd: Instance.worktree }), + git(["show-ref", "--verify", "--quiet", "refs/heads/master"], { cwd: Instance.worktree }), + ], + { concurrency: 2 }, + ) + const localBranch = mainCheck.code === 0 ? "main" : masterCheck.code === 0 ? "master" : "" + + const target = remoteBranch ? `${remote}/${remoteBranch}` : localBranch + if (!target) { + throw new ResetFailedError({ message: "Default branch not found" }) + } + + if (remoteBranch) { + yield* gitExpect( + ["fetch", remote, remoteBranch], + { cwd: Instance.worktree }, + (r) => new ResetFailedError({ message: r.stderr || r.text || `Failed to fetch ${target}` }), + ) + } + + yield* gitExpect( + ["reset", "--hard", target], + { cwd: worktreePath }, + (r) => new ResetFailedError({ message: r.stderr || r.text || "Failed to reset worktree to target" }), + ) + + const cleanResult = yield* sweep(worktreePath) + if (cleanResult.code !== 0) { + throw new ResetFailedError({ message: cleanResult.stderr || cleanResult.text || "Failed to clean worktree" }) + } + + yield* gitExpect( + ["submodule", "update", "--init", "--recursive", "--force"], + { cwd: worktreePath }, + (r) => new ResetFailedError({ message: r.stderr || r.text || "Failed to update submodules" }), + ) + + yield* gitExpect( + ["submodule", "foreach", "--recursive", "git", "reset", "--hard"], + { cwd: worktreePath }, + (r) => new ResetFailedError({ message: r.stderr || r.text || "Failed to reset submodules" }), + ) + + yield* gitExpect( + ["submodule", "foreach", "--recursive", "git", "clean", "-fdx"], + { cwd: worktreePath }, + (r) => new ResetFailedError({ message: r.stderr || r.text || "Failed to clean submodules" }), + ) + + const status = yield* git(["-c", "core.fsmonitor=false", "status", "--porcelain=v1"], { cwd: worktreePath }) + if (status.code !== 0) { + throw new ResetFailedError({ message: status.stderr || status.text || "Failed to read git status" }) + } + + if (status.text.trim()) { + throw new ResetFailedError({ message: `Worktree reset left local changes:\n${status.text.trim()}` }) + } + + yield* runStartScripts(worktreePath, { projectID: Instance.project.id }).pipe( + Effect.catchCause((cause) => Effect.sync(() => log.error("worktree start task failed", { cause }))), + Effect.forkIn(scope), + ) + + return true + }) + + return Service.of({ makeWorktreeInfo, createFromInfo, create, remove, reset }) + }), + ) + + const defaultLayer = layer.pipe( + Layer.provide(CrossSpawnSpawner.layer), + Layer.provide(NodeFileSystem.layer), + Layer.provide(NodePath.layer), + ) + const { runPromise } = makeRuntime(Service, defaultLayer) + + export async function makeWorktreeInfo(name?: string) { + return runPromise((svc) => svc.makeWorktreeInfo(name)) + } + + export async function createFromInfo(info: Info, startCommand?: string) { + return runPromise((svc) => svc.createFromInfo(info, startCommand)) + } + + export async function create(input?: CreateInput) { + return runPromise((svc) => svc.create(input)) + } + + export async function remove(input: RemoveInput) { + return runPromise((svc) => svc.remove(input)) + } + + export async function reset(input: ResetInput) { + return runPromise((svc) => svc.reset(input)) + } } diff --git a/packages/opencode/test/acp/event-subscription.test.ts b/packages/opencode/test/acp/event-subscription.test.ts index 1315309a45..80faa62cf8 100644 --- a/packages/opencode/test/acp/event-subscription.test.ts +++ b/packages/opencode/test/acp/event-subscription.test.ts @@ -60,6 +60,8 @@ function toolEvent( const payload: EventMessagePartUpdated = { type: "message.part.updated", properties: { + sessionID: sessionId, + time: Date.now(), part: { id: `part_${opts.callID}`, sessionID: sessionId, diff --git a/packages/opencode/test/agent/agent.test.ts b/packages/opencode/test/agent/agent.test.ts index 18ef396c7c..103a89a3f8 100644 --- a/packages/opencode/test/agent/agent.test.ts +++ b/packages/opencode/test/agent/agent.test.ts @@ -144,7 +144,6 @@ test("explore agent denies edit and write", async () => { expect(explore?.mode).toBe("subagent") expect(evalPerm(explore, "edit")).toBe("deny") expect(evalPerm(explore, "write")).toBe("deny") - expect(evalPerm(explore, "todoread")).toBe("deny") expect(evalPerm(explore, "todowrite")).toBe("deny") }, }) @@ -173,7 +172,6 @@ test("general agent denies todo tools", async () => { expect(general).toBeDefined() expect(general?.mode).toBe("subagent") expect(general?.hidden).toBeUndefined() - expect(evalPerm(general, "todoread")).toBe("deny") expect(evalPerm(general, "todowrite")).toBe("deny") }, }) diff --git a/packages/opencode/test/bus/bus-effect.test.ts b/packages/opencode/test/bus/bus-effect.test.ts new file mode 100644 index 0000000000..642763e90f --- /dev/null +++ b/packages/opencode/test/bus/bus-effect.test.ts @@ -0,0 +1,164 @@ +import { NodeChildProcessSpawner, NodeFileSystem, NodePath } from "@effect/platform-node" +import { describe, expect } from "bun:test" +import { Deferred, Effect, Layer, Stream } from "effect" +import z from "zod" +import { Bus } from "../../src/bus" +import { BusEvent } from "../../src/bus/bus-event" +import { Instance } from "../../src/project/instance" +import { provideInstance, provideTmpdirInstance, tmpdirScoped } from "../fixture/fixture" +import { testEffect } from "../lib/effect" + +const TestEvent = { + Ping: BusEvent.define("test.effect.ping", z.object({ value: z.number() })), + Pong: BusEvent.define("test.effect.pong", z.object({ message: z.string() })), +} + +const node = NodeChildProcessSpawner.layer.pipe( + Layer.provideMerge(Layer.mergeAll(NodeFileSystem.layer, NodePath.layer)), +) + +const live = Layer.mergeAll(Bus.layer, node) + +const it = testEffect(live) + +describe("Bus (Effect-native)", () => { + it.effect("publish + subscribe stream delivers events", () => + provideTmpdirInstance(() => + Effect.gen(function* () { + const bus = yield* Bus.Service + const received: number[] = [] + const done = yield* Deferred.make() + + yield* Stream.runForEach(bus.subscribe(TestEvent.Ping), (evt) => + Effect.sync(() => { + received.push(evt.properties.value) + if (received.length === 2) Deferred.doneUnsafe(done, Effect.void) + }), + ).pipe(Effect.forkScoped) + + yield* Effect.sleep("10 millis") + yield* bus.publish(TestEvent.Ping, { value: 1 }) + yield* bus.publish(TestEvent.Ping, { value: 2 }) + yield* Deferred.await(done) + + expect(received).toEqual([1, 2]) + }), + ), + ) + + it.effect("subscribe filters by event type", () => + provideTmpdirInstance(() => + Effect.gen(function* () { + const bus = yield* Bus.Service + const pings: number[] = [] + const done = yield* Deferred.make() + + yield* Stream.runForEach(bus.subscribe(TestEvent.Ping), (evt) => + Effect.sync(() => { + pings.push(evt.properties.value) + Deferred.doneUnsafe(done, Effect.void) + }), + ).pipe(Effect.forkScoped) + + yield* Effect.sleep("10 millis") + yield* bus.publish(TestEvent.Pong, { message: "ignored" }) + yield* bus.publish(TestEvent.Ping, { value: 42 }) + yield* Deferred.await(done) + + expect(pings).toEqual([42]) + }), + ), + ) + + it.effect("subscribeAll receives all types", () => + provideTmpdirInstance(() => + Effect.gen(function* () { + const bus = yield* Bus.Service + const types: string[] = [] + const done = yield* Deferred.make() + + yield* Stream.runForEach(bus.subscribeAll(), (evt) => + Effect.sync(() => { + types.push(evt.type) + if (types.length === 2) Deferred.doneUnsafe(done, Effect.void) + }), + ).pipe(Effect.forkScoped) + + yield* Effect.sleep("10 millis") + yield* bus.publish(TestEvent.Ping, { value: 1 }) + yield* bus.publish(TestEvent.Pong, { message: "hi" }) + yield* Deferred.await(done) + + expect(types).toContain("test.effect.ping") + expect(types).toContain("test.effect.pong") + }), + ), + ) + + it.effect("multiple subscribers each receive the event", () => + provideTmpdirInstance(() => + Effect.gen(function* () { + const bus = yield* Bus.Service + const a: number[] = [] + const b: number[] = [] + const doneA = yield* Deferred.make() + const doneB = yield* Deferred.make() + + yield* Stream.runForEach(bus.subscribe(TestEvent.Ping), (evt) => + Effect.sync(() => { + a.push(evt.properties.value) + Deferred.doneUnsafe(doneA, Effect.void) + }), + ).pipe(Effect.forkScoped) + + yield* Stream.runForEach(bus.subscribe(TestEvent.Ping), (evt) => + Effect.sync(() => { + b.push(evt.properties.value) + Deferred.doneUnsafe(doneB, Effect.void) + }), + ).pipe(Effect.forkScoped) + + yield* Effect.sleep("10 millis") + yield* bus.publish(TestEvent.Ping, { value: 99 }) + yield* Deferred.await(doneA) + yield* Deferred.await(doneB) + + expect(a).toEqual([99]) + expect(b).toEqual([99]) + }), + ), + ) + + it.effect("subscribeAll stream sees InstanceDisposed on disposal", () => + Effect.gen(function* () { + const dir = yield* tmpdirScoped() + const types: string[] = [] + const seen = yield* Deferred.make() + const disposed = yield* Deferred.make() + + // Set up subscriber inside the instance + yield* Effect.gen(function* () { + const bus = yield* Bus.Service + + yield* Stream.runForEach(bus.subscribeAll(), (evt) => + Effect.sync(() => { + types.push(evt.type) + if (evt.type === TestEvent.Ping.type) Deferred.doneUnsafe(seen, Effect.void) + if (evt.type === Bus.InstanceDisposed.type) Deferred.doneUnsafe(disposed, Effect.void) + }), + ).pipe(Effect.forkScoped) + + yield* Effect.sleep("10 millis") + yield* bus.publish(TestEvent.Ping, { value: 1 }) + yield* Deferred.await(seen) + }).pipe(provideInstance(dir)) + + // Dispose from OUTSIDE the instance scope + yield* Effect.promise(() => Instance.disposeAll()) + yield* Deferred.await(disposed).pipe(Effect.timeout("2 seconds")) + + expect(types).toContain("test.effect.ping") + expect(types).toContain(Bus.InstanceDisposed.type) + }), + ) +}) diff --git a/packages/opencode/test/bus/bus-integration.test.ts b/packages/opencode/test/bus/bus-integration.test.ts new file mode 100644 index 0000000000..e42bd5299e --- /dev/null +++ b/packages/opencode/test/bus/bus-integration.test.ts @@ -0,0 +1,87 @@ +import { afterEach, describe, expect, test } from "bun:test" +import z from "zod" +import { Bus } from "../../src/bus" +import { BusEvent } from "../../src/bus/bus-event" +import { Instance } from "../../src/project/instance" +import { tmpdir } from "../fixture/fixture" + +const TestEvent = BusEvent.define("test.integration", z.object({ value: z.number() })) + +function withInstance(directory: string, fn: () => Promise) { + return Instance.provide({ directory, fn }) +} + +describe("Bus integration: acquireRelease subscriber pattern", () => { + afterEach(() => Instance.disposeAll()) + + test("subscriber via callback facade receives events and cleans up on unsub", async () => { + await using tmp = await tmpdir() + const received: number[] = [] + + await withInstance(tmp.path, async () => { + const unsub = Bus.subscribe(TestEvent, (evt) => { + received.push(evt.properties.value) + }) + await Bun.sleep(10) + await Bus.publish(TestEvent, { value: 1 }) + await Bus.publish(TestEvent, { value: 2 }) + await Bun.sleep(10) + + expect(received).toEqual([1, 2]) + + unsub() + await Bun.sleep(10) + await Bus.publish(TestEvent, { value: 3 }) + await Bun.sleep(10) + + expect(received).toEqual([1, 2]) + }) + }) + + test("subscribeAll receives events from multiple types", async () => { + await using tmp = await tmpdir() + const received: Array<{ type: string; value?: number }> = [] + + const OtherEvent = BusEvent.define("test.other", z.object({ value: z.number() })) + + await withInstance(tmp.path, async () => { + Bus.subscribeAll((evt) => { + received.push({ type: evt.type, value: evt.properties.value }) + }) + await Bun.sleep(10) + await Bus.publish(TestEvent, { value: 10 }) + await Bus.publish(OtherEvent, { value: 20 }) + await Bun.sleep(10) + }) + + expect(received).toEqual([ + { type: "test.integration", value: 10 }, + { type: "test.other", value: 20 }, + ]) + }) + + test("subscriber cleanup on instance disposal interrupts the stream", async () => { + await using tmp = await tmpdir() + const received: number[] = [] + let disposed = false + + await withInstance(tmp.path, async () => { + Bus.subscribeAll((evt) => { + if (evt.type === Bus.InstanceDisposed.type) { + disposed = true + return + } + received.push(evt.properties.value) + }) + await Bun.sleep(10) + await Bus.publish(TestEvent, { value: 1 }) + await Bun.sleep(10) + }) + + await Instance.disposeAll() + await Bun.sleep(50) + + expect(received).toEqual([1]) + expect(disposed).toBe(true) + }) +}) diff --git a/packages/opencode/test/bus/bus.test.ts b/packages/opencode/test/bus/bus.test.ts new file mode 100644 index 0000000000..3df179787d --- /dev/null +++ b/packages/opencode/test/bus/bus.test.ts @@ -0,0 +1,219 @@ +import { afterEach, describe, expect, test } from "bun:test" +import z from "zod" +import { Bus } from "../../src/bus" +import { BusEvent } from "../../src/bus/bus-event" +import { Instance } from "../../src/project/instance" +import { tmpdir } from "../fixture/fixture" + +const TestEvent = { + Ping: BusEvent.define("test.ping", z.object({ value: z.number() })), + Pong: BusEvent.define("test.pong", z.object({ message: z.string() })), +} + +function withInstance(directory: string, fn: () => Promise) { + return Instance.provide({ directory, fn }) +} + +describe("Bus", () => { + afterEach(() => Instance.disposeAll()) + + describe("publish + subscribe", () => { + test("subscriber is live immediately after subscribe returns", async () => { + await using tmp = await tmpdir() + const received: number[] = [] + + await withInstance(tmp.path, async () => { + Bus.subscribe(TestEvent.Ping, (evt) => { + received.push(evt.properties.value) + }) + await Bus.publish(TestEvent.Ping, { value: 42 }) + await Bun.sleep(10) + }) + + expect(received).toEqual([42]) + }) + + test("subscriber receives matching events", async () => { + await using tmp = await tmpdir() + const received: number[] = [] + + await withInstance(tmp.path, async () => { + Bus.subscribe(TestEvent.Ping, (evt) => { + received.push(evt.properties.value) + }) + // Give the subscriber fiber time to start consuming + await Bun.sleep(10) + await Bus.publish(TestEvent.Ping, { value: 42 }) + await Bus.publish(TestEvent.Ping, { value: 99 }) + // Give subscriber time to process + await Bun.sleep(10) + }) + + expect(received).toEqual([42, 99]) + }) + + test("subscriber does not receive events of other types", async () => { + await using tmp = await tmpdir() + const pings: number[] = [] + + await withInstance(tmp.path, async () => { + Bus.subscribe(TestEvent.Ping, (evt) => { + pings.push(evt.properties.value) + }) + await Bun.sleep(10) + await Bus.publish(TestEvent.Pong, { message: "hello" }) + await Bus.publish(TestEvent.Ping, { value: 1 }) + await Bun.sleep(10) + }) + + expect(pings).toEqual([1]) + }) + + test("publish with no subscribers does not throw", async () => { + await using tmp = await tmpdir() + + await withInstance(tmp.path, async () => { + await Bus.publish(TestEvent.Ping, { value: 1 }) + }) + }) + }) + + describe("unsubscribe", () => { + test("unsubscribe stops delivery", async () => { + await using tmp = await tmpdir() + const received: number[] = [] + + await withInstance(tmp.path, async () => { + const unsub = Bus.subscribe(TestEvent.Ping, (evt) => { + received.push(evt.properties.value) + }) + await Bun.sleep(10) + await Bus.publish(TestEvent.Ping, { value: 1 }) + await Bun.sleep(10) + unsub() + await Bun.sleep(10) + await Bus.publish(TestEvent.Ping, { value: 2 }) + await Bun.sleep(10) + }) + + expect(received).toEqual([1]) + }) + }) + + describe("subscribeAll", () => { + test("subscribeAll is live immediately after subscribe returns", async () => { + await using tmp = await tmpdir() + const received: string[] = [] + + await withInstance(tmp.path, async () => { + Bus.subscribeAll((evt) => { + received.push(evt.type) + }) + await Bus.publish(TestEvent.Ping, { value: 1 }) + await Bun.sleep(10) + }) + + expect(received).toEqual(["test.ping"]) + }) + + test("receives all event types", async () => { + await using tmp = await tmpdir() + const received: string[] = [] + + await withInstance(tmp.path, async () => { + Bus.subscribeAll((evt) => { + received.push(evt.type) + }) + await Bun.sleep(10) + await Bus.publish(TestEvent.Ping, { value: 1 }) + await Bus.publish(TestEvent.Pong, { message: "hi" }) + await Bun.sleep(10) + }) + + expect(received).toContain("test.ping") + expect(received).toContain("test.pong") + }) + }) + + describe("multiple subscribers", () => { + test("all subscribers for same event type are called", async () => { + await using tmp = await tmpdir() + const a: number[] = [] + const b: number[] = [] + + await withInstance(tmp.path, async () => { + Bus.subscribe(TestEvent.Ping, (evt) => { + a.push(evt.properties.value) + }) + Bus.subscribe(TestEvent.Ping, (evt) => { + b.push(evt.properties.value) + }) + await Bun.sleep(10) + await Bus.publish(TestEvent.Ping, { value: 7 }) + await Bun.sleep(10) + }) + + expect(a).toEqual([7]) + expect(b).toEqual([7]) + }) + }) + + describe("instance isolation", () => { + test("events in one directory do not reach subscribers in another", async () => { + await using tmpA = await tmpdir() + await using tmpB = await tmpdir() + const receivedA: number[] = [] + const receivedB: number[] = [] + + await withInstance(tmpA.path, async () => { + Bus.subscribe(TestEvent.Ping, (evt) => { + receivedA.push(evt.properties.value) + }) + await Bun.sleep(10) + }) + + await withInstance(tmpB.path, async () => { + Bus.subscribe(TestEvent.Ping, (evt) => { + receivedB.push(evt.properties.value) + }) + await Bun.sleep(10) + }) + + await withInstance(tmpA.path, async () => { + await Bus.publish(TestEvent.Ping, { value: 1 }) + await Bun.sleep(10) + }) + + await withInstance(tmpB.path, async () => { + await Bus.publish(TestEvent.Ping, { value: 2 }) + await Bun.sleep(10) + }) + + expect(receivedA).toEqual([1]) + expect(receivedB).toEqual([2]) + }) + }) + + describe("instance disposal", () => { + test("InstanceDisposed is delivered to wildcard subscribers before stream ends", async () => { + await using tmp = await tmpdir() + const received: string[] = [] + + await withInstance(tmp.path, async () => { + Bus.subscribeAll((evt) => { + received.push(evt.type) + }) + await Bun.sleep(10) + await Bus.publish(TestEvent.Ping, { value: 1 }) + await Bun.sleep(10) + }) + + // Instance.disposeAll triggers the finalizer which publishes InstanceDisposed + await Instance.disposeAll() + await Bun.sleep(50) + + expect(received).toContain("test.ping") + expect(received).toContain(Bus.InstanceDisposed.type) + }) + }) +}) diff --git a/packages/opencode/test/config/config.test.ts b/packages/opencode/test/config/config.test.ts index 00eb5b3b94..54a43065c6 100644 --- a/packages/opencode/test/config/config.test.ts +++ b/packages/opencode/test/config/config.test.ts @@ -1462,7 +1462,6 @@ test("permission config preserves key order", async () => { external_directory: "ask", read: "allow", todowrite: "allow", - todoread: "allow", "thoughts_*": "allow", "reasoning_model_*": "allow", "tools_*": "allow", @@ -1483,7 +1482,6 @@ test("permission config preserves key order", async () => { "external_directory", "read", "todowrite", - "todoread", "thoughts_*", "reasoning_model_*", "tools_*", diff --git a/packages/opencode/test/effect/run-service.test.ts b/packages/opencode/test/effect/run-service.test.ts index c9f630585e..b2004fb664 100644 --- a/packages/opencode/test/effect/run-service.test.ts +++ b/packages/opencode/test/effect/run-service.test.ts @@ -1,10 +1,10 @@ import { expect, test } from "bun:test" import { Effect, Layer, ServiceMap } from "effect" -import { makeRunPromise } from "../../src/effect/run-service" +import { makeRuntime } from "../../src/effect/run-service" class Shared extends ServiceMap.Service()("@test/Shared") {} -test("makeRunPromise shares dependent layers through the shared memo map", async () => { +test("makeRuntime shares dependent layers through the shared memo map", async () => { let n = 0 const shared = Layer.effect( @@ -37,8 +37,8 @@ test("makeRunPromise shares dependent layers through the shared memo map", async }), ).pipe(Layer.provide(shared)) - const runOne = makeRunPromise(One, one) - const runTwo = makeRunPromise(Two, two) + const { runPromise: runOne } = makeRuntime(One, one) + const { runPromise: runTwo } = makeRuntime(Two, two) expect(await runOne((svc) => svc.get())).toBe(1) expect(await runTwo((svc) => svc.get())).toBe(1) diff --git a/packages/opencode/test/file/watcher.test.ts b/packages/opencode/test/file/watcher.test.ts index 6658634e54..02f4d927b0 100644 --- a/packages/opencode/test/file/watcher.test.ts +++ b/packages/opencode/test/file/watcher.test.ts @@ -2,9 +2,8 @@ import { $ } from "bun" import { afterEach, describe, expect, test } from "bun:test" import fs from "fs/promises" import path from "path" -import { Deferred, Effect, Option } from "effect" +import { ConfigProvider, Deferred, Effect, Layer, ManagedRuntime, Option } from "effect" import { tmpdir } from "../fixture/fixture" -import { watcherConfigLayer, withServices } from "../fixture/instance" import { Bus } from "../../src/bus" import { FileWatcher } from "../../src/file/watcher" import { Instance } from "../../src/project/instance" @@ -16,20 +15,33 @@ const describeWatcher = FileWatcher.hasNativeBinding() && !process.env.CI ? desc // Helpers // --------------------------------------------------------------------------- +const watcherConfigLayer = ConfigProvider.layer( + ConfigProvider.fromUnknown({ + KILO_EXPERIMENTAL_FILEWATCHER: "true", + KILO_EXPERIMENTAL_DISABLE_FILEWATCHER: "false", + }), +) + type WatcherEvent = { file: string; event: "add" | "change" | "unlink" } /** Run `body` with a live FileWatcher service. */ function withWatcher(directory: string, body: Effect.Effect) { - return withServices( + return Instance.provide({ directory, - FileWatcher.layer, - async (rt) => { - await rt.runPromise(FileWatcher.Service.use((s) => s.init())) - await Effect.runPromise(ready(directory)) - await Effect.runPromise(body) + fn: async () => { + const layer: Layer.Layer = FileWatcher.layer.pipe( + Layer.provide(watcherConfigLayer), + ) + const rt = ManagedRuntime.make(layer) + try { + await rt.runPromise(FileWatcher.Service.use((s) => s.init())) + await Effect.runPromise(ready(directory)) + await Effect.runPromise(body) + } finally { + await rt.dispose() + } }, - { provide: [watcherConfigLayer] }, - ) + }) } function listen(directory: string, check: (evt: WatcherEvent) => boolean, hit: (evt: WatcherEvent) => void) { diff --git a/packages/opencode/test/fixture/fixture.ts b/packages/opencode/test/fixture/fixture.ts index 1a838d955b..b62f9d3e62 100644 --- a/packages/opencode/test/fixture/fixture.ts +++ b/packages/opencode/test/fixture/fixture.ts @@ -2,7 +2,10 @@ import { $ } from "bun" import * as fs from "fs/promises" import os from "os" import path from "path" +import { Effect, FileSystem, ServiceMap } from "effect" +import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process" import type { Config } from "../../src/config/config" +import { Instance } from "../../src/project/instance" // Strip null bytes from paths (defensive fix for CI environment issues) function sanitizePath(p: string): string { @@ -71,3 +74,68 @@ export async function tmpdir(options?: TmpDirOptions) { } return result } + +/** Effectful scoped tmpdir. Cleaned up when the scope closes. Make sure these stay in sync */ +export function tmpdirScoped(options?: { git?: boolean; config?: Partial }) { + return Effect.gen(function* () { + const fs = yield* FileSystem.FileSystem + const spawner = yield* ChildProcessSpawner.ChildProcessSpawner + const dir = yield* fs.makeTempDirectoryScoped({ prefix: "opencode-test-" }) + + const git = (...args: string[]) => + spawner.spawn(ChildProcess.make("git", args, { cwd: dir })).pipe(Effect.flatMap((handle) => handle.exitCode)) + + if (options?.git) { + yield* git("init") + yield* git("config", "core.fsmonitor", "false") + yield* git("config", "user.email", "test@opencode.test") + yield* git("config", "user.name", "Test") + yield* git("commit", "--allow-empty", "-m", "root commit") + } + + if (options?.config) { + yield* fs.writeFileString( + path.join(dir, "opencode.json"), + JSON.stringify({ $schema: "https://opencode.ai/config.json", ...options.config }), + ) + } + + return dir + }) +} + +export const provideInstance = + (directory: string) => + (self: Effect.Effect): Effect.Effect => + Effect.servicesWith((services: ServiceMap.ServiceMap) => + Effect.promise(async () => + Instance.provide({ + directory, + fn: () => Effect.runPromiseWith(services)(self), + }), + ), + ) + +export function provideTmpdirInstance( + self: (path: string) => Effect.Effect, + options?: { git?: boolean; config?: Partial }, +) { + return Effect.gen(function* () { + const path = yield* tmpdirScoped(options) + let provided = false + + yield* Effect.addFinalizer(() => + provided + ? Effect.promise(() => + Instance.provide({ + directory: path, + fn: () => Instance.dispose(), + }), + ).pipe(Effect.ignore) + : Effect.void, + ) + + provided = true + return yield* self(path).pipe(provideInstance(path)) + }) +} diff --git a/packages/opencode/test/fixture/instance.ts b/packages/opencode/test/fixture/instance.ts deleted file mode 100644 index 67af82fc8b..0000000000 --- a/packages/opencode/test/fixture/instance.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { ConfigProvider, Layer, ManagedRuntime } from "effect" -import { InstanceContext } from "../../src/effect/instance-context" -import { Instance } from "../../src/project/instance" - -/** ConfigProvider that enables the experimental file watcher. */ -export const watcherConfigLayer = ConfigProvider.layer( - ConfigProvider.fromUnknown({ - OPENCODE_EXPERIMENTAL_FILEWATCHER: "true", - OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: "false", - }), -) - -/** - * Boot an Instance with the given service layers and run `body` with - * the ManagedRuntime. Cleanup is automatic — the runtime is disposed - * and Instance context is torn down when `body` completes. - * - * Layers may depend on InstanceContext (provided automatically). - * Pass extra layers via `options.provide` (e.g. ConfigProvider.layer). - */ -export function withServices( - directory: string, - layer: Layer.Layer, - body: (rt: ManagedRuntime.ManagedRuntime) => Promise, - options?: { provide?: Layer.Layer[] }, -) { - return Instance.provide({ - directory, - fn: async () => { - const ctx = Layer.sync(InstanceContext, () => - InstanceContext.of({ - directory: Instance.directory, - worktree: Instance.worktree, - project: Instance.project, - }), - ) - let resolved: Layer.Layer = layer.pipe(Layer.provide(ctx)) as any - if (options?.provide) { - for (const l of options.provide) { - resolved = resolved.pipe(Layer.provide(l)) as any - } - } - const rt = ManagedRuntime.make(resolved) - try { - await body(rt) - } finally { - await rt.dispose() - } - }, - }) -} diff --git a/packages/opencode/test/format/format.test.ts b/packages/opencode/test/format/format.test.ts index 68fe71e03f..c718c13e8b 100644 --- a/packages/opencode/test/format/format.test.ts +++ b/packages/opencode/test/format/format.test.ts @@ -1,172 +1,182 @@ -import { Effect } from "effect" -import { afterEach, describe, expect, test } from "bun:test" -import { tmpdir } from "../fixture/fixture" -import { withServices } from "../fixture/instance" -import { Bus } from "../../src/bus" -import { File } from "../../src/file" +import { NodeChildProcessSpawner, NodeFileSystem, NodePath } from "@effect/platform-node" +import { describe, expect } from "bun:test" +import { Effect, Layer } from "effect" +import { provideTmpdirInstance } from "../fixture/fixture" +import { testEffect } from "../lib/effect" import { Format } from "../../src/format" import * as Formatter from "../../src/format/formatter" -import { Instance } from "../../src/project/instance" + +const node = NodeChildProcessSpawner.layer.pipe( + Layer.provideMerge(Layer.mergeAll(NodeFileSystem.layer, NodePath.layer)), +) + +const it = testEffect(Layer.mergeAll(Format.layer, node)) describe("Format", () => { - afterEach(async () => { - await Instance.disposeAll() - }) + it.effect("status() returns built-in formatters when no config overrides", () => + provideTmpdirInstance(() => + Format.Service.use((fmt) => + Effect.gen(function* () { + const statuses = yield* fmt.status() + expect(Array.isArray(statuses)).toBe(true) + expect(statuses.length).toBeGreaterThan(0) - test("status() returns built-in formatters when no config overrides", async () => { - await using tmp = await tmpdir() + for (const item of statuses) { + expect(typeof item.name).toBe("string") + expect(Array.isArray(item.extensions)).toBe(true) + expect(typeof item.enabled).toBe("boolean") + } - await withServices(tmp.path, Format.layer, async (rt) => { - const statuses = await rt.runPromise(Format.Service.use((s) => s.status())) - expect(Array.isArray(statuses)).toBe(true) - expect(statuses.length).toBeGreaterThan(0) + const gofmt = statuses.find((item) => item.name === "gofmt") + expect(gofmt).toBeDefined() + expect(gofmt!.extensions).toContain(".go") + }), + ), + ), + ) - for (const s of statuses) { - expect(typeof s.name).toBe("string") - expect(Array.isArray(s.extensions)).toBe(true) - expect(typeof s.enabled).toBe("boolean") - } + it.effect("status() returns empty list when formatter is disabled", () => + provideTmpdirInstance( + () => + Format.Service.use((fmt) => + Effect.gen(function* () { + expect(yield* fmt.status()).toEqual([]) + }), + ), + { config: { formatter: false } }, + ), + ) - const gofmt = statuses.find((s) => s.name === "gofmt") - expect(gofmt).toBeDefined() - expect(gofmt!.extensions).toContain(".go") - }) - }) - - test("status() returns empty list when formatter is disabled", async () => { - await using tmp = await tmpdir({ - config: { formatter: false }, - }) - - await withServices(tmp.path, Format.layer, async (rt) => { - const statuses = await rt.runPromise(Format.Service.use((s) => s.status())) - expect(statuses).toEqual([]) - }) - }) - - test("status() excludes formatters marked as disabled in config", async () => { - await using tmp = await tmpdir({ - config: { - formatter: { - gofmt: { disabled: true }, + it.effect("status() excludes formatters marked as disabled in config", () => + provideTmpdirInstance( + () => + Format.Service.use((fmt) => + Effect.gen(function* () { + const statuses = yield* fmt.status() + const gofmt = statuses.find((item) => item.name === "gofmt") + expect(gofmt).toBeUndefined() + }), + ), + { + config: { + formatter: { + gofmt: { disabled: true }, + }, }, }, - }) + ), + ) - await withServices(tmp.path, Format.layer, async (rt) => { - const statuses = await rt.runPromise(Format.Service.use((s) => s.status())) - const gofmt = statuses.find((s) => s.name === "gofmt") - expect(gofmt).toBeUndefined() - }) - }) + it.effect("service initializes without error", () => + provideTmpdirInstance(() => Format.Service.use(() => Effect.void)), + ) - test("service initializes without error", async () => { - await using tmp = await tmpdir() - - await withServices(tmp.path, Format.layer, async (rt) => { - await rt.runPromise(Format.Service.use(() => Effect.void)) - }) - }) - - test("status() initializes formatter state per directory", async () => { - await using off = await tmpdir({ - config: { formatter: false }, - }) - await using on = await tmpdir() - - const a = await Instance.provide({ - directory: off.path, - fn: () => Format.status(), - }) - const b = await Instance.provide({ - directory: on.path, - fn: () => Format.status(), - }) - - expect(a).toEqual([]) - expect(b.length).toBeGreaterThan(0) - }) - - test("runs enabled checks for matching formatters in parallel", async () => { - await using tmp = await tmpdir() - - const file = `${tmp.path}/test.parallel` - await Bun.write(file, "x") - - const one = { - extensions: Formatter.gofmt.extensions, - enabled: Formatter.gofmt.enabled, - command: Formatter.gofmt.command, - } - const two = { - extensions: Formatter.mix.extensions, - enabled: Formatter.mix.enabled, - command: Formatter.mix.command, - } - - let active = 0 - let max = 0 - - Formatter.gofmt.extensions = [".parallel"] - Formatter.mix.extensions = [".parallel"] - Formatter.gofmt.command = ["sh", "-c", "true"] - Formatter.mix.command = ["sh", "-c", "true"] - Formatter.gofmt.enabled = async () => { - active++ - max = Math.max(max, active) - await Bun.sleep(20) - active-- - return true - } - Formatter.mix.enabled = async () => { - active++ - max = Math.max(max, active) - await Bun.sleep(20) - active-- - return true - } - - try { - await withServices(tmp.path, Format.layer, async (rt) => { - await rt.runPromise(Format.Service.use((s) => s.init())) - await Bus.publish(File.Event.Edited, { file }) + it.effect("status() initializes formatter state per directory", () => + Effect.gen(function* () { + const a = yield* provideTmpdirInstance(() => Format.Service.use((fmt) => fmt.status()), { + config: { formatter: false }, }) - } finally { - Formatter.gofmt.extensions = one.extensions - Formatter.gofmt.enabled = one.enabled - Formatter.gofmt.command = one.command - Formatter.mix.extensions = two.extensions - Formatter.mix.enabled = two.enabled - Formatter.mix.command = two.command - } + const b = yield* provideTmpdirInstance(() => Format.Service.use((fmt) => fmt.status())) - expect(max).toBe(2) - }) + expect(a).toEqual([]) + expect(b.length).toBeGreaterThan(0) + }), + ) - test("runs matching formatters sequentially for the same file", async () => { - await using tmp = await tmpdir({ - config: { - formatter: { - first: { - command: ["sh", "-c", 'sleep 0.05; v=$(cat "$1"); printf \'%sA\' "$v" > "$1"', "sh", "$FILE"], - extensions: [".seq"], - }, - second: { - command: ["sh", "-c", 'v=$(cat "$1"); printf \'%sB\' "$v" > "$1"', "sh", "$FILE"], - extensions: [".seq"], + it.effect("runs enabled checks for matching formatters in parallel", () => + provideTmpdirInstance((path) => + Effect.gen(function* () { + const file = `${path}/test.parallel` + yield* Effect.promise(() => Bun.write(file, "x")) + + const one = { + extensions: Formatter.gofmt.extensions, + enabled: Formatter.gofmt.enabled, + command: Formatter.gofmt.command, + } + const two = { + extensions: Formatter.mix.extensions, + enabled: Formatter.mix.enabled, + command: Formatter.mix.command, + } + + let active = 0 + let max = 0 + + yield* Effect.acquireUseRelease( + Effect.sync(() => { + Formatter.gofmt.extensions = [".parallel"] + Formatter.mix.extensions = [".parallel"] + Formatter.gofmt.command = ["sh", "-c", "true"] + Formatter.mix.command = ["sh", "-c", "true"] + Formatter.gofmt.enabled = async () => { + active++ + max = Math.max(max, active) + await Bun.sleep(20) + active-- + return true + } + Formatter.mix.enabled = async () => { + active++ + max = Math.max(max, active) + await Bun.sleep(20) + active-- + return true + } + }), + () => + Format.Service.use((fmt) => + Effect.gen(function* () { + yield* fmt.init() + yield* fmt.file(file) + }), + ), + () => + Effect.sync(() => { + Formatter.gofmt.extensions = one.extensions + Formatter.gofmt.enabled = one.enabled + Formatter.gofmt.command = one.command + Formatter.mix.extensions = two.extensions + Formatter.mix.enabled = two.enabled + Formatter.mix.command = two.command + }), + ) + + expect(max).toBe(2) + }), + ), + ) + + it.effect("runs matching formatters sequentially for the same file", () => + provideTmpdirInstance( + (path) => + Effect.gen(function* () { + const file = `${path}/test.seq` + yield* Effect.promise(() => Bun.write(file, "x")) + + yield* Format.Service.use((fmt) => + Effect.gen(function* () { + yield* fmt.init() + yield* fmt.file(file) + }), + ) + + expect(yield* Effect.promise(() => Bun.file(file).text())).toBe("xAB") + }), + { + config: { + formatter: { + first: { + command: ["sh", "-c", 'sleep 0.05; v=$(cat "$1"); printf \'%sA\' "$v" > "$1"', "sh", "$FILE"], + extensions: [".seq"], + }, + second: { + command: ["sh", "-c", 'v=$(cat "$1"); printf \'%sB\' "$v" > "$1"', "sh", "$FILE"], + extensions: [".seq"], + }, }, }, }, - }) - - const file = `${tmp.path}/test.seq` - await Bun.write(file, "x") - - await withServices(tmp.path, Format.layer, async (rt) => { - await rt.runPromise(Format.Service.use((s) => s.init())) - await Bus.publish(File.Event.Edited, { file }) - }) - - expect(await Bun.file(file).text()).toBe("xAB") - }) + ), + ) }) diff --git a/packages/opencode/test/lsp/index.test.ts b/packages/opencode/test/lsp/index.test.ts new file mode 100644 index 0000000000..7e514e39b1 --- /dev/null +++ b/packages/opencode/test/lsp/index.test.ts @@ -0,0 +1,55 @@ +import { describe, expect, spyOn, test } from "bun:test" +import path from "path" +import * as Lsp from "../../src/lsp/index" +import { LSPServer } from "../../src/lsp/server" +import { Instance } from "../../src/project/instance" +import { tmpdir } from "../fixture/fixture" + +describe("lsp.spawn", () => { + test("does not spawn builtin LSP for files outside instance", async () => { + await using tmp = await tmpdir() + const spy = spyOn(LSPServer.Typescript, "spawn").mockResolvedValue(undefined) + + try { + await Instance.provide({ + directory: tmp.path, + fn: async () => { + await Lsp.LSP.touchFile(path.join(tmp.path, "..", "outside.ts")) + await Lsp.LSP.hover({ + file: path.join(tmp.path, "..", "hover.ts"), + line: 0, + character: 0, + }) + }, + }) + + expect(spy).toHaveBeenCalledTimes(0) + } finally { + spy.mockRestore() + await Instance.disposeAll() + } + }) + + test("would spawn builtin LSP for files inside instance", async () => { + await using tmp = await tmpdir() + const spy = spyOn(LSPServer.Typescript, "spawn").mockResolvedValue(undefined) + + try { + await Instance.provide({ + directory: tmp.path, + fn: async () => { + await Lsp.LSP.hover({ + file: path.join(tmp.path, "src", "inside.ts"), + line: 0, + character: 0, + }) + }, + }) + + expect(spy).toHaveBeenCalledTimes(1) + } finally { + spy.mockRestore() + await Instance.disposeAll() + } + }) +}) diff --git a/packages/opencode/test/mcp/lifecycle.test.ts b/packages/opencode/test/mcp/lifecycle.test.ts new file mode 100644 index 0000000000..2880c053f1 --- /dev/null +++ b/packages/opencode/test/mcp/lifecycle.test.ts @@ -0,0 +1,660 @@ +import { test, expect, mock, beforeEach } from "bun:test" + +// --- Mock infrastructure --- + +// Per-client state for controlling mock behavior +interface MockClientState { + tools: Array<{ name: string; description?: string; inputSchema: object }> + listToolsCalls: number + listToolsShouldFail: boolean + listToolsError: string + listPromptsShouldFail: boolean + listResourcesShouldFail: boolean + prompts: Array<{ name: string; description?: string }> + resources: Array<{ name: string; uri: string; description?: string }> + closed: boolean + notificationHandlers: Map any> +} + +const clientStates = new Map() +let lastCreatedClientName: string | undefined +let connectShouldFail = false +let connectError = "Mock transport cannot connect" +// Tracks how many Client instances were created (detects leaks) +let clientCreateCount = 0 + +function getOrCreateClientState(name?: string): MockClientState { + const key = name ?? "default" + let state = clientStates.get(key) + if (!state) { + state = { + tools: [{ name: "test_tool", description: "A test tool", inputSchema: { type: "object", properties: {} } }], + listToolsCalls: 0, + listToolsShouldFail: false, + listToolsError: "listTools failed", + listPromptsShouldFail: false, + listResourcesShouldFail: false, + prompts: [], + resources: [], + closed: false, + notificationHandlers: new Map(), + } + clientStates.set(key, state) + } + return state +} + +// Mock transport that succeeds or fails based on connectShouldFail +class MockStdioTransport { + stderr: null = null + pid = 12345 + constructor(_opts: any) {} + async start() { + if (connectShouldFail) throw new Error(connectError) + } + async close() {} +} + +class MockStreamableHTTP { + constructor(_url: URL, _opts?: any) {} + async start() { + if (connectShouldFail) throw new Error(connectError) + } + async close() {} + async finishAuth() {} +} + +class MockSSE { + constructor(_url: URL, _opts?: any) {} + async start() { + throw new Error("SSE fallback - not used in these tests") + } + async close() {} +} + +mock.module("@modelcontextprotocol/sdk/client/stdio.js", () => ({ + StdioClientTransport: MockStdioTransport, +})) + +mock.module("@modelcontextprotocol/sdk/client/streamableHttp.js", () => ({ + StreamableHTTPClientTransport: MockStreamableHTTP, +})) + +mock.module("@modelcontextprotocol/sdk/client/sse.js", () => ({ + SSEClientTransport: MockSSE, +})) + +mock.module("@modelcontextprotocol/sdk/client/auth.js", () => ({ + UnauthorizedError: class extends Error { + constructor() { + super("Unauthorized") + } + }, +})) + +// Mock Client that delegates to per-name MockClientState +mock.module("@modelcontextprotocol/sdk/client/index.js", () => ({ + Client: class MockClient { + _state!: MockClientState + transport: any + + constructor(_opts: any) { + clientCreateCount++ + } + + async connect(transport: { start: () => Promise }) { + this.transport = transport + await transport.start() + // After successful connect, bind to the last-created client name + this._state = getOrCreateClientState(lastCreatedClientName) + } + + setNotificationHandler(schema: unknown, handler: (...args: any[]) => any) { + this._state?.notificationHandlers.set(schema, handler) + } + + async listTools() { + if (this._state) this._state.listToolsCalls++ + if (this._state?.listToolsShouldFail) { + throw new Error(this._state.listToolsError) + } + return { tools: this._state?.tools ?? [] } + } + + async listPrompts() { + if (this._state?.listPromptsShouldFail) { + throw new Error("listPrompts failed") + } + return { prompts: this._state?.prompts ?? [] } + } + + async listResources() { + if (this._state?.listResourcesShouldFail) { + throw new Error("listResources failed") + } + return { resources: this._state?.resources ?? [] } + } + + async close() { + if (this._state) this._state.closed = true + } + }, +})) + +beforeEach(() => { + clientStates.clear() + lastCreatedClientName = undefined + connectShouldFail = false + connectError = "Mock transport cannot connect" + clientCreateCount = 0 +}) + +// Import after mocks +const { MCP } = await import("../../src/mcp/index") +const { Instance } = await import("../../src/project/instance") +const { tmpdir } = await import("../fixture/fixture") + +// --- Helper --- + +function withInstance(config: Record, fn: () => Promise) { + 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 Instance.provide({ + directory: tmp.path, + fn: async () => { + await fn() + // dispose instance to clean up state between tests + await Instance.dispose() + }, + }) + } +} + +// ======================================================================== +// Test: tools() are cached after connect +// ======================================================================== + +test( + "tools() reuses cached tool definitions after connect", + withInstance({}, async () => { + 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 = await 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 = await MCP.tools() + const toolsB = await MCP.tools() + expect(Object.keys(toolsA).length).toBeGreaterThan(0) + expect(Object.keys(toolsB).length).toBeGreaterThan(0) + expect(serverState.listToolsCalls).toBe(1) + }), +) + +// ======================================================================== +// Test: tool change notifications refresh the cache +// ======================================================================== + +test( + "tool change notifications refresh cached tool definitions", + withInstance({}, async () => { + lastCreatedClientName = "status-server" + const serverState = getOrCreateClientState("status-server") + + await MCP.add("status-server", { + type: "local", + command: ["echo", "test"], + }) + + const before = await 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() + await handler?.() + + const after = await 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) + }), +) + +// ======================================================================== +// Test: connect() / disconnect() lifecycle +// ======================================================================== + +test( + "disconnect sets status to disabled and removes client", + withInstance( + { + "disc-server": { + type: "local", + command: ["echo", "test"], + }, + }, + async () => { + lastCreatedClientName = "disc-server" + getOrCreateClientState("disc-server") + + await MCP.add("disc-server", { + type: "local", + command: ["echo", "test"], + }) + + const statusBefore = await MCP.status() + expect(statusBefore["disc-server"]?.status).toBe("connected") + + await MCP.disconnect("disc-server") + + const statusAfter = await MCP.status() + expect(statusAfter["disc-server"]?.status).toBe("disabled") + + // Tools should be empty after disconnect + const tools = await MCP.tools() + const serverTools = Object.keys(tools).filter((k) => k.startsWith("disc-server")) + expect(serverTools.length).toBe(0) + }, + ), +) + +test( + "connect() after disconnect() re-establishes the server", + withInstance( + { + "reconn-server": { + type: "local", + command: ["echo", "test"], + }, + }, + async () => { + lastCreatedClientName = "reconn-server" + const serverState = getOrCreateClientState("reconn-server") + serverState.tools = [{ name: "my_tool", description: "a tool", inputSchema: { type: "object", properties: {} } }] + + await MCP.add("reconn-server", { + type: "local", + command: ["echo", "test"], + }) + + await MCP.disconnect("reconn-server") + expect((await MCP.status())["reconn-server"]?.status).toBe("disabled") + + // Reconnect + await MCP.connect("reconn-server") + expect((await MCP.status())["reconn-server"]?.status).toBe("connected") + + const tools = await MCP.tools() + expect(Object.keys(tools).some((k) => k.includes("my_tool"))).toBe(true) + }, + ), +) + +// ======================================================================== +// Test: add() closes existing client before replacing +// ======================================================================== + +test( + "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({}, async () => { + lastCreatedClientName = "replace-server" + const firstState = getOrCreateClientState("replace-server") + + await 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 + await MCP.add("replace-server", { + type: "local", + command: ["echo", "test"], + }) + + expect(firstState.closed).toBe(true) + expect(secondState.closed).toBe(false) + }), +) + +// ======================================================================== +// Test: state init with mixed success/failure +// ======================================================================== + +test( + "init connects available servers even when one fails", + withInstance( + { + "good-server": { + type: "local", + command: ["echo", "good"], + }, + "bad-server": { + type: "local", + command: ["echo", "bad"], + }, + }, + async () => { + // Set up good server + const goodState = getOrCreateClientState("good-server") + goodState.tools = [{ name: "good_tool", description: "works", inputSchema: { type: "object", properties: {} } }] + + // Set up bad server - will fail on listTools during create() + const badState = getOrCreateClientState("bad-server") + badState.listToolsShouldFail = true + + // Add good server first + lastCreatedClientName = "good-server" + await MCP.add("good-server", { + type: "local", + command: ["echo", "good"], + }) + + // Add bad server - should fail but not affect good server + lastCreatedClientName = "bad-server" + await MCP.add("bad-server", { + type: "local", + command: ["echo", "bad"], + }) + + const status = await MCP.status() + expect(status["good-server"]?.status).toBe("connected") + expect(status["bad-server"]?.status).toBe("failed") + + // Good server's tools should still be available + const tools = await MCP.tools() + expect(Object.keys(tools).some((k) => k.includes("good_tool"))).toBe(true) + }, + ), +) + +// ======================================================================== +// Test: disabled server via config +// ======================================================================== + +test( + "disabled server is marked as disabled without attempting connection", + withInstance( + { + "disabled-server": { + type: "local", + command: ["echo", "test"], + enabled: false, + }, + }, + async () => { + const countBefore = clientCreateCount + + await MCP.add("disabled-server", { + type: "local", + command: ["echo", "test"], + enabled: false, + } as any) + + // No client should have been created + expect(clientCreateCount).toBe(countBefore) + + const status = await MCP.status() + expect(status["disabled-server"]?.status).toBe("disabled") + }, + ), +) + +// ======================================================================== +// Test: prompts() and resources() +// ======================================================================== + +test( + "prompts() returns prompts from connected servers", + withInstance( + { + "prompt-server": { + type: "local", + command: ["echo", "test"], + }, + }, + async () => { + lastCreatedClientName = "prompt-server" + const serverState = getOrCreateClientState("prompt-server") + serverState.prompts = [{ name: "my-prompt", description: "A test prompt" }] + + await MCP.add("prompt-server", { + type: "local", + command: ["echo", "test"], + }) + + const prompts = await MCP.prompts() + expect(Object.keys(prompts).length).toBe(1) + const key = Object.keys(prompts)[0] + expect(key).toContain("prompt-server") + expect(key).toContain("my-prompt") + }, + ), +) + +test( + "resources() returns resources from connected servers", + withInstance( + { + "resource-server": { + type: "local", + command: ["echo", "test"], + }, + }, + async () => { + lastCreatedClientName = "resource-server" + const serverState = getOrCreateClientState("resource-server") + serverState.resources = [{ name: "my-resource", uri: "file:///test.txt", description: "A test resource" }] + + await MCP.add("resource-server", { + type: "local", + command: ["echo", "test"], + }) + + const resources = await MCP.resources() + expect(Object.keys(resources).length).toBe(1) + const key = Object.keys(resources)[0] + expect(key).toContain("resource-server") + expect(key).toContain("my-resource") + }, + ), +) + +test( + "prompts() skips disconnected servers", + withInstance( + { + "prompt-disc-server": { + type: "local", + command: ["echo", "test"], + }, + }, + async () => { + lastCreatedClientName = "prompt-disc-server" + const serverState = getOrCreateClientState("prompt-disc-server") + serverState.prompts = [{ name: "hidden-prompt", description: "Should not appear" }] + + await MCP.add("prompt-disc-server", { + type: "local", + command: ["echo", "test"], + }) + + await MCP.disconnect("prompt-disc-server") + + const prompts = await MCP.prompts() + expect(Object.keys(prompts).length).toBe(0) + }, + ), +) + +// ======================================================================== +// Test: connect() on nonexistent server +// ======================================================================== + +test( + "connect() on nonexistent server does not throw", + withInstance({}, async () => { + // Should not throw + await MCP.connect("nonexistent") + const status = await MCP.status() + expect(status["nonexistent"]).toBeUndefined() + }), +) + +// ======================================================================== +// Test: disconnect() on nonexistent server +// ======================================================================== + +test( + "disconnect() on nonexistent server does not throw", + withInstance({}, async () => { + await MCP.disconnect("nonexistent") + // Should complete without error + }), +) + +// ======================================================================== +// Test: tools() with no MCP servers configured +// ======================================================================== + +test( + "tools() returns empty when no MCP servers are configured", + withInstance({}, async () => { + const tools = await MCP.tools() + expect(Object.keys(tools).length).toBe(0) + }), +) + +// ======================================================================== +// Test: connect failure during create() +// ======================================================================== + +test( + "server that fails to connect is marked as failed", + withInstance( + { + "fail-connect": { + type: "local", + command: ["echo", "test"], + }, + }, + async () => { + lastCreatedClientName = "fail-connect" + getOrCreateClientState("fail-connect") + connectShouldFail = true + connectError = "Connection refused" + + await MCP.add("fail-connect", { + type: "local", + command: ["echo", "test"], + }) + + const status = await MCP.status() + expect(status["fail-connect"]?.status).toBe("failed") + if (status["fail-connect"]?.status === "failed") { + expect(status["fail-connect"].error).toContain("Connection refused") + } + + // No tools should be available + const tools = await MCP.tools() + expect(Object.keys(tools).length).toBe(0) + }, + ), +) + +// ======================================================================== +// 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 resolved = false + let rejected = false + callbackPromise.then(() => (resolved = true)).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) + + await McpOAuthCallback.stop() +}) + +// ======================================================================== +// Test: multiple tools from same server get correct name prefixes +// ======================================================================== + +test( + "tools() prefixes tool names with sanitized server name", + withInstance( + { + "my.special-server": { + type: "local", + command: ["echo", "test"], + }, + }, + async () => { + lastCreatedClientName = "my.special-server" + const serverState = getOrCreateClientState("my.special-server") + serverState.tools = [ + { name: "tool-a", description: "Tool A", inputSchema: { type: "object", properties: {} } }, + { name: "tool.b", description: "Tool B", inputSchema: { type: "object", properties: {} } }, + ] + + await MCP.add("my.special-server", { + type: "local", + command: ["echo", "test"], + }) + + const tools = await MCP.tools() + const keys = Object.keys(tools) + + // Server name dots should be replaced with underscores + expect(keys.some((k) => k.startsWith("my_special-server_"))).toBe(true) + // Tool name dots should be replaced with underscores + expect(keys.some((k) => k.endsWith("tool_b"))).toBe(true) + expect(keys.length).toBe(2) + }, + ), +) diff --git a/packages/opencode/test/preload.ts b/packages/opencode/test/preload.ts index 93b73b798a..0ebaa8382d 100644 --- a/packages/opencode/test/preload.ts +++ b/packages/opencode/test/preload.ts @@ -74,11 +74,17 @@ delete process.env["SAMBANOVA_API_KEY"] delete process.env["OPENCODE_SERVER_PASSWORD"] delete process.env["OPENCODE_SERVER_USERNAME"] +// Use in-memory sqlite +process.env["OPENCODE_DB"] = ":memory:" + // Now safe to import from src/ const { Log } = await import("../src/util/log") +const { initProjectors } = await import("../src/server/projectors") Log.init({ print: false, dev: true, level: "DEBUG", }) + +initProjectors() diff --git a/packages/opencode/test/project/vcs.test.ts b/packages/opencode/test/project/vcs.test.ts index 11463b7950..346f55039c 100644 --- a/packages/opencode/test/project/vcs.test.ts +++ b/packages/opencode/test/project/vcs.test.ts @@ -2,41 +2,28 @@ import { $ } from "bun" import { afterEach, describe, expect, test } from "bun:test" import fs from "fs/promises" import path from "path" -import { Effect, Layer, ManagedRuntime } from "effect" import { tmpdir } from "../fixture/fixture" -import { watcherConfigLayer, withServices } from "../fixture/instance" import { FileWatcher } from "../../src/file/watcher" import { Instance } from "../../src/project/instance" import { GlobalBus } from "../../src/bus/global" import { Vcs } from "../../src/project/vcs" -// Skip in CI — native @parcel/watcher binding needed const describeVcs = FileWatcher.hasNativeBinding() && !process.env.CI ? describe : describe.skip -// --------------------------------------------------------------------------- -// Helpers -// --------------------------------------------------------------------------- - -function withVcs( - directory: string, - body: (rt: ManagedRuntime.ManagedRuntime) => Promise, -) { - return withServices( +async function withVcs(directory: string, body: () => Promise) { + return Instance.provide({ directory, - Layer.merge(FileWatcher.layer, Vcs.layer), - async (rt) => { - await rt.runPromise(FileWatcher.Service.use((s) => s.init())) - await rt.runPromise(Vcs.Service.use((s) => s.init())) + fn: async () => { + FileWatcher.init() + Vcs.init() await Bun.sleep(500) - await body(rt) + await body() }, - { provide: [watcherConfigLayer] }, - ) + }) } type BranchEvent = { directory?: string; payload: { type: string; properties: { branch?: string } } } -/** Wait for a Vcs.Event.BranchUpdated event on GlobalBus, with retry polling as fallback */ function nextBranchUpdate(directory: string, timeout = 10_000) { return new Promise((resolve, reject) => { let settled = false @@ -62,10 +49,6 @@ function nextBranchUpdate(directory: string, timeout = 10_000) { }) } -// --------------------------------------------------------------------------- -// Tests -// --------------------------------------------------------------------------- - describeVcs("Vcs", () => { afterEach(async () => { await Instance.disposeAll() @@ -74,8 +57,8 @@ describeVcs("Vcs", () => { test("branch() returns current branch name", async () => { await using tmp = await tmpdir({ git: true }) - await withVcs(tmp.path, async (rt) => { - const branch = await rt.runPromise(Vcs.Service.use((s) => s.branch())) + await withVcs(tmp.path, async () => { + const branch = await Vcs.branch() expect(branch).toBeDefined() expect(typeof branch).toBe("string") }) @@ -84,8 +67,8 @@ describeVcs("Vcs", () => { test("branch() returns undefined for non-git directories", async () => { await using tmp = await tmpdir() - await withVcs(tmp.path, async (rt) => { - const branch = await rt.runPromise(Vcs.Service.use((s) => s.branch())) + await withVcs(tmp.path, async () => { + const branch = await Vcs.branch() expect(branch).toBeUndefined() }) }) @@ -99,7 +82,11 @@ describeVcs("Vcs", () => { const pending = nextBranchUpdate(tmp.path) const head = path.join(tmp.path, ".git", "HEAD") - await fs.writeFile(head, `ref: refs/heads/${branch}\n`) + await fs.writeFile( + head, + `ref: refs/heads/${branch} +`, + ) const updated = await pending expect(updated).toBe(branch) @@ -111,14 +98,18 @@ describeVcs("Vcs", () => { const branch = `test-${Math.random().toString(36).slice(2)}` await $`git branch ${branch}`.cwd(tmp.path).quiet() - await withVcs(tmp.path, async (rt) => { + await withVcs(tmp.path, async () => { const pending = nextBranchUpdate(tmp.path) const head = path.join(tmp.path, ".git", "HEAD") - await fs.writeFile(head, `ref: refs/heads/${branch}\n`) + await fs.writeFile( + head, + `ref: refs/heads/${branch} +`, + ) await pending - const current = await rt.runPromise(Vcs.Service.use((s) => s.branch())) + const current = await Vcs.branch() expect(current).toBe(branch) }) }) diff --git a/packages/opencode/test/project/worktree.test.ts b/packages/opencode/test/project/worktree.test.ts new file mode 100644 index 0000000000..dd91c772aa --- /dev/null +++ b/packages/opencode/test/project/worktree.test.ts @@ -0,0 +1,173 @@ +import { $ } from "bun" +import { afterEach, describe, expect, test } from "bun:test" + +const wintest = process.platform !== "win32" ? test : test.skip +import fs from "fs/promises" +import path from "path" +import { Instance } from "../../src/project/instance" +import { Worktree } from "../../src/worktree" +import { tmpdir } from "../fixture/fixture" + +function withInstance(directory: string, fn: () => Promise) { + return Instance.provide({ directory, fn }) +} + +function normalize(input: string) { + return input.replace(/\\/g, "/").toLowerCase() +} + +async function waitReady() { + const { GlobalBus } = await import("../../src/bus/global") + + return await new Promise<{ name: string; branch: string }>((resolve, reject) => { + const timer = setTimeout(() => { + GlobalBus.off("event", on) + reject(new Error("timed out waiting for worktree.ready")) + }, 10_000) + + function on(evt: { directory?: string; payload: { type: string; properties: { name: string; branch: string } } }) { + if (evt.payload.type !== Worktree.Event.Ready.type) return + clearTimeout(timer) + GlobalBus.off("event", on) + resolve(evt.payload.properties) + } + + GlobalBus.on("event", on) + }) +} + +describe("Worktree", () => { + afterEach(() => Instance.disposeAll()) + + describe("makeWorktreeInfo", () => { + test("returns info with name, branch, and directory", async () => { + await using tmp = await tmpdir({ git: true }) + + const info = await withInstance(tmp.path, () => Worktree.makeWorktreeInfo()) + + expect(info.name).toBeDefined() + expect(typeof info.name).toBe("string") + expect(info.branch).toBe(`opencode/${info.name}`) + expect(info.directory).toContain(info.name) + }) + + test("uses provided name as base", async () => { + await using tmp = await tmpdir({ git: true }) + + const info = await withInstance(tmp.path, () => Worktree.makeWorktreeInfo("my-feature")) + + expect(info.name).toBe("my-feature") + expect(info.branch).toBe("opencode/my-feature") + }) + + test("slugifies the provided name", async () => { + await using tmp = await tmpdir({ git: true }) + + const info = await withInstance(tmp.path, () => Worktree.makeWorktreeInfo("My Feature Branch!")) + + expect(info.name).toBe("my-feature-branch") + }) + + test("throws NotGitError for non-git directories", async () => { + await using tmp = await tmpdir() + + await expect(withInstance(tmp.path, () => Worktree.makeWorktreeInfo())).rejects.toThrow("WorktreeNotGitError") + }) + }) + + describe("create + remove lifecycle", () => { + test("create returns worktree info and remove cleans up", async () => { + await using tmp = await tmpdir({ git: true }) + + const info = await withInstance(tmp.path, () => Worktree.create()) + + expect(info.name).toBeDefined() + expect(info.branch).toStartWith("opencode/") + expect(info.directory).toBeDefined() + + // Wait for bootstrap to complete + await Bun.sleep(1000) + + const ok = await withInstance(tmp.path, () => Worktree.remove({ directory: info.directory })) + expect(ok).toBe(true) + }) + + test("create returns after setup and fires Event.Ready after bootstrap", async () => { + await using tmp = await tmpdir({ git: true }) + const ready = waitReady() + + const info = await withInstance(tmp.path, () => Worktree.create()) + + // create returns before bootstrap completes, but the worktree already exists + expect(info.name).toBeDefined() + expect(info.branch).toStartWith("opencode/") + + const text = await $`git worktree list --porcelain`.cwd(tmp.path).quiet().text() + const dir = await fs.realpath(info.directory).catch(() => info.directory) + expect(normalize(text)).toContain(normalize(dir)) + + // Event.Ready fires after bootstrap finishes in the background + const props = await ready + expect(props.name).toBe(info.name) + expect(props.branch).toBe(info.branch) + + // Cleanup + await withInstance(info.directory, () => Instance.dispose()) + await Bun.sleep(100) + await withInstance(tmp.path, () => Worktree.remove({ directory: info.directory })) + }) + + test("create with custom name", async () => { + await using tmp = await tmpdir({ git: true }) + const ready = waitReady() + + const info = await withInstance(tmp.path, () => Worktree.create({ name: "test-workspace" })) + + expect(info.name).toBe("test-workspace") + expect(info.branch).toBe("opencode/test-workspace") + + // Cleanup + await ready + await withInstance(info.directory, () => Instance.dispose()) + await Bun.sleep(100) + await withInstance(tmp.path, () => Worktree.remove({ directory: info.directory })) + }) + }) + + describe("createFromInfo", () => { + wintest("creates and bootstraps git worktree", async () => { + await using tmp = await tmpdir({ git: true }) + + const info = await withInstance(tmp.path, () => Worktree.makeWorktreeInfo("from-info-test")) + await withInstance(tmp.path, () => Worktree.createFromInfo(info)) + + // Worktree should exist in git (normalize slashes for Windows) + const list = await $`git worktree list --porcelain`.cwd(tmp.path).quiet().text() + const normalizedList = list.replace(/\\/g, "/") + const normalizedDir = info.directory.replace(/\\/g, "/") + expect(normalizedList).toContain(normalizedDir) + + // Cleanup + await withInstance(tmp.path, () => Worktree.remove({ directory: info.directory })) + }) + }) + + describe("remove edge cases", () => { + test("remove non-existent directory succeeds silently", async () => { + await using tmp = await tmpdir({ git: true }) + + const ok = await withInstance(tmp.path, () => + Worktree.remove({ directory: path.join(tmp.path, "does-not-exist") }), + ) + expect(ok).toBe(true) + }) + + test("throws NotGitError for non-git directories", async () => { + await using tmp = await tmpdir() + + await expect(withInstance(tmp.path, () => Worktree.remove({ directory: "/tmp/fake" }))).rejects.toThrow( + "WorktreeNotGitError", + ) + }) + }) +}) diff --git a/packages/opencode/test/session/message-v2.test.ts b/packages/opencode/test/session/message-v2.test.ts index 0d5b89730a..7d416597a8 100644 --- a/packages/opencode/test/session/message-v2.test.ts +++ b/packages/opencode/test/session/message-v2.test.ts @@ -927,4 +927,31 @@ describe("session.message-v2.fromError", () => { }, }) }) + + test("classifies ZlibError from fetch as retryable APIError", () => { + const zlibError = new Error( + 'ZlibError fetching "https://opencode.cloudflare.dev/anthropic/messages". For more information, pass `verbose: true` in the second argument to fetch()', + ) + ;(zlibError as any).code = "ZlibError" + ;(zlibError as any).errno = 0 + ;(zlibError as any).path = "" + + const result = MessageV2.fromError(zlibError, { providerID }) + + expect(MessageV2.APIError.isInstance(result)).toBe(true) + expect((result as MessageV2.APIError).data.isRetryable).toBe(true) + expect((result as MessageV2.APIError).data.message).toInclude("decompression") + }) + + test("classifies ZlibError as AbortedError when abort context is provided", () => { + const zlibError = new Error( + 'ZlibError fetching "https://opencode.cloudflare.dev/anthropic/messages". For more information, pass `verbose: true` in the second argument to fetch()', + ) + ;(zlibError as any).code = "ZlibError" + ;(zlibError as any).errno = 0 + + const result = MessageV2.fromError(zlibError, { providerID, aborted: true }) + + expect(result.name).toBe("MessageAbortedError") + }) }) diff --git a/packages/opencode/test/session/retry.test.ts b/packages/opencode/test/session/retry.test.ts index 7135e6084c..04a6b33652 100644 --- a/packages/opencode/test/session/retry.test.ts +++ b/packages/opencode/test/session/retry.test.ts @@ -126,14 +126,16 @@ describe("session.retry.retryable", () => { expect(SessionRetry.retryable(error)).toBeUndefined() }) - test("does not retry FreeUsageLimitError", () => { + test("retries ZlibError decompression failures", () => { const error = new MessageV2.APIError({ - message: "rate limit exceeded", + message: "Response decompression failed", isRetryable: true, - responseBody: '{"error":{"code":"FreeUsageLimitError"}}', - }).toObject() as ReturnType + metadata: { code: "ZlibError" }, + }).toObject() as MessageV2.APIError - expect(SessionRetry.retryable(error)).toBeUndefined() + const retryable = SessionRetry.retryable(error) + expect(retryable).toBeDefined() + expect(retryable).toBe("Response decompression failed") }) }) diff --git a/packages/opencode/test/session/session.test.ts b/packages/opencode/test/session/session.test.ts index 2332586223..0c18f92ba9 100644 --- a/packages/opencode/test/session/session.test.ts +++ b/packages/opencode/test/session/session.test.ts @@ -10,8 +10,8 @@ import { MessageID, PartID } from "../../src/session/schema" const projectRoot = path.join(__dirname, "../..") Log.init({ print: false }) -describe("session.started event", () => { - test("should emit session.started event when session is created", async () => { +describe("session.created event", () => { + test("should emit session.created event when session is created", async () => { await Instance.provide({ directory: projectRoot, fn: async () => { @@ -41,14 +41,14 @@ describe("session.started event", () => { }) }) - test("session.started event should be emitted before session.updated", async () => { + test("session.created event should be emitted before session.updated", async () => { await Instance.provide({ directory: projectRoot, fn: async () => { const events: string[] = [] - const unsubStarted = Bus.subscribe(Session.Event.Created, () => { - events.push("started") + const unsubCreated = Bus.subscribe(Session.Event.Created, () => { + events.push("created") }) const unsubUpdated = Bus.subscribe(Session.Event.Updated, () => { @@ -59,12 +59,12 @@ describe("session.started event", () => { await new Promise((resolve) => setTimeout(resolve, 100)) - unsubStarted() + unsubCreated() unsubUpdated() - expect(events).toContain("started") + expect(events).toContain("created") expect(events).toContain("updated") - expect(events.indexOf("started")).toBeLessThan(events.indexOf("updated")) + expect(events.indexOf("created")).toBeLessThan(events.indexOf("updated")) await Session.remove(session.id) }, diff --git a/packages/opencode/test/snapshot/snapshot.test.ts b/packages/opencode/test/snapshot/snapshot.test.ts index bf54feb472..f42cec4fc7 100644 --- a/packages/opencode/test/snapshot/snapshot.test.ts +++ b/packages/opencode/test/snapshot/snapshot.test.ts @@ -181,7 +181,7 @@ test("symlink handling", async () => { }) }) -test("large file handling", async () => { +test("file under size limit handling", async () => { await using tmp = await bootstrap() await Instance.provide({ directory: tmp.path, @@ -196,6 +196,23 @@ test("large file handling", async () => { }) }) +test("large added files are skipped", async () => { + await using tmp = await bootstrap() + await Instance.provide({ + directory: tmp.path, + fn: async () => { + const before = await Snapshot.track() + expect(before).toBeTruthy() + + await Filesystem.write(`${tmp.path}/huge.txt`, new Uint8Array(2 * 1024 * 1024 + 1)) + + expect((await Snapshot.patch(before!)).files).toEqual([]) + expect(await Snapshot.diff(before!)).toBe("") + expect(await Snapshot.track()).toBe(before) + }, + }) +}) + test("nested directory revert", async () => { await using tmp = await bootstrap() await Instance.provide({ diff --git a/packages/opencode/test/storage/db.test.ts b/packages/opencode/test/storage/db.test.ts index 3791d344db..fff70c0322 100644 --- a/packages/opencode/test/storage/db.test.ts +++ b/packages/opencode/test/storage/db.test.ts @@ -6,14 +6,9 @@ import { Database } from "../../src/storage/db" describe("Database.Path", () => { test("returns database path for the current channel", () => { - const db = process.env["KILO_DB"] - const expected = db - ? path.isAbsolute(db) - ? db - : path.join(Global.Path.data, db) - : ["latest", "beta"].includes(Installation.CHANNEL) - ? path.join(Global.Path.data, "kilo.db") // kilcode_change - : path.join(Global.Path.data, `kilo-${Installation.CHANNEL.replace(/[^a-zA-Z0-9._-]/g, "-")}.db`) // kilocode_change + const expected = ["latest", "beta"].includes(Installation.CHANNEL) + ? path.join(Global.Path.data, "kilo.db") + : path.join(Global.Path.data, `kilo-${Installation.CHANNEL.replace(/[^a-zA-Z0-9._-]/g, "-")}.db`) expect(Database.Path).toBe(expected) }) }) diff --git a/packages/opencode/test/sync/index.test.ts b/packages/opencode/test/sync/index.test.ts new file mode 100644 index 0000000000..e0c47531ec --- /dev/null +++ b/packages/opencode/test/sync/index.test.ts @@ -0,0 +1,191 @@ +import { describe, test, expect, beforeEach, afterEach, afterAll } from "bun:test" +import { tmpdir } from "../fixture/fixture" +import z from "zod" +import { Bus } from "../../src/bus" +import { Instance } from "../../src/project/instance" +import { SyncEvent } from "../../src/sync" +import { Database } from "../../src/storage/db" +import { EventTable } from "../../src/sync/event.sql" +import { Identifier } from "../../src/id/id" +import { Flag } from "../../src/flag/flag" +import { initProjectors } from "../../src/server/projectors" + +const original = Flag.KILO_EXPERIMENTAL_WORKSPACES + +beforeEach(() => { + Database.close() + + // @ts-expect-error don't do this normally, but it works + Flag.KILO_EXPERIMENTAL_WORKSPACES = true +}) + +afterEach(() => { + // @ts-expect-error don't do this normally, but it works + Flag.KILO_EXPERIMENTAL_WORKSPACES = original +}) + +function withInstance(fn: () => void | Promise) { + return async () => { + await using tmp = await tmpdir() + + await Instance.provide({ + directory: tmp.path, + fn: async () => { + await fn() + }, + }) + } +} + +describe("SyncEvent", () => { + function setup() { + SyncEvent.reset() + + const Created = SyncEvent.define({ + type: "item.created", + version: 1, + aggregate: "id", + schema: z.object({ id: z.string(), name: z.string() }), + }) + const Sent = SyncEvent.define({ + type: "item.sent", + version: 1, + aggregate: "item_id", + schema: z.object({ item_id: z.string(), to: z.string() }), + }) + + SyncEvent.init({ + projectors: [SyncEvent.project(Created, () => {}), SyncEvent.project(Sent, () => {})], + }) + + return { Created, Sent } + } + + afterAll(() => { + SyncEvent.reset() + initProjectors() + }) + + describe("run", () => { + test( + "inserts event row", + withInstance(() => { + const { Created } = setup() + SyncEvent.run(Created, { id: "evt_1", name: "first" }) + const rows = Database.use((db) => db.select().from(EventTable).all()) + expect(rows).toHaveLength(1) + expect(rows[0].type).toBe("item.created.1") + expect(rows[0].aggregate_id).toBe("evt_1") + }), + ) + + test( + "increments seq per aggregate", + withInstance(() => { + const { Created } = setup() + SyncEvent.run(Created, { id: "evt_1", name: "first" }) + SyncEvent.run(Created, { id: "evt_1", name: "second" }) + const rows = Database.use((db) => db.select().from(EventTable).all()) + expect(rows).toHaveLength(2) + expect(rows[1].seq).toBe(rows[0].seq + 1) + }), + ) + + test( + "uses custom aggregate field from agg()", + withInstance(() => { + const { Sent } = setup() + SyncEvent.run(Sent, { item_id: "evt_1", to: "james" }) + const rows = Database.use((db) => db.select().from(EventTable).all()) + expect(rows).toHaveLength(1) + expect(rows[0].aggregate_id).toBe("evt_1") + }), + ) + + test( + "emits events", + withInstance(async () => { + const { Created } = setup() + const events: Array<{ + type: string + properties: { id: string; name: string } + }> = [] + const received = new Promise((resolve) => { + Bus.subscribeAll((event) => { + events.push(event) + resolve() + }) + }) + + SyncEvent.run(Created, { id: "evt_1", name: "test" }) + + await received + expect(events).toHaveLength(1) + expect(events[0]).toEqual({ + type: "item.created", + properties: { + id: "evt_1", + name: "test", + }, + }) + }), + ) + }) + + describe("replay", () => { + test( + "inserts event from external payload", + withInstance(() => { + const id = Identifier.descending("message") + SyncEvent.replay({ + id: "evt_1", + type: "item.created.1", + seq: 0, + aggregateID: id, + data: { id, name: "replayed" }, + }) + const rows = Database.use((db) => db.select().from(EventTable).all()) + expect(rows).toHaveLength(1) + expect(rows[0].aggregate_id).toBe(id) + }), + ) + + test( + "throws on sequence mismatch", + withInstance(() => { + const id = Identifier.descending("message") + SyncEvent.replay({ + id: "evt_1", + type: "item.created.1", + seq: 0, + aggregateID: id, + data: { id, name: "first" }, + }) + expect(() => + SyncEvent.replay({ + id: "evt_1", + type: "item.created.1", + seq: 5, + aggregateID: id, + data: { id, name: "bad" }, + }), + ).toThrow(/Sequence mismatch/) + }), + ) + + test( + "throws on unknown event type", + withInstance(() => { + expect(() => + SyncEvent.replay({ + id: "evt_1", + type: "unknown.event.1", + seq: 0, + aggregateID: "x", + data: {}, + }), + ).toThrow(/Unknown event type/) + }), + ) + }) +}) diff --git a/packages/opencode/test/tool/edit.test.ts b/packages/opencode/test/tool/edit.test.ts index f6b1ee5c92..96d41400e3 100644 --- a/packages/opencode/test/tool/edit.test.ts +++ b/packages/opencode/test/tool/edit.test.ts @@ -89,7 +89,6 @@ describe("tool.edit", () => { const { FileWatcher } = await import("../../src/file/watcher") const events: string[] = [] - const unsubEdited = Bus.subscribe(File.Event.Edited, () => events.push("edited")) const unsubUpdated = Bus.subscribe(FileWatcher.Event.Updated, () => events.push("updated")) const edit = await EditTool.init() @@ -102,9 +101,7 @@ describe("tool.edit", () => { ctx, ) - expect(events).toContain("edited") expect(events).toContain("updated") - unsubEdited() unsubUpdated() }, }) @@ -305,11 +302,9 @@ describe("tool.edit", () => { await FileTime.read(ctx.sessionID, filepath) const { Bus } = await import("../../src/bus") - const { File } = await import("../../src/file") const { FileWatcher } = await import("../../src/file/watcher") const events: string[] = [] - const unsubEdited = Bus.subscribe(File.Event.Edited, () => events.push("edited")) const unsubUpdated = Bus.subscribe(FileWatcher.Event.Updated, () => events.push("updated")) const edit = await EditTool.init() @@ -322,9 +317,7 @@ describe("tool.edit", () => { ctx, ) - expect(events).toContain("edited") expect(events).toContain("updated") - unsubEdited() unsubUpdated() }, }) diff --git a/packages/plugin/src/index.ts b/packages/plugin/src/index.ts index e505b0518f..760f49d3b8 100644 --- a/packages/plugin/src/index.ts +++ b/packages/plugin/src/index.ts @@ -129,6 +129,7 @@ export type AuthOuathResult = { url: string; instructions: string } & ( access: string expires: number accountId?: string + enterpriseUrl?: string } | { key: string } )) @@ -149,6 +150,7 @@ export type AuthOuathResult = { url: string; instructions: string } & ( access: string expires: number accountId?: string + enterpriseUrl?: string } | { key: string } )) diff --git a/packages/sdk/js/src/v2/gen/sdk.gen.ts b/packages/sdk/js/src/v2/gen/sdk.gen.ts index c09bdde377..2250f877b0 100644 --- a/packages/sdk/js/src/v2/gen/sdk.gen.ts +++ b/packages/sdk/js/src/v2/gen/sdk.gen.ts @@ -51,6 +51,7 @@ import type { GlobalDisposeResponses, GlobalEventResponses, GlobalHealthResponses, + GlobalSyncEventSubscribeResponses, GlobalUpgradeErrors, GlobalUpgradeResponses, InstanceDisposeResponses, @@ -285,6 +286,20 @@ class HeyApiRegistry { } } +export class SyncEvent extends HeyApiClient { + /** + * Subscribe to global sync events + * + * Get global sync events + */ + public subscribe(options?: Options) { + return (options?.client ?? this.client).sse.get({ + url: "/global/sync-event", + ...options, + }) + } +} + export class Config extends HeyApiClient { /** * Get global configuration @@ -384,6 +399,11 @@ export class Global extends HeyApiClient { }) } + private _syncEvent?: SyncEvent + get syncEvent(): SyncEvent { + return (this._syncEvent ??= new SyncEvent({ client: this.client })) + } + private _config?: Config get config(): Config { return (this._config ??= new Config({ client: this.client })) diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts index 93ecfeb57a..91e3b6762a 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -90,13 +90,6 @@ export type EventLspUpdated = { } } -export type EventFileEdited = { - type: "file.edited" - properties: { - file: string - } -} - export type EventTuiPromptAppend = { type: "tui.prompt.append" properties: { @@ -205,21 +198,205 @@ export type EventSessionNetworkRestored = { } } -export type OutputFormatText = { - type: "text" +export type EventMessagePartDelta = { + type: "message.part.delta" + properties: { + sessionID: string + messageID: string + partID: string + field: string + delta: string + } } -export type JsonSchema = { - [key: string]: unknown +export type PermissionRequest = { + id: string + sessionID: string + permission: string + patterns: Array + metadata: { + [key: string]: unknown + } + always: Array + tool?: { + messageID: string + callID: string + } } -export type OutputFormatJsonSchema = { - type: "json_schema" - schema: JsonSchema - retryCount?: number +export type EventPermissionAsked = { + type: "permission.asked" + properties: PermissionRequest } -export type OutputFormat = OutputFormatText | OutputFormatJsonSchema +export type EventPermissionReplied = { + type: "permission.replied" + properties: { + sessionID: string + requestID: string + reply: "once" | "always" | "reject" + } +} + +export type SessionStatus = + | { + type: "idle" + } + | { + type: "retry" + attempt: number + message: string + next: number + } + | { + type: "busy" + } + | { + type: "offline" + requestID: string + message: string + } + +export type EventSessionStatus = { + type: "session.status" + properties: { + sessionID: string + status: SessionStatus + } +} + +export type EventSessionIdle = { + type: "session.idle" + properties: { + sessionID: string + } +} + +export type QuestionOption = { + /** + * Display text (1-5 words, concise) + */ + label: string + /** + * Explanation of choice + */ + description: string +} + +export type QuestionInfo = { + /** + * Complete question + */ + question: string + /** + * Very short label (max 30 chars) + */ + header: string + /** + * Available choices + */ + options: Array + /** + * Allow selecting multiple choices + */ + multiple?: boolean + /** + * Allow typing a custom answer (default: true) + */ + custom?: boolean +} + +export type QuestionRequest = { + id: string + sessionID: string + /** + * Questions to ask + */ + questions: Array + tool?: { + messageID: string + callID: string + } +} + +export type EventQuestionAsked = { + type: "question.asked" + properties: QuestionRequest +} + +export type QuestionAnswer = Array + +export type EventQuestionReplied = { + type: "question.replied" + properties: { + sessionID: string + requestID: string + answers: Array + } +} + +export type EventQuestionRejected = { + type: "question.rejected" + properties: { + sessionID: string + requestID: string + } +} + +export type EventSessionCompacted = { + type: "session.compacted" + properties: { + sessionID: string + } +} + +export type EventFileEdited = { + type: "file.edited" + properties: { + file: string + } +} + +export type EventFileWatcherUpdated = { + type: "file.watcher.updated" + properties: { + file: string + event: "add" | "change" | "unlink" + } +} + +export type Todo = { + /** + * Brief description of the task + */ + content: string + /** + * Current status of the task: pending, in_progress, completed, cancelled + */ + status: string + /** + * Priority level of the task: high, medium, low + */ + priority: string +} + +export type EventTodoUpdated = { + type: "todo.updated" + properties: { + sessionID: string + todos: Array + } +} + +export type EventCommandExecuted = { + type: "command.executed" + properties: { + name: string + sessionID: string + arguments: string + messageID: string + } +} export type FileDiff = { file: string @@ -230,34 +407,11 @@ export type FileDiff = { status?: "added" | "deleted" | "modified" } -export type UserMessage = { - id: string - sessionID: string - role: "user" - time: { - created: number - } - format?: OutputFormat - summary?: { - title?: string - body?: string - diffs: Array - } - agent: string - model: { - providerID: string - modelID: string - } - system?: string - tools?: { - [key: string]: boolean - } - variant?: string - editorContext?: { - visibleFiles?: Array - openTabs?: Array - activeFile?: string - shell?: string +export type EventSessionDiff = { + type: "session.diff" + properties: { + sessionID: string + diff: Array } } @@ -322,6 +476,166 @@ export type ApiError = { } } +export type EventSessionError = { + type: "session.error" + properties: { + sessionID?: string + error?: + | ProviderAuthError + | UnknownError + | MessageOutputLengthError + | MessageAbortedError + | StructuredOutputError + | ContextOverflowError + | ApiError + } +} + +export type EventSessionTurnOpen = { + type: "session.turn.open" + properties: { + sessionID: string + } +} + +export type EventSessionTurnClose = { + type: "session.turn.close" + properties: { + sessionID: string + reason: "completed" | "error" | "interrupted" + } +} + +export type EventVcsBranchUpdated = { + type: "vcs.branch.updated" + properties: { + branch?: string + } +} + +export type EventKiloSessionsRemoteStatusChanged = { + type: "kilo-sessions.remote-status-changed" + properties: { + enabled: boolean + connected: boolean + } +} + +export type EventWorkspaceReady = { + type: "workspace.ready" + properties: { + name: string + } +} + +export type EventWorkspaceFailed = { + type: "workspace.failed" + properties: { + message: string + } +} + +export type Pty = { + id: string + title: string + command: string + args: Array + cwd: string + status: "running" | "exited" + pid: number +} + +export type EventPtyCreated = { + type: "pty.created" + properties: { + info: Pty + } +} + +export type EventPtyUpdated = { + type: "pty.updated" + properties: { + info: Pty + } +} + +export type EventPtyExited = { + type: "pty.exited" + properties: { + id: string + exitCode: number + } +} + +export type EventPtyDeleted = { + type: "pty.deleted" + properties: { + id: string + } +} + +export type EventWorktreeReady = { + type: "worktree.ready" + properties: { + name: string + branch: string + } +} + +export type EventWorktreeFailed = { + type: "worktree.failed" + properties: { + message: string + } +} + +export type OutputFormatText = { + type: "text" +} + +export type JsonSchema = { + [key: string]: unknown +} + +export type OutputFormatJsonSchema = { + type: "json_schema" + schema: JsonSchema + retryCount?: number +} + +export type OutputFormat = OutputFormatText | OutputFormatJsonSchema + +export type UserMessage = { + id: string + sessionID: string + role: "user" + time: { + created: number + } + format?: OutputFormat + summary?: { + title?: string + body?: string + diffs: Array + } + agent: string + model: { + providerID: string + modelID: string + } + system?: string + tools?: { + [key: string]: boolean + } + variant?: string + editorContext?: { + visibleFiles?: Array + openTabs?: Array + activeFile?: string + shell?: string + } +} + export type AssistantMessage = { id: string sessionID: string @@ -369,6 +683,7 @@ export type Message = UserMessage | AssistantMessage export type EventMessageUpdated = { type: "message.updated" properties: { + sessionID: string info: Message } } @@ -645,19 +960,10 @@ export type Part = export type EventMessagePartUpdated = { type: "message.part.updated" - properties: { - part: Part - } -} - -export type EventMessagePartDelta = { - type: "message.part.delta" properties: { sessionID: string - messageID: string - partID: string - field: string - delta: string + part: Part + time: number } } @@ -670,188 +976,6 @@ export type EventMessagePartRemoved = { } } -export type PermissionRequest = { - id: string - sessionID: string - permission: string - patterns: Array - metadata: { - [key: string]: unknown - } - always: Array - tool?: { - messageID: string - callID: string - } -} - -export type EventPermissionAsked = { - type: "permission.asked" - properties: PermissionRequest -} - -export type EventPermissionReplied = { - type: "permission.replied" - properties: { - sessionID: string - requestID: string - reply: "once" | "always" | "reject" - } -} - -export type SessionStatus = - | { - type: "idle" - } - | { - type: "retry" - attempt: number - message: string - next: number - } - | { - type: "busy" - } - | { - type: "offline" - requestID: string - message: string - } - -export type EventSessionStatus = { - type: "session.status" - properties: { - sessionID: string - status: SessionStatus - } -} - -export type EventSessionIdle = { - type: "session.idle" - properties: { - sessionID: string - } -} - -export type QuestionOption = { - /** - * Display text (1-5 words, concise) - */ - label: string - /** - * Explanation of choice - */ - description: string -} - -export type QuestionInfo = { - /** - * Complete question - */ - question: string - /** - * Very short label (max 30 chars) - */ - header: string - /** - * Available choices - */ - options: Array - /** - * Allow selecting multiple choices - */ - multiple?: boolean - /** - * Allow typing a custom answer (default: true) - */ - custom?: boolean -} - -export type QuestionRequest = { - id: string - sessionID: string - /** - * Questions to ask - */ - questions: Array - tool?: { - messageID: string - callID: string - } -} - -export type EventQuestionAsked = { - type: "question.asked" - properties: QuestionRequest -} - -export type QuestionAnswer = Array - -export type EventQuestionReplied = { - type: "question.replied" - properties: { - sessionID: string - requestID: string - answers: Array - } -} - -export type EventQuestionRejected = { - type: "question.rejected" - properties: { - sessionID: string - requestID: string - } -} - -export type EventSessionCompacted = { - type: "session.compacted" - properties: { - sessionID: string - } -} - -export type EventFileWatcherUpdated = { - type: "file.watcher.updated" - properties: { - file: string - event: "add" | "change" | "unlink" - } -} - -export type Todo = { - /** - * Brief description of the task - */ - content: string - /** - * Current status of the task: pending, in_progress, completed, cancelled - */ - status: string - /** - * Priority level of the task: high, medium, low - */ - priority: string -} - -export type EventTodoUpdated = { - type: "todo.updated" - properties: { - sessionID: string - todos: Array - } -} - -export type EventCommandExecuted = { - type: "command.executed" - properties: { - name: string - sessionID: string - arguments: string - messageID: string - } -} - export type PermissionAction = "allow" | "deny" | "ask" export type PermissionRule = { @@ -903,6 +1027,7 @@ export type Session = { export type EventSessionCreated = { type: "session.created" properties: { + sessionID: string info: Session } } @@ -910,6 +1035,7 @@ export type EventSessionCreated = { export type EventSessionUpdated = { type: "session.updated" properties: { + sessionID: string info: Session } } @@ -917,131 +1043,11 @@ export type EventSessionUpdated = { export type EventSessionDeleted = { type: "session.deleted" properties: { + sessionID: string info: Session } } -export type EventSessionDiff = { - type: "session.diff" - properties: { - sessionID: string - diff: Array - } -} - -export type EventSessionError = { - type: "session.error" - properties: { - sessionID?: string - error?: - | ProviderAuthError - | UnknownError - | MessageOutputLengthError - | MessageAbortedError - | StructuredOutputError - | ContextOverflowError - | ApiError - } -} - -export type EventSessionTurnOpen = { - type: "session.turn.open" - properties: { - sessionID: string - } -} - -export type EventSessionTurnClose = { - type: "session.turn.close" - properties: { - sessionID: string - reason: "completed" | "error" | "interrupted" - } -} - -export type EventVcsBranchUpdated = { - type: "vcs.branch.updated" - properties: { - branch?: string - } -} - -export type EventWorkspaceReady = { - type: "workspace.ready" - properties: { - name: string - } -} - -export type EventWorkspaceFailed = { - type: "workspace.failed" - properties: { - message: string - } -} - -export type Pty = { - id: string - title: string - command: string - args: Array - cwd: string - status: "running" | "exited" - pid: number -} - -export type EventPtyCreated = { - type: "pty.created" - properties: { - info: Pty - } -} - -export type EventPtyUpdated = { - type: "pty.updated" - properties: { - info: Pty - } -} - -export type EventPtyExited = { - type: "pty.exited" - properties: { - id: string - exitCode: number - } -} - -export type EventPtyDeleted = { - type: "pty.deleted" - properties: { - id: string - } -} - -export type EventWorktreeReady = { - type: "worktree.ready" - properties: { - name: string - branch: string - } -} - -export type EventWorktreeFailed = { - type: "worktree.failed" - properties: { - message: string - } -} - -export type EventKiloSessionsRemoteStatusChanged = { - type: "kilo-sessions.remote-status-changed" - properties: { - enabled: boolean - connected: boolean - } -} - export type Event = | EventInstallationUpdated | EventInstallationUpdateAvailable @@ -1052,7 +1058,6 @@ export type Event = | EventGlobalConfigUpdated | EventLspClientDiagnostics | EventLspUpdated - | EventFileEdited | EventTuiPromptAppend | EventTuiCommandExecute | EventTuiToastShow @@ -1063,11 +1068,7 @@ export type Event = | EventSessionNetworkReplied | EventSessionNetworkRejected | EventSessionNetworkRestored - | EventMessageUpdated - | EventMessageRemoved - | EventMessagePartUpdated | EventMessagePartDelta - | EventMessagePartRemoved | EventPermissionAsked | EventPermissionReplied | EventSessionStatus @@ -1076,17 +1077,16 @@ export type Event = | EventQuestionReplied | EventQuestionRejected | EventSessionCompacted + | EventFileEdited | EventFileWatcherUpdated | EventTodoUpdated | EventCommandExecuted - | EventSessionCreated - | EventSessionUpdated - | EventSessionDeleted | EventSessionDiff | EventSessionError | EventSessionTurnOpen | EventSessionTurnClose | EventVcsBranchUpdated + | EventKiloSessionsRemoteStatusChanged | EventWorkspaceReady | EventWorkspaceFailed | EventPtyCreated @@ -1095,13 +1095,124 @@ export type Event = | EventPtyDeleted | EventWorktreeReady | EventWorktreeFailed - | EventKiloSessionsRemoteStatusChanged + | EventMessageUpdated + | EventMessageRemoved + | EventMessagePartUpdated + | EventMessagePartRemoved + | EventSessionCreated + | EventSessionUpdated + | EventSessionDeleted export type GlobalEvent = { directory: string payload: Event } +export type SyncEventMessageUpdated = { + type: "message.updated.1" + aggregate: "sessionID" + data: { + sessionID: string + info: Message + } +} + +export type SyncEventMessageRemoved = { + type: "message.removed.1" + aggregate: "sessionID" + data: { + sessionID: string + messageID: string + } +} + +export type SyncEventMessagePartUpdated = { + type: "message.part.updated.1" + aggregate: "sessionID" + data: { + sessionID: string + part: Part + time: number + } +} + +export type SyncEventMessagePartRemoved = { + type: "message.part.removed.1" + aggregate: "sessionID" + data: { + sessionID: string + messageID: string + partID: string + } +} + +export type SyncEventSessionCreated = { + type: "session.created.1" + aggregate: "sessionID" + data: { + sessionID: string + info: Session + } +} + +export type SyncEventSessionUpdated = { + type: "session.updated.1" + aggregate: "sessionID" + data: { + sessionID: string + info: { + id: string | null + slug: string | null + projectID: string | null + workspaceID: string | null + directory: string | null + parentID: string | null + summary: { + additions: number + deletions: number + files: number + diffs?: Array<{ + file: string + additions: number + deletions: number + status?: "added" | "deleted" | "modified" + }> + } | null + share?: { + url: string | null + } + title: string | null + version: string | null + time?: { + created: number | null + updated: number | null + compacting: number | null + archived: number | null + } + permission: PermissionRuleset | null + revert: { + messageID: string + partID?: string + snapshot?: string + diff?: string + } | null + } + } +} + +export type SyncEventSessionDeleted = { + type: "session.deleted.1" + aggregate: "sessionID" + data: { + sessionID: string + info: Session + } +} + +export type SyncEvent = { + payload: SyncEvent +} + /** * Log level */ @@ -1153,7 +1264,6 @@ export type PermissionConfig = task?: PermissionRuleConfig external_directory?: PermissionRuleConfig todowrite?: PermissionActionConfig - todoread?: PermissionActionConfig question?: PermissionActionConfig webfetch?: PermissionActionConfig websearch?: PermissionActionConfig @@ -2022,7 +2132,7 @@ export type Path = { } export type VcsInfo = { - branch: string + branch?: string } export type Command = { @@ -2108,6 +2218,23 @@ export type GlobalEventResponses = { export type GlobalEventResponse = GlobalEventResponses[keyof GlobalEventResponses] +export type GlobalSyncEventSubscribeData = { + body?: never + path?: never + query?: never + url: "/global/sync-event" +} + +export type GlobalSyncEventSubscribeResponses = { + /** + * Event stream + */ + 200: SyncEvent +} + +export type GlobalSyncEventSubscribeResponse = + GlobalSyncEventSubscribeResponses[keyof GlobalSyncEventSubscribeResponses] + export type GlobalConfigGetData = { body?: never path?: never diff --git a/packages/storybook/.storybook/main.ts b/packages/storybook/.storybook/main.ts index a6423530f6..b38973ea85 100644 --- a/packages/storybook/.storybook/main.ts +++ b/packages/storybook/.storybook/main.ts @@ -2,6 +2,7 @@ import { defineMain } from "storybook-solidjs-vite" import path from "node:path" import { fileURLToPath } from "node:url" import tailwindcss from "@tailwindcss/vite" +import { playgroundCss } from "./playground-css-plugin" const here = path.dirname(fileURLToPath(import.meta.url)) const ui = path.resolve(here, "../../ui") @@ -24,7 +25,7 @@ export default defineMain({ async viteFinal(config) { const { mergeConfig, searchForWorkspaceRoot } = await import("vite") return mergeConfig(config, { - plugins: [tailwindcss()], + plugins: [tailwindcss(), playgroundCss()], resolve: { dedupe: ["solid-js", "solid-js/web", "@solidjs/meta"], alias: [ diff --git a/packages/storybook/.storybook/playground-css-plugin.ts b/packages/storybook/.storybook/playground-css-plugin.ts new file mode 100644 index 0000000000..23bb20b7dd --- /dev/null +++ b/packages/storybook/.storybook/playground-css-plugin.ts @@ -0,0 +1,136 @@ +/** + * Vite plugin that exposes a POST endpoint for the timeline playground + * to write CSS changes back to source files on disk. + * + * POST /__playground/apply-css + * Body: { edits: Array<{ file: string; anchor: string; prop: string; value: string }> } + * + * For each edit the plugin finds `anchor` in the file, then locates the + * next `prop: ;` after it and replaces the value portion. + * `file` is a basename resolved relative to packages/ui/src/components/. + */ +import type { Plugin } from "vite" +import type { IncomingMessage, ServerResponse } from "node:http" +import fs from "node:fs" +import path from "node:path" +import { fileURLToPath } from "node:url" + +const here = path.dirname(fileURLToPath(import.meta.url)) +const root = path.resolve(here, "../../ui/src/components") + +const ENDPOINT = "/__playground/apply-css" + +type Edit = { file: string; anchor: string; prop: string; value: string } +type Result = { file: string; prop: string; ok: boolean; error?: string } + +function applyEdits(content: string, edits: Edit[]): { content: string; results: Result[] } { + const results: Result[] = [] + let out = content + + for (const edit of edits) { + const name = edit.file + const idx = out.indexOf(edit.anchor) + if (idx === -1) { + results.push({ file: name, prop: edit.prop, ok: false, error: `Anchor not found: ${edit.anchor.slice(0, 50)}` }) + continue + } + + // From the anchor position, find the next occurrence of `prop: ` + // We match `prop:` followed by any value up to `;` + const after = out.slice(idx) + const re = new RegExp(`(${escapeRegex(edit.prop)}\\s*:\\s*)([^;]+)(;)`) + const match = re.exec(after) + if (!match) { + results.push({ file: name, prop: edit.prop, ok: false, error: `Property "${edit.prop}" not found after anchor` }) + continue + } + + const start = idx + match.index + match[1].length + const end = start + match[2].length + out = out.slice(0, start) + edit.value + out.slice(end) + results.push({ file: name, prop: edit.prop, ok: true }) + } + + return { content: out, results } +} + +function escapeRegex(s: string) { + return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") +} + +export function playgroundCss(): Plugin { + return { + name: "playground-css", + configureServer(server) { + server.middlewares.use((req: IncomingMessage, res: ServerResponse, next: () => void) => { + if (req.url !== ENDPOINT) return next() + if (req.method !== "POST") { + res.statusCode = 405 + res.setHeader("Content-Type", "application/json") + res.end(JSON.stringify({ error: "Method not allowed" })) + return + } + + let data = "" + req.on("data", (chunk: Buffer) => { + data += chunk.toString() + }) + req.on("end", () => { + let payload: { edits: Edit[] } + try { + payload = JSON.parse(data) + } catch { + res.statusCode = 400 + res.setHeader("Content-Type", "application/json") + res.end(JSON.stringify({ error: "Invalid JSON" })) + return + } + + if (!Array.isArray(payload.edits)) { + res.statusCode = 400 + res.setHeader("Content-Type", "application/json") + res.end(JSON.stringify({ error: "Missing edits array" })) + return + } + + // Group by file + const grouped = new Map() + for (const edit of payload.edits) { + if (!edit.file || !edit.anchor || !edit.prop || edit.value === undefined) continue + const abs = path.resolve(root, edit.file) + if (!abs.startsWith(root)) continue + const key = abs + if (!grouped.has(key)) grouped.set(key, []) + grouped.get(key)!.push(edit) + } + + const results: Result[] = [] + + for (const [abs, edits] of grouped) { + const name = path.basename(abs) + if (!fs.existsSync(abs)) { + for (const e of edits) results.push({ file: name, prop: e.prop, ok: false, error: "File not found" }) + continue + } + + try { + const content = fs.readFileSync(abs, "utf-8") + const applied = applyEdits(content, edits) + results.push(...applied.results) + + if (applied.results.some((r) => r.ok)) { + fs.writeFileSync(abs, applied.content, "utf-8") + } + } catch (err) { + for (const e of edits) results.push({ file: name, prop: e.prop, ok: false, error: String(err) }) + } + } + + res.statusCode = 200 + res.setHeader("Content-Type", "application/json") + res.end(JSON.stringify({ results })) + }) + }) + }, + } +} diff --git a/packages/ui/src/components/message-part.css b/packages/ui/src/components/message-part.css index f4582e4f2a..6f3eabd27d 100644 --- a/packages/ui/src/components/message-part.css +++ b/packages/ui/src/components/message-part.css @@ -254,11 +254,6 @@ opacity: 1; pointer-events: auto; } - - [data-component="markdown"] { - margin-top: 0; - font-size: var(--font-size-base); - } } [data-component="compaction-part"] { @@ -296,7 +291,7 @@ [data-component="markdown"] { margin-top: 24px; font-style: normal; - font-size: inherit; + font-size: var(--font-size-base); color: var(--text-weak); strong, diff --git a/packages/ui/src/components/message-part.tsx b/packages/ui/src/components/message-part.tsx index 826b8c7a05..01803088b6 100644 --- a/packages/ui/src/components/message-part.tsx +++ b/packages/ui/src/components/message-part.tsx @@ -311,11 +311,6 @@ export function getToolInfo(tool: string, input: any = {}): ToolInfo { icon: "checklist", title: i18n.t("ui.tool.todos"), } - case "todoread": - return { - icon: "checklist", - title: i18n.t("ui.tool.todos.read"), - } case "question": return { icon: "bubble-5", @@ -358,7 +353,7 @@ function sessionLink(id: string | undefined, path: string, href?: (id: string) = } const CONTEXT_GROUP_TOOLS = new Set(["read", "glob", "grep", "list"]) -const HIDDEN_TOOLS = new Set(["todowrite", "todoread"]) +const HIDDEN_TOOLS = new Set(["todowrite"]) function list(value: T[] | undefined | null, fallback: T[]) { if (Array.isArray(value)) return value @@ -1230,7 +1225,7 @@ PART_MAPPING["tool"] = function ToolPartDisplay(props) { const data = useData() const i18n = useI18n() const part = () => props.part as ToolPart - if (part().tool === "todowrite" || part().tool === "todoread") return null + if (part().tool === "todowrite") return null const hideQuestion = createMemo( () => part().tool === "question" && (part().state.status === "pending" || part().state.status === "running"), diff --git a/packages/ui/src/components/session-turn.css b/packages/ui/src/components/session-turn.css index 26d918050d..c4a8726ac5 100644 --- a/packages/ui/src/components/session-turn.css +++ b/packages/ui/src/components/session-turn.css @@ -85,10 +85,6 @@ flex-direction: column; align-self: stretch; gap: 12px; - - > :first-child > [data-component="markdown"]:first-child { - margin-top: 0; - } } [data-slot="session-turn-diffs"] { @@ -230,3 +226,7 @@ display: none; } } + +[data-slot="session-turn-list"] { + gap: 48px; +} diff --git a/packages/ui/src/components/session-turn.tsx b/packages/ui/src/components/session-turn.tsx index 297fa275d4..0a0f7f736f 100644 --- a/packages/ui/src/components/session-turn.tsx +++ b/packages/ui/src/components/session-turn.tsx @@ -85,7 +85,7 @@ function list(value: T[] | undefined | null, fallback: T[]) { return fallback } -const hidden = new Set(["todowrite", "todoread"]) +const hidden = new Set(["todowrite"]) function partState(part: PartType, showReasoningSummaries: boolean) { if (part.type === "tool") { diff --git a/packages/ui/src/components/timeline-playground.stories.tsx b/packages/ui/src/components/timeline-playground.stories.tsx new file mode 100644 index 0000000000..cde9fe2acd --- /dev/null +++ b/packages/ui/src/components/timeline-playground.stories.tsx @@ -0,0 +1,1973 @@ +// @ts-nocheck +import { createSignal, createMemo, createEffect, on, For, Show, Index, batch } from "solid-js" +import { createStore, produce } from "solid-js/store" +import type { + Message, + UserMessage, + AssistantMessage, + Part, + TextPart, + ReasoningPart, + ToolPart, + CompactionPart, + FilePart, + AgentPart, +} from "@kilocode/sdk/v2" +import { DataProvider } from "../context/data" +import { FileComponentProvider } from "../context/file" +import { SessionTurn } from "./session-turn" + +// --------------------------------------------------------------------------- +// ID helpers +// --------------------------------------------------------------------------- +let seq = 0 +const uid = () => `pg-${++seq}-${Date.now().toString(36)}` + +// --------------------------------------------------------------------------- +// Lorem ipsum content +// --------------------------------------------------------------------------- +const LOREM = [ + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", + "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", + "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", + "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", + "Cras justo odio, dapibus ut facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper.", +] + +// --------------------------------------------------------------------------- +// User message variants +// --------------------------------------------------------------------------- +const USER_VARIANTS = { + short: { + label: "short", + text: "Fix the bug in the login form", + parts: [] as Part[], + }, + medium: { + label: "medium", + text: "Can you update the session timeline component to support lazy loading? The current implementation loads everything eagerly which causes jank on large sessions.", + parts: [] as Part[], + }, + long: { + label: "long", + text: `I need you to refactor the message rendering pipeline. Currently the timeline renders all messages synchronously which blocks first paint. Here's what I want: + +1. Implement virtual scrolling for the message list +2. Defer-mount older messages using requestAnimationFrame batching +3. Add content-visibility: auto to each turn container +4. Make sure the scroll-to-bottom behavior still works correctly after these changes + +Please also add appropriate CSS containment hints and make sure we don't break the sticky header behavior for the session title.`, + parts: [] as Part[], + }, + "with @file": { + label: "with @file", + text: "Update @src/components/session-turn.tsx to fix the spacing issue between parts", + parts: (() => { + const id = `static-file-${Date.now()}` + return [ + { + id, + type: "file", + mime: "text/plain", + filename: "session-turn.tsx", + url: "src/components/session-turn.tsx", + source: { + type: "file", + path: "src/components/session-turn.tsx", + text: { + value: "@src/components/session-turn.tsx", + start: 7, + end: 38, + }, + }, + } as FilePart, + ] + })(), + }, + "with @agent": { + label: "with @agent", + text: "Use @explore to find all CSS files related to the timeline, then fix the spacing", + parts: (() => { + return [ + { + id: `static-agent-${Date.now()}`, + type: "agent", + name: "explore", + source: { start: 4, end: 12 }, + } as AgentPart, + ] + })(), + }, + "with image": { + label: "with image", + text: "Here's a screenshot of the bug I'm seeing", + parts: (() => { + // 1x1 blue pixel PNG as data URI for a realistic attachment + const pixel = + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==" + return [ + { + id: `static-img-${Date.now()}`, + type: "file", + mime: "image/png", + filename: "screenshot.png", + url: pixel, + } as FilePart, + ] + })(), + }, + "with file attachment": { + label: "with file attachment", + text: "Check this config file for issues", + parts: (() => { + return [ + { + id: `static-attach-${Date.now()}`, + type: "file", + mime: "application/json", + filename: "tsconfig.json", + url: "data:application/json;base64,e30=", + } as FilePart, + ] + })(), + }, + "multi attachment": { + label: "multi attachment", + text: "Look at these files and the screenshot, then fix the layout", + parts: (() => { + const pixel = + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==" + return [ + { + id: `static-multi-img-${Date.now()}`, + type: "file", + mime: "image/png", + filename: "layout-bug.png", + url: pixel, + } as FilePart, + { + id: `static-multi-file-${Date.now()}`, + type: "file", + mime: "text/css", + filename: "session-turn.css", + url: "data:text/css;base64,LyogZW1wdHkgKi8=", + } as FilePart, + { + id: `static-multi-ref-${Date.now()}`, + type: "file", + mime: "text/plain", + filename: "session-turn.tsx", + url: "src/components/session-turn.tsx", + source: { + type: "file", + path: "src/components/session-turn.tsx", + text: { value: "@src/components/session-turn.tsx", start: 0, end: 0 }, + }, + } as FilePart, + ] + })(), + }, +} satisfies Record + +const MARKDOWN_SAMPLES = { + headings: `# Heading 1 +## Heading 2 +### Heading 3 +#### Heading 4 + +Some paragraph text after headings.`, + + lists: `Here's a list of changes: + +- First item with some explanation +- Second item that is a bit longer and wraps to the next line when the viewport is narrow +- Third item + - Nested item A + - Nested item B + +1. Numbered first +2. Numbered second +3. Numbered third`, + + code: `Here's an inline \`variable\` reference and a code block: + +\`\`\`typescript +export function sum(values: number[]) { + return values.reduce((total, value) => total + value, 0) +} + +export function average(values: number[]) { + if (values.length === 0) return 0 + return sum(values) / values.length +} +\`\`\` + +And some text after the code block.`, + + mixed: `## Implementation Plan + +I'll make the following changes: + +1. **Update the schema** - Add new fields to the database model +2. **Create the API endpoint** - Handle validation and persistence +3. **Add frontend components** - Build the form and display views + +Here's the key change: + +\`\`\`typescript +const table = sqliteTable("session", { + id: text().primaryKey(), + project_id: text().notNull(), + created_at: integer().notNull(), +}) +\`\`\` + +> Note: This is a breaking change that requires a migration. + +The migration will handle existing data by setting \`project_id\` to the default workspace. + +--- + +For more details, see the [documentation](https://example.com/docs).`, + + table: `## Comparison + +| Feature | Before | After | +|---------|--------|-------| +| Speed | 120ms | 45ms | +| Memory | 256MB | 128MB | +| Bundle | 1.2MB | 890KB | + +The improvements are significant across all metrics.`, + + blockquote: `## Summary + +> This is a blockquote that contains important information about the implementation approach. +> +> It spans multiple lines and contains **bold** and \`code\` elements. + +The approach above was chosen for its simplicity.`, + + links: `Check out these resources: + +- [SolidJS docs](https://solidjs.com) +- [TypeScript handbook](https://www.typescriptlang.org/docs/handbook) +- The API is at \`https://api.example.com/v2\` + +You can also visit https://example.com/docs for more info.`, + + images: `## Screenshot + +Here's what the output looks like: + +![Alt text](https://via.placeholder.com/400x200) + +And below is the final result.`, +} + +const REASONING_SAMPLES = [ + `**Analyzing the request** + +The user wants to add a new feature to the session timeline. I need to understand the existing component structure first. + +Let me look at the key files involved: +- \`session-turn.tsx\` handles individual turns +- \`message-part.tsx\` renders different part types +- The data flows through the \`DataProvider\` context`, + + `**Considering approaches** + +I could either modify the existing SessionTurn component or create a wrapper. The wrapper approach is cleaner because it doesn't touch the core rendering logic. + +The trade-off is that we'd need to pass additional props through, but that's acceptable for this use case.`, + + `**Planning the implementation** + +I'll need to: +1. Create the data generators +2. Wire up the context providers +3. Add CSS variable controls +4. Implement the export functionality + +This should be straightforward given the existing component architecture.`, +] + +const TOOL_SAMPLES = { + read: { + tool: "read", + input: { filePath: "src/components/session-turn.tsx", offset: 1, limit: 50 }, + output: "export function SessionTurn(props) {\n // component implementation\n return
...
\n}", + title: "Read src/components/session-turn.tsx", + metadata: {}, + }, + glob: { + tool: "glob", + input: { pattern: "**/*.tsx", path: "src/components" }, + output: "src/components/button.tsx\nsrc/components/card.tsx\nsrc/components/session-turn.tsx", + title: "Found 3 files", + metadata: {}, + }, + grep: { + tool: "grep", + input: { pattern: "SessionTurn", path: "src", include: "*.tsx" }, + output: "src/components/session-turn.tsx:141\nsrc/pages/session/timeline.tsx:987", + title: "Found 2 matches", + metadata: {}, + }, + bash: { + tool: "bash", + input: { command: "bun test --filter session", description: "Run session tests" }, + output: + "bun test v1.3.11\n\n✓ session-turn.test.tsx (3 tests) 45ms\n✓ message-part.test.tsx (7 tests) 120ms\n\nTest Suites: 2 passed, 2 total\nTests: 10 passed, 10 total\nTime: 0.89s", + title: "Run session tests", + metadata: { command: "bun test --filter session" }, + }, + edit: { + tool: "edit", + input: { + filePath: "src/components/session-turn.tsx", + oldString: "gap: 12px", + newString: "gap: 18px", + }, + output: "File edited successfully", + title: "Edit src/components/session-turn.tsx", + metadata: { + filediff: { + file: "src/components/session-turn.tsx", + before: " gap: 12px;\n display: flex;", + after: " gap: 18px;\n display: flex;", + additions: 1, + deletions: 1, + }, + }, + }, + write: { + tool: "write", + input: { + filePath: "src/utils/helpers.ts", + content: + "export function clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max)\n}\n", + }, + output: "File written successfully", + title: "Write src/utils/helpers.ts", + metadata: {}, + }, + task: { + tool: "task", + input: { description: "Explore components", subagent_type: "explore", prompt: "Find all session components" }, + output: "Found 12 session-related components across 3 directories.", + title: "Agent (Explore)", + metadata: { sessionId: "sub-session-1" }, + }, + webfetch: { + tool: "webfetch", + input: { url: "https://solidjs.com/docs/latest/api" }, + output: "# SolidJS API Reference\n\nCore primitives for building reactive applications...", + title: "Fetch https://solidjs.com/docs/latest/api", + metadata: {}, + }, + websearch: { + tool: "websearch", + input: { query: "SolidJS createStore performance" }, + output: + "https://solidjs.com/docs/latest/api#createstore\nhttps://dev.to/solidjs/understanding-solid-reactivity\nhttps://github.com/solidjs/solid/discussions/1234", + title: "Search: SolidJS createStore performance", + metadata: {}, + }, + question: { + tool: "question", + input: { + questions: [ + { + question: "Which approach do you prefer?", + header: "Approach", + options: [ + { label: "Wrapper component", description: "Create a new wrapper around SessionTurn" }, + { label: "Direct modification", description: "Modify SessionTurn directly" }, + ], + }, + ], + }, + output: "", + title: "Question", + metadata: { answers: [["Wrapper component"]] }, + }, + skill: { + tool: "skill", + input: { name: "playwriter" }, + output: "Skill loaded successfully", + title: "playwriter", + metadata: {}, + }, + todowrite: { + tool: "todowrite", + input: { + todos: [ + { content: "Create data generators", status: "completed", priority: "high" }, + { content: "Build UI controls", status: "in_progress", priority: "high" }, + { content: "Add CSS export", status: "pending", priority: "medium" }, + ], + }, + output: "", + title: "Todos", + metadata: { + todos: [ + { content: "Create data generators", status: "completed", priority: "high" }, + { content: "Build UI controls", status: "in_progress", priority: "high" }, + { content: "Add CSS export", status: "pending", priority: "medium" }, + ], + }, + }, +} + +// --------------------------------------------------------------------------- +// Fake data generators +// --------------------------------------------------------------------------- +const SESSION_ID = "playground-session" +const DEFAULT_SESSION = { id: SESSION_ID, title: "Timeline Playground" } + +function record(value: unknown): value is Record { + return !!value && typeof value === "object" && !Array.isArray(value) +} + +function normalize(raw: unknown) { + if (Array.isArray(raw)) { + const info = raw.find((row) => record(row) && row.type === "session" && record(row.data))?.data + if (!record(info) || typeof info.id !== "string") { + throw new Error("No session found in JSON") + } + + const part = new Map() + const messages = raw.flatMap((row) => { + if (!record(row) || !record(row.data)) return [] + if (row.type === "part" && typeof row.data.messageID === "string") { + const list = part.get(row.data.messageID) ?? [] + list.push(row.data as Part) + part.set(row.data.messageID, list) + return [] + } + if (row.type !== "message" || typeof row.data.id !== "string") return [] + return [{ info: row.data as Message, parts: [] as Part[] }] + }) + + return { + info, + messages: messages.map((msg) => ({ + info: msg.info, + parts: part.get(msg.info.id) ?? [], + })), + } + } + + if (!record(raw) || !record(raw.info) || typeof raw.info.id !== "string" || !Array.isArray(raw.messages)) { + throw new Error("Expected an `opencode export` JSON file") + } + + return { + info: raw.info, + messages: raw.messages.flatMap((row) => { + if (!record(row) || !record(row.info) || typeof row.info.id !== "string") return [] + return [{ info: row.info as Message, parts: Array.isArray(row.parts) ? (row.parts as Part[]) : [] }] + }), + } +} + +function mkUser(text: string, extra: Part[] = [], sessionID = SESSION_ID): { message: UserMessage; parts: Part[] } { + const id = uid() + return { + message: { + id, + sessionID, + role: "user", + time: { created: Date.now() }, + agent: "code", + model: { providerID: "anthropic", modelID: "claude-sonnet-4-20250514" }, + } as UserMessage, + parts: [ + { id: uid(), type: "text", text, time: { created: Date.now() } } as TextPart, + // Clone extra parts with fresh ids so each user message owns unique part instances + ...extra.map((p) => ({ ...p, id: uid() })), + ], + } +} + +function mkAssistant(parentID: string, sessionID = SESSION_ID): AssistantMessage { + return { + id: uid(), + sessionID, + role: "assistant", + time: { created: Date.now(), completed: Date.now() + 3000 }, + parentID, + modelID: "claude-sonnet-4-20250514", + providerID: "anthropic", + mode: "default", + agent: "code", + path: { cwd: "/project", root: "/project" }, + cost: 0.003, + tokens: { input: 1200, output: 800, reasoning: 200, cache: { read: 0, write: 0 } }, + } as AssistantMessage +} + +function textPart(text: string): TextPart { + return { id: uid(), type: "text", text, time: { created: Date.now() } } as TextPart +} + +function reasoningPart(text: string): ReasoningPart { + return { id: uid(), type: "reasoning", text, time: { start: Date.now(), end: Date.now() + 500 } } as ReasoningPart +} + +function toolPart(sample: (typeof TOOL_SAMPLES)[keyof typeof TOOL_SAMPLES], status = "completed"): ToolPart { + const base = { + id: uid(), + type: "tool" as const, + callID: uid(), + tool: sample.tool, + } + if (status === "completed") { + return { + ...base, + state: { + status: "completed", + input: sample.input, + output: sample.output, + title: sample.title, + metadata: sample.metadata ?? {}, + time: { start: Date.now(), end: Date.now() + 1000 }, + }, + } as ToolPart + } + if (status === "running") { + return { + ...base, + state: { + status: "running", + input: sample.input, + title: sample.title, + metadata: sample.metadata ?? {}, + time: { start: Date.now() }, + }, + } as ToolPart + } + return { + ...base, + state: { status: "pending", input: sample.input, raw: "" }, + } as ToolPart +} + +function compactionPart(): CompactionPart { + return { id: uid(), type: "compaction", auto: true } as CompactionPart +} + +// --------------------------------------------------------------------------- +// CSS Controls definition +// --------------------------------------------------------------------------- + +// Source file basenames inside packages/ui/src/components/ +const MD = "markdown.css" +const MP = "message-part.css" +const ST = "session-turn.css" + +/** + * Source mapping for a CSS control. + * - `anchor`: immutable text near the property (comment, selector, etc.) that + * won't change when values change — used to locate the right rule block. + * - `prop`: the CSS property name whose value gets replaced. + * - `format`: turns the slider number into a CSS value string. + */ +type CSSSource = { + file: string + anchor: string + prop: string + format: (v: string) => string +} + +type CSSControl = { + key: string + label: string + group: string + type: "range" | "color" | "select" + initial: string + selector: string + property: string + min?: string + max?: string + step?: string + options?: string[] + unit?: string + source?: CSSSource +} + +const px = (v: string) => `${v}px` +const pxZero = (v: string) => `${v}px 0` +const pct = (v: string) => `${v}%` + +const CSS_CONTROLS: CSSControl[] = [ + // --- Timeline spacing --- + { + key: "turn-gap", + label: "Turn gap", + group: "Timeline Spacing", + type: "range", + initial: "48", + selector: '[data-slot="session-turn-list"]', + property: "gap", + min: "0", + max: "80", + step: "1", + unit: "px", + source: { file: ST, anchor: '[data-slot="session-turn-list"]', prop: "gap", format: px }, + }, + { + key: "container-gap", + label: "Container gap", + group: "Timeline Spacing", + type: "range", + initial: "18", + selector: '[data-slot="session-turn-message-container"]', + property: "gap", + min: "0", + max: "60", + step: "1", + unit: "px", + source: { file: ST, anchor: '[data-slot="session-turn-message-container"]', prop: "gap", format: px }, + }, + { + key: "assistant-gap", + label: "Assistant parts gap", + group: "Timeline Spacing", + type: "range", + initial: "12", + selector: '[data-slot="session-turn-assistant-content"]', + property: "gap", + min: "0", + max: "40", + step: "1", + unit: "px", + source: { file: ST, anchor: '[data-slot="session-turn-assistant-content"]', prop: "gap", format: px }, + }, + { + key: "text-part-margin", + label: "Text part margin-top", + group: "Timeline Spacing", + type: "range", + initial: "24", + selector: '[data-component="text-part"]', + property: "margin-top", + min: "0", + max: "60", + step: "1", + unit: "px", + source: { file: MP, anchor: '[data-component="text-part"]', prop: "margin-top", format: px }, + }, + + // --- Markdown typography --- + { + key: "md-font-size", + label: "Font size", + group: "Markdown Typography", + type: "range", + initial: "14", + selector: '[data-component="markdown"]', + property: "font-size", + min: "10", + max: "22", + step: "1", + unit: "px", + source: { file: MD, anchor: "/* Reset & Base Typography */", prop: "font-size", format: px }, + }, + { + key: "md-line-height", + label: "Line height", + group: "Markdown Typography", + type: "range", + initial: "180", + selector: '[data-component="markdown"]', + property: "line-height", + min: "100", + max: "300", + step: "5", + unit: "%", + source: { file: MD, anchor: "/* Reset & Base Typography */", prop: "line-height", format: pct }, + }, + + // --- Markdown headings --- + { + key: "md-heading-margin-top", + label: "Heading margin-top", + group: "Markdown Headings", + type: "range", + initial: "32", + selector: '[data-component="markdown"] :is(h1,h2,h3,h4,h5,h6)', + property: "margin-top", + min: "0", + max: "60", + step: "1", + unit: "px", + source: { file: MD, anchor: "/* Headings:", prop: "margin-top", format: px }, + }, + { + key: "md-heading-margin-bottom", + label: "Heading margin-bottom", + group: "Markdown Headings", + type: "range", + initial: "12", + selector: '[data-component="markdown"] :is(h1,h2,h3,h4,h5,h6)', + property: "margin-bottom", + min: "0", + max: "40", + step: "1", + unit: "px", + source: { file: MD, anchor: "/* Headings:", prop: "margin-bottom", format: px }, + }, + { + key: "md-heading-font-size", + label: "Heading font size", + group: "Markdown Headings", + type: "range", + initial: "14", + selector: '[data-component="markdown"] :is(h1,h2,h3,h4,h5,h6)', + property: "font-size", + min: "12", + max: "28", + step: "1", + unit: "px", + source: { file: MD, anchor: "/* Headings:", prop: "font-size", format: px }, + }, + + // --- Markdown paragraphs --- + { + key: "md-p-margin-bottom", + label: "Paragraph margin-bottom", + group: "Markdown Paragraphs", + type: "range", + initial: "16", + selector: '[data-component="markdown"] p', + property: "margin-bottom", + min: "0", + max: "40", + step: "1", + unit: "px", + source: { file: MD, anchor: "/* Paragraphs */", prop: "margin-bottom", format: px }, + }, + + // --- Markdown lists --- + { + key: "md-list-margin-top", + label: "List margin-top", + group: "Markdown Lists", + type: "range", + initial: "8", + selector: '[data-component="markdown"] :is(ul,ol)', + property: "margin-top", + min: "0", + max: "40", + step: "1", + unit: "px", + source: { file: MD, anchor: "/* Lists */", prop: "margin-top", format: px }, + }, + { + key: "md-list-margin-bottom", + label: "List margin-bottom", + group: "Markdown Lists", + type: "range", + initial: "16", + selector: '[data-component="markdown"] :is(ul,ol)', + property: "margin-bottom", + min: "0", + max: "40", + step: "1", + unit: "px", + source: { file: MD, anchor: "/* Lists */", prop: "margin-bottom", format: px }, + }, + { + key: "md-list-padding-left", + label: "List padding-left", + group: "Markdown Lists", + type: "range", + initial: "24", + selector: '[data-component="markdown"] :is(ul,ol)', + property: "padding-left", + min: "0", + max: "60", + step: "1", + unit: "px", + source: { file: MD, anchor: "/* Lists */", prop: "padding-left", format: px }, + }, + { + key: "md-li-margin-bottom", + label: "List item margin-bottom", + group: "Markdown Lists", + type: "range", + initial: "8", + selector: '[data-component="markdown"] li', + property: "margin-bottom", + min: "0", + max: "20", + step: "1", + unit: "px", + // Anchor on `li {` to skip the `ul,ol` margin-bottom above + source: { file: MD, anchor: "\n li {", prop: "margin-bottom", format: px }, + }, + + // --- Markdown code blocks --- + { + key: "md-pre-margin-top", + label: "Code block margin-top", + group: "Markdown Code", + type: "range", + initial: "32", + selector: '[data-component="markdown"] pre', + property: "margin-top", + min: "0", + max: "60", + step: "1", + unit: "px", + source: { file: MD, anchor: "\n pre {", prop: "margin-top", format: px }, + }, + { + key: "md-pre-margin-bottom", + label: "Code block margin-bottom", + group: "Markdown Code", + type: "range", + initial: "32", + selector: '[data-component="markdown"] pre', + property: "margin-bottom", + min: "0", + max: "60", + step: "1", + unit: "px", + source: { file: MD, anchor: "\n pre {", prop: "margin-bottom", format: px }, + }, + { + key: "md-shiki-font-size", + label: "Code font size", + group: "Markdown Code", + type: "range", + initial: "13", + selector: '[data-component="markdown"] .shiki', + property: "font-size", + min: "10", + max: "20", + step: "1", + unit: "px", + source: { file: MD, anchor: ".shiki {", prop: "font-size", format: px }, + }, + { + key: "md-shiki-padding", + label: "Code padding", + group: "Markdown Code", + type: "range", + initial: "12", + selector: '[data-component="markdown"] .shiki', + property: "padding", + min: "0", + max: "32", + step: "1", + unit: "px", + source: { file: MD, anchor: ".shiki {", prop: "padding", format: px }, + }, + { + key: "md-shiki-radius", + label: "Code border-radius", + group: "Markdown Code", + type: "range", + initial: "6", + selector: '[data-component="markdown"] .shiki', + property: "border-radius", + min: "0", + max: "16", + step: "1", + unit: "px", + source: { file: MD, anchor: ".shiki {", prop: "border-radius", format: px }, + }, + + // --- Markdown blockquotes --- + { + key: "md-blockquote-margin", + label: "Blockquote margin", + group: "Markdown Blockquotes", + type: "range", + initial: "24", + selector: '[data-component="markdown"] blockquote', + property: "margin-block", + min: "0", + max: "60", + step: "1", + unit: "px", + source: { file: MD, anchor: "/* Blockquotes */", prop: "margin", format: pxZero }, + }, + { + key: "md-blockquote-padding-left", + label: "Blockquote padding-left", + group: "Markdown Blockquotes", + type: "range", + initial: "8", + selector: '[data-component="markdown"] blockquote', + property: "padding-left", + min: "0", + max: "40", + step: "1", + unit: "px", + source: { file: MD, anchor: "/* Blockquotes */", prop: "padding-left", format: px }, + }, + { + key: "md-blockquote-border-width", + label: "Blockquote border width", + group: "Markdown Blockquotes", + type: "range", + initial: "2", + selector: '[data-component="markdown"] blockquote', + property: "border-left-width", + min: "0", + max: "8", + step: "1", + unit: "px", + source: { + file: MD, + anchor: "/* Blockquotes */", + prop: "border-left", + format: (v) => `${v}px solid var(--border-weak-base)`, + }, + }, + + // --- Markdown tables --- + { + key: "md-table-margin", + label: "Table margin", + group: "Markdown Tables", + type: "range", + initial: "24", + selector: '[data-component="markdown"] table', + property: "margin-block", + min: "0", + max: "60", + step: "1", + unit: "px", + source: { file: MD, anchor: "/* Tables */", prop: "margin", format: pxZero }, + }, + { + key: "md-td-padding", + label: "Cell padding", + group: "Markdown Tables", + type: "range", + initial: "12", + selector: '[data-component="markdown"] :is(th,td)', + property: "padding", + min: "0", + max: "24", + step: "1", + unit: "px", + // Anchor on td selector to skip other padding rules + source: { file: MD, anchor: "th,\n td {", prop: "padding", format: px }, + }, + + // --- Markdown HR --- + { + key: "md-hr-margin", + label: "HR margin", + group: "Markdown HR", + type: "range", + initial: "40", + selector: '[data-component="markdown"] hr', + property: "margin-block", + min: "0", + max: "80", + step: "1", + unit: "px", + source: { file: MD, anchor: "/* Horizontal Rule", prop: "margin", format: pxZero }, + }, + + // --- Reasoning part --- + { + key: "reasoning-md-font-size", + label: "Reasoning font size", + group: "Reasoning Part", + type: "range", + initial: "14", + selector: '[data-component="reasoning-part"] [data-component="markdown"]', + property: "font-size", + min: "10", + max: "22", + step: "1", + unit: "px", + source: { file: MP, anchor: '[data-component="reasoning-part"]', prop: "font-size", format: px }, + }, + { + key: "reasoning-md-margin-top", + label: "Reasoning markdown margin-top", + group: "Reasoning Part", + type: "range", + initial: "24", + selector: '[data-component="reasoning-part"] [data-component="markdown"]', + property: "margin-top", + min: "0", + max: "60", + step: "1", + unit: "px", + source: { file: MP, anchor: '[data-component="reasoning-part"]', prop: "margin-top", format: px }, + }, + + // --- User message --- + { + key: "user-msg-padding", + label: "User bubble padding", + group: "User Message", + type: "range", + initial: "12", + selector: '[data-slot="user-message-text"]', + property: "padding", + min: "0", + max: "32", + step: "1", + unit: "px", + source: { file: MP, anchor: '[data-slot="user-message-text"]', prop: "padding", format: px }, + }, + { + key: "user-msg-radius", + label: "User bubble border-radius", + group: "User Message", + type: "range", + initial: "6", + selector: '[data-slot="user-message-text"]', + property: "border-radius", + min: "0", + max: "24", + step: "1", + unit: "px", + source: { file: MP, anchor: '[data-slot="user-message-text"]', prop: "border-radius", format: px }, + }, + + // --- Tool parts --- + { + key: "bash-max-height", + label: "Shell output max-height", + group: "Tool Parts", + type: "range", + initial: "240", + selector: '[data-slot="bash-scroll"]', + property: "max-height", + min: "100", + max: "600", + step: "10", + unit: "px", + source: { file: MP, anchor: '[data-slot="bash-scroll"]', prop: "max-height", format: px }, + }, +] + +// --------------------------------------------------------------------------- +// Playground component +// --------------------------------------------------------------------------- +function FileStub() { + return
File viewer stub
+} + +function Playground() { + // ---- Messages & parts state ---- + const [state, setState] = createStore<{ + messages: Message[] + parts: Record + }>({ + messages: [], + parts: {}, + }) + const [session, setSession] = createSignal({ ...DEFAULT_SESSION }) + const [loaded, setLoaded] = createSignal("") + const [issue, setIssue] = createSignal("") + + // ---- CSS overrides ---- + const [css, setCss] = createStore>({}) + const [defaults, setDefaults] = createStore>({}) + let styleEl: HTMLStyleElement | undefined + let previewRef: HTMLDivElement | undefined + let pick: HTMLInputElement | undefined + + const sample = (ctrl: CSSControl) => { + if (!ctrl.group.startsWith("Markdown")) return ctrl.selector + return ctrl.selector.replace( + '[data-component="markdown"]', + '[data-component="text-part"] [data-component="markdown"]', + ) + } + + /** Read computed styles from the DOM to seed slider defaults */ + const readDefaults = () => { + const root = previewRef + if (!root) return + const next: Record = {} + for (const ctrl of CSS_CONTROLS) { + const el = (root.querySelector(sample(ctrl)) ?? root.querySelector(ctrl.selector)) as HTMLElement | null + if (!el) continue + const styles = getComputedStyle(el) + // Use bracket access — getPropertyValue doesn't resolve shorthands + const raw = (styles as any)[ctrl.property] as string + if (!raw) continue + // Shorthands may return "24px 0px" — take the first value + const num = parseFloat(raw.split(" ")[0]) + if (!Number.isFinite(num)) continue + // line-height returns px — convert back to % relative to font-size + if (ctrl.unit === "%") { + const fs = parseFloat(styles.fontSize) + if (fs > 0) { + next[ctrl.key] = String(Math.round((num / fs) * 100)) + continue + } + } + next[ctrl.key] = String(Math.round(num)) + } + setDefaults(next) + } + + const updateStyle = () => { + const rules: string[] = [] + for (const ctrl of CSS_CONTROLS) { + const val = css[ctrl.key] + if (val === undefined) continue + const value = ctrl.unit ? `${val}${ctrl.unit}` : val + rules.push(`${ctrl.selector} { ${ctrl.property}: ${value} !important; }`) + } + if (styleEl) styleEl.textContent = rules.join("\n") + } + + const setCssValue = (key: string, value: string) => { + setCss(key, value) + updateStyle() + } + + const resetCss = () => { + batch(() => { + for (const ctrl of CSS_CONTROLS) { + setCss(ctrl.key, undefined as any) + } + }) + if (styleEl) styleEl.textContent = "" + } + + // ---- Derived ---- + const userMessages = createMemo(() => state.messages.filter((m): m is UserMessage => m.role === "user")) + + const data = createMemo(() => ({ + session: [session()], + session_status: {}, + session_diff: {}, + message: { [session().id]: state.messages }, + part: state.parts, + provider: { + all: [{ id: "anthropic", models: { "claude-sonnet-4-20250514": { name: "Claude Sonnet" } } }], + }, + })) + + // Read computed defaults once DOM has turn elements to query + createEffect( + on( + () => userMessages().length, + (len) => { + if (len === 0) return + // Wait a frame for the DOM to settle after render + requestAnimationFrame(readDefaults) + }, + ), + ) + + // ---- Find or create the last assistant message to append parts to ---- + const lastAssistantID = createMemo(() => { + for (let i = state.messages.length - 1; i >= 0; i--) { + if (state.messages[i].role === "assistant") return state.messages[i].id + } + return undefined + }) + + /** Ensure a turn (user + assistant) exists and return the assistant message id */ + const ensureTurn = (): string => { + const id = lastAssistantID() + if (id) return id + // Create a minimal placeholder turn + const user = mkUser("...", [], session().id) + const asst = mkAssistant(user.message.id, session().id) + setState( + produce((draft) => { + draft.messages.push(user.message) + draft.messages.push(asst) + draft.parts[user.message.id] = user.parts + draft.parts[asst.id] = [] + }), + ) + return asst.id + } + + /** Append parts to the last assistant message */ + const appendParts = (parts: Part[]) => { + const id = ensureTurn() + setState( + produce((draft) => { + const existing = draft.parts[id] ?? [] + draft.parts[id] = [...existing, ...parts] + }), + ) + } + + // ---- User message helpers ---- + const addUser = (variant: keyof typeof USER_VARIANTS) => { + const v = USER_VARIANTS[variant] + const user = mkUser(v.text, v.parts, session().id) + const asst = mkAssistant(user.message.id, session().id) + setState( + produce((draft) => { + draft.messages.push(user.message) + draft.messages.push(asst) + draft.parts[user.message.id] = user.parts + draft.parts[asst.id] = [] + }), + ) + } + + // ---- Part helpers (append to last turn) ---- + const addText = (variant: keyof typeof MARKDOWN_SAMPLES) => { + appendParts([textPart(MARKDOWN_SAMPLES[variant])]) + } + + const addReasoning = () => { + const idx = Math.floor(Math.random() * REASONING_SAMPLES.length) + appendParts([reasoningPart(REASONING_SAMPLES[idx])]) + } + + const addTool = (name: keyof typeof TOOL_SAMPLES) => { + appendParts([toolPart(TOOL_SAMPLES[name])]) + } + + // ---- Composite helpers (create full turns with user + assistant) ---- + const addFullTurn = (userText: string, parts: Part[]) => { + const user = mkUser(userText, [], session().id) + const asst = mkAssistant(user.message.id, session().id) + setState( + produce((draft) => { + draft.messages.push(user.message) + draft.messages.push(asst) + draft.parts[user.message.id] = user.parts + draft.parts[asst.id] = parts + }), + ) + } + + const addContextGroupTurn = () => { + addFullTurn("Read some files", [ + toolPart(TOOL_SAMPLES.read), + toolPart(TOOL_SAMPLES.glob), + toolPart(TOOL_SAMPLES.grep), + textPart("After gathering context, here's what I found:\n\n" + LOREM[2]), + ]) + } + + const addReasoningFullTurn = () => { + addFullTurn("Make the changes described above", [ + reasoningPart(REASONING_SAMPLES[0]), + toolPart(TOOL_SAMPLES.read), + toolPart(TOOL_SAMPLES.glob), + toolPart(TOOL_SAMPLES.grep), + toolPart(TOOL_SAMPLES.edit), + toolPart(TOOL_SAMPLES.bash), + textPart(MARKDOWN_SAMPLES.mixed), + ]) + } + + const addKitchenSink = () => { + // User message variants + addUser("short") + appendParts([textPart(MARKDOWN_SAMPLES.headings)]) + addUser("medium") + appendParts([textPart(MARKDOWN_SAMPLES.lists)]) + addUser("long") + appendParts([textPart(MARKDOWN_SAMPLES.code)]) + addUser("with @file") + appendParts([textPart(MARKDOWN_SAMPLES.mixed)]) + addUser("with image") + appendParts([reasoningPart(REASONING_SAMPLES[0]), textPart(MARKDOWN_SAMPLES.table)]) + addUser("multi attachment") + appendParts([ + toolPart(TOOL_SAMPLES.read), + toolPart(TOOL_SAMPLES.glob), + toolPart(TOOL_SAMPLES.grep), + toolPart(TOOL_SAMPLES.edit), + toolPart(TOOL_SAMPLES.bash), + textPart(MARKDOWN_SAMPLES.blockquote), + ]) + addContextGroupTurn() + addReasoningFullTurn() + } + + const interrupt = () => { + const user = userMessages().at(-1) + if (!user) return + const now = Date.now() + + setState( + produce((draft) => { + const msg = draft.messages.findLast( + (item): item is AssistantMessage => item.role === "assistant" && item.parentID === user.id, + ) + + if (msg) { + const time = msg.time ?? { created: now } + msg.time = { ...time, completed: time.completed ?? now } + msg.error = { name: "MessageAbortedError", message: "Interrupted" } + return + } + + const asst = mkAssistant(user.id, session().id) + asst.time = { created: now, completed: now } + asst.error = { name: "MessageAbortedError", message: "Interrupted" } + draft.messages.push(asst) + draft.parts[asst.id] = [] + }), + ) + } + + const load = (raw: unknown, name: string) => { + const next = normalize(raw) + const id = typeof next.info.id === "string" && next.info.id ? next.info.id : SESSION_ID + const messages = next.messages.map((msg) => ({ + ...msg.info, + sessionID: typeof msg.info.sessionID === "string" ? msg.info.sessionID : id, + })) + const parts = Object.fromEntries( + next.messages.map((msg, idx) => { + const info = messages[idx] + return [ + info.id, + msg.parts.map((part) => ({ + ...part, + messageID: typeof part.messageID === "string" ? part.messageID : info.id, + sessionID: typeof part.sessionID === "string" ? part.sessionID : info.sessionID, + })), + ] + }), + ) + + batch(() => { + setSession({ + ...DEFAULT_SESSION, + ...next.info, + id, + title: typeof next.info.title === "string" && next.info.title ? next.info.title : name, + }) + setState({ messages, parts }) + setLoaded(name) + setIssue("") + }) + } + + const importFile = async (event: Event) => { + const input = event.currentTarget as HTMLInputElement + const file = input.files?.[0] + if (!file) return + + setIssue("") + + try { + load(JSON.parse(await file.text()), file.name) + } catch (err) { + setIssue(err instanceof Error ? err.message : String(err)) + } finally { + input.value = "" + } + } + + const clearAll = () => { + batch(() => { + setState({ messages: [], parts: {} }) + setSession({ ...DEFAULT_SESSION }) + setLoaded("") + setIssue("") + seq = 0 + }) + } + + // ---- CSS export ---- + const exportCss = () => { + const lines: string[] = ["/* Timeline Playground CSS Overrides */", ""] + const groups = new Map() + + for (const ctrl of CSS_CONTROLS) { + const val = css[ctrl.key] + if (val === undefined) continue + const value = ctrl.unit ? `${val}${ctrl.unit}` : val + const group = ctrl.group + if (!groups.has(group)) groups.set(group, []) + groups.get(group)!.push(`/* ${ctrl.label}: ${value} */`) + groups.get(group)!.push(`${ctrl.selector} { ${ctrl.property}: ${value}; }`) + } + + if (groups.size === 0) { + lines.push("/* No overrides applied */") + } else { + for (const [group, rules] of groups) { + lines.push(`/* --- ${group} --- */`) + lines.push(...rules) + lines.push("") + } + } + + const text = lines.join("\n") + navigator.clipboard.writeText(text).catch(() => {}) + return text + } + + const [exported, setExported] = createSignal("") + + // ---- Apply to source files ---- + const [applying, setApplying] = createSignal(false) + const [applyResult, setApplyResult] = createSignal("") + + const changedControls = createMemo(() => CSS_CONTROLS.filter((ctrl) => css[ctrl.key] !== undefined && ctrl.source)) + + const applyToSource = async () => { + const controls = changedControls() + if (controls.length === 0) return + + setApplying(true) + setApplyResult("") + + const edits = controls.map((ctrl) => { + const src = ctrl.source! + return { file: src.file, anchor: src.anchor, prop: src.prop, value: src.format(css[ctrl.key]!) } + }) + + try { + const resp = await fetch("/__playground/apply-css", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ edits }), + }) + const data = await resp.json() + const ok = data.results?.filter((r: any) => r.ok).length ?? 0 + const fail = data.results?.filter((r: any) => !r.ok) ?? [] + const lines = [`Applied ${ok}/${edits.length} edits`] + for (const f of fail) { + lines.push(` FAIL ${f.file} ${f.prop}: ${f.error}`) + } + setApplyResult(lines.join("\n")) + + if (ok === edits.length) { + batch(() => { + for (const ctrl of controls) { + setDefaults(ctrl.key, css[ctrl.key]!) + setCss(ctrl.key, undefined as any) + } + }) + updateStyle() + // Wait for Vite HMR then re-read computed defaults + setTimeout(readDefaults, 500) + } + } catch (err) { + setApplyResult(`Error: ${err}`) + } finally { + setApplying(false) + } + } + + // ---- Panel collapse state ---- + const [panels, setPanels] = createStore({ + generators: true, + css: true, + export: false, + }) + + // ---- Group collapse state for CSS ---- + const [collapsed, setCollapsed] = createStore>({}) + const groups = createMemo(() => { + const result = new Map() + for (const ctrl of CSS_CONTROLS) { + if (!result.has(ctrl.group)) result.set(ctrl.group, []) + result.get(ctrl.group)!.push(ctrl) + } + return result + }) + + // ---- Shared button styles ---- + const sectionLabel = { + "font-size": "11px", + color: "var(--text-weak)", + "margin-bottom": "4px", + "text-transform": "uppercase", + "letter-spacing": "0.5px", + } as const + const btnStyle = { + padding: "4px 8px", + "border-radius": "4px", + border: "1px solid var(--border-weak-base)", + background: "var(--surface-base)", + cursor: "pointer", + "font-size": "12px", + color: "var(--text-base)", + } as const + const btnAccent = { + ...btnStyle, + border: "1px solid var(--border-interactive-base)", + background: "var(--surface-interactive-weak)", + "font-weight": "500", + color: "var(--text-interactive-base)", + } as const + const btnDanger = { + ...btnStyle, + border: "1px solid var(--border-critical-base)", + background: "transparent", + color: "var(--text-on-critical-base)", + } as const + + return ( +
+ {/* Inject dynamic style element */} +