diff --git a/src/WebStarter/appsettings.json b/src/WebStarter/appsettings.json index 3e4bf12c9..7405ec21b 100644 --- a/src/WebStarter/appsettings.json +++ b/src/WebStarter/appsettings.json @@ -662,6 +662,42 @@ { "Provider": "minimax", "Models": [ + { + "Id": "MiniMax-M3.1-Flash", + "Name": "MiniMax-M3.1-Flash", + "Version": "MiniMax-M3.1-Flash", + "ApiKey": "", + "Endpoint": "https://api.minimax.io/v1", + "ContextWindow": 1000000, + "Type": "chat", + "MultiModal": true, + "Capabilities": [ + "Chat", + "ImageReading" + ], + "InputModalities": [ + "text", + "image", + "video" + ], + "Reasoning": { + "Parameters": { + "ThinkingType": { + "Default": "adaptive", + "Options": [ "adaptive" ] + }, + "EffortLevel": { + "Default": "max", + "Options": [ "low", "medium", "high", "xhigh", "max" ] + } + } + }, + "Cost": { + "TextInputCost": 0.00015, + "CachedTextInputCost": 0.000015, + "TextOutputCost": 0.0006 + } + }, { "Id": "MiniMax-M3", "Name": "MiniMax-M3", @@ -776,6 +812,42 @@ { "Provider": "minimax-cn", "Models": [ + { + "Id": "MiniMax-M3.1-Flash", + "Name": "MiniMax-M3.1-Flash", + "Version": "MiniMax-M3.1-Flash", + "ApiKey": "", + "Endpoint": "https://api.minimaxi.com/v1", + "ContextWindow": 1000000, + "Type": "chat", + "MultiModal": true, + "Capabilities": [ + "Chat", + "ImageReading" + ], + "InputModalities": [ + "text", + "image", + "video" + ], + "Reasoning": { + "Parameters": { + "ThinkingType": { + "Default": "adaptive", + "Options": [ "adaptive" ] + }, + "EffortLevel": { + "Default": "max", + "Options": [ "low", "medium", "high", "xhigh", "max" ] + } + } + }, + "Cost": { + "TextInputCost": 0.00015, + "CachedTextInputCost": 0.000015, + "TextOutputCost": 0.0006 + } + }, { "Id": "MiniMax-M3", "Name": "MiniMax-M3", @@ -890,6 +962,42 @@ { "Provider": "minimax-anthropic", "Models": [ + { + "Id": "MiniMax-M3.1-Flash", + "Name": "MiniMax-M3.1-Flash", + "Version": "MiniMax-M3.1-Flash", + "ApiKey": "", + "Endpoint": "https://api.minimax.io/anthropic", + "ContextWindow": 1000000, + "Type": "chat", + "MultiModal": true, + "Capabilities": [ + "Chat", + "ImageReading" + ], + "InputModalities": [ + "text", + "image", + "video" + ], + "Reasoning": { + "Parameters": { + "ThinkingType": { + "Default": "adaptive", + "Options": [ "adaptive" ] + }, + "EffortLevel": { + "Default": "max", + "Options": [ "low", "medium", "high", "xhigh", "max" ] + } + } + }, + "Cost": { + "TextInputCost": 0.00015, + "CachedTextInputCost": 0.000015, + "TextOutputCost": 0.0006 + } + }, { "Id": "MiniMax-M3", "Name": "MiniMax-M3", @@ -1004,6 +1112,42 @@ { "Provider": "minimax-anthropic-cn", "Models": [ + { + "Id": "MiniMax-M3.1-Flash", + "Name": "MiniMax-M3.1-Flash", + "Version": "MiniMax-M3.1-Flash", + "ApiKey": "", + "Endpoint": "https://api.minimaxi.com/anthropic", + "ContextWindow": 1000000, + "Type": "chat", + "MultiModal": true, + "Capabilities": [ + "Chat", + "ImageReading" + ], + "InputModalities": [ + "text", + "image", + "video" + ], + "Reasoning": { + "Parameters": { + "ThinkingType": { + "Default": "adaptive", + "Options": [ "adaptive" ] + }, + "EffortLevel": { + "Default": "max", + "Options": [ "low", "medium", "high", "xhigh", "max" ] + } + } + }, + "Cost": { + "TextInputCost": 0.00015, + "CachedTextInputCost": 0.000015, + "TextOutputCost": 0.0006 + } + }, { "Id": "MiniMax-M3", "Name": "MiniMax-M3", diff --git a/tests/BotSharp.LLM.Tests/MiniMaxProviderTests.cs b/tests/BotSharp.LLM.Tests/MiniMaxProviderTests.cs index 716dfcb1c..fcbb3bd4d 100644 --- a/tests/BotSharp.LLM.Tests/MiniMaxProviderTests.cs +++ b/tests/BotSharp.LLM.Tests/MiniMaxProviderTests.cs @@ -52,9 +52,21 @@ public void WebStarterSettingsCoverModelsEndpointsAndCapabilities() foreach (var expected in ExpectedEndpoints) { var provider = providers.Single(x => x.Provider == expected.Key); - provider.Models.Select(x => x.Id).ShouldBe(["MiniMax-M3", "MiniMax-M2.7"]); + provider.Models.Select(x => x.Id).ShouldBe(["MiniMax-M3.1-Flash", "MiniMax-M3", "MiniMax-M2.7"]); provider.Models.ShouldAllBe(x => x.Endpoint == expected.Value); + var flash = provider.Models.Single(x => x.Id == "MiniMax-M3.1-Flash"); + flash.ContextWindow.ShouldBe(1_000_000); + flash.MultiModal.ShouldBeTrue(); + flash.InputModalities.ShouldBe(["text", "image", "video"]); + flash.Reasoning!.Parameters!["ThinkingType"].Default.ShouldBe("adaptive"); + flash.Reasoning.Parameters["EffortLevel"].Default.ShouldBe("max"); + flash.Reasoning.Parameters["EffortLevel"].Options.ShouldBe(["low", "medium", "high", "xhigh", "max"]); + flash.Cost.TextInputCost.ShouldBe(0.00015f); + flash.Cost.CachedTextInputCost.ShouldBe(0.000015f); + flash.Cost.TextOutputCost.ShouldBe(0.0006f); + flash.Cost.TextTokenCostTiers.ShouldBeNull(); + var m3 = provider.Models.Single(x => x.Id == "MiniMax-M3"); m3.ContextWindow.ShouldBe(1_000_000); m3.MultiModal.ShouldBeTrue();