creamlike1024 9 месяцев назад
Родитель
Сommit
b2499b0a7e
3 измененных файлов с 28 добавлено и 37 удалено
  1. 3 3
      relay/channel/coze/adaptor.go
  2. 0 30
      relay/channel/coze/dto.go
  3. 25 4
      relay/channel/coze/relay-coze.go

+ 3 - 3
relay/channel/coze/adaptor.go

@@ -42,7 +42,7 @@ func (a *Adaptor) ConvertOpenAIRequest(c *gin.Context, info *common.RelayInfo, r
 	if request == nil {
 		return nil, errors.New("request is nil")
 	}
-	return convertCozeChatRequest(*request), nil
+	return convertCozeChatRequest(c, *request), nil
 }
 
 // ConvertOpenAIResponsesRequest implements channel.Adaptor.
@@ -88,7 +88,7 @@ func (a *Adaptor) DoRequest(c *gin.Context, info *common.RelayInfo, requestBody
 		time.Sleep(time.Second * 1)
 	}
 	// 发送获取消息请求
-	return channel.DoApiRequest(a, c, info, requestBody)
+	return getChatDetail(a, c, info)
 }
 
 // DoResponse implements channel.Adaptor.
@@ -109,7 +109,7 @@ func (a *Adaptor) GetModelList() []string {
 
 // GetRequestURL implements channel.Adaptor.
 func (a *Adaptor) GetRequestURL(info *common.RelayInfo) (string, error) {
-	return fmt.Sprintf("%s/v3/chat/message/list", info.BaseUrl), nil
+	return fmt.Sprintf("%s/v3/chat", info.BaseUrl), nil
 }
 
 // Init implements channel.Adaptor.

+ 0 - 30
relay/channel/coze/dto.go

@@ -2,41 +2,11 @@ package coze
 
 import "encoding/json"
 
-// type CozeResponse struct {
-// 	Code    int                  `json:"code"`
-// 	Message string               `json:"message"`
-// 	Data    CozeConversationData `json:"data"`
-// 	Detail  CozeConversationData `json:"detail"`
-// }
-
-// type CozeConversationData struct {
-// 	Id            string          `json:"id"`
-// 	CreatedAt     int64           `json:"created_at"`
-// 	MetaData      json.RawMessage `json:"meta_data"`
-// 	LastSectionId string          `json:"last_section_id"`
-// }
-
-// type CozeResponseDetail struct {
-// 	Logid string `json:"logid"`
-// }
-
 type CozeError struct {
 	Code    int    `json:"code"`
 	Message string `json:"message"`
 }
 
-// type CozeErrorWithStatusCode struct {
-// 	Error      CozeError `json:"error"`
-// 	StatusCode int
-// 	LocalError bool
-// }
-
-type CozeRequest struct {
-	BotId    string             `json:"bot_id,omitempty"`
-	MetaData json.RawMessage    `json:"meta_data,omitempty"`
-	Messages []CozeEnterMessage `json:"messages,omitempty"`
-}
-
 type CozeEnterMessage struct {
 	Role        string          `json:"role"`
 	Type        string          `json:"type,omitempty"`

+ 25 - 4
relay/channel/coze/relay-coze.go

@@ -13,7 +13,7 @@ import (
 	"github.com/gin-gonic/gin"
 )
 
-func convertCozeChatRequest(request dto.GeneralOpenAIRequest) *CozeRequest {
+func convertCozeChatRequest(c *gin.Context, request dto.GeneralOpenAIRequest) *CozeChatRequest {
 	var messages []CozeEnterMessage
 	// 将 request的messages的role为user的content转换为CozeMessage
 	for _, message := range request.Messages {
@@ -26,10 +26,12 @@ func convertCozeChatRequest(request dto.GeneralOpenAIRequest) *CozeRequest {
 			})
 		}
 	}
-	cozeRequest := &CozeRequest{
+	cozeRequest := &CozeChatRequest{
 		// TODO: model to botid
-		BotId:    "1",
-		Messages: messages,
+		BotId:              "1",
+		UserId:             c.GetString("id"),
+		AdditionalMessages: messages,
+		Stream:             request.Stream,
 	}
 	return cozeRequest
 }
@@ -101,6 +103,25 @@ func checkIfChatComplete(a *Adaptor, c *gin.Context, info *relaycommon.RelayInfo
 	}
 }
 
+func getChatDetail(a *Adaptor, c *gin.Context, info *relaycommon.RelayInfo) (*http.Response, error) {
+	requestURL := fmt.Sprintf("%s/v3/chat/message/list", info.BaseUrl)
+
+	requestURL = requestURL + "?conversation_id=" + c.GetString("coze_conversation_id") + "&chat_id=" + c.GetString("coze_chat_id")
+	req, err := http.NewRequest("GET", requestURL, nil)
+	if err != nil {
+		return nil, fmt.Errorf("new request failed: %w", err)
+	}
+	err = a.SetupRequestHeader(c, &req.Header, info)
+	if err != nil {
+		return nil, fmt.Errorf("setup request header failed: %w", err)
+	}
+	resp, err := doRequest(req, info)
+	if err != nil {
+		return nil, fmt.Errorf("do request failed: %w", err)
+	}
+	return resp, nil
+}
+
 func doRequest(req *http.Request, info *common.RelayInfo) (*http.Response, error) {
 	var client *http.Client
 	var err error // 声明 err 变量