From 1a39ef74ce381fb0234f9acc95deb3ed3861c0fd Mon Sep 17 00:00:00 2001 From: CaIon <1808837298@qq.com> Date: Tue, 23 Apr 2024 13:08:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=87=AA=E5=8A=A8=E6=95=B4=E7=90=86cla?= =?UTF-8?q?ude=E4=B8=8D=E8=A7=84=E8=8C=83prompt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- relay/channel/claude/relay-claude.go | 33 +++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/relay/channel/claude/relay-claude.go b/relay/channel/claude/relay-claude.go index 9c5c350..bd5b7ef 100644 --- a/relay/channel/claude/relay-claude.go +++ b/relay/channel/claude/relay-claude.go @@ -70,8 +70,39 @@ func RequestOpenAI2ClaudeMessage(textRequest dto.GeneralOpenAIRequest) (*ClaudeR if claudeRequest.MaxTokens == 0 { claudeRequest.MaxTokens = 4096 } + formatMessages := make([]dto.Message, 0) + var lastMessage *dto.Message + for i, message := range textRequest.Messages { + if message.Role == "system" { + if i != 0 { + message.Role = "user" + } + } + if message.Role == "" { + message.Role = "user" + } + fmtMessage := dto.Message{ + Role: message.Role, + Content: message.Content, + } + if lastMessage != nil && lastMessage.Role == message.Role { + if lastMessage.IsStringContent() && message.IsStringContent() { + content, _ := json.Marshal(strings.Trim(fmt.Sprintf("%s %s", lastMessage.StringContent(), message.StringContent()), "\"")) + fmtMessage.Content = content + // delete last message + formatMessages = formatMessages[:len(formatMessages)-1] + } + } + if fmtMessage.Content == nil { + content, _ := json.Marshal("...") + fmtMessage.Content = content + } + formatMessages = append(formatMessages, fmtMessage) + lastMessage = &message + } + claudeMessages := make([]ClaudeMessage, 0) - for _, message := range textRequest.Messages { + for _, message := range formatMessages { if message.Role == "system" { claudeRequest.System = message.StringContent() } else {