From b75b0b55520084d61d34810b6077c8a4bbe2f622 Mon Sep 17 00:00:00 2001 From: Gui Vieira Date: Sun, 7 Jul 2024 12:58:24 -0300 Subject: [PATCH] Emit task created (#875) * Emit task created * Limit data to shared crews --- src/crewai/task.py | 27 +++++++++++++-------------- src/crewai/telemetry/telemetry.py | 27 ++++++++++++++++++++++----- 2 files changed, 35 insertions(+), 19 deletions(-) diff --git a/src/crewai/task.py b/src/crewai/task.py index 6d90fcfa6..4071bb703 100644 --- a/src/crewai/task.py +++ b/src/crewai/task.py @@ -13,8 +13,7 @@ from pydantic_core import PydanticCustomError from crewai.agents.agent_builder.base_agent import BaseAgent from crewai.tasks.task_output import TaskOutput from crewai.telemetry.telemetry import Telemetry -from crewai.utilities.converter import ConverterError -from crewai.utilities.converter import Converter +from crewai.utilities.converter import Converter, ConverterError from crewai.utilities.i18n import I18N from crewai.utilities.printer import Printer from crewai.utilities.pydantic_schema_parser import PydanticSchemaParser @@ -186,8 +185,6 @@ class Task(BaseModel): Output of the task. """ - self._execution_span = self._telemetry.task_started(self) - agent = agent or self.agent if not agent: raise Exception( @@ -195,6 +192,8 @@ class Task(BaseModel): "and should be executed in a Crew using a specific process that support that, like hierarchical." ) + self._execution_span = self._telemetry.task_started(crew=agent.crew, task=self) + if self.context: internal_context = [] for task in self.context: @@ -310,15 +309,15 @@ class Task(BaseModel): return copied_task - def _create_converter(self, *args, **kwargs) -> Converter: # type: ignore - converter = self.agent.get_output_converter( # type: ignore # Item "None" of "BaseAgent | None" has no attribute "get_output_converter" - *args, **kwargs - ) - if self.converter_cls: - converter = self.converter_cls( # type: ignore # Item "None" of "BaseAgent | None" has no attribute "get_output_converter" - *args, **kwargs - ) - return converter + def _create_converter(self, *args, **kwargs) -> Converter: # type: ignore + converter = self.agent.get_output_converter( # type: ignore # Item "None" of "BaseAgent | None" has no attribute "get_output_converter" + *args, **kwargs + ) + if self.converter_cls: + converter = self.converter_cls( # type: ignore # Item "None" of "BaseAgent | None" has no attribute "get_output_converter" + *args, **kwargs + ) + return converter def _export_output(self, result: str) -> Any: exported_result = result @@ -350,7 +349,7 @@ class Task(BaseModel): model_schema = PydanticSchemaParser(model=model).get_schema() # type: ignore # Argument "model" to "PydanticSchemaParser" has incompatible type "type[BaseModel] | None"; expected "type[BaseModel]" instructions = f"{instructions}\n\nThe json should have the following structure, with the following keys:\n{model_schema}" - converter = self._create_converter( # type: ignore # Item "None" of "BaseAgent | None" has no attribute "get_output_converter" + converter = self._create_converter( # type: ignore # Item "None" of "BaseAgent | None" has no attribute "get_output_converter" llm=llm, text=result, model=model, instructions=instructions ) diff --git a/src/crewai/telemetry/telemetry.py b/src/crewai/telemetry/telemetry.py index f9bd6bfdb..6bd63e75b 100644 --- a/src/crewai/telemetry/telemetry.py +++ b/src/crewai/telemetry/telemetry.py @@ -156,18 +156,35 @@ class Telemetry: except Exception: pass - def task_started(self, task: Task) -> Span | None: + def task_started(self, crew: Crew, task: Task) -> Span | None: """Records task started in a crew.""" if self.ready: try: tracer = trace.get_tracer("crewai.telemetry") span = tracer.start_span("Task Execution") + created_span = tracer.start_span("Task Created") + + self._add_attribute(created_span, "task_id", str(task.id)) + + if crew.share_crew: + self._add_attribute( + created_span, "formatted_description", task.description + ) + self._add_attribute( + created_span, "formatted_expected_output", task.expected_output + ) + + created_span.set_status(Status(StatusCode.OK)) + created_span.end() + self._add_attribute(span, "task_id", str(task.id)) - self._add_attribute(span, "formatted_description", task.description) - self._add_attribute( - span, "formatted_expected_output", task.expected_output - ) + + if crew.share_crew: + self._add_attribute(span, "formatted_description", task.description) + self._add_attribute( + span, "formatted_expected_output", task.expected_output + ) return span except Exception: