diff --git a/lib/crewai/src/crewai/telemetry/telemetry.py b/lib/crewai/src/crewai/telemetry/telemetry.py index df9fb26b8..c6c0060d1 100644 --- a/lib/crewai/src/crewai/telemetry/telemetry.py +++ b/lib/crewai/src/crewai/telemetry/telemetry.py @@ -982,6 +982,11 @@ class Telemetry: def _operation() -> None: tracer = trace.get_tracer("crewai.telemetry") span = tracer.start_span("Flow Execution") + self._add_attribute( + span, + "crewai_version", + version("crewai"), + ) self._add_attribute(span, "flow_name", flow_name) self._add_attribute(span, "node_names", json.dumps(node_names)) close_span(span) diff --git a/lib/crewai/tests/telemetry/test_telemetry.py b/lib/crewai/tests/telemetry/test_telemetry.py index a37bac6c7..3bb05b8bd 100644 --- a/lib/crewai/tests/telemetry/test_telemetry.py +++ b/lib/crewai/tests/telemetry/test_telemetry.py @@ -1,6 +1,6 @@ import os import threading -from unittest.mock import patch +from unittest.mock import Mock, patch import pytest from crewai import Agent, Crew, Task @@ -70,6 +70,32 @@ def test_set_tracer_skips_when_provider_already_configured(): assert telemetry.trace_set is True +def test_flow_execution_span_records_crewai_version(): + tracer = Mock() + span = Mock() + tracer.start_span.return_value = span + + with ( + patch.dict( + os.environ, + { + "CREWAI_DISABLE_TELEMETRY": "false", + "CREWAI_DISABLE_TRACKING": "false", + "OTEL_SDK_DISABLED": "false", + }, + ), + patch("crewai.telemetry.telemetry.TracerProvider"), + patch("crewai.telemetry.telemetry.trace.get_tracer", return_value=tracer), + patch("crewai.telemetry.telemetry.version", return_value="9.9.9"), + ): + telemetry = Telemetry() + telemetry.flow_execution_span("ResearchFlow", ["start", "finish"]) + + tracer.start_span.assert_called_once_with("Flow Execution") + span.set_attribute.assert_any_call("crewai_version", "9.9.9") + span.set_attribute.assert_any_call("flow_name", "ResearchFlow") + + @patch("crewai.telemetry.telemetry.logger.error") @patch( "opentelemetry.exporter.otlp.proto.http.trace_exporter.OTLPSpanExporter.export",