From bbe34e3368c1538ba6875f5a774d9a39a33355da Mon Sep 17 00:00:00 2001 From: octo-patch Date: Wed, 8 Apr 2026 21:19:18 +0800 Subject: [PATCH] feat: add MiniMax provider support - Add MiniMax chat model provider using OpenAI-compatible API - Add MINIMAX enum to AiProviderEnum - Register minimax provider in PROVIDER_MAP - Add MiniMax-M2.7 and MiniMax-M2.7-highspeed model support - Add unit tests for the new provider --- packages/openops/src/lib/ai/providers.ts | 2 ++ .../openops/src/lib/ai/providers/minimax.ts | 26 +++++++++++++++++++ packages/openops/test/ai/providers.test.ts | 10 ++++++- packages/shared/src/lib/ai/providers/index.ts | 1 + 4 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 packages/openops/src/lib/ai/providers/minimax.ts diff --git a/packages/openops/src/lib/ai/providers.ts b/packages/openops/src/lib/ai/providers.ts index 3d02ea284e..0c50f13dd1 100644 --- a/packages/openops/src/lib/ai/providers.ts +++ b/packages/openops/src/lib/ai/providers.ts @@ -18,6 +18,7 @@ import { deepseekProvider } from './providers/deep-seek'; import { googleProvider } from './providers/google'; import { googleVertexProvider } from './providers/google-vertex'; import { groqProvider } from './providers/groq'; +import { minimaxProvider } from './providers/minimax'; import { mistralProvider } from './providers/mistral'; import { openAiProvider } from './providers/openai'; import { openaiCompatibleProvider } from './providers/openai-compatible'; @@ -44,6 +45,7 @@ const PROVIDER_MAP: Record = { [AiProviderEnum.GOOGLE]: googleProvider, [AiProviderEnum.GOOGLE_VERTEX]: googleVertexProvider, [AiProviderEnum.GROQ]: groqProvider, + [AiProviderEnum.MINIMAX]: minimaxProvider, [AiProviderEnum.MISTRAL]: mistralProvider, [AiProviderEnum.OPENAI]: openAiProvider, [AiProviderEnum.OPENAI_COMPATIBLE]: openaiCompatibleProvider, diff --git a/packages/openops/src/lib/ai/providers/minimax.ts b/packages/openops/src/lib/ai/providers/minimax.ts new file mode 100644 index 0000000000..2da5cd6c77 --- /dev/null +++ b/packages/openops/src/lib/ai/providers/minimax.ts @@ -0,0 +1,26 @@ +// https://platform.minimax.io/docs/api-reference/text-openai-api +import { createOpenAICompatible } from '@ai-sdk/openai-compatible'; +import { LanguageModel } from 'ai'; +import { AiProvider } from '../providers'; + +const minimaxModels = ['MiniMax-M2.7', 'MiniMax-M2.7-highspeed']; + +const MINIMAX_BASE_URL = 'https://api.minimax.io/v1'; + +function createLanguageModel(params: { + apiKey: string; + model: string; + providerSettings?: Record; +}): LanguageModel { + return createOpenAICompatible({ + name: 'minimax', + apiKey: params.apiKey, + baseURL: MINIMAX_BASE_URL, + ...params.providerSettings, + })(params.model); +} + +export const minimaxProvider: AiProvider = { + models: minimaxModels, + createLanguageModel, +}; diff --git a/packages/openops/test/ai/providers.test.ts b/packages/openops/test/ai/providers.test.ts index 48b97703de..d6bcdeab3a 100644 --- a/packages/openops/test/ai/providers.test.ts +++ b/packages/openops/test/ai/providers.test.ts @@ -39,6 +39,10 @@ jest.mock('../../src/lib/ai/providers/groq', () => ({ groqProvider: { models: ['groqModel'] }, })); +jest.mock('../../src/lib/ai/providers/minimax', () => ({ + minimaxProvider: { models: ['minimaxModel'] }, +})); + jest.mock('../../src/lib/ai/providers/openai-compatible', () => ({ openaiCompatibleProvider: { models: ['openaiCompatibleModel'], @@ -135,6 +139,10 @@ describe('getAvailableProvidersWithModels', () => { provider: AiProviderEnum.GROQ, models: ['groqModel'], }, + { + provider: AiProviderEnum.MINIMAX, + models: ['minimaxModel'], + }, { provider: AiProviderEnum.MISTRAL, models: ['mistralModel'], @@ -161,7 +169,7 @@ describe('getAvailableProvidersWithModels', () => { }, ]; - expect(result).toHaveLength(15); + expect(result).toHaveLength(16); expect(result).toEqual(expected); }); }); diff --git a/packages/shared/src/lib/ai/providers/index.ts b/packages/shared/src/lib/ai/providers/index.ts index 7e2409fb3e..a95c456328 100644 --- a/packages/shared/src/lib/ai/providers/index.ts +++ b/packages/shared/src/lib/ai/providers/index.ts @@ -17,6 +17,7 @@ export enum AiProviderEnum { GOOGLE = 'Google Generative AI', GOOGLE_VERTEX = 'Google Vertex AI', GROQ = 'Groq', + MINIMAX = 'MiniMax', MISTRAL = 'Mistral', OPENAI = 'OpenAI', OPENAI_COMPATIBLE = 'OpenAI Compatible',