From cbe283c28ffb7e788e6b8b77a8c016878fa824dc Mon Sep 17 00:00:00 2001 From: octo-patch <266937838+octo-patch@users.noreply.github.com> Date: Thu, 9 Jul 2026 08:28:51 +0000 Subject: [PATCH] Add MiniMax provider support --- BotSharp.sln | 15 +++++++++++ .../BotSharp.Plugin.MiniMaxAI.csproj | 17 +++++++++++++ .../MiniMaxAiPlugin.cs | 18 +++++++++++++ .../Providers/Chat/ChatCompletionProvider.cs | 15 +++++++++++ .../Providers/Text/TextCompletionProvider.cs | 13 ++++++++++ .../BotSharp.Plugin.MiniMaxAI/Using.cs | 8 ++++++ src/WebStarter/WebStarter.csproj | 1 + src/WebStarter/appsettings.json | 25 +++++++++++++++++++ 8 files changed, 112 insertions(+) create mode 100644 src/Plugins/BotSharp.Plugin.MiniMaxAI/BotSharp.Plugin.MiniMaxAI.csproj create mode 100644 src/Plugins/BotSharp.Plugin.MiniMaxAI/MiniMaxAiPlugin.cs create mode 100644 src/Plugins/BotSharp.Plugin.MiniMaxAI/Providers/Chat/ChatCompletionProvider.cs create mode 100644 src/Plugins/BotSharp.Plugin.MiniMaxAI/Providers/Text/TextCompletionProvider.cs create mode 100644 src/Plugins/BotSharp.Plugin.MiniMaxAI/Using.cs diff --git a/BotSharp.sln b/BotSharp.sln index 31ce5133e..78db00ed4 100644 --- a/BotSharp.sln +++ b/BotSharp.sln @@ -125,6 +125,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BotSharp.Core.Rules", "src\ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BotSharp.Plugin.DeepSeekAI", "src\Plugins\BotSharp.Plugin.DeepSeekAI\BotSharp.Plugin.DeepSeekAI.csproj", "{AF329442-B48E-4B48-A18A-1C869D1BA6F5}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BotSharp.Plugin.MiniMaxAI", "src\Plugins\BotSharp.Plugin.MiniMaxAI\BotSharp.Plugin.MiniMaxAI.csproj", "{D92C1A49-3F64-4D0C-91C0-B14EA47D2503}" +EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BotSharp.Core.Realtime", "src\Infrastructure\BotSharp.Core.Realtime\BotSharp.Core.Realtime.csproj", "{781F1465-365C-0F22-1775-25025DAFA4C7}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BotSharp.Test.ComputerUse", "tests\BotSharp.Test.ComputerUse\BotSharp.Test.ComputerUse.csproj", "{C19D9AC1-97DD-8E65-E8DB-D295A095AA2D}" @@ -737,6 +739,18 @@ Global {AF329442-B48E-4B48-A18A-1C869D1BA6F5}.Release|x64.Build.0 = Release|Any CPU {AF329442-B48E-4B48-A18A-1C869D1BA6F5}.Release|x86.ActiveCfg = Release|Any CPU {AF329442-B48E-4B48-A18A-1C869D1BA6F5}.Release|x86.Build.0 = Release|Any CPU + {D92C1A49-3F64-4D0C-91C0-B14EA47D2503}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D92C1A49-3F64-4D0C-91C0-B14EA47D2503}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D92C1A49-3F64-4D0C-91C0-B14EA47D2503}.Debug|x64.ActiveCfg = Debug|Any CPU + {D92C1A49-3F64-4D0C-91C0-B14EA47D2503}.Debug|x64.Build.0 = Debug|Any CPU + {D92C1A49-3F64-4D0C-91C0-B14EA47D2503}.Debug|x86.ActiveCfg = Debug|Any CPU + {D92C1A49-3F64-4D0C-91C0-B14EA47D2503}.Debug|x86.Build.0 = Debug|Any CPU + {D92C1A49-3F64-4D0C-91C0-B14EA47D2503}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D92C1A49-3F64-4D0C-91C0-B14EA47D2503}.Release|Any CPU.Build.0 = Release|Any CPU + {D92C1A49-3F64-4D0C-91C0-B14EA47D2503}.Release|x64.ActiveCfg = Release|Any CPU + {D92C1A49-3F64-4D0C-91C0-B14EA47D2503}.Release|x64.Build.0 = Release|Any CPU + {D92C1A49-3F64-4D0C-91C0-B14EA47D2503}.Release|x86.ActiveCfg = Release|Any CPU + {D92C1A49-3F64-4D0C-91C0-B14EA47D2503}.Release|x86.Build.0 = Release|Any CPU {781F1465-365C-0F22-1775-25025DAFA4C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {781F1465-365C-0F22-1775-25025DAFA4C7}.Debug|Any CPU.Build.0 = Debug|Any CPU {781F1465-365C-0F22-1775-25025DAFA4C7}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -1001,6 +1015,7 @@ Global {F812BAAE-5A7D-4DF7-8E71-70696B51C61F} = {E29DC6C4-5E57-48C5-BCB0-6B8F84782749} {AFD64412-4D6A-452E-82A2-79E5D8842E29} = {E29DC6C4-5E57-48C5-BCB0-6B8F84782749} {AF329442-B48E-4B48-A18A-1C869D1BA6F5} = {D5293208-2BEF-42FC-A64C-5954F61720BA} + {D92C1A49-3F64-4D0C-91C0-B14EA47D2503} = {D5293208-2BEF-42FC-A64C-5954F61720BA} {781F1465-365C-0F22-1775-25025DAFA4C7} = {E29DC6C4-5E57-48C5-BCB0-6B8F84782749} {C19D9AC1-97DD-8E65-E8DB-D295A095AA2D} = {32FAFFFE-A4CB-4FEE-BF7C-84518BBC6DCC} {B268E2F0-060F-8466-7D81-ABA4D735CA59} = {51AFE054-AE99-497D-A593-69BAEFB5106F} diff --git a/src/Plugins/BotSharp.Plugin.MiniMaxAI/BotSharp.Plugin.MiniMaxAI.csproj b/src/Plugins/BotSharp.Plugin.MiniMaxAI/BotSharp.Plugin.MiniMaxAI.csproj new file mode 100644 index 000000000..4f3e17b8a --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.MiniMaxAI/BotSharp.Plugin.MiniMaxAI.csproj @@ -0,0 +1,17 @@ + + + + $(TargetFramework) + enable + $(LangVersion) + $(BotSharpVersion) + $(GeneratePackageOnBuild) + $(GenerateDocumentationFile) + $(SolutionDir)packages + + + + + + + diff --git a/src/Plugins/BotSharp.Plugin.MiniMaxAI/MiniMaxAiPlugin.cs b/src/Plugins/BotSharp.Plugin.MiniMaxAI/MiniMaxAiPlugin.cs new file mode 100644 index 000000000..0cc18ceb3 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.MiniMaxAI/MiniMaxAiPlugin.cs @@ -0,0 +1,18 @@ +using BotSharp.Plugin.MiniMaxAI.Providers.Chat; +using BotSharp.Plugin.MiniMaxAI.Providers.Text; + +namespace BotSharp.Plugin.MiniMaxAI; + +public class MiniMaxAiPlugin : IBotSharpPlugin +{ + public string Id => "8a4ebd68-4d7d-4c5c-aed9-263946cc3a0d"; + public string Name => "MiniMax"; + public string Description => "MiniMax AI models exposed through the OpenAI-compatible API."; + public string IconUrl => "https://www.minimax.io/favicon.ico"; + + public void RegisterDI(IServiceCollection services, IConfiguration config) + { + services.AddScoped(); + services.AddScoped(); + } +} diff --git a/src/Plugins/BotSharp.Plugin.MiniMaxAI/Providers/Chat/ChatCompletionProvider.cs b/src/Plugins/BotSharp.Plugin.MiniMaxAI/Providers/Chat/ChatCompletionProvider.cs new file mode 100644 index 000000000..3dc603b77 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.MiniMaxAI/Providers/Chat/ChatCompletionProvider.cs @@ -0,0 +1,15 @@ +namespace BotSharp.Plugin.MiniMaxAI.Providers.Chat; + +public class ChatCompletionProvider : global::BotSharp.Plugin.OpenAI.Providers.Chat.ChatCompletionProvider +{ + public override string Provider => "minimax"; + + public ChatCompletionProvider( + global::BotSharp.Plugin.OpenAI.Settings.OpenAiSettings settings, + ILogger logger, + IServiceProvider services, + IConversationStateService state, + IFileStorageService fileStorage) : base(settings, logger, services, state, fileStorage) + { + } +} diff --git a/src/Plugins/BotSharp.Plugin.MiniMaxAI/Providers/Text/TextCompletionProvider.cs b/src/Plugins/BotSharp.Plugin.MiniMaxAI/Providers/Text/TextCompletionProvider.cs new file mode 100644 index 000000000..1f94a1ba9 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.MiniMaxAI/Providers/Text/TextCompletionProvider.cs @@ -0,0 +1,13 @@ +namespace BotSharp.Plugin.MiniMaxAI.Providers.Text; + +public class TextCompletionProvider : global::BotSharp.Plugin.OpenAI.Providers.Text.TextCompletionProvider +{ + public override string Provider => "minimax"; + + public TextCompletionProvider( + global::BotSharp.Plugin.OpenAI.Settings.OpenAiSettings settings, + ILogger logger, + IServiceProvider services) : base(settings, logger, services) + { + } +} diff --git a/src/Plugins/BotSharp.Plugin.MiniMaxAI/Using.cs b/src/Plugins/BotSharp.Plugin.MiniMaxAI/Using.cs new file mode 100644 index 000000000..06ffb04fd --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.MiniMaxAI/Using.cs @@ -0,0 +1,8 @@ +global using Microsoft.Extensions.Configuration; +global using Microsoft.Extensions.DependencyInjection; +global using Microsoft.Extensions.Logging; + +global using BotSharp.Abstraction.Conversations; +global using BotSharp.Abstraction.Files; +global using BotSharp.Abstraction.MLTasks; +global using BotSharp.Abstraction.Plugins; diff --git a/src/WebStarter/WebStarter.csproj b/src/WebStarter/WebStarter.csproj index 11cba27bc..6f7129e45 100644 --- a/src/WebStarter/WebStarter.csproj +++ b/src/WebStarter/WebStarter.csproj @@ -62,6 +62,7 @@ + diff --git a/src/WebStarter/appsettings.json b/src/WebStarter/appsettings.json index 7688d81ea..79bbe9521 100644 --- a/src/WebStarter/appsettings.json +++ b/src/WebStarter/appsettings.json @@ -594,6 +594,30 @@ } ] }, + { + "Provider": "minimax", + "Models": [ + { + "Id": "MiniMax-M3", + "Name": "MiniMax-M3", + "Version": "MiniMax-M3", + "ApiKey": "", + "Endpoint": "https://api.minimax.io/v1", + "Type": "chat", + "Capabilities": [ + "Chat" + ], + "Cost": { + "TextInputCost": 0.0006, + "CachedTextInputCost": 0.00012, + "AudioInputCost": 0, + "CachedAudioInputCost": 0, + "TextOutputCost": 0.0024, + "AudioOutputCost": 0 + } + } + ] + }, { "Provider": "google-ai", "Models": [ @@ -1056,6 +1080,7 @@ "BotSharp.Plugin.GoogleAI", "BotSharp.Plugin.MetaAI", "BotSharp.Plugin.DeepSeekAI", + "BotSharp.Plugin.MiniMaxAI", "BotSharp.Plugin.MetaMessenger", "BotSharp.Plugin.HuggingFace", "BotSharp.Plugin.KnowledgeBase",