diff --git a/src/providers/registry/model-seeds.ts b/src/providers/registry/model-seeds.ts index 1d6884aabfb..c5b672581da 100644 --- a/src/providers/registry/model-seeds.ts +++ b/src/providers/registry/model-seeds.ts @@ -637,11 +637,13 @@ export const ALIBABA_TOKEN_PLAN_PRESERVE_REASONING = [ // entitlement tiers. Bare `k3` advertises the Moderato 256K ceiling; the local `[1m]` // alias advertises Allegretto's 1M ceiling and is stripped before the upstream request. // The separately billed Moonshot API uses `kimi-k3`. +// 260921: `k3-256k` is the same K3 served under the explicit ceiling id (verified live +// 260921: same 988-token scaffold and identity answer as bare `k3` on the same input). // Evidence: https://www.kimi.com/code/docs/en/kimi-code/models.html // https://www.kimi.com/code/docs/en/kimi-code/error-reference.html export const KIMI_K3_STANDARD_CONTEXT_WINDOW = 262_144; export const KIMI_K3_1M_CONTEXT_WINDOW = 1_048_576; -export const KIMI_CODING_K3_MODELS = ["k3", "k3[1m]"]; +export const KIMI_CODING_K3_MODELS = ["k3", "k3[1m]", "k3-256k"]; // 260921 Kimi K2.8: `kimi-for-coding` is the stable subscription alias Moonshot re-points // at each coding release. Live GET /coding/v1/models lists only kimi-for-coding[-highspeed], // k3, k3-256k — the k2.x ids are retired from the subscription endpoint. Since K2.8 Preview diff --git a/src/usage/expected-prices.ts b/src/usage/expected-prices.ts index 351b6a00d27..5ab640d88a0 100644 --- a/src/usage/expected-prices.ts +++ b/src/usage/expected-prices.ts @@ -286,6 +286,7 @@ export const EXPECTED_PRICE_OVERLAYS: readonly ExpectedPriceOverlay[] = [ // kimi-code = API key surface (expected list price, not actual billing). { provider: "kimi", modelId: "k3", cost4: KIMI_K3, source: KIMI_PRICING, verifiedAt: "2026-07-20", status: "verified-derived" }, { provider: "kimi", modelId: "k3[1m]", cost4: KIMI_K3, source: `derived: k3 (official docs: k3[1m] is the 1M-context compat notation for k3) ${KIMI_PRICING}`, verifiedAt: "2026-07-20", status: "verified-derived" }, + { provider: "kimi", modelId: "k3-256k", cost4: KIMI_K3, source: `derived: k3 (verified live 260921: same K3 served under the explicit ceiling id; identical prompt scaffold as bare k3) ${KIMI_PRICING}`, verifiedAt: "2026-09-21", status: "verified-derived" }, { provider: "kimi", modelId: "kimi-k2.7-code", cost4: KIMI_K27_CODE, source: KIMI_PRICING, verifiedAt: "2026-07-20", status: "verified-derived" }, { provider: "kimi", modelId: "kimi-k2.7-code-highspeed", cost4: KIMI_K27_CODE_HIGHSPEED, source: KIMI_PRICING, verifiedAt: "2026-07-20", status: "verified-derived" }, { provider: "kimi", modelId: "kimi-k2.6", cost4: KIMI_K26, source: KIMI_PRICING, verifiedAt: "2026-07-20", status: "verified-derived" }, @@ -298,6 +299,7 @@ export const EXPECTED_PRICE_OVERLAYS: readonly ExpectedPriceOverlay[] = [ { provider: "moonshot", modelId: "kimi-k2.5", cost4: KIMI_K25, source: KIMI_PRICING, verifiedAt: "2026-07-20", status: "verified-derived" }, { provider: "kimi-code", modelId: "k3", cost4: KIMI_K3, source: KIMI_PRICING, verifiedAt: "2026-07-20", status: "verified-derived" }, { provider: "kimi-code", modelId: "k3[1m]", cost4: KIMI_K3, source: `derived: k3 ${KIMI_PRICING}`, verifiedAt: "2026-07-20", status: "verified-derived" }, + { provider: "kimi-code", modelId: "k3-256k", cost4: KIMI_K3, source: `derived: k3 (verified live 260921: same K3 served under the explicit ceiling id) ${KIMI_PRICING}`, verifiedAt: "2026-09-21", status: "verified-derived" }, { provider: "kimi-code", modelId: "kimi-k2.7-code", cost4: KIMI_K27_CODE, source: KIMI_PRICING, verifiedAt: "2026-07-20", status: "verified-derived" }, { provider: "kimi-code", modelId: "kimi-k2.7-code-highspeed", cost4: KIMI_K27_CODE_HIGHSPEED, source: KIMI_PRICING, verifiedAt: "2026-07-20", status: "verified-derived" }, { provider: "kimi-code", modelId: "kimi-k2.6", cost4: KIMI_K26, source: KIMI_PRICING, verifiedAt: "2026-07-20", status: "verified-derived" }, diff --git a/tests/providers/provider-registry-parity.test.ts b/tests/providers/provider-registry-parity.test.ts index cf4d5b3bd78..70931a206c2 100644 --- a/tests/providers/provider-registry-parity.test.ts +++ b/tests/providers/provider-registry-parity.test.ts @@ -950,7 +950,7 @@ describe("provider registry parity", () => { // k3-256k). Seeding a retired id in a metadata list would re-arm the model-rename // migration on every boot (#5066); saved rows still naming one are repaired by // MODEL_RENAMES instead. - const codingModels = ["k3", "k3[1m]", "kimi-for-coding"]; + const codingModels = ["k3", "k3[1m]", "k3-256k", "kimi-for-coding"]; const parityLists = [ "noReasoningModels", "noTemperatureModels", diff --git a/tests/usage/usage-cost.test.ts b/tests/usage/usage-cost.test.ts index dffe93f2ab2..79f49fbc195 100644 --- a/tests/usage/usage-cost.test.ts +++ b/tests/usage/usage-cost.test.ts @@ -328,8 +328,8 @@ describe("resolveMatchedPrice", () => { expect(resolveMatchedPrice("openrouter", "anthropic-claude-3.5-sonnet")).toBeNull(); }); - test("16. shipped overlay membership: 126 keys, including canonical Fable 5.1, Opus 5, OpenCode Go and compatibility prices", () => { - expect(EXPECTED_PRICE_OVERLAYS.length).toBe(126); + test("16. shipped overlay membership: 128 keys, including canonical Fable 5.1, Opus 5, OpenCode Go and compatibility prices", () => { + expect(EXPECTED_PRICE_OVERLAYS.length).toBe(128); expect(EXPECTED_PRICE_OVERLAYS.some(row => row.status === "unverified")).toBe(false); const keys = new Set(EXPECTED_PRICE_OVERLAYS.map(row => `${row.provider}/${row.modelId}`)); for (const expected of [ @@ -380,6 +380,7 @@ describe("resolveMatchedPrice", () => { "google-antigravity/gpt-oss-120b-medium", "kimi/k3", "kimi/k3[1m]", + "kimi/k3-256k", "kimi/kimi-k2.7-code", "kimi/kimi-k2.7-code-highspeed", "kimi/kimi-k2.6", @@ -392,6 +393,7 @@ describe("resolveMatchedPrice", () => { "moonshot/kimi-k2.5", "kimi-code/k3", "kimi-code/k3[1m]", + "kimi-code/k3-256k", "kimi-code/kimi-k2.7-code", "kimi-code/kimi-k2.7-code-highspeed", "kimi-code/kimi-k2.6",