55from contextlib import contextmanager
66from typing import Any , Mapping , Protocol , Type
77
8- from agents import custom_span , get_current_span , trace
8+ from agents import CustomSpanData , custom_span , get_current_span , trace
99from agents .tracing import (
1010 get_trace_provider ,
1111)
12- from agents .tracing .spans import NoOpSpan
12+ from agents .tracing .provider import DefaultTraceProvider
13+ from agents .tracing .scope import Scope
14+ from agents .tracing .spans import NoOpSpan , SpanImpl
1315
1416import temporalio .activity
1517import temporalio .api .common .v1
@@ -69,7 +71,8 @@ def context_from_header(
6971 if activity .in_activity ()
7072 else None
7173 )
72- if get_trace_provider ().get_current_trace () is None :
74+ current_trace = get_trace_provider ().get_current_trace ()
75+ if current_trace is None :
7376 metadata = {
7477 "temporal:workflowId" : activity .info ().workflow_id
7578 if activity .in_activity ()
@@ -79,16 +82,21 @@ def context_from_header(
7982 else workflow .info ().run_id ,
8083 "temporal:workflowType" : workflow_type ,
8184 }
82- with trace (
85+ current_trace = trace (
8386 span_info ["traceName" ],
8487 trace_id = span_info ["traceId" ],
8588 metadata = metadata ,
86- ) as t :
87- with custom_span (name = span_name , parent = t , data = data ):
88- yield
89- else :
90- with custom_span (name = span_name , parent = None , data = data ):
91- yield
89+ )
90+ Scope .set_current_trace (current_trace )
91+ current_span = get_trace_provider ().get_current_span ()
92+ if current_span is None :
93+ current_span = get_trace_provider ().create_span (
94+ span_data = CustomSpanData (name = "" , data = {}), span_id = span_info ["spanId" ]
95+ )
96+ Scope .set_current_span (current_span )
97+
98+ with custom_span (name = span_name , parent = current_span , data = data ):
99+ yield
92100
93101
94102class OpenAIAgentsTracingInterceptor (
@@ -115,7 +123,7 @@ class OpenAIAgentsTracingInterceptor(
115123 worker = Worker(client, task_queue="my-task-queue", interceptors=[interceptor])
116124 """
117125
118- def __init__ ( # type: ignore[reportMissingSuperCall]
126+ def __init__ (
119127 self ,
120128 payload_converter : temporalio .converter .PayloadConverter = temporalio .converter .default ().payload_converter ,
121129 ) -> None :
@@ -188,7 +196,7 @@ async def start_workflow(
188196 ** ({"temporal:workflowId" : input .id } if input .id else {}),
189197 }
190198 data = {"workflowId" : input .id } if input .id else None
191- span_name = "temporal:startWorkflow"
199+ span_name = f "temporal:startWorkflow"
192200 if get_trace_provider ().get_current_trace () is None :
193201 with trace (
194202 span_name + ":" + input .workflow , metadata = metadata , group_id = input .id
@@ -207,7 +215,7 @@ async def query_workflow(self, input: temporalio.client.QueryWorkflowInput) -> A
207215 ** ({"temporal:workflowId" : input .id } if input .id else {}),
208216 }
209217 data = {"workflowId" : input .id , "query" : input .query }
210- span_name = "temporal:queryWorkflow"
218+ span_name = f "temporal:queryWorkflow"
211219 if get_trace_provider ().get_current_trace () is None :
212220 with trace (span_name , metadata = metadata , group_id = input .id ):
213221 with custom_span (name = span_name , data = data ):
@@ -226,7 +234,7 @@ async def signal_workflow(
226234 ** ({"temporal:workflowId" : input .id } if input .id else {}),
227235 }
228236 data = {"workflowId" : input .id , "signal" : input .signal }
229- span_name = "temporal:signalWorkflow"
237+ span_name = f "temporal:signalWorkflow"
230238 if get_trace_provider ().get_current_trace () is None :
231239 with trace (span_name , metadata = metadata , group_id = input .id ):
232240 with custom_span (name = span_name , data = data ):
@@ -337,11 +345,8 @@ async def signal_external_workflow(
337345 def start_activity (
338346 self , input : temporalio .worker .StartActivityInput
339347 ) -> temporalio .workflow .ActivityHandle :
340- with custom_span (
341- name = f"temporal:startActivity:{ input .activity } " ,
342- ):
343- set_header_from_context (input , temporalio .workflow .payload_converter ())
344- return self .next .start_activity (input )
348+ set_header_from_context (input , temporalio .workflow .payload_converter ())
349+ return self .next .start_activity (input )
345350
346351 async def start_child_workflow (
347352 self , input : temporalio .worker .StartChildWorkflowInput
0 commit comments