mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-03 21:28:29 +00:00
Compare commits
1 Commits
lg-update-
...
devin/1739
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
172157e8d5 |
@@ -15,18 +15,27 @@ class AgentTools:
|
||||
|
||||
def tools(self) -> list[BaseTool]:
|
||||
"""Get all available agent tools"""
|
||||
coworkers = ", ".join([f"{agent.role}" for agent in self.agents])
|
||||
coworkers = []
|
||||
for agent in self.agents:
|
||||
coworker_desc = f"{agent.role} (Goal: {agent.goal})"
|
||||
if agent.backstory:
|
||||
# Truncate backstory to first sentence for brevity
|
||||
first_sentence = agent.backstory.split('.')[0]
|
||||
coworker_desc += f" - {first_sentence}"
|
||||
coworkers.append(coworker_desc)
|
||||
|
||||
coworkers_str = "\n- ".join(coworkers)
|
||||
|
||||
delegate_tool = DelegateWorkTool(
|
||||
agents=self.agents,
|
||||
i18n=self.i18n,
|
||||
description=self.i18n.tools("delegate_work").format(coworkers=coworkers), # type: ignore
|
||||
description=self.i18n.tools("delegate_work").format(coworkers=coworkers_str), # type: ignore
|
||||
)
|
||||
|
||||
ask_tool = AskQuestionTool(
|
||||
agents=self.agents,
|
||||
i18n=self.i18n,
|
||||
description=self.i18n.tools("ask_question").format(coworkers=coworkers), # type: ignore
|
||||
description=self.i18n.tools("ask_question").format(coworkers=coworkers_str), # type: ignore
|
||||
)
|
||||
|
||||
return [delegate_tool, ask_tool]
|
||||
|
||||
@@ -40,8 +40,8 @@
|
||||
"validation_error": "### Previous attempt failed validation: {guardrail_result_error}\n\n\n### Previous result:\n{task_output}\n\n\nTry again, making sure to address the validation error."
|
||||
},
|
||||
"tools": {
|
||||
"delegate_work": "Delegate a specific task to one of the following coworkers: {coworkers}\nThe input to this tool should be the coworker, the task you want them to do, and ALL necessary context to execute the task, they know nothing about the task, so share absolute everything you know, don't reference things but instead explain them.",
|
||||
"ask_question": "Ask a specific question to one of the following coworkers: {coworkers}\nThe input to this tool should be the coworker, the question you have for them, and ALL necessary context to ask the question properly, they know nothing about the question, so share absolute everything you know, don't reference things but instead explain them.",
|
||||
"delegate_work": "Delegate a specific task to one of the following coworkers:\n{coworkers}\nThe input to this tool should be the coworker, the task you want them to do, and ALL necessary context to execute the task, they know nothing about the task, so share absolute everything you know, don't reference things but instead explain them.",
|
||||
"ask_question": "Ask a specific question to one of the following coworkers:\n{coworkers}\nThe input to this tool should be the coworker, the question you have for them, and ALL necessary context to ask the question properly, they know nothing about the question, so share absolute everything you know, don't reference things but instead explain them.",
|
||||
"add_image": {
|
||||
"name": "Add image to content",
|
||||
"description": "See image to understand its content, you can optionally ask a question about the image",
|
||||
|
||||
@@ -351,6 +351,38 @@ def test_manager_llm_requirement_for_hierarchical_process():
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.vcr(filter_headers=["authorization"])
|
||||
def test_hierarchical_crew_with_similar_roles():
|
||||
"""Test that manager can effectively delegate to agents with similar roles using enhanced context."""
|
||||
quick_researcher = Agent(
|
||||
role="Quick Researcher",
|
||||
goal="Find information quickly, prioritizing speed over depth",
|
||||
backstory="Specialist in rapid information gathering and quick insights"
|
||||
)
|
||||
deep_researcher = Agent(
|
||||
role="Deep Researcher",
|
||||
goal="Find detailed and thorough information through comprehensive analysis",
|
||||
backstory="Expert in comprehensive research and in-depth investigation"
|
||||
)
|
||||
|
||||
task = Task(
|
||||
description="Research the impact of AI on healthcare. Quick researcher should focus on recent developments, while deep researcher should analyze long-term implications.",
|
||||
expected_output="A comprehensive analysis combining quick insights and deep research."
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=[quick_researcher, deep_researcher],
|
||||
tasks=[task],
|
||||
process=Process.hierarchical,
|
||||
manager_llm="gpt-4"
|
||||
)
|
||||
|
||||
result = crew.kickoff()
|
||||
assert result # Verify crew execution completes
|
||||
assert isinstance(result, CrewOutput) # Verify output type
|
||||
assert len(result.tasks_output) == 1 # Verify task was completed
|
||||
|
||||
|
||||
@pytest.mark.vcr(filter_headers=["authorization"])
|
||||
def test_manager_agent_delegating_to_assigned_task_agent():
|
||||
"""
|
||||
@@ -392,12 +424,12 @@ def test_manager_agent_delegating_to_assigned_task_agent():
|
||||
# Verify the delegation tools were passed correctly
|
||||
assert len(tools) == 2
|
||||
assert any(
|
||||
"Delegate a specific task to one of the following coworkers: Researcher"
|
||||
"Researcher (Goal: Make the best research and analysis on content about AI and AI agents)"
|
||||
in tool.description
|
||||
for tool in tools
|
||||
)
|
||||
assert any(
|
||||
"Ask a specific question to one of the following coworkers: Researcher"
|
||||
"Researcher (Goal: Make the best research and analysis on content about AI and AI agents)"
|
||||
in tool.description
|
||||
for tool in tools
|
||||
)
|
||||
@@ -426,13 +458,15 @@ def test_manager_agent_delegating_to_all_agents():
|
||||
assert crew.manager_agent.tools is not None
|
||||
|
||||
assert len(crew.manager_agent.tools) == 2
|
||||
assert (
|
||||
"Delegate a specific task to one of the following coworkers: Researcher, Senior Writer\n"
|
||||
in crew.manager_agent.tools[0].description
|
||||
assert any(
|
||||
"Researcher (Goal: Make the best research and analysis on content about AI and AI agents)"
|
||||
in tool.description
|
||||
for tool in crew.manager_agent.tools
|
||||
)
|
||||
assert (
|
||||
"Ask a specific question to one of the following coworkers: Researcher, Senior Writer\n"
|
||||
in crew.manager_agent.tools[1].description
|
||||
assert any(
|
||||
"Senior Writer (Goal: Write the best content about AI and AI agents.)"
|
||||
in tool.description
|
||||
for tool in crew.manager_agent.tools
|
||||
)
|
||||
|
||||
|
||||
@@ -1731,13 +1765,11 @@ def test_hierarchical_crew_creation_tasks_with_agents():
|
||||
# Verify the delegation tools were passed correctly
|
||||
assert len(tools) == 2
|
||||
assert any(
|
||||
"Delegate a specific task to one of the following coworkers: Senior Writer"
|
||||
in tool.description
|
||||
"Senior Writer (Goal: Write the best content about AI and AI agents.)" in tool.description
|
||||
for tool in tools
|
||||
)
|
||||
assert any(
|
||||
"Ask a specific question to one of the following coworkers: Senior Writer"
|
||||
in tool.description
|
||||
"Senior Writer (Goal: Write the best content about AI and AI agents.)" in tool.description
|
||||
for tool in tools
|
||||
)
|
||||
|
||||
@@ -1788,13 +1820,15 @@ def test_hierarchical_crew_creation_tasks_with_async_execution():
|
||||
# Verify the delegation tools were passed correctly
|
||||
assert len(tools) == 2
|
||||
assert any(
|
||||
"Delegate a specific task to one of the following coworkers: Senior Writer\n"
|
||||
in tool.description
|
||||
"Senior Writer (Goal: Write the best content about AI and AI agents.)" in tool.description
|
||||
for tool in tools
|
||||
)
|
||||
assert any(
|
||||
"Ask a specific question to one of the following coworkers: Senior Writer\n"
|
||||
in tool.description
|
||||
"Researcher (Goal: Make the best research and analysis on content about AI and AI agents)" in tool.description
|
||||
for tool in tools
|
||||
)
|
||||
assert any(
|
||||
"CEO (Goal: Make sure the writers in your company produce amazing content.)" in tool.description
|
||||
for tool in tools
|
||||
)
|
||||
|
||||
@@ -1827,9 +1861,17 @@ def test_hierarchical_crew_creation_tasks_with_sync_last():
|
||||
crew.kickoff()
|
||||
assert crew.manager_agent is not None
|
||||
assert crew.manager_agent.tools is not None
|
||||
assert (
|
||||
"Delegate a specific task to one of the following coworkers: Senior Writer, Researcher, CEO\n"
|
||||
in crew.manager_agent.tools[0].description
|
||||
assert any(
|
||||
"Senior Writer (Goal: Write the best content about AI and AI agents.)" in tool.description
|
||||
for tool in crew.manager_agent.tools
|
||||
)
|
||||
assert any(
|
||||
"Researcher (Goal: Make the best research and analysis on content about AI and AI agents)" in tool.description
|
||||
for tool in crew.manager_agent.tools
|
||||
)
|
||||
assert any(
|
||||
"CEO (Goal: Make sure the writers in your company produce amazing content.)" in tool.description
|
||||
for tool in crew.manager_agent.tools
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -124,3 +124,36 @@ def test_ask_question_to_wrong_agent():
|
||||
result
|
||||
== "\nError executing tool. coworker mentioned not found, it must be one of the following options:\n- researcher\n"
|
||||
)
|
||||
|
||||
|
||||
def test_delegate_work_with_similar_roles():
|
||||
"""Test that delegation tools show rich context for similar roles."""
|
||||
researcher1 = Agent(
|
||||
role="Quick Researcher",
|
||||
goal="Find information quickly, prioritizing speed",
|
||||
backstory="Specialist in rapid information gathering"
|
||||
)
|
||||
researcher2 = Agent(
|
||||
role="Deep Researcher",
|
||||
goal="Find detailed and thorough information",
|
||||
backstory="Expert in comprehensive research"
|
||||
)
|
||||
tools = AgentTools(agents=[researcher1, researcher2]).tools()
|
||||
delegate_tool = tools[0]
|
||||
ask_tool = tools[1]
|
||||
|
||||
# Verify tool descriptions include goals and backstories
|
||||
assert "Quick Researcher (Goal: Find information quickly" in delegate_tool.description
|
||||
assert "Deep Researcher (Goal: Find detailed" in delegate_tool.description
|
||||
assert "Specialist in rapid information gathering" in delegate_tool.description
|
||||
assert "Expert in comprehensive research" in delegate_tool.description
|
||||
|
||||
# Verify ask tool also has the enhanced descriptions
|
||||
assert "Quick Researcher (Goal: Find information quickly" in ask_tool.description
|
||||
assert "Deep Researcher (Goal: Find detailed" in ask_tool.description
|
||||
assert "Specialist in rapid information gathering" in ask_tool.description
|
||||
assert "Expert in comprehensive research" in ask_tool.description
|
||||
|
||||
# Verify multiline formatting
|
||||
assert "\n- " in delegate_tool.description
|
||||
assert "\n- " in ask_tool.description
|
||||
|
||||
Reference in New Issue
Block a user