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 | |