|
|
@@ -276,7 +276,7 @@ func RequestOpenAI2ClaudeMessage(c *gin.Context, textRequest dto.GeneralOpenAIRe
|
|
|
isFirstMessage := true
|
|
|
// 初始化system消息数组,用于累积多个system消息
|
|
|
var systemMessages []dto.ClaudeMediaMessage
|
|
|
-
|
|
|
+
|
|
|
for _, message := range formatMessages {
|
|
|
if message.Role == "system" {
|
|
|
// 根据Claude API规范,system字段使用数组格式更有通用性
|
|
|
@@ -401,12 +401,12 @@ func RequestOpenAI2ClaudeMessage(c *gin.Context, textRequest dto.GeneralOpenAIRe
|
|
|
claudeMessages = append(claudeMessages, claudeMessage)
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 设置累积的system消息
|
|
|
if len(systemMessages) > 0 {
|
|
|
claudeRequest.System = systemMessages
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
claudeRequest.Prompt = ""
|
|
|
claudeRequest.Messages = claudeMessages
|
|
|
return &claudeRequest, nil
|
|
|
@@ -716,7 +716,7 @@ func ClaudeStreamHandler(c *gin.Context, resp *http.Response, info *relaycommon.
|
|
|
return claudeInfo.Usage, nil
|
|
|
}
|
|
|
|
|
|
-func HandleClaudeResponseData(c *gin.Context, info *relaycommon.RelayInfo, claudeInfo *ClaudeResponseInfo, data []byte, requestMode int) *types.NewAPIError {
|
|
|
+func HandleClaudeResponseData(c *gin.Context, info *relaycommon.RelayInfo, claudeInfo *ClaudeResponseInfo, httpResp *http.Response, data []byte, requestMode int) *types.NewAPIError {
|
|
|
var claudeResponse dto.ClaudeResponse
|
|
|
err := common.Unmarshal(data, &claudeResponse)
|
|
|
if err != nil {
|
|
|
@@ -754,7 +754,7 @@ func HandleClaudeResponseData(c *gin.Context, info *relaycommon.RelayInfo, claud
|
|
|
c.Set("claude_web_search_requests", claudeResponse.Usage.ServerToolUse.WebSearchRequests)
|
|
|
}
|
|
|
|
|
|
- service.IOCopyBytesGracefully(c, nil, responseData)
|
|
|
+ service.IOCopyBytesGracefully(c, httpResp, responseData)
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
@@ -775,7 +775,7 @@ func ClaudeHandler(c *gin.Context, resp *http.Response, info *relaycommon.RelayI
|
|
|
if common.DebugEnabled {
|
|
|
println("responseBody: ", string(responseBody))
|
|
|
}
|
|
|
- handleErr := HandleClaudeResponseData(c, info, claudeInfo, responseBody, requestMode)
|
|
|
+ handleErr := HandleClaudeResponseData(c, info, claudeInfo, resp, responseBody, requestMode)
|
|
|
if handleErr != nil {
|
|
|
return nil, handleErr
|
|
|
}
|