From b5dd426681bb32303cbeb01666607a2ee5066646 Mon Sep 17 00:00:00 2001 From: tgasser-nv <200644301+tgasser-nv@users.noreply.github.com> Date: Wed, 10 Sep 2025 11:35:37 -0500 Subject: [PATCH 1/2] Cleaned tracing/ directory --- nemoguardrails/tracing/interaction_types.py | 2 +- nemoguardrails/tracing/span_extractors.py | 22 ++++++++------------- nemoguardrails/tracing/tracer.py | 4 ++++ 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/nemoguardrails/tracing/interaction_types.py b/nemoguardrails/tracing/interaction_types.py index 51f77bdbd..3fa57a074 100644 --- a/nemoguardrails/tracing/interaction_types.py +++ b/nemoguardrails/tracing/interaction_types.py @@ -78,6 +78,6 @@ def extract_interaction_log( return InteractionLog( id=interaction_output.id, activated_rails=generation_log.activated_rails, - events=generation_log.internal_events, + events=generation_log.internal_events or [], trace=spans, ) diff --git a/nemoguardrails/tracing/span_extractors.py b/nemoguardrails/tracing/span_extractors.py index 637f754f9..cca40024f 100644 --- a/nemoguardrails/tracing/span_extractors.py +++ b/nemoguardrails/tracing/span_extractors.py @@ -59,7 +59,7 @@ def extract_spans( self, activated_rails: List[ActivatedRail] ) -> List[Union[SpanLegacy, SpanOpentelemetry]]: """Extract v1 spans from activated rails.""" - spans: List[SpanLegacy] = [] + spans: List[Union[SpanLegacy, SpanOpentelemetry]] = [] if not activated_rails: return spans @@ -165,9 +165,9 @@ def __init__( def extract_spans( self, activated_rails: List[ActivatedRail] - ) -> List[Union[SpanLegacy, SpanOpentelemetry, TypedSpan]]: + ) -> List[Union[SpanLegacy, SpanOpentelemetry]]: """Extract v2 spans from activated rails with OpenTelemetry attributes.""" - spans: List[TypedSpan] = [] + spans: List[Union[SpanLegacy, SpanOpentelemetry]] = [] ref_time = activated_rails[0].started_at or 0.0 interaction_span = InteractionSpan( @@ -219,17 +219,11 @@ def extract_spans( for k, v in (action.action_params or {}).items() if isinstance(v, (str, int, float, bool)) }, - error=True if hasattr(action, "error") and action.error else None, - error_type=( - type(action.error).__name__ - if hasattr(action, "error") and action.error - else None - ), - error_message=( - str(action.error) - if hasattr(action, "error") and action.error - else None - ), + # TODO: There is no error field in ExecutedAction. The fields below are defined on BaseSpan but + # will never be set if using an ActivatedRail object to populate an ActivatedRail object. + error=None, + error_type=None, + error_message=None, ) spans.append(action_span) diff --git a/nemoguardrails/tracing/tracer.py b/nemoguardrails/tracing/tracer.py index b00c822cf..5a431e9c2 100644 --- a/nemoguardrails/tracing/tracer.py +++ b/nemoguardrails/tracing/tracer.py @@ -66,6 +66,10 @@ def generate_interaction_log( if generation_log is None: generation_log = self._generation_log + # At this point generation_log should not be None since it comes from self._generation_log + if generation_log is None: + raise Exception("Can't generate interaction log without Generation log") + interaction_log = extract_interaction_log( interaction_output, generation_log, From ee57c9c70d7646852795fdc59b985a582869250a Mon Sep 17 00:00:00 2001 From: tgasser-nv <200644301+tgasser-nv@users.noreply.github.com> Date: Tue, 14 Oct 2025 16:00:21 -0500 Subject: [PATCH 2/2] Add nemoguardrails/tracing to pyright pre-commit list --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 7fe3852d8..343c2deaa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -157,6 +157,7 @@ pyright = "^1.1.405" include = [ "nemoguardrails/rails/**", "nemoguardrails/actions/**", + "nemoguardrails/tracing/**", "tests/test_callbacks.py", ]