(backend UseChatBackend, toolCall uctypes.WaveToolCall, chatOpts uctypes.WaveChatOpts, sseHandler *sse.SSEHandlerCh, metrics *uctypes.AIMetrics)
| 301 | } |
| 302 | |
| 303 | func processToolCall(backend UseChatBackend, toolCall uctypes.WaveToolCall, chatOpts uctypes.WaveChatOpts, sseHandler *sse.SSEHandlerCh, metrics *uctypes.AIMetrics) uctypes.AIToolResult { |
| 304 | inputJSON, _ := json.Marshal(toolCall.Input) |
| 305 | logutil.DevPrintf("TOOLUSE name=%s id=%s input=%s approval=%q\n", toolCall.Name, toolCall.ID, utilfn.TruncateString(string(inputJSON), 40), toolCall.ToolUseData.Approval) |
| 306 | |
| 307 | toolDef := chatOpts.GetToolDefinition(toolCall.Name) |
| 308 | result := processToolCallInternal(backend, toolCall, chatOpts, toolDef, sseHandler) |
| 309 | |
| 310 | if result.ErrorText != "" { |
| 311 | log.Printf(" error=%s\n", result.ErrorText) |
| 312 | metrics.ToolUseErrorCount++ |
| 313 | } else { |
| 314 | log.Printf(" result=%s\n", utilfn.TruncateString(result.Text, 40)) |
| 315 | } |
| 316 | |
| 317 | if toolDef != nil && toolDef.ToolLogName != "" { |
| 318 | metrics.ToolDetail[toolDef.ToolLogName]++ |
| 319 | } |
| 320 | |
| 321 | if toolCall.ToolUseData != nil { |
| 322 | _ = sseHandler.AiMsgData("data-tooluse", toolCall.ID, *toolCall.ToolUseData) |
| 323 | updateToolUseDataInChat(backend, chatOpts, toolCall.ID, *toolCall.ToolUseData) |
| 324 | } |
| 325 | |
| 326 | return result |
| 327 | } |
| 328 | |
| 329 | func processAllToolCalls(backend UseChatBackend, stopReason *uctypes.WaveStopReason, chatOpts uctypes.WaveChatOpts, sseHandler *sse.SSEHandlerCh, metrics *uctypes.AIMetrics) { |
| 330 | // Create and send all data-tooluse packets at the beginning |
no test coverage detected