From cbf8413a39bbc9cae15e7a377cf8b86263f3c9ad Mon Sep 17 00:00:00 2001 From: suziheng Date: Wed, 22 Jan 2025 21:37:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81CozeV3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- relay/adaptor/coze/adaptor_v3.go | 2 +- relay/adaptor/coze/main.go | 32 +++++++++++++++++++++++++++++--- relay/adaptor/coze/model.go | 11 +++++++++-- relay/apitype/define.go | 3 +-- 4 files changed, 40 insertions(+), 8 deletions(-) diff --git a/relay/adaptor/coze/adaptor_v3.go b/relay/adaptor/coze/adaptor_v3.go index fe890a8d..947b3846 100644 --- a/relay/adaptor/coze/adaptor_v3.go +++ b/relay/adaptor/coze/adaptor_v3.go @@ -35,7 +35,7 @@ func (a *AdaptorV3) ConvertRequest(c *gin.Context, relayMode int, request *model return nil, errors.New("request is nil") } request.User = a.meta.Config.UserID - return ConvertRequest(*request), nil + return V3ConvertRequest(*request), nil } func (a *AdaptorV3) ConvertImageRequest(request *model.ImageRequest) (any, error) { diff --git a/relay/adaptor/coze/main.go b/relay/adaptor/coze/main.go index 8d3789ec..98587374 100644 --- a/relay/adaptor/coze/main.go +++ b/relay/adaptor/coze/main.go @@ -44,14 +44,40 @@ func ConvertRequest(textRequest model.GeneralOpenAIRequest) *Request { } for i, message := range textRequest.Messages { if i == len(textRequest.Messages)-1 { - cozeRequest.Query = message.CozeV3StringContent() + cozeRequest.Query = message.StringContent() + continue + } + cozeMessage := Message{ + Role: message.Role, + Content: message.StringContent(), + } + cozeRequest.ChatHistory = append(cozeRequest.ChatHistory, cozeMessage) + } + return &cozeRequest +} + +func V3ConvertRequest(textRequest model.GeneralOpenAIRequest) *V3Request { + cozeRequest := V3Request{ + UserId: textRequest.User, + Stream: textRequest.Stream, + BotId: strings.TrimPrefix(textRequest.Model, "bot-"), + } + if cozeRequest.UserId == "" { + cozeRequest.UserId = "any" + } + for i, message := range textRequest.Messages { + if i == len(textRequest.Messages)-1 { + cozeRequest.AdditionalMessages = append(cozeRequest.AdditionalMessages, Message{ + Role: "user", + Content: message.CozeV3StringContent(), + }) continue } cozeMessage := Message{ Role: message.Role, Content: message.CozeV3StringContent(), } - cozeRequest.ChatHistory = append(cozeRequest.ChatHistory, cozeMessage) + cozeRequest.AdditionalMessages = append(cozeRequest.AdditionalMessages, cozeMessage) } return &cozeRequest } @@ -217,7 +243,7 @@ func V3StreamHandler(c *gin.Context, resp *http.Response) (*model.ErrorWithStatu if len(parts) != 2 { continue } - if strings.HasPrefix(parts[0], "event:") && strings.HasPrefix(parts[1], "data:") { + if !strings.HasPrefix(parts[0], "event:") || !strings.HasPrefix(parts[1], "data:") { continue } event, data := strings.TrimSpace(parts[0][6:]), strings.TrimSpace(parts[1][5:]) diff --git a/relay/adaptor/coze/model.go b/relay/adaptor/coze/model.go index 6bb98cb3..b86e2a67 100644 --- a/relay/adaptor/coze/model.go +++ b/relay/adaptor/coze/model.go @@ -2,9 +2,9 @@ package coze type Message struct { Role string `json:"role"` - Type string `json:"type"` + Type string `json:"type,omitempty"` Content string `json:"content"` - ContentType string `json:"content_type"` + ContentType string `json:"content_type,omitempty"` } type ErrorInformation struct { @@ -78,3 +78,10 @@ type V3Response struct { Code int `json:"code"` Msg string `json:"msg"` } + +type V3Request struct { + BotId string `json:"bot_id"` + UserId string `json:"user_id"` + AdditionalMessages []Message `json:"additional_messages"` + Stream bool `json:"stream"` +} diff --git a/relay/apitype/define.go b/relay/apitype/define.go index 066c1b7f..30a7a65b 100644 --- a/relay/apitype/define.go +++ b/relay/apitype/define.go @@ -20,7 +20,6 @@ const ( VertexAI Proxy Replicate - - Dummy // this one is only for count, do not add any channel after this CozeV3 + Dummy // this one is only for count, do not add any channel after this )