From a5cc6f6d0e38507ee05a5ee0eb0c6d99a5c009a1 Mon Sep 17 00:00:00 2001 From: Lorenze Jay <63378463+lorenzejay@users.noreply.github.com> Date: Mon, 15 Jun 2026 09:34:01 -0700 Subject: [PATCH] Add crewai_version to flow execution telemetry (#6167) --- lib/crewai/src/crewai/telemetry/telemetry.py | 5 ++++ lib/crewai/tests/telemetry/test_telemetry.py | 28 +++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) 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",