Skip to content

Commit 5080b68

Browse files
authored
Don't add startActivity, etc spans when there is no parent trace in which to nest them (#1037)
* Don't add startActivity, etc spans when there is no parent trace in which to nest them * Type ignore instead of recheck
1 parent 2b5de91 commit 5080b68

File tree

1 file changed

+48
-25
lines changed

1 file changed

+48
-25
lines changed

temporalio/contrib/openai_agents/_trace_interceptor.py

Lines changed: 48 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
import random
66
import uuid
77
from contextlib import contextmanager
8-
from typing import Any, Mapping, Protocol, Type
8+
from typing import Any, Mapping, Optional, Protocol, Type
99

1010
from agents import CustomSpanData, custom_span, get_current_span, trace
1111
from agents.tracing import (
1212
get_trace_provider,
1313
)
1414
from agents.tracing.scope import Scope
15-
from agents.tracing.spans import NoOpSpan
15+
from agents.tracing.spans import NoOpSpan, Span
1616

1717
import temporalio.activity
1818
import temporalio.api.common.v1
@@ -370,55 +370,78 @@ class _ContextPropagationWorkflowOutboundInterceptor(
370370
async def signal_child_workflow(
371371
self, input: temporalio.worker.SignalChildWorkflowInput
372372
) -> None:
373-
with custom_span(
374-
name="temporal:signalChildWorkflow",
375-
data={"workflowId": input.child_workflow_id},
376-
):
373+
trace = get_trace_provider().get_current_trace()
374+
if trace:
375+
with custom_span(
376+
name="temporal:signalChildWorkflow",
377+
data={"workflowId": input.child_workflow_id},
378+
):
379+
set_header_from_context(input, temporalio.workflow.payload_converter())
380+
await self.next.signal_child_workflow(input)
381+
else:
377382
set_header_from_context(input, temporalio.workflow.payload_converter())
378383
await self.next.signal_child_workflow(input)
379384

380385
async def signal_external_workflow(
381386
self, input: temporalio.worker.SignalExternalWorkflowInput
382387
) -> None:
383-
with custom_span(
384-
name="temporal:signalExternalWorkflow",
385-
data={"workflowId": input.workflow_id},
386-
):
388+
trace = get_trace_provider().get_current_trace()
389+
if trace:
390+
with custom_span(
391+
name="temporal:signalExternalWorkflow",
392+
data={"workflowId": input.workflow_id},
393+
):
394+
set_header_from_context(input, temporalio.workflow.payload_converter())
395+
await self.next.signal_external_workflow(input)
396+
else:
387397
set_header_from_context(input, temporalio.workflow.payload_converter())
388398
await self.next.signal_external_workflow(input)
389399

390400
def start_activity(
391401
self, input: temporalio.worker.StartActivityInput
392402
) -> temporalio.workflow.ActivityHandle:
393-
span = custom_span(
394-
name="temporal:startActivity", data={"activity": input.activity}
395-
)
396-
span.start(mark_as_current=True)
403+
trace = get_trace_provider().get_current_trace()
404+
span: Optional[Span] = None
405+
if trace:
406+
span = custom_span(
407+
name="temporal:startActivity", data={"activity": input.activity}
408+
)
409+
span.start(mark_as_current=True)
410+
397411
set_header_from_context(input, temporalio.workflow.payload_converter())
398412
handle = self.next.start_activity(input)
399-
handle.add_done_callback(lambda _: span.finish())
413+
if span:
414+
handle.add_done_callback(lambda _: span.finish()) # type: ignore
400415
return handle
401416

402417
async def start_child_workflow(
403418
self, input: temporalio.worker.StartChildWorkflowInput
404419
) -> temporalio.workflow.ChildWorkflowHandle:
405-
span = custom_span(
406-
name="temporal:startChildWorkflow", data={"workflow": input.workflow}
407-
)
408-
span.start(mark_as_current=True)
420+
trace = get_trace_provider().get_current_trace()
421+
span: Optional[Span] = None
422+
if trace:
423+
span = custom_span(
424+
name="temporal:startChildWorkflow", data={"workflow": input.workflow}
425+
)
426+
span.start(mark_as_current=True)
409427
set_header_from_context(input, temporalio.workflow.payload_converter())
410428
handle = await self.next.start_child_workflow(input)
411-
handle.add_done_callback(lambda _: span.finish())
429+
if span:
430+
handle.add_done_callback(lambda _: span.finish()) # type: ignore
412431
return handle
413432

414433
def start_local_activity(
415434
self, input: temporalio.worker.StartLocalActivityInput
416435
) -> temporalio.workflow.ActivityHandle:
417-
span = custom_span(
418-
name="temporal:startLocalActivity", data={"activity": input.activity}
419-
)
420-
span.start(mark_as_current=True)
436+
trace = get_trace_provider().get_current_trace()
437+
span: Optional[Span] = None
438+
if trace:
439+
span = custom_span(
440+
name="temporal:startLocalActivity", data={"activity": input.activity}
441+
)
442+
span.start(mark_as_current=True)
421443
set_header_from_context(input, temporalio.workflow.payload_converter())
422444
handle = self.next.start_local_activity(input)
423-
handle.add_done_callback(lambda _: span.finish())
445+
if span:
446+
handle.add_done_callback(lambda _: span.finish()) # type: ignore
424447
return handle

0 commit comments

Comments
 (0)