From c4ffff6f851a39f36454a7edc0449cf3f660549a Mon Sep 17 00:00:00 2001 From: octo-patch <266937838+octo-patch@users.noreply.github.com> Date: Sat, 1 Aug 2026 15:33:12 +0800 Subject: [PATCH] feat(calibration): add MiniMax provider routes --- .../scripts/calibrate-tokenizer/models.json | 24 +++++++ .../providers/openai-compatible.test.ts | 67 +++++++++++++++++++ .../providers/openai-compatible.ts | 14 ++++ 3 files changed, 105 insertions(+) create mode 100644 packages/plugin/scripts/calibrate-tokenizer/providers/openai-compatible.test.ts diff --git a/packages/plugin/scripts/calibrate-tokenizer/models.json b/packages/plugin/scripts/calibrate-tokenizer/models.json index 4f1bf7103..eabc5f263 100644 --- a/packages/plugin/scripts/calibrate-tokenizer/models.json +++ b/packages/plugin/scripts/calibrate-tokenizer/models.json @@ -132,6 +132,30 @@ "provider": "openrouter", "modelId": "anthropic/claude-sonnet-4.6", "tokenizerKey": "anthropic/claude-sonnet-4.5" + }, + { + "label": "minimax/MiniMax-M3", + "provider": "minimax", + "modelId": "MiniMax-M3", + "tokenizerKey": null + }, + { + "label": "minimax/MiniMax-M2.7", + "provider": "minimax", + "modelId": "MiniMax-M2.7", + "tokenizerKey": null + }, + { + "label": "minimax-cn/MiniMax-M3", + "provider": "minimax-cn", + "modelId": "MiniMax-M3", + "tokenizerKey": null + }, + { + "label": "minimax-cn/MiniMax-M2.7", + "provider": "minimax-cn", + "modelId": "MiniMax-M2.7", + "tokenizerKey": null } ] } diff --git a/packages/plugin/scripts/calibrate-tokenizer/providers/openai-compatible.test.ts b/packages/plugin/scripts/calibrate-tokenizer/providers/openai-compatible.test.ts new file mode 100644 index 000000000..a7db1364b --- /dev/null +++ b/packages/plugin/scripts/calibrate-tokenizer/providers/openai-compatible.test.ts @@ -0,0 +1,67 @@ +import { afterEach, describe, expect, it } from "bun:test"; +import { readFileSync } from "node:fs"; + +import { measureOpenAICompatible } from "./openai-compatible"; + +const originalFetch = globalThis.fetch; +const modelCatalog = JSON.parse( + readFileSync(new URL("../models.json", import.meta.url), "utf-8"), +) as { + tests: Array<{ provider: string; modelId: string }>; +}; + +afterEach(() => { + globalThis.fetch = originalFetch; +}); + +async function expectProviderEndpoint(provider: string, expectedUrl: string): Promise { + const urls: string[] = []; + const totals = [10, 30, 50]; + globalThis.fetch = (async (input: string | URL | Request) => { + urls.push(String(input)); + const promptTokens = totals[urls.length - 1]; + return new Response(JSON.stringify({ usage: { prompt_tokens: promptTokens } }), { + status: 200, + headers: { "content-type": "application/json" }, + }); + }) as typeof fetch; + + const result = await measureOpenAICompatible( + { + label: `${provider}/MiniMax-M3`, + provider, + modelId: "MiniMax-M3", + }, + { type: "api", key: "test-key" }, + "system prompt", + [{ name: "tool", description: "Tool", input_schema: { type: "object" } }], + ); + + expect(urls).toEqual([expectedUrl, expectedUrl, expectedUrl]); + expect(result).toEqual({ systemApi: 20, toolsApi: 40 }); +} + +describe("measureOpenAICompatible", () => { + it("catalogs both current MiniMax models for each regional route", () => { + for (const provider of ["minimax", "minimax-cn"]) { + const modelIds = modelCatalog.tests + .filter((test) => test.provider === provider) + .map((test) => test.modelId); + expect(modelIds).toEqual(["MiniMax-M3", "MiniMax-M2.7"]); + } + }); + + it("routes MiniMax global calibration requests", async () => { + await expectProviderEndpoint( + "minimax", + "https://api.minimax.io/v1/chat/completions", + ); + }); + + it("routes MiniMax China calibration requests", async () => { + await expectProviderEndpoint( + "minimax-cn", + "https://api.minimaxi.com/v1/chat/completions", + ); + }); +}); diff --git a/packages/plugin/scripts/calibrate-tokenizer/providers/openai-compatible.ts b/packages/plugin/scripts/calibrate-tokenizer/providers/openai-compatible.ts index e8d7b227e..44ecc69fd 100644 --- a/packages/plugin/scripts/calibrate-tokenizer/providers/openai-compatible.ts +++ b/packages/plugin/scripts/calibrate-tokenizer/providers/openai-compatible.ts @@ -106,6 +106,20 @@ function endpointFor(provider: string, auth: AuthEntry): ProviderEndpoint { maxTokensField: "max_tokens", supportsTools: true, }; + case "minimax": + return { + url: "https://api.minimax.io/v1/chat/completions", + headers, + maxTokensField: "max_tokens", + supportsTools: true, + }; + case "minimax-cn": + return { + url: "https://api.minimaxi.com/v1/chat/completions", + headers, + maxTokensField: "max_tokens", + supportsTools: true, + }; default: throw new Error(`Unknown provider: ${provider}`); }