From e2edd5e7e5d2f79da2ee4c18ad6a905846bc027a Mon Sep 17 00:00:00 2001 From: CaIon <1808837298@qq.com> Date: Thu, 25 Apr 2024 20:37:50 +0800 Subject: [PATCH] fix: claude --- common/logger.go | 11 +++++++++++ relay/channel/claude/relay-claude.go | 18 ++++++++++++++---- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/common/logger.go b/common/logger.go index 6162721..02ddb71 100644 --- a/common/logger.go +++ b/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))) +} diff --git a/relay/channel/claude/relay-claude.go b/relay/channel/claude/relay-claude.go index bd28512..2726eeb 100644 --- a/relay/channel/claude/relay-claude.go +++ b/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 }