Skip to content

Commit

Permalink
Merge pull request #951 from crewAIInc/test-hierarchical-tools-proper…
Browse files Browse the repository at this point in the history
…-setup

Test hierarchical tools proper setup
  • Loading branch information
lorenzejay authored Jul 17, 2024
2 parents dfacc88 + c9920b9 commit 5b442e4
Show file tree
Hide file tree
Showing 4 changed files with 19,314 additions and 12 deletions.
30 changes: 19 additions & 11 deletions src/crewai/crew.py
Original file line number Diff line number Diff line change
Expand Up @@ -635,16 +635,14 @@ def _execute_tasks(
last_sync_output = task.output
continue

self._prepare_task(task, manager)
if self.process == Process.hierarchical:
agent_to_use = manager
else:
agent_to_use = task.agent
agent_to_use = self._get_agent_to_use(task, manager)
if agent_to_use is None:
raise ValueError(
f"No agent available for task: {task.description}. Ensure that either the task has an assigned agent or a manager agent is provided."
)
self._log_task_start(task, agent_to_use)

self._prepare_agent_tools(task, manager)
self._log_task_start(task, agent_to_use.role)

if isinstance(task, ConditionalTask):
skipped_task_output = self._handle_conditional_task(
Expand Down Expand Up @@ -711,12 +709,22 @@ def _handle_conditional_task(
return skipped_task_output
return None

def _prepare_task(self, task: Task, manager: Optional[BaseAgent]):
def _prepare_agent_tools(self, task: Task, manager: Optional[BaseAgent]):
if self.process == Process.hierarchical:
self._update_manager_tools(task, manager)
if manager:
self._update_manager_tools(task, manager)
else:
raise ValueError("Manager agent is required for hierarchical process.")
elif task.agent and task.agent.allow_delegation:
self._add_delegation_tools(task)

def _get_agent_to_use(
self, task: Task, manager: Optional[BaseAgent]
) -> Optional[BaseAgent]:
if self.process == Process.hierarchical:
return manager
return task.agent

def _add_delegation_tools(self, task: Task):
agents_for_delegation = [agent for agent in self.agents if agent != task.agent]
if len(self.agents) > 1 and len(agents_for_delegation) > 0 and task.agent:
Expand Down Expand Up @@ -750,10 +758,10 @@ def _log_task_start(self, task: Task, role: str = "None"):
if self.output_log_file:
self._file_handler.log(agent=role, task=task.description, status="started")

def _update_manager_tools(self, task: Task, manager: Optional[BaseAgent]):
if task.agent and manager:
def _update_manager_tools(self, task: Task, manager: BaseAgent):
if task.agent:
manager.tools = task.agent.get_delegation_tools([task.agent])
if manager:
else:
manager.tools = manager.get_delegation_tools(self.agents)

def _get_context(self, task: Task, task_outputs: List[TaskOutput]):
Expand Down
Loading

0 comments on commit 5b442e4

Please sign in to comment.