From e0df8bbbda4176b6027f0f5843a4dcc66997add7 Mon Sep 17 00:00:00 2001 From: CaIon <1808837298@qq.com> Date: Thu, 16 May 2024 19:03:42 +0800 Subject: [PATCH 1/7] feat: support minimax --- common/constants.go | 1 + relay/channel/lingyiwanwu/constrants.go | 20 ++++++++++-------- relay/channel/minimax/constants.go | 13 ++++++++++++ relay/channel/minimax/relay-minimax.go | 10 +++++++++ relay/channel/moonshot/constants.go | 2 ++ relay/channel/openai/adaptor.go | 28 ++++++++++++++++++++++--- 6 files changed, 62 insertions(+), 12 deletions(-) create mode 100644 relay/channel/minimax/constants.go create mode 100644 relay/channel/minimax/relay-minimax.go diff --git a/common/constants.go b/common/constants.go index cb58391..b231831 100644 --- a/common/constants.go +++ b/common/constants.go @@ -208,6 +208,7 @@ const ( ChannelTypeLingYiWanWu = 31 ChannelTypeAws = 33 ChannelTypeCohere = 34 + ChannelTypeMiniMax = 35 ChannelTypeDummy // this one is only for count, do not add any channel after this ) diff --git a/relay/channel/lingyiwanwu/constrants.go b/relay/channel/lingyiwanwu/constrants.go index 2cab505..8fa9cd9 100644 --- a/relay/channel/lingyiwanwu/constrants.go +++ b/relay/channel/lingyiwanwu/constrants.go @@ -1,9 +1,11 @@ -package lingyiwanwu - -// https://platform.lingyiwanwu.com/docs - -var ModelList = []string{ - "yi-34b-chat-0205", - "yi-34b-chat-200k", - "yi-vl-plus", -} +package lingyiwanwu + +// https://platform.lingyiwanwu.com/docs + +var ModelList = []string{ + "yi-34b-chat-0205", + "yi-34b-chat-200k", + "yi-vl-plus", +} + +var ChannelName = "lingyiwanwu" diff --git a/relay/channel/minimax/constants.go b/relay/channel/minimax/constants.go new file mode 100644 index 0000000..c480cac --- /dev/null +++ b/relay/channel/minimax/constants.go @@ -0,0 +1,13 @@ +package minimax + +// https://www.minimaxi.com/document/guides/chat-model/V2?id=65e0736ab2845de20908e2dd + +var ModelList = []string{ + "abab6.5-chat", + "abab6.5s-chat", + "abab6-chat", + "abab5.5-chat", + "abab5.5s-chat", +} + +var ChannelName = "minimax" diff --git a/relay/channel/minimax/relay-minimax.go b/relay/channel/minimax/relay-minimax.go new file mode 100644 index 0000000..d0a15b0 --- /dev/null +++ b/relay/channel/minimax/relay-minimax.go @@ -0,0 +1,10 @@ +package minimax + +import ( + "fmt" + relaycommon "one-api/relay/common" +) + +func GetRequestURL(info *relaycommon.RelayInfo) (string, error) { + return fmt.Sprintf("%s/v1/text/chatcompletion_v2", info.BaseUrl), nil +} diff --git a/relay/channel/moonshot/constants.go b/relay/channel/moonshot/constants.go index 1b86f0f..a7da54b 100644 --- a/relay/channel/moonshot/constants.go +++ b/relay/channel/moonshot/constants.go @@ -5,3 +5,5 @@ var ModelList = []string{ "moonshot-v1-32k", "moonshot-v1-128k", } + +var ChannelName = "moonshot" diff --git a/relay/channel/openai/adaptor.go b/relay/channel/openai/adaptor.go index a450c71..46d827a 100644 --- a/relay/channel/openai/adaptor.go +++ b/relay/channel/openai/adaptor.go @@ -11,6 +11,7 @@ import ( "one-api/relay/channel" "one-api/relay/channel/ai360" "one-api/relay/channel/lingyiwanwu" + "one-api/relay/channel/minimax" "one-api/relay/channel/moonshot" relaycommon "one-api/relay/common" "one-api/service" @@ -26,7 +27,8 @@ func (a *Adaptor) Init(info *relaycommon.RelayInfo, request dto.GeneralOpenAIReq } func (a *Adaptor) GetRequestURL(info *relaycommon.RelayInfo) (string, error) { - if info.ChannelType == common.ChannelTypeAzure { + switch info.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(info.RequestURLPath, "?")[0] requestURL = fmt.Sprintf("%s?api-version=%s", requestURL, info.ApiVersion) @@ -37,8 +39,15 @@ func (a *Adaptor) GetRequestURL(info *relaycommon.RelayInfo) (string, error) { requestURL = fmt.Sprintf("/openai/deployments/%s/%s", model_, task) return relaycommon.GetFullRequestURL(info.BaseUrl, requestURL, info.ChannelType), nil + case common.ChannelTypeMiniMax: + return minimax.GetRequestURL(info) + //case common.ChannelTypeCustom: + // url := info.BaseUrl + // url = strings.Replace(url, "{model}", info.UpstreamModelName, -1) + // return url, nil + default: + return relaycommon.GetFullRequestURL(info.BaseUrl, info.RequestURLPath, info.ChannelType), nil } - return relaycommon.GetFullRequestURL(info.BaseUrl, info.RequestURLPath, info.ChannelType), nil } func (a *Adaptor) SetupRequestHeader(c *gin.Context, req *http.Request, info *relaycommon.RelayInfo) error { @@ -90,11 +99,24 @@ func (a *Adaptor) GetModelList() []string { return moonshot.ModelList case common.ChannelTypeLingYiWanWu: return lingyiwanwu.ModelList + case common.ChannelTypeMiniMax: + return minimax.ModelList default: return ModelList } } func (a *Adaptor) GetChannelName() string { - return ChannelName + switch a.ChannelType { + case common.ChannelType360: + return ai360.ChannelName + case common.ChannelTypeMoonshot: + return moonshot.ChannelName + case common.ChannelTypeLingYiWanWu: + return lingyiwanwu.ChannelName + case common.ChannelTypeMiniMax: + return minimax.ChannelName + default: + return ChannelName + } } From 039fda91f253aa07316f81597b6e639da94a7c89 Mon Sep 17 00:00:00 2001 From: CaIon <1808837298@qq.com> Date: Thu, 16 May 2024 19:06:35 +0800 Subject: [PATCH 2/7] feat: support minimax --- web/src/constants/channel.constants.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/web/src/constants/channel.constants.js b/web/src/constants/channel.constants.js index 94b2fc6..9b10f0f 100644 --- a/web/src/constants/channel.constants.js +++ b/web/src/constants/channel.constants.js @@ -36,13 +36,6 @@ export const CHANNEL_OPTIONS = [ color: 'teal', label: 'Azure OpenAI', }, - { - key: 11, - text: 'Google PaLM2', - value: 11, - color: 'orange', - label: 'Google PaLM2', - }, { key: 24, text: 'Google Gemini', @@ -92,10 +85,18 @@ export const CHANNEL_OPTIONS = [ color: 'purple', label: '智谱 GLM-4V', }, + { + key: 11, + text: 'Google PaLM2', + value: 11, + color: 'orange', + label: 'Google PaLM2', + }, { key: 25, text: 'Moonshot', value: 25, color: 'green', label: 'Moonshot' }, { key: 19, text: '360 智脑', value: 19, color: 'blue', label: '360 智脑' }, { key: 23, text: '腾讯混元', value: 23, color: 'teal', label: '腾讯混元' }, { key: 31, text: '零一万物', value: 31, color: 'green', label: '零一万物' }, + { key: 35, text: 'MiniMax', value: 35, color: 'green', label: 'MiniMax' }, { key: 8, text: '自定义渠道', value: 8, color: 'pink', label: '自定义渠道' }, { key: 22, From 095121673dfcccbb99ca85be2ba7ae6868074a05 Mon Sep 17 00:00:00 2001 From: CaIon <1808837298@qq.com> Date: Thu, 16 May 2024 19:08:37 +0800 Subject: [PATCH 3/7] chore: update model list --- controller/model.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/controller/model.go b/controller/model.go index 5e1aa7d..5c76d07 100644 --- a/controller/model.go +++ b/controller/model.go @@ -11,6 +11,7 @@ import ( "one-api/relay" "one-api/relay/channel/ai360" "one-api/relay/channel/lingyiwanwu" + "one-api/relay/channel/minimax" "one-api/relay/channel/moonshot" relaycommon "one-api/relay/common" relayconstant "one-api/relay/constant" @@ -79,7 +80,7 @@ func init() { Id: modelName, Object: "model", Created: 1626777600, - OwnedBy: "moonshot", + OwnedBy: moonshot.ChannelName, Permission: permission, Root: modelName, Parent: nil, @@ -90,7 +91,18 @@ func init() { Id: modelName, Object: "model", Created: 1626777600, - OwnedBy: "lingyiwanwu", + OwnedBy: lingyiwanwu.ChannelName, + Permission: permission, + Root: modelName, + Parent: nil, + }) + } + for _, modelName := range minimax.ModelList { + openAIModels = append(openAIModels, dto.OpenAIModels{ + Id: modelName, + Object: "model", + Created: 1626777600, + OwnedBy: minimax.ChannelName, Permission: permission, Root: modelName, Parent: nil, From ea0c99ac1b165524a968a5f35686de66a832bc45 Mon Sep 17 00:00:00 2001 From: Jiayun Shen Date: Fri, 17 May 2024 19:37:18 +0800 Subject: [PATCH 4/7] Update Perplexity and 01 models MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新Perplexity和01万物模型,增加相关模型价格。对于模型价格,从one-api引入了 价格 * 系数 的方式,目前仅对新模型使用了新方式,待进一步测试。 --- common/model-ratio.go | 27 ++++++++++++++++++++++--- relay/channel/lingyiwanwu/constrants.go | 4 +--- relay/channel/perplexity/constants.go | 2 +- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/common/model-ratio.go b/common/model-ratio.go index b84a0a5..4e7bc11 100644 --- a/common/model-ratio.go +++ b/common/model-ratio.go @@ -5,6 +5,13 @@ import ( "strings" ) +//from songquanpeng/one-api +const ( + USD2RMB = 7.3 // 暂定 1 USD = 7.3 RMB + USD = 500 // $0.002 = 1 -> $1 = 500 + RMB = USD / USD2RMB +) + // modelRatio // https://platform.openai.com/docs/models/model-endpoint-compatibility // https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Blfmc9dlf @@ -115,9 +122,18 @@ var DefaultModelRatio = map[string]float64{ "hunyuan": 7.143, // ¥0.1 / 1k tokens // https://cloud.tencent.com/document/product/1729/97731#e0e6be58-60c8-469f-bdeb-6c264ce3b4d0 // https://platform.lingyiwanwu.com/docs#-计费单元 // 已经按照 7.2 来换算美元价格 - "yi-34b-chat-0205": 0.018, - "yi-34b-chat-200k": 0.0864, - "yi-vl-plus": 0.0432, + "yi-34b-chat-0205": 0.18, + "yi-34b-chat-200k": 0.864, + "yi-vl-plus": 0.432, + "yi-large": 20.0 / 1000 * RMB, + "yi-medium": 2.5 / 1000 * RMB, + "yi-vision": 6.0 / 1000 * RMB, + "yi-medium-200k": 12.0 / 1000 * RMB, + "yi-spark": 1.0 / 1000 * RMB, + "yi-large-rag": 25.0 / 1000 * RMB, + "yi-large-turbo": 12.0 / 1000 * RMB, + "yi-large-preview": 20.0 / 1000 * RMB, + "yi-large-rag-preview": 25.0 / 1000 * RMB, "command": 0.5, "command-nightly": 0.5, "command-light": 0.5, @@ -126,6 +142,11 @@ var DefaultModelRatio = map[string]float64{ "command-r-plus ": 1.5, "deepseek-chat": 0.07, "deepseek-coder": 0.07, + // Perplexity online 模型对搜索额外收费,有需要应自行调整,此处不计入搜索费用 + "llama-3-sonar-small-32k-chat": 0.2 / 1000 * USD, + "llama-3-sonar-small-32k-online": 0.2 / 1000 * USD, + "llama-3-sonar-large-32k-chat": 1 / 1000 * USD, + "llama-3-sonar-large-32k-online": 1 / 1000 * USD, } var DefaultModelPrice = map[string]float64{ diff --git a/relay/channel/lingyiwanwu/constrants.go b/relay/channel/lingyiwanwu/constrants.go index 8fa9cd9..a634507 100644 --- a/relay/channel/lingyiwanwu/constrants.go +++ b/relay/channel/lingyiwanwu/constrants.go @@ -3,9 +3,7 @@ package lingyiwanwu // https://platform.lingyiwanwu.com/docs var ModelList = []string{ - "yi-34b-chat-0205", - "yi-34b-chat-200k", - "yi-vl-plus", + "yi-large", "yi-medium", "yi-vision", "yi-medium-200k", "yi-spark", "yi-large-rag", "yi-large-turbo", "yi-large-preview", "yi-large-rag-preview", } var ChannelName = "lingyiwanwu" diff --git a/relay/channel/perplexity/constants.go b/relay/channel/perplexity/constants.go index dc15541..f9f030e 100644 --- a/relay/channel/perplexity/constants.go +++ b/relay/channel/perplexity/constants.go @@ -1,7 +1,7 @@ package perplexity var ModelList = []string{ - "sonar-small-chat", "sonar-small-online", "sonar-medium-chat", "sonar-medium-online", "mistral-7b-instruct", "mixtral-8x7b-instruct", + "llama-3-sonar-small-32k-chat", "llama-3-sonar-small-32k-online", "llama-3-sonar-large-32k-chat", "llama-3-sonar-large-32k-online", "llama-3-8b-instruct", "llama-3-70b-instruct", "mixtral-8x7b-instruct", } var ChannelName = "perplexity" From a3de309175149b97930441207bcefd222162f5af Mon Sep 17 00:00:00 2001 From: CaIon <1808837298@qq.com> Date: Sat, 18 May 2024 15:14:49 +0800 Subject: [PATCH 5/7] chore: token counter --- service/token_counter.go | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/service/token_counter.go b/service/token_counter.go index 697ee15..bca3d51 100644 --- a/service/token_counter.go +++ b/service/token_counter.go @@ -67,7 +67,11 @@ func getTokenNum(tokenEncoder *tiktoken.Tiktoken, text string) int { return len(tokenEncoder.Encode(text, nil, nil)) } -func getImageToken(imageUrl *dto.MessageImageUrl) (int, error) { +func getImageToken(imageUrl *dto.MessageImageUrl, model string, stream bool) (int, error) { + // TODO: 非流模式下不计算图片token数量 + if model == "glm-4v" { + return 1047, nil + } if imageUrl.Detail == "low" { return 85, nil } @@ -123,7 +127,7 @@ func getImageToken(imageUrl *dto.MessageImageUrl) (int, error) { func CountTokenChatRequest(request dto.GeneralOpenAIRequest, model string, checkSensitive bool) (int, error, bool) { tkm := 0 - msgTokens, err, b := CountTokenMessages(request.Messages, model, checkSensitive) + msgTokens, err, b := CountTokenMessages(request.Messages, model, request.Stream, checkSensitive) if err != nil { return 0, err, b } @@ -156,7 +160,7 @@ func CountTokenChatRequest(request dto.GeneralOpenAIRequest, model string, check return tkm, nil, false } -func CountTokenMessages(messages []dto.Message, model string, checkSensitive bool) (int, error, bool) { +func CountTokenMessages(messages []dto.Message, model string, stream bool, checkSensitive bool) (int, error, bool) { //recover when panic tokenEncoder := getTokenEncoder(model) // Reference: @@ -193,19 +197,13 @@ func CountTokenMessages(messages []dto.Message, model string, checkSensitive boo tokenNum += getTokenNum(tokenEncoder, *message.Name) } } else { - var err error arrayContent := message.ParseContent() for _, m := range arrayContent { if m.Type == "image_url" { - var imageTokenNum int - if model == "glm-4v" { - imageTokenNum = 1047 - } else { - imageUrl := m.ImageUrl.(dto.MessageImageUrl) - imageTokenNum, err = getImageToken(&imageUrl) - if err != nil { - return 0, err, false - } + imageUrl := m.ImageUrl.(dto.MessageImageUrl) + imageTokenNum, err := getImageToken(&imageUrl, model, stream) + if err != nil { + return 0, err, false } tokenNum += imageTokenNum log.Printf("image token num: %d", imageTokenNum) From 98a991306db69f1e0cfc4b699d06bf9ddf589411 Mon Sep 17 00:00:00 2001 From: CaIon <1808837298@qq.com> Date: Sat, 18 May 2024 15:15:20 +0800 Subject: [PATCH 6/7] chore: update minimax url --- common/constants.go | 1 + 1 file changed, 1 insertion(+) diff --git a/common/constants.go b/common/constants.go index b231831..96c0b57 100644 --- a/common/constants.go +++ b/common/constants.go @@ -249,4 +249,5 @@ var ChannelBaseURLs = []string{ "", //32 "", //33 "https://api.cohere.ai", //34 + "https://api.minimax.chat", //35 } From d6c1e3f37c177cddd3f5419e1b11addf41ea05a4 Mon Sep 17 00:00:00 2001 From: CaIon <1808837298@qq.com> Date: Sat, 18 May 2024 23:04:55 +0800 Subject: [PATCH 7/7] feat: update SettingsMagnification --- web/src/pages/Setting/Operation/SettingsMagnification.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/pages/Setting/Operation/SettingsMagnification.js b/web/src/pages/Setting/Operation/SettingsMagnification.js index 9c64793..fde5c9d 100644 --- a/web/src/pages/Setting/Operation/SettingsMagnification.js +++ b/web/src/pages/Setting/Operation/SettingsMagnification.js @@ -135,7 +135,7 @@ export default function SettingsMagnification(props) {