diff --git a/README.md b/README.md index ff1fffd2..ae2ffac5 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,7 @@ _✨ 通过标准的 OpenAI API 格式访问所有的大模型,开箱即用 + [x] [360 智脑](https://ai.360.cn) + [x] [腾讯混元大模型](https://cloud.tencent.com/document/product/1729) + [x] [Moonshot AI](https://platform.moonshot.cn/) + + [x] [百川大模型](https://platform.baichuan-ai.com) + [ ] [字节云雀大模型](https://www.volcengine.com/product/ark) (WIP) + [ ] [MINIMAX](https://api.minimax.chat/) (WIP) 2. 支持配置镜像以及众多[第三方代理服务](https://iamazing.cn/page/openai-api-third-party-services)。 diff --git a/common/constants.go b/common/constants.go index ccaa3560..85fcca18 100644 --- a/common/constants.go +++ b/common/constants.go @@ -64,6 +64,7 @@ const ( ChannelTypeTencent = 23 ChannelTypeGemini = 24 ChannelTypeMoonshot = 25 + ChannelTypeBaichuan = 26 ) var ChannelBaseURLs = []string{ @@ -93,6 +94,7 @@ var ChannelBaseURLs = []string{ "https://hunyuan.cloud.tencent.com", // 23 "https://generativelanguage.googleapis.com", // 24 "https://api.moonshot.cn", // 25 + "https://api.baichuan-ai.com", // 26 } const ( diff --git a/common/logger/logger.go b/common/logger/logger.go index f970ee61..8232b2fc 100644 --- a/common/logger/logger.go +++ b/common/logger/logger.go @@ -13,6 +13,7 @@ import ( ) const ( + loggerDEBUG = "DEBUG" loggerINFO = "INFO" loggerWarn = "WARN" loggerError = "ERR" @@ -55,6 +56,10 @@ func SysError(s string) { _, _ = fmt.Fprintf(gin.DefaultErrorWriter, "[SYS] %v | %s \n", t.Format("2006/01/02 - 15:04:05"), s) } +func Debug(ctx context.Context, msg string) { + logHelper(ctx, loggerDEBUG, msg) +} + func Info(ctx context.Context, msg string) { logHelper(ctx, loggerINFO, msg) } @@ -67,6 +72,10 @@ func Error(ctx context.Context, msg string) { logHelper(ctx, loggerError, msg) } +func Debugf(ctx context.Context, format string, a ...any) { + Debug(ctx, fmt.Sprintf(format, a...)) +} + func Infof(ctx context.Context, format string, a ...any) { Info(ctx, fmt.Sprintf(format, a...)) } diff --git a/controller/model.go b/controller/model.go index f5760901..42ebb598 100644 --- a/controller/model.go +++ b/controller/model.go @@ -4,6 +4,7 @@ import ( "fmt" "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/moonshot" "github.com/songquanpeng/one-api/relay/constant" "github.com/songquanpeng/one-api/relay/helper" @@ -98,6 +99,17 @@ func init() { Parent: nil, }) } + for _, modelName := range baichuan.ModelList { + openAIModels = append(openAIModels, OpenAIModels{ + Id: modelName, + Object: "model", + Created: 1626777600, + OwnedBy: "baichuan", + Permission: permission, + Root: modelName, + Parent: nil, + }) + } openAIModelsMap = make(map[string]OpenAIModels) for _, model := range openAIModels { openAIModelsMap[model.Id] = model diff --git a/controller/relay.go b/controller/relay.go index 499e8ddc..278c0b32 100644 --- a/controller/relay.go +++ b/controller/relay.go @@ -41,6 +41,10 @@ func relay(c *gin.Context, relayMode int) *model.ErrorWithStatusCode { func Relay(c *gin.Context) { ctx := c.Request.Context() relayMode := constant.Path2RelayMode(c.Request.URL.Path) + if config.DebugEnabled { + requestBody, _ := common.GetRequestBody(c) + logger.Debugf(ctx, "request body: %s", string(requestBody)) + } bizErr := relay(c, relayMode) if bizErr == nil { return diff --git a/relay/channel/baichuan/constants.go b/relay/channel/baichuan/constants.go new file mode 100644 index 00000000..cb20a1ff --- /dev/null +++ b/relay/channel/baichuan/constants.go @@ -0,0 +1,7 @@ +package baichuan + +var ModelList = []string{ + "Baichuan2-Turbo", + "Baichuan2-Turbo-192k", + "Baichuan-Text-Embedding", +} diff --git a/relay/channel/openai/adaptor.go b/relay/channel/openai/adaptor.go index 1313e317..0b727d2e 100644 --- a/relay/channel/openai/adaptor.go +++ b/relay/channel/openai/adaptor.go @@ -7,6 +7,7 @@ import ( "github.com/songquanpeng/one-api/common" "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/moonshot" "github.com/songquanpeng/one-api/relay/model" "github.com/songquanpeng/one-api/relay/util" @@ -84,6 +85,8 @@ func (a *Adaptor) GetModelList() []string { return ai360.ModelList case common.ChannelTypeMoonshot: return moonshot.ModelList + case common.ChannelTypeBaichuan: + return baichuan.ModelList default: return ModelList } @@ -97,6 +100,8 @@ func (a *Adaptor) GetChannelName() string { return "360" case common.ChannelTypeMoonshot: return "moonshot" + case common.ChannelTypeBaichuan: + return "baichuan" default: return "openai" } diff --git a/relay/controller/text.go b/relay/controller/text.go index cc460511..59c5f637 100644 --- a/relay/controller/text.go +++ b/relay/controller/text.go @@ -55,7 +55,8 @@ func RelayTextHelper(c *gin.Context) *model.ErrorWithStatusCode { var requestBody io.Reader if meta.APIType == constant.APITypeOpenAI { // no need to convert request for openai - if isModelMapped { + shouldResetRequestBody := isModelMapped || meta.ChannelType == common.ChannelTypeBaichuan // frequency_penalty 0 is not acceptable for baichuan + if shouldResetRequestBody { jsonStr, err := json.Marshal(textRequest) if err != nil { return openai.ErrorWrapper(err, "json_marshal_failed", http.StatusInternalServerError) diff --git a/web/berry/src/constants/ChannelConstants.js b/web/berry/src/constants/ChannelConstants.js index aeff5190..86c3e3aa 100644 --- a/web/berry/src/constants/ChannelConstants.js +++ b/web/berry/src/constants/ChannelConstants.js @@ -71,6 +71,12 @@ export const CHANNEL_OPTIONS = { value: 23, color: 'default' }, + 26: { + key: 26, + text: '百川大模型', + value: 23, + color: 'default' + }, 8: { key: 8, text: '自定义渠道', diff --git a/web/berry/src/views/Channel/type/Config.js b/web/berry/src/views/Channel/type/Config.js index a091c8d6..c7e759b5 100644 --- a/web/berry/src/views/Channel/type/Config.js +++ b/web/berry/src/views/Channel/type/Config.js @@ -145,6 +145,18 @@ const typeConfig = { }, modelGroup: "google gemini", }, + 25: { + input: { + models: ['moonshot-v1-8k', 'moonshot-v1-32k', 'moonshot-v1-128k'], + }, + modelGroup: "moonshot", + }, + 26: { + input: { + models: ['Baichuan2-Turbo', 'Baichuan2-Turbo-192k', 'Baichuan-Text-Embedding'], + }, + modelGroup: "baichuan", + }, }; export { defaultConfig, typeConfig }; diff --git a/web/default/src/constants/channel.constants.js b/web/default/src/constants/channel.constants.js index 16da1b97..0cf06327 100644 --- a/web/default/src/constants/channel.constants.js +++ b/web/default/src/constants/channel.constants.js @@ -11,6 +11,7 @@ export const CHANNEL_OPTIONS = [ { key: 19, text: '360 智脑', value: 19, color: 'blue' }, { key: 25, text: 'Moonshot AI', value: 25, color: 'black' }, { key: 23, text: '腾讯混元', value: 23, color: 'teal' }, + { key: 26, text: '百川大模型', value: 26, color: 'orange' }, { 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 4f4633ff..7a33b47f 100644 --- a/web/default/src/pages/Channel/EditChannel.js +++ b/web/default/src/pages/Channel/EditChannel.js @@ -102,6 +102,9 @@ const EditChannel = () => { case 25: localModels = ['moonshot-v1-8k', 'moonshot-v1-32k', 'moonshot-v1-128k']; break; + case 26: + localModels = ['Baichuan2-Turbo', 'Baichuan2-Turbo-192k', 'Baichuan-Text-Embedding']; + break; } setInputs((inputs) => ({ ...inputs, models: localModels })); }