Spaces:
Running
Running
| from langflow.base.agents.crewai.tasks import SequentialTask | |
| from langflow.custom import Component | |
| from langflow.io import BoolInput, HandleInput, MultilineInput, Output | |
| class SequentialTaskComponent(Component): | |
| display_name: str = "Sequential Task" | |
| description: str = "Each task must have a description, an expected output and an agent responsible for execution." | |
| icon = "CrewAI" | |
| inputs = [ | |
| MultilineInput( | |
| name="task_description", | |
| display_name="Description", | |
| info="Descriptive text detailing task's purpose and execution.", | |
| ), | |
| MultilineInput( | |
| name="expected_output", | |
| display_name="Expected Output", | |
| info="Clear definition of expected task outcome.", | |
| ), | |
| HandleInput( | |
| name="tools", | |
| display_name="Tools", | |
| input_types=["Tool"], | |
| is_list=True, | |
| info="List of tools/resources limited for task execution. Uses the Agent tools by default.", | |
| required=False, | |
| advanced=True, | |
| ), | |
| HandleInput( | |
| name="agent", | |
| display_name="Agent", | |
| input_types=["Agent"], | |
| info="CrewAI Agent that will perform the task", | |
| required=True, | |
| ), | |
| HandleInput( | |
| name="task", | |
| display_name="Task", | |
| input_types=["SequentialTask"], | |
| info="CrewAI Task that will perform the task", | |
| ), | |
| BoolInput( | |
| name="async_execution", | |
| display_name="Async Execution", | |
| value=True, | |
| advanced=True, | |
| info="Boolean flag indicating asynchronous task execution.", | |
| ), | |
| ] | |
| outputs = [ | |
| Output(display_name="Task", name="task_output", method="build_task"), | |
| ] | |
| def build_task(self) -> list[SequentialTask]: | |
| tasks: list[SequentialTask] = [] | |
| task = SequentialTask( | |
| description=self.task_description, | |
| expected_output=self.expected_output, | |
| tools=self.agent.tools, | |
| async_execution=False, | |
| agent=self.agent, | |
| ) | |
| tasks.append(task) | |
| self.status = task | |
| if self.task: | |
| if isinstance(self.task, list) and all(isinstance(task, SequentialTask) for task in self.task): | |
| tasks = self.task + tasks | |
| elif isinstance(self.task, SequentialTask): | |
| tasks = [self.task, *tasks] | |
| return tasks | |