mirror of
https://github.com/badlogic/pi-mono.git
synced 2026-11-05 23:37:25 +00:00
fix(ai): use mimo-v2.6 models in Xiaomi tests
The model catalog replaced mimo-v2.5 and mimo-v2.5-pro with mimo-v2.6-flash and mimo-v2.6-pro, so tests referencing the old IDs failed type-checking.
This commit is contained in:
parent
0fbdbd3f8a
commit
99fe148970
15 changed files with 60 additions and 60 deletions
|
|
@ -214,7 +214,7 @@ describe("AI Providers Abort Tests", () => {
|
|||
});
|
||||
|
||||
describe.skipIf(!process.env.XIAOMI_API_KEY)("Xiaomi MiMo (API billing) Provider Abort", () => {
|
||||
const llm = getModel("xiaomi", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi", "mimo-v2.6-pro");
|
||||
|
||||
it("should abort mid-stream", { retry: 3 }, async () => {
|
||||
await testAbortSignal(llm);
|
||||
|
|
@ -226,7 +226,7 @@ describe("AI Providers Abort Tests", () => {
|
|||
});
|
||||
|
||||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_CN_API_KEY)("Xiaomi MiMo Token Plan (CN) Provider Abort", () => {
|
||||
const llm = getModel("xiaomi-token-plan-cn", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi-token-plan-cn", "mimo-v2.6-pro");
|
||||
|
||||
it("should abort mid-stream", { retry: 3 }, async () => {
|
||||
await testAbortSignal(llm);
|
||||
|
|
@ -238,7 +238,7 @@ describe("AI Providers Abort Tests", () => {
|
|||
});
|
||||
|
||||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_AMS_API_KEY)("Xiaomi MiMo Token Plan (AMS) Provider Abort", () => {
|
||||
const llm = getModel("xiaomi-token-plan-ams", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi-token-plan-ams", "mimo-v2.6-pro");
|
||||
|
||||
it("should abort mid-stream", { retry: 3 }, async () => {
|
||||
await testAbortSignal(llm);
|
||||
|
|
@ -250,7 +250,7 @@ describe("AI Providers Abort Tests", () => {
|
|||
});
|
||||
|
||||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_SGP_API_KEY)("Xiaomi MiMo Token Plan (SGP) Provider Abort", () => {
|
||||
const llm = getModel("xiaomi-token-plan-sgp", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi-token-plan-sgp", "mimo-v2.6-pro");
|
||||
|
||||
it("should abort mid-stream", { retry: 3 }, async () => {
|
||||
await testAbortSignal(llm);
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ class PayloadCaptured extends Error {
|
|||
|
||||
function makeModel(allowEmptySignature?: boolean): Model<"anthropic-messages"> {
|
||||
return {
|
||||
id: "mimo-v2.5-pro",
|
||||
id: "mimo-v2.6-pro",
|
||||
name: "MiMo-V2.5-Pro",
|
||||
api: "anthropic-messages",
|
||||
provider: "xiaomi-token-plan-ams",
|
||||
|
|
@ -36,7 +36,7 @@ function makeContext(
|
|||
thinkingSignature: string,
|
||||
thinking = "internal reasoning",
|
||||
provider = "xiaomi-token-plan-ams",
|
||||
model = "mimo-v2.5-pro",
|
||||
model = "mimo-v2.6-pro",
|
||||
): Context {
|
||||
const assistant: AssistantMessage = {
|
||||
role: "assistant",
|
||||
|
|
|
|||
|
|
@ -420,8 +420,8 @@ describe("Context overflow error handling", () => {
|
|||
// Xiaomi silently truncates oversized input to fill the context window exactly,
|
||||
// then returns finish_reason "length" with output=0 (no room left to generate).
|
||||
// This is a detectable overflow signal but uses stopReason "length" rather than "error".
|
||||
it("mimo-v2.5-pro - should detect overflow via isContextOverflow", async () => {
|
||||
const model = getModel("xiaomi", "mimo-v2.5-pro");
|
||||
it("mimo-v2.6-pro - should detect overflow via isContextOverflow", async () => {
|
||||
const model = getModel("xiaomi", "mimo-v2.6-pro");
|
||||
const result = await testContextOverflow(model, process.env.XIAOMI_API_KEY!);
|
||||
logResult(result);
|
||||
|
||||
|
|
@ -432,8 +432,8 @@ describe("Context overflow error handling", () => {
|
|||
});
|
||||
|
||||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_CN_API_KEY)("Xiaomi MiMo Token Plan (CN)", () => {
|
||||
it("mimo-v2.5-pro - should detect overflow via isContextOverflow", async () => {
|
||||
const model = getModel("xiaomi-token-plan-cn", "mimo-v2.5-pro");
|
||||
it("mimo-v2.6-pro - should detect overflow via isContextOverflow", async () => {
|
||||
const model = getModel("xiaomi-token-plan-cn", "mimo-v2.6-pro");
|
||||
const result = await testContextOverflow(model, process.env.XIAOMI_TOKEN_PLAN_CN_API_KEY!);
|
||||
logResult(result);
|
||||
|
||||
|
|
@ -444,8 +444,8 @@ describe("Context overflow error handling", () => {
|
|||
});
|
||||
|
||||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_AMS_API_KEY)("Xiaomi MiMo Token Plan (AMS)", () => {
|
||||
it("mimo-v2.5-pro - should detect overflow via isContextOverflow", async () => {
|
||||
const model = getModel("xiaomi-token-plan-ams", "mimo-v2.5-pro");
|
||||
it("mimo-v2.6-pro - should detect overflow via isContextOverflow", async () => {
|
||||
const model = getModel("xiaomi-token-plan-ams", "mimo-v2.6-pro");
|
||||
const result = await testContextOverflow(model, process.env.XIAOMI_TOKEN_PLAN_AMS_API_KEY!);
|
||||
logResult(result);
|
||||
|
||||
|
|
@ -456,8 +456,8 @@ describe("Context overflow error handling", () => {
|
|||
});
|
||||
|
||||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_SGP_API_KEY)("Xiaomi MiMo Token Plan (SGP)", () => {
|
||||
it("mimo-v2.5-pro - should detect overflow via isContextOverflow", async () => {
|
||||
const model = getModel("xiaomi-token-plan-sgp", "mimo-v2.5-pro");
|
||||
it("mimo-v2.6-pro - should detect overflow via isContextOverflow", async () => {
|
||||
const model = getModel("xiaomi-token-plan-sgp", "mimo-v2.6-pro");
|
||||
const result = await testContextOverflow(model, process.env.XIAOMI_TOKEN_PLAN_SGP_API_KEY!);
|
||||
logResult(result);
|
||||
|
||||
|
|
|
|||
|
|
@ -130,10 +130,10 @@ const PROVIDER_MODEL_PAIRS: ProviderModelPair[] = [
|
|||
{ provider: "opencode-go", model: "kimi-k2.5", label: "go-kimi-k2.5" },
|
||||
{ provider: "opencode-go", model: "minimax-m2.5", label: "go-minimax-m2.5" },
|
||||
// Xiaomi MiMo
|
||||
{ provider: "xiaomi", model: "mimo-v2.5-pro", label: "xiaomi-mimo-v2.5-pro" },
|
||||
{ provider: "xiaomi-token-plan-cn", model: "mimo-v2.5-pro", label: "xiaomi-token-plan-cn-mimo-v2.5-pro" },
|
||||
{ provider: "xiaomi-token-plan-ams", model: "mimo-v2.5-pro", label: "xiaomi-token-plan-ams-mimo-v2.5-pro" },
|
||||
{ provider: "xiaomi-token-plan-sgp", model: "mimo-v2.5-pro", label: "xiaomi-token-plan-sgp-mimo-v2.5-pro" },
|
||||
{ provider: "xiaomi", model: "mimo-v2.6-pro", label: "xiaomi-mimo-v2.6-pro" },
|
||||
{ provider: "xiaomi-token-plan-cn", model: "mimo-v2.6-pro", label: "xiaomi-token-plan-cn-mimo-v2.6-pro" },
|
||||
{ provider: "xiaomi-token-plan-ams", model: "mimo-v2.6-pro", label: "xiaomi-token-plan-ams-mimo-v2.6-pro" },
|
||||
{ provider: "xiaomi-token-plan-sgp", model: "mimo-v2.6-pro", label: "xiaomi-token-plan-sgp-mimo-v2.6-pro" },
|
||||
// Qwen Token Plan
|
||||
{ provider: "qwen-token-plan", model: "qwen3.7-max", label: "qwen-token-plan-qwen3.7-max" },
|
||||
{ provider: "qwen-token-plan-cn", model: "qwen3.7-max", label: "qwen-token-plan-cn-qwen3.7-max" },
|
||||
|
|
|
|||
|
|
@ -468,7 +468,7 @@ describe("AI Providers Empty Message Tests", () => {
|
|||
});
|
||||
|
||||
describe.skipIf(!process.env.XIAOMI_API_KEY)("Xiaomi MiMo (API billing) Provider Empty Messages", () => {
|
||||
const llm = getModel("xiaomi", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi", "mimo-v2.6-pro");
|
||||
|
||||
it("should handle empty content array", { retry: 3, timeout: 30000 }, async () => {
|
||||
await testEmptyMessage(llm);
|
||||
|
|
@ -490,7 +490,7 @@ describe("AI Providers Empty Message Tests", () => {
|
|||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_CN_API_KEY)(
|
||||
"Xiaomi MiMo Token Plan (CN) Provider Empty Messages",
|
||||
() => {
|
||||
const llm = getModel("xiaomi-token-plan-cn", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi-token-plan-cn", "mimo-v2.6-pro");
|
||||
|
||||
it("should handle empty content array", { retry: 3, timeout: 30000 }, async () => {
|
||||
await testEmptyMessage(llm);
|
||||
|
|
@ -513,7 +513,7 @@ describe("AI Providers Empty Message Tests", () => {
|
|||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_AMS_API_KEY)(
|
||||
"Xiaomi MiMo Token Plan (AMS) Provider Empty Messages",
|
||||
() => {
|
||||
const llm = getModel("xiaomi-token-plan-ams", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi-token-plan-ams", "mimo-v2.6-pro");
|
||||
|
||||
it("should handle empty content array", { retry: 3, timeout: 30000 }, async () => {
|
||||
await testEmptyMessage(llm);
|
||||
|
|
@ -536,7 +536,7 @@ describe("AI Providers Empty Message Tests", () => {
|
|||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_SGP_API_KEY)(
|
||||
"Xiaomi MiMo Token Plan (SGP) Provider Empty Messages",
|
||||
() => {
|
||||
const llm = getModel("xiaomi-token-plan-sgp", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi-token-plan-sgp", "mimo-v2.6-pro");
|
||||
|
||||
it("should handle empty content array", { retry: 3, timeout: 30000 }, async () => {
|
||||
await testEmptyMessage(llm);
|
||||
|
|
|
|||
|
|
@ -324,8 +324,8 @@ describe("Tool Results with Images", () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe.skipIf(!process.env.XIAOMI_API_KEY)("Xiaomi MiMo (API billing) Provider (mimo-v2.5-pro)", () => {
|
||||
const llm = getModel("xiaomi", "mimo-v2.5-pro");
|
||||
describe.skipIf(!process.env.XIAOMI_API_KEY)("Xiaomi MiMo (API billing) Provider (mimo-v2.6-pro)", () => {
|
||||
const llm = getModel("xiaomi", "mimo-v2.6-pro");
|
||||
|
||||
it("should handle tool result with only image", { retry: 3, timeout: 30000 }, async () => {
|
||||
await handleToolWithImageResult(llm);
|
||||
|
|
@ -344,9 +344,9 @@ describe("Tool Results with Images", () => {
|
|||
});
|
||||
|
||||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_CN_API_KEY)(
|
||||
"Xiaomi MiMo Token Plan (CN) Provider (mimo-v2.5-pro)",
|
||||
"Xiaomi MiMo Token Plan (CN) Provider (mimo-v2.6-pro)",
|
||||
() => {
|
||||
const llm = getModel("xiaomi-token-plan-cn", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi-token-plan-cn", "mimo-v2.6-pro");
|
||||
|
||||
it("should handle tool result with only image", { retry: 3, timeout: 30000 }, async () => {
|
||||
await handleToolWithImageResult(llm);
|
||||
|
|
@ -361,9 +361,9 @@ describe("Tool Results with Images", () => {
|
|||
);
|
||||
|
||||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_AMS_API_KEY)(
|
||||
"Xiaomi MiMo Token Plan (AMS) Provider (mimo-v2.5-pro)",
|
||||
"Xiaomi MiMo Token Plan (AMS) Provider (mimo-v2.6-pro)",
|
||||
() => {
|
||||
const llm = getModel("xiaomi-token-plan-ams", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi-token-plan-ams", "mimo-v2.6-pro");
|
||||
|
||||
it("should handle tool result with only image", { retry: 3, timeout: 30000 }, async () => {
|
||||
await handleToolWithImageResult(llm);
|
||||
|
|
@ -378,9 +378,9 @@ describe("Tool Results with Images", () => {
|
|||
);
|
||||
|
||||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_SGP_API_KEY)(
|
||||
"Xiaomi MiMo Token Plan (SGP) Provider (mimo-v2.5-pro)",
|
||||
"Xiaomi MiMo Token Plan (SGP) Provider (mimo-v2.6-pro)",
|
||||
() => {
|
||||
const llm = getModel("xiaomi-token-plan-sgp", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi-token-plan-sgp", "mimo-v2.6-pro");
|
||||
|
||||
it("should handle tool result with only image", { retry: 3, timeout: 30000 }, async () => {
|
||||
await handleToolWithImageResult(llm);
|
||||
|
|
|
|||
|
|
@ -1234,7 +1234,7 @@ describe("openai-completions tool_choice", () => {
|
|||
const providers = ["xiaomi", "xiaomi-token-plan-cn", "xiaomi-token-plan-ams", "xiaomi-token-plan-sgp"] as const;
|
||||
|
||||
for (const provider of providers) {
|
||||
const model = getModel(provider, "mimo-v2.5-pro")!;
|
||||
const model = getModel(provider, "mimo-v2.6-pro")!;
|
||||
expect(model.compat?.requiresReasoningContentOnAssistantMessages).toBe(true);
|
||||
expect(model.compat?.thinkingFormat).toBe("deepseek");
|
||||
expect(model.compat?.maxTokensField).toBeUndefined();
|
||||
|
|
@ -1255,12 +1255,12 @@ describe("openai-completions tool_choice", () => {
|
|||
});
|
||||
|
||||
it("replays Xiaomi MiMo assistant tool calls with empty reasoning_content when thinking is missing", async () => {
|
||||
const model = getModel("xiaomi", "mimo-v2.5-pro")!;
|
||||
const model = getModel("xiaomi", "mimo-v2.6-pro")!;
|
||||
const assistantMessage: AssistantMessage = {
|
||||
role: "assistant",
|
||||
api: "openai-completions",
|
||||
provider: "xiaomi",
|
||||
model: "mimo-v2.5-pro",
|
||||
model: "mimo-v2.6-pro",
|
||||
content: [{ type: "toolCall", id: "call_1", name: "read", arguments: { path: "README.md" } }],
|
||||
usage: {
|
||||
input: 0,
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ describe("isContextOverflow", () => {
|
|||
cacheRead: 1048512,
|
||||
output: 0,
|
||||
provider: "xiaomi",
|
||||
model: "mimo-v2.5-pro",
|
||||
model: "mimo-v2.6-pro",
|
||||
});
|
||||
expect(isContextOverflow(message, 1048576)).toBe(true);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1094,7 +1094,7 @@ describe("Generate E2E Tests", () => {
|
|||
describe.skipIf(!process.env.XIAOMI_API_KEY)(
|
||||
"Xiaomi MiMo (API billing) Provider (Xiaomi MiMo-V2.5-Pro via Anthropic Messages)",
|
||||
() => {
|
||||
const llm = getModel("xiaomi", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi", "mimo-v2.6-pro");
|
||||
const thinkingOptions = {
|
||||
thinkingEnabled: true,
|
||||
reasoningEffort: "high",
|
||||
|
|
@ -1125,7 +1125,7 @@ describe("Generate E2E Tests", () => {
|
|||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_CN_API_KEY)(
|
||||
"Xiaomi MiMo Token Plan Provider (Xiaomi MiMo-V2.5-Pro via Anthropic Messages, CN region)",
|
||||
() => {
|
||||
const llm = getModel("xiaomi-token-plan-cn", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi-token-plan-cn", "mimo-v2.6-pro");
|
||||
const thinkingOptions = {
|
||||
thinkingEnabled: true,
|
||||
reasoningEffort: "high",
|
||||
|
|
@ -1156,7 +1156,7 @@ describe("Generate E2E Tests", () => {
|
|||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_AMS_API_KEY)(
|
||||
"Xiaomi MiMo Token Plan Provider (Xiaomi MiMo-V2.5-Pro via Anthropic Messages, AMS region)",
|
||||
() => {
|
||||
const llm = getModel("xiaomi-token-plan-ams", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi-token-plan-ams", "mimo-v2.6-pro");
|
||||
const thinkingOptions = {
|
||||
thinkingEnabled: true,
|
||||
reasoningEffort: "high",
|
||||
|
|
@ -1187,7 +1187,7 @@ describe("Generate E2E Tests", () => {
|
|||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_SGP_API_KEY)(
|
||||
"Xiaomi MiMo Token Plan Provider (Xiaomi MiMo-V2.5-Pro via Anthropic Messages, SGP region)",
|
||||
() => {
|
||||
const llm = getModel("xiaomi-token-plan-sgp", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi-token-plan-sgp", "mimo-v2.6-pro");
|
||||
const thinkingOptions = {
|
||||
thinkingEnabled: true,
|
||||
reasoningEffort: "high",
|
||||
|
|
|
|||
|
|
@ -250,7 +250,7 @@ describe("Token Statistics on Abort", () => {
|
|||
});
|
||||
|
||||
describe.skipIf(!process.env.XIAOMI_API_KEY)("Xiaomi MiMo (API billing) Provider", () => {
|
||||
const llm = getModel("xiaomi", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi", "mimo-v2.6-pro");
|
||||
|
||||
// FIXME(xiaomi): Xiaomi's Anthropic-compatible stream does not populate
|
||||
// usage in the message_start event the way Anthropic does — usage only
|
||||
|
|
@ -263,7 +263,7 @@ describe("Token Statistics on Abort", () => {
|
|||
});
|
||||
|
||||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_CN_API_KEY)("Xiaomi MiMo Token Plan (CN) Provider", () => {
|
||||
const llm = getModel("xiaomi-token-plan-cn", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi-token-plan-cn", "mimo-v2.6-pro");
|
||||
|
||||
// FIXME(xiaomi): see the API-billing block above — same upstream streaming
|
||||
// usage limitation applies to Token Plan endpoints.
|
||||
|
|
@ -273,7 +273,7 @@ describe("Token Statistics on Abort", () => {
|
|||
});
|
||||
|
||||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_AMS_API_KEY)("Xiaomi MiMo Token Plan (AMS) Provider", () => {
|
||||
const llm = getModel("xiaomi-token-plan-ams", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi-token-plan-ams", "mimo-v2.6-pro");
|
||||
|
||||
// FIXME(xiaomi): see the API-billing block above — same upstream streaming
|
||||
// usage limitation applies to Token Plan endpoints.
|
||||
|
|
@ -283,7 +283,7 @@ describe("Token Statistics on Abort", () => {
|
|||
});
|
||||
|
||||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_SGP_API_KEY)("Xiaomi MiMo Token Plan (SGP) Provider", () => {
|
||||
const llm = getModel("xiaomi-token-plan-sgp", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi-token-plan-sgp", "mimo-v2.6-pro");
|
||||
|
||||
// FIXME(xiaomi): see the API-billing block above — same upstream streaming
|
||||
// usage limitation applies to Token Plan endpoints.
|
||||
|
|
|
|||
|
|
@ -231,7 +231,7 @@ describe("Tool Call Without Result Tests", () => {
|
|||
});
|
||||
|
||||
describe.skipIf(!process.env.XIAOMI_API_KEY)("Xiaomi MiMo (API billing) Provider", () => {
|
||||
const model = getModel("xiaomi", "mimo-v2.5-pro");
|
||||
const model = getModel("xiaomi", "mimo-v2.6-pro");
|
||||
|
||||
it("should filter out tool calls without corresponding tool results", { retry: 3, timeout: 30000 }, async () => {
|
||||
await testToolCallWithoutResult(model);
|
||||
|
|
@ -239,7 +239,7 @@ describe("Tool Call Without Result Tests", () => {
|
|||
});
|
||||
|
||||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_CN_API_KEY)("Xiaomi MiMo Token Plan (CN) Provider", () => {
|
||||
const model = getModel("xiaomi-token-plan-cn", "mimo-v2.5-pro");
|
||||
const model = getModel("xiaomi-token-plan-cn", "mimo-v2.6-pro");
|
||||
|
||||
it("should filter out tool calls without corresponding tool results", { retry: 3, timeout: 30000 }, async () => {
|
||||
await testToolCallWithoutResult(model);
|
||||
|
|
@ -247,7 +247,7 @@ describe("Tool Call Without Result Tests", () => {
|
|||
});
|
||||
|
||||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_AMS_API_KEY)("Xiaomi MiMo Token Plan (AMS) Provider", () => {
|
||||
const model = getModel("xiaomi-token-plan-ams", "mimo-v2.5-pro");
|
||||
const model = getModel("xiaomi-token-plan-ams", "mimo-v2.6-pro");
|
||||
|
||||
it("should filter out tool calls without corresponding tool results", { retry: 3, timeout: 30000 }, async () => {
|
||||
await testToolCallWithoutResult(model);
|
||||
|
|
@ -255,7 +255,7 @@ describe("Tool Call Without Result Tests", () => {
|
|||
});
|
||||
|
||||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_SGP_API_KEY)("Xiaomi MiMo Token Plan (SGP) Provider", () => {
|
||||
const model = getModel("xiaomi-token-plan-sgp", "mimo-v2.5-pro");
|
||||
const model = getModel("xiaomi-token-plan-sgp", "mimo-v2.6-pro");
|
||||
|
||||
it("should filter out tool calls without corresponding tool results", { retry: 3, timeout: 30000 }, async () => {
|
||||
await testToolCallWithoutResult(model);
|
||||
|
|
|
|||
|
|
@ -488,10 +488,10 @@ describe("totalTokens field", () => {
|
|||
|
||||
describe.skipIf(!process.env.XIAOMI_API_KEY)("Xiaomi MiMo (API billing)", () => {
|
||||
it(
|
||||
"mimo-v2.5-pro - should return totalTokens equal to sum of components",
|
||||
"mimo-v2.6-pro - should return totalTokens equal to sum of components",
|
||||
{ retry: 3, timeout: 60000 },
|
||||
async () => {
|
||||
const llm = getModel("xiaomi", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi", "mimo-v2.6-pro");
|
||||
|
||||
console.log(`\nXiaomi MiMo / ${llm.id}:`);
|
||||
const { first, second } = await testTotalTokensWithCache(llm, { apiKey: process.env.XIAOMI_API_KEY });
|
||||
|
|
@ -511,10 +511,10 @@ describe("totalTokens field", () => {
|
|||
|
||||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_CN_API_KEY)("Xiaomi MiMo Token Plan (CN)", () => {
|
||||
it(
|
||||
"mimo-v2.5-pro - should return totalTokens equal to sum of components",
|
||||
"mimo-v2.6-pro - should return totalTokens equal to sum of components",
|
||||
{ retry: 3, timeout: 60000 },
|
||||
async () => {
|
||||
const llm = getModel("xiaomi-token-plan-cn", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi-token-plan-cn", "mimo-v2.6-pro");
|
||||
|
||||
console.log(`\nXiaomi MiMo Token Plan CN / ${llm.id}:`);
|
||||
const { first, second } = await testTotalTokensWithCache(llm, {
|
||||
|
|
@ -536,10 +536,10 @@ describe("totalTokens field", () => {
|
|||
|
||||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_AMS_API_KEY)("Xiaomi MiMo Token Plan (AMS)", () => {
|
||||
it(
|
||||
"mimo-v2.5-pro - should return totalTokens equal to sum of components",
|
||||
"mimo-v2.6-pro - should return totalTokens equal to sum of components",
|
||||
{ retry: 3, timeout: 60000 },
|
||||
async () => {
|
||||
const llm = getModel("xiaomi-token-plan-ams", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi-token-plan-ams", "mimo-v2.6-pro");
|
||||
|
||||
console.log(`\nXiaomi MiMo Token Plan AMS / ${llm.id}:`);
|
||||
const { first, second } = await testTotalTokensWithCache(llm, {
|
||||
|
|
@ -561,10 +561,10 @@ describe("totalTokens field", () => {
|
|||
|
||||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_SGP_API_KEY)("Xiaomi MiMo Token Plan (SGP)", () => {
|
||||
it(
|
||||
"mimo-v2.5-pro - should return totalTokens equal to sum of components",
|
||||
"mimo-v2.6-pro - should return totalTokens equal to sum of components",
|
||||
{ retry: 3, timeout: 60000 },
|
||||
async () => {
|
||||
const llm = getModel("xiaomi-token-plan-sgp", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi-token-plan-sgp", "mimo-v2.6-pro");
|
||||
|
||||
console.log(`\nXiaomi MiMo Token Plan SGP / ${llm.id}:`);
|
||||
const { first, second } = await testTotalTokensWithCache(llm, {
|
||||
|
|
|
|||
|
|
@ -628,7 +628,7 @@ describe("AI Providers Unicode Surrogate Pair Tests", () => {
|
|||
});
|
||||
|
||||
describe.skipIf(!process.env.XIAOMI_API_KEY)("Xiaomi MiMo (API billing) Provider Unicode Handling", () => {
|
||||
const llm = getModel("xiaomi", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi", "mimo-v2.6-pro");
|
||||
|
||||
it("should handle emoji in tool results", { retry: 3, timeout: 30000 }, async () => {
|
||||
await testEmojiInToolResults(llm);
|
||||
|
|
@ -646,7 +646,7 @@ describe("AI Providers Unicode Surrogate Pair Tests", () => {
|
|||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_CN_API_KEY)(
|
||||
"Xiaomi MiMo Token Plan (CN) Provider Unicode Handling",
|
||||
() => {
|
||||
const llm = getModel("xiaomi-token-plan-cn", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi-token-plan-cn", "mimo-v2.6-pro");
|
||||
|
||||
it("should handle emoji in tool results", { retry: 3, timeout: 30000 }, async () => {
|
||||
await testEmojiInToolResults(llm);
|
||||
|
|
@ -669,7 +669,7 @@ describe("AI Providers Unicode Surrogate Pair Tests", () => {
|
|||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_AMS_API_KEY)(
|
||||
"Xiaomi MiMo Token Plan (AMS) Provider Unicode Handling",
|
||||
() => {
|
||||
const llm = getModel("xiaomi-token-plan-ams", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi-token-plan-ams", "mimo-v2.6-pro");
|
||||
|
||||
it("should handle emoji in tool results", { retry: 3, timeout: 30000 }, async () => {
|
||||
await testEmojiInToolResults(llm);
|
||||
|
|
@ -692,7 +692,7 @@ describe("AI Providers Unicode Surrogate Pair Tests", () => {
|
|||
describe.skipIf(!process.env.XIAOMI_TOKEN_PLAN_SGP_API_KEY)(
|
||||
"Xiaomi MiMo Token Plan (SGP) Provider Unicode Handling",
|
||||
() => {
|
||||
const llm = getModel("xiaomi-token-plan-sgp", "mimo-v2.5-pro");
|
||||
const llm = getModel("xiaomi-token-plan-sgp", "mimo-v2.6-pro");
|
||||
|
||||
it("should handle emoji in tool results", { retry: 3, timeout: 30000 }, async () => {
|
||||
await testEmojiInToolResults(llm);
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import type { ThinkingLevel } from "../src/types.ts";
|
|||
|
||||
const XIAOMI_PROVIDERS = ["xiaomi", "xiaomi-token-plan-cn", "xiaomi-token-plan-ams", "xiaomi-token-plan-sgp"] as const;
|
||||
const DEPRECATED_MODEL_IDS = ["mimo-v2-flash", "mimo-v2-omni", "mimo-v2-pro"] as const;
|
||||
const REPLACEMENT_MODEL_IDS = ["mimo-v2.5", "mimo-v2.5-pro"] as const;
|
||||
const REPLACEMENT_MODEL_IDS = ["mimo-v2.6-flash", "mimo-v2.6-pro"] as const;
|
||||
|
||||
describe("Xiaomi MiMo models", () => {
|
||||
it.each(XIAOMI_PROVIDERS)("omits deprecated models from %s", (provider) => {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ const provider = "xiaomi-token-plan-ams";
|
|||
const apiKey = getEnvApiKey(provider);
|
||||
|
||||
const model: Model<"anthropic-messages"> = {
|
||||
id: "mimo-v2.5-pro",
|
||||
id: "mimo-v2.6-pro",
|
||||
name: "MiMo-V2.5-Pro Anthropic smoke",
|
||||
api: "anthropic-messages",
|
||||
provider,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue