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
This commit is contained in:
Danila Poyarkov 2026-08-01 15:13:56 +03:00
parent ff31f90de9
commit d57a920646
4 changed files with 46 additions and 12 deletions

View file

@ -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.

View file

@ -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' },

View file

@ -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.

View file

@ -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()