From 5d9ed144f4c9e3041663454d8d98894fb1c32f88 Mon Sep 17 00:00:00 2001 From: Diego Rodrigues de Sa e Souza Date: Wed, 19 Aug 2026 12:49:49 -0300 Subject: [PATCH] fix(providers): prune 10 retired crof model ids from the seed catalog (#10577) (#10761) Co-authored-by: Markus Hartung --- .../fixes/10577-crof-stale-seed-catalog.md | 1 + .../config/providers/registry/crof/index.ts | 55 ------------------- tests/unit/crof-provider.test.ts | 9 +-- tests/unit/crof-stale-seed-10577.test.ts | 34 ++++++++++++ 4 files changed, 37 insertions(+), 62 deletions(-) create mode 100644 changelog.d/fixes/10577-crof-stale-seed-catalog.md create mode 100644 tests/unit/crof-stale-seed-10577.test.ts diff --git a/changelog.d/fixes/10577-crof-stale-seed-catalog.md b/changelog.d/fixes/10577-crof-stale-seed-catalog.md new file mode 100644 index 0000000000..c4fa4da086 --- /dev/null +++ b/changelog.d/fixes/10577-crof-stale-seed-catalog.md @@ -0,0 +1 @@ +- fix(providers): remove 10 retired model ids from the crof seed catalog so /v1/models stops advertising models crof.ai no longer serves (#10577) diff --git a/open-sse/config/providers/registry/crof/index.ts b/open-sse/config/providers/registry/crof/index.ts index 57bba3e491..7f7855f40a 100644 --- a/open-sse/config/providers/registry/crof/index.ts +++ b/open-sse/config/providers/registry/crof/index.ts @@ -12,24 +12,12 @@ export const crofProvider: RegistryEntry = { // Seed list — runtime /v1/models discovery keeps this fresh. // Source: GET https://crof.ai/v1/models (2026-08-10; includes models absent from the 2026-05-17 roster). models: [ - { - id: "deepseek-v4-pro-precision", - name: "DeepSeek V4 Pro (Precision)", - supportsReasoning: true, - supportedThinkingEfforts: CROF_REASONING_EFFORTS, - }, { id: "deepseek-v4-pro", name: "DeepSeek V4 Pro", supportsReasoning: true, supportedThinkingEfforts: CROF_REASONING_EFFORTS, }, - { - id: "deepseek-v4-pro-lightning", - name: "DeepSeek V4 Pro (Lightning)", - supportsReasoning: true, - supportedThinkingEfforts: CROF_REASONING_EFFORTS, - }, { id: "deepseek-v4-flash", name: "DeepSeek V4 Flash", @@ -43,12 +31,6 @@ export const crofProvider: RegistryEntry = { supportedThinkingEfforts: CROF_REASONING_EFFORTS, }, { id: "deepseek-v3.2", name: "DeepSeek V3.2" }, - { - id: "kimi-k2.6-precision", - name: "Kimi K2.6 (Precision)", - supportsReasoning: true, - supportedThinkingEfforts: CROF_REASONING_EFFORTS, - }, { id: "kimi-k2.6", name: "Kimi K2.6", @@ -73,24 +55,6 @@ export const crofProvider: RegistryEntry = { supportsReasoning: true, supportedThinkingEfforts: CROF_REASONING_EFFORTS, }, - { - id: "kimi-k2.5-lightning", - name: "Kimi K2.5 (Lightning)", - supportsReasoning: true, - supportedThinkingEfforts: CROF_REASONING_EFFORTS, - }, - { - id: "kimi-k2.5", - name: "Kimi K2.5", - supportsReasoning: true, - supportedThinkingEfforts: CROF_REASONING_EFFORTS, - }, - { - id: "glm-5.1-precision", - name: "GLM 5.1 (Precision)", - supportsReasoning: true, - supportedThinkingEfforts: CROF_REASONING_EFFORTS, - }, { id: "glm-5.1", name: "GLM 5.1", @@ -103,24 +67,6 @@ export const crofProvider: RegistryEntry = { supportsReasoning: true, supportedThinkingEfforts: CROF_REASONING_EFFORTS, }, - { - id: "glm-4.7", - name: "GLM 4.7", - supportsReasoning: true, - supportedThinkingEfforts: CROF_REASONING_EFFORTS, - }, - { - id: "glm-4.7-flash", - name: "GLM 4.7 Flash", - supportsReasoning: true, - supportedThinkingEfforts: CROF_REASONING_EFFORTS, - }, - { - id: "mimo-v2.5-pro-precision", - name: "Mimo 2.5 Pro (Precision)", - supportsReasoning: true, - supportedThinkingEfforts: CROF_REASONING_EFFORTS, - }, { id: "mimo-v2.5-pro", name: "Mimo 2.5 Pro", @@ -133,7 +79,6 @@ export const crofProvider: RegistryEntry = { supportsReasoning: true, supportedThinkingEfforts: CROF_REASONING_EFFORTS, }, - { id: "minimax-m2.5", name: "MiniMax M2.5" }, { id: "qwen3.6-27b", name: "Qwen3.6 27B", diff --git a/tests/unit/crof-provider.test.ts b/tests/unit/crof-provider.test.ts index 09c46f8638..94004f5a08 100644 --- a/tests/unit/crof-provider.test.ts +++ b/tests/unit/crof-provider.test.ts @@ -57,20 +57,15 @@ test("CrofAI seed list covers every live reasoning-capable model id", () => { // Regression guard: every model the live /v1/models roster flags with // `reasoning_effort: true` must have a seed entry with effort tiers, so a // stale synced cache never silently drops their effort aliases. Snapshot of - // GET https://crof.ai/v1/models (2026-08-10) — update deliberately when the - // roster changes. + // GET https://crof.ai/v1/models (2026-08-19; #10577 removed 10 retired ids + // no longer served live) — update deliberately when the roster changes. const liveReasoningIds = [ "deepseek-v4-flash", "deepseek-v4-flash-0731", "deepseek-v4-pro", - "deepseek-v4-pro-lightning", "gemma-4-31b-it", - "glm-4.7", - "glm-4.7-flash", "glm-5.1", "glm-5.2", - "kimi-k2.5", - "kimi-k2.5-lightning", "kimi-k2.6", "kimi-k2.7-code", "kimi-k3", diff --git a/tests/unit/crof-stale-seed-10577.test.ts b/tests/unit/crof-stale-seed-10577.test.ts new file mode 100644 index 0000000000..c0993ee461 --- /dev/null +++ b/tests/unit/crof-stale-seed-10577.test.ts @@ -0,0 +1,34 @@ +import test from "node:test"; +import assert from "node:assert/strict"; + +const { REGISTRY: providerRegistry } = await import("../../open-sse/config/providerRegistry.ts"); + +// Regression guard for #10577: the crof seed catalog advertised 10 model ids that +// crof.ai has retired. Routing already 400s these via the live-synced catalog gate, +// but /v1/models listing kept advertising them. Confirmed live against +// GET https://crof.ai/v1/models (2026-08-19): these 10 ids are absent from the +// current live roster. +const STALE_MODEL_IDS = [ + "deepseek-v4-pro-precision", + "deepseek-v4-pro-lightning", + "kimi-k2.6-precision", + "kimi-k2.5-lightning", + "kimi-k2.5", + "glm-5.1-precision", + "glm-4.7", + "glm-4.7-flash", + "mimo-v2.5-pro-precision", + "minimax-m2.5", +]; + +test("issue #10577: crof seed catalog must not list retired model ids", () => { + const crof = providerRegistry.crof; + assert.ok(crof, "crof provider must exist in the registry"); + const seedIds = crof.models.map((m) => m.id); + for (const staleId of STALE_MODEL_IDS) { + assert.ok( + !seedIds.includes(staleId), + `crof seed catalog must not list retired model id "${staleId}"` + ); + } +});