55import time
66from typing import Any , Optional , cast
77
8- from opentelemetry import trace
8+ from opentelemetry import trace as trace_api
99
1010from ..telemetry .metrics import EventLoopMetrics , Trace
1111from ..telemetry .tracer import get_tracer
@@ -23,7 +23,7 @@ async def run_tools(
2323 invalid_tool_use_ids : list [str ],
2424 tool_results : list [ToolResult ],
2525 cycle_trace : Trace ,
26- parent_span : Optional [trace .Span ] = None ,
26+ parent_span : Optional [trace_api .Span ] = None ,
2727) -> ToolGenerator :
2828 """Execute tools concurrently.
2929
@@ -53,24 +53,23 @@ async def work(
5353 tool_name = tool_use ["name" ]
5454 tool_trace = Trace (f"Tool: { tool_name } " , parent_id = cycle_trace .id , raw_name = tool_name )
5555 tool_start_time = time .time ()
56+ with trace_api .use_span (tool_call_span ):
57+ try :
58+ async for event in handler (tool_use ):
59+ worker_queue .put_nowait ((worker_id , event ))
60+ await worker_event .wait ()
61+ worker_event .clear ()
62+
63+ result = cast (ToolResult , event )
64+ finally :
65+ worker_queue .put_nowait ((worker_id , stop_event ))
66+
67+ tool_success = result .get ("status" ) == "success"
68+ tool_duration = time .time () - tool_start_time
69+ message = Message (role = "user" , content = [{"toolResult" : result }])
70+ event_loop_metrics .add_tool_usage (tool_use , tool_duration , tool_trace , tool_success , message )
71+ cycle_trace .add_child (tool_trace )
5672
57- try :
58- async for event in handler (tool_use ):
59- worker_queue .put_nowait ((worker_id , event ))
60- await worker_event .wait ()
61- worker_event .clear ()
62-
63- result = cast (ToolResult , event )
64- finally :
65- worker_queue .put_nowait ((worker_id , stop_event ))
66-
67- tool_success = result .get ("status" ) == "success"
68- tool_duration = time .time () - tool_start_time
69- message = Message (role = "user" , content = [{"toolResult" : result }])
70- event_loop_metrics .add_tool_usage (tool_use , tool_duration , tool_trace , tool_success , message )
71- cycle_trace .add_child (tool_trace )
72-
73- if tool_call_span :
7473 tracer .end_tool_call_span (tool_call_span , result )
7574
7675 return result
0 commit comments