diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index ae883f27d..f1154cc7d 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Fixed + +- Fixed Xiaomi MiMo standard API-key validation to use the supported `mimo-v2.5` model. ([#4063](https://github.com/can1357/oh-my-pi/issues/4063)) + ## [16.2.12] - 2026-07-01 ### Changed diff --git a/packages/ai/src/registry/oauth/xiaomi.ts b/packages/ai/src/registry/oauth/xiaomi.ts index ca84c82d1..a2ae7c1f1 100644 --- a/packages/ai/src/registry/oauth/xiaomi.ts +++ b/packages/ai/src/registry/oauth/xiaomi.ts @@ -18,7 +18,7 @@ const STANDARD_AUTH_URL = "https://platform.xiaomimimo.com/#/console/api-keys"; const TOKEN_PLAN_AUTH_URL = "https://platform.xiaomimimo.com/console/plan-manage"; const STANDARD_API_BASE_URL = "https://api.xiaomimimo.com/v1"; const TOKEN_PLAN_KEY_PREFIX = "tp-"; -const STANDARD_VALIDATION_MODEL = "mimo-v2-flash"; +const STANDARD_VALIDATION_MODEL = "mimo-v2.5"; const TOKEN_PLAN_VALIDATION_MODEL = "mimo-v2.5"; const TOKEN_PLAN_SGP_API_BASE_URL = "https://token-plan-sgp.xiaomimimo.com/v1"; const TOKEN_PLAN_AMS_API_BASE_URL = "https://token-plan-ams.xiaomimimo.com/v1"; diff --git a/packages/ai/test/xiaomi-oauth.test.ts b/packages/ai/test/xiaomi-oauth.test.ts index 2e7c8329a..50dd8273c 100644 --- a/packages/ai/test/xiaomi-oauth.test.ts +++ b/packages/ai/test/xiaomi-oauth.test.ts @@ -55,9 +55,11 @@ describe("xiaomi oauth validation", () => { it("sends Authorization: Bearer for standard sk- keys as well", async () => { const capturedHeaders: Record[] = []; const capturedUrls: string[] = []; + const capturedBodies: string[] = []; const fetchMock: FetchImpl = vi.fn(async (input, init) => { capturedUrls.push(typeof input === "string" ? input : input.toString()); capturedHeaders.push((init?.headers ?? {}) as Record); + capturedBodies.push(String(init?.body)); return new Response("{}", { status: 200, headers: { "Content-Type": "application/json" } }); }); @@ -69,6 +71,7 @@ describe("xiaomi oauth validation", () => { expect(fetchMock).toHaveBeenCalledTimes(1); expect(capturedUrls[0]).toBe("https://api.xiaomimimo.com/v1/chat/completions"); + expect(JSON.parse(capturedBodies[0]).model).toBe("mimo-v2.5"); const headers = capturedHeaders[0]; expect(headers.Authorization).toBe("Bearer sk-test-key"); expect(headers["x-api-key"]).toBeUndefined(); diff --git a/packages/catalog/CHANGELOG.md b/packages/catalog/CHANGELOG.md index 912cca759..1ac776840 100644 --- a/packages/catalog/CHANGELOG.md +++ b/packages/catalog/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Fixed + +- Fixed the Xiaomi provider default model to use the supported `mimo-v2.5` model. ([#4063](https://github.com/can1357/oh-my-pi/issues/4063)) + ## [16.2.12] - 2026-07-01 ### Breaking Changes diff --git a/packages/catalog/src/provider-models/descriptors.ts b/packages/catalog/src/provider-models/descriptors.ts index 70e79edf3..587422c7f 100644 --- a/packages/catalog/src/provider-models/descriptors.ts +++ b/packages/catalog/src/provider-models/descriptors.ts @@ -415,7 +415,7 @@ export const CATALOG_PROVIDERS = [ }, { id: "xiaomi", - defaultModel: "mimo-v2-flash", + defaultModel: "mimo-v2.5", envVars: ["XIAOMI_API_KEY"], createModelManagerOptions: (config: ModelManagerConfig) => xiaomiModelManagerOptions(config), catalogDiscovery: { label: "Xiaomi" }, diff --git a/packages/catalog/test/descriptors.test.ts b/packages/catalog/test/descriptors.test.ts index feb85b5d1..66a244b06 100644 --- a/packages/catalog/test/descriptors.test.ts +++ b/packages/catalog/test/descriptors.test.ts @@ -16,6 +16,7 @@ describe("catalog provider descriptors", () => { expect(DEFAULT_MODEL_PER_PROVIDER.minimax).toBe("MiniMax-M3"); expect(DEFAULT_MODEL_PER_PROVIDER["minimax-code"]).toBe("MiniMax-M3"); expect(DEFAULT_MODEL_PER_PROVIDER["minimax-code-cn"]).toBe("MiniMax-M3"); + expect(DEFAULT_MODEL_PER_PROVIDER.xiaomi).toBe("mimo-v2.5"); // Login-only tools have no default model. expect(DEFAULT_MODEL_PER_PROVIDER).not.toHaveProperty("kagi"); });