Skip to content

symfonic.observability.otel.callback_bridge

callback_bridge

Bridges CallbackHandler events into OTelTracer spans.

Implements the CallbackHandler protocol (src/symfonic/core/callbacks/protocol.py) plus the optional on_llm_pre_call extension. Each handler method is a thin forwarder into OTelTracer.recorder -- no business logic lives here so the bridge stays small and the tracer can be unit-tested independently of the symfonic event dataclasses.

CONTAINS opentelemetry imports transitively via OTelTracer. Loaded only through OTelExporter.build().

CallbackBridge

CallbackBridge(tracer: OTelTracer)

Translate CallbackHandler events into OTEL span operations.

Source code in src/symfonic/observability/otel/callback_bridge.py
def __init__(self, tracer: OTelTracer) -> None:
    self._tracer = tracer

on_agent_end async

on_agent_end(event: AgentEndEvent) -> None

No-op: the root span is closed by OTelTracer.start_run_span.

Source code in src/symfonic/observability/otel/callback_bridge.py
@_safe("on_agent_end")
async def on_agent_end(self, event: AgentEndEvent) -> None:
    """No-op: the root span is closed by ``OTelTracer.start_run_span``."""

on_agent_start async

on_agent_start(event: AgentStartEvent) -> None

No-op: the root span is opened by OTelTracer.start_run_span.

Source code in src/symfonic/observability/otel/callback_bridge.py
@_safe("on_agent_start")
async def on_agent_start(self, event: AgentStartEvent) -> None:
    """No-op: the root span is opened by ``OTelTracer.start_run_span``."""

on_token_composition async

on_token_composition(event: TokenCompositionEvent) -> None

Token composition is logged at INFO already; no separate span.

Source code in src/symfonic/observability/otel/callback_bridge.py
@_safe("on_token_composition")
async def on_token_composition(self, event: TokenCompositionEvent) -> None:
    """Token composition is logged at INFO already; no separate span."""