fix(pricing): refresh catalog pricing snapshot
Verify display pricing against the official pricing page and the live provider model list: - add claude-fable-5-1 and deepseek/deepseek-v4-flash-fast - remove minimax/minimax-m3-free and minimax/minimax-m2.7-free, which the provider no longer lists - end the claude-sonnet-5 introductory window; the listed rate is unchanged - google/gemini-3.7-flash returns to list price after the promotion ended
This commit is contained in:
+2
-2
@@ -4,8 +4,8 @@
|
|||||||
|
|
||||||
- Stop silently dropping `role: "developer"` messages (for example OMP advisor steering notes, reminders, and nudges). `/alpha/generate` only accepts `user`, `assistant`, and `tool` roles, so developer messages are now forwarded as `user` messages with identical content in the same chronological position instead of disappearing from the request.
|
- Stop silently dropping `role: "developer"` messages (for example OMP advisor steering notes, reminders, and nudges). `/alpha/generate` only accepts `user`, `assistant`, and `tool` roles, so developer messages are now forwarded as `user` messages with identical content in the same chronological position instead of disappearing from the request.
|
||||||
- Add `Qwen/Qwen3.8-Flash` and `z-ai/glm-5.3-flash` with their verified reasoning efforts (`low, medium, xhigh` and `low, high, max`) and display pricing.
|
- Add `Qwen/Qwen3.8-Flash` and `z-ai/glm-5.3-flash` with their verified reasoning efforts (`low, medium, xhigh` and `low, high, max`) and display pricing.
|
||||||
- Refresh static model capabilities from `command-code@1.36.0`, adding the free `minimax/minimax-m3-free` model and the `z-ai/glm-5.3-flash` output limit while dropping the retired `stealth/ox-alpha`.
|
- Refresh static model capabilities from `command-code@1.40.1`, adding `claude-fable-5-1`, `deepseek/deepseek-v4-flash-fast`, and `tencent/hy4-preview` with their reasoning efforts, adding `moonshotai/Kimi-K3` efforts and the `z-ai/glm-5.3-flash` output limit, and dropping the retired `stealth/ox-alpha` and `minimax/minimax-m3-free`.
|
||||||
- Refresh display pricing for the current 62-model catalog, adding the free `minimax/minimax-m3-free` and `minimax/minimax-m2.7-free` promotional variants (free through September 5, 2026) and `tencent/hy4-preview`, and removing the retired `stealth/ox-alpha`.
|
- Refresh display pricing for the current 62-model catalog, adding `claude-fable-5-1`, `deepseek/deepseek-v4-flash-fast`, and `tencent/hy4-preview`, removing the retired `stealth/ox-alpha`, `minimax/minimax-m3-free`, and `minimax/minimax-m2.7-free`, and ending the expired Claude Sonnet 5 introductory and Gemini 3.7 Flash promotional windows.
|
||||||
- Fix `npm run sync:commandcode-catalog` and `npm run check:commandcode-catalog` on Windows by spawning npm through the shell.
|
- Fix `npm run sync:commandcode-catalog` and `npm run check:commandcode-catalog` on Windows by spawning npm through the shell.
|
||||||
- Add a `refresh-model-catalog` agent skill with cross-platform helper scripts that snapshot the live model catalog and regenerate the pricing fixture from `MODEL_COSTS`.
|
- Add a `refresh-model-catalog` agent skill with cross-platform helper scripts that snapshot the live model catalog and regenerate the pricing fixture from `MODEL_COSTS`.
|
||||||
|
|
||||||
|
|||||||
+13
-25
@@ -20,7 +20,7 @@ export interface TemporaryPricing {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const PRICING_SOURCE_URL = "https://commandcode.ai/docs/resources/pricing-limits"
|
export const PRICING_SOURCE_URL = "https://commandcode.ai/docs/resources/pricing-limits"
|
||||||
export const PRICING_LAST_VERIFIED = "2026-08-28"
|
export const PRICING_LAST_VERIFIED = "2026-09-01"
|
||||||
|
|
||||||
export const ZERO_MODEL_COST: CommandCodeModelCost = {
|
export const ZERO_MODEL_COST: CommandCodeModelCost = {
|
||||||
input: 0,
|
input: 0,
|
||||||
@@ -40,8 +40,6 @@ export const ZERO_MODEL_COST: CommandCodeModelCost = {
|
|||||||
export const MODEL_COSTS: Readonly<Record<string, CommandCodeModelCost>> = {
|
export const MODEL_COSTS: Readonly<Record<string, CommandCodeModelCost>> = {
|
||||||
// Free models
|
// Free models
|
||||||
"poolside/laguna-s-2.1-free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
"poolside/laguna-s-2.1-free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
||||||
"minimax/minimax-m3-free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
||||||
"minimax/minimax-m2.7-free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
||||||
|
|
||||||
// Open and open-weight models
|
// Open and open-weight models
|
||||||
"tencent/hy3-paid": { input: 0.14, output: 0.58, cacheRead: 0.035, cacheWrite: 0 },
|
"tencent/hy3-paid": { input: 0.14, output: 0.58, cacheRead: 0.035, cacheWrite: 0 },
|
||||||
@@ -85,6 +83,12 @@ export const MODEL_COSTS: Readonly<Record<string, CommandCodeModelCost>> = {
|
|||||||
cacheRead: 0.007,
|
cacheRead: 0.007,
|
||||||
cacheWrite: 0,
|
cacheWrite: 0,
|
||||||
},
|
},
|
||||||
|
"deepseek/deepseek-v4-flash-fast": {
|
||||||
|
input: 0.28,
|
||||||
|
output: 0.56,
|
||||||
|
cacheRead: 0.07,
|
||||||
|
cacheWrite: 0,
|
||||||
|
},
|
||||||
"Qwen/Qwen3.8-Max": { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 2.5 },
|
"Qwen/Qwen3.8-Max": { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 2.5 },
|
||||||
"Qwen/Qwen3.8-27B": { input: 0.4, output: 3, cacheRead: 0.04, cacheWrite: 0 },
|
"Qwen/Qwen3.8-27B": { input: 0.4, output: 3, cacheRead: 0.04, cacheWrite: 0 },
|
||||||
"Qwen/Qwen3.8-Flash": { input: 0.16, output: 0.47, cacheRead: 0.016, cacheWrite: 0 },
|
"Qwen/Qwen3.8-Flash": { input: 0.16, output: 0.47, cacheRead: 0.016, cacheWrite: 0 },
|
||||||
@@ -162,9 +166,9 @@ export const MODEL_COSTS: Readonly<Record<string, CommandCodeModelCost>> = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
// Anthropic
|
// Anthropic
|
||||||
// Introductory pricing through 2026-08-31.
|
|
||||||
"claude-sonnet-5": { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 },
|
"claude-sonnet-5": { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 },
|
||||||
"claude-sonnet-4-6": { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },
|
"claude-sonnet-4-6": { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },
|
||||||
|
"claude-fable-5-1": { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 },
|
||||||
"claude-fable-5": { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 },
|
"claude-fable-5": { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 },
|
||||||
"claude-opus-5": { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 },
|
"claude-opus-5": { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 },
|
||||||
"claude-opus-4-8": { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 },
|
"claude-opus-4-8": { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 },
|
||||||
@@ -187,10 +191,10 @@ export const MODEL_COSTS: Readonly<Record<string, CommandCodeModelCost>> = {
|
|||||||
|
|
||||||
// Google and xAI
|
// Google and xAI
|
||||||
"google/gemini-3.7-flash": {
|
"google/gemini-3.7-flash": {
|
||||||
input: 0.75,
|
input: 1.5,
|
||||||
output: 3.75,
|
output: 7.5,
|
||||||
cacheRead: 0.075,
|
cacheRead: 0.15,
|
||||||
cacheWrite: 0.04167,
|
cacheWrite: 0.08334,
|
||||||
},
|
},
|
||||||
"google/gemini-3.6-flash": { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 },
|
"google/gemini-3.6-flash": { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 },
|
||||||
"google/gemini-3.5-flash": { input: 1.5, output: 9, cacheRead: 0.15, cacheWrite: 0 },
|
"google/gemini-3.5-flash": { input: 1.5, output: 9, cacheRead: 0.15, cacheWrite: 0 },
|
||||||
@@ -224,20 +228,4 @@ export const MODEL_COSTS: Readonly<Record<string, CommandCodeModelCost>> = {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
export const TEMPORARY_PRICING: readonly TemporaryPricing[] = [
|
export const TEMPORARY_PRICING: readonly TemporaryPricing[] = []
|
||||||
{
|
|
||||||
models: ["claude-sonnet-5"],
|
|
||||||
expiresOn: "2026-08-31",
|
|
||||||
description: "introductory pricing",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
models: ["google/gemini-3.7-flash"],
|
|
||||||
expiresOn: "2026-12-31",
|
|
||||||
description: "50% promotional pricing",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
models: ["minimax/minimax-m3-free", "minimax/minimax-m2.7-free"],
|
|
||||||
expiresOn: "2026-09-05",
|
|
||||||
description: "free promotional pricing",
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|||||||
+3
-3
@@ -1,9 +1,10 @@
|
|||||||
{
|
{
|
||||||
"fetchedAt": "2026-08-28T09:27:52.554Z",
|
"fetchedAt": "2026-09-01T21:28:23.974Z",
|
||||||
"source": "https://api.commandcode.ai/provider/v1/models",
|
"source": "https://api.commandcode.ai/provider/v1/models",
|
||||||
"modelIds": [
|
"modelIds": [
|
||||||
"claude-sonnet-5",
|
"claude-sonnet-5",
|
||||||
"claude-sonnet-4-6",
|
"claude-sonnet-4-6",
|
||||||
|
"claude-fable-5-1",
|
||||||
"claude-fable-5",
|
"claude-fable-5",
|
||||||
"claude-opus-5",
|
"claude-opus-5",
|
||||||
"claude-opus-4-8",
|
"claude-opus-4-8",
|
||||||
@@ -19,6 +20,7 @@
|
|||||||
"deepseek/deepseek-v4-pro",
|
"deepseek/deepseek-v4-pro",
|
||||||
"deepseek/deepseek-v4-flash",
|
"deepseek/deepseek-v4-flash",
|
||||||
"deepseek/deepseek-v4-flash-vision-exp",
|
"deepseek/deepseek-v4-flash-vision-exp",
|
||||||
|
"deepseek/deepseek-v4-flash-fast",
|
||||||
"moonshotai/Kimi-K3",
|
"moonshotai/Kimi-K3",
|
||||||
"moonshotai/Kimi-K2.7-Code",
|
"moonshotai/Kimi-K2.7-Code",
|
||||||
"moonshotai/Kimi-K2.7-Code-Highspeed",
|
"moonshotai/Kimi-K2.7-Code-Highspeed",
|
||||||
@@ -32,8 +34,6 @@
|
|||||||
"zai-org/GLM-5",
|
"zai-org/GLM-5",
|
||||||
"MiniMaxAI/MiniMax-M3",
|
"MiniMaxAI/MiniMax-M3",
|
||||||
"MiniMaxAI/MiniMax-M2.7",
|
"MiniMaxAI/MiniMax-M2.7",
|
||||||
"minimax/minimax-m3-free",
|
|
||||||
"minimax/minimax-m2.7-free",
|
|
||||||
"MiniMaxAI/MiniMax-M2.5",
|
"MiniMaxAI/MiniMax-M2.5",
|
||||||
"xiaomi/mimo-v2.5-pro",
|
"xiaomi/mimo-v2.5-pro",
|
||||||
"xiaomi/mimo-v2.5",
|
"xiaomi/mimo-v2.5",
|
||||||
|
|||||||
+16
-16
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"verifiedAt": "2026-08-28",
|
"verifiedAt": "2026-09-01",
|
||||||
"source": "https://commandcode.ai/docs/resources/pricing-limits",
|
"source": "https://commandcode.ai/docs/resources/pricing-limits",
|
||||||
"tierPolicy": "Use request-wide input tiers; the highest threshold exceeded by input plus cache tokens applies to the full request.",
|
"tierPolicy": "Use request-wide input tiers; the highest threshold exceeded by input plus cache tokens applies to the full request.",
|
||||||
"tiers": {
|
"tiers": {
|
||||||
@@ -11,9 +11,9 @@
|
|||||||
"xai/grok-4.6": [[200000, 4, 12, 1, 0]]
|
"xai/grok-4.6": [[200000, 4, 12, 1, 0]]
|
||||||
},
|
},
|
||||||
"costs": {
|
"costs": {
|
||||||
"deepseek/deepseek-v4-pro": [0.66, 1.98, 0.022, 0],
|
"poolside/laguna-s-2.1-free": [0, 0, 0, 0],
|
||||||
"deepseek/deepseek-v4-flash": [0.22, 0.66, 0.007, 0],
|
"tencent/hy3-paid": [0.14, 0.58, 0.035, 0],
|
||||||
"deepseek/deepseek-v4-flash-vision-exp": [0.22, 0.66, 0.007, 0],
|
"tencent/hy4-preview": [0.834, 2.501, 0.042, 0],
|
||||||
"moonshotai/Kimi-K3": [3, 15, 0.3, 0],
|
"moonshotai/Kimi-K3": [3, 15, 0.3, 0],
|
||||||
"moonshotai/Kimi-K2.7-Code": [0.95, 4, 0.19, 0],
|
"moonshotai/Kimi-K2.7-Code": [0.95, 4, 0.19, 0],
|
||||||
"moonshotai/Kimi-K2.7-Code-Highspeed": [1.9, 8, 0.38, 0],
|
"moonshotai/Kimi-K2.7-Code-Highspeed": [1.9, 8, 0.38, 0],
|
||||||
@@ -28,8 +28,10 @@
|
|||||||
"MiniMaxAI/MiniMax-M3": [0.3, 1.2, 0.06, 0],
|
"MiniMaxAI/MiniMax-M3": [0.3, 1.2, 0.06, 0],
|
||||||
"MiniMaxAI/MiniMax-M2.7": [0.3, 1.2, 0.06, 0],
|
"MiniMaxAI/MiniMax-M2.7": [0.3, 1.2, 0.06, 0],
|
||||||
"MiniMaxAI/MiniMax-M2.5": [0.3, 1.2, 0.03, 0],
|
"MiniMaxAI/MiniMax-M2.5": [0.3, 1.2, 0.03, 0],
|
||||||
"xiaomi/mimo-v2.5-pro": [0.435, 0.87, 0.0036, 0],
|
"deepseek/deepseek-v4-pro": [0.66, 1.98, 0.022, 0],
|
||||||
"xiaomi/mimo-v2.5": [0.14, 0.28, 0.0028, 0],
|
"deepseek/deepseek-v4-flash": [0.22, 0.66, 0.007, 0],
|
||||||
|
"deepseek/deepseek-v4-flash-vision-exp": [0.22, 0.66, 0.007, 0],
|
||||||
|
"deepseek/deepseek-v4-flash-fast": [0.28, 0.56, 0.07, 0],
|
||||||
"Qwen/Qwen3.8-Max": [2, 6, 0.25, 2.5],
|
"Qwen/Qwen3.8-Max": [2, 6, 0.25, 2.5],
|
||||||
"Qwen/Qwen3.8-27B": [0.4, 3, 0.04, 0],
|
"Qwen/Qwen3.8-27B": [0.4, 3, 0.04, 0],
|
||||||
"Qwen/Qwen3.8-Flash": [0.16, 0.47, 0.016, 0],
|
"Qwen/Qwen3.8-Flash": [0.16, 0.47, 0.016, 0],
|
||||||
@@ -40,16 +42,18 @@
|
|||||||
"Qwen/Qwen3.6-Plus": [0.5, 3, 0.1, 0],
|
"Qwen/Qwen3.6-Plus": [0.5, 3, 0.1, 0],
|
||||||
"stepfun/Step-3.7-Flash": [0.2, 1.15, 0.04, 0],
|
"stepfun/Step-3.7-Flash": [0.2, 1.15, 0.04, 0],
|
||||||
"stepfun/Step-3.5-Flash": [0.1, 0.3, 0.02, 0],
|
"stepfun/Step-3.5-Flash": [0.1, 0.3, 0.02, 0],
|
||||||
"minimax/minimax-m3-free": [0, 0, 0, 0],
|
"xiaomi/mimo-v2.5-pro": [0.435, 0.87, 0.0036, 0],
|
||||||
"minimax/minimax-m2.7-free": [0, 0, 0, 0],
|
"xiaomi/mimo-v2.5": [0.14, 0.28, 0.0028, 0],
|
||||||
"tencent/hy3-paid": [0.14, 0.58, 0.035, 0],
|
|
||||||
"tencent/hy4-preview": [0.834, 2.501, 0.042, 0],
|
|
||||||
"nvidia/nemotron-3-ultra-550b-a55b": [0.6, 2.4, 0.12, 0],
|
"nvidia/nemotron-3-ultra-550b-a55b": [0.6, 2.4, 0.12, 0],
|
||||||
|
"sakana/fugu-ultra": [5, 30, 0.5, 0],
|
||||||
"thinkingmachines/inkling": [1, 4.05, 0.17, 0],
|
"thinkingmachines/inkling": [1, 4.05, 0.17, 0],
|
||||||
"thinkingmachines/inkling-small": [0.5, 1.2, 0.1, 0],
|
"thinkingmachines/inkling-small": [0.5, 1.2, 0.1, 0],
|
||||||
"poolside/laguna-s-2.1-free": [0, 0, 0, 0],
|
"meta/muse-spark-1.1": [1.25, 4.25, 0.15, 0],
|
||||||
|
"meta/muse-spark-1.2": [1.25, 4.25, 0.15, 0],
|
||||||
|
"meta/muse-spark-1.2-contributor": [0.1, 0.2, 0.002, 0],
|
||||||
"claude-sonnet-5": [2, 10, 0.2, 2.5],
|
"claude-sonnet-5": [2, 10, 0.2, 2.5],
|
||||||
"claude-sonnet-4-6": [3, 15, 0.3, 3.75],
|
"claude-sonnet-4-6": [3, 15, 0.3, 3.75],
|
||||||
|
"claude-fable-5-1": [10, 50, 0.25, 12.5],
|
||||||
"claude-fable-5": [10, 50, 1, 12.5],
|
"claude-fable-5": [10, 50, 1, 12.5],
|
||||||
"claude-opus-5": [5, 25, 0.5, 6.25],
|
"claude-opus-5": [5, 25, 0.5, 6.25],
|
||||||
"claude-opus-4-8": [5, 25, 0.5, 6.25],
|
"claude-opus-4-8": [5, 25, 0.5, 6.25],
|
||||||
@@ -62,15 +66,11 @@
|
|||||||
"gpt-5.4": [2.5, 15, 0.25, 0],
|
"gpt-5.4": [2.5, 15, 0.25, 0],
|
||||||
"gpt-5.3-codex": [2, 8, 0.5, 0],
|
"gpt-5.3-codex": [2, 8, 0.5, 0],
|
||||||
"gpt-5.4-mini": [0.75, 4.5, 0.075, 0],
|
"gpt-5.4-mini": [0.75, 4.5, 0.075, 0],
|
||||||
"google/gemini-3.7-flash": [0.75, 3.75, 0.075, 0.04167],
|
"google/gemini-3.7-flash": [1.5, 7.5, 0.15, 0.08334],
|
||||||
"google/gemini-3.6-flash": [1.5, 7.5, 0.15, 0],
|
"google/gemini-3.6-flash": [1.5, 7.5, 0.15, 0],
|
||||||
"google/gemini-3.5-flash": [1.5, 9, 0.15, 0],
|
"google/gemini-3.5-flash": [1.5, 9, 0.15, 0],
|
||||||
"google/gemini-3.5-flash-lite": [0.3, 2.5, 0.03, 0],
|
"google/gemini-3.5-flash-lite": [0.3, 2.5, 0.03, 0],
|
||||||
"google/gemini-3.1-flash-lite": [0.25, 1.5, 0.03, 0],
|
"google/gemini-3.1-flash-lite": [0.25, 1.5, 0.03, 0],
|
||||||
"sakana/fugu-ultra": [5, 30, 0.5, 0],
|
|
||||||
"meta/muse-spark-1.1": [1.25, 4.25, 0.15, 0],
|
|
||||||
"meta/muse-spark-1.2": [1.25, 4.25, 0.15, 0],
|
|
||||||
"meta/muse-spark-1.2-contributor": [0.1, 0.2, 0.002, 0],
|
|
||||||
"xai/grok-4.5": [2, 6, 0.5, 0],
|
"xai/grok-4.5": [2, 6, 0.5, 0],
|
||||||
"xai/grok-4.6": [2, 6, 0.5, 0]
|
"xai/grok-4.6": [2, 6, 0.5, 0]
|
||||||
}
|
}
|
||||||
|
|||||||
+19
-11
@@ -27,11 +27,7 @@ const fixtureUrl = new URL("./fixtures/commandcode-model-ids.json", import.meta.
|
|||||||
const fixture = JSON.parse(await readFile(fixtureUrl, "utf-8")) as ModelCatalogSnapshot
|
const fixture = JSON.parse(await readFile(fixtureUrl, "utf-8")) as ModelCatalogSnapshot
|
||||||
const pricingFixtureUrl = new URL("./fixtures/commandcode-pricing.json", import.meta.url)
|
const pricingFixtureUrl = new URL("./fixtures/commandcode-pricing.json", import.meta.url)
|
||||||
const pricingFixture = JSON.parse(await readFile(pricingFixtureUrl, "utf-8")) as PricingSnapshot
|
const pricingFixture = JSON.parse(await readFile(pricingFixtureUrl, "utf-8")) as PricingSnapshot
|
||||||
const freeModels = new Set([
|
const freeModels = new Set(["poolside/laguna-s-2.1-free"])
|
||||||
"poolside/laguna-s-2.1-free",
|
|
||||||
"minimax/minimax-m3-free",
|
|
||||||
"minimax/minimax-m2.7-free",
|
|
||||||
])
|
|
||||||
|
|
||||||
function assertCost(
|
function assertCost(
|
||||||
modelId: string,
|
modelId: string,
|
||||||
@@ -54,7 +50,7 @@ function assertCost(
|
|||||||
describe("MODEL_COSTS pricing overlay", () => {
|
describe("MODEL_COSTS pricing overlay", () => {
|
||||||
it("covers the current Command Code model catalog snapshot", () => {
|
it("covers the current Command Code model catalog snapshot", () => {
|
||||||
assert.equal(fixture.source, "https://api.commandcode.ai/provider/v1/models")
|
assert.equal(fixture.source, "https://api.commandcode.ai/provider/v1/models")
|
||||||
assert.match(fixture.fetchedAt, /^2026-08-28T/)
|
assert.match(fixture.fetchedAt, /^2026-09-01T/)
|
||||||
|
|
||||||
const catalogIds = [...fixture.modelIds].sort()
|
const catalogIds = [...fixture.modelIds].sort()
|
||||||
const pricedIds = Object.keys(MODEL_COSTS).sort()
|
const pricedIds = Object.keys(MODEL_COSTS).sort()
|
||||||
@@ -167,10 +163,22 @@ describe("MODEL_COSTS pricing overlay", () => {
|
|||||||
cacheWrite: 0,
|
cacheWrite: 0,
|
||||||
})
|
})
|
||||||
assertCost("google/gemini-3.7-flash", {
|
assertCost("google/gemini-3.7-flash", {
|
||||||
input: 0.75,
|
input: 1.5,
|
||||||
output: 3.75,
|
output: 7.5,
|
||||||
cacheRead: 0.075,
|
cacheRead: 0.15,
|
||||||
cacheWrite: 0.04167,
|
cacheWrite: 0.08334,
|
||||||
|
})
|
||||||
|
assertCost("claude-fable-5-1", {
|
||||||
|
input: 10,
|
||||||
|
output: 50,
|
||||||
|
cacheRead: 0.25,
|
||||||
|
cacheWrite: 12.5,
|
||||||
|
})
|
||||||
|
assertCost("deepseek/deepseek-v4-flash-fast", {
|
||||||
|
input: 0.28,
|
||||||
|
output: 0.56,
|
||||||
|
cacheRead: 0.07,
|
||||||
|
cacheWrite: 0,
|
||||||
})
|
})
|
||||||
assertCost("meta/muse-spark-1.2-contributor", {
|
assertCost("meta/muse-spark-1.2-contributor", {
|
||||||
input: 0.1,
|
input: 0.1,
|
||||||
@@ -218,7 +226,7 @@ describe("MODEL_COSTS pricing overlay", () => {
|
|||||||
|
|
||||||
it("tracks pricing provenance", () => {
|
it("tracks pricing provenance", () => {
|
||||||
assert.equal(PRICING_SOURCE_URL, "https://commandcode.ai/docs/resources/pricing-limits")
|
assert.equal(PRICING_SOURCE_URL, "https://commandcode.ai/docs/resources/pricing-limits")
|
||||||
assert.equal(PRICING_LAST_VERIFIED, "2026-08-28")
|
assert.equal(PRICING_LAST_VERIFIED, "2026-09-01")
|
||||||
})
|
})
|
||||||
|
|
||||||
it("fails once temporary pricing needs review", () => {
|
it("fails once temporary pricing needs review", () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user