fix:gemini to claude tool_use err (#5041)
This commit is contained in:
@@ -1410,6 +1410,14 @@ func GeminiChatStreamHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *
|
|||||||
response.Id = id
|
response.Id = id
|
||||||
response.Created = createAt
|
response.Created = createAt
|
||||||
response.Model = info.UpstreamModelName
|
response.Model = info.UpstreamModelName
|
||||||
|
if response.IsToolCall() {
|
||||||
|
finishReason = constant.FinishReasonToolCalls
|
||||||
|
if info.RelayFormat == types.RelayFormatClaude {
|
||||||
|
for choiceIdx := range response.Choices {
|
||||||
|
response.Choices[choiceIdx].FinishReason = nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
for choiceIdx := range response.Choices {
|
for choiceIdx := range response.Choices {
|
||||||
choiceKey := response.Choices[choiceIdx].Index
|
choiceKey := response.Choices[choiceIdx].Index
|
||||||
for toolIdx := range response.Choices[choiceIdx].Delta.ToolCalls {
|
for toolIdx := range response.Choices[choiceIdx].Delta.ToolCalls {
|
||||||
@@ -1470,7 +1478,9 @@ func GeminiChatStreamHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *
|
|||||||
logger.LogError(c, err.Error())
|
logger.LogError(c, err.Error())
|
||||||
}
|
}
|
||||||
if isStop {
|
if isStop {
|
||||||
_ = handleStream(c, info, helper.GenerateStopResponse(id, createAt, info.UpstreamModelName, finishReason))
|
if info.RelayFormat != types.RelayFormatClaude {
|
||||||
|
_ = handleStream(c, info, helper.GenerateStopResponse(id, createAt, info.UpstreamModelName, finishReason))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
@@ -1480,6 +1490,10 @@ func GeminiChatStreamHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *
|
|||||||
}
|
}
|
||||||
|
|
||||||
response := helper.GenerateFinalUsageResponse(id, createAt, info.UpstreamModelName, *usage)
|
response := helper.GenerateFinalUsageResponse(id, createAt, info.UpstreamModelName, *usage)
|
||||||
|
if info.RelayFormat == types.RelayFormatClaude && info.ClaudeConvertInfo != nil && !info.ClaudeConvertInfo.Done {
|
||||||
|
response = helper.GenerateStopResponse(id, createAt, info.UpstreamModelName, finishReason)
|
||||||
|
response.Usage = usage
|
||||||
|
}
|
||||||
handleErr := handleFinalStream(c, info, response)
|
handleErr := handleFinalStream(c, info, response)
|
||||||
if handleErr != nil {
|
if handleErr != nil {
|
||||||
common.SysLog("send final response failed: " + handleErr.Error())
|
common.SysLog("send final response failed: " + handleErr.Error())
|
||||||
|
|||||||
Reference in New Issue
Block a user