5
5
import time
6
6
from typing import Any , Optional , cast
7
7
8
- from opentelemetry import trace
8
+ from opentelemetry import trace as trace_api
9
9
10
10
from ..telemetry .metrics import EventLoopMetrics , Trace
11
11
from ..telemetry .tracer import get_tracer
@@ -23,7 +23,7 @@ async def run_tools(
23
23
invalid_tool_use_ids : list [str ],
24
24
tool_results : list [ToolResult ],
25
25
cycle_trace : Trace ,
26
- parent_span : Optional [trace .Span ] = None ,
26
+ parent_span : Optional [trace_api .Span ] = None ,
27
27
) -> ToolGenerator :
28
28
"""Execute tools concurrently.
29
29
@@ -53,24 +53,23 @@ async def work(
53
53
tool_name = tool_use ["name" ]
54
54
tool_trace = Trace (f"Tool: { tool_name } " , parent_id = cycle_trace .id , raw_name = tool_name )
55
55
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 )
56
72
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 :
74
73
tracer .end_tool_call_span (tool_call_span , result )
75
74
76
75
return result
0 commit comments