CreateToolUseData creates a UIMessageDataToolUse from tool call information
(toolCallID, toolName string, arguments string, chatOpts uctypes.WaveChatOpts)
| 238 | |
| 239 | // CreateToolUseData creates a UIMessageDataToolUse from tool call information |
| 240 | func CreateToolUseData(toolCallID, toolName string, arguments string, chatOpts uctypes.WaveChatOpts) uctypes.UIMessageDataToolUse { |
| 241 | toolUseData := uctypes.UIMessageDataToolUse{ |
| 242 | ToolCallId: toolCallID, |
| 243 | ToolName: toolName, |
| 244 | Status: uctypes.ToolUseStatusPending, |
| 245 | } |
| 246 | |
| 247 | toolDef := chatOpts.GetToolDefinition(toolName) |
| 248 | if toolDef == nil { |
| 249 | toolUseData.Status = uctypes.ToolUseStatusError |
| 250 | toolUseData.ErrorMessage = "tool not found" |
| 251 | return toolUseData |
| 252 | } |
| 253 | |
| 254 | var parsedArgs any |
| 255 | if err := json.Unmarshal([]byte(arguments), &parsedArgs); err != nil { |
| 256 | toolUseData.Status = uctypes.ToolUseStatusError |
| 257 | toolUseData.ErrorMessage = fmt.Sprintf("failed to parse tool arguments: %v", err) |
| 258 | return toolUseData |
| 259 | } |
| 260 | |
| 261 | if toolDef.ToolCallDesc != nil { |
| 262 | toolUseData.ToolDesc = toolDef.ToolCallDesc(parsedArgs, nil, nil) |
| 263 | } |
| 264 | |
| 265 | if toolDef.ToolApproval != nil { |
| 266 | toolUseData.Approval = toolDef.ToolApproval(parsedArgs) |
| 267 | } |
| 268 | |
| 269 | if chatOpts.TabId != "" { |
| 270 | if argsMap, ok := parsedArgs.(map[string]any); ok { |
| 271 | if widgetId, ok := argsMap["widget_id"].(string); ok && widgetId != "" { |
| 272 | ctx, cancelFn := context.WithTimeout(context.Background(), 2*time.Second) |
| 273 | defer cancelFn() |
| 274 | fullBlockId, err := wcore.ResolveBlockIdFromPrefix(ctx, chatOpts.TabId, widgetId) |
| 275 | if err == nil { |
| 276 | toolUseData.BlockId = fullBlockId |
| 277 | } |
| 278 | } |
| 279 | } |
| 280 | } |
| 281 | |
| 282 | return toolUseData |
| 283 | } |
| 284 | |
| 285 | // SendToolProgress sends tool progress updates via SSE if the tool has a progress descriptor |
| 286 | func SendToolProgress(toolCallID, toolName string, jsonData []byte, chatOpts uctypes.WaveChatOpts, sseHandler *sse.SSEHandlerCh, usePartialParse bool) { |
no test coverage detected