diff --git a/packages/i18n/src/locales/en/settings.yaml b/packages/i18n/src/locales/en/settings.yaml index c592a15cb8..474fb4f579 100644 --- a/packages/i18n/src/locales/en/settings.yaml +++ b/packages/i18n/src/locales/en/settings.yaml @@ -685,6 +685,12 @@ pages: azure-ai-foundry: description: Azure AI Foundry title: Azure AI Foundry + minimax: + description: minimaxi.com + title: MiniMax + minimax-global: + description: minimax.io + title: MiniMax Global mistral: description: mistral.ai title: Mistral diff --git a/packages/i18n/src/locales/es/settings.yaml b/packages/i18n/src/locales/es/settings.yaml index 66403b79b1..f7da86da96 100644 --- a/packages/i18n/src/locales/es/settings.yaml +++ b/packages/i18n/src/locales/es/settings.yaml @@ -658,6 +658,12 @@ pages: azure-ai-foundry: description: Azure AI Foundry title: Azure AI Foundry + minimax: + description: minimaxi.com + title: MiniMax + minimax-global: + description: minimax.io + title: MiniMax Global mistral: description: mistral.ai title: Mistral diff --git a/packages/i18n/src/locales/fr/settings.yaml b/packages/i18n/src/locales/fr/settings.yaml index 1f2034e15d..aba3089397 100644 --- a/packages/i18n/src/locales/fr/settings.yaml +++ b/packages/i18n/src/locales/fr/settings.yaml @@ -658,6 +658,12 @@ pages: azure-ai-foundry: description: Azure AI Foundry title: Azure AI Foundry + minimax: + description: minimaxi.com + title: MiniMax + minimax-global: + description: minimax.io + title: MiniMax Global mistral: description: mistral.ai title: Mistral diff --git a/packages/i18n/src/locales/ja/settings.yaml b/packages/i18n/src/locales/ja/settings.yaml index 0e1ee915c3..cb30d1e595 100644 --- a/packages/i18n/src/locales/ja/settings.yaml +++ b/packages/i18n/src/locales/ja/settings.yaml @@ -658,6 +658,12 @@ pages: azure-ai-foundry: description: Azure AI Foundry title: Azure AI Foundry + minimax: + description: minimaxi.com + title: MiniMax + minimax-global: + description: minimax.io + title: MiniMax Global mistral: description: mistral.ai title: Mistral diff --git a/packages/i18n/src/locales/ko/settings.yaml b/packages/i18n/src/locales/ko/settings.yaml index d82856af3e..d8e3a378e8 100644 --- a/packages/i18n/src/locales/ko/settings.yaml +++ b/packages/i18n/src/locales/ko/settings.yaml @@ -658,6 +658,12 @@ pages: azure-ai-foundry: description: Azure AI Foundry title: Azure AI Foundry + minimax: + description: minimaxi.com + title: MiniMax + minimax-global: + description: minimax.io + title: MiniMax Global mistral: description: mistral.ai title: Mistral diff --git a/packages/i18n/src/locales/ru/settings.yaml b/packages/i18n/src/locales/ru/settings.yaml index 8e06b3aec8..528fe58676 100644 --- a/packages/i18n/src/locales/ru/settings.yaml +++ b/packages/i18n/src/locales/ru/settings.yaml @@ -658,6 +658,12 @@ pages: azure-ai-foundry: description: Azure AI Foundry title: Azure AI Foundry + minimax: + description: minimaxi.com + title: MiniMax + minimax-global: + description: minimax.io + title: MiniMax Global mistral: description: mistral.ai title: Mistral diff --git a/packages/i18n/src/locales/vi/settings.yaml b/packages/i18n/src/locales/vi/settings.yaml index b318a94b73..4660b03d65 100644 --- a/packages/i18n/src/locales/vi/settings.yaml +++ b/packages/i18n/src/locales/vi/settings.yaml @@ -658,6 +658,12 @@ pages: azure-ai-foundry: description: Azure AI Foundry title: Azure AI Foundry + minimax: + description: minimaxi.com + title: MiniMax + minimax-global: + description: minimax.io + title: MiniMax Global mistral: description: mistral.ai title: Mistral diff --git a/packages/i18n/src/locales/zh-Hans/settings.yaml b/packages/i18n/src/locales/zh-Hans/settings.yaml index 1b74d90a2e..c1ffd8f5c7 100644 --- a/packages/i18n/src/locales/zh-Hans/settings.yaml +++ b/packages/i18n/src/locales/zh-Hans/settings.yaml @@ -658,6 +658,12 @@ pages: azure-ai-foundry: description: Azure AI Foundry title: Azure AI Foundry + minimax: + description: minimaxi.com + title: MiniMax + minimax-global: + description: minimax.io + title: MiniMax Global mistral: description: mistral.ai title: Mistral diff --git a/packages/i18n/src/locales/zh-Hant/settings.yaml b/packages/i18n/src/locales/zh-Hant/settings.yaml index dbe31468f9..5b8f5c69a2 100644 --- a/packages/i18n/src/locales/zh-Hant/settings.yaml +++ b/packages/i18n/src/locales/zh-Hant/settings.yaml @@ -658,6 +658,12 @@ pages: azure-ai-foundry: description: Azure AI Foundry title: Azure AI Foundry + minimax: + description: minimaxi.com + title: MiniMax + minimax-global: + description: minimax.io + title: MiniMax Global mistral: description: mistral.ai title: Mistral diff --git a/packages/stage-ui/src/libs/providers/providers/index.ts b/packages/stage-ui/src/libs/providers/providers/index.ts index 569a0c686a..d8f1f852d4 100644 --- a/packages/stage-ui/src/libs/providers/providers/index.ts +++ b/packages/stage-ui/src/libs/providers/providers/index.ts @@ -15,6 +15,7 @@ import './fireworks-ai' import './featherless-ai' import './comet-api' import './perplexity-ai' +import './minimax' import './mistral-ai' import './moonshot-ai' import './modelscope' diff --git a/packages/stage-ui/src/libs/providers/providers/minimax/index.ts b/packages/stage-ui/src/libs/providers/providers/minimax/index.ts new file mode 100644 index 0000000000..519d676e42 --- /dev/null +++ b/packages/stage-ui/src/libs/providers/providers/minimax/index.ts @@ -0,0 +1,148 @@ +import type { ModelInfo } from '../../types' + +import { createMinimax, createMinimaxCn } from '@xsai-ext/providers/create' +import { z } from 'zod' + +import { createOpenAICompatibleValidators } from '../../validators/openai-compatible' +import { defineProvider } from '../registry' + +const minimaxCnConfigSchema = z.object({ + apiKey: z + .string('API Key'), + baseUrl: z + .string('Base URL') + .optional() + .default('https://api.minimaxi.com/v1/'), +}) + +type MinimaxCnConfig = z.input + +const minimaxGlobalConfigSchema = z.object({ + apiKey: z + .string('API Key'), + baseUrl: z + .string('Base URL') + .optional() + .default('https://api.minimax.io/v1/'), +}) + +type MinimaxGlobalConfig = z.input + +const minimaxModels: ModelInfo[] = [ + { + id: 'MiniMax-M2.5', + name: 'MiniMax M2.5', + provider: 'minimax', + description: 'Top performance and cost-effectiveness for complex tasks', + }, + { + id: 'MiniMax-M2.5-highspeed', + name: 'MiniMax M2.5 Highspeed', + provider: 'minimax', + description: 'M2.5 high-speed version with same quality', + }, + { + id: 'MiniMax-M2.1', + name: 'MiniMax M2.1', + provider: 'minimax', + description: 'Strong multilingual programming capabilities', + }, + { + id: 'MiniMax-M2.1-highspeed', + name: 'MiniMax M2.1 Highspeed', + provider: 'minimax', + description: 'M2.1 high-speed version with same quality', + }, + { + id: 'M2-her', + name: 'MiniMax M2-her', + provider: 'minimax', + description: 'Specialized for roleplay and multi-turn dialogue', + }, + { + id: 'MiniMax-M2', + name: 'MiniMax M2', + provider: 'minimax', + description: 'Designed for efficient coding and agent workflows', + }, +] + +export const providerMinimax = defineProvider({ + id: 'minimax', + name: 'MiniMax', + nameLocalize: ({ t }) => t('settings.pages.providers.provider.minimax.title'), + description: 'minimaxi.com', + descriptionLocalize: ({ t }) => t('settings.pages.providers.provider.minimax.description'), + tasks: ['chat'], + icon: 'i-lobe-icons:minimax', + iconColor: 'i-lobe-icons:minimax-color', + + createProviderConfig: ({ t }) => minimaxCnConfigSchema.extend({ + apiKey: minimaxCnConfigSchema.shape.apiKey.meta({ + labelLocalized: t('settings.pages.providers.catalog.edit.config.common.fields.field.api-key.label'), + descriptionLocalized: t('settings.pages.providers.catalog.edit.config.common.fields.field.api-key.description'), + placeholderLocalized: t('settings.pages.providers.catalog.edit.config.common.fields.field.api-key.placeholder'), + type: 'password', + }), + baseUrl: minimaxCnConfigSchema.shape.baseUrl.meta({ + labelLocalized: t('settings.pages.providers.catalog.edit.config.common.fields.field.base-url.label'), + descriptionLocalized: t('settings.pages.providers.catalog.edit.config.common.fields.field.base-url.description'), + placeholderLocalized: t('settings.pages.providers.catalog.edit.config.common.fields.field.base-url.placeholder'), + }), + }), + createProvider(config) { + return createMinimaxCn(config.apiKey, config.baseUrl) + }, + + extraMethods: { + listModels: async () => minimaxModels, + }, + validationRequiredWhen(config) { + return !!config.apiKey?.trim() + }, + validators: { + ...createOpenAICompatibleValidators({ + checks: ['connectivity'], + }), + }, +}) + +export const providerMinimaxGlobal = defineProvider({ + id: 'minimax-global', + name: 'MiniMax Global', + nameLocalize: ({ t }) => t('settings.pages.providers.provider.minimax-global.title'), + description: 'minimax.io', + descriptionLocalize: ({ t }) => t('settings.pages.providers.provider.minimax-global.description'), + tasks: ['chat'], + icon: 'i-lobe-icons:minimax', + iconColor: 'i-lobe-icons:minimax-color', + + createProviderConfig: ({ t }) => minimaxGlobalConfigSchema.extend({ + apiKey: minimaxGlobalConfigSchema.shape.apiKey.meta({ + labelLocalized: t('settings.pages.providers.catalog.edit.config.common.fields.field.api-key.label'), + descriptionLocalized: t('settings.pages.providers.catalog.edit.config.common.fields.field.api-key.description'), + placeholderLocalized: t('settings.pages.providers.catalog.edit.config.common.fields.field.api-key.placeholder'), + type: 'password', + }), + baseUrl: minimaxGlobalConfigSchema.shape.baseUrl.meta({ + labelLocalized: t('settings.pages.providers.catalog.edit.config.common.fields.field.base-url.label'), + descriptionLocalized: t('settings.pages.providers.catalog.edit.config.common.fields.field.base-url.description'), + placeholderLocalized: t('settings.pages.providers.catalog.edit.config.common.fields.field.base-url.placeholder'), + }), + }), + createProvider(config) { + return createMinimax(config.apiKey, config.baseUrl) + }, + + extraMethods: { + listModels: async () => minimaxModels.map(m => ({ ...m, provider: 'minimax-global' })), + }, + validationRequiredWhen(config) { + return !!config.apiKey?.trim() + }, + validators: { + ...createOpenAICompatibleValidators({ + checks: ['connectivity'], + }), + }, +}) diff --git a/packages/stage-ui/src/stores/providers.ts b/packages/stage-ui/src/stores/providers.ts index 94b4273b42..e6204cd6e8 100644 --- a/packages/stage-ui/src/stores/providers.ts +++ b/packages/stage-ui/src/stores/providers.ts @@ -27,6 +27,8 @@ import { createDeepSeek, createFireworks, createGoogleGenerativeAI, + createMinimax, + createMinimaxCn, createMistral, createMoonshotai, createNovita, @@ -1997,6 +1999,50 @@ export const useProvidersStore = defineStore('providers', () => { validation: ['health', 'model_list'], iconColor: 'i-lobe-icons:mistral', }), + 'minimax': buildOpenAICompatibleProvider({ + id: 'minimax', + name: 'MiniMax', + nameKey: 'settings.pages.providers.provider.minimax.title', + descriptionKey: 'settings.pages.providers.provider.minimax.description', + icon: 'i-lobe-icons:minimax', + description: 'minimaxi.com', + defaultBaseUrl: 'https://api.minimaxi.com/v1/', + creator: createMinimaxCn, + validation: ['health'], + iconColor: 'i-lobe-icons:minimax-color', + capabilities: { + listModels: async () => [ + { id: 'MiniMax-M2.5', name: 'MiniMax M2.5', provider: 'minimax', description: 'Top performance and cost-effectiveness for complex tasks' }, + { id: 'MiniMax-M2.5-highspeed', name: 'MiniMax M2.5 Highspeed', provider: 'minimax', description: 'M2.5 high-speed version with same quality' }, + { id: 'MiniMax-M2.1', name: 'MiniMax M2.1', provider: 'minimax', description: 'Strong multilingual programming capabilities' }, + { id: 'MiniMax-M2.1-highspeed', name: 'MiniMax M2.1 Highspeed', provider: 'minimax', description: 'M2.1 high-speed version with same quality' }, + { id: 'M2-her', name: 'MiniMax M2-her', provider: 'minimax', description: 'Specialized for roleplay and multi-turn dialogue' }, + { id: 'MiniMax-M2', name: 'MiniMax M2', provider: 'minimax', description: 'Designed for efficient coding and agent workflows' }, + ], + }, + }), + 'minimax-global': buildOpenAICompatibleProvider({ + id: 'minimax-global', + name: 'MiniMax Global', + nameKey: 'settings.pages.providers.provider.minimax-global.title', + descriptionKey: 'settings.pages.providers.provider.minimax-global.description', + icon: 'i-lobe-icons:minimax', + description: 'minimax.io', + defaultBaseUrl: 'https://api.minimax.io/v1/', + creator: createMinimax, + validation: ['health'], + iconColor: 'i-lobe-icons:minimax-color', + capabilities: { + listModels: async () => [ + { id: 'MiniMax-M2.5', name: 'MiniMax M2.5', provider: 'minimax-global', description: 'Top performance and cost-effectiveness for complex tasks' }, + { id: 'MiniMax-M2.5-highspeed', name: 'MiniMax M2.5 Highspeed', provider: 'minimax-global', description: 'M2.5 high-speed version with same quality' }, + { id: 'MiniMax-M2.1', name: 'MiniMax M2.1', provider: 'minimax-global', description: 'Strong multilingual programming capabilities' }, + { id: 'MiniMax-M2.1-highspeed', name: 'MiniMax M2.1 Highspeed', provider: 'minimax-global', description: 'M2.1 high-speed version with same quality' }, + { id: 'M2-her', name: 'MiniMax M2-her', provider: 'minimax-global', description: 'Specialized for roleplay and multi-turn dialogue' }, + { id: 'MiniMax-M2', name: 'MiniMax M2', provider: 'minimax-global', description: 'Designed for efficient coding and agent workflows' }, + ], + }, + }), 'moonshot-ai': buildOpenAICompatibleProvider({ id: 'moonshot-ai', name: 'Moonshot AI', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 429b2f7484..330a21f9ed 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3042,7 +3042,7 @@ importers: version: 14.1.0(vue@3.5.26(typescript@5.9.3)) '@wxt-dev/module-vue': specifier: ^1.0.3 - version: 1.0.3(vite@8.0.0-beta.9(@types/node@24.10.9)(esbuild@0.27.2)(jiti@2.6.1)(less@4.5.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))(wxt@0.20.13(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(rollup@4.55.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.0.3(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))(wxt@0.20.13(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(rollup@4.55.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) nanoid: specifier: ^5.1.6 version: 5.1.6 @@ -23291,9 +23291,9 @@ snapshots: '@types/filesystem': 0.0.36 '@types/har-format': 1.2.16 - '@wxt-dev/module-vue@1.0.3(vite@8.0.0-beta.9(@types/node@24.10.9)(esbuild@0.27.2)(jiti@2.6.1)(less@4.5.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))(wxt@0.20.13(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(rollup@4.55.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@wxt-dev/module-vue@1.0.3(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))(wxt@0.20.13(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(rollup@4.55.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@vitejs/plugin-vue': 6.0.3(vite@8.0.0-beta.9(@types/node@24.10.9)(esbuild@0.27.2)(jiti@2.6.1)(less@4.5.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) + '@vitejs/plugin-vue': 6.0.3(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) wxt: 0.20.13(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(rollup@4.55.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - vite