From 1c4bda29ffedb29aa7aad22fc4d92a95339d0fd0 Mon Sep 17 00:00:00 2001 From: oldschoola Date: Mon, 15 Jun 2026 05:35:19 -0700 Subject: [PATCH] Drop Xiaomi ASR models from catalog --- packages/catalog/scripts/generate-models.ts | 14 +++++++++ packages/catalog/src/models.json | 19 ------------ .../src/provider-models/openai-compat.ts | 2 +- packages/catalog/test/issue-772-repro.test.ts | 29 +++++++++++++++++++ 4 files changed, 44 insertions(+), 20 deletions(-) diff --git a/packages/catalog/scripts/generate-models.ts b/packages/catalog/scripts/generate-models.ts index 777058774..45bd371a4 100644 --- a/packages/catalog/scripts/generate-models.ts +++ b/packages/catalog/scripts/generate-models.ts @@ -307,6 +307,19 @@ function dropFireworksWireIds(models: readonly ModelSpec[]): ModelSpec[] { ); } +/** + * Xiaomi's `/v1/models` can advertise ASR/TTS ids alongside chat/completions + * models. Runtime discovery filters them, but previous bundled snapshots can + * still resurrect those stale ids via the fallback merge. Drop them here so the + * committed catalog matches the runtime surface. + */ +function dropXiaomiAudioOnlyIds(models: readonly ModelSpec[]): ModelSpec[] { + return models.filter(model => { + const isXiaomiProvider = model.provider === "xiaomi" || model.provider.startsWith("xiaomi-token-plan-"); + return !isXiaomiProvider || (!model.id.includes("-tts") && !model.id.includes("-asr")); + }); +} + const ANTIGRAVITY_ENDPOINT = "https://daily-cloudcode-pa.sandbox.googleapis.com"; async function getOAuthAccessFromStorage(provider: OAuthProvider): Promise { @@ -496,6 +509,7 @@ async function generateModels() { allModels = applyFireworksDeepSeekReasoningShape(allModels); allModels = dropFireworksWireIds(allModels); allModels = dropUnusableZaiContextTierIds(allModels); + allModels = dropXiaomiAudioOnlyIds(allModels); // Normalize display names: gateway author prefixes ("OpenAI: …"), alias // markers ("(latest)"), provider attribution ("(Antigravity)"), and // price/promo tags are model-extrinsic — strip them from the bundle. diff --git a/packages/catalog/src/models.json b/packages/catalog/src/models.json index 62269746c..c606f956c 100644 --- a/packages/catalog/src/models.json +++ b/packages/catalog/src/models.json @@ -78345,25 +78345,6 @@ ] } }, - "mimo-v2.5-asr": { - "id": "mimo-v2.5-asr", - "name": "mimo-v2.5-asr", - "api": "openai-completions", - "provider": "xiaomi", - "baseUrl": "https://api.xiaomimimo.com/v1", - "reasoning": false, - "input": [ - "text" - ], - "cost": { - "input": 0, - "output": 0, - "cacheRead": 0, - "cacheWrite": 0 - }, - "contextWindow": null, - "maxTokens": null - }, "mimo-v2.5-pro": { "id": "mimo-v2.5-pro", "name": "MiMo-V2.5-Pro", diff --git a/packages/catalog/src/provider-models/openai-compat.ts b/packages/catalog/src/provider-models/openai-compat.ts index 749caed98..2766d8ae2 100644 --- a/packages/catalog/src/provider-models/openai-compat.ts +++ b/packages/catalog/src/provider-models/openai-compat.ts @@ -2456,7 +2456,7 @@ export function xiaomiModelManagerOptions( provider: providerId, baseUrl: url, apiKey, - filterModel: (_entry, model) => !model.id.includes("-tts"), + filterModel: (_entry, model) => !model.id.includes("-tts") && !model.id.includes("-asr"), mapModel: (entry, defaults) => { const reference = references.get(defaults.id); const model = mapWithBundledReference(entry, defaults, reference); diff --git a/packages/catalog/test/issue-772-repro.test.ts b/packages/catalog/test/issue-772-repro.test.ts index 217725f1c..c23cc07e8 100644 --- a/packages/catalog/test/issue-772-repro.test.ts +++ b/packages/catalog/test/issue-772-repro.test.ts @@ -2,6 +2,7 @@ import { describe, expect, it } from "bun:test"; import { loginXiaomi } from "@oh-my-pi/pi-ai/registry/oauth/xiaomi"; import { xiaomiModelManagerOptions } from "@oh-my-pi/pi-catalog/provider-models/openai-compat"; import type { FetchImpl } from "@oh-my-pi/pi-catalog/types"; +import modelsJson from "../src/models.json"; const TOKEN_PLAN_SGP_HOST = "token-plan-sgp.xiaomimimo.com"; const STANDARD_HOST = "api.xiaomimimo.com"; @@ -64,4 +65,32 @@ describe("issue-772: Xiaomi MiMo token-plan (tp-) keys", () => { expect(url).toContain(STANDARD_HOST); expect(url).not.toContain(TOKEN_PLAN_SGP_HOST); }); + + it("filters Xiaomi ASR and TTS-only models from discovery", async () => { + const fetchMock: FetchImpl = async () => + new Response( + JSON.stringify({ + data: [ + { id: "mimo-v2.5-asr", name: "mimo-v2.5-asr" }, + { id: "mimo-v2.5-tts", name: "mimo-v2.5-tts" }, + { id: "mimo-v2.5", name: "MiMo-V2.5" }, + ], + }), + { + status: 200, + headers: { "content-type": "application/json" }, + }, + ); + + const models = await xiaomiModelManagerOptions({ + apiKey: "sk-test-key", + fetch: fetchMock, + }).fetchDynamicModels?.(); + + expect(models?.map(model => model.id)).toEqual(["mimo-v2.5"]); + }); + + it("does not bundle Xiaomi ASR-only models", () => { + expect(Object.keys(modelsJson.xiaomi)).not.toContain("mimo-v2.5-asr"); + }); });