Skip to content

Commit

Permalink
adding task callback
Browse files Browse the repository at this point in the history
  • Loading branch information
joaomdmoura committed Jan 31, 2024
1 parent 2010702 commit 8fc0f33
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 7 deletions.
18 changes: 11 additions & 7 deletions src/crewai/task.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,22 @@ class Task(BaseModel):
__hash__ = object.__hash__ # type: ignore
i18n: I18N = I18N()
description: str = Field(description="Description of the actual task.")
agent: Optional[Agent] = Field(
description="Agent responsible for the task.", default=None
callback: Optional[Any] = Field(
description="Callback to be executed after the task is completed.", default=None
)
tools: List[Any] = Field(
default_factory=list,
description="Tools the agent is limited to use for this task.",
agent: Optional[Agent] = Field(
description="Agent responsible for executiong the task.", default=None
)
expected_output: str = Field(
expected_output: Optional[str] = Field(
description="Clear definition of expected output for the task.",
default=None,
)
output: Optional[TaskOutput] = Field(
description="Task output, it's final result.", default=None
description="Task output, it's final result after being executed", default=None
)
tools: List[Any] = Field(
default_factory=list,
description="Tools the agent is limited to use for this task.",
)
id: UUID4 = Field(
default_factory=uuid.uuid4,
Expand Down Expand Up @@ -66,6 +69,7 @@ def execute(self, context: Optional[str] = None) -> str:
)

self.output = TaskOutput(description=self.description, result=result)
self.callback(self.output) if self.callback else None
return result

def _prompt(self) -> str:
Expand Down
28 changes: 28 additions & 0 deletions tests/task_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,3 +75,31 @@ def test_task_prompt_includes_expected_output():
execute.return_value = "ok"
task.execute()
execute.assert_called_once_with(task=task._prompt(), context=None, tools=[])


def test_task_callback():
from unittest.mock import MagicMock

researcher = Agent(
role="Researcher",
goal="Make the best research and analysis on content about AI and AI agents",
backstory="You're an expert researcher, specialized in technology, software engineering, AI and startups. You work as a freelancer and is now working on doing research and analysis for a new customer.",
allow_delegation=False,
)

task_completed = MagicMock(return_value="done")

task = Task(
description="Give me a list of 5 interesting ideas to explore for na article, what makes them unique and interesting.",
expected_output="Bullet point list of 5 interesting ideas.",
agent=researcher,
callback=task_completed,
allow_delegation=False,
)

from unittest.mock import patch

with patch.object(Agent, "execute_task") as execute:
execute.return_value = "ok"
task.execute()
task_completed.assert_called_once_with(task.output)

0 comments on commit 8fc0f33

Please sign in to comment.