CaIon 1 年間 前
コミット
e2edd5e7e5
2 ファイル変更25 行追加4 行削除
  1. 11 0
      common/logger.go
  2. 14 4
      relay/channel/claude/relay-claude.go

+ 11 - 0
common/logger.go

@@ -2,6 +2,7 @@ package common
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"github.com/gin-gonic/gin"
 	"io"
@@ -98,3 +99,13 @@ func LogQuota(quota int) string {
 		return fmt.Sprintf("%d 点额度", quota)
 	}
 }
+
+// LogJson 仅供测试使用 only for test
+func LogJson(ctx context.Context, msg string, obj any) {
+	jsonStr, err := json.Marshal(obj)
+	if err != nil {
+		LogError(ctx, fmt.Sprintf("json marshal failed: %s", err.Error()))
+		return
+	}
+	LogInfo(ctx, fmt.Sprintf("%s | %s", msg, string(jsonStr)))
+}

+ 14 - 4
relay/channel/claude/relay-claude.go

@@ -72,7 +72,7 @@ func RequestOpenAI2ClaudeMessage(textRequest dto.GeneralOpenAIRequest) (*ClaudeR
 	}
 	formatMessages := make([]dto.Message, 0)
 	var lastMessage *dto.Message
-	for _, message := range textRequest.Messages {
+	for i, message := range textRequest.Messages {
 		//if message.Role == "system" {
 		//	if i != 0 {
 		//		message.Role = "user"
@@ -98,13 +98,24 @@ func RequestOpenAI2ClaudeMessage(textRequest dto.GeneralOpenAIRequest) (*ClaudeR
 			fmtMessage.Content = content
 		}
 		formatMessages = append(formatMessages, fmtMessage)
-		lastMessage = &message
+		lastMessage = &textRequest.Messages[i]
 	}
 
 	claudeMessages := make([]ClaudeMessage, 0)
 	for _, message := range formatMessages {
 		if message.Role == "system" {
-			claudeRequest.System = message.StringContent()
+			if message.IsStringContent() {
+				claudeRequest.System = message.StringContent()
+			} else {
+				contents := message.ParseContent()
+				content := ""
+				for _, ctx := range contents {
+					if ctx.Type == "text" {
+						content += ctx.Text
+					}
+				}
+				claudeRequest.System = content
+			}
 		} else {
 			claudeMessage := ClaudeMessage{
 				Role: message.Role,
@@ -149,7 +160,6 @@ func RequestOpenAI2ClaudeMessage(textRequest dto.GeneralOpenAIRequest) (*ClaudeR
 	}
 	claudeRequest.Prompt = ""
 	claudeRequest.Messages = claudeMessages
-
 	return &claudeRequest, nil
 }