diff --git a/src/crewai/telemetry/STAR_crewai_com_bundle.pem b/src/crewai/telemetry/STAR_crewai_com_bundle.pem deleted file mode 100644 index 3cd131a86..000000000 --- a/src/crewai/telemetry/STAR_crewai_com_bundle.pem +++ /dev/null @@ -1,46 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDqDCCAy6gAwIBAgIRAPNkTmtuAFAjfglGvXvh9R0wCgYIKoZIzj0EAwMwgYgx -CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtKZXJz -ZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMS4wLAYDVQQD -EyVVU0VSVHJ1c3QgRUNDIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTE4MTEw -MjAwMDAwMFoXDTMwMTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAkdCMRswGQYDVQQI -ExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGDAWBgNVBAoT -D1NlY3RpZ28gTGltaXRlZDE3MDUGA1UEAxMuU2VjdGlnbyBFQ0MgRG9tYWluIFZh -bGlkYXRpb24gU2VjdXJlIFNlcnZlciBDQTBZMBMGByqGSM49AgEGCCqGSM49AwEH -A0IABHkYk8qfbZ5sVwAjBTcLXw9YWsTef1Wj6R7W2SUKiKAgSh16TwUwimNJE4xk -IQeV/To14UrOkPAY9z2vaKb71EijggFuMIIBajAfBgNVHSMEGDAWgBQ64QmG1M8Z -wpZ2dEl23OA1xmNjmjAdBgNVHQ4EFgQU9oUKOxGG4QR9DqoLLNLuzGR7e64wDgYD -VR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0lBBYwFAYIKwYB -BQUHAwEGCCsGAQUFBwMCMBsGA1UdIAQUMBIwBgYEVR0gADAIBgZngQwBAgEwUAYD -VR0fBEkwRzBFoEOgQYY/aHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VTRVJUcnVz -dEVDQ0NlcnRpZmljYXRpb25BdXRob3JpdHkuY3JsMHYGCCsGAQUFBwEBBGowaDA/ -BggrBgEFBQcwAoYzaHR0cDovL2NydC51c2VydHJ1c3QuY29tL1VTRVJUcnVzdEVD -Q0FkZFRydXN0Q0EuY3J0MCUGCCsGAQUFBzABhhlodHRwOi8vb2NzcC51c2VydHJ1 -c3QuY29tMAoGCCqGSM49BAMDA2gAMGUCMEvnx3FcsVwJbZpCYF9z6fDWJtS1UVRs -cS0chWBNKPFNpvDKdrdKRe+oAkr2jU+ubgIxAODheSr2XhcA7oz9HmedGdMhlrd9 -4ToKFbZl+/OnFFzqnvOhcjHvClECEQcKmc8fmA== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIID0zCCArugAwIBAgIQVmcdBOpPmUxvEIFHWdJ1lDANBgkqhkiG9w0BAQwFADB7 -MQswCQYDVQQGEwJHQjEbMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYD -VQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UE -AwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTE5MDMxMjAwMDAwMFoXDTI4 -MTIzMTIzNTk1OVowgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5 -MRQwEgYDVQQHEwtKZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBO -ZXR3b3JrMS4wLAYDVQQDEyVVU0VSVHJ1c3QgRUNDIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEGqxUWqn5aCPnetUkb1PGWthL -q8bVttHmc3Gu3ZzWDGH926CJA7gFFOxXzu5dP+Ihs8731Ip54KODfi2X0GHE8Znc -JZFjq38wo7Rw4sehM5zzvy5cU7Ffs30yf4o043l5o4HyMIHvMB8GA1UdIwQYMBaA -FKARCiM+lvEH7OKvKe+CpX/QMKS0MB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1 -xmNjmjAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zARBgNVHSAECjAI -MAYGBFUdIAAwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5j -b20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNAYIKwYBBQUHAQEEKDAmMCQG -CCsGAQUFBzABhhhodHRwOi8vb2NzcC5jb21vZG9jYS5jb20wDQYJKoZIhvcNAQEM -BQADggEBABns652JLCALBIAdGN5CmXKZFjK9Dpx1WywV4ilAbe7/ctvbq5AfjJXy -ij0IckKJUAfiORVsAYfZFhr1wHUrxeZWEQff2Ji8fJ8ZOd+LygBkc7xGEJuTI42+ -FsMuCIKchjN0djsoTI0DQoWz4rIjQtUfenVqGtF8qmchxDM6OW1TyaLtYiKou+JV -bJlsQ2uRl9EMC5MCHdK8aXdJ5htN978UeAOwproLtOGFfy/cQjutdAFI3tZs4RmY -CV4Ks2dH/hzg1cEo70qLRDEmBDeNiXQ2Lu+lIg+DdEmSx/cQwgwp+7e9un/jX9Wf -8qn0dNW44bOwgeThpWOjzOoEeJBuv/c= ------END CERTIFICATE----- diff --git a/src/crewai/telemetry/telemetry.py b/src/crewai/telemetry/telemetry.py index 0f89741c9..c342cd124 100644 --- a/src/crewai/telemetry/telemetry.py +++ b/src/crewai/telemetry/telemetry.py @@ -1,5 +1,3 @@ -import asyncio -import importlib.resources import json import os import platform @@ -41,19 +39,17 @@ class Telemetry: def __init__(self): self.ready = False + self.trace_set = False try: telemetry_endpoint = "https://telemetry.crewai.com:4319" self.resource = Resource( attributes={SERVICE_NAME: "crewAI-telemetry"}, ) self.provider = TracerProvider(resource=self.resource) - cert_file = importlib.resources.files("crewai.telemetry").joinpath( - "STAR_crewai_com_bundle.pem" - ) + processor = BatchSpanProcessor( OTLPSpanExporter( endpoint=f"{telemetry_endpoint}/v1/traces", - certificate_file=cert_file, timeout=30, ) ) @@ -69,13 +65,13 @@ class Telemetry: self.ready = False def set_tracer(self): - if self.ready: - provider = trace.get_tracer_provider() - if provider is None: - try: - trace.set_tracer_provider(self.provider) - except Exception: - self.ready = False + if self.ready and not self.trace_set: + try: + trace.set_tracer_provider(self.provider) + self.trace_set = True + except Exception: + self.ready = False + self.trace_set = False def crew_creation(self, crew): """Records the creation of a crew.""" @@ -92,6 +88,7 @@ class Telemetry: self._add_attribute(span, "crew_id", str(crew.id)) self._add_attribute(span, "crew_process", crew.process) self._add_attribute(span, "crew_language", crew.language) + self._add_attribute(span, "crew_memory", crew.memory) self._add_attribute(span, "crew_number_of_tasks", len(crew.tasks)) self._add_attribute(span, "crew_number_of_agents", len(crew.agents)) self._add_attribute( @@ -102,7 +99,6 @@ class Telemetry: { "id": str(agent.id), "role": agent.role, - "memory_enabled?": agent.memory, "verbose?": agent.verbose, "max_iter": agent.max_iter, "max_rpm": agent.max_rpm, @@ -150,11 +146,17 @@ class Telemetry: try: tracer = trace.get_tracer("crewai.telemetry") span = tracer.start_span("Tool Repeated Usage") + self._add_attribute( + span, + "crewai_version", + pkg_resources.get_distribution("crewai").version, + ) self._add_attribute(span, "tool_name", tool_name) self._add_attribute(span, "attempts", attempts) - self._add_attribute( - span, "llm", json.dumps(self._safe_llm_attributes(llm)) - ) + if llm: + self._add_attribute( + span, "llm", json.dumps(self._safe_llm_attributes(llm)) + ) span.set_status(Status(StatusCode.OK)) span.end() except Exception: @@ -166,11 +168,17 @@ class Telemetry: try: tracer = trace.get_tracer("crewai.telemetry") span = tracer.start_span("Tool Usage") + self._add_attribute( + span, + "crewai_version", + pkg_resources.get_distribution("crewai").version, + ) self._add_attribute(span, "tool_name", tool_name) self._add_attribute(span, "attempts", attempts) - self._add_attribute( - span, "llm", json.dumps(self._safe_llm_attributes(llm)) - ) + if llm: + self._add_attribute( + span, "llm", json.dumps(self._safe_llm_attributes(llm)) + ) span.set_status(Status(StatusCode.OK)) span.end() except Exception: @@ -183,8 +191,14 @@ class Telemetry: tracer = trace.get_tracer("crewai.telemetry") span = tracer.start_span("Tool Usage Error") self._add_attribute( - span, "llm", json.dumps(self._safe_llm_attributes(llm)) + span, + "crewai_version", + pkg_resources.get_distribution("crewai").version, ) + if llm: + self._add_attribute( + span, "llm", json.dumps(self._safe_llm_attributes(llm)) + ) span.set_status(Status(StatusCode.OK)) span.end() except Exception: @@ -198,6 +212,11 @@ class Telemetry: try: tracer = trace.get_tracer("crewai.telemetry") span = tracer.start_span("Crew Execution") + self._add_attribute( + span, + "crewai_version", + pkg_resources.get_distribution("crewai").version, + ) self._add_attribute(span, "crew_id", str(crew.id)) self._add_attribute( span, @@ -209,7 +228,6 @@ class Telemetry: "role": agent.role, "goal": agent.goal, "backstory": agent.backstory, - "memory_enabled?": agent.memory, "verbose?": agent.verbose, "max_iter": agent.max_iter, "max_rpm": agent.max_rpm, @@ -253,6 +271,11 @@ class Telemetry: def end_crew(self, crew, output): if (self.ready) and (crew.share_crew): try: + self._add_attribute( + crew._execution_span, + "crewai_version", + pkg_resources.get_distribution("crewai").version, + ) self._add_attribute(crew._execution_span, "crew_output", output) self._add_attribute( crew._execution_span, @@ -282,6 +305,8 @@ class Telemetry: def _safe_llm_attributes(self, llm): attributes = ["name", "model_name", "base_url", "model", "top_k", "temperature"] - safe_attributes = {k: v for k, v in vars(llm).items() if k in attributes} - safe_attributes["class"] = llm.__class__.__name__ - return safe_attributes + if llm: + safe_attributes = {k: v for k, v in vars(llm).items() if k in attributes} + safe_attributes["class"] = llm.__class__.__name__ + return safe_attributes + return {}