From 95ac7c343b701f4752719586b4345987e8a97b69 Mon Sep 17 00:00:00 2001 From: Boo p3psi Date: Wed, 15 May 2024 23:20:06 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=B8=A0=E9=81=93?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E6=B2=A1=E6=9C=89=E8=B5=B0=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E6=98=A0=E5=B0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controller/channel-test.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/controller/channel-test.go b/controller/channel-test.go index 7474cb4..db03e75 100644 --- a/controller/channel-test.go +++ b/controller/channel-test.go @@ -64,7 +64,21 @@ func testChannel(channel *model.Channel, testModel string) (err error, openaiErr } else { testModel = adaptor.GetModelList()[0] } + } else { + modelMapping := *channel.ModelMapping + if modelMapping != "" && modelMapping != "{}" { + modelMap := make(map[string]string) + err := json.Unmarshal([]byte(modelMapping), &modelMap) + if err != nil { + openaiErr := service.OpenAIErrorWrapperLocal(err, "unmarshal_model_mapping_failed", http.StatusInternalServerError).Error + return err, &openaiErr + } + if modelMap[testModel] != "" { + testModel = modelMap[testModel] + } + } } + request := buildTestRequest() request.Model = testModel meta.UpstreamModelName = testModel From d33b802dac7e4732bd705077485981a1724f056f Mon Sep 17 00:00:00 2001 From: Akarin Date: Thu, 16 May 2024 14:05:44 +0800 Subject: [PATCH 2/8] Squashed commit of the following: commit 5a6a0df45dee3dfbf2f65591a79fe5f2b74a49e6 Author: Akarin Date: Thu May 16 14:05:28 2024 +0800 Revert "Update docker-image-amd64.yml" This reverts commit 581343a78783bbd779e65b476e125af0e2b64ce5. commit a0aec1bd030da2c6b25d9541199d598f16813a60 Merge: 5b46c7d 58abb38 Author: Jiayun Shen Date: Thu May 16 06:46:51 2024 +0800 Merge branch 'main' of https://github.com/jimmyshjj/new-api commit 58abb3864a89294d82f812cda9fe49ccf7e2dd91 Merge: 7d2c026 93858c3 Author: Akarin Date: Thu May 16 06:46:00 2024 +0800 Merge branch 'Calcium-Ion:main' into main commit 5b46c7dd8e6132d2be3b59c7b2ed6a4b84b93cef Author: Jiayun Shen Date: Thu May 16 06:45:00 2024 +0800 Update constants.go Remove replaced Baidu models commit 7d2c02679cd90b8b53f4145f83969b980a8c2095 Author: Akarin Date: Wed May 15 23:40:50 2024 +0800 Update adaptor.go - Normalize model name to lowercase Baidu's official model names may include mixed case letters, but their model APIs are case-sensitive and accept only lowercase. To ensure compatibility, the default behavior has been updated to convert model names to lowercase before constructing API requests. commit 6bc168a39d9a6194d66f2f32b175e56de9295b2e Merge: bb9fecd 910e76a Author: Jiayun Shen Date: Wed May 15 21:51:52 2024 +0800 Merge branch 'main' of https://github.com/jimmyshjj/new-api commit 910e76ac94d7f5dca6254abb4d0669cbb762e724 Merge: 581343a ff044de Author: Akarin Date: Wed May 15 21:51:13 2024 +0800 Merge branch 'Calcium-Ion:main' into main commit bb9fecd5bf2bd9f1859a4017e7e68f80bdb6685a Author: Jiayun Shen Date: Wed May 15 21:50:08 2024 +0800 update Baidu and 360 models Add Baidu and 360 new models. Add Baidu completion ratio commit 581343a78783bbd779e65b476e125af0e2b64ce5 Author: Akarin Date: Wed May 15 19:41:34 2024 +0800 Update docker-image-amd64.yml commit de17e2d95eec80f1eeae66e82dec4e9601cdee43 Merge: 046f653 a3b3e6c Author: Akarin Date: Wed May 15 19:22:09 2024 +0800 Merge branch 'Calcium-Ion:main' into main commit 046f6537913ae8ad8ecf21019b64c0379331b3fd Merge: 4164d51 7b58305 Author: Akarin Date: Wed May 15 15:32:38 2024 +0800 Merge branch 'Calcium-Ion:main' into main commit 4164d51207808283a18ca2728241fd5cddc4855f Merge: ef35b07 c222bc8 Author: Akarin Date: Wed May 15 11:19:13 2024 +0800 Merge branch 'Calcium-Ion:main' into main commit ef35b072824b5095ecd2d1ed7ca9fa11673da2c4 Author: Jiayun Shen Date: Tue May 14 19:17:32 2024 +0800 Update adaptor.go Update frequently used model names from Baidu official docs and support custom models --- common/model-ratio.go | 26 +++++++++++++++++++++++--- relay/channel/ai360/constants.go | 3 +++ relay/channel/baidu/adaptor.go | 17 +++++++++++++++++ relay/channel/baidu/constants.go | 18 +++++++++++++----- 4 files changed, 56 insertions(+), 8 deletions(-) diff --git a/common/model-ratio.go b/common/model-ratio.go index 8b66f49..b84a0a5 100644 --- a/common/model-ratio.go +++ b/common/model-ratio.go @@ -69,9 +69,17 @@ var DefaultModelRatio = map[string]float64{ "claude-3-haiku-20240307": 0.125, // $0.25 / 1M tokens "claude-3-sonnet-20240229": 1.5, // $3 / 1M tokens "claude-3-opus-20240229": 7.5, // $15 / 1M tokens - "ERNIE-Bot": 0.8572, // ¥0.012 / 1k tokens - "ERNIE-Bot-turbo": 0.5715, // ¥0.008 / 1k tokens - "ERNIE-Bot-4": 8.572, // ¥0.12 / 1k tokens + "ERNIE-Bot": 0.8572, // ¥0.012 / 1k tokens //renamed to ERNIE-3.5-8K + "ERNIE-Bot-turbo": 0.5715, // ¥0.008 / 1k tokens //renamed to ERNIE-Lite-8K + "ERNIE-Bot-4": 8.572, // ¥0.12 / 1k tokens //renamed to ERNIE-4.0-8K + "ERNIE-4.0-8K": 8.572, // ¥0.12 / 1k tokens + "ERNIE-3.5-8K": 0.8572, // ¥0.012 / 1k tokens + "ERNIE-Speed-8K": 0.2858, // ¥0.004 / 1k tokens + "ERNIE-Speed-128K": 0.2858, // ¥0.004 / 1k tokens + "ERNIE-Lite-8K": 0.2143, // ¥0.003 / 1k tokens + "ERNIE-Tiny-8K": 0.0715, // ¥0.001 / 1k tokens + "ERNIE-Character-8K": 0.2858, // ¥0.004 / 1k tokens + "ERNIE-Functions-8K": 0.2858, // ¥0.004 / 1k tokens "Embedding-V1": 0.1429, // ¥0.002 / 1k tokens "PaLM-2": 1, "gemini-pro": 1, // $0.00025 / 1k characters -> $0.001 / 1k tokens @@ -98,6 +106,9 @@ var DefaultModelRatio = map[string]float64{ "SparkDesk-v3.1": 1.2858, // ¥0.018 / 1k tokens "SparkDesk-v3.5": 1.2858, // ¥0.018 / 1k tokens "360GPT_S2_V9": 0.8572, // ¥0.012 / 1k tokens + "360gpt-turbo": 0.0858, // ¥0.0012 / 1k tokens + "360gpt-turbo-responsibility-8k": 0.8572, // ¥0.012 / 1k tokens + "360gpt-pro": 0.8572, // ¥0.012 / 1k tokens "embedding-bert-512-v1": 0.0715, // ¥0.001 / 1k tokens "embedding_s1_v1": 0.0715, // ¥0.001 / 1k tokens "semantic_similarity_s1_v1": 0.0715, // ¥0.001 / 1k tokens @@ -289,6 +300,15 @@ func GetCompletionRatio(name string) float64 { if strings.HasPrefix(name, "deepseek") { return 2 } + if strings.HasPrefix(name, "ERNIE-Speed-") { + return 2 + } else if strings.HasPrefix(name, "ERNIE-Lite-") { + return 2 + } else if strings.HasPrefix(name, "ERNIE-Character") { + return 2 + } else if strings.HasPrefix(name, "ERNIE-Functions") { + return 2 + } switch name { case "llama2-70b-4096": return 0.8 / 0.64 diff --git a/relay/channel/ai360/constants.go b/relay/channel/ai360/constants.go index 82698fa..824231d 100644 --- a/relay/channel/ai360/constants.go +++ b/relay/channel/ai360/constants.go @@ -1,6 +1,9 @@ package ai360 var ModelList = []string{ + "360gpt-turbo", + "360gpt-turbo-responsibility-8k", + "360gpt-pro", "360GPT_S2_V9", "embedding-bert-512-v1", "embedding_s1_v1", diff --git a/relay/channel/baidu/adaptor.go b/relay/channel/baidu/adaptor.go index d2571dc..44c5e3f 100644 --- a/relay/channel/baidu/adaptor.go +++ b/relay/channel/baidu/adaptor.go @@ -9,6 +9,7 @@ import ( "one-api/relay/channel" relaycommon "one-api/relay/common" "one-api/relay/constant" + "strings" ) type Adaptor struct { @@ -33,8 +34,24 @@ func (a *Adaptor) GetRequestURL(info *relaycommon.RelayInfo) (string, error) { fullRequestURL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant" case "BLOOMZ-7B": fullRequestURL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/bloomz_7b1" + case "ERNIE-4.0-8K": + fullRequestURL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro" + case "ERNIE-3.5-8K": + fullRequestURL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions" + case "ERNIE-Speed-8K": + fullRequestURL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie_speed" + case "ERNIE-Character-8K": + fullRequestURL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-char-8k" + case "ERNIE-Functions-8K": + fullRequestURL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-func-8k" + case "ERNIE-Lite-8K-0922": + fullRequestURL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant" + case "Yi-34B-Chat": + fullRequestURL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/yi_34b_chat" case "Embedding-V1": fullRequestURL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/embeddings/embedding-v1" + default: + fullRequestURL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/" + strings.ToLower(info.UpstreamModelName) } var accessToken string var err error diff --git a/relay/channel/baidu/constants.go b/relay/channel/baidu/constants.go index a0162bb..3cb96fc 100644 --- a/relay/channel/baidu/constants.go +++ b/relay/channel/baidu/constants.go @@ -1,11 +1,19 @@ package baidu var ModelList = []string{ - "ERNIE-Bot-4", - "ERNIE-Bot-8K", - "ERNIE-Bot", - "ERNIE-Speed", - "ERNIE-Bot-turbo", + "ERNIE-3.5-8K", + "ERNIE-4.0-8K", + "ERNIE-Speed-8K", + "ERNIE-Speed-128K", + "ERNIE-Lite-8K", + "ERNIE-Tiny-8K", + "ERNIE-Character-8K", + "ERNIE-Functions-8K", + //"ERNIE-Bot-4", + //"ERNIE-Bot-8K", + //"ERNIE-Bot", + //"ERNIE-Speed", + //"ERNIE-Bot-turbo", "Embedding-V1", } From 7003a4ed9481b2c21fda3faa2bf34d165907418d Mon Sep 17 00:00:00 2001 From: CaIon <1808837298@qq.com> Date: Thu, 16 May 2024 16:10:25 +0800 Subject: [PATCH 3/8] fix: try to fix sqlite database migration (#231) --- model/main.go | 12 ++++++------ model/token.go | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/model/main.go b/model/main.go index 7b1cd3d..b6ad2cb 100644 --- a/model/main.go +++ b/model/main.go @@ -93,12 +93,12 @@ func InitDB() (err error) { if !common.IsMasterNode { return nil } - if common.UsingMySQL { - _, _ = sqlDB.Exec("DROP INDEX idx_channels_key ON channels;") // TODO: delete this line when most users have upgraded - _, _ = sqlDB.Exec("ALTER TABLE midjourneys MODIFY action VARCHAR(40);") // TODO: delete this line when most users have upgraded - _, _ = sqlDB.Exec("ALTER TABLE midjourneys MODIFY progress VARCHAR(30);") // TODO: delete this line when most users have upgraded - _, _ = sqlDB.Exec("ALTER TABLE midjourneys MODIFY status VARCHAR(20);") // TODO: delete this line when most users have upgraded - } + //if common.UsingMySQL { + // _, _ = sqlDB.Exec("DROP INDEX idx_channels_key ON channels;") // TODO: delete this line when most users have upgraded + // _, _ = sqlDB.Exec("ALTER TABLE midjourneys MODIFY action VARCHAR(40);") // TODO: delete this line when most users have upgraded + // _, _ = sqlDB.Exec("ALTER TABLE midjourneys MODIFY progress VARCHAR(30);") // TODO: delete this line when most users have upgraded + // _, _ = sqlDB.Exec("ALTER TABLE midjourneys MODIFY status VARCHAR(20);") // TODO: delete this line when most users have upgraded + //} common.SysLog("database migration started") err = db.AutoMigrate(&Channel{}) if err != nil { diff --git a/model/token.go b/model/token.go index 1bbf6c4..056156e 100644 --- a/model/token.go +++ b/model/token.go @@ -11,7 +11,7 @@ import ( type Token struct { Id int `json:"id"` - UserId int `json:"user_id"` + UserId int `json:"user_id" gorm:"index"` Key string `json:"key" gorm:"type:char(48);uniqueIndex"` Status int `json:"status" gorm:"default:1"` Name string `json:"name" gorm:"index" ` From 71dcf43c71fd336a3db9749374e2f85eb0200524 Mon Sep 17 00:00:00 2001 From: CaIon <1808837298@qq.com> Date: Thu, 16 May 2024 16:41:08 +0800 Subject: [PATCH 4/8] =?UTF-8?q?feat:=20=E6=97=A5=E5=BF=97=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E9=87=8D=E8=AF=95=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/utils.go | 9 +++++++++ controller/relay.go | 7 +++++-- model/log.go | 9 +++++++++ relay/relay-text.go | 3 +++ web/src/components/LogsTable.js | 24 ++++++++++++++++++++++++ 5 files changed, 50 insertions(+), 2 deletions(-) diff --git a/common/utils.go b/common/utils.go index 3130020..6c89d41 100644 --- a/common/utils.go +++ b/common/utils.go @@ -258,3 +258,12 @@ func MapToJsonStrFloat(m map[string]float64) string { } return string(bytes) } + +func StrToMap(str string) map[string]interface{} { + m := make(map[string]interface{}) + err := json.Unmarshal([]byte(str), &m) + if err != nil { + return nil + } + return m +} diff --git a/controller/relay.go b/controller/relay.go index 0bbd409..a066e5d 100644 --- a/controller/relay.go +++ b/controller/relay.go @@ -43,7 +43,7 @@ func Relay(c *gin.Context) { group := c.GetString("group") originalModel := c.GetString("original_model") openaiErr := relayHandler(c, relayMode) - useChannel := []int{channelId} + c.Set("use_channel", []string{fmt.Sprintf("%d", channelId)}) if openaiErr != nil { go processChannelError(c, channelId, openaiErr) } else { @@ -56,7 +56,9 @@ func Relay(c *gin.Context) { break } channelId = channel.Id - useChannel = append(useChannel, channelId) + useChannel := c.GetStringSlice("use_channel") + useChannel = append(useChannel, fmt.Sprintf("%d", channelId)) + c.Set("use_channel", useChannel) common.LogInfo(c.Request.Context(), fmt.Sprintf("using channel #%d to retry (remain times %d)", channel.Id, i)) middleware.SetupContextForSelectedChannel(c, channel, originalModel) @@ -67,6 +69,7 @@ func Relay(c *gin.Context) { go processChannelError(c, channelId, openaiErr) } } + useChannel := c.GetStringSlice("use_channel") if len(useChannel) > 1 { retryLogStr := fmt.Sprintf("重试:%s", strings.Trim(strings.Join(strings.Fields(fmt.Sprint(useChannel)), "->"), "[]")) common.LogInfo(c.Request.Context(), retryLogStr) diff --git a/model/log.go b/model/log.go index 57c64d0..2e72b71 100644 --- a/model/log.go +++ b/model/log.go @@ -142,6 +142,15 @@ func GetUserLogs(userId int, logType int, startTimestamp int64, endTimestamp int tx = tx.Where("created_at <= ?", endTimestamp) } err = tx.Order("id desc").Limit(num).Offset(startIdx).Omit("id").Find(&logs).Error + for i := range logs { + var otherMap map[string]interface{} + otherMap = common.StrToMap(logs[i].Other) + if otherMap != nil { + // delete admin + delete(otherMap, "admin_info") + } + logs[i].Other = common.MapToJsonStr(otherMap) + } return logs, err } diff --git a/relay/relay-text.go b/relay/relay-text.go index d5ee728..007b3b1 100644 --- a/relay/relay-text.go +++ b/relay/relay-text.go @@ -320,6 +320,9 @@ func postConsumeQuota(ctx *gin.Context, relayInfo *relaycommon.RelayInfo, textRe other["group_ratio"] = groupRatio other["completion_ratio"] = completionRatio other["model_price"] = modelPrice + adminInfo := make(map[string]interface{}) + adminInfo["use_channel"] = ctx.GetStringSlice("use_channel") + other["admin_info"] = adminInfo model.RecordConsumeLog(ctx, relayInfo.UserId, relayInfo.ChannelId, promptTokens, completionTokens, logModel, tokenName, quota, logContent, relayInfo.TokenId, userQuota, int(useTimeSeconds), relayInfo.IsStream, other) //if quota != 0 { diff --git a/web/src/components/LogsTable.js b/web/src/components/LogsTable.js index 8efb9db..f8436ad 100644 --- a/web/src/components/LogsTable.js +++ b/web/src/components/LogsTable.js @@ -294,6 +294,30 @@ const LogsTable = () => { ); }, }, + { + title: '重试', + dataIndex: 'retry', + className: isAdmin() ? 'tableShow' : 'tableHiddle', + render: (text, record, index) => { + let content = '渠道:' + record.channel; + if (record.other !== '') { + let other = JSON.parse(record.other); + if (other.admin_info !== undefined) { + if ( + other.admin_info.use_channel !== null && + other.admin_info.use_channel !== undefined && + other.admin_info.use_channel !== '' + ) { + // channel id array + let useChannel = other.admin_info.use_channel; + let useChannelStr = useChannel.join('->'); + content = `渠道:${useChannelStr}`; + } + } + } + return isAdminUser ?
{content}
: <>; + }, + }, { title: '详情', dataIndex: 'content', From 5e07ff85eb13539e58f0ead9886b5ace80e17529 Mon Sep 17 00:00:00 2001 From: CaIon <1808837298@qq.com> Date: Thu, 16 May 2024 18:31:03 +0800 Subject: [PATCH 5/8] feat: pre to delete custom channel type --- relay/constant/api_type.go | 4 ++-- relay/relay_adaptor.go | 2 +- web/src/components/ChannelsTable.js | 7 +++++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/relay/constant/api_type.go b/relay/constant/api_type.go index 8a1dbd6..943c407 100644 --- a/relay/constant/api_type.go +++ b/relay/constant/api_type.go @@ -15,7 +15,7 @@ const ( APITypeAIProxyLibrary APITypeTencent APITypeGemini - APITypeZhipu_v4 + APITypeZhipuV4 APITypeOllama APITypePerplexity APITypeAws @@ -48,7 +48,7 @@ func ChannelType2APIType(channelType int) (int, bool) { case common.ChannelTypeGemini: apiType = APITypeGemini case common.ChannelTypeZhipu_v4: - apiType = APITypeZhipu_v4 + apiType = APITypeZhipuV4 case common.ChannelTypeOllama: apiType = APITypeOllama case common.ChannelTypePerplexity: diff --git a/relay/relay_adaptor.go b/relay/relay_adaptor.go index 01e9cec..cf63054 100644 --- a/relay/relay_adaptor.go +++ b/relay/relay_adaptor.go @@ -41,7 +41,7 @@ func GetAdaptor(apiType int) channel.Adaptor { return &xunfei.Adaptor{} case constant.APITypeZhipu: return &zhipu.Adaptor{} - case constant.APITypeZhipu_v4: + case constant.APITypeZhipuV4: return &zhipu_4v.Adaptor{} case constant.APITypeOllama: return &ollama.Adaptor{} diff --git a/web/src/components/ChannelsTable.js b/web/src/components/ChannelsTable.js index 452309c..ad53999 100644 --- a/web/src/components/ChannelsTable.js +++ b/web/src/components/ChannelsTable.js @@ -6,6 +6,7 @@ import { showError, showInfo, showSuccess, + showWarning, timestamp2string, } from '../helpers'; @@ -309,6 +310,12 @@ const ChannelsTable = () => { const setChannelFormat = (channels) => { for (let i = 0; i < channels.length; i++) { + if (channels[i].type === 8) { + showWarning( + '检测到您使用了“自定义渠道”类型,请更换为“OpenAI”渠道类型!', + ); + showWarning('下个版本将不再支持“自定义渠道”类型!'); + } channels[i].key = '' + channels[i].id; let test_models = []; channels[i].models.split(',').forEach((item, index) => { 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 6/8] 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 7/8] 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 8/8] 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,