diff --git a/nemoguardrails/actions/llm/generation.py b/nemoguardrails/actions/llm/generation.py index 2a57e1c26..cd11e70a7 100644 --- a/nemoguardrails/actions/llm/generation.py +++ b/nemoguardrails/actions/llm/generation.py @@ -137,7 +137,7 @@ async def init(self): self._init_flows_index(), ) - def _extract_user_message_example(self, flow: Flow): + def _extract_user_message_example(self, flow: Flow) -> None: """Heuristic to extract user message examples from a flow.""" elements = [ item 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,