From 463ea2b97f26ec65c7cd473123af66aef6e1c537 Mon Sep 17 00:00:00 2001 From: Vidit Ostwal <110953813+Vidit-Ostwal@users.noreply.github.com> Date: Fri, 20 Jun 2025 00:07:46 +0530 Subject: [PATCH] Fixed type annotation in task (#3021) * Added Union of List of Task, None, NotSpecified * Seems like a flaky test * Fixed run time issue * Fixed Linting issues * fix pydantic error * aesthetic changes --------- Co-authored-by: Lucas Gomide --- src/crewai/task.py | 9 ++++++--- src/crewai/utilities/formatter.py | 6 +++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/crewai/task.py b/src/crewai/task.py index a320a6896..010629490 100644 --- a/src/crewai/task.py +++ b/src/crewai/task.py @@ -39,7 +39,7 @@ from crewai.tasks.output_format import OutputFormat from crewai.tasks.task_output import TaskOutput from crewai.tools.base_tool import BaseTool from crewai.utilities.config import process_config -from crewai.utilities.constants import NOT_SPECIFIED +from crewai.utilities.constants import NOT_SPECIFIED, _NotSpecified from crewai.utilities.guardrail import process_guardrail, GuardrailResult from crewai.utilities.converter import Converter, convert_to_model from crewai.utilities.events import ( @@ -95,9 +95,9 @@ class Task(BaseModel): agent: Optional[BaseAgent] = Field( description="Agent responsible for execution the task.", default=None ) - context: Optional[List["Task"]] = Field( + context: Union[List["Task"], None, _NotSpecified] = Field( description="Other tasks that will have their output used as context for this task.", - default=NOT_SPECIFIED, + default=NOT_SPECIFIED ) async_execution: Optional[bool] = Field( description="Whether the task should be executed asynchronously or not.", @@ -158,6 +158,9 @@ class Task(BaseModel): end_time: Optional[datetime.datetime] = Field( default=None, description="End time of the task execution" ) + model_config = { + "arbitrary_types_allowed": True + } @field_validator("guardrail") @classmethod diff --git a/src/crewai/utilities/formatter.py b/src/crewai/utilities/formatter.py index fd2611472..f57a7f884 100644 --- a/src/crewai/utilities/formatter.py +++ b/src/crewai/utilities/formatter.py @@ -1,5 +1,5 @@ -from typing import TYPE_CHECKING, List - +from typing import TYPE_CHECKING, List, Union +from crewai.utilities.constants import _NotSpecified if TYPE_CHECKING: from crewai.task import Task @@ -15,7 +15,7 @@ def aggregate_raw_outputs_from_task_outputs(task_outputs: List["TaskOutput"]) -> return context -def aggregate_raw_outputs_from_tasks(tasks: List["Task"]) -> str: +def aggregate_raw_outputs_from_tasks(tasks: Union[List["Task"],_NotSpecified]) -> str: """Generate string context from the tasks.""" task_outputs = (