|
|
@@ -1208,6 +1208,8 @@ func GeminiChatStreamHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *
|
|
|
id := helper.GetResponseID(c)
|
|
|
createAt := common.GetTimestamp()
|
|
|
finishReason := constant.FinishReasonStop
|
|
|
+ toolCallIndexByChoice := make(map[int]map[string]int)
|
|
|
+ nextToolCallIndexByChoice := make(map[int]int)
|
|
|
|
|
|
usage, err := geminiStreamHandler(c, info, resp, func(data string, geminiResponse *dto.GeminiChatResponse) bool {
|
|
|
response, isStop := streamResponseGeminiChat2OpenAI(geminiResponse)
|
|
|
@@ -1215,6 +1217,28 @@ func GeminiChatStreamHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *
|
|
|
response.Id = id
|
|
|
response.Created = createAt
|
|
|
response.Model = info.UpstreamModelName
|
|
|
+ for choiceIdx := range response.Choices {
|
|
|
+ choiceKey := response.Choices[choiceIdx].Index
|
|
|
+ for toolIdx := range response.Choices[choiceIdx].Delta.ToolCalls {
|
|
|
+ tool := &response.Choices[choiceIdx].Delta.ToolCalls[toolIdx]
|
|
|
+ if tool.ID == "" {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ m := toolCallIndexByChoice[choiceKey]
|
|
|
+ if m == nil {
|
|
|
+ m = make(map[string]int)
|
|
|
+ toolCallIndexByChoice[choiceKey] = m
|
|
|
+ }
|
|
|
+ if idx, ok := m[tool.ID]; ok {
|
|
|
+ tool.SetIndex(idx)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ idx := nextToolCallIndexByChoice[choiceKey]
|
|
|
+ nextToolCallIndexByChoice[choiceKey] = idx + 1
|
|
|
+ m[tool.ID] = idx
|
|
|
+ tool.SetIndex(idx)
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
logger.LogDebug(c, fmt.Sprintf("info.SendResponseCount = %d", info.SendResponseCount))
|
|
|
if info.SendResponseCount == 0 {
|