diff --git a/common/constants.go b/common/constants.go index 85fcca18..f67dc146 100644 --- a/common/constants.go +++ b/common/constants.go @@ -65,6 +65,7 @@ const ( ChannelTypeGemini = 24 ChannelTypeMoonshot = 25 ChannelTypeBaichuan = 26 + ChannelTypeMinimax = 27 ) var ChannelBaseURLs = []string{ @@ -95,6 +96,7 @@ var ChannelBaseURLs = []string{ "https://generativelanguage.googleapis.com", // 24 "https://api.moonshot.cn", // 25 "https://api.baichuan-ai.com", // 26 + "https://api.minimax.chat", // 27 } const ( diff --git a/common/model-ratio.go b/common/model-ratio.go index 2e7aae71..d1f70de8 100644 --- a/common/model-ratio.go +++ b/common/model-ratio.go @@ -127,6 +127,14 @@ var ModelRatio = map[string]float64{ "moonshot-v1-8k": 0.012 * RMB, "moonshot-v1-32k": 0.024 * RMB, "moonshot-v1-128k": 0.06 * RMB, + // https://platform.baichuan-ai.com/price + "Baichuan2-Turbo": 0.008 * RMB, + "Baichuan2-Turbo-192k": 0.016 * RMB, + "Baichuan2-53B": 0.02 * RMB, + // https://api.minimax.chat/document/price + "abab6": 0.1 * RMB, + "abab5.5": 0.015 * RMB, + "abab5.5s": 0.005 * RMB, } func ModelRatio2JSONString() string { diff --git a/controller/model.go b/controller/model.go index 42ebb598..0f33f919 100644 --- a/controller/model.go +++ b/controller/model.go @@ -5,6 +5,7 @@ import ( "github.com/gin-gonic/gin" "github.com/songquanpeng/one-api/relay/channel/ai360" "github.com/songquanpeng/one-api/relay/channel/baichuan" + "github.com/songquanpeng/one-api/relay/channel/minimax" "github.com/songquanpeng/one-api/relay/channel/moonshot" "github.com/songquanpeng/one-api/relay/constant" "github.com/songquanpeng/one-api/relay/helper" @@ -110,6 +111,17 @@ func init() { Parent: nil, }) } + for _, modelName := range minimax.ModelList { + openAIModels = append(openAIModels, OpenAIModels{ + Id: modelName, + Object: "model", + Created: 1626777600, + OwnedBy: "minimax", + Permission: permission, + Root: modelName, + Parent: nil, + }) + } openAIModelsMap = make(map[string]OpenAIModels) for _, model := range openAIModels { openAIModelsMap[model.Id] = model diff --git a/relay/channel/minimax/constants.go b/relay/channel/minimax/constants.go new file mode 100644 index 00000000..c3da5b2d --- /dev/null +++ b/relay/channel/minimax/constants.go @@ -0,0 +1,7 @@ +package minimax + +var ModelList = []string{ + "abab5.5s-chat", + "abab5.5-chat", + "abab6-chat", +} diff --git a/relay/channel/minimax/main.go b/relay/channel/minimax/main.go new file mode 100644 index 00000000..a01821c2 --- /dev/null +++ b/relay/channel/minimax/main.go @@ -0,0 +1,14 @@ +package minimax + +import ( + "fmt" + "github.com/songquanpeng/one-api/relay/constant" + "github.com/songquanpeng/one-api/relay/util" +) + +func GetRequestURL(meta *util.RelayMeta) (string, error) { + if meta.Mode == constant.RelayModeChatCompletions { + return fmt.Sprintf("%s/v1/text/chatcompletion_v2", meta.BaseURL), nil + } + return "", fmt.Errorf("unsupported relay mode %d for minimax", meta.Mode) +} diff --git a/relay/channel/openai/adaptor.go b/relay/channel/openai/adaptor.go index 0b727d2e..6afe2b2f 100644 --- a/relay/channel/openai/adaptor.go +++ b/relay/channel/openai/adaptor.go @@ -8,6 +8,7 @@ import ( "github.com/songquanpeng/one-api/relay/channel" "github.com/songquanpeng/one-api/relay/channel/ai360" "github.com/songquanpeng/one-api/relay/channel/baichuan" + "github.com/songquanpeng/one-api/relay/channel/minimax" "github.com/songquanpeng/one-api/relay/channel/moonshot" "github.com/songquanpeng/one-api/relay/model" "github.com/songquanpeng/one-api/relay/util" @@ -25,7 +26,8 @@ func (a *Adaptor) Init(meta *util.RelayMeta) { } func (a *Adaptor) GetRequestURL(meta *util.RelayMeta) (string, error) { - if meta.ChannelType == common.ChannelTypeAzure { + switch meta.ChannelType { + case common.ChannelTypeAzure: // https://learn.microsoft.com/en-us/azure/cognitive-services/openai/chatgpt-quickstart?pivots=rest-api&tabs=command-line#rest-api requestURL := strings.Split(meta.RequestURLPath, "?")[0] requestURL = fmt.Sprintf("%s?api-version=%s", requestURL, meta.APIVersion) @@ -39,8 +41,11 @@ func (a *Adaptor) GetRequestURL(meta *util.RelayMeta) (string, error) { requestURL = fmt.Sprintf("/openai/deployments/%s/%s", model_, task) return util.GetFullRequestURL(meta.BaseURL, requestURL, meta.ChannelType), nil + case common.ChannelTypeMinimax: + return minimax.GetRequestURL(meta) + default: + return util.GetFullRequestURL(meta.BaseURL, meta.RequestURLPath, meta.ChannelType), nil } - return util.GetFullRequestURL(meta.BaseURL, meta.RequestURLPath, meta.ChannelType), nil } func (a *Adaptor) SetupRequestHeader(c *gin.Context, req *http.Request, meta *util.RelayMeta) error { @@ -87,6 +92,8 @@ func (a *Adaptor) GetModelList() []string { return moonshot.ModelList case common.ChannelTypeBaichuan: return baichuan.ModelList + case common.ChannelTypeMinimax: + return minimax.ModelList default: return ModelList } @@ -102,6 +109,8 @@ func (a *Adaptor) GetChannelName() string { return "moonshot" case common.ChannelTypeBaichuan: return "baichuan" + case common.ChannelTypeMinimax: + return "minimax" default: return "openai" } diff --git a/web/berry/src/constants/ChannelConstants.js b/web/berry/src/constants/ChannelConstants.js index 86c3e3aa..98ceaebf 100644 --- a/web/berry/src/constants/ChannelConstants.js +++ b/web/berry/src/constants/ChannelConstants.js @@ -74,7 +74,13 @@ export const CHANNEL_OPTIONS = { 26: { key: 26, text: '百川大模型', - value: 23, + value: 26, + color: 'default' + }, + 27: { + key: 27, + text: 'MiniMax', + value: 27, color: 'default' }, 8: { diff --git a/web/berry/src/views/Channel/type/Config.js b/web/berry/src/views/Channel/type/Config.js index c7e759b5..0e89868b 100644 --- a/web/berry/src/views/Channel/type/Config.js +++ b/web/berry/src/views/Channel/type/Config.js @@ -157,6 +157,12 @@ const typeConfig = { }, modelGroup: "baichuan", }, + 27: { + input: { + models: ['abab5.5s-chat', 'abab5.5-chat', 'abab6-chat'], + }, + modelGroup: "minimax", + }, }; export { defaultConfig, typeConfig }; diff --git a/web/default/src/constants/channel.constants.js b/web/default/src/constants/channel.constants.js index 0cf06327..beb0adb1 100644 --- a/web/default/src/constants/channel.constants.js +++ b/web/default/src/constants/channel.constants.js @@ -12,6 +12,7 @@ export const CHANNEL_OPTIONS = [ { key: 25, text: 'Moonshot AI', value: 25, color: 'black' }, { key: 23, text: '腾讯混元', value: 23, color: 'teal' }, { key: 26, text: '百川大模型', value: 26, color: 'orange' }, + { key: 27, text: 'MiniMax', value: 27, color: 'red' }, { key: 8, text: '自定义渠道', value: 8, color: 'pink' }, { key: 22, text: '知识库:FastGPT', value: 22, color: 'blue' }, { key: 21, text: '知识库:AI Proxy', value: 21, color: 'purple' }, diff --git a/web/default/src/pages/Channel/EditChannel.js b/web/default/src/pages/Channel/EditChannel.js index 7a33b47f..b9214fd8 100644 --- a/web/default/src/pages/Channel/EditChannel.js +++ b/web/default/src/pages/Channel/EditChannel.js @@ -105,6 +105,9 @@ const EditChannel = () => { case 26: localModels = ['Baichuan2-Turbo', 'Baichuan2-Turbo-192k', 'Baichuan-Text-Embedding']; break; + case 27: + localModels = ['abab5.5s-chat', 'abab5.5-chat', 'abab6-chat']; + break; } setInputs((inputs) => ({ ...inputs, models: localModels })); }