From 5f431e5a1fa1a9a01d71c73e393246c297d88c91 Mon Sep 17 00:00:00 2001 From: octo-patch <266937838+octo-patch@users.noreply.github.com> Date: Thu, 9 Jul 2026 10:13:26 +0000 Subject: [PATCH 1/2] Add MiniMax M3 provider defaults Reason: add target provider/model to existing provider registry. Co-Authored-By: Claude Opus 4.7 --- extensions/minimax/index.ts | 4 ++-- extensions/minimax/model-definitions.test.ts | 23 ++++++++++---------- extensions/minimax/model-definitions.ts | 13 +++++------ extensions/minimax/onboard.test.ts | 16 +++++++------- extensions/minimax/onboard.ts | 8 +++---- extensions/minimax/provider-catalog.ts | 11 +++++----- extensions/minimax/provider-models.ts | 11 +++++++--- minimax/index.ts | 4 ++-- minimax/model-definitions.test.ts | 23 ++++++++++---------- minimax/model-definitions.ts | 13 +++++------ minimax/onboard.test.ts | 16 +++++++------- minimax/onboard.ts | 8 +++---- minimax/provider-catalog.ts | 11 +++++----- minimax/provider-models.ts | 11 +++++++--- 14 files changed, 88 insertions(+), 84 deletions(-) diff --git a/extensions/minimax/index.ts b/extensions/minimax/index.ts index 61729c23eb8..5b6993a6184 100644 --- a/extensions/minimax/index.ts +++ b/extensions/minimax/index.ts @@ -29,8 +29,8 @@ const API_PROVIDER_ID = "minimax"; const PORTAL_PROVIDER_ID = "minimax-portal"; const PROVIDER_LABEL = "MiniMax"; const DEFAULT_MODEL = MINIMAX_DEFAULT_MODEL_ID; -const DEFAULT_BASE_URL_CN = "https://api.minimaxi.com/anthropic"; -const DEFAULT_BASE_URL_GLOBAL = "https://api.minimax.io/anthropic"; +const DEFAULT_BASE_URL_CN = "https://api.minimaxi.com/anthropic/v1"; +const DEFAULT_BASE_URL_GLOBAL = "https://api.minimax.io/anthropic/v1"; function getDefaultBaseUrl(region: MiniMaxRegion): string { return region === "cn" ? DEFAULT_BASE_URL_CN : DEFAULT_BASE_URL_GLOBAL; diff --git a/extensions/minimax/model-definitions.test.ts b/extensions/minimax/model-definitions.test.ts index ddc46187d4e..b7098e20a6b 100644 --- a/extensions/minimax/model-definitions.test.ts +++ b/extensions/minimax/model-definitions.test.ts @@ -9,37 +9,36 @@ import { } from "./model-definitions.js"; describe("minimax model definitions", () => { - it("uses M2.7 as default hosted model", () => { - expect(MINIMAX_HOSTED_MODEL_ID).toBe("MiniMax-M2.7"); + it("uses M3 as default hosted model", () => { + expect(MINIMAX_HOSTED_MODEL_ID).toBe("MiniMax-M3"); }); - it("uses the higher upstream MiniMax context and token defaults", () => { - expect(DEFAULT_MINIMAX_CONTEXT_WINDOW).toBe(204800); + it("uses the upstream MiniMax M3 context and cost defaults", () => { + expect(DEFAULT_MINIMAX_CONTEXT_WINDOW).toBe(1000000); expect(DEFAULT_MINIMAX_MAX_TOKENS).toBe(131072); expect(MINIMAX_API_COST).toEqual({ - input: 0.3, - output: 1.2, - cacheRead: 0.06, - cacheWrite: 0.375, + input: 0.6, + output: 2.4, + cacheRead: 0.12, }); }); it("builds catalog model with name and reasoning from catalog", () => { const model = buildMinimaxModelDefinition({ - id: "MiniMax-M2.7", + id: "MiniMax-M3", cost: MINIMAX_API_COST, contextWindow: DEFAULT_MINIMAX_CONTEXT_WINDOW, maxTokens: DEFAULT_MINIMAX_MAX_TOKENS, }); expect(model).toMatchObject({ - id: "MiniMax-M2.7", - name: "MiniMax M2.7", + id: "MiniMax-M3", + name: "MiniMax M3", reasoning: true, }); }); it("builds API model definition with standard cost", () => { - const model = buildMinimaxApiModelDefinition("MiniMax-M2.7"); + const model = buildMinimaxApiModelDefinition("MiniMax-M3"); expect(model.cost).toEqual(MINIMAX_API_COST); expect(model.contextWindow).toBe(DEFAULT_MINIMAX_CONTEXT_WINDOW); expect(model.maxTokens).toBe(DEFAULT_MINIMAX_MAX_TOKENS); diff --git a/extensions/minimax/model-definitions.ts b/extensions/minimax/model-definitions.ts index 718dea466d1..dec7458c578 100644 --- a/extensions/minimax/model-definitions.ts +++ b/extensions/minimax/model-definitions.ts @@ -2,18 +2,17 @@ import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-model-s import { MINIMAX_DEFAULT_MODEL_ID, MINIMAX_TEXT_MODEL_CATALOG } from "./provider-models.js"; export const DEFAULT_MINIMAX_BASE_URL = "https://api.minimax.io/v1"; -export const MINIMAX_API_BASE_URL = "https://api.minimax.io/anthropic"; -export const MINIMAX_CN_API_BASE_URL = "https://api.minimaxi.com/anthropic"; +export const MINIMAX_API_BASE_URL = "https://api.minimax.io/anthropic/v1"; +export const MINIMAX_CN_API_BASE_URL = "https://api.minimaxi.com/anthropic/v1"; export const MINIMAX_HOSTED_MODEL_ID = MINIMAX_DEFAULT_MODEL_ID; export const MINIMAX_HOSTED_MODEL_REF = `minimax/${MINIMAX_HOSTED_MODEL_ID}`; -export const DEFAULT_MINIMAX_CONTEXT_WINDOW = 204800; +export const DEFAULT_MINIMAX_CONTEXT_WINDOW = 1000000; export const DEFAULT_MINIMAX_MAX_TOKENS = 131072; export const MINIMAX_API_COST = { - input: 0.3, - output: 1.2, - cacheRead: 0.06, - cacheWrite: 0.375, + input: 0.6, + output: 2.4, + cacheRead: 0.12, }; export const MINIMAX_HOSTED_COST = { input: 0, diff --git a/extensions/minimax/onboard.test.ts b/extensions/minimax/onboard.test.ts index 331533f0481..ecd5ea78d21 100644 --- a/extensions/minimax/onboard.test.ts +++ b/extensions/minimax/onboard.test.ts @@ -14,14 +14,14 @@ describe("minimax onboard", () => { it("adds minimax provider with correct settings", () => { const cfg = applyMinimaxApiConfig({}); expect(cfg.models?.providers?.minimax).toMatchObject({ - baseUrl: "https://api.minimax.io/anthropic", + baseUrl: "https://api.minimax.io/anthropic/v1", api: "anthropic-messages", authHeader: true, }); }); - it("keeps reasoning enabled for MiniMax-M2.7", () => { - const cfg = applyMinimaxApiConfig({}, "MiniMax-M2.7"); + it("keeps reasoning enabled for MiniMax-M3", () => { + const cfg = applyMinimaxApiConfig({}, "MiniMax-M3"); expect(cfg.models?.providers?.minimax?.models[0]?.reasoning).toBe(true); }); @@ -31,7 +31,7 @@ describe("minimax onboard", () => { agents: { defaults: { models: { - "minimax/MiniMax-M2.7": { + "minimax/MiniMax-M3": { alias: "MiniMax", params: { custom: "value" }, }, @@ -39,9 +39,9 @@ describe("minimax onboard", () => { }, }, }, - "MiniMax-M2.7", + "MiniMax-M3", ); - expect(cfg.agents?.defaults?.models?.["minimax/MiniMax-M2.7"]).toMatchObject({ + expect(cfg.agents?.defaults?.models?.["minimax/MiniMax-M3"]).toMatchObject({ alias: "Minimax", params: { custom: "value" }, }); @@ -54,13 +54,13 @@ describe("minimax onboard", () => { api: "openai-completions", }), ); - expect(cfg.models?.providers?.minimax?.baseUrl).toBe("https://api.minimax.io/anthropic"); + expect(cfg.models?.providers?.minimax?.baseUrl).toBe("https://api.minimax.io/anthropic/v1"); expect(cfg.models?.providers?.minimax?.api).toBe("anthropic-messages"); expect(cfg.models?.providers?.minimax?.authHeader).toBe(true); expect(cfg.models?.providers?.minimax?.apiKey).toBe("old-key"); expect(cfg.models?.providers?.minimax?.models.map((m) => m.id)).toEqual([ "old-model", - "MiniMax-M2.7", + "MiniMax-M3", ]); }); diff --git a/extensions/minimax/onboard.ts b/extensions/minimax/onboard.ts index 86ece4348cd..40f94a267b3 100644 --- a/extensions/minimax/onboard.ts +++ b/extensions/minimax/onboard.ts @@ -61,7 +61,7 @@ function applyMinimaxApiConfigWithBaseUrl( export function applyMinimaxApiProviderConfig( cfg: OpenClawConfig, - modelId: string = "MiniMax-M2.7", + modelId: string = "MiniMax-M3", ): OpenClawConfig { return applyMinimaxApiProviderConfigWithBaseUrl(cfg, { providerId: "minimax", @@ -72,7 +72,7 @@ export function applyMinimaxApiProviderConfig( export function applyMinimaxApiConfig( cfg: OpenClawConfig, - modelId: string = "MiniMax-M2.7", + modelId: string = "MiniMax-M3", ): OpenClawConfig { return applyMinimaxApiConfigWithBaseUrl(cfg, { providerId: "minimax", @@ -83,7 +83,7 @@ export function applyMinimaxApiConfig( export function applyMinimaxApiProviderConfigCn( cfg: OpenClawConfig, - modelId: string = "MiniMax-M2.7", + modelId: string = "MiniMax-M3", ): OpenClawConfig { return applyMinimaxApiProviderConfigWithBaseUrl(cfg, { providerId: "minimax", @@ -94,7 +94,7 @@ export function applyMinimaxApiProviderConfigCn( export function applyMinimaxApiConfigCn( cfg: OpenClawConfig, - modelId: string = "MiniMax-M2.7", + modelId: string = "MiniMax-M3", ): OpenClawConfig { return applyMinimaxApiConfigWithBaseUrl(cfg, { providerId: "minimax", diff --git a/extensions/minimax/provider-catalog.ts b/extensions/minimax/provider-catalog.ts index 1ef5d931740..c92ef74c914 100644 --- a/extensions/minimax/provider-catalog.ts +++ b/extensions/minimax/provider-catalog.ts @@ -8,14 +8,13 @@ import { MINIMAX_TEXT_MODEL_ORDER, } from "./provider-models.js"; -const MINIMAX_PORTAL_BASE_URL = "https://api.minimax.io/anthropic"; -const MINIMAX_DEFAULT_CONTEXT_WINDOW = 204800; +const MINIMAX_PORTAL_BASE_URL = "https://api.minimax.io/anthropic/v1"; +const MINIMAX_DEFAULT_CONTEXT_WINDOW = 1000000; const MINIMAX_DEFAULT_MAX_TOKENS = 131072; const MINIMAX_API_COST = { - input: 0.3, - output: 1.2, - cacheRead: 0.06, - cacheWrite: 0.375, + input: 0.6, + output: 2.4, + cacheRead: 0.12, }; function buildMinimaxModel(params: { diff --git a/extensions/minimax/provider-models.ts b/extensions/minimax/provider-models.ts index b4a026deda5..19b78c06958 100644 --- a/extensions/minimax/provider-models.ts +++ b/extensions/minimax/provider-models.ts @@ -1,11 +1,16 @@ import { matchesExactOrPrefix } from "openclaw/plugin-sdk/provider-model-shared"; -export const MINIMAX_DEFAULT_MODEL_ID = "MiniMax-M2.7"; +export const MINIMAX_DEFAULT_MODEL_ID = "MiniMax-M3"; export const MINIMAX_DEFAULT_MODEL_REF = `minimax/${MINIMAX_DEFAULT_MODEL_ID}`; -export const MINIMAX_TEXT_MODEL_ORDER = ["MiniMax-M2.7", "MiniMax-M2.7-highspeed"] as const; +export const MINIMAX_TEXT_MODEL_ORDER = [ + "MiniMax-M3", + "MiniMax-M2.7", + "MiniMax-M2.7-highspeed", +] as const; export const MINIMAX_TEXT_MODEL_CATALOG = { + "MiniMax-M3": { name: "MiniMax M3", reasoning: true }, "MiniMax-M2.7": { name: "MiniMax M2.7", reasoning: true }, "MiniMax-M2.7-highspeed": { name: "MiniMax M2.7 Highspeed", reasoning: true }, } as const; @@ -14,7 +19,7 @@ export const MINIMAX_TEXT_MODEL_REFS = MINIMAX_TEXT_MODEL_ORDER.map( (modelId) => `minimax/${modelId}`, ); -const MINIMAX_MODERN_MODEL_MATCHERS = ["minimax-m2.7"] as const; +const MINIMAX_MODERN_MODEL_MATCHERS = ["minimax-m3", "minimax-m2.7"] as const; export function isMiniMaxModernModelId(modelId: string): boolean { return matchesExactOrPrefix(modelId, MINIMAX_MODERN_MODEL_MATCHERS); diff --git a/minimax/index.ts b/minimax/index.ts index 61729c23eb8..5b6993a6184 100644 --- a/minimax/index.ts +++ b/minimax/index.ts @@ -29,8 +29,8 @@ const API_PROVIDER_ID = "minimax"; const PORTAL_PROVIDER_ID = "minimax-portal"; const PROVIDER_LABEL = "MiniMax"; const DEFAULT_MODEL = MINIMAX_DEFAULT_MODEL_ID; -const DEFAULT_BASE_URL_CN = "https://api.minimaxi.com/anthropic"; -const DEFAULT_BASE_URL_GLOBAL = "https://api.minimax.io/anthropic"; +const DEFAULT_BASE_URL_CN = "https://api.minimaxi.com/anthropic/v1"; +const DEFAULT_BASE_URL_GLOBAL = "https://api.minimax.io/anthropic/v1"; function getDefaultBaseUrl(region: MiniMaxRegion): string { return region === "cn" ? DEFAULT_BASE_URL_CN : DEFAULT_BASE_URL_GLOBAL; diff --git a/minimax/model-definitions.test.ts b/minimax/model-definitions.test.ts index ddc46187d4e..b7098e20a6b 100644 --- a/minimax/model-definitions.test.ts +++ b/minimax/model-definitions.test.ts @@ -9,37 +9,36 @@ import { } from "./model-definitions.js"; describe("minimax model definitions", () => { - it("uses M2.7 as default hosted model", () => { - expect(MINIMAX_HOSTED_MODEL_ID).toBe("MiniMax-M2.7"); + it("uses M3 as default hosted model", () => { + expect(MINIMAX_HOSTED_MODEL_ID).toBe("MiniMax-M3"); }); - it("uses the higher upstream MiniMax context and token defaults", () => { - expect(DEFAULT_MINIMAX_CONTEXT_WINDOW).toBe(204800); + it("uses the upstream MiniMax M3 context and cost defaults", () => { + expect(DEFAULT_MINIMAX_CONTEXT_WINDOW).toBe(1000000); expect(DEFAULT_MINIMAX_MAX_TOKENS).toBe(131072); expect(MINIMAX_API_COST).toEqual({ - input: 0.3, - output: 1.2, - cacheRead: 0.06, - cacheWrite: 0.375, + input: 0.6, + output: 2.4, + cacheRead: 0.12, }); }); it("builds catalog model with name and reasoning from catalog", () => { const model = buildMinimaxModelDefinition({ - id: "MiniMax-M2.7", + id: "MiniMax-M3", cost: MINIMAX_API_COST, contextWindow: DEFAULT_MINIMAX_CONTEXT_WINDOW, maxTokens: DEFAULT_MINIMAX_MAX_TOKENS, }); expect(model).toMatchObject({ - id: "MiniMax-M2.7", - name: "MiniMax M2.7", + id: "MiniMax-M3", + name: "MiniMax M3", reasoning: true, }); }); it("builds API model definition with standard cost", () => { - const model = buildMinimaxApiModelDefinition("MiniMax-M2.7"); + const model = buildMinimaxApiModelDefinition("MiniMax-M3"); expect(model.cost).toEqual(MINIMAX_API_COST); expect(model.contextWindow).toBe(DEFAULT_MINIMAX_CONTEXT_WINDOW); expect(model.maxTokens).toBe(DEFAULT_MINIMAX_MAX_TOKENS); diff --git a/minimax/model-definitions.ts b/minimax/model-definitions.ts index 718dea466d1..dec7458c578 100644 --- a/minimax/model-definitions.ts +++ b/minimax/model-definitions.ts @@ -2,18 +2,17 @@ import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-model-s import { MINIMAX_DEFAULT_MODEL_ID, MINIMAX_TEXT_MODEL_CATALOG } from "./provider-models.js"; export const DEFAULT_MINIMAX_BASE_URL = "https://api.minimax.io/v1"; -export const MINIMAX_API_BASE_URL = "https://api.minimax.io/anthropic"; -export const MINIMAX_CN_API_BASE_URL = "https://api.minimaxi.com/anthropic"; +export const MINIMAX_API_BASE_URL = "https://api.minimax.io/anthropic/v1"; +export const MINIMAX_CN_API_BASE_URL = "https://api.minimaxi.com/anthropic/v1"; export const MINIMAX_HOSTED_MODEL_ID = MINIMAX_DEFAULT_MODEL_ID; export const MINIMAX_HOSTED_MODEL_REF = `minimax/${MINIMAX_HOSTED_MODEL_ID}`; -export const DEFAULT_MINIMAX_CONTEXT_WINDOW = 204800; +export const DEFAULT_MINIMAX_CONTEXT_WINDOW = 1000000; export const DEFAULT_MINIMAX_MAX_TOKENS = 131072; export const MINIMAX_API_COST = { - input: 0.3, - output: 1.2, - cacheRead: 0.06, - cacheWrite: 0.375, + input: 0.6, + output: 2.4, + cacheRead: 0.12, }; export const MINIMAX_HOSTED_COST = { input: 0, diff --git a/minimax/onboard.test.ts b/minimax/onboard.test.ts index 331533f0481..ecd5ea78d21 100644 --- a/minimax/onboard.test.ts +++ b/minimax/onboard.test.ts @@ -14,14 +14,14 @@ describe("minimax onboard", () => { it("adds minimax provider with correct settings", () => { const cfg = applyMinimaxApiConfig({}); expect(cfg.models?.providers?.minimax).toMatchObject({ - baseUrl: "https://api.minimax.io/anthropic", + baseUrl: "https://api.minimax.io/anthropic/v1", api: "anthropic-messages", authHeader: true, }); }); - it("keeps reasoning enabled for MiniMax-M2.7", () => { - const cfg = applyMinimaxApiConfig({}, "MiniMax-M2.7"); + it("keeps reasoning enabled for MiniMax-M3", () => { + const cfg = applyMinimaxApiConfig({}, "MiniMax-M3"); expect(cfg.models?.providers?.minimax?.models[0]?.reasoning).toBe(true); }); @@ -31,7 +31,7 @@ describe("minimax onboard", () => { agents: { defaults: { models: { - "minimax/MiniMax-M2.7": { + "minimax/MiniMax-M3": { alias: "MiniMax", params: { custom: "value" }, }, @@ -39,9 +39,9 @@ describe("minimax onboard", () => { }, }, }, - "MiniMax-M2.7", + "MiniMax-M3", ); - expect(cfg.agents?.defaults?.models?.["minimax/MiniMax-M2.7"]).toMatchObject({ + expect(cfg.agents?.defaults?.models?.["minimax/MiniMax-M3"]).toMatchObject({ alias: "Minimax", params: { custom: "value" }, }); @@ -54,13 +54,13 @@ describe("minimax onboard", () => { api: "openai-completions", }), ); - expect(cfg.models?.providers?.minimax?.baseUrl).toBe("https://api.minimax.io/anthropic"); + expect(cfg.models?.providers?.minimax?.baseUrl).toBe("https://api.minimax.io/anthropic/v1"); expect(cfg.models?.providers?.minimax?.api).toBe("anthropic-messages"); expect(cfg.models?.providers?.minimax?.authHeader).toBe(true); expect(cfg.models?.providers?.minimax?.apiKey).toBe("old-key"); expect(cfg.models?.providers?.minimax?.models.map((m) => m.id)).toEqual([ "old-model", - "MiniMax-M2.7", + "MiniMax-M3", ]); }); diff --git a/minimax/onboard.ts b/minimax/onboard.ts index 86ece4348cd..40f94a267b3 100644 --- a/minimax/onboard.ts +++ b/minimax/onboard.ts @@ -61,7 +61,7 @@ function applyMinimaxApiConfigWithBaseUrl( export function applyMinimaxApiProviderConfig( cfg: OpenClawConfig, - modelId: string = "MiniMax-M2.7", + modelId: string = "MiniMax-M3", ): OpenClawConfig { return applyMinimaxApiProviderConfigWithBaseUrl(cfg, { providerId: "minimax", @@ -72,7 +72,7 @@ export function applyMinimaxApiProviderConfig( export function applyMinimaxApiConfig( cfg: OpenClawConfig, - modelId: string = "MiniMax-M2.7", + modelId: string = "MiniMax-M3", ): OpenClawConfig { return applyMinimaxApiConfigWithBaseUrl(cfg, { providerId: "minimax", @@ -83,7 +83,7 @@ export function applyMinimaxApiConfig( export function applyMinimaxApiProviderConfigCn( cfg: OpenClawConfig, - modelId: string = "MiniMax-M2.7", + modelId: string = "MiniMax-M3", ): OpenClawConfig { return applyMinimaxApiProviderConfigWithBaseUrl(cfg, { providerId: "minimax", @@ -94,7 +94,7 @@ export function applyMinimaxApiProviderConfigCn( export function applyMinimaxApiConfigCn( cfg: OpenClawConfig, - modelId: string = "MiniMax-M2.7", + modelId: string = "MiniMax-M3", ): OpenClawConfig { return applyMinimaxApiConfigWithBaseUrl(cfg, { providerId: "minimax", diff --git a/minimax/provider-catalog.ts b/minimax/provider-catalog.ts index 1ef5d931740..c92ef74c914 100644 --- a/minimax/provider-catalog.ts +++ b/minimax/provider-catalog.ts @@ -8,14 +8,13 @@ import { MINIMAX_TEXT_MODEL_ORDER, } from "./provider-models.js"; -const MINIMAX_PORTAL_BASE_URL = "https://api.minimax.io/anthropic"; -const MINIMAX_DEFAULT_CONTEXT_WINDOW = 204800; +const MINIMAX_PORTAL_BASE_URL = "https://api.minimax.io/anthropic/v1"; +const MINIMAX_DEFAULT_CONTEXT_WINDOW = 1000000; const MINIMAX_DEFAULT_MAX_TOKENS = 131072; const MINIMAX_API_COST = { - input: 0.3, - output: 1.2, - cacheRead: 0.06, - cacheWrite: 0.375, + input: 0.6, + output: 2.4, + cacheRead: 0.12, }; function buildMinimaxModel(params: { diff --git a/minimax/provider-models.ts b/minimax/provider-models.ts index b4a026deda5..19b78c06958 100644 --- a/minimax/provider-models.ts +++ b/minimax/provider-models.ts @@ -1,11 +1,16 @@ import { matchesExactOrPrefix } from "openclaw/plugin-sdk/provider-model-shared"; -export const MINIMAX_DEFAULT_MODEL_ID = "MiniMax-M2.7"; +export const MINIMAX_DEFAULT_MODEL_ID = "MiniMax-M3"; export const MINIMAX_DEFAULT_MODEL_REF = `minimax/${MINIMAX_DEFAULT_MODEL_ID}`; -export const MINIMAX_TEXT_MODEL_ORDER = ["MiniMax-M2.7", "MiniMax-M2.7-highspeed"] as const; +export const MINIMAX_TEXT_MODEL_ORDER = [ + "MiniMax-M3", + "MiniMax-M2.7", + "MiniMax-M2.7-highspeed", +] as const; export const MINIMAX_TEXT_MODEL_CATALOG = { + "MiniMax-M3": { name: "MiniMax M3", reasoning: true }, "MiniMax-M2.7": { name: "MiniMax M2.7", reasoning: true }, "MiniMax-M2.7-highspeed": { name: "MiniMax M2.7 Highspeed", reasoning: true }, } as const; @@ -14,7 +19,7 @@ export const MINIMAX_TEXT_MODEL_REFS = MINIMAX_TEXT_MODEL_ORDER.map( (modelId) => `minimax/${modelId}`, ); -const MINIMAX_MODERN_MODEL_MATCHERS = ["minimax-m2.7"] as const; +const MINIMAX_MODERN_MODEL_MATCHERS = ["minimax-m3", "minimax-m2.7"] as const; export function isMiniMaxModernModelId(modelId: string): boolean { return matchesExactOrPrefix(modelId, MINIMAX_MODERN_MODEL_MATCHERS); From 8c6531bf7c6e86fc20fb1c88cc50db6abba53a48 Mon Sep 17 00:00:00 2001 From: octo-patch <266937838+octo-patch@users.noreply.github.com> Date: Sun, 12 Jul 2026 17:23:17 +0800 Subject: [PATCH 2/2] Fix MiniMax Anthropic base URLs --- extensions/minimax/index.ts | 4 ++-- extensions/minimax/model-definitions.ts | 4 ++-- extensions/minimax/onboard.test.ts | 4 ++-- extensions/minimax/provider-catalog.ts | 2 +- minimax/index.ts | 4 ++-- minimax/model-definitions.ts | 4 ++-- minimax/onboard.test.ts | 4 ++-- minimax/provider-catalog.ts | 2 +- 8 files changed, 14 insertions(+), 14 deletions(-) diff --git a/extensions/minimax/index.ts b/extensions/minimax/index.ts index 5b6993a6184..61729c23eb8 100644 --- a/extensions/minimax/index.ts +++ b/extensions/minimax/index.ts @@ -29,8 +29,8 @@ const API_PROVIDER_ID = "minimax"; const PORTAL_PROVIDER_ID = "minimax-portal"; const PROVIDER_LABEL = "MiniMax"; const DEFAULT_MODEL = MINIMAX_DEFAULT_MODEL_ID; -const DEFAULT_BASE_URL_CN = "https://api.minimaxi.com/anthropic/v1"; -const DEFAULT_BASE_URL_GLOBAL = "https://api.minimax.io/anthropic/v1"; +const DEFAULT_BASE_URL_CN = "https://api.minimaxi.com/anthropic"; +const DEFAULT_BASE_URL_GLOBAL = "https://api.minimax.io/anthropic"; function getDefaultBaseUrl(region: MiniMaxRegion): string { return region === "cn" ? DEFAULT_BASE_URL_CN : DEFAULT_BASE_URL_GLOBAL; diff --git a/extensions/minimax/model-definitions.ts b/extensions/minimax/model-definitions.ts index dec7458c578..d7bcbf8393c 100644 --- a/extensions/minimax/model-definitions.ts +++ b/extensions/minimax/model-definitions.ts @@ -2,8 +2,8 @@ import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-model-s import { MINIMAX_DEFAULT_MODEL_ID, MINIMAX_TEXT_MODEL_CATALOG } from "./provider-models.js"; export const DEFAULT_MINIMAX_BASE_URL = "https://api.minimax.io/v1"; -export const MINIMAX_API_BASE_URL = "https://api.minimax.io/anthropic/v1"; -export const MINIMAX_CN_API_BASE_URL = "https://api.minimaxi.com/anthropic/v1"; +export const MINIMAX_API_BASE_URL = "https://api.minimax.io/anthropic"; +export const MINIMAX_CN_API_BASE_URL = "https://api.minimaxi.com/anthropic"; export const MINIMAX_HOSTED_MODEL_ID = MINIMAX_DEFAULT_MODEL_ID; export const MINIMAX_HOSTED_MODEL_REF = `minimax/${MINIMAX_HOSTED_MODEL_ID}`; export const DEFAULT_MINIMAX_CONTEXT_WINDOW = 1000000; diff --git a/extensions/minimax/onboard.test.ts b/extensions/minimax/onboard.test.ts index ecd5ea78d21..a98de390d3d 100644 --- a/extensions/minimax/onboard.test.ts +++ b/extensions/minimax/onboard.test.ts @@ -14,7 +14,7 @@ describe("minimax onboard", () => { it("adds minimax provider with correct settings", () => { const cfg = applyMinimaxApiConfig({}); expect(cfg.models?.providers?.minimax).toMatchObject({ - baseUrl: "https://api.minimax.io/anthropic/v1", + baseUrl: "https://api.minimax.io/anthropic", api: "anthropic-messages", authHeader: true, }); @@ -54,7 +54,7 @@ describe("minimax onboard", () => { api: "openai-completions", }), ); - expect(cfg.models?.providers?.minimax?.baseUrl).toBe("https://api.minimax.io/anthropic/v1"); + expect(cfg.models?.providers?.minimax?.baseUrl).toBe("https://api.minimax.io/anthropic"); expect(cfg.models?.providers?.minimax?.api).toBe("anthropic-messages"); expect(cfg.models?.providers?.minimax?.authHeader).toBe(true); expect(cfg.models?.providers?.minimax?.apiKey).toBe("old-key"); diff --git a/extensions/minimax/provider-catalog.ts b/extensions/minimax/provider-catalog.ts index c92ef74c914..fd51d51770f 100644 --- a/extensions/minimax/provider-catalog.ts +++ b/extensions/minimax/provider-catalog.ts @@ -8,7 +8,7 @@ import { MINIMAX_TEXT_MODEL_ORDER, } from "./provider-models.js"; -const MINIMAX_PORTAL_BASE_URL = "https://api.minimax.io/anthropic/v1"; +const MINIMAX_PORTAL_BASE_URL = "https://api.minimax.io/anthropic"; const MINIMAX_DEFAULT_CONTEXT_WINDOW = 1000000; const MINIMAX_DEFAULT_MAX_TOKENS = 131072; const MINIMAX_API_COST = { diff --git a/minimax/index.ts b/minimax/index.ts index 5b6993a6184..61729c23eb8 100644 --- a/minimax/index.ts +++ b/minimax/index.ts @@ -29,8 +29,8 @@ const API_PROVIDER_ID = "minimax"; const PORTAL_PROVIDER_ID = "minimax-portal"; const PROVIDER_LABEL = "MiniMax"; const DEFAULT_MODEL = MINIMAX_DEFAULT_MODEL_ID; -const DEFAULT_BASE_URL_CN = "https://api.minimaxi.com/anthropic/v1"; -const DEFAULT_BASE_URL_GLOBAL = "https://api.minimax.io/anthropic/v1"; +const DEFAULT_BASE_URL_CN = "https://api.minimaxi.com/anthropic"; +const DEFAULT_BASE_URL_GLOBAL = "https://api.minimax.io/anthropic"; function getDefaultBaseUrl(region: MiniMaxRegion): string { return region === "cn" ? DEFAULT_BASE_URL_CN : DEFAULT_BASE_URL_GLOBAL; diff --git a/minimax/model-definitions.ts b/minimax/model-definitions.ts index dec7458c578..d7bcbf8393c 100644 --- a/minimax/model-definitions.ts +++ b/minimax/model-definitions.ts @@ -2,8 +2,8 @@ import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-model-s import { MINIMAX_DEFAULT_MODEL_ID, MINIMAX_TEXT_MODEL_CATALOG } from "./provider-models.js"; export const DEFAULT_MINIMAX_BASE_URL = "https://api.minimax.io/v1"; -export const MINIMAX_API_BASE_URL = "https://api.minimax.io/anthropic/v1"; -export const MINIMAX_CN_API_BASE_URL = "https://api.minimaxi.com/anthropic/v1"; +export const MINIMAX_API_BASE_URL = "https://api.minimax.io/anthropic"; +export const MINIMAX_CN_API_BASE_URL = "https://api.minimaxi.com/anthropic"; export const MINIMAX_HOSTED_MODEL_ID = MINIMAX_DEFAULT_MODEL_ID; export const MINIMAX_HOSTED_MODEL_REF = `minimax/${MINIMAX_HOSTED_MODEL_ID}`; export const DEFAULT_MINIMAX_CONTEXT_WINDOW = 1000000; diff --git a/minimax/onboard.test.ts b/minimax/onboard.test.ts index ecd5ea78d21..a98de390d3d 100644 --- a/minimax/onboard.test.ts +++ b/minimax/onboard.test.ts @@ -14,7 +14,7 @@ describe("minimax onboard", () => { it("adds minimax provider with correct settings", () => { const cfg = applyMinimaxApiConfig({}); expect(cfg.models?.providers?.minimax).toMatchObject({ - baseUrl: "https://api.minimax.io/anthropic/v1", + baseUrl: "https://api.minimax.io/anthropic", api: "anthropic-messages", authHeader: true, }); @@ -54,7 +54,7 @@ describe("minimax onboard", () => { api: "openai-completions", }), ); - expect(cfg.models?.providers?.minimax?.baseUrl).toBe("https://api.minimax.io/anthropic/v1"); + expect(cfg.models?.providers?.minimax?.baseUrl).toBe("https://api.minimax.io/anthropic"); expect(cfg.models?.providers?.minimax?.api).toBe("anthropic-messages"); expect(cfg.models?.providers?.minimax?.authHeader).toBe(true); expect(cfg.models?.providers?.minimax?.apiKey).toBe("old-key"); diff --git a/minimax/provider-catalog.ts b/minimax/provider-catalog.ts index c92ef74c914..fd51d51770f 100644 --- a/minimax/provider-catalog.ts +++ b/minimax/provider-catalog.ts @@ -8,7 +8,7 @@ import { MINIMAX_TEXT_MODEL_ORDER, } from "./provider-models.js"; -const MINIMAX_PORTAL_BASE_URL = "https://api.minimax.io/anthropic/v1"; +const MINIMAX_PORTAL_BASE_URL = "https://api.minimax.io/anthropic"; const MINIMAX_DEFAULT_CONTEXT_WINDOW = 1000000; const MINIMAX_DEFAULT_MAX_TOKENS = 131072; const MINIMAX_API_COST = {