Skip to content

Commit 1b372ce

Browse files
feat: add MiniMax-M3 model (#946)
Co-authored-by: Roomote <roomote@roomote.dev>
1 parent 45968c0 commit 1b372ce

2 files changed

Lines changed: 47 additions & 3 deletions

File tree

packages/types/src/providers/minimax.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,24 @@ import type { ModelInfo } from "../model.js"
55
// https://platform.minimax.io/docs/guides/pricing-paygo
66
// https://platform.minimax.io/docs/guides/pricing-tokenplan
77
export type MinimaxModelId = keyof typeof minimaxModels
8-
export const minimaxDefaultModelId: MinimaxModelId = "MiniMax-M2.7"
8+
export const minimaxDefaultModelId: MinimaxModelId = "MiniMax-M3"
99

1010
export const minimaxModels = {
11+
"MiniMax-M3": {
12+
maxTokens: 16_384,
13+
contextWindow: 1_000_000,
14+
supportsImages: true,
15+
supportsPromptCache: true,
16+
includedTools: ["search_and_replace"],
17+
excludedTools: ["apply_diff"],
18+
preserveReasoning: true,
19+
inputPrice: 0.3,
20+
outputPrice: 1.2,
21+
cacheWritesPrice: 0.375,
22+
cacheReadsPrice: 0.06,
23+
description:
24+
"MiniMax M3, MiniMax's frontier coding model with native multimodal (image and video) input and a 1M token context window, built for agent reasoning, tool calling, and long-context tasks. Prices reflect the permanent 50% discount; input, output, and cache read prices double for requests with over 512k input tokens. See pricing at https://platform.minimax.io/docs/guides/pricing-paygo. Note: When using TokenPlan, usage is billed per request, not per token.",
25+
},
1126
"MiniMax-M2.5": {
1227
maxTokens: 16_384,
1328
contextWindow: 204_800,

src/api/providers/__tests__/minimax.spec.ts

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,23 @@ describe("MiniMaxHandler", () => {
8989
expect(model.info).toEqual(minimaxModels[testModelId])
9090
})
9191

92+
it("should return MiniMax-M3 model with correct configuration", () => {
93+
const testModelId: MinimaxModelId = "MiniMax-M3"
94+
const handlerWithModel = new MiniMaxHandler({
95+
apiModelId: testModelId,
96+
minimaxApiKey: "test-minimax-api-key",
97+
})
98+
const model = handlerWithModel.getModel()
99+
expect(model.id).toBe(testModelId)
100+
expect(model.info).toEqual(minimaxModels[testModelId])
101+
expect(model.info.contextWindow).toBe(1_000_000)
102+
expect(model.info.maxTokens).toBe(16_384)
103+
expect(model.info.supportsImages).toBe(true)
104+
expect(model.info.supportsPromptCache).toBe(true)
105+
expect(model.info.cacheWritesPrice).toBe(0.375)
106+
expect(model.info.cacheReadsPrice).toBe(0.06)
107+
})
108+
92109
it("should return MiniMax-M2.5 model with correct configuration", () => {
93110
const testModelId: MinimaxModelId = "MiniMax-M2.5"
94111
const handlerWithModel = new MiniMaxHandler({
@@ -193,10 +210,10 @@ describe("MiniMaxHandler", () => {
193210
expect(model.info).toEqual(minimaxModels[minimaxDefaultModelId])
194211
})
195212

196-
it("should default to MiniMax-M2.7 model", () => {
213+
it("should default to MiniMax-M3 model", () => {
197214
const handlerDefault = new MiniMaxHandler({ minimaxApiKey: "test-minimax-api-key" })
198215
const model = handlerDefault.getModel()
199-
expect(model.id).toBe("MiniMax-M2.7")
216+
expect(model.id).toBe("MiniMax-M3")
200217
})
201218
})
202219

@@ -398,6 +415,18 @@ describe("MiniMaxHandler", () => {
398415
})
399416

400417
describe("Model Configuration", () => {
418+
it("should correctly configure MiniMax-M3 model properties", () => {
419+
const model = minimaxModels["MiniMax-M3"]
420+
expect(model.maxTokens).toBe(16_384)
421+
expect(model.contextWindow).toBe(1_000_000)
422+
expect(model.supportsImages).toBe(true)
423+
expect(model.supportsPromptCache).toBe(true)
424+
expect(model.inputPrice).toBe(0.3)
425+
expect(model.outputPrice).toBe(1.2)
426+
expect(model.cacheWritesPrice).toBe(0.375)
427+
expect(model.cacheReadsPrice).toBe(0.06)
428+
})
429+
401430
it("should correctly configure MiniMax-M2 model properties", () => {
402431
const model = minimaxModels["MiniMax-M2"]
403432
expect(model.maxTokens).toBe(16_384)

0 commit comments

Comments
 (0)