From d57a920646c21c3c285bcd640277f6f16ef227ef Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Sat, 1 Aug 2026 15:13:56 +0300 Subject: [PATCH] feat(ai): support MiniMax M3 - Make MiniMax-M3 the default MiniMax model - Verify the existing OpenAI-compatible adapter sends M3 requests correctly - Update AI documentation and release notes for #431 --- CHANGELOG.md | 1 + packages/core/src/constants.ts | 5 +++-- packages/docs/programmable/ai-chat.md | 20 ++++++++--------- tests/engine/app/ai/model.test.ts | 32 +++++++++++++++++++++++++++ 4 files changed, 46 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index df04a8c2b..74b88a937 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ ### Added +- Use MiniMax M3 as the default MiniMax model for AI design workflows. (#431) - Export selections, pages and documents as editable PowerPoint (`.pptx`) files from the File menu, CLI and SDK: text, rectangles, ellipses and lines stay native editable elements, while gradients, masks, blends, vectors and icons fall back to embedded images. - Figma-style Assets panel browsing with component thumbnails, grid/list views, page grouping, context actions, and drag-to-canvas insertion. - Import HTML, CSS, Tailwind, and JSX as editable documents from the app, CLI, and SDK, and export standalone browser-ready HTML with compiled CSS and optional external assets. diff --git a/packages/core/src/constants.ts b/packages/core/src/constants.ts index cd7096d62..ba0fb76d8 100644 --- a/packages/core/src/constants.ts +++ b/packages/core/src/constants.ts @@ -299,9 +299,10 @@ export const AI_PROVIDERS: AIProviderDef[] = [ name: 'MiniMax', keyPlaceholder: 'API key', keyURL: 'https://platform.minimax.io/user-center/basic-information/interface-key', - defaultModel: 'MiniMax-M2.7', + defaultModel: 'MiniMax-M3', models: [ - { id: 'MiniMax-M2.7', name: 'MiniMax-M2.7', tag: 'Best' }, + { id: 'MiniMax-M3', name: 'MiniMax-M3', tag: 'Best' }, + { id: 'MiniMax-M2.7', name: 'MiniMax-M2.7' }, { id: 'MiniMax-M2.7-highspeed', name: 'MiniMax-M2.7-highspeed', tag: 'Fast' }, { id: 'MiniMax-M2.5', name: 'MiniMax-M2.5' }, { id: 'MiniMax-M2.5-highspeed', name: 'MiniMax-M2.5 Highspeed', tag: 'Fast' }, diff --git a/packages/docs/programmable/ai-chat.md b/packages/docs/programmable/ai-chat.md index 96957d76e..4f561a60e 100644 --- a/packages/docs/programmable/ai-chat.md +++ b/packages/docs/programmable/ai-chat.md @@ -18,16 +18,16 @@ You can configure multiple reusable models and separately assign models for desi ### Supported Providers -| Provider | Models | Setup | -|----------|--------|-------| -| **OpenRouter** | Claude, GPT, Gemini, DeepSeek, Qwen, and others | API key from [openrouter.ai](https://openrouter.ai) | -| **Anthropic** | Claude Sonnet 4.6, Claude Opus 4.6 | API key from [console.anthropic.com](https://console.anthropic.com) | -| **OpenAI** | GPT-5.3 Codex, GPT-4.1, o3, o4-mini | API key from [platform.openai.com](https://platform.openai.com) | -| **Google AI** | Gemini 3.1 Pro, Gemini 3 Flash | API key from [aistudio.google.dev](https://aistudio.google.dev) | -| **Z.ai** | GLM-5.1, GLM-5, GLM-4.7, GLM-4.5 family | API key from [docs.z.ai](https://docs.z.ai/devpack/quick-start) | -| **MiniMax** | MiniMax M2.7, M2.7-highspeed, M2.5, M2.1 | API key from [platform.minimax.io](https://platform.minimax.io/user-center/basic-information/interface-key) | -| **OpenAI-compatible** | Any endpoint with OpenAI API format | Custom base URL + key. Supports Completions and Responses API toggle. | -| **Anthropic-compatible** | Any endpoint with Anthropic API format | Custom base URL + key | +| Provider | Models | Setup | +| ------------------------ | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | +| **OpenRouter** | Claude, GPT, Gemini, DeepSeek, Qwen, and others | API key from [openrouter.ai](https://openrouter.ai) | +| **Anthropic** | Claude Sonnet 4.6, Claude Opus 4.6 | API key from [console.anthropic.com](https://console.anthropic.com) | +| **OpenAI** | GPT-5.3 Codex, GPT-4.1, o3, o4-mini | API key from [platform.openai.com](https://platform.openai.com) | +| **Google AI** | Gemini 3.1 Pro, Gemini 3 Flash | API key from [aistudio.google.dev](https://aistudio.google.dev) | +| **Z.ai** | GLM-5.1, GLM-5, GLM-4.7, GLM-4.5 family | API key from [docs.z.ai](https://docs.z.ai/devpack/quick-start) | +| **MiniMax** | MiniMax M3, M2.7, M2.7-highspeed, M2.5, M2.1 | API key from [platform.minimax.io](https://platform.minimax.io/user-center/basic-information/interface-key) | +| **OpenAI-compatible** | Any endpoint with OpenAI API format | Custom base URL + key. Supports Completions and Responses API toggle. | +| **Anthropic-compatible** | Any endpoint with Anthropic API format | Custom base URL + key | No backend, no subscription — your key talks directly to the provider. diff --git a/tests/engine/app/ai/model.test.ts b/tests/engine/app/ai/model.test.ts index 937525949..9feb4889e 100644 --- a/tests/engine/app/ai/model.test.ts +++ b/tests/engine/app/ai/model.test.ts @@ -31,6 +31,38 @@ describe('resolveLanguageModelID', () => { }) describe('model provider registry', () => { + test('offers MiniMax-M3 as the default MiniMax model', () => { + const provider = AI_PROVIDERS.find(({ id }) => id === 'minimax') + expect(provider?.defaultModel).toBe('MiniMax-M3') + expect(provider?.models[0]).toMatchObject({ id: 'MiniMax-M3' }) + }) + + test('sends MiniMax-M3 through the OpenAI-compatible chat endpoint', async () => { + let requestURL = '' + let requestBody = '' + const fetchSpy: typeof fetch = async (input, init) => { + requestURL = String(input) + requestBody = String(init?.body) + throw new Error('stop') + } + const config: ModelConfig = { + providerID: 'minimax', + apiKey: 'test-key', + modelID: 'MiniMax-M3', + customModelID: '', + customBaseURL: '', + customAPIType: 'completions' + } + + const model = modelProviderAdapter('minimax').create(config, { fetch: fetchSpy }) + await model + .doGenerate({ prompt: [{ role: 'user', content: [{ type: 'text', text: 'hi' }] }] }) + .catch(() => undefined) + + expect(requestURL).toBe('https://api.minimax.io/v1/chat/completions') + expect(requestBody).toContain('"model":"MiniMax-M3"') + }) + test('registers every direct provider without handling ACP agents as models', () => { for (const provider of AI_PROVIDERS) { expect(modelProviderAdapter(provider.id).create).toBeFunction()