mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-10 16:48:30 +00:00
fix: Add error handling and consolidate tool assignment logic
Co-Authored-By: Joe Moura <joao@crewai.com>
This commit is contained in:
@@ -137,7 +137,16 @@ class Agent(BaseAgent):
|
||||
|
||||
# If this is a manager agent, ensure it only has delegation tools
|
||||
if self.role == "Manager" and self.allow_delegation and self.crew:
|
||||
self.tools = self.get_delegation_tools(self.crew.agents)
|
||||
try:
|
||||
self.tools = self.get_delegation_tools(self.crew.agents)
|
||||
self._logger.log(
|
||||
"info",
|
||||
f"Manager agent has delegation tools: {[tool.name for tool in self.tools]}",
|
||||
color="blue",
|
||||
)
|
||||
except Exception as e:
|
||||
self._logger.log("error", f"Failed to set delegation tools: {str(e)}", color="red")
|
||||
raise ValueError(f"Failed to set delegation tools: {str(e)}")
|
||||
|
||||
return self
|
||||
|
||||
|
||||
@@ -694,14 +694,18 @@ class Crew(BaseModel):
|
||||
if self.manager_agent is not None:
|
||||
manager = self.manager_agent
|
||||
manager.allow_delegation = True
|
||||
# Only use delegation tools for manager agent
|
||||
delegation_tools = AgentTools(agents=self.agents).tools()
|
||||
manager.tools = delegation_tools
|
||||
self._logger.log(
|
||||
"info",
|
||||
f"Manager agent has delegation tools: {[tool.name for tool in manager.tools]}",
|
||||
color="blue",
|
||||
)
|
||||
manager.crew = self
|
||||
try:
|
||||
delegation_tools = AgentTools(agents=self.agents).tools()
|
||||
manager.tools = delegation_tools
|
||||
self._logger.log(
|
||||
"info",
|
||||
f"Manager agent has delegation tools: {[tool.name for tool in manager.tools]}",
|
||||
color="blue",
|
||||
)
|
||||
except Exception as e:
|
||||
self._logger.log("error", f"Failed to set manager tools: {str(e)}", color="red")
|
||||
raise ValueError(f"Failed to set manager tools: {str(e)}")
|
||||
else:
|
||||
self.manager_llm = create_llm(self.manager_llm)
|
||||
manager = Agent(
|
||||
@@ -714,9 +718,19 @@ class Crew(BaseModel):
|
||||
verbose=self.verbose,
|
||||
)
|
||||
self.manager_agent = manager
|
||||
# Set delegation tools after initialization
|
||||
manager.tools = AgentTools(agents=self.agents).tools()
|
||||
manager.crew = self
|
||||
manager.crew = self
|
||||
try:
|
||||
delegation_tools = AgentTools(agents=self.agents).tools()
|
||||
manager.tools = delegation_tools
|
||||
self._logger.log(
|
||||
"info",
|
||||
f"Manager agent has delegation tools: {[tool.name for tool in manager.tools]}",
|
||||
color="blue",
|
||||
)
|
||||
except Exception as e:
|
||||
self._logger.log("error", f"Failed to set manager tools: {str(e)}", color="red")
|
||||
raise ValueError(f"Failed to set manager tools: {str(e)}")
|
||||
|
||||
|
||||
def _execute_tasks(
|
||||
self,
|
||||
|
||||
@@ -358,6 +358,10 @@ class Task(BaseModel):
|
||||
self.start_time = datetime.datetime.now()
|
||||
self._execution_span = self._telemetry.task_started(crew=agent.crew, task=self)
|
||||
|
||||
# Track delegation if this task is being executed by a different agent
|
||||
if self.agent and agent.role != self.agent.role:
|
||||
self.increment_delegations(agent.role)
|
||||
|
||||
self.prompt_context = context
|
||||
tools = tools or self.tools or []
|
||||
|
||||
|
||||
@@ -6,6 +6,11 @@ from .ask_question_tool import AskQuestionTool
|
||||
from .delegate_work_tool import DelegateWorkTool
|
||||
|
||||
|
||||
# Tool name constants
|
||||
DELEGATE_WORK_TOOL = "Delegate Work"
|
||||
ASK_QUESTION_TOOL = "Ask Question"
|
||||
|
||||
|
||||
class AgentTools:
|
||||
"""Manager class for agent-related tools"""
|
||||
|
||||
@@ -21,14 +26,14 @@ class AgentTools:
|
||||
agents=self.agents,
|
||||
i18n=self.i18n,
|
||||
description=self.i18n.tools("delegate_work").format(coworkers=coworkers), # type: ignore
|
||||
name="Delegate Work"
|
||||
name=DELEGATE_WORK_TOOL # Using constant for consistency
|
||||
)
|
||||
|
||||
ask_tool = AskQuestionTool(
|
||||
agents=self.agents,
|
||||
i18n=self.i18n,
|
||||
description=self.i18n.tools("ask_question").format(coworkers=coworkers), # type: ignore
|
||||
name="Ask Question"
|
||||
name=ASK_QUESTION_TOOL # Using constant for consistency
|
||||
)
|
||||
|
||||
return [delegate_tool, ask_tool]
|
||||
|
||||
Reference in New Issue
Block a user