mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 06:30:42 +00:00
fix(minimax): default music generation to music 2.6
This commit is contained in:
@@ -16,6 +16,7 @@ Docs: https://docs.openclaw.ai
|
||||
|
||||
### Fixes
|
||||
|
||||
- MiniMax music generation: switch the bundled default model from the unsupported `music-2.5+` id to the current `music-2.6` API model. Fixes #64870 and #62315. Thanks @noahclanman and @edwardzheng1.
|
||||
- Google media generation: strip a configured trailing `/v1beta` from Google music/video provider base URLs before calling the Google GenAI SDK, preventing doubled `/v1beta/v1beta` paths. Fixes #63240. (#63258) Thanks @Hybirdss.
|
||||
- Google Chat: preserve reply text when a typing indicator message is deleted or can no longer be updated, so media captions and first text chunks are resent instead of silently disappearing. (#71498) Thanks @colin-lgtm.
|
||||
- Cron: tolerate malformed legacy job rows in startup, main-session system-event payloads, and human-readable `cron list` output so missing `state`, `payload.text`, or display fields no longer crash the scheduler or CLI. Fixes #66016, #65916, #64137, #57872, #59968, #63813, #52804, and #43163. (#71509) Thanks @vincentkoc.
|
||||
|
||||
@@ -347,7 +347,7 @@ Time format in system prompt. Default: `auto` (OS preference).
|
||||
- If omitted, `image_generate` can still infer an auth-backed provider default. It tries the current default provider first, then the remaining registered image-generation providers in provider-id order.
|
||||
- `musicGenerationModel`: accepts either a string (`"provider/model"`) or an object (`{ primary, fallbacks }`).
|
||||
- Used by the shared music-generation capability and the built-in `music_generate` tool.
|
||||
- Typical values: `google/lyria-3-clip-preview`, `google/lyria-3-pro-preview`, or `minimax/music-2.5+`.
|
||||
- Typical values: `google/lyria-3-clip-preview`, `google/lyria-3-pro-preview`, or `minimax/music-2.6`.
|
||||
- If omitted, `music_generate` can still infer an auth-backed provider default. It tries the current default provider first, then the remaining registered music-generation providers in provider-id order.
|
||||
- If you select a provider/model directly, configure the matching provider auth/API key too.
|
||||
- `videoGenerationModel`: accepts either a string (`"provider/model"`) or an object (`{ primary, fallbacks }`).
|
||||
|
||||
@@ -492,7 +492,7 @@ image-generation runtime, and the live provider request.
|
||||
- `comfy`: separate Comfy live file, not this shared sweep
|
||||
- Optional narrowing:
|
||||
- `OPENCLAW_LIVE_MUSIC_GENERATION_PROVIDERS="google,minimax"`
|
||||
- `OPENCLAW_LIVE_MUSIC_GENERATION_MODELS="google/lyria-3-clip-preview,minimax/music-2.5+"`
|
||||
- `OPENCLAW_LIVE_MUSIC_GENERATION_MODELS="google/lyria-3-clip-preview,minimax/music-2.6"`
|
||||
- Optional auth behavior:
|
||||
- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` to force profile-store auth and ignore env-only overrides
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ MiniMax also provides:
|
||||
|
||||
- Bundled speech synthesis via T2A v2
|
||||
- Bundled image understanding via `MiniMax-VL-01`
|
||||
- Bundled music generation via `music-2.5+`
|
||||
- Bundled music generation via `music-2.6`
|
||||
- Bundled `web_search` through the MiniMax Coding Plan search API
|
||||
|
||||
Provider split:
|
||||
@@ -30,7 +30,7 @@ Provider split:
|
||||
| `MiniMax-M2.7-highspeed` | Chat (reasoning) | Faster M2.7 reasoning tier |
|
||||
| `MiniMax-VL-01` | Vision | Image understanding model |
|
||||
| `image-01` | Image generation | Text-to-image and image-to-image editing |
|
||||
| `music-2.5+` | Music generation | Default music model |
|
||||
| `music-2.6` | Music generation | Default music model |
|
||||
| `music-2.5` | Music generation | Previous music generation tier |
|
||||
| `music-2.0` | Music generation | Legacy music generation tier |
|
||||
| `MiniMax-Hailuo-2.3` | Video generation | Text-to-video and image reference flows |
|
||||
@@ -282,7 +282,7 @@ The bundled `minimax` plugin registers MiniMax T2A v2 as a speech provider for
|
||||
The bundled `minimax` plugin also registers music generation through the shared
|
||||
`music_generate` tool.
|
||||
|
||||
- Default music model: `minimax/music-2.5+`
|
||||
- Default music model: `minimax/music-2.6`
|
||||
- Also supports `minimax/music-2.5` and `minimax/music-2.0`
|
||||
- Prompt controls: `lyrics`, `instrumental`, `durationSeconds`
|
||||
- Output format: `mp3`
|
||||
@@ -295,7 +295,7 @@ To use MiniMax as the default music provider:
|
||||
agents: {
|
||||
defaults: {
|
||||
musicGenerationModel: {
|
||||
primary: "minimax/music-2.5+",
|
||||
primary: "minimax/music-2.6",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -81,7 +81,7 @@ Example:
|
||||
| -------- | ---------------------- | ---------------- | --------------------------------------------------------- | -------------------------------------- |
|
||||
| ComfyUI | `workflow` | Up to 1 image | Workflow-defined music or audio | `COMFY_API_KEY`, `COMFY_CLOUD_API_KEY` |
|
||||
| Google | `lyria-3-clip-preview` | Up to 10 images | `lyrics`, `instrumental`, `format` | `GEMINI_API_KEY`, `GOOGLE_API_KEY` |
|
||||
| MiniMax | `music-2.5+` | None | `lyrics`, `instrumental`, `durationSeconds`, `format=mp3` | `MINIMAX_API_KEY` |
|
||||
| MiniMax | `music-2.6` | None | `lyrics`, `instrumental`, `durationSeconds`, `format=mp3` | `MINIMAX_API_KEY` |
|
||||
|
||||
### Declared capability matrix
|
||||
|
||||
@@ -176,7 +176,7 @@ Duplicate prevention: if a music task is already `queued` or `running` for the c
|
||||
defaults: {
|
||||
musicGenerationModel: {
|
||||
primary: "google/lyria-3-clip-preview",
|
||||
fallbacks: ["minimax/music-2.5+"],
|
||||
fallbacks: ["minimax/music-2.6"],
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -47,7 +47,6 @@ describe("minimax music generation provider", () => {
|
||||
const provider = buildMinimaxMusicGenerationProvider();
|
||||
const result = await provider.generateMusic({
|
||||
provider: "minimax",
|
||||
model: "music-2.5+",
|
||||
prompt: "upbeat dance-pop with female vocals",
|
||||
cfg: {},
|
||||
lyrics: "our city wakes",
|
||||
@@ -61,7 +60,7 @@ describe("minimax music generation provider", () => {
|
||||
get: expect.any(Function),
|
||||
}),
|
||||
body: expect.objectContaining({
|
||||
model: "music-2.5+",
|
||||
model: "music-2.6",
|
||||
lyrics: "our city wakes",
|
||||
output_format: "url",
|
||||
audio_setting: {
|
||||
@@ -95,7 +94,7 @@ describe("minimax music generation provider", () => {
|
||||
const provider = buildMinimaxMusicGenerationProvider();
|
||||
const result = await provider.generateMusic({
|
||||
provider: "minimax",
|
||||
model: "music-2.5+",
|
||||
model: "music-2.6",
|
||||
prompt: "upbeat dance-pop with female vocals",
|
||||
cfg: {},
|
||||
lyrics: "our city wakes",
|
||||
@@ -116,7 +115,7 @@ describe("minimax music generation provider", () => {
|
||||
await expect(
|
||||
provider.generateMusic({
|
||||
provider: "minimax",
|
||||
model: "music-2.5+",
|
||||
model: "music-2.6",
|
||||
prompt: "driving techno",
|
||||
cfg: {},
|
||||
instrumental: true,
|
||||
@@ -135,7 +134,7 @@ describe("minimax music generation provider", () => {
|
||||
const provider = buildMinimaxMusicGenerationProvider();
|
||||
await provider.generateMusic({
|
||||
provider: "minimax",
|
||||
model: "music-2.5+",
|
||||
model: "music-2.6",
|
||||
prompt: "upbeat dance-pop",
|
||||
cfg: {},
|
||||
});
|
||||
@@ -143,7 +142,7 @@ describe("minimax music generation provider", () => {
|
||||
expect(postJsonRequestMock).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
body: expect.objectContaining({
|
||||
model: "music-2.5+",
|
||||
model: "music-2.6",
|
||||
lyrics_optimizer: true,
|
||||
}),
|
||||
}),
|
||||
|
||||
@@ -15,7 +15,7 @@ import {
|
||||
import { normalizeOptionalString } from "openclaw/plugin-sdk/text-runtime";
|
||||
|
||||
const DEFAULT_MINIMAX_MUSIC_BASE_URL = "https://api.minimax.io";
|
||||
const DEFAULT_MINIMAX_MUSIC_MODEL = "music-2.5+";
|
||||
const DEFAULT_MINIMAX_MUSIC_MODEL = "music-2.6";
|
||||
const DEFAULT_TIMEOUT_MS = 120_000;
|
||||
|
||||
type MinimaxBaseResp = {
|
||||
@@ -125,7 +125,7 @@ export function buildMinimaxMusicGenerationProvider(): MusicGenerationProvider {
|
||||
id: "minimax",
|
||||
label: "MiniMax",
|
||||
defaultModel: DEFAULT_MINIMAX_MUSIC_MODEL,
|
||||
models: [DEFAULT_MINIMAX_MUSIC_MODEL, "music-2.5", "music-2.0"],
|
||||
models: [DEFAULT_MINIMAX_MUSIC_MODEL, "music-2.6-free", "music-cover", "music-cover-free"],
|
||||
isConfigured: ({ agentDir }) =>
|
||||
isProviderApiKeyConfigured({
|
||||
provider: "minimax",
|
||||
|
||||
@@ -333,8 +333,8 @@ describe("createMusicGenerateTool", () => {
|
||||
vi.spyOn(musicGenerationRuntime, "listRuntimeMusicGenerationProviders").mockReturnValue([
|
||||
{
|
||||
id: "minimax",
|
||||
defaultModel: "music-2.5+",
|
||||
models: ["music-2.5+"],
|
||||
defaultModel: "music-2.6",
|
||||
models: ["music-2.6"],
|
||||
capabilities: {
|
||||
generate: {
|
||||
maxTracks: 1,
|
||||
@@ -355,7 +355,7 @@ describe("createMusicGenerateTool", () => {
|
||||
config: asConfig({
|
||||
agents: {
|
||||
defaults: {
|
||||
musicGenerationModel: { primary: "minimax/music-2.5+" },
|
||||
musicGenerationModel: { primary: "minimax/music-2.6" },
|
||||
},
|
||||
},
|
||||
}),
|
||||
@@ -457,7 +457,7 @@ describe("createMusicGenerateTool", () => {
|
||||
it("surfaces normalized durations from runtime metadata", async () => {
|
||||
vi.spyOn(musicGenerationRuntime, "generateMusic").mockResolvedValue({
|
||||
provider: "minimax",
|
||||
model: "music-2.5+",
|
||||
model: "music-2.6",
|
||||
attempts: [],
|
||||
ignoredOverrides: [],
|
||||
tracks: [
|
||||
@@ -489,7 +489,7 @@ describe("createMusicGenerateTool", () => {
|
||||
config: asConfig({
|
||||
agents: {
|
||||
defaults: {
|
||||
musicGenerationModel: { primary: "minimax/music-2.5+" },
|
||||
musicGenerationModel: { primary: "minimax/music-2.6" },
|
||||
},
|
||||
},
|
||||
}),
|
||||
@@ -521,8 +521,8 @@ describe("createMusicGenerateTool", () => {
|
||||
vi.spyOn(musicGenerationRuntime, "listRuntimeMusicGenerationProviders").mockReturnValue([
|
||||
{
|
||||
id: "minimax",
|
||||
defaultModel: "music-2.5+",
|
||||
models: ["music-2.5+"],
|
||||
defaultModel: "music-2.6",
|
||||
models: ["music-2.6"],
|
||||
capabilities: {
|
||||
edit: { enabled: true, maxInputImages: 1 },
|
||||
},
|
||||
@@ -538,7 +538,7 @@ describe("createMusicGenerateTool", () => {
|
||||
});
|
||||
vi.spyOn(musicGenerationRuntime, "generateMusic").mockResolvedValue({
|
||||
provider: "minimax",
|
||||
model: "music-2.5+",
|
||||
model: "music-2.6",
|
||||
attempts: [],
|
||||
ignoredOverrides: [],
|
||||
tracks: [{ buffer: Buffer.from("music"), mimeType: "audio/mpeg" }],
|
||||
@@ -553,7 +553,7 @@ describe("createMusicGenerateTool", () => {
|
||||
config: asConfig({
|
||||
agents: {
|
||||
defaults: {
|
||||
musicGenerationModel: { primary: "minimax/music-2.5+" },
|
||||
musicGenerationModel: { primary: "minimax/music-2.6" },
|
||||
},
|
||||
},
|
||||
tools: { web: { fetch: { ssrfPolicy: { allowRfc2544BenchmarkRange: true } } } },
|
||||
|
||||
@@ -11,7 +11,7 @@ export { parseProviderModelMap, redactLiveApiKey };
|
||||
|
||||
export const DEFAULT_LIVE_MUSIC_MODELS: Record<string, string> = {
|
||||
google: "google/lyria-3-clip-preview",
|
||||
minimax: "minimax/music-2.5+",
|
||||
minimax: "minimax/music-2.6",
|
||||
};
|
||||
|
||||
export function parseCsvFilter(raw?: string): Set<string> | null {
|
||||
|
||||
@@ -93,13 +93,13 @@ describe("music-generation runtime", () => {
|
||||
if (providerId === "minimax") {
|
||||
return {
|
||||
id: "minimax",
|
||||
defaultModel: "music-2.5+",
|
||||
defaultModel: "music-2.6",
|
||||
capabilities: {},
|
||||
isConfigured: () => true,
|
||||
async generateMusic() {
|
||||
return {
|
||||
tracks: [{ buffer: Buffer.from("mp3-bytes"), mimeType: "audio/mpeg" }],
|
||||
model: "music-2.5+",
|
||||
model: "music-2.6",
|
||||
};
|
||||
},
|
||||
};
|
||||
@@ -116,7 +116,7 @@ describe("music-generation runtime", () => {
|
||||
},
|
||||
{
|
||||
id: "minimax",
|
||||
defaultModel: "music-2.5+",
|
||||
defaultModel: "music-2.6",
|
||||
capabilities: {},
|
||||
isConfigured: () => true,
|
||||
generateMusic: async () => ({ tracks: [] }),
|
||||
@@ -129,7 +129,7 @@ describe("music-generation runtime", () => {
|
||||
});
|
||||
|
||||
expect(result.provider).toBe("minimax");
|
||||
expect(result.model).toBe("music-2.5+");
|
||||
expect(result.model).toBe("music-2.6");
|
||||
expect(result.attempts).toEqual([
|
||||
{
|
||||
provider: "google",
|
||||
@@ -302,7 +302,7 @@ describe("music-generation runtime", () => {
|
||||
durationSeconds?: number;
|
||||
}
|
||||
| undefined;
|
||||
mocks.resolveAgentModelPrimaryValue.mockReturnValue("minimax/music-2.5+");
|
||||
mocks.resolveAgentModelPrimaryValue.mockReturnValue("minimax/music-2.6");
|
||||
mocks.getMusicGenerationProvider.mockReturnValue({
|
||||
id: "minimax",
|
||||
capabilities: {
|
||||
@@ -317,7 +317,7 @@ describe("music-generation runtime", () => {
|
||||
};
|
||||
return {
|
||||
tracks: [{ buffer: Buffer.from("mp3-bytes"), mimeType: "audio/mpeg" }],
|
||||
model: "music-2.5+",
|
||||
model: "music-2.6",
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -326,7 +326,7 @@ describe("music-generation runtime", () => {
|
||||
cfg: {
|
||||
agents: {
|
||||
defaults: {
|
||||
musicGenerationModel: { primary: "minimax/music-2.5+" },
|
||||
musicGenerationModel: { primary: "minimax/music-2.6" },
|
||||
},
|
||||
},
|
||||
} as OpenClawConfig,
|
||||
|
||||
Reference in New Issue
Block a user