feat(models): support minimax highspeed across onboarding
This commit is contained in:
@@ -6,6 +6,8 @@ Docs: https://docs.openclaw.ai
|
||||
|
||||
### Changes
|
||||
|
||||
- Models/MiniMax: add first-class `MiniMax-M2.5-highspeed` support across built-in provider catalogs, onboarding flows, and MiniMax OAuth plugin defaults, while keeping legacy `MiniMax-M2.5-Lightning` compatibility for existing configs.
|
||||
- Docs/Models: refresh MiniMax, Moonshot (Kimi), GLM/Z.AI model docs to align with latest defaults (`MiniMax-M2.5`, `MiniMax-M2.5-highspeed`, `moonshot/kimi-k2.5`, `zai/glm-5`) and keep Moonshot model lists synced from shared source data.
|
||||
- Outbound adapters/plugins: add shared `sendPayload` support across direct-text-media, Discord, Slack, WhatsApp, Zalo, and Zalouser with multi-media iteration and chunk-aware text fallback. (#30144) Thanks @nohat.
|
||||
- Media understanding/audio echo: add optional `tools.media.audio.echoTranscript` + `echoFormat` to send a pre-agent transcript confirmation message to the originating chat, with echo disabled by default. (#32150) Thanks @AytuncYildizli.
|
||||
- Plugin runtime/STT: add `api.runtime.stt.transcribeAudioFile(...)` so extensions can transcribe local audio files through OpenClaw's configured media-understanding audio providers. (#22402) Thanks @benthecarman.
|
||||
|
||||
@@ -89,6 +89,12 @@ function createOAuthHandler(region: MiniMaxRegion) {
|
||||
name: "MiniMax M2.5",
|
||||
input: ["text"],
|
||||
}),
|
||||
buildModelDefinition({
|
||||
id: "MiniMax-M2.5-highspeed",
|
||||
name: "MiniMax M2.5 Highspeed",
|
||||
input: ["text"],
|
||||
reasoning: true,
|
||||
}),
|
||||
buildModelDefinition({
|
||||
id: "MiniMax-M2.5-Lightning",
|
||||
name: "MiniMax M2.5 Lightning",
|
||||
@@ -103,6 +109,9 @@ function createOAuthHandler(region: MiniMaxRegion) {
|
||||
defaults: {
|
||||
models: {
|
||||
[modelRef("MiniMax-M2.5")]: { alias: "minimax-m2.5" },
|
||||
[modelRef("MiniMax-M2.5-highspeed")]: {
|
||||
alias: "minimax-m2.5-highspeed",
|
||||
},
|
||||
[modelRef("MiniMax-M2.5-Lightning")]: {
|
||||
alias: "minimax-m2.5-lightning",
|
||||
},
|
||||
|
||||
@@ -596,6 +596,11 @@ function buildMinimaxProvider(): ProviderConfig {
|
||||
name: "MiniMax M2.5",
|
||||
reasoning: true,
|
||||
}),
|
||||
buildMinimaxTextModel({
|
||||
id: "MiniMax-M2.5-highspeed",
|
||||
name: "MiniMax M2.5 Highspeed",
|
||||
reasoning: true,
|
||||
}),
|
||||
buildMinimaxTextModel({
|
||||
id: "MiniMax-M2.5-Lightning",
|
||||
name: "MiniMax M2.5 Lightning",
|
||||
@@ -616,6 +621,11 @@ function buildMinimaxPortalProvider(): ProviderConfig {
|
||||
name: "MiniMax M2.5",
|
||||
reasoning: true,
|
||||
}),
|
||||
buildMinimaxTextModel({
|
||||
id: "MiniMax-M2.5-highspeed",
|
||||
name: "MiniMax M2.5 Highspeed",
|
||||
reasoning: true,
|
||||
}),
|
||||
buildMinimaxTextModel({
|
||||
id: "MiniMax-M2.5-Lightning",
|
||||
name: "MiniMax M2.5 Lightning",
|
||||
|
||||
@@ -11,8 +11,8 @@ const LIVE = isTruthyEnvValue(process.env.ZAI_LIVE_TEST) || isTruthyEnvValue(pro
|
||||
|
||||
const describeLive = LIVE && ZAI_KEY ? describe : describe.skip;
|
||||
|
||||
async function expectModelReturnsAssistantText(modelId: "glm-4.7" | "glm-4.7-flashx") {
|
||||
const model = getModel("zai", modelId as "glm-4.7");
|
||||
async function expectModelReturnsAssistantText(modelId: "glm-5" | "glm-4.7") {
|
||||
const model = getModel("zai", modelId);
|
||||
const res = await completeSimple(
|
||||
model,
|
||||
{
|
||||
@@ -26,10 +26,10 @@ async function expectModelReturnsAssistantText(modelId: "glm-4.7" | "glm-4.7-fla
|
||||
|
||||
describeLive("zai live", () => {
|
||||
it("returns assistant text", async () => {
|
||||
await expectModelReturnsAssistantText("glm-4.7");
|
||||
await expectModelReturnsAssistantText("glm-5");
|
||||
}, 20000);
|
||||
|
||||
it("glm-4.7-flashx returns assistant text", async () => {
|
||||
await expectModelReturnsAssistantText("glm-4.7-flashx");
|
||||
it("glm-4.7 returns assistant text", async () => {
|
||||
await expectModelReturnsAssistantText("glm-4.7");
|
||||
}, 20000);
|
||||
});
|
||||
|
||||
@@ -294,8 +294,8 @@ const BASE_AUTH_CHOICE_OPTIONS: ReadonlyArray<AuthChoiceOption> = [
|
||||
},
|
||||
{
|
||||
value: "minimax-api-lightning",
|
||||
label: "MiniMax M2.5 Lightning",
|
||||
hint: "Faster, higher output cost",
|
||||
label: "MiniMax M2.5 Highspeed",
|
||||
hint: "Official fast tier (legacy: Lightning)",
|
||||
},
|
||||
{ value: "custom-api-key", label: "Custom Provider" },
|
||||
];
|
||||
|
||||
@@ -212,7 +212,7 @@ describe("applyAuthChoiceMiniMax", () => {
|
||||
mode: "api_key",
|
||||
});
|
||||
expect(resolveAgentModelPrimaryValue(result?.config.agents?.defaults?.model)).toBe(
|
||||
"minimax/MiniMax-M2.5-Lightning",
|
||||
"minimax/MiniMax-M2.5-highspeed",
|
||||
);
|
||||
expect(text).not.toHaveBeenCalled();
|
||||
expect(confirm).not.toHaveBeenCalled();
|
||||
|
||||
@@ -112,7 +112,7 @@ export async function applyAuthChoiceMiniMax(
|
||||
promptMessage: "Enter MiniMax API key",
|
||||
modelRefPrefix: "minimax",
|
||||
modelId:
|
||||
params.authChoice === "minimax-api-lightning" ? "MiniMax-M2.5-Lightning" : "MiniMax-M2.5",
|
||||
params.authChoice === "minimax-api-lightning" ? "MiniMax-M2.5-highspeed" : "MiniMax-M2.5",
|
||||
applyDefaultConfig: applyMinimaxApiConfig,
|
||||
applyProviderConfig: applyMinimaxApiProviderConfig,
|
||||
});
|
||||
|
||||
@@ -90,6 +90,7 @@ export const ZAI_DEFAULT_COST = {
|
||||
|
||||
const MINIMAX_MODEL_CATALOG = {
|
||||
"MiniMax-M2.5": { name: "MiniMax M2.5", reasoning: true },
|
||||
"MiniMax-M2.5-highspeed": { name: "MiniMax M2.5 Highspeed", reasoning: true },
|
||||
"MiniMax-M2.5-Lightning": { name: "MiniMax M2.5 Lightning", reasoning: true },
|
||||
} as const;
|
||||
|
||||
|
||||
@@ -370,9 +370,9 @@ describe("applyMinimaxApiConfig", () => {
|
||||
});
|
||||
});
|
||||
|
||||
it("does not set reasoning for non-reasoning models", () => {
|
||||
it("keeps reasoning enabled for MiniMax-M2.5", () => {
|
||||
const cfg = applyMinimaxApiConfig({}, "MiniMax-M2.5");
|
||||
expect(cfg.models?.providers?.minimax?.models[0]?.reasoning).toBe(false);
|
||||
expect(cfg.models?.providers?.minimax?.models[0]?.reasoning).toBe(true);
|
||||
});
|
||||
|
||||
it("preserves existing model params when adding alias", () => {
|
||||
@@ -514,8 +514,8 @@ describe("primary model defaults", () => {
|
||||
it("sets correct primary model", () => {
|
||||
const configCases = [
|
||||
{
|
||||
getConfig: () => applyMinimaxApiConfig({}, "MiniMax-M2.5-Lightning"),
|
||||
primaryModel: "minimax/MiniMax-M2.5-Lightning",
|
||||
getConfig: () => applyMinimaxApiConfig({}, "MiniMax-M2.5-highspeed"),
|
||||
primaryModel: "minimax/MiniMax-M2.5-highspeed",
|
||||
},
|
||||
{
|
||||
getConfig: () => applyZaiConfig({}, { modelId: "glm-5" }),
|
||||
|
||||
@@ -831,7 +831,7 @@ export async function applyNonInteractiveAuthChoice(params: {
|
||||
mode: "api_key",
|
||||
});
|
||||
const modelId =
|
||||
authChoice === "minimax-api-lightning" ? "MiniMax-M2.5-Lightning" : "MiniMax-M2.5";
|
||||
authChoice === "minimax-api-lightning" ? "MiniMax-M2.5-highspeed" : "MiniMax-M2.5";
|
||||
return isCn
|
||||
? applyMinimaxApiConfigCn(nextConfig, modelId)
|
||||
: applyMinimaxApiConfig(nextConfig, modelId);
|
||||
|
||||
Reference in New Issue
Block a user