Avoiding exceptions

This commit is contained in:
João Moura
2024-10-18 08:32:06 -03:00
parent 7948e62fd5
commit e4f950720c

View File

@@ -65,7 +65,7 @@ class Telemetry:
self.provider.add_span_processor(processor)
self.ready = True
except BaseException as e:
except Exception as e:
if isinstance(
e,
(SystemExit, KeyboardInterrupt, GeneratorExit, asyncio.CancelledError),
@@ -83,10 +83,18 @@ class Telemetry:
self.ready = False
self.trace_set = False
def _safe_telemetry_operation(self, operation):
if not self.ready:
return
try:
operation()
except Exception:
pass
def crew_creation(self, crew: Crew, inputs: dict[str, Any] | None):
"""Records the creation of a crew."""
if self.ready:
try:
def operation():
tracer = trace.get_tracer("crewai.telemetry")
span = tracer.start_span("Crew Created")
self._add_attribute(
@@ -127,8 +135,7 @@ class Telemetry:
"allow_code_execution?": agent.allow_code_execution,
"max_retry_limit": agent.max_retry_limit,
"tools_names": [
tool.name.casefold()
for tool in agent.tools or []
tool.name.casefold() for tool in agent.tools or []
],
}
for agent in crew.agents
@@ -157,8 +164,7 @@ class Telemetry:
else None
),
"tools_names": [
tool.name.casefold()
for tool in task.tools or []
tool.name.casefold() for tool in task.tools or []
],
}
for task in crew.tasks
@@ -196,8 +202,7 @@ class Telemetry:
"allow_code_execution?": agent.allow_code_execution,
"max_retry_limit": agent.max_retry_limit,
"tools_names": [
tool.name.casefold()
for tool in agent.tools or []
tool.name.casefold() for tool in agent.tools or []
],
}
for agent in crew.agents
@@ -219,8 +224,7 @@ class Telemetry:
),
"agent_key": task.agent.key if task.agent else None,
"tools_names": [
tool.name.casefold()
for tool in task.tools or []
tool.name.casefold() for tool in task.tools or []
],
}
for task in crew.tasks
@@ -229,13 +233,13 @@ class Telemetry:
)
span.set_status(Status(StatusCode.OK))
span.end()
except Exception:
pass
self._safe_telemetry_operation(operation)
def task_started(self, crew: Crew, task: Task) -> Span | None:
"""Records task started in a crew."""
if self.ready:
try:
def operation():
tracer = trace.get_tracer("crewai.telemetry")
created_span = tracer.start_span("Task Created")
@@ -270,15 +274,13 @@ class Telemetry:
)
return span
except Exception:
pass
return None
return self._safe_telemetry_operation(operation)
def task_ended(self, span: Span, task: Task, crew: Crew):
"""Records task execution in a crew."""
if self.ready:
try:
def operation():
if crew.share_crew:
self._add_attribute(
span,
@@ -288,13 +290,13 @@ class Telemetry:
span.set_status(Status(StatusCode.OK))
span.end()
except Exception:
pass
self._safe_telemetry_operation(operation)
def tool_repeated_usage(self, llm: Any, tool_name: str, attempts: int):
"""Records the repeated usage 'error' of a tool by an agent."""
if self.ready:
try:
def operation():
tracer = trace.get_tracer("crewai.telemetry")
span = tracer.start_span("Tool Repeated Usage")
self._add_attribute(
@@ -308,13 +310,13 @@ class Telemetry:
self._add_attribute(span, "llm", llm.model)
span.set_status(Status(StatusCode.OK))
span.end()
except Exception:
pass
self._safe_telemetry_operation(operation)
def tool_usage(self, llm: Any, tool_name: str, attempts: int):
"""Records the usage of a tool by an agent."""
if self.ready:
try:
def operation():
tracer = trace.get_tracer("crewai.telemetry")
span = tracer.start_span("Tool Usage")
self._add_attribute(
@@ -328,13 +330,13 @@ class Telemetry:
self._add_attribute(span, "llm", llm.model)
span.set_status(Status(StatusCode.OK))
span.end()
except Exception:
pass
self._safe_telemetry_operation(operation)
def tool_usage_error(self, llm: Any):
"""Records the usage of a tool by an agent."""
if self.ready:
try:
def operation():
tracer = trace.get_tracer("crewai.telemetry")
span = tracer.start_span("Tool Usage Error")
self._add_attribute(
@@ -346,14 +348,13 @@ class Telemetry:
self._add_attribute(span, "llm", llm.model)
span.set_status(Status(StatusCode.OK))
span.end()
except Exception:
pass
self._safe_telemetry_operation(operation)
def individual_test_result_span(
self, crew: Crew, quality: float, exec_time: int, model_name: str
):
if self.ready:
try:
def operation():
tracer = trace.get_tracer("crewai.telemetry")
span = tracer.start_span("Crew Individual Test Result")
@@ -369,8 +370,8 @@ class Telemetry:
self._add_attribute(span, "model_name", model_name)
span.set_status(Status(StatusCode.OK))
span.end()
except Exception:
pass
self._safe_telemetry_operation(operation)
def test_execution_span(
self,
@@ -379,8 +380,7 @@ class Telemetry:
inputs: dict[str, Any] | None,
model_name: str,
):
if self.ready:
try:
def operation():
tracer = trace.get_tracer("crewai.telemetry")
span = tracer.start_span("Crew Test Execution")
@@ -401,44 +401,40 @@ class Telemetry:
span.set_status(Status(StatusCode.OK))
span.end()
except Exception:
pass
self._safe_telemetry_operation(operation)
def deploy_signup_error_span(self):
if self.ready:
try:
def operation():
tracer = trace.get_tracer("crewai.telemetry")
span = tracer.start_span("Deploy Signup Error")
span.set_status(Status(StatusCode.OK))
span.end()
except Exception:
pass
self._safe_telemetry_operation(operation)
def start_deployment_span(self, uuid: Optional[str] = None):
if self.ready:
try:
def operation():
tracer = trace.get_tracer("crewai.telemetry")
span = tracer.start_span("Start Deployment")
if uuid:
self._add_attribute(span, "uuid", uuid)
span.set_status(Status(StatusCode.OK))
span.end()
except Exception:
pass
self._safe_telemetry_operation(operation)
def create_crew_deployment_span(self):
if self.ready:
try:
def operation():
tracer = trace.get_tracer("crewai.telemetry")
span = tracer.start_span("Create Crew Deployment")
span.set_status(Status(StatusCode.OK))
span.end()
except Exception:
pass
self._safe_telemetry_operation(operation)
def get_crew_logs_span(self, uuid: Optional[str], log_type: str = "deployment"):
if self.ready:
try:
def operation():
tracer = trace.get_tracer("crewai.telemetry")
span = tracer.start_span("Get Crew Logs")
self._add_attribute(span, "log_type", log_type)
@@ -446,20 +442,19 @@ class Telemetry:
self._add_attribute(span, "uuid", uuid)
span.set_status(Status(StatusCode.OK))
span.end()
except Exception:
pass
self._safe_telemetry_operation(operation)
def remove_crew_span(self, uuid: Optional[str] = None):
if self.ready:
try:
def operation():
tracer = trace.get_tracer("crewai.telemetry")
span = tracer.start_span("Remove Crew")
if uuid:
self._add_attribute(span, "uuid", uuid)
span.set_status(Status(StatusCode.OK))
span.end()
except Exception:
pass
self._safe_telemetry_operation(operation)
def crew_execution_span(self, crew: Crew, inputs: dict[str, Any] | None):
"""Records the complete execution of a crew.
@@ -467,8 +462,7 @@ class Telemetry:
"""
self.crew_creation(crew, inputs)
if (self.ready) and (crew.share_crew):
try:
def operation():
tracer = trace.get_tracer("crewai.telemetry")
span = tracer.start_span("Crew Execution")
self._add_attribute(
@@ -533,12 +527,13 @@ class Telemetry:
),
)
return span
except Exception:
pass
if crew.share_crew:
return self._safe_telemetry_operation(operation)
return None
def end_crew(self, crew, final_string_output):
if (self.ready) and (crew.share_crew):
try:
def operation():
self._add_attribute(
crew._execution_span,
"crewai_version",
@@ -563,47 +558,46 @@ class Telemetry:
)
crew._execution_span.set_status(Status(StatusCode.OK))
crew._execution_span.end()
except Exception:
pass
if crew.share_crew:
self._safe_telemetry_operation(operation)
def _add_attribute(self, span, key, value):
"""Add an attribute to a span."""
try:
def operation():
return span.set_attribute(key, value)
except Exception:
pass
self._safe_telemetry_operation(operation)
def flow_creation_span(self, flow_name: str):
if self.ready:
try:
def operation():
tracer = trace.get_tracer("crewai.telemetry")
span = tracer.start_span("Flow Creation")
self._add_attribute(span, "flow_name", flow_name)
span.set_status(Status(StatusCode.OK))
span.end()
except Exception:
pass
self._safe_telemetry_operation(operation)
def flow_plotting_span(self, flow_name: str, node_names: list[str]):
if self.ready:
try:
def operation():
tracer = trace.get_tracer("crewai.telemetry")
span = tracer.start_span("Flow Plotting")
self._add_attribute(span, "flow_name", flow_name)
self._add_attribute(span, "node_names", json.dumps(node_names))
span.set_status(Status(StatusCode.OK))
span.end()
except Exception:
pass
self._safe_telemetry_operation(operation)
def flow_execution_span(self, flow_name: str, node_names: list[str]):
if self.ready:
try:
def operation():
tracer = trace.get_tracer("crewai.telemetry")
span = tracer.start_span("Flow Execution")
self._add_attribute(span, "flow_name", flow_name)
self._add_attribute(span, "node_names", json.dumps(node_names))
span.set_status(Status(StatusCode.OK))
span.end()
except Exception:
pass
self._safe_telemetry_operation(operation)