Преглед на файлове

Merge branch 'feature/compapi'

* feature/compapi:
  临时修改支持请求参数中content的多态
  将 content 类型改为 interface{}
boweniac преди 1 месец
родител
ревизия
363bff37b7
променени са 4 файла, в които са добавени 47 реда и са изтрити 10 реда
  1. 3 3
      desc/openapi/chat.api
  2. 36 2
      internal/handler/chat/chat_completions_handler.go
  3. 4 1
      internal/logic/chat/chat_completions_logic.go
  4. 4 4
      internal/types/types.go

+ 3 - 3
desc/openapi/chat.api

@@ -53,7 +53,7 @@ type (
 	
 	StdCompMessage {
         Role string `json:"role"`
-        Content string `json:"content"`
+        Content interface{} `json:"content"`
     }
 
     //以下是API响应类型
@@ -86,8 +86,8 @@ type (
     }
 
 	FastgptSpecResp {
-		ResponseData []map[string]any `json:"responseData,omitempty"`
-		NewVariables map[string]any `json:"newVariables,omitempty"`
+		ResponseData []map[string]interface{} `json:"responseData,omitempty"`
+		NewVariables map[string]interface{} `json:"newVariables,omitempty"`
 	}
 	
 	ChatCompletionAudio {

+ 36 - 2
internal/handler/chat/chat_completions_handler.go

@@ -1,6 +1,10 @@
 package chat
 
 import (
+	"bytes"
+	"encoding/json"
+	"fmt"
+	"io"
 	"net/http"
 
 	"github.com/zeromicro/go-zero/rest/httpx"
@@ -8,6 +12,8 @@ import (
 	"wechat-api/internal/logic/chat"
 	"wechat-api/internal/svc"
 	"wechat-api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
 )
 
 // swagger:route post /v1/chat/completions chat ChatCompletions
@@ -27,12 +33,40 @@ import (
 
 func ChatCompletionsHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
 	return func(w http.ResponseWriter, r *http.Request) {
-		var req types.CompApiReq
-		if err := httpx.Parse(r, &req, true); err != nil {
+		/*
+			var req types.CompApiReq
+			if err := httpx.Parse(r, &req, true); err != nil {
+				httpx.ErrorCtx(r.Context(), w, err)
+				return
+			}
+
+			l := chat.NewChatCompletionsLogic(r.Context(), svcCtx)
+			resp, err := l.ChatCompletions(&req)
+			if err != nil {
+				httpx.ErrorCtx(r.Context(), w, err)
+			} else {
+				httpx.OkJsonCtx(r.Context(), w, resp)
+			}
+		*/
+		// 读取请求体
+		body, err := io.ReadAll(r.Body)
+		if err != nil {
 			httpx.ErrorCtx(r.Context(), w, err)
 			return
 		}
+		// 将请求体还原,以便后续处理
+		r.Body = io.NopCloser(bytes.NewBuffer(body))
 
+		// 打印请求体
+		logx.Info(string(body))
+		var req types.CompApiReq
+		err = json.Unmarshal([]byte(string(body)), &req)
+		if err != nil {
+			fmt.Println("Error:", err)
+			return
+		}
+		// 打印请求体
+		logx.Info(req)
 		l := chat.NewChatCompletionsLogic(r.Context(), svcCtx)
 		resp, err := l.ChatCompletions(&req)
 		if err != nil {

+ 4 - 1
internal/logic/chat/chat_completions_logic.go

@@ -3,6 +3,7 @@ package chat
 import (
 	"context"
 	"errors"
+	"fmt"
 	"strconv"
 
 	"wechat-api/ent"
@@ -163,13 +164,15 @@ func (l *ChatCompletionsLogic) appendUsageDetailLog(authToken string, req *types
 	completionToken := uint64(resp.Usage.CompletionTokens)
 	totalTokens := promptTokens + completionToken
 
+	fmt.Printf("====>n appendUsageDetailLog:%v|||%T\n", req.Messages[0].Content, req.Messages[0].Content)
+
 	res, err := l.svcCtx.DB.UsageDetail.Create().
 		SetNotNilType(&logType).
 		SetNotNilBotID(&authToken).
 		SetNotNilReceiverID(&req.EventType).
 		SetNotNilSessionID(&sessionId).
 		SetNillableApp(&workIdx).
-		SetNillableRequest(&req.Messages[0].Content).
+		//SetNillableRequest(&req.Messages[0].Content).
 		SetNillableResponse(&resp.Choices[0].Message.Content).
 		SetNillableOrganizationID(&orgId).
 		SetOriginalData(rawReqResp).

+ 4 - 4
internal/types/types.go

@@ -1949,8 +1949,8 @@ type FastGptSpecReq struct {
 }
 
 type StdCompMessage struct {
-	Role    string `json:"role"`
-	Content string `json:"content"`
+	Role    string      `json:"role"`
+	Content interface{} `json:"content"`
 }
 
 // 以下是API响应类型
@@ -1986,8 +1986,8 @@ type StdCompApiResp struct {
 
 // swagger:model FastgptSpecResp
 type FastgptSpecResp struct {
-	ResponseData []map[string]any `json:"responseData,omitempty"`
-	NewVariables map[string]any   `json:"newVariables,omitempty"`
+	ResponseData []map[string]interface{} `json:"responseData,omitempty"`
+	NewVariables map[string]interface{}   `json:"newVariables,omitempty"`
 }
 
 type ChatCompletionAudio struct {