Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
432 changes: 219 additions & 213 deletions poetry.lock

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src/crewai/agents/executor.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ def _create_short_term_memory(self, output) -> None:
if (
self.crew
and self.crew.memory
and "Action: Delegate work to co-worker" not in output.log
and "Action: Delegate work to coworker" not in output.log
):
memory = ShortTermMemoryItem(
data=output.log,
Expand Down
18 changes: 9 additions & 9 deletions src/crewai/tools/agent_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@ def tools(self):
tools = [
StructuredTool.from_function(
func=self.delegate_work,
name="Delegate work to co-worker",
name="Delegate work to coworker",
description=self.i18n.tools("delegate_work").format(
coworkers=f"[{', '.join([f'{agent.role}' for agent in self.agents])}]"
),
),
StructuredTool.from_function(
func=self.ask_question,
name="Ask question to co-worker",
name="Ask question to coworker",
description=self.i18n.tools("ask_question").format(
coworkers=f"[{', '.join([f'{agent.role}' for agent in self.agents])}]"
),
Expand All @@ -34,21 +34,21 @@ def tools(self):
return tools

def delegate_work(
self, task: str, context: str, coworker: Union[str, None] = None, **kwargs
self, task: str, context: Union[str, None] = None, coworker: Union[str, None] = None, **kwargs
):
"""Useful to delegate a specific task to a co-worker passing all necessary context and names."""
coworker = coworker or kwargs.get("co_worker") or kwargs.get("co-worker")
"""Useful to delegate a specific task to a coworker passing all necessary context and names."""
coworker = coworker or kwargs.get("co_worker") or kwargs.get("coworker")
if coworker is not None:
is_list = coworker.startswith("[") and coworker.endswith("]")
if is_list:
coworker = coworker[1:-1].split(",")[0]
return self._execute(coworker, task, context)

def ask_question(
self, question: str, context: str, coworker: Union[str, None] = None, **kwargs
self, question: str, context: Union[str, None] = None, coworker: Union[str, None] = None, **kwargs
):
"""Useful to ask a question, opinion or take from a co-worker passing all necessary context and names."""
coworker = coworker or kwargs.get("co_worker") or kwargs.get("co-worker")
"""Useful to ask a question, opinion or take from a coworker passing all necessary context and names."""
coworker = coworker or kwargs.get("co_worker") or kwargs.get("coworker")
if coworker is not None:
is_list = coworker.startswith("[") and coworker.endswith("]")
if is_list:
Expand Down Expand Up @@ -81,6 +81,6 @@ def _execute(self, agent, task, context):
task = Task(
description=task,
agent=agent,
expected_output="Your best answer to your co-worker asking you this, accounting for the context shared.",
expected_output="Your best answer to your coworker asking you this, accounting for the context shared.",
)
return agent.execute_task(task, context)
4 changes: 2 additions & 2 deletions src/crewai/tools/tool_usage.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,8 @@ def _use(
if not result:
try:
if calling.tool_name in [
"Delegate work to co-worker",
"Ask question to co-worker",
"Delegate work to coworker",
"Ask question to coworker",
]:
self.task.increment_delegations()

Expand Down
6 changes: 3 additions & 3 deletions src/crewai/translations/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,15 @@
},
"errors": {
"force_final_answer": "Tool won't be use because it's time to give your final answer. Don't use tools and just your absolute BEST Final answer.",
"agent_tool_unexsiting_coworker": "\nError executing tool. Co-worker mentioned not found, it must to be one of the following options:\n{coworkers}\n",
"agent_tool_unexsiting_coworker": "\nError executing tool. coworker mentioned not found, it must to be one of the following options:\n{coworkers}\n",
"task_repeated_usage": "I tried reusing the same input, I must stop using this action input. I'll try something else instead.\n\n",
"tool_usage_error": "I encountered an error: {error}",
"tool_arguments_error": "Error: the Action Input is not a valid key, value dictionary.",
"wrong_tool_name": "You tried to use the tool {tool}, but it doesn't exist. You must use one of the following tools, use one at time: {tools}.",
"tool_usage_exception": "I encountered an error while trying to use the tool. This was the error: {error}.\n Tool {tool} accepts these inputs: {tool_inputs}"
},
"tools": {
"delegate_work": "Delegate a specific task to one of the following co-workers: {coworkers}\nThe input to this tool should be the co-worker, 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 co-workers: {coworkers}\nThe input to this tool should be the co-worker, 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: {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."
}
}
2 changes: 1 addition & 1 deletion src/crewai/utilities/logger.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from crewai.utilities.printer import Printer

from datetime import datetime

class Logger:
_printer = Printer()
Expand Down
4 changes: 2 additions & 2 deletions tests/agent_tools/agent_tools_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ def test_delegate_work_to_wrong_agent():

assert (
result
== "\nError executing tool. Co-worker mentioned not found, it must to be one of the following options:\n- researcher\n"
== "\nError executing tool. coworker mentioned not found, it must to be one of the following options:\n- researcher\n"
)


Expand All @@ -118,5 +118,5 @@ def test_ask_question_to_wrong_agent():

assert (
result
== "\nError executing tool. Co-worker mentioned not found, it must to be one of the following options:\n- researcher\n"
== "\nError executing tool. coworker mentioned not found, it must to be one of the following options:\n- researcher\n"
)
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ interactions:
the task.\nYour final answer must be the great and the most complete as possible,
it must be outcome described.\n\nI MUST use these formats, my job depends on
it!\nCurrent Task: do you hate AI Agents?\n\nThis is the expect criteria for
your final answer: Your best answer to your co-worker asking you this, accounting
your final answer: Your best answer to your coworker asking you this, accounting
for the context shared. \n you MUST return the actual complete content as the
final answer, not a summary.\n\nThis is the context you''re working with:\nI
heard you LOVE them\n\nBegin! This is VERY important to you, use the tools available
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -200797,7 +200797,7 @@ interactions:
the task.\nYour final answer must be the great and the most complete as possible,
it must be outcome described.\n\nI MUST use these formats, my job depends on
it!\nCurrent Task: do you hate AI Agents?\n\nThis is the expect criteria for
your final answer: Your best answer to your co-worker asking you this, accounting
your final answer: Your best answer to your coworker asking you this, accounting
for the context shared. \n you MUST return the actual complete content as the
final answer, not a summary.\n\nThis is the context you''re working with:\nI
heard you LOVE them\n\nBegin! This is VERY important to you, use the tools available
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ interactions:
the task.\nYour final answer must be the great and the most complete as possible,
it must be outcome described.\n\nI MUST use these formats, my job depends on
it!\nCurrent Task: share your take on AI Agents\n\nThis is the expect criteria
for your final answer: Your best answer to your co-worker asking you this, accounting
for your final answer: Your best answer to your coworker asking you this, accounting
for the context shared. \n you MUST return the actual complete content as the
final answer, not a summary.\n\nThis is the context you''re working with:\nI
heard you hate them\n\nBegin! This is VERY important to you, use the tools available
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ interactions:
the task.\nYour final answer must be the great and the most complete as possible,
it must be outcome described.\n\nI MUST use these formats, my job depends on
it!\nCurrent Task: share your take on AI Agents\n\nThis is the expect criteria
for your final answer: Your best answer to your co-worker asking you this, accounting
for your final answer: Your best answer to your coworker asking you this, accounting
for the context shared. \n you MUST return the actual complete content as the
final answer, not a summary.\n\nThis is the context you''re working with:\nI
heard you hate them\n\nBegin! This is VERY important to you, use the tools available
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,20 @@ interactions:
allows you to properly evaluate the work of your team members.\nYour personal
goal is: Manage the team to complete the task in the best way possible.\nYou
ONLY have access to the following tools, and should NEVER make up tools that
are not listed here:\n\nDelegate work to co-worker: Delegate work to co-worker(coworker:
are not listed here:\n\nDelegate work to coworker: Delegate work to coworker(coworker:
str, task: str, context: str) - Delegate a specific task to one of the following
co-workers: [Researcher]\nThe input to this tool should be the coworker, the
coworkers: [Researcher]\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.\nAsk question to co-worker: Ask question to
co-worker(coworker: str, question: str, context: str) - Ask a specific question
to one of the following co-workers: [Researcher]\nThe input to this tool should
things but instead explain them.\nAsk question to coworker: Ask question to
coworker(coworker: str, question: str, context: str) - Ask a specific question
to one of the following coworkers: [Researcher]\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.\n\nUse
the following format:\n\nThought: you should always think about what to do\nAction:
the action to take, only one name of [Delegate work to co-worker, Ask question
to co-worker], just the name, exactly as it''s written.\nAction Input: the input
the action to take, only one name of [Delegate work to coworker, Ask question
to coworker], just the name, exactly as it''s written.\nAction Input: the input
to the action, just a simple a python dictionary using \" to wrap keys and values.\nObservation:
the result of the action\n\nOnce all necessary information is gathered:\n\nThought:
I now know the final answer\nFinal Answer: the final answer to the original
Expand Down Expand Up @@ -1027,20 +1027,20 @@ interactions:
allows you to properly evaluate the work of your team members.\nYour personal
goal is: Manage the team to complete the task in the best way possible.\nYou
ONLY have access to the following tools, and should NEVER make up tools that
are not listed here:\n\nDelegate work to co-worker: Delegate work to co-worker(coworker:
are not listed here:\n\nDelegate work to coworker: Delegate work to coworker(coworker:
str, task: str, context: str) - Delegate a specific task to one of the following
co-workers: [Researcher]\nThe input to this tool should be the coworker, the
coworkers: [Researcher]\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.\nAsk question to co-worker: Ask question to
co-worker(coworker: str, question: str, context: str) - Ask a specific question
to one of the following co-workers: [Researcher]\nThe input to this tool should
things but instead explain them.\nAsk question to coworker: Ask question to
coworker(coworker: str, question: str, context: str) - Ask a specific question
to one of the following coworkers: [Researcher]\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.\n\nUse
the following format:\n\nThought: you should always think about what to do\nAction:
the action to take, only one name of [Delegate work to co-worker, Ask question
to co-worker], just the name, exactly as it''s written.\nAction Input: the input
the action to take, only one name of [Delegate work to coworker, Ask question
to coworker], just the name, exactly as it''s written.\nAction Input: the input
to the action, just a simple a python dictionary using \" to wrap keys and values.\nObservation:
the result of the action\n\nOnce all necessary information is gathered:\n\nThought:
I now know the final answer\nFinal Answer: the final answer to the original
Expand All @@ -1051,7 +1051,7 @@ interactions:
job depends on it!\n\nThought: \nI need to delegate the task of saying \"hi\"
to the researcher. I will provide them with the context that this is a simple
greeting task and they should respond with \"Howdy!\".\n\nAction: \nDelegate
work to co-worker\n\nAction Input: \n{\n \"coworker\": \"Researcher\",\n \"task\":
work to coworker\n\nAction Input: \n{\n \"coworker\": \"Researcher\",\n \"task\":
\"Say hi\",\n \"context\": \"This is a simple task where you need to greet
by saying ''Howdy!''. This is a common greeting in certain parts of the world,
particularly in the southern United States. It''s a friendly, informal way to
Expand Down
Loading