diff --git a/docs/screenshots/free-tier-budget-card.svg b/docs/screenshots/free-tier-budget-card.svg
index d9c08c52df9c..a142a8b2ff9e 100644
--- a/docs/screenshots/free-tier-budget-card.svg
+++ b/docs/screenshots/free-tier-budget-card.svg
@@ -61,7 +61,7 @@
Qwen3.8 27B 6M
-MiniMax-M2.7 6M
+DeepSeek-V3.2 6M
Arcee Trinity Large Prev 5M
diff --git a/open-sse/config/freeModelCatalog.data.ts b/open-sse/config/freeModelCatalog.data.ts
index 5b58c600ebcc..f181b8660bdd 100644
--- a/open-sse/config/freeModelCatalog.data.ts
+++ b/open-sse/config/freeModelCatalog.data.ts
@@ -22,7 +22,7 @@ import type { FreeModelBudget } from "./freeModelCatalog.ts";
* rewrites file timestamps on every deploy, which would report a months-old
* catalog as "updated today". Bump this whenever the entries below change.
*/
-export const FREE_CATALOG_CURATED_AT = "2026-09-12";
+export const FREE_CATALOG_CURATED_AT = "2026-10-10";
export const FREE_MODEL_BUDGETS: FreeModelBudget[] = [
{ provider: "agentrouter", modelId: "claude-opus-4-8", displayName: "Claude Opus 4.8", monthlyTokens: 0, creditTokens: 200000000, freeType: "one-time-initial", poolKey: "agentrouter", tos: "caution" },
@@ -388,11 +388,12 @@ export const FREE_MODEL_BUDGETS: FreeModelBudget[] = [
{ provider: "qoder", modelId: "minimax-m3", displayName: "MiniMax-M3", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "reka", modelId: "reka-flash-3", displayName: "Reka Flash 3", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-monthly", poolKey: "reka", tos: "caution" },
{ provider: "reka", modelId: "reka-edge-2603", displayName: "Reka Edge 2603", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-monthly", poolKey: "reka", tos: "caution" },
- { provider: "sambanova", modelId: "MiniMax-M2.7", displayName: "MiniMax-M2.7", monthlyTokens: 6000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "sambanova", tos: "caution" },
+ // evidence: public-page https://docs.sambanova.ai/docs/en/models/rate-limits re-read 2026-10-10 - Free Tier table lists DeepSeek-V3.1, Meta-Llama-3.3-70B-Instruct, gpt-oss-120b (production) and DeepSeek-V3.2, gemma-4-31B-it (preview) at 200,000 TPD each; MiniMax-M2.7 appears only under the Developer Tier and Llama-4-Maverick is not on the page. The page does not say how the token limit is enforced, so the 6M pool is an upper bound.
{ provider: "sambanova", modelId: "DeepSeek-V3.2", displayName: "DeepSeek-V3.2", monthlyTokens: 6000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "sambanova", tos: "caution" },
- { provider: "sambanova", modelId: "Llama-4-Maverick-17B-128E-Instruct", displayName: "Llama-4-Maverick-17B-128E-Instruct", monthlyTokens: 6000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "sambanova", tos: "caution" },
{ provider: "sambanova", modelId: "Meta-Llama-3.3-70B-Instruct", displayName: "Meta-Llama-3.3-70B-Instruct", monthlyTokens: 6000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "sambanova", tos: "caution" },
{ provider: "sambanova", modelId: "gpt-oss-120b", displayName: "gpt-oss-120b", monthlyTokens: 6000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "sambanova", tos: "caution" },
+ { provider: "sambanova", modelId: "DeepSeek-V3.1", displayName: "DeepSeek-V3.1", monthlyTokens: 6000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "sambanova", tos: "caution" },
+ { provider: "sambanova", modelId: "gemma-4-31B-it", displayName: "gemma-4-31B-it", monthlyTokens: 6000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "sambanova", tos: "caution" },
{ provider: "scaleway", modelId: "qwen3-235b-a22b-instruct-2507", displayName: "Qwen3 235B A22B (1M free tok 🆓)", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "scaleway", tos: "ok" },
{ provider: "scaleway", modelId: "llama-3.1-70b-instruct", displayName: "Llama 3.1 70B (🆓 EU)", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "scaleway", tos: "ok" },
{ provider: "scaleway", modelId: "llama-3.1-8b-instruct", displayName: "Llama 3.1 8B (🆓 EU)", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "scaleway", tos: "ok" },
diff --git a/open-sse/config/providers/shared.ts b/open-sse/config/providers/shared.ts
index 37f8a587f4d9..4e9777bba5dc 100644
--- a/open-sse/config/providers/shared.ts
+++ b/open-sse/config/providers/shared.ts
@@ -433,6 +433,8 @@ export const CHAT_OPENAI_COMPAT_MODELS: Record = {
"Llama-4-Maverick-17B-128E-Instruct",
"Meta-Llama-3.3-70B-Instruct",
"gpt-oss-120b",
+ "DeepSeek-V3.1",
+ "gemma-4-31B-it",
]),
nscale: buildModels([
"moonshotai/Kimi-K2.5",
diff --git a/tests/unit/sambanova-free-models-2026-10.test.ts b/tests/unit/sambanova-free-models-2026-10.test.ts
new file mode 100644
index 000000000000..39914c45ce67
--- /dev/null
+++ b/tests/unit/sambanova-free-models-2026-10.test.ts
@@ -0,0 +1,32 @@
+import test from "node:test";
+import assert from "node:assert/strict";
+
+import { FREE_MODEL_BUDGETS } from "../../open-sse/config/freeModelCatalog.data.ts";
+import { CHAT_OPENAI_COMPAT_MODELS } from "../../open-sse/config/providers/shared.ts";
+
+// Source: https://docs.sambanova.ai/docs/en/models/rate-limits (read 2026-10-09). The Free Tier table lists
+// DeepSeek-V3.1, Meta-Llama-3.3-70B-Instruct, gpt-oss-120b, DeepSeek-V3.2 and gemma-4-31B-it; MiniMax-M2.7 is
+// only in the Developer table and Llama-4-Maverick is not on the page.
+const free = new Set(
+ FREE_MODEL_BUDGETS.filter((m) => m.provider === "sambanova").map((m) => m.modelId)
+);
+const registry = new Set(CHAT_OPENAI_COMPAT_MODELS.sambanova.map((m) => m.id));
+
+test("SambaNova free catalog lists the models of its Free Tier table", () => {
+ for (const id of [
+ "DeepSeek-V3.1",
+ "Meta-Llama-3.3-70B-Instruct",
+ "gpt-oss-120b",
+ "DeepSeek-V3.2",
+ "gemma-4-31B-it",
+ ]) {
+ assert.ok(free.has(id), `${id} must be in the SambaNova free catalog`);
+ assert.ok(registry.has(id), `${id} must be routable`);
+ }
+});
+
+test("SambaNova free catalog excludes models its page does not give to the Free Tier", () => {
+ for (const id of ["MiniMax-M2.7", "Llama-4-Maverick-17B-128E-Instruct"]) {
+ assert.ok(!free.has(id), `${id} must not be listed as free`);
+ }
+});