Merge pull request #65 from ThomasByr/main
feat(models): add GLM5.3-Flash and Qwen3.8-Flash # Conflicts: # CHANGELOG.md
This commit is contained in:
@@ -3,6 +3,9 @@
|
||||
## Unreleased
|
||||
|
||||
- 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.
|
||||
- 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 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`.
|
||||
|
||||
## 0.6.0 - 2026-08-25
|
||||
|
||||
|
||||
@@ -135,7 +135,7 @@ The following environment variables are intended for tests, local mocks, and com
|
||||
|
||||
## Image input
|
||||
|
||||
The provider advertises image input only for models marked with the `image` input modality in the official Command Code CLI model catalog. The capability snapshot currently follows `command-code@1.32.2`; unknown models default to text-only until their upstream metadata is reviewed. A daily GitHub Actions job synchronizes the CLI version, image capabilities, reasoning flags, reasoning efforts, and model-specific output limits with the latest published CLI package and opens or updates a reviewable pull request when they change. Pricing remains manually reviewed because temporary promotions and long-context tiers require explicit review.
|
||||
The provider advertises image input only for models marked with the `image` input modality in the official Command Code CLI model catalog. The capability snapshot currently follows `command-code@1.36.0`; unknown models default to text-only until their upstream metadata is reviewed. A daily GitHub Actions job synchronizes the CLI version, image capabilities, reasoning flags, reasoning efforts, and model-specific output limits with the latest published CLI package and opens or updates a reviewable pull request when they change. Pricing remains manually reviewed because temporary promotions and long-context tiers require explicit review.
|
||||
|
||||
For vision-capable models, Pi's native provider adapters forward image blocks from user messages and tool results using the documented OpenAI or Anthropic message schema. Unknown and text-only models remain marked text-only in Pi.
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
export const COMMAND_CODE_CLI_VERSION = "1.32.2"
|
||||
export const COMMAND_CODE_CLI_VERSION = "1.36.0"
|
||||
|
||||
export type CommandCodeInputType = "text" | "image"
|
||||
export type CommandCodeReasoningEffort = "minimal" | "low" | "medium" | "high" | "xhigh" | "max"
|
||||
|
||||
/**
|
||||
* Generated from command-code@1.32.2 by `npm run sync:commandcode-catalog`.
|
||||
* Generated from command-code@1.36.0 by `npm run sync:commandcode-catalog`.
|
||||
* Do not edit manually.
|
||||
*/
|
||||
export const MODEL_INPUT_MODALITIES: Readonly<Record<string, readonly CommandCodeInputType[]>> = {
|
||||
@@ -31,6 +31,7 @@ export const MODEL_INPUT_MODALITIES: Readonly<Record<string, readonly CommandCod
|
||||
"meta/muse-spark-1.1": ["text", "image"],
|
||||
"meta/muse-spark-1.2": ["text", "image"],
|
||||
"meta/muse-spark-1.2-contributor": ["text", "image"],
|
||||
"minimax/minimax-m3-free": ["text", "image"],
|
||||
"MiniMaxAI/MiniMax-M3": ["text", "image"],
|
||||
"moonshotai/Kimi-K2.5": ["text", "image"],
|
||||
"moonshotai/Kimi-K2.6": ["text", "image"],
|
||||
@@ -41,14 +42,15 @@ export const MODEL_INPUT_MODALITIES: Readonly<Record<string, readonly CommandCod
|
||||
"Qwen/Qwen3.7-Flash": ["text", "image"],
|
||||
"Qwen/Qwen3.7-Plus": ["text", "image"],
|
||||
"Qwen/Qwen3.8-27B": ["text", "image"],
|
||||
"Qwen/Qwen3.8-Flash": ["text", "image"],
|
||||
"Qwen/Qwen3.8-Max": ["text", "image"],
|
||||
"sakana/fugu-ultra": ["text", "image"],
|
||||
"stealth/ox-alpha": ["text", "image"],
|
||||
"stepfun/Step-3.7-Flash": ["text", "image"],
|
||||
"thinkingmachines/inkling": ["text", "image"],
|
||||
"thinkingmachines/inkling-small": ["text", "image"],
|
||||
"xai/grok-4.5": ["text", "image"],
|
||||
"xiaomi/mimo-v2.5": ["text", "image"],
|
||||
"z-ai/glm-5.3-flash": ["text", "image"],
|
||||
}
|
||||
|
||||
export const MODEL_REASONING: Readonly<Record<string, true>> = {
|
||||
@@ -76,6 +78,7 @@ export const MODEL_REASONING: Readonly<Record<string, true>> = {
|
||||
"meta/muse-spark-1.1": true,
|
||||
"meta/muse-spark-1.2": true,
|
||||
"meta/muse-spark-1.2-contributor": true,
|
||||
"minimax/minimax-m3-free": true,
|
||||
"MiniMaxAI/MiniMax-M3": true,
|
||||
"moonshotai/Kimi-K2.7-Code": true,
|
||||
"moonshotai/Kimi-K2.7-Code-Highspeed": true,
|
||||
@@ -88,9 +91,9 @@ export const MODEL_REASONING: Readonly<Record<string, true>> = {
|
||||
"Qwen/Qwen3.7-Max": true,
|
||||
"Qwen/Qwen3.7-Plus": true,
|
||||
"Qwen/Qwen3.8-27B": true,
|
||||
"Qwen/Qwen3.8-Flash": true,
|
||||
"Qwen/Qwen3.8-Max": true,
|
||||
"sakana/fugu-ultra": true,
|
||||
"stealth/ox-alpha": true,
|
||||
"stepfun/Step-3.5-Flash": true,
|
||||
"stepfun/Step-3.7-Flash": true,
|
||||
"tencent/hy3-paid": true,
|
||||
@@ -98,6 +101,7 @@ export const MODEL_REASONING: Readonly<Record<string, true>> = {
|
||||
"thinkingmachines/inkling-small": true,
|
||||
"xai/grok-4.5": true,
|
||||
"xai/grok-4.6": true,
|
||||
"z-ai/glm-5.3-flash": true,
|
||||
"zai-org/GLM-5.2": true,
|
||||
"zai-org/GLM-5.3": true,
|
||||
}
|
||||
@@ -125,11 +129,12 @@ export const MODEL_EFFORTS: Readonly<Record<string, readonly CommandCodeReasonin
|
||||
"gpt-5.6-sol": ["low", "medium", "high", "xhigh", "max"],
|
||||
"gpt-5.6-terra": ["low", "medium", "high", "xhigh", "max"],
|
||||
"Qwen/Qwen3.8-27B": ["low", "medium", "xhigh"],
|
||||
"Qwen/Qwen3.8-Flash": ["low", "medium", "xhigh"],
|
||||
"Qwen/Qwen3.8-Max": ["low", "medium", "xhigh"],
|
||||
"sakana/fugu-ultra": ["high", "xhigh"],
|
||||
"stealth/ox-alpha": ["low", "high", "max"],
|
||||
"xai/grok-4.5": ["low", "medium", "high"],
|
||||
"xai/grok-4.6": ["low", "medium", "high", "xhigh"],
|
||||
"z-ai/glm-5.3-flash": ["low", "high", "max"],
|
||||
"zai-org/GLM-5.2": ["high", "max"],
|
||||
"zai-org/GLM-5.3": ["low", "high", "max"],
|
||||
}
|
||||
@@ -137,5 +142,5 @@ export const MODEL_EFFORTS: Readonly<Record<string, readonly CommandCodeReasonin
|
||||
export const MODEL_MAX_OUTPUT_TOKENS: Readonly<Record<string, number>> = {
|
||||
"poolside/laguna-s-2.1-free": 32_768,
|
||||
"Qwen/Qwen3.8-27B": 32_768,
|
||||
"stealth/ox-alpha": 131_072,
|
||||
"z-ai/glm-5.3-flash": 131_072,
|
||||
}
|
||||
|
||||
+11
-2
@@ -20,7 +20,7 @@ export interface TemporaryPricing {
|
||||
}
|
||||
|
||||
export const PRICING_SOURCE_URL = "https://commandcode.ai/docs/resources/pricing-limits"
|
||||
export const PRICING_LAST_VERIFIED = "2026-08-25"
|
||||
export const PRICING_LAST_VERIFIED = "2026-08-28"
|
||||
|
||||
export const ZERO_MODEL_COST: CommandCodeModelCost = {
|
||||
input: 0,
|
||||
@@ -40,10 +40,12 @@ export const ZERO_MODEL_COST: CommandCodeModelCost = {
|
||||
export const MODEL_COSTS: Readonly<Record<string, CommandCodeModelCost>> = {
|
||||
// Free models
|
||||
"poolside/laguna-s-2.1-free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
||||
"stealth/ox-alpha": { 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
|
||||
"tencent/hy3-paid": { input: 0.14, output: 0.58, cacheRead: 0.035, cacheWrite: 0 },
|
||||
"tencent/hy4-preview": { input: 0.834, output: 2.501, cacheRead: 0.042, cacheWrite: 0 },
|
||||
"moonshotai/Kimi-K3": { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 },
|
||||
"moonshotai/Kimi-K2.7-Code": { input: 0.95, output: 4, cacheRead: 0.19, cacheWrite: 0 },
|
||||
"moonshotai/Kimi-K2.7-Code-Highspeed": {
|
||||
@@ -54,6 +56,7 @@ export const MODEL_COSTS: Readonly<Record<string, CommandCodeModelCost>> = {
|
||||
},
|
||||
"moonshotai/Kimi-K2.6": { input: 0.95, output: 4, cacheRead: 0.16, cacheWrite: 0 },
|
||||
"moonshotai/Kimi-K2.5": { input: 0.6, output: 3, cacheRead: 0.1, cacheWrite: 0 },
|
||||
"z-ai/glm-5.3-flash": { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 },
|
||||
"zai-org/GLM-5.3": { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 },
|
||||
"zai-org/GLM-5.2": { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 },
|
||||
"zai-org/GLM-5.2-Fast": { input: 3, output: 10.25, cacheRead: 0.5, cacheWrite: 0 },
|
||||
@@ -84,6 +87,7 @@ export const MODEL_COSTS: Readonly<Record<string, CommandCodeModelCost>> = {
|
||||
},
|
||||
"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-Flash": { input: 0.16, output: 0.47, cacheRead: 0.016, cacheWrite: 0 },
|
||||
"Qwen/Qwen3.7-Max": { input: 2.5, output: 7.5, cacheRead: 0.5, cacheWrite: 3.13 },
|
||||
"Qwen/Qwen3.7-Plus": {
|
||||
input: 0.4,
|
||||
@@ -231,4 +235,9 @@ export const TEMPORARY_PRICING: readonly TemporaryPricing[] = [
|
||||
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",
|
||||
},
|
||||
]
|
||||
|
||||
+6
-2
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"fetchedAt": "2026-08-25T13:32:11.631Z",
|
||||
"fetchedAt": "2026-08-28T09:27:52.554Z",
|
||||
"source": "https://api.commandcode.ai/provider/v1/models",
|
||||
"modelIds": [
|
||||
"claude-sonnet-5",
|
||||
@@ -24,6 +24,7 @@
|
||||
"moonshotai/Kimi-K2.7-Code-Highspeed",
|
||||
"moonshotai/Kimi-K2.6",
|
||||
"moonshotai/Kimi-K2.5",
|
||||
"z-ai/glm-5.3-flash",
|
||||
"zai-org/GLM-5.3",
|
||||
"zai-org/GLM-5.2",
|
||||
"zai-org/GLM-5.2-Fast",
|
||||
@@ -31,11 +32,14 @@
|
||||
"zai-org/GLM-5",
|
||||
"MiniMaxAI/MiniMax-M3",
|
||||
"MiniMaxAI/MiniMax-M2.7",
|
||||
"minimax/minimax-m3-free",
|
||||
"minimax/minimax-m2.7-free",
|
||||
"MiniMaxAI/MiniMax-M2.5",
|
||||
"xiaomi/mimo-v2.5-pro",
|
||||
"xiaomi/mimo-v2.5",
|
||||
"Qwen/Qwen3.8-Max",
|
||||
"Qwen/Qwen3.8-27B",
|
||||
"Qwen/Qwen3.8-Flash",
|
||||
"Qwen/Qwen3.7-Max",
|
||||
"Qwen/Qwen3.7-Plus",
|
||||
"Qwen/Qwen3.7-Flash",
|
||||
@@ -44,6 +48,7 @@
|
||||
"stepfun/Step-3.7-Flash",
|
||||
"stepfun/Step-3.5-Flash",
|
||||
"tencent/hy3-paid",
|
||||
"tencent/hy4-preview",
|
||||
"google/gemini-3.7-flash",
|
||||
"google/gemini-3.6-flash",
|
||||
"google/gemini-3.5-flash",
|
||||
@@ -53,7 +58,6 @@
|
||||
"nvidia/nemotron-3-ultra-550b-a55b",
|
||||
"thinkingmachines/inkling",
|
||||
"thinkingmachines/inkling-small",
|
||||
"stealth/ox-alpha",
|
||||
"poolside/laguna-s-2.1-free",
|
||||
"meta/muse-spark-1.1",
|
||||
"meta/muse-spark-1.2",
|
||||
|
||||
+6
-2
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"verifiedAt": "2026-08-25",
|
||||
"verifiedAt": "2026-08-28",
|
||||
"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.",
|
||||
"tiers": {
|
||||
@@ -19,6 +19,7 @@
|
||||
"moonshotai/Kimi-K2.7-Code-Highspeed": [1.9, 8, 0.38, 0],
|
||||
"moonshotai/Kimi-K2.6": [0.95, 4, 0.16, 0],
|
||||
"moonshotai/Kimi-K2.5": [0.6, 3, 0.1, 0],
|
||||
"z-ai/glm-5.3-flash": [0.15, 0.5, 0.03, 0],
|
||||
"zai-org/GLM-5.3": [1.4, 4.4, 0.26, 0],
|
||||
"zai-org/GLM-5.2": [1.4, 4.4, 0.26, 0],
|
||||
"zai-org/GLM-5.2-Fast": [3, 10.25, 0.5, 0],
|
||||
@@ -31,6 +32,7 @@
|
||||
"xiaomi/mimo-v2.5": [0.14, 0.28, 0.0028, 0],
|
||||
"Qwen/Qwen3.8-Max": [2, 6, 0.25, 2.5],
|
||||
"Qwen/Qwen3.8-27B": [0.4, 3, 0.04, 0],
|
||||
"Qwen/Qwen3.8-Flash": [0.16, 0.47, 0.016, 0],
|
||||
"Qwen/Qwen3.7-Max": [2.5, 7.5, 0.5, 3.13],
|
||||
"Qwen/Qwen3.7-Plus": [0.4, 1.6, 0.08, 0.5],
|
||||
"Qwen/Qwen3.7-Flash": [0.03, 0.13, 0.006, 0.038],
|
||||
@@ -38,12 +40,14 @@
|
||||
"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.5-Flash": [0.1, 0.3, 0.02, 0],
|
||||
"minimax/minimax-m3-free": [0, 0, 0, 0],
|
||||
"minimax/minimax-m2.7-free": [0, 0, 0, 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],
|
||||
"thinkingmachines/inkling": [1, 4.05, 0.17, 0],
|
||||
"thinkingmachines/inkling-small": [0.5, 1.2, 0.1, 0],
|
||||
"poolside/laguna-s-2.1-free": [0, 0, 0, 0],
|
||||
"stealth/ox-alpha": [0, 0, 0, 0],
|
||||
"claude-sonnet-5": [2, 10, 0.2, 2.5],
|
||||
"claude-sonnet-4-6": [3, 15, 0.3, 3.75],
|
||||
"claude-fable-5": [10, 50, 1, 12.5],
|
||||
|
||||
+23
-5
@@ -112,13 +112,15 @@ describe("commandCodeModelsFromApiResponse()", () => {
|
||||
])
|
||||
assert.deepEqual(inputModalitiesForModel("Qwen/Qwen3.8-27B"), ["text", "image"])
|
||||
assert.deepEqual(inputModalitiesForModel("google/gemini-3.7-flash"), ["text", "image"])
|
||||
assert.deepEqual(inputModalitiesForModel("stealth/ox-alpha"), ["text", "image"])
|
||||
assert.deepEqual(inputModalitiesForModel("Qwen/Qwen3.8-Flash"), ["text", "image"])
|
||||
assert.deepEqual(inputModalitiesForModel("z-ai/glm-5.3-flash"), ["text", "image"])
|
||||
assert.deepEqual(inputModalitiesForModel("minimax/minimax-m3-free"), ["text", "image"])
|
||||
assert.deepEqual(inputModalitiesForModel("deepseek/deepseek-v4-pro"), ["text"])
|
||||
assert.deepEqual(inputModalitiesForModel("zai-org/GLM-5.3"), ["text"])
|
||||
assert.deepEqual(inputModalitiesForModel("unknown-new-model"), ["text"])
|
||||
assert.equal(modelSupportsImageInput("gpt-5.6-luna"), true)
|
||||
assert.equal(modelSupportsImageInput("deepseek/deepseek-v4-flash-vision-exp"), true)
|
||||
assert.equal(modelSupportsImageInput("stealth/ox-alpha"), true)
|
||||
assert.equal(modelSupportsImageInput("z-ai/glm-5.3-flash"), true)
|
||||
assert.equal(modelSupportsImageInput("deepseek/deepseek-v4-pro"), false)
|
||||
assert.ok(Object.keys(MODEL_INPUT_MODALITIES).length > 0)
|
||||
for (const modalities of Object.values(MODEL_INPUT_MODALITIES)) {
|
||||
@@ -149,7 +151,7 @@ describe("commandCodeModelsFromApiResponse()", () => {
|
||||
},
|
||||
})
|
||||
assert.equal(models[2]?.reasoning, false)
|
||||
assert.equal(Object.keys(MODEL_REASONING).length, 48)
|
||||
assert.equal(Object.keys(MODEL_REASONING).length, 50)
|
||||
})
|
||||
|
||||
it("uses model-specific output limits from the CLI catalog", () => {
|
||||
@@ -157,7 +159,7 @@ describe("commandCodeModelsFromApiResponse()", () => {
|
||||
object: "list",
|
||||
data: [
|
||||
{ ...API_RESPONSE.data[0], id: "Qwen/Qwen3.8-27B", context_length: 262_144 },
|
||||
{ ...API_RESPONSE.data[0], id: "stealth/ox-alpha", context_length: 1_048_576 },
|
||||
{ ...API_RESPONSE.data[0], id: "z-ai/glm-5.3-flash", context_length: 1_048_576 },
|
||||
{
|
||||
...API_RESPONSE.data[0],
|
||||
id: "poolside/laguna-s-2.1-free",
|
||||
@@ -170,7 +172,7 @@ describe("commandCodeModelsFromApiResponse()", () => {
|
||||
models.map(({ id, maxTokens }) => ({ id, maxTokens })),
|
||||
[
|
||||
{ id: "Qwen/Qwen3.8-27B", maxTokens: 32_768 },
|
||||
{ id: "stealth/ox-alpha", maxTokens: 131_072 },
|
||||
{ id: "z-ai/glm-5.3-flash", maxTokens: 131_072 },
|
||||
{ id: "poolside/laguna-s-2.1-free", maxTokens: 32_768 },
|
||||
],
|
||||
)
|
||||
@@ -217,6 +219,22 @@ describe("commandCodeModelsFromApiResponse()", () => {
|
||||
xhigh: null,
|
||||
max: "max",
|
||||
})
|
||||
assert.deepEqual(thinkingLevelMapForEfforts(MODEL_EFFORTS["Qwen/Qwen3.8-Flash"]), {
|
||||
minimal: null,
|
||||
low: "low",
|
||||
medium: "medium",
|
||||
high: null,
|
||||
xhigh: "xhigh",
|
||||
max: null,
|
||||
})
|
||||
assert.deepEqual(thinkingLevelMapForEfforts(MODEL_EFFORTS["z-ai/glm-5.3-flash"]), {
|
||||
minimal: null,
|
||||
low: "low",
|
||||
medium: null,
|
||||
high: "high",
|
||||
xhigh: null,
|
||||
max: "max",
|
||||
})
|
||||
assert.deepEqual(thinkingMetadataForModel("new-model-without-metadata"), undefined)
|
||||
})
|
||||
|
||||
|
||||
+25
-3
@@ -27,7 +27,11 @@ const fixtureUrl = new URL("./fixtures/commandcode-model-ids.json", import.meta.
|
||||
const fixture = JSON.parse(await readFile(fixtureUrl, "utf-8")) as ModelCatalogSnapshot
|
||||
const pricingFixtureUrl = new URL("./fixtures/commandcode-pricing.json", import.meta.url)
|
||||
const pricingFixture = JSON.parse(await readFile(pricingFixtureUrl, "utf-8")) as PricingSnapshot
|
||||
const freeModels = new Set(["poolside/laguna-s-2.1-free", "stealth/ox-alpha"])
|
||||
const freeModels = new Set([
|
||||
"poolside/laguna-s-2.1-free",
|
||||
"minimax/minimax-m3-free",
|
||||
"minimax/minimax-m2.7-free",
|
||||
])
|
||||
|
||||
function assertCost(
|
||||
modelId: string,
|
||||
@@ -50,7 +54,7 @@ function assertCost(
|
||||
describe("MODEL_COSTS pricing overlay", () => {
|
||||
it("covers the current Command Code model catalog snapshot", () => {
|
||||
assert.equal(fixture.source, "https://api.commandcode.ai/provider/v1/models")
|
||||
assert.match(fixture.fetchedAt, /^2026-08-25T/)
|
||||
assert.match(fixture.fetchedAt, /^2026-08-28T/)
|
||||
|
||||
const catalogIds = [...fixture.modelIds].sort()
|
||||
const pricedIds = Object.keys(MODEL_COSTS).sort()
|
||||
@@ -144,6 +148,24 @@ describe("MODEL_COSTS pricing overlay", () => {
|
||||
cacheRead: 0.04,
|
||||
cacheWrite: 0,
|
||||
})
|
||||
assertCost("Qwen/Qwen3.8-Flash", {
|
||||
input: 0.16,
|
||||
output: 0.47,
|
||||
cacheRead: 0.016,
|
||||
cacheWrite: 0,
|
||||
})
|
||||
assertCost("z-ai/glm-5.3-flash", {
|
||||
input: 0.15,
|
||||
output: 0.5,
|
||||
cacheRead: 0.03,
|
||||
cacheWrite: 0,
|
||||
})
|
||||
assertCost("tencent/hy4-preview", {
|
||||
input: 0.834,
|
||||
output: 2.501,
|
||||
cacheRead: 0.042,
|
||||
cacheWrite: 0,
|
||||
})
|
||||
assertCost("google/gemini-3.7-flash", {
|
||||
input: 0.75,
|
||||
output: 3.75,
|
||||
@@ -196,7 +218,7 @@ describe("MODEL_COSTS pricing overlay", () => {
|
||||
|
||||
it("tracks pricing provenance", () => {
|
||||
assert.equal(PRICING_SOURCE_URL, "https://commandcode.ai/docs/resources/pricing-limits")
|
||||
assert.equal(PRICING_LAST_VERIFIED, "2026-08-25")
|
||||
assert.equal(PRICING_LAST_VERIFIED, "2026-08-28")
|
||||
})
|
||||
|
||||
it("fails once temporary pricing needs review", () => {
|
||||
|
||||
Reference in New Issue
Block a user