("catalog.json", options),
}
})
diff --git a/packages/sdk/src/types.ts b/packages/sdk/src/types.ts
index 92999e2dea7..250551d5e7a 100644
--- a/packages/sdk/src/types.ts
+++ b/packages/sdk/src/types.ts
@@ -80,6 +80,9 @@ export interface ModelCost extends Cost {
/** Input/output data types a model supports. */
export type Modality = "text" | "audio" | "image" | "video" | "pdf"
+/** A model's specialized behavioral contract. Omitted for standard generative models. */
+export type ModelType = "decision"
+
export interface Modalities {
input: Modality[]
output: Modality[]
@@ -143,6 +146,7 @@ export interface BenchmarkResult {
export interface ModelMetadata {
/** Canonical model ID, e.g. "anthropic/claude-opus-4-6". */
id: string
+ type?: ModelType
name: string
description: string
family?: ModelFamily
@@ -208,6 +212,7 @@ export interface ModelProviderConfig {
export interface Model {
/** Provider-scoped model ID, e.g. "claude-opus-4-6". */
id: string
+ type?: ModelType
name: string
description: string
family?: ModelFamily
diff --git a/packages/sdk/test/client.test.ts b/packages/sdk/test/client.test.ts
index 3f898ef9157..61bc8fda104 100644
--- a/packages/sdk/test/client.test.ts
+++ b/packages/sdk/test/client.test.ts
@@ -40,6 +40,17 @@ test("models() and catalog() hit their endpoints", async () => {
expect(calls.map((call) => call.url.href)).toEqual(["https://models.dev/models.json", "https://models.dev/catalog.json"])
})
+test("catalog endpoints encode model type filters", async () => {
+ const { calls, fetch } = stub({})
+ const client = Models.make({ fetch })
+ await client.providers({ modelTypes: ["decision"] })
+ await client.models({ modelTypes: "all" })
+ expect(calls.map((call) => call.url.href)).toEqual([
+ "https://models.dev/api.json?type=decision",
+ "https://models.dev/models.json?type=all",
+ ])
+})
+
test("baseUrl with subpath is preserved, with or without trailing slash", async () => {
const { calls, fetch } = stub({})
await Models.make({ fetch, baseUrl: "https://example.com/mirror" }).providers()
diff --git a/packages/sdk/test/effect.test.ts b/packages/sdk/test/effect.test.ts
index 943acedbeb7..025e4a190e3 100644
--- a/packages/sdk/test/effect.test.ts
+++ b/packages/sdk/test/effect.test.ts
@@ -42,6 +42,20 @@ test("models() and catalog() hit their endpoints, baseUrl subpath preserved", as
])
})
+test("catalog endpoints encode model type filters", async () => {
+ const { requests, layer } = stub({})
+ const program = Effect.gen(function* () {
+ const client = yield* Models.make()
+ yield* client.providers({ modelTypes: ["decision"] })
+ yield* client.catalog({ modelTypes: "all" })
+ })
+ await program.pipe(Effect.provide(layer), Effect.runPromise)
+ expect(requests.map((request) => request.url)).toEqual([
+ "https://models.dev/api.json?type=decision",
+ "https://models.dev/catalog.json?type=all",
+ ])
+})
+
test("custom headers are sent", async () => {
const { requests, layer } = stub({})
const program = Effect.gen(function* () {
diff --git a/packages/web/script/build.ts b/packages/web/script/build.ts
index f387bccd848..8866aa8e435 100755
--- a/packages/web/script/build.ts
+++ b/packages/web/script/build.ts
@@ -1,6 +1,11 @@
#!/usr/bin/env bun
import { RenderedPages, Providers, Models, renderDocument } from "../src/render";
+import {
+ filterCatalogByModelType,
+ MODEL_TYPES,
+ type ModelTypeFilter,
+} from "@models.dev/core";
import fs from "fs/promises";
import path from "path";
@@ -74,15 +79,18 @@ for (const [route, rendered] of RenderedPages) {
await Bun.write(filePath, renderDocument(template, rendered));
}
-await Bun.write("./dist/api.json", JSON.stringify(Providers));
-await Bun.write(
- "./dist/catalog.json",
- JSON.stringify({ models: Models, providers: Providers }),
-);
-await Bun.write("./dist/models.json", JSON.stringify(Models));
-
-await fs.rename("./dist/api.json", "./dist/_api.json");
-await fs.rename("./dist/catalog.json", "./dist/_catalog.json");
-await fs.rename("./dist/models.json", "./dist/_models.json");
+const catalog = { models: Models, providers: Providers };
+const variants: Array<[suffix: string, filter: ModelTypeFilter]> = [
+ ["", "default"],
+ ["-all", "all"],
+ ...MODEL_TYPES.map((type) => [`-${type}`, [type]] as const),
+];
+
+for (const [suffix, filter] of variants) {
+ const filtered = filterCatalogByModelType(catalog, filter);
+ await Bun.write(`./dist/_api${suffix}.json`, JSON.stringify(filtered.providers));
+ await Bun.write(`./dist/_models${suffix}.json`, JSON.stringify(filtered.models));
+ await Bun.write(`./dist/_catalog${suffix}.json`, JSON.stringify(filtered));
+}
await fs.rm("./dist/index.html", { force: true });
diff --git a/packages/web/src/render.tsx b/packages/web/src/render.tsx
index 93c73c6e66e..34632f57b1b 100644
--- a/packages/web/src/render.tsx
+++ b/packages/web/src/render.tsx
@@ -1497,21 +1497,22 @@ function HelpDialog() {
API
You can access provider data, provider-agnostic model metadata, or the
- combined catalog through JSON endpoints.
+ combined catalog through JSON endpoints. Specialized model types are
+ omitted by default; the site includes all model types.
Logos
diff --git a/packages/web/src/server.ts b/packages/web/src/server.ts
index 5adb9e9fc60..f43e6ce830a 100644
--- a/packages/web/src/server.ts
+++ b/packages/web/src/server.ts
@@ -1,5 +1,12 @@
import Index from "../index.html";
import { getRenderedPage, Models, Providers, renderDocument } from "./render";
+import {
+ filterCatalogByModelType,
+ filterModelsByModelType,
+ filterProvidersByModelType,
+ InvalidModelTypeError,
+ parseModelTypes,
+} from "@models.dev/core";
import path from "path";
const assetPort = Number(Bun.env.ASSET_PORT ?? 16000);
@@ -99,30 +106,37 @@ Bun.serve({
},
});
},
- "/api.json": () =>
- Response.json(Providers, {
- headers: {
- "Cache-Control": "public, max-age=3600",
- },
- }),
- "/models.json": () =>
- Response.json(Models, {
- headers: {
- "Cache-Control": "public, max-age=3600",
- },
- }),
- "/catalog.json": () =>
- Response.json(
- { models: Models, providers: Providers },
- {
- headers: {
- "Cache-Control": "public, max-age=3600",
- },
- },
- ),
+ "/api.json": (req) => catalogResponse(req, "api"),
+ "/models.json": (req) => catalogResponse(req, "models"),
+ "/catalog.json": (req) => catalogResponse(req, "catalog"),
},
});
+function catalogResponse(req: Request, endpoint: "api" | "models" | "catalog") {
+ let filter;
+ try {
+ filter = parseModelTypes(new URL(req.url).searchParams.get("type"));
+ } catch (error) {
+ if (!(error instanceof InvalidModelTypeError)) throw error;
+ return Response.json({ error: error.message }, { status: 400 });
+ }
+
+ const value = endpoint === "api"
+ ? filterProvidersByModelType(Providers, filter)
+ : endpoint === "models"
+ ? filterModelsByModelType(Models, filter)
+ : filterCatalogByModelType(
+ { models: Models, providers: Providers },
+ filter,
+ );
+
+ return Response.json(value, {
+ headers: {
+ "Cache-Control": "public, max-age=3600",
+ },
+ });
+}
+
const server = Bun.serve({
development: true,
hostname: "0.0.0.0",
diff --git a/providers/302ai/models/MiniMax-M2.1.toml b/providers/302ai/models/MiniMax-M2.1.toml
index 3c1fe4d34b9..bce1128bdc8 100644
--- a/providers/302ai/models/MiniMax-M2.1.toml
+++ b/providers/302ai/models/MiniMax-M2.1.toml
@@ -1,21 +1,7 @@
-name = "MiniMax-M2.1"
-description = "MiniMax model for chat, coding, office work, and agentic tasks"
-release_date = "2025-12-19"
-last_updated = "2025-12-19"
-attachment = false
-reasoning = false
-temperature = true
-tool_call = true
-open_weights = false
+# 302.AI API reports context_length = 204,800 for MiniMax-M2.1 (reconciled from prior 1M override)
+base_model = "minimax/MiniMax-M2.1"
+reasoning_options = []
[cost]
-input = 0.300
-output = 1.200
-
-[limit]
-context = 1_000_000
-output = 131_072
-
-[modalities]
-input = ["text"]
-output = ["text"]
+input = 0.3
+output = 1.2
diff --git a/providers/302ai/models/MiniMax-M2.5.toml b/providers/302ai/models/MiniMax-M2.5.toml
new file mode 100644
index 00000000000..67b638180ff
--- /dev/null
+++ b/providers/302ai/models/MiniMax-M2.5.toml
@@ -0,0 +1,6 @@
+base_model = "minimax/MiniMax-M2.5"
+reasoning_options = []
+
+[cost]
+input = 0.3
+output = 1.2
diff --git a/providers/302ai/models/MiniMax-M2.7-highspeed.toml b/providers/302ai/models/MiniMax-M2.7-highspeed.toml
deleted file mode 100644
index 80b702b6ad6..00000000000
--- a/providers/302ai/models/MiniMax-M2.7-highspeed.toml
+++ /dev/null
@@ -1,21 +0,0 @@
-name = "MiniMax-M2.7-highspeed"
-description = "High-speed MiniMax model for low-latency coding and agent workflows"
-release_date = "2026-03-19"
-last_updated = "2026-03-19"
-attachment = false
-reasoning = false
-temperature = true
-tool_call = true
-open_weights = false
-
-[cost]
-input = 0.600
-output = 4.800
-
-[limit]
-context = 204_800
-output = 131_072
-
-[modalities]
-input = ["text"]
-output = ["text"]
diff --git a/providers/302ai/models/MiniMax-M2.7.toml b/providers/302ai/models/MiniMax-M2.7.toml
index 3a53aaa154e..81563bf573e 100644
--- a/providers/302ai/models/MiniMax-M2.7.toml
+++ b/providers/302ai/models/MiniMax-M2.7.toml
@@ -1,21 +1,6 @@
-name = "MiniMax-M2.7"
-description = "MiniMax model for chat, coding, office work, and agentic tasks"
-release_date = "2026-03-19"
-last_updated = "2026-03-19"
-attachment = false
-reasoning = false
-temperature = true
-tool_call = true
-open_weights = false
+base_model = "minimax/MiniMax-M2.7"
+reasoning_options = []
[cost]
-input = 0.300
-output = 1.200
-
-[limit]
-context = 204_800
-output = 131_072
-
-[modalities]
-input = ["text"]
-output = ["text"]
+input = 0.3
+output = 1.2
diff --git a/providers/302ai/models/MiniMax-M3.toml b/providers/302ai/models/MiniMax-M3.toml
new file mode 100644
index 00000000000..be4210ae4ac
--- /dev/null
+++ b/providers/302ai/models/MiniMax-M3.toml
@@ -0,0 +1,7 @@
+# Toggle: thinking.type = enabled|disabled
+base_model = "minimax/MiniMax-M3"
+reasoning_options = [{ type = "toggle" }]
+
+[cost]
+input = 0.72
+output = 2.88
diff --git a/providers/302ai/models/chatgpt-4o-latest.toml b/providers/302ai/models/chatgpt-4o-latest.toml
deleted file mode 100644
index e1ed768d611..00000000000
--- a/providers/302ai/models/chatgpt-4o-latest.toml
+++ /dev/null
@@ -1,23 +0,0 @@
-name = "chatgpt-4o-latest"
-description = "GPT model for general reasoning, writing, coding, and tool-assisted tasks"
-family = "gpt"
-release_date = "2024-08-08"
-last_updated = "2024-08-08"
-attachment = true
-reasoning = false
-temperature = true
-tool_call = false
-open_weights = false
-knowledge = "2023-09"
-
-[cost]
-input = 5.000
-output = 15.000
-
-[limit]
-context = 128_000
-output = 16_384
-
-[modalities]
-input = ["text", "image"]
-output = ["text"]
diff --git a/providers/302ai/models/claude-3-5-haiku-20241022.toml b/providers/302ai/models/claude-3-5-haiku-20241022.toml
deleted file mode 100644
index 4187b860dda..00000000000
--- a/providers/302ai/models/claude-3-5-haiku-20241022.toml
+++ /dev/null
@@ -1,23 +0,0 @@
-name = "claude-3-5-haiku-20241022"
-description = "Fast Claude model for responsive assistance, classification, and lightweight agents"
-family = "claude-haiku"
-release_date = "2024-10-22"
-last_updated = "2024-10-22"
-attachment = true
-reasoning = false
-temperature = true
-tool_call = true
-open_weights = false
-knowledge = "2024-07-31"
-
-[cost]
-input = 0.800
-output = 4.000
-
-[limit]
-context = 200_000
-output = 8_192
-
-[modalities]
-input = ["text", "image", "pdf"]
-output = ["text"]
diff --git a/providers/302ai/models/claude-3-5-haiku-latest.toml b/providers/302ai/models/claude-3-5-haiku-latest.toml
deleted file mode 100644
index 38e55c29625..00000000000
--- a/providers/302ai/models/claude-3-5-haiku-latest.toml
+++ /dev/null
@@ -1,23 +0,0 @@
-name = "claude-3-5-haiku-latest"
-description = "Fast Claude model for responsive assistance, classification, and lightweight agents"
-family = "claude-haiku"
-release_date = "2024-10-22"
-last_updated = "2024-10-22"
-attachment = true
-reasoning = false
-temperature = true
-tool_call = true
-open_weights = false
-knowledge = "2024-07-31"
-
-[cost]
-input = 0.800
-output = 4.000
-
-[limit]
-context = 200_000
-output = 8_192
-
-[modalities]
-input = ["text", "image", "pdf"]
-output = ["text"]
diff --git a/providers/302ai/models/claude-fable-5-1.toml b/providers/302ai/models/claude-fable-5-1.toml
new file mode 100644
index 00000000000..8484f21020a
--- /dev/null
+++ b/providers/302ai/models/claude-fable-5-1.toml
@@ -0,0 +1,6 @@
+base_model = "anthropic/claude-fable-5-1"
+reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }]
+
+[cost]
+input = 10.0
+output = 50.0
diff --git a/providers/302ai/models/claude-fable-5.toml b/providers/302ai/models/claude-fable-5.toml
new file mode 100644
index 00000000000..01a493e716f
--- /dev/null
+++ b/providers/302ai/models/claude-fable-5.toml
@@ -0,0 +1,6 @@
+base_model = "anthropic/claude-fable-5"
+reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }]
+
+[cost]
+input = 10.0
+output = 50.0
diff --git a/providers/302ai/models/claude-opus-4-20250514.toml b/providers/302ai/models/claude-opus-4-20250514.toml
deleted file mode 100644
index 8a972a7f74a..00000000000
--- a/providers/302ai/models/claude-opus-4-20250514.toml
+++ /dev/null
@@ -1,24 +0,0 @@
-name = "claude-opus-4-20250514"
-description = "Flagship Claude model for deep reasoning, coding, and long-horizon agents"
-family = "claude-opus"
-release_date = "2025-05-22"
-last_updated = "2025-05-22"
-attachment = true
-reasoning = true
-reasoning_options = [{ type = "toggle" }, { type = "budget_tokens", min = 1024, max = 31999 }]
-temperature = true
-tool_call = true
-open_weights = false
-knowledge = "2025-03-31"
-
-[cost]
-input = 15.000
-output = 75.000
-
-[limit]
-context = 200_000
-output = 32_000
-
-[modalities]
-input = ["text", "image", "pdf"]
-output = ["text"]
diff --git a/providers/302ai/models/claude-opus-4-5-20251101-thinking.toml b/providers/302ai/models/claude-opus-4-5-20251101-thinking.toml
deleted file mode 100644
index 53ab746245c..00000000000
--- a/providers/302ai/models/claude-opus-4-5-20251101-thinking.toml
+++ /dev/null
@@ -1,23 +0,0 @@
-name = "claude-opus-4-5-20251101-thinking"
-description = "Flagship Claude model for deep reasoning, coding, and long-horizon agents"
-release_date = "2025-11-25"
-last_updated = "2025-11-25"
-attachment = true
-reasoning = true
-reasoning_options = []
-temperature = true
-tool_call = true
-open_weights = false
-knowledge = "2025-03"
-
-[cost]
-input = 5.000
-output = 25.000
-
-[limit]
-context = 200_000
-output = 64_000
-
-[modalities]
-input = ["text", "image"]
-output = ["text"]
diff --git a/providers/302ai/models/claude-opus-4-5.toml b/providers/302ai/models/claude-opus-4-5.toml
deleted file mode 100644
index 70bdeac12a1..00000000000
--- a/providers/302ai/models/claude-opus-4-5.toml
+++ /dev/null
@@ -1,24 +0,0 @@
-name = "claude-opus-4-5"
-description = "Flagship Claude model for deep reasoning, coding, and long-horizon agents"
-family = "claude-opus"
-release_date = "2025-11-25"
-last_updated = "2025-11-25"
-attachment = true
-reasoning = true
-reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "high"] }, { type = "budget_tokens", min = 1024, max = 63999 }]
-temperature = true
-tool_call = true
-open_weights = false
-knowledge = "2025-03-31"
-
-[cost]
-input = 5.000
-output = 25.000
-
-[limit]
-context = 200_000
-output = 64_000
-
-[modalities]
-input = ["text", "image", "pdf"]
-output = ["text"]
diff --git a/providers/302ai/models/claude-opus-4-6-thinking.toml b/providers/302ai/models/claude-opus-4-6-thinking.toml
deleted file mode 100644
index 15d674f84b3..00000000000
--- a/providers/302ai/models/claude-opus-4-6-thinking.toml
+++ /dev/null
@@ -1,23 +0,0 @@
-name = "claude-opus-4-6-thinking"
-description = "Flagship Claude model for deep reasoning, coding, and long-horizon agents"
-release_date = "2026-02-06"
-last_updated = "2026-03-13"
-attachment = true
-reasoning = true
-reasoning_options = []
-temperature = true
-tool_call = true
-open_weights = false
-knowledge = "2025-05"
-
-[cost]
-input = 5.000
-output = 25.000
-
-[limit]
-context = 1_000_000
-output = 128_000
-
-[modalities]
-input = ["text", "image", "pdf"]
-output = ["text"]
diff --git a/providers/302ai/models/claude-opus-4-6.toml b/providers/302ai/models/claude-opus-4-6.toml
deleted file mode 100644
index cb04746dff2..00000000000
--- a/providers/302ai/models/claude-opus-4-6.toml
+++ /dev/null
@@ -1,24 +0,0 @@
-name = "claude-opus-4-6"
-description = "Flagship Claude model for deep reasoning, coding, and long-horizon agents"
-family = "claude-opus"
-release_date = "2026-02-06"
-last_updated = "2026-03-13"
-attachment = true
-reasoning = true
-reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "high", "max"] }, { type = "budget_tokens", min = 1024, max = 127999 }]
-temperature = true
-tool_call = true
-open_weights = false
-knowledge = "2025-05-31"
-
-[cost]
-input = 5.000
-output = 25.000
-
-[limit]
-context = 1_000_000
-output = 128_000
-
-[modalities]
-input = ["text", "image", "pdf"]
-output = ["text"]
diff --git a/providers/302ai/models/claude-opus-4-7-thinking.toml b/providers/302ai/models/claude-opus-4-7-thinking.toml
new file mode 100644
index 00000000000..c8490e371a8
--- /dev/null
+++ b/providers/302ai/models/claude-opus-4-7-thinking.toml
@@ -0,0 +1,7 @@
+base_model = "anthropic/claude-opus-4-7"
+name = "claude-opus-4-7-thinking"
+reasoning_options = []
+
+[cost]
+input = 5.0
+output = 25.0
diff --git a/providers/302ai/models/claude-opus-4-8.toml b/providers/302ai/models/claude-opus-4-8.toml
new file mode 100644
index 00000000000..aafe7fb3d26
--- /dev/null
+++ b/providers/302ai/models/claude-opus-4-8.toml
@@ -0,0 +1,6 @@
+base_model = "anthropic/claude-opus-4-8"
+reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }]
+
+[cost]
+input = 5.0
+output = 25.0
diff --git a/providers/302ai/models/claude-opus-5-thinking.toml b/providers/302ai/models/claude-opus-5-thinking.toml
new file mode 100644
index 00000000000..f1155ed03eb
--- /dev/null
+++ b/providers/302ai/models/claude-opus-5-thinking.toml
@@ -0,0 +1,7 @@
+base_model = "anthropic/claude-opus-5"
+name = "claude-opus-5-thinking"
+reasoning_options = []
+
+[cost]
+input = 5.0
+output = 25.0
diff --git a/providers/302ai/models/claude-opus-5.toml b/providers/302ai/models/claude-opus-5.toml
new file mode 100644
index 00000000000..31cd0633b58
--- /dev/null
+++ b/providers/302ai/models/claude-opus-5.toml
@@ -0,0 +1,6 @@
+base_model = "anthropic/claude-opus-5"
+reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }]
+
+[cost]
+input = 5.0
+output = 25.0
diff --git a/providers/302ai/models/claude-sonnet-4-20250514.toml b/providers/302ai/models/claude-sonnet-4-20250514.toml
deleted file mode 100644
index 0e53f6ef461..00000000000
--- a/providers/302ai/models/claude-sonnet-4-20250514.toml
+++ /dev/null
@@ -1,24 +0,0 @@
-name = "claude-sonnet-4-20250514"
-description = "Balanced Claude model for coding, analysis, agent workflows, and cost control"
-family = "claude-sonnet"
-release_date = "2025-05-22"
-last_updated = "2025-05-22"
-attachment = true
-reasoning = true
-reasoning_options = [{ type = "toggle" }, { type = "budget_tokens", min = 1024, max = 63999 }]
-temperature = true
-tool_call = true
-open_weights = false
-knowledge = "2025-03-31"
-
-[cost]
-input = 3.000
-output = 15.000
-
-[limit]
-context = 200_000
-output = 64_000
-
-[modalities]
-input = ["text", "image", "pdf"]
-output = ["text"]
diff --git a/providers/302ai/models/claude-sonnet-4-5.toml b/providers/302ai/models/claude-sonnet-4-5.toml
deleted file mode 100644
index 9c5655b9568..00000000000
--- a/providers/302ai/models/claude-sonnet-4-5.toml
+++ /dev/null
@@ -1,24 +0,0 @@
-name = "claude-sonnet-4-5"
-description = "Balanced Claude model for coding, analysis, agent workflows, and cost control"
-family = "claude-sonnet"
-release_date = "2025-09-30"
-last_updated = "2025-09-30"
-attachment = true
-reasoning = true
-reasoning_options = [{ type = "toggle" }, { type = "budget_tokens", min = 1024, max = 63999 }]
-temperature = true
-tool_call = true
-open_weights = false
-knowledge = "2025-07-31"
-
-[cost]
-input = 3.000
-output = 15.000
-
-[limit]
-context = 200_000
-output = 64_000
-
-[modalities]
-input = ["text", "image", "pdf"]
-output = ["text"]
diff --git a/providers/302ai/models/claude-sonnet-5.toml b/providers/302ai/models/claude-sonnet-5.toml
new file mode 100644
index 00000000000..7834d37a87f
--- /dev/null
+++ b/providers/302ai/models/claude-sonnet-5.toml
@@ -0,0 +1,8 @@
+# Toggle: thinking.type = enabled|disabled
+# Effort: output_config.effort = low|medium|high|xhigh|max
+base_model = "anthropic/claude-sonnet-5"
+reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }]
+
+[cost]
+input = 2.0
+output = 10.0
diff --git a/providers/302ai/models/deepseek-chat.toml b/providers/302ai/models/deepseek-chat.toml
deleted file mode 100644
index 2b55c7e43a7..00000000000
--- a/providers/302ai/models/deepseek-chat.toml
+++ /dev/null
@@ -1,23 +0,0 @@
-name = "Deepseek-Chat"
-description = "DeepSeek chat model for instruction following, coding, and analysis"
-family = "deepseek"
-release_date = "2024-11-29"
-last_updated = "2024-11-29"
-attachment = false
-reasoning = false
-temperature = true
-tool_call = true
-open_weights = false
-knowledge = "2024-07"
-
-[cost]
-input = 0.290
-output = 0.430
-
-[limit]
-context = 128_000
-output = 8_192
-
-[modalities]
-input = ["text"]
-output = ["text"]
diff --git a/providers/302ai/models/deepseek-flash.toml b/providers/302ai/models/deepseek-flash.toml
new file mode 100644
index 00000000000..0e607680e15
--- /dev/null
+++ b/providers/302ai/models/deepseek-flash.toml
@@ -0,0 +1,19 @@
+# DeepSeek-V4.1-Flash on 302.AI, served as `deepseek-flash` (catalog SKU created 2026-09-08).
+# Cost: 302.AI catalog, $0.150 / $0.600 per MTok with $0.003 cache-read, https://api.302.ai/v1/models (retrieved 2026-09-14).
+# Toggle and `reasoning_content` side channel verified live against POST https://api.302.ai/v1/chat/completions (2026-09-14):
+# `thinking.type = disabled` suppresses reasoning output; invalid `reasoning_effort` values are rejected (-10003).
+# Toggle: thinking.type = enabled|disabled
+# Effort: reasoning_effort = low|high|max
+base_model = "deepseek/deepseek-v4.1-flash"
+reasoning_options = [
+ { type = "toggle" },
+ { type = "effort", values = ["low", "high", "max"] },
+]
+
+[interleaved]
+field = "reasoning_content"
+
+[cost]
+input = 0.15
+output = 0.6
+cache_read = 0.003
diff --git a/providers/302ai/models/deepseek-reasoner.toml b/providers/302ai/models/deepseek-reasoner.toml
deleted file mode 100644
index 448bf2bd4b7..00000000000
--- a/providers/302ai/models/deepseek-reasoner.toml
+++ /dev/null
@@ -1,24 +0,0 @@
-name = "Deepseek-Reasoner"
-description = "DeepSeek reasoning model for multi-step analysis, math, coding, and tools"
-family = "deepseek-thinking"
-release_date = "2025-01-20"
-last_updated = "2025-01-20"
-attachment = false
-reasoning = true
-reasoning_options = []
-temperature = true
-tool_call = true
-open_weights = false
-knowledge = "2024-07"
-
-[cost]
-input = 0.290
-output = 0.430
-
-[limit]
-context = 128_000
-output = 128_000
-
-[modalities]
-input = ["text"]
-output = ["text"]
diff --git a/providers/302ai/models/doubao-seed-code-preview-251028.toml b/providers/302ai/models/doubao-seed-code-preview-251028.toml
deleted file mode 100644
index 0d2128ff32c..00000000000
--- a/providers/302ai/models/doubao-seed-code-preview-251028.toml
+++ /dev/null
@@ -1,21 +0,0 @@
-name = "doubao-seed-code-preview-251028"
-description = "Coding model for repository understanding, refactors, and agentic engineering tasks"
-release_date = "2025-11-11"
-last_updated = "2025-11-11"
-attachment = true
-reasoning = false
-temperature = true
-tool_call = true
-open_weights = false
-
-[cost]
-input = 0.170
-output = 1.140
-
-[limit]
-context = 256_000
-output = 32_000
-
-[modalities]
-input = ["text", "image"]
-output = ["text"]
diff --git a/providers/302ai/models/gemini-3.1-flash-lite-preview.toml b/providers/302ai/models/gemini-3.1-flash-lite-preview.toml
new file mode 100644
index 00000000000..f96a23289ae
--- /dev/null
+++ b/providers/302ai/models/gemini-3.1-flash-lite-preview.toml
@@ -0,0 +1,6 @@
+base_model = "google/gemini-3.1-flash-lite-preview"
+reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }]
+
+[cost]
+input = 0.25
+output = 1.5
diff --git a/providers/302ai/models/gemini-3.1-flash-lite.toml b/providers/302ai/models/gemini-3.1-flash-lite.toml
new file mode 100644
index 00000000000..67ee9bbcaab
--- /dev/null
+++ b/providers/302ai/models/gemini-3.1-flash-lite.toml
@@ -0,0 +1,6 @@
+base_model = "google/gemini-3.1-flash-lite"
+reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }]
+
+[cost]
+input = 0.25
+output = 1.5
diff --git a/providers/302ai/models/gemini-3.1-pro-preview.toml b/providers/302ai/models/gemini-3.1-pro-preview.toml
new file mode 100644
index 00000000000..24eca3818c9
--- /dev/null
+++ b/providers/302ai/models/gemini-3.1-pro-preview.toml
@@ -0,0 +1,6 @@
+base_model = "google/gemini-3.1-pro-preview"
+reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }]
+
+[cost]
+input = 2.0
+output = 12.0
diff --git a/providers/302ai/models/gemini-3.5-flash-lite.toml b/providers/302ai/models/gemini-3.5-flash-lite.toml
new file mode 100644
index 00000000000..43a2449ec76
--- /dev/null
+++ b/providers/302ai/models/gemini-3.5-flash-lite.toml
@@ -0,0 +1,6 @@
+base_model = "google/gemini-3.5-flash-lite"
+reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }]
+
+[cost]
+input = 0.3
+output = 2.5
diff --git a/providers/302ai/models/gemini-3.5-flash-thinking.toml b/providers/302ai/models/gemini-3.5-flash-thinking.toml
new file mode 100644
index 00000000000..4a42abeb130
--- /dev/null
+++ b/providers/302ai/models/gemini-3.5-flash-thinking.toml
@@ -0,0 +1,7 @@
+base_model = "google/gemini-3.5-flash"
+name = "gemini-3.5-flash-thinking"
+reasoning_options = []
+
+[cost]
+input = 1.5
+output = 9.0
diff --git a/providers/302ai/models/gemini-3.5-flash.toml b/providers/302ai/models/gemini-3.5-flash.toml
new file mode 100644
index 00000000000..dd0bb8ad627
--- /dev/null
+++ b/providers/302ai/models/gemini-3.5-flash.toml
@@ -0,0 +1,6 @@
+base_model = "google/gemini-3.5-flash"
+reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }]
+
+[cost]
+input = 1.5
+output = 9.0
diff --git a/providers/302ai/models/gemini-3.6-flash.toml b/providers/302ai/models/gemini-3.6-flash.toml
new file mode 100644
index 00000000000..aa263aba2e2
--- /dev/null
+++ b/providers/302ai/models/gemini-3.6-flash.toml
@@ -0,0 +1,7 @@
+# Cost: 302.AI listed price, https://doc.302.ai/ (retrieved 2026-09-08)
+base_model = "google/gemini-3.6-flash"
+reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }]
+
+[cost]
+input = 1.5
+output = 7.5
diff --git a/providers/302ai/models/gemini-3.7-flash.toml b/providers/302ai/models/gemini-3.7-flash.toml
new file mode 100644
index 00000000000..0db1eb9f1de
--- /dev/null
+++ b/providers/302ai/models/gemini-3.7-flash.toml
@@ -0,0 +1,6 @@
+base_model = "google/gemini-3.7-flash"
+reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }]
+
+[cost]
+input = 0.75
+output = 3.75
diff --git a/providers/302ai/models/gemini-3.8-flash.toml b/providers/302ai/models/gemini-3.8-flash.toml
new file mode 100644
index 00000000000..256bd86ef41
--- /dev/null
+++ b/providers/302ai/models/gemini-3.8-flash.toml
@@ -0,0 +1,6 @@
+base_model = "google/gemini-3.8-flash"
+reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }]
+
+[cost]
+input = 0.75
+output = 3.75
diff --git a/providers/302ai/models/glm-4.5-air.toml b/providers/302ai/models/glm-4.5-air.toml
deleted file mode 100644
index de558b88636..00000000000
--- a/providers/302ai/models/glm-4.5-air.toml
+++ /dev/null
@@ -1,24 +0,0 @@
-name = "glm-4.5-air"
-description = "Efficient GLM model for fast reasoning, coding, and agent workflows"
-family = "glm-air"
-release_date = "2025-07-29"
-last_updated = "2025-07-29"
-attachment = false
-reasoning = true
-reasoning_options = [{ type = "toggle" }]
-temperature = true
-tool_call = true
-open_weights = true
-knowledge = "2025-04"
-
-[cost]
-input = 0.1143
-output = 0.286
-
-[limit]
-context = 131_072
-output = 98_304
-
-[modalities]
-input = ["text"]
-output = ["text"]
diff --git a/providers/302ai/models/glm-4.5-airx.toml b/providers/302ai/models/glm-4.5-airx.toml
deleted file mode 100644
index f547de2fa79..00000000000
--- a/providers/302ai/models/glm-4.5-airx.toml
+++ /dev/null
@@ -1,23 +0,0 @@
-name = "glm-4.5-airx"
-description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering"
-family = "glm"
-release_date = "2025-07-29"
-last_updated = "2025-07-29"
-attachment = false
-reasoning = false
-temperature = true
-tool_call = true
-open_weights = false
-knowledge = "2025-04"
-
-[cost]
-input = 0.572
-output = 1.714
-
-[limit]
-context = 128_000
-output = 16_384
-
-[modalities]
-input = ["text"]
-output = ["text"]
diff --git a/providers/302ai/models/glm-4.5-x.toml b/providers/302ai/models/glm-4.5-x.toml
deleted file mode 100644
index 2564e3d0fe6..00000000000
--- a/providers/302ai/models/glm-4.5-x.toml
+++ /dev/null
@@ -1,23 +0,0 @@
-name = "glm-4.5-x"
-description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering"
-family = "glm"
-release_date = "2025-07-29"
-last_updated = "2025-07-29"
-attachment = false
-reasoning = false
-temperature = true
-tool_call = true
-open_weights = false
-knowledge = "2025-04"
-
-[cost]
-input = 1.143
-output = 2.290
-
-[limit]
-context = 128_000
-output = 16_384
-
-[modalities]
-input = ["text"]
-output = ["text"]
diff --git a/providers/302ai/models/glm-4.7-flashx.toml b/providers/302ai/models/glm-4.7-flashx.toml
deleted file mode 100644
index 3218c5862b3..00000000000
--- a/providers/302ai/models/glm-4.7-flashx.toml
+++ /dev/null
@@ -1,24 +0,0 @@
-name = "glm-4.7-flashx"
-description = "Efficient GLM model for fast reasoning, coding, and agent workflows"
-family = "glm-flash"
-release_date = "2026-01-20"
-last_updated = "2026-01-20"
-attachment = false
-reasoning = true
-reasoning_options = [{ type = "toggle" }]
-temperature = true
-tool_call = true
-open_weights = true
-knowledge = "2025-04"
-
-[cost]
-input = 0.0715
-output = 0.429
-
-[limit]
-context = 200_000
-output = 131_072
-
-[modalities]
-input = ["text"]
-output = ["text"]
diff --git a/providers/302ai/models/glm-5.1.toml b/providers/302ai/models/glm-5.1.toml
index e5de89fd2a8..d9abb545ec2 100644
--- a/providers/302ai/models/glm-5.1.toml
+++ b/providers/302ai/models/glm-5.1.toml
@@ -1,27 +1,10 @@
-name = "glm-5.1"
-description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering"
-family = "glm"
-release_date = "2026-04-10"
-last_updated = "2026-04-10"
-attachment = false
-reasoning = true
+# Toggle: thinking.type = enabled|disabled
+base_model = "zhipuai/glm-5.1"
reasoning_options = [{ type = "toggle" }]
-temperature = true
-tool_call = true
-structured_output = true
-open_weights = false
[interleaved]
field = "reasoning_content"
[cost]
-input = 0.860
-output = 3.500
-
-[limit]
-context = 200_000
-output = 131_072
-
-[modalities]
-input = ["text"]
-output = ["text"]
+input = 1.4
+output = 4.4
diff --git a/providers/302ai/models/glm-5.2.toml b/providers/302ai/models/glm-5.2.toml
new file mode 100644
index 00000000000..1bc0f7d91c8
--- /dev/null
+++ b/providers/302ai/models/glm-5.2.toml
@@ -0,0 +1,10 @@
+# Effort: reasoning_effort = high|max
+base_model = "zhipuai/glm-5.2"
+reasoning_options = [{ type = "effort", values = ["high", "max"] }]
+
+[interleaved]
+field = "reasoning_content"
+
+[cost]
+input = 1.4
+output = 4.4
diff --git a/providers/302ai/models/glm-5.3-flash.toml b/providers/302ai/models/glm-5.3-flash.toml
new file mode 100644
index 00000000000..ae7be522962
--- /dev/null
+++ b/providers/302ai/models/glm-5.3-flash.toml
@@ -0,0 +1,10 @@
+# Effort: reasoning_effort = low|high|max
+base_model = "zhipuai/glm-5.3-flash"
+reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }]
+
+[interleaved]
+field = "reasoning_content"
+
+[cost]
+input = 0.075
+output = 0.25
diff --git a/providers/302ai/models/glm-5.3.toml b/providers/302ai/models/glm-5.3.toml
new file mode 100644
index 00000000000..d8ee5e7385a
--- /dev/null
+++ b/providers/302ai/models/glm-5.3.toml
@@ -0,0 +1,10 @@
+# Effort: reasoning_effort = low|high|max
+base_model = "zhipuai/glm-5.3"
+reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }]
+
+[interleaved]
+field = "reasoning_content"
+
+[cost]
+input = 1.4
+output = 4.4
diff --git a/providers/302ai/models/glm-for-coding.toml b/providers/302ai/models/glm-for-coding.toml
deleted file mode 100644
index 7ba4c169e01..00000000000
--- a/providers/302ai/models/glm-for-coding.toml
+++ /dev/null
@@ -1,23 +0,0 @@
-name = "glm-for-coding"
-description = "Flagship GLM model for hybrid reasoning, coding, and agentic engineering"
-family = "glm"
-release_date = "2025-09-30"
-last_updated = "2025-09-30"
-attachment = false
-reasoning = true
-reasoning_options = []
-temperature = true
-tool_call = true
-open_weights = false
-
-[cost]
-input = 0.086
-output = 0.343
-
-[limit]
-context = 200_000
-output = 131_072
-
-[modalities]
-input = ["text"]
-output = ["text"]
diff --git a/providers/302ai/models/gpt-5.3-chat-latest.toml b/providers/302ai/models/gpt-5.3-chat-latest.toml
new file mode 100644
index 00000000000..c83996b77a9
--- /dev/null
+++ b/providers/302ai/models/gpt-5.3-chat-latest.toml
@@ -0,0 +1,5 @@
+base_model = "openai/gpt-5.3-chat-latest"
+
+[cost]
+input = 1.75
+output = 14.0
diff --git a/providers/302ai/models/gpt-5.4-mini-2026-03-17.toml b/providers/302ai/models/gpt-5.4-mini-2026-03-17.toml
deleted file mode 100644
index e45a9c5a5e3..00000000000
--- a/providers/302ai/models/gpt-5.4-mini-2026-03-17.toml
+++ /dev/null
@@ -1,26 +0,0 @@
-name = "gpt-5.4-mini-2026-03-17"
-description = "Compact GPT model for low-latency assistance and high-volume workloads"
-family = "gpt-mini"
-release_date = "2026-03-19"
-last_updated = "2026-03-19"
-attachment = true
-reasoning = true
-reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }]
-temperature = false
-tool_call = true
-structured_output = true
-open_weights = false
-knowledge = "2025-08-31"
-
-[cost]
-input = 0.750
-output = 4.500
-
-[limit]
-context = 400_000
-input = 272_000
-output = 128_000
-
-[modalities]
-input = ["text", "image"]
-output = ["text"]
diff --git a/providers/302ai/models/gpt-5.4-nano-2026-03-17.toml b/providers/302ai/models/gpt-5.4-nano-2026-03-17.toml
deleted file mode 100644
index eada76b28a2..00000000000
--- a/providers/302ai/models/gpt-5.4-nano-2026-03-17.toml
+++ /dev/null
@@ -1,26 +0,0 @@
-name = "gpt-5.4-nano-2026-03-17"
-description = "Compact GPT model for low-latency assistance and high-volume workloads"
-family = "gpt-nano"
-release_date = "2026-03-19"
-last_updated = "2026-03-19"
-attachment = true
-reasoning = true
-reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }]
-temperature = false
-tool_call = true
-structured_output = true
-open_weights = false
-knowledge = "2025-08-31"
-
-[cost]
-input = 0.200
-output = 1.250
-
-[limit]
-context = 400_000
-input = 272_000
-output = 128_000
-
-[modalities]
-input = ["text", "image"]
-output = ["text"]
diff --git a/providers/302ai/models/gpt-5.4-pro.toml b/providers/302ai/models/gpt-5.4-pro.toml
deleted file mode 100644
index 4cd3385ee29..00000000000
--- a/providers/302ai/models/gpt-5.4-pro.toml
+++ /dev/null
@@ -1,33 +0,0 @@
-name = "gpt-5.4-pro"
-description = "Frontier GPT model for professional reasoning, coding, and multimodal work"
-family = "gpt-pro"
-release_date = "2026-03-05"
-last_updated = "2026-03-05"
-attachment = true
-reasoning = true
-reasoning_options = [{ type = "effort", values = ["medium", "high", "xhigh"] }]
-temperature = false
-tool_call = true
-structured_output = false
-open_weights = false
-knowledge = "2025-08-31"
-
-[cost]
-input = 30.000
-output = 180.000
-cache_read = 0
-cache_write = 0
-
-[[cost.tiers]]
-tier = { size = 272_000 }
-input = 60.000
-output = 270.000
-
-[limit]
-context = 1_050_000
-input = 922_000
-output = 128_000
-
-[modalities]
-input = ["text", "image"]
-output = ["text"]
diff --git a/providers/302ai/models/gpt-5.5.toml b/providers/302ai/models/gpt-5.5.toml
new file mode 100644
index 00000000000..b4c4f7e0f22
--- /dev/null
+++ b/providers/302ai/models/gpt-5.5.toml
@@ -0,0 +1,6 @@
+base_model = "openai/gpt-5.5"
+reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }]
+
+[cost]
+input = 5.0
+output = 30.0
diff --git a/providers/302ai/models/gpt-5.6-luna-pro.toml b/providers/302ai/models/gpt-5.6-luna-pro.toml
new file mode 100644
index 00000000000..0ab31b46ca9
--- /dev/null
+++ b/providers/302ai/models/gpt-5.6-luna-pro.toml
@@ -0,0 +1,8 @@
+# 302.AI model SKU routing to GPT-5.6 Pro reasoning tier (published at same token pricing in 302.AI API catalog)
+base_model = "openai/gpt-5.6-luna"
+name = "gpt-5.6-luna-pro"
+reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }]
+
+[cost]
+input = 0.2
+output = 1.2
diff --git a/providers/302ai/models/gpt-5.6-luna.toml b/providers/302ai/models/gpt-5.6-luna.toml
new file mode 100644
index 00000000000..578fd4f5146
--- /dev/null
+++ b/providers/302ai/models/gpt-5.6-luna.toml
@@ -0,0 +1,6 @@
+base_model = "openai/gpt-5.6-luna"
+reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }]
+
+[cost]
+input = 0.2
+output = 1.2
diff --git a/providers/302ai/models/gpt-5.6-sol-pro.toml b/providers/302ai/models/gpt-5.6-sol-pro.toml
new file mode 100644
index 00000000000..545e5b69ac5
--- /dev/null
+++ b/providers/302ai/models/gpt-5.6-sol-pro.toml
@@ -0,0 +1,9 @@
+# Cost: 302.AI bills Sol Pro at GPT-5.5 rates ($5.000/$30.000 per MTok), per live catalog https://api.302.ai/v1/models (retrieved 2026-09-08)
+# 302.AI model SKU routing to GPT-5.6 Pro reasoning tier (published at same token pricing in 302.AI API catalog)
+base_model = "openai/gpt-5.6-sol"
+name = "gpt-5.6-sol-pro"
+reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }]
+
+[cost]
+input = 5.0
+output = 30.0
diff --git a/providers/302ai/models/gpt-5.6-sol.toml b/providers/302ai/models/gpt-5.6-sol.toml
new file mode 100644
index 00000000000..20133f6c2f9
--- /dev/null
+++ b/providers/302ai/models/gpt-5.6-sol.toml
@@ -0,0 +1,7 @@
+# Cost: 302.AI bills Sol at GPT-5.5 rates ($5.000/$30.000 per MTok, intentionally above OpenAI list $4/$20), per live catalog https://api.302.ai/v1/models (retrieved 2026-09-08)
+base_model = "openai/gpt-5.6-sol"
+reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }]
+
+[cost]
+input = 5.0
+output = 30.0
diff --git a/providers/302ai/models/gpt-5.6-terra-pro.toml b/providers/302ai/models/gpt-5.6-terra-pro.toml
new file mode 100644
index 00000000000..2a80d5735cd
--- /dev/null
+++ b/providers/302ai/models/gpt-5.6-terra-pro.toml
@@ -0,0 +1,8 @@
+# 302.AI model SKU routing to GPT-5.6 Pro reasoning tier (published at same token pricing in 302.AI API catalog)
+base_model = "openai/gpt-5.6-terra"
+name = "gpt-5.6-terra-pro"
+reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }]
+
+[cost]
+input = 2.0
+output = 12.0
diff --git a/providers/302ai/models/gpt-5.6-terra.toml b/providers/302ai/models/gpt-5.6-terra.toml
new file mode 100644
index 00000000000..7732618c97c
--- /dev/null
+++ b/providers/302ai/models/gpt-5.6-terra.toml
@@ -0,0 +1,6 @@
+base_model = "openai/gpt-5.6-terra"
+reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh", "max"] }]
+
+[cost]
+input = 2.0
+output = 12.0
diff --git a/providers/302ai/models/gpt-6-astra.toml b/providers/302ai/models/gpt-6-astra.toml
new file mode 100644
index 00000000000..015f6c3436f
--- /dev/null
+++ b/providers/302ai/models/gpt-6-astra.toml
@@ -0,0 +1,6 @@
+base_model = "openai/gpt-6-astra"
+reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }]
+
+[cost]
+input = 10.0
+output = 50.0
diff --git a/providers/302ai/models/grok-4-1-fast-non-reasoning.toml b/providers/302ai/models/grok-4-1-fast-non-reasoning.toml
deleted file mode 100644
index cf2d24ec30b..00000000000
--- a/providers/302ai/models/grok-4-1-fast-non-reasoning.toml
+++ /dev/null
@@ -1,22 +0,0 @@
-name = "grok-4-1-fast-non-reasoning"
-description = "Fast Grok model for responsive chat, reasoning, and tool-assisted work"
-release_date = "2025-11-20"
-last_updated = "2025-11-20"
-attachment = true
-reasoning = false
-temperature = true
-tool_call = true
-open_weights = false
-knowledge = "2025-06"
-
-[cost]
-input = 0.200
-output = 0.500
-
-[limit]
-context = 2_000_000
-output = 30_000
-
-[modalities]
-input = ["text", "image"]
-output = ["text"]
diff --git a/providers/302ai/models/grok-4.20-beta-0309-non-reasoning.toml b/providers/302ai/models/grok-4.20-beta-0309-non-reasoning.toml
deleted file mode 100644
index eb5149eb845..00000000000
--- a/providers/302ai/models/grok-4.20-beta-0309-non-reasoning.toml
+++ /dev/null
@@ -1,21 +0,0 @@
-name = "grok-4.20-beta-0309-non-reasoning"
-description = "Grok model for agentic tool use, reasoning, coding, and live assistance"
-release_date = "2026-03-16"
-last_updated = "2026-03-16"
-attachment = true
-reasoning = false
-temperature = true
-tool_call = true
-open_weights = false
-
-[cost]
-input = 2.000
-output = 6.000
-
-[limit]
-context = 2_000_000
-output = 30_000
-
-[modalities]
-input = ["text", "image"]
-output = ["text"]
diff --git a/providers/302ai/models/grok-4.20-multi-agent-beta-0309.toml b/providers/302ai/models/grok-4.20-multi-agent-beta-0309.toml
deleted file mode 100644
index f70f1911f2e..00000000000
--- a/providers/302ai/models/grok-4.20-multi-agent-beta-0309.toml
+++ /dev/null
@@ -1,22 +0,0 @@
-name = "grok-4.20-multi-agent-beta-0309"
-description = "Grok model for agentic tool use, reasoning, coding, and live assistance"
-release_date = "2026-03-16"
-last_updated = "2026-03-16"
-attachment = true
-reasoning = true
-reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh"] }]
-temperature = true
-tool_call = true
-open_weights = false
-
-[cost]
-input = 2.000
-output = 6.000
-
-[limit]
-context = 2_000_000
-output = 30_000
-
-[modalities]
-input = ["text", "image"]
-output = ["text"]
diff --git a/providers/302ai/models/grok-4.3.toml b/providers/302ai/models/grok-4.3.toml
new file mode 100644
index 00000000000..70000f8b6e7
--- /dev/null
+++ b/providers/302ai/models/grok-4.3.toml
@@ -0,0 +1,6 @@
+base_model = "xai/grok-4.3"
+reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }]
+
+[cost]
+input = 1.25
+output = 2.5
diff --git a/providers/302ai/models/grok-4.5.toml b/providers/302ai/models/grok-4.5.toml
new file mode 100644
index 00000000000..bb8d4854b50
--- /dev/null
+++ b/providers/302ai/models/grok-4.5.toml
@@ -0,0 +1,6 @@
+base_model = "xai/grok-4.5"
+reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }]
+
+[cost]
+input = 2.0
+output = 6.0
diff --git a/providers/302ai/models/grok-4.6.toml b/providers/302ai/models/grok-4.6.toml
new file mode 100644
index 00000000000..1189356448a
--- /dev/null
+++ b/providers/302ai/models/grok-4.6.toml
@@ -0,0 +1,6 @@
+base_model = "xai/grok-4.6"
+reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh"] }]
+
+[cost]
+input = 2.0
+output = 6.0
diff --git a/providers/302ai/models/kimi-k2-thinking-turbo.toml b/providers/302ai/models/kimi-k2-thinking-turbo.toml
deleted file mode 100644
index 77bf3b84325..00000000000
--- a/providers/302ai/models/kimi-k2-thinking-turbo.toml
+++ /dev/null
@@ -1,23 +0,0 @@
-name = "kimi-k2-thinking-turbo"
-description = "Kimi reasoning model for long-horizon research, planning, and tool use"
-release_date = "2025-09-05"
-last_updated = "2025-09-05"
-attachment = false
-reasoning = true
-reasoning_options = []
-temperature = true
-tool_call = true
-open_weights = false
-knowledge = "2025-06"
-
-[cost]
-input = 1.265
-output = 9.119
-
-[limit]
-context = 262_144
-output = 262_144
-
-[modalities]
-input = ["text"]
-output = ["text"]
diff --git a/providers/302ai/models/kimi-k2.5.toml b/providers/302ai/models/kimi-k2.5.toml
new file mode 100644
index 00000000000..c482a507010
--- /dev/null
+++ b/providers/302ai/models/kimi-k2.5.toml
@@ -0,0 +1,10 @@
+# Toggle: thinking.type = enabled|disabled
+base_model = "moonshotai/kimi-k2.5"
+reasoning_options = [{ type = "toggle" }]
+
+[interleaved]
+field = "reasoning_content"
+
+[cost]
+input = 0.66
+output = 3.3
diff --git a/providers/302ai/models/kimi-k2.6.toml b/providers/302ai/models/kimi-k2.6.toml
new file mode 100644
index 00000000000..b528d6ec1ac
--- /dev/null
+++ b/providers/302ai/models/kimi-k2.6.toml
@@ -0,0 +1,10 @@
+# Toggle: thinking.type = enabled|disabled
+base_model = "moonshotai/kimi-k2.6"
+reasoning_options = [{ type = "toggle" }]
+
+[interleaved]
+field = "reasoning_content"
+
+[cost]
+input = 0.95
+output = 4.0
diff --git a/providers/302ai/models/kimi-k2.7-code.toml b/providers/302ai/models/kimi-k2.7-code.toml
new file mode 100644
index 00000000000..10e5c19b665
--- /dev/null
+++ b/providers/302ai/models/kimi-k2.7-code.toml
@@ -0,0 +1,9 @@
+base_model = "moonshotai/kimi-k2.7-code"
+reasoning_options = []
+
+[interleaved]
+field = "reasoning_content"
+
+[cost]
+input = 0.95
+output = 4.0
diff --git a/providers/302ai/models/kimi-k3.toml b/providers/302ai/models/kimi-k3.toml
new file mode 100644
index 00000000000..58faa62ebbd
--- /dev/null
+++ b/providers/302ai/models/kimi-k3.toml
@@ -0,0 +1,11 @@
+# Toggle: thinking.type = enabled|disabled
+# Effort: output_config.effort = low|high|max
+base_model = "moonshotai/kimi-k3"
+reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "high", "max"] }]
+
+[interleaved]
+field = "reasoning_content"
+
+[cost]
+input = 3.0
+output = 15.0
diff --git a/providers/302ai/models/o3.toml b/providers/302ai/models/o3.toml
new file mode 100644
index 00000000000..9293fda41fe
--- /dev/null
+++ b/providers/302ai/models/o3.toml
@@ -0,0 +1,6 @@
+base_model = "openai/o3"
+reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }]
+
+[cost]
+input = 2.0
+output = 8.0
diff --git a/providers/302ai/models/qwen-flash.toml b/providers/302ai/models/qwen-flash.toml
deleted file mode 100644
index fc1229a8733..00000000000
--- a/providers/302ai/models/qwen-flash.toml
+++ /dev/null
@@ -1,21 +0,0 @@
-name = "Qwen-Flash"
-description = "Efficient Qwen model for fast chat, extraction, and high-volume workloads"
-release_date = "2025-07-28"
-last_updated = "2025-07-28"
-attachment = false
-reasoning = false
-temperature = true
-tool_call = true
-open_weights = false
-
-[cost]
-input = 0.022
-output = 0.220
-
-[limit]
-context = 1_000_000
-output = 32_768
-
-[modalities]
-input = ["text"]
-output = ["text"]
diff --git a/providers/302ai/models/qwen-max-latest.toml b/providers/302ai/models/qwen-max-latest.toml
deleted file mode 100644
index 24b7786be31..00000000000
--- a/providers/302ai/models/qwen-max-latest.toml
+++ /dev/null
@@ -1,23 +0,0 @@
-name = "Qwen-Max-Latest"
-description = "Flagship Qwen model for complex reasoning, coding, and agentic workflows"
-family = "qwen"
-release_date = "2024-04-03"
-last_updated = "2025-01-25"
-attachment = false
-reasoning = false
-temperature = true
-tool_call = true
-open_weights = false
-knowledge = "2024-11"
-
-[cost]
-input = 0.343
-output = 1.372
-
-[limit]
-context = 131_072
-output = 8_192
-
-[modalities]
-input = ["text"]
-output = ["text"]
diff --git a/providers/302ai/models/qwen-plus.toml b/providers/302ai/models/qwen-plus.toml
deleted file mode 100644
index dd7d49fcc52..00000000000
--- a/providers/302ai/models/qwen-plus.toml
+++ /dev/null
@@ -1,23 +0,0 @@
-name = "Qwen-Plus"
-description = "Qwen instruction model for multilingual chat, reasoning, and tool use"
-family = "qwen"
-release_date = "2024-07-23"
-last_updated = "2024-07-23"
-attachment = false
-reasoning = false
-temperature = true
-tool_call = true
-open_weights = false
-knowledge = "2024-10"
-
-[cost]
-input = 0.120
-output = 1.200
-
-[limit]
-context = 1_000_000
-output = 32_768
-
-[modalities]
-input = ["text"]
-output = ["text"]
diff --git a/providers/302ai/models/qwen3.5-35b-a3b.toml b/providers/302ai/models/qwen3.5-35b-a3b.toml
new file mode 100644
index 00000000000..1b1a4828188
--- /dev/null
+++ b/providers/302ai/models/qwen3.5-35b-a3b.toml
@@ -0,0 +1,8 @@
+# Toggle: enable_thinking true|false
+# Budget: thinking_budget (integer reasoning tokens)
+base_model = "alibaba/qwen3.5-35b-a3b"
+reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }]
+
+[cost]
+input = 0.06
+output = 0.46
diff --git a/providers/302ai/models/qwen3.5-plus.toml b/providers/302ai/models/qwen3.5-plus.toml
new file mode 100644
index 00000000000..c1ad4c7c8b2
--- /dev/null
+++ b/providers/302ai/models/qwen3.5-plus.toml
@@ -0,0 +1,8 @@
+# Toggle: enable_thinking true|false
+# Budget: thinking_budget (integer reasoning tokens)
+base_model = "alibaba/qwen3.5-plus"
+reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }]
+
+[cost]
+input = 0.12
+output = 0.69
diff --git a/providers/302ai/models/qwen3.6-35b-a3b.toml b/providers/302ai/models/qwen3.6-35b-a3b.toml
new file mode 100644
index 00000000000..6c5d231a6d8
--- /dev/null
+++ b/providers/302ai/models/qwen3.6-35b-a3b.toml
@@ -0,0 +1,8 @@
+# Toggle: enable_thinking true|false
+# Budget: thinking_budget (integer reasoning tokens)
+base_model = "alibaba/qwen3.6-35b-a3b"
+reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }]
+
+[cost]
+input = 0.283
+output = 1.705
diff --git a/providers/302ai/models/qwen3.6-flash.toml b/providers/302ai/models/qwen3.6-flash.toml
new file mode 100644
index 00000000000..dd520724603
--- /dev/null
+++ b/providers/302ai/models/qwen3.6-flash.toml
@@ -0,0 +1,8 @@
+# Toggle: enable_thinking true|false
+# Budget: thinking_budget (integer reasoning tokens)
+base_model = "alibaba/qwen3.6-flash"
+reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }]
+
+[cost]
+input = 0.188
+output = 1.133
diff --git a/providers/302ai/models/qwen3.6-plus.toml b/providers/302ai/models/qwen3.6-plus.toml
new file mode 100644
index 00000000000..04cfea256f5
--- /dev/null
+++ b/providers/302ai/models/qwen3.6-plus.toml
@@ -0,0 +1,8 @@
+# Toggle: enable_thinking true|false
+# Budget: thinking_budget (integer reasoning tokens)
+base_model = "alibaba/qwen3.6-plus"
+reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }]
+
+[cost]
+input = 0.3
+output = 1.8
diff --git a/providers/302ai/models/qwen3.7-max-2026-06-08.toml b/providers/302ai/models/qwen3.7-max-2026-06-08.toml
new file mode 100644
index 00000000000..2c84633b1c2
--- /dev/null
+++ b/providers/302ai/models/qwen3.7-max-2026-06-08.toml
@@ -0,0 +1,9 @@
+# Toggle: enable_thinking true|false
+# Budget: thinking_budget (integer reasoning tokens)
+base_model = "alibaba/qwen3.7-max"
+name = "qwen3.7-max-2026-06-08"
+reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }]
+
+[cost]
+input = 1.8
+output = 5.3
diff --git a/providers/302ai/models/qwen3.7-max.toml b/providers/302ai/models/qwen3.7-max.toml
new file mode 100644
index 00000000000..799e725392d
--- /dev/null
+++ b/providers/302ai/models/qwen3.7-max.toml
@@ -0,0 +1,8 @@
+# Toggle: enable_thinking true|false
+# Budget: thinking_budget (integer reasoning tokens)
+base_model = "alibaba/qwen3.7-max"
+reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }]
+
+[cost]
+input = 1.8
+output = 5.3
diff --git a/providers/302ai/models/qwen3.7-plus.toml b/providers/302ai/models/qwen3.7-plus.toml
new file mode 100644
index 00000000000..a2e6f1b47b2
--- /dev/null
+++ b/providers/302ai/models/qwen3.7-plus.toml
@@ -0,0 +1,8 @@
+# Toggle: enable_thinking true|false
+# Budget: thinking_budget (integer reasoning tokens)
+base_model = "alibaba/qwen3.7-plus"
+reasoning_options = [{ type = "toggle" }, { type = "budget_tokens" }]
+
+[cost]
+input = 0.285
+output = 1.15
diff --git a/providers/302ai/models/qwen3.8-flash.toml b/providers/302ai/models/qwen3.8-flash.toml
new file mode 100644
index 00000000000..490e46b5d0d
--- /dev/null
+++ b/providers/302ai/models/qwen3.8-flash.toml
@@ -0,0 +1,16 @@
+# Toggle: enable_thinking true|false
+# Effort: reasoning_effort = low|medium|xhigh
+# Budget: thinking_budget (integer reasoning tokens)
+base_model = "alibaba/qwen3.8-flash"
+reasoning_options = [
+ { type = "toggle" },
+ { type = "effort", values = ["low", "medium", "xhigh"] },
+ { type = "budget_tokens" },
+]
+
+[interleaved]
+field = "reasoning_content"
+
+[cost]
+input = 0.18
+output = 0.564
diff --git a/providers/302ai/models/qwen3.8-max.toml b/providers/302ai/models/qwen3.8-max.toml
new file mode 100644
index 00000000000..bbc2ee40100
--- /dev/null
+++ b/providers/302ai/models/qwen3.8-max.toml
@@ -0,0 +1,16 @@
+# Toggle: enable_thinking true|false
+# Effort: reasoning_effort = low|medium|xhigh
+# Budget: thinking_budget (integer reasoning tokens)
+base_model = "alibaba/qwen3.8-max"
+reasoning_options = [
+ { type = "toggle" },
+ { type = "effort", values = ["low", "medium", "xhigh"] },
+ { type = "budget_tokens" },
+]
+
+[interleaved]
+field = "reasoning_content"
+
+[cost]
+input = 2.16
+output = 6.36
diff --git a/providers/302ai/provider.toml b/providers/302ai/provider.toml
index aa9acd503e1..9dc6df7b22f 100644
--- a/providers/302ai/provider.toml
+++ b/providers/302ai/provider.toml
@@ -1,11 +1,16 @@
name = "302.AI"
env = ["302AI_API_KEY"]
npm = "@ai-sdk/openai-compatible"
-# Reasoning HTTP format (accessed 2026-06-25):
-# Audited POST https://api.302.ai/v1/chat/completions. The provider's API guide
-# documents model/messages only; no reasoning toggle, effort, or numeric budget
-# request field is documented. Do not infer passthrough from upstream APIs.
-# Sources:
-# https://doc.302.ai/
+# Relay provider: 302.AI proxies multi-model lab endpoints (OpenAI, Anthropic, Google, GLM, Qwen, xAI, Moonshot, Xiaomi, MiniMax, etc.).
+# Reasoning controls verified live against POST https://api.302.ai/v1/chat/completions (2026-09-08):
+# - OpenAI / GPT: `reasoning_effort` (parsed upstream; invalid values rejected with 400)
+# - Qwen / Alibaba: `enable_thinking` true|false, `reasoning_effort`, `thinking_budget` (probed; `reasoning_content` returned)
+# - Moonshot / Kimi: `thinking.type = enabled|disabled` (probed; `reasoning_content` returned)
+# - GLM / Zhipu: `thinking.type = enabled|disabled` (same field as verified Kimi pattern)
+# - Anthropic / Claude: `output_config.effort` and optional `thinking.type` (lab-mapped, not probed)
+# - Google / Gemini, xAI / Grok: `reasoning_effort` (lab-mapped)
+# - MiniMax: `thinking.type = enabled|disabled` (M3, lab-mapped)
+# - Xiaomi / MiMo: entries removed 2026-09-08; IDs rejected even plain chat completions (-10003)
+# - Dedicated thinking IDs (e.g. *-thinking, MiniMax M2.x): []
doc = "https://doc.302.ai"
api = "https://api.302.ai/v1"
diff --git a/providers/abliteration-ai/models/abliterated-model-large-v2.toml b/providers/abliteration-ai/models/abliterated-model-large-v2.toml
new file mode 100644
index 00000000000..9d7d47eb436
--- /dev/null
+++ b/providers/abliteration-ai/models/abliterated-model-large-v2.toml
@@ -0,0 +1,42 @@
+# Sources (accessed 2026-08-31):
+# - Model card, limits (1M context, 999,990 max output), capabilities, GLM-5.3 base:
+# https://docs.abliteration.ai/models
+# - Reasoning modes and per-endpoint request fields:
+# https://docs.abliteration.ai/capabilities/thinking
+# - Pricing ($5 per 1M tokens input/output, $0.50 per 1M cached input):
+# https://docs.abliteration.ai/pricing
+# https://abliteration.ai/pricing
+# - Launch announcement (GLM-5.3 base, FP8 hosting, benchmarks):
+# https://abliteration.ai/blog/introducing-abliterated-model-large-v2
+name = "Abliterated Model Large V2"
+description = "GLM-5.3 model abliterated and finetuned for cyber, ML red teaming, and agent testing"
+release_date = "2026-08-29"
+last_updated = "2026-08-31"
+attachment = false
+reasoning = true
+tool_call = true
+structured_output = true
+temperature = true
+open_weights = false
+
+# Three distinct reasoning depths: low, high, max (default: max).
+# Reasoning cannot be disabled on this model: "none" and {"thinking": false}
+# map to low and hide the trace, so there is no toggle option. Other ladder
+# values are accepted aliases: minimal -> low, medium -> high, xhigh -> max.
+[[reasoning_options]]
+type = "effort" # API: {"reasoning_effort": ""} on /v1/chat/completions
+values = ["low", "high", "max"]
+
+[cost]
+input = 5.00
+output = 5.00
+cache_read = 0.50
+
+[limit]
+context = 1_000_000
+input = 1_000_000
+output = 999_990
+
+[modalities]
+input = ["text"]
+output = ["text"]
diff --git a/providers/above/logo.svg b/providers/above/logo.svg
new file mode 100644
index 00000000000..00d80ac6381
--- /dev/null
+++ b/providers/above/logo.svg
@@ -0,0 +1,3 @@
+
diff --git a/providers/above/models/deepseek-v4-flash-vision-exp.toml b/providers/above/models/deepseek-v4-flash-vision-exp.toml
new file mode 100644
index 00000000000..76b0d5df561
--- /dev/null
+++ b/providers/above/models/deepseek-v4-flash-vision-exp.toml
@@ -0,0 +1,28 @@
+# Passthrough to the official DeepSeek API.
+# Toggle: `thinking.type = enabled|disabled`; effort: `reasoning_effort = low|high|max`
+# (Flash maps requested low→low). https://api-docs.deepseek.com/guides/thinking_mode/
+# Off-peak rate from the CURRENT DeepSeek price sheet effective 2026-08-16
+# (flash $0.22/$0.007/$0.66, pro $0.66/$0.022/$1.98 off-peak) plus a flat 10%;
+# peak (weekdays 01:00-04:00 and 06:00-10:00 UTC, Beijing-time weekends
+# off-peak) is 2x. https://api-docs.deepseek.com/quick_start/pricing/
+# (accessed 2026-08-29; note first-party catalog entries predate 2026-08-16).
+# Toggle verified end-to-end on this host 2026-08-29.
+# Reasoning tokens billed at the output rate.
+base_model = "deepseek/deepseek-v4-flash-vision-exp"
+name = "DeepSeek V4 Flash Vision (Exp)"
+
+[[reasoning_options]]
+type = "toggle"
+
+[[reasoning_options]]
+type = "effort"
+values = ["low", "high", "max"]
+
+[interleaved]
+field = "reasoning_content"
+
+[cost]
+input = 0.242
+output = 0.726
+reasoning = 0.726
+cache_read = 0.0077
diff --git a/providers/above/models/deepseek-v4-flash.toml b/providers/above/models/deepseek-v4-flash.toml
new file mode 100644
index 00000000000..9b61b977bf8
--- /dev/null
+++ b/providers/above/models/deepseek-v4-flash.toml
@@ -0,0 +1,32 @@
+# Passthrough to the official DeepSeek API. Since 2026-09-10 04:00 UTC the
+# `deepseek-v4-flash` id is served by DeepSeek-V4.1-Flash and billed at the
+# Flash price, so the base is the V4.1 lab entry. Image input verified
+# end-to-end through above.dev on 2026-09-11.
+# Sources:
+# https://api-docs.deepseek.com/quick_start/pricing (upstream Flash rate:
+# $0.15 in / $0.003 cache-hit / $0.60 out per MTok, off-peak; peak is 2x on
+# weekdays 01:00-04:00 and 06:00-10:00 UTC; Beijing-time weekends off-peak)
+# https://api-docs.deepseek.com/guides/thinking_mode/ (toggle
+# `thinking.type = enabled|disabled`, effort `reasoning_effort = low|high|max`)
+# https://above.dev/docs (above resells every upstream rate at a flat x1.10,
+# listed here at the off-peak rate; cost headers on each response)
+# V4 Pro is deliberately unchanged: DeepSeek cancelled its retirement on
+# 2026-09-11 "in response to user demand". Reasoning billed at the output rate.
+base_model = "deepseek/deepseek-v4.1-flash"
+name = "DeepSeek V4 Flash"
+
+[[reasoning_options]]
+type = "toggle"
+
+[[reasoning_options]]
+type = "effort"
+values = ["low", "high", "max"]
+
+[interleaved]
+field = "reasoning_content"
+
+[cost]
+input = 0.165
+output = 0.66
+reasoning = 0.66
+cache_read = 0.0033
diff --git a/providers/above/models/deepseek-v4-pro.toml b/providers/above/models/deepseek-v4-pro.toml
new file mode 100644
index 00000000000..f0d6b4759e9
--- /dev/null
+++ b/providers/above/models/deepseek-v4-pro.toml
@@ -0,0 +1,29 @@
+# Passthrough to the official DeepSeek API.
+# Toggle: `thinking.type = enabled|disabled`; effort: `reasoning_effort = high|max`
+# (Pro maps requested low→high, so low is not a real level).
+# https://api-docs.deepseek.com/guides/thinking_mode/
+# Off-peak rate from the CURRENT DeepSeek price sheet effective 2026-08-16
+# (flash $0.22/$0.007/$0.66, pro $0.66/$0.022/$1.98 off-peak) plus a flat 10%;
+# peak (weekdays 01:00-04:00 and 06:00-10:00 UTC, Beijing-time weekends
+# off-peak) is 2x. https://api-docs.deepseek.com/quick_start/pricing/
+# (accessed 2026-08-29; note first-party catalog entries predate 2026-08-16).
+# Toggle verified end-to-end on this host 2026-08-29.
+# Reasoning tokens billed at the output rate.
+base_model = "deepseek/deepseek-v4-pro-0813"
+name = "DeepSeek V4 Pro"
+
+[[reasoning_options]]
+type = "toggle"
+
+[[reasoning_options]]
+type = "effort"
+values = ["high", "max"]
+
+[interleaved]
+field = "reasoning_content"
+
+[cost]
+input = 0.726
+output = 2.178
+reasoning = 2.178
+cache_read = 0.0242
diff --git a/providers/above/models/glm-5.2-fast.toml b/providers/above/models/glm-5.2-fast.toml
new file mode 100644
index 00000000000..aa8d211a43b
--- /dev/null
+++ b/providers/above/models/glm-5.2-fast.toml
@@ -0,0 +1,18 @@
+# Passthrough to the Fireworks fast router (~2x standard throughput).
+# Effort: `reasoning_effort = none|high|max`; "none" disables thinking
+# (`chat_template_kwargs = {"thinking": false}` also works as an alternate).
+# Verified end-to-end on this host 2026-08-29.
+base_model = "zhipuai/glm-5.2"
+name = "GLM 5.2 Fast"
+
+[[reasoning_options]]
+type = "effort"
+values = ["none", "high", "max"]
+
+[interleaved]
+field = "reasoning_content"
+
+[cost]
+input = 2.31
+output = 7.26
+cache_read = 0.231
diff --git a/providers/above/models/glm-5.2.toml b/providers/above/models/glm-5.2.toml
new file mode 100644
index 00000000000..75a9b2317be
--- /dev/null
+++ b/providers/above/models/glm-5.2.toml
@@ -0,0 +1,18 @@
+# Passthrough to Fireworks serverless.
+# Effort: `reasoning_effort = none|high|max`; "none" disables thinking
+# (`chat_template_kwargs = {"thinking": false}` also works as an alternate).
+# Verified end-to-end on this host 2026-08-29.
+base_model = "zhipuai/glm-5.2"
+name = "GLM 5.2"
+
+[[reasoning_options]]
+type = "effort"
+values = ["none", "high", "max"]
+
+[interleaved]
+field = "reasoning_content"
+
+[cost]
+input = 1.54
+output = 4.84
+cache_read = 0.154
diff --git a/providers/above/models/glm-5.3-flash.toml b/providers/above/models/glm-5.3-flash.toml
new file mode 100644
index 00000000000..13710139108
--- /dev/null
+++ b/providers/above/models/glm-5.3-flash.toml
@@ -0,0 +1,24 @@
+# Passthrough to Fireworks serverless (accounts/fireworks/models/glm-5p3-flash).
+# Thinking-only model: reasoning cannot be disabled. Same surface as the
+# Fireworks peer entry: effort high|max (Fireworks collapses requested
+# low/medium to high; the wire accepts them but they select no distinct tier,
+# and "none" is rejected with a 400 — verified live 2026-08-30). Image input
+# verified; video/pdf are not supported on this host. Costs are the Fireworks
+# rate ($0.15/$0.029/$0.50) plus a flat 10%.
+base_model = "zhipuai/glm-5.3-flash"
+name = "GLM 5.3 Flash"
+
+[[reasoning_options]]
+type = "effort"
+values = ["high", "max"]
+
+[modalities]
+input = ["text", "image"]
+
+[interleaved]
+field = "reasoning_content"
+
+[cost]
+input = 0.165
+output = 0.55
+cache_read = 0.0319
diff --git a/providers/above/models/mimo-v2.5-pro.toml b/providers/above/models/mimo-v2.5-pro.toml
new file mode 100644
index 00000000000..682e84d3866
--- /dev/null
+++ b/providers/above/models/mimo-v2.5-pro.toml
@@ -0,0 +1,19 @@
+# Passthrough to the official MiMo API (api.xiaomimimo.com).
+# Toggle: `thinking.type = enabled|disabled`, as providers/xiaomi; verified
+# end-to-end on this host 2026-08-29.
+# RMB upstream (CNY 3/0.025/6 per MTok)
+# converted at 6.5 CNY/USD (operator rate set 2026-07, spot ~6.79; buffer
+# covers FX drift), then a flat 10% markup; rounded to 4dp. Checked 2026-08-29.
+base_model = "xiaomi/mimo-v2.5-pro"
+name = "MiMo V2.5 Pro"
+
+[[reasoning_options]]
+type = "toggle"
+
+[interleaved]
+field = "reasoning_content"
+
+[cost]
+input = 0.5077
+output = 1.0154
+cache_read = 0.0042
diff --git a/providers/above/models/qwen3.8-max.toml b/providers/above/models/qwen3.8-max.toml
new file mode 100644
index 00000000000..40b109783ce
--- /dev/null
+++ b/providers/above/models/qwen3.8-max.toml
@@ -0,0 +1,27 @@
+# Passthrough to Fireworks serverless.
+# Toggle: `reasoning_effort = "none"` disables thinking (also accepts
+# `chat_template_kwargs = {"thinking": false}`); verified end-to-end on this
+# host 2026-08-29. The Alibaba first-party effort levels and budget_tokens are
+# not exposed by this host.
+# Host deltas vs the lab base: image input verified end-to-end 2026-08-23
+# (video/pdf not supported on this host); output capped at 32,768.
+base_model = "alibaba/qwen3.8-max"
+name = "Qwen 3.8 Max"
+attachment = false
+
+[[reasoning_options]]
+type = "toggle"
+
+[interleaved]
+field = "reasoning_content"
+
+[modalities]
+input = ["text", "image"]
+
+[limit]
+output = 32_768
+
+[cost]
+input = 2.2
+output = 6.6
+cache_read = 0.275
diff --git a/providers/above/provider.toml b/providers/above/provider.toml
new file mode 100644
index 00000000000..8b921569ed2
--- /dev/null
+++ b/providers/above/provider.toml
@@ -0,0 +1,11 @@
+name = "above.dev"
+env = ["ABOVE_API_KEY"]
+npm = "@ai-sdk/openai-compatible"
+# OpenAI-compatible gateway selling upstream cost plus a flat 10% on every
+# token class, with the full upstream cache-hit discount passed through.
+# DeepSeek models use time-of-day pricing (peak = 2x, weekdays 01:00-04:00 and
+# 06:00-10:00 UTC; weekends off-peak); costs below are the off-peak rate.
+# Every response reports its exact cost in the `x-cost-usd` header.
+# https://above.dev/llms.txt
+api = "https://api.above.dev/v1"
+doc = "https://above.dev/docs"
diff --git a/providers/agentrouter/models/deepseek-v4-flash.toml b/providers/agentrouter/models/deepseek-v4-flash.toml
new file mode 100644
index 00000000000..53933a438bb
--- /dev/null
+++ b/providers/agentrouter/models/deepseek-v4-flash.toml
@@ -0,0 +1,6 @@
+# Catalog and endpoint support: https://agentrouter.org/api/pricing
+# AgentRouter publishes relative token ratios, not USD prices, so cost is intentionally omitted.
+# Toggle: thinking.type = enabled|disabled
+# Effort: reasoning_effort = low|high|max
+base_model = "deepseek/deepseek-v4-flash"
+reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "high", "max"] }]
diff --git a/providers/agentrouter/models/glm-5.3.toml b/providers/agentrouter/models/glm-5.3.toml
new file mode 100644
index 00000000000..83ef4f53d00
--- /dev/null
+++ b/providers/agentrouter/models/glm-5.3.toml
@@ -0,0 +1,5 @@
+# Catalog and endpoint support: https://agentrouter.org/api/pricing
+# AgentRouter publishes relative token ratios, not USD prices, so cost is intentionally omitted.
+# GLM-5.3 always reasons (thinking cannot be disabled); effort levels low|high|max, default max.
+base_model = "zhipuai/glm-5.3"
+reasoning_options = [{ type = "effort", values = ["low", "high", "max"] }]
diff --git a/providers/ai21/logo.svg b/providers/ai21/logo.svg
new file mode 100644
index 00000000000..b929375b0d2
--- /dev/null
+++ b/providers/ai21/logo.svg
@@ -0,0 +1,3 @@
+
diff --git a/providers/ai21/models/jamba-large.toml b/providers/ai21/models/jamba-large.toml
new file mode 100644
index 00000000000..dfa0edbeab9
--- /dev/null
+++ b/providers/ai21/models/jamba-large.toml
@@ -0,0 +1,5 @@
+base_model = "ai21/jamba-large"
+
+[cost]
+input = 2.00
+output = 8.00
diff --git a/providers/ai21/models/jamba-mini.toml b/providers/ai21/models/jamba-mini.toml
new file mode 100644
index 00000000000..164715bac23
--- /dev/null
+++ b/providers/ai21/models/jamba-mini.toml
@@ -0,0 +1,5 @@
+base_model = "ai21/jamba-mini"
+
+[cost]
+input = 0.20
+output = 0.40
diff --git a/providers/ai21/provider.toml b/providers/ai21/provider.toml
new file mode 100644
index 00000000000..3dd6911976e
--- /dev/null
+++ b/providers/ai21/provider.toml
@@ -0,0 +1,5 @@
+name = "AI21 Labs"
+env = ["AI21_API_KEY"]
+npm = "@ai-sdk/openai-compatible"
+api = "https://api.ai21.com/studio/v1"
+doc = "https://docs.ai21.com/docs/jamba-foundation-models"
diff --git a/providers/aiand/logo.svg b/providers/aiand/logo.svg
index 0a0726cda82..e36f046a233 100644
--- a/providers/aiand/logo.svg
+++ b/providers/aiand/logo.svg
@@ -1,5 +1,4 @@
-