From 7a93d2dd2aa3657a12840fb4185cb45b97f33f40 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Thu, 6 Nov 2025 09:32:21 +0000 Subject: [PATCH 1/2] feat: add MiniMax-M2-Stable model and enable prompt caching - Add MiniMax-M2-Stable model for high concurrency commercial use - Enable prompt caching for both MiniMax-M2 and MiniMax-M2-Stable models - Update pricing information for cache reads (0.03/M tokens) and writes (0.375/M tokens) - Update tests to cover new model and caching support Fixes #9070 --- packages/types/src/providers/minimax.ts | 26 +++++++++++---- src/api/providers/__tests__/minimax.spec.ts | 36 +++++++++++++++++++-- 2 files changed, 54 insertions(+), 8 deletions(-) diff --git a/packages/types/src/providers/minimax.ts b/packages/types/src/providers/minimax.ts index 47362e01bff..6fceeb3ecd7 100644 --- a/packages/types/src/providers/minimax.ts +++ b/packages/types/src/providers/minimax.ts @@ -1,8 +1,9 @@ import type { ModelInfo } from "../model.js" // Minimax -// https://www.minimax.io/platform/document/text_api_intro -// https://www.minimax.io/platform/document/pricing +// https://platform.minimax.io/docs/guides/pricing +// https://platform.minimax.io/docs/api-reference/text-openai-api +// https://platform.minimax.io/docs/api-reference/text-anthropic-api export type MinimaxModelId = keyof typeof minimaxModels export const minimaxDefaultModelId: MinimaxModelId = "MiniMax-M2" @@ -11,14 +12,27 @@ export const minimaxModels = { maxTokens: 16_384, contextWindow: 192_000, supportsImages: false, - supportsPromptCache: false, + supportsPromptCache: true, inputPrice: 0.3, outputPrice: 1.2, - cacheWritesPrice: 0, - cacheReadsPrice: 0, + cacheWritesPrice: 0.375, + cacheReadsPrice: 0.03, preserveReasoning: true, description: - "MiniMax M2, a model born for Agents and code, featuring Top-tier Coding Capabilities, Powerful Agentic Performance, and Ultimate Cost-Effectiveness & Speed.", + "MiniMax M2 (Limited-time Free), a model born for Agents and code, featuring Top-tier Coding Capabilities, Powerful Agentic Performance, and Ultimate Cost-Effectiveness & Speed.", + }, + "MiniMax-M2-Stable": { + maxTokens: 16_384, + contextWindow: 192_000, + supportsImages: false, + supportsPromptCache: true, + inputPrice: 0.3, + outputPrice: 1.2, + cacheWritesPrice: 0.375, + cacheReadsPrice: 0.03, + preserveReasoning: true, + description: + "MiniMax M2 Stable (High Concurrency, Commercial Use), a model born for Agents and code, featuring Top-tier Coding Capabilities, Powerful Agentic Performance, and Ultimate Cost-Effectiveness & Speed.", }, } as const satisfies Record diff --git a/src/api/providers/__tests__/minimax.spec.ts b/src/api/providers/__tests__/minimax.spec.ts index 1033626d0ea..d1e25358fab 100644 --- a/src/api/providers/__tests__/minimax.spec.ts +++ b/src/api/providers/__tests__/minimax.spec.ts @@ -82,7 +82,25 @@ describe("MiniMaxHandler", () => { expect(model.info).toEqual(minimaxModels[testModelId]) expect(model.info.contextWindow).toBe(192_000) expect(model.info.maxTokens).toBe(16_384) - expect(model.info.supportsPromptCache).toBe(false) + expect(model.info.supportsPromptCache).toBe(true) + expect(model.info.cacheWritesPrice).toBe(0.375) + expect(model.info.cacheReadsPrice).toBe(0.03) + }) + + it("should return MiniMax-M2-Stable model with correct configuration", () => { + const testModelId: MinimaxModelId = "MiniMax-M2-Stable" + const handlerWithModel = new MiniMaxHandler({ + apiModelId: testModelId, + minimaxApiKey: "test-minimax-api-key", + }) + const model = handlerWithModel.getModel() + expect(model.id).toBe(testModelId) + expect(model.info).toEqual(minimaxModels[testModelId]) + expect(model.info.contextWindow).toBe(192_000) + expect(model.info.maxTokens).toBe(16_384) + expect(model.info.supportsPromptCache).toBe(true) + expect(model.info.cacheWritesPrice).toBe(0.375) + expect(model.info.cacheReadsPrice).toBe(0.03) }) }) @@ -269,9 +287,23 @@ describe("MiniMaxHandler", () => { expect(model.maxTokens).toBe(16_384) expect(model.contextWindow).toBe(192_000) expect(model.supportsImages).toBe(false) - expect(model.supportsPromptCache).toBe(false) + expect(model.supportsPromptCache).toBe(true) + expect(model.inputPrice).toBe(0.3) + expect(model.outputPrice).toBe(1.2) + expect(model.cacheWritesPrice).toBe(0.375) + expect(model.cacheReadsPrice).toBe(0.03) + }) + + it("should correctly configure MiniMax-M2-Stable model properties", () => { + const model = minimaxModels["MiniMax-M2-Stable"] + expect(model.maxTokens).toBe(16_384) + expect(model.contextWindow).toBe(192_000) + expect(model.supportsImages).toBe(false) + expect(model.supportsPromptCache).toBe(true) expect(model.inputPrice).toBe(0.3) expect(model.outputPrice).toBe(1.2) + expect(model.cacheWritesPrice).toBe(0.375) + expect(model.cacheReadsPrice).toBe(0.03) }) }) }) From 737f61abdda6b5d051de01b38b18b6da77a8037d Mon Sep 17 00:00:00 2001 From: Daniel <57051444+daniel-lxs@users.noreply.github.com> Date: Thu, 6 Nov 2025 15:07:04 -0500 Subject: [PATCH 2/2] Update MiniMax M2 description Removed 'Limited-time Free' from MiniMax M2 description. --- packages/types/src/providers/minimax.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/types/src/providers/minimax.ts b/packages/types/src/providers/minimax.ts index 6fceeb3ecd7..14c19616970 100644 --- a/packages/types/src/providers/minimax.ts +++ b/packages/types/src/providers/minimax.ts @@ -19,7 +19,7 @@ export const minimaxModels = { cacheReadsPrice: 0.03, preserveReasoning: true, description: - "MiniMax M2 (Limited-time Free), a model born for Agents and code, featuring Top-tier Coding Capabilities, Powerful Agentic Performance, and Ultimate Cost-Effectiveness & Speed.", + "MiniMax M2, a model born for Agents and code, featuring Top-tier Coding Capabilities, Powerful Agentic Performance, and Ultimate Cost-Effectiveness & Speed.", }, "MiniMax-M2-Stable": { maxTokens: 16_384,