Skip to content

Commit 252254e

Browse files
committed
Fixing tracing issues. Propagate span parentage, remove startActivity
1 parent e6f6f91 commit 252254e

File tree

2 files changed

+25
-19
lines changed

2 files changed

+25
-19
lines changed

temporalio/contrib/openai_agents/_temporal_trace_provider.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
"""Provides support for integration with OpenAI Agents SDK tracing across workflows"""
22

3+
import traceback
34
import uuid
45
from typing import Any, Optional, Union, cast
56

temporalio/contrib/openai_agents/_trace_interceptor.py

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@
55
from contextlib import contextmanager
66
from 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
99
from 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

1416
import temporalio.activity
1517
import 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

94102
class 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

Comments
 (0)