mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-08 15:48:29 +00:00
feat: load Tool from Agent repository by their own module (#2940)
Previously, we only supported tools from the crewai-tools open-source repository. Now, we're introducing improved support for private tool repositories.
This commit is contained in:
@@ -486,7 +486,7 @@ def load_agent_from_repository(from_repository: str) -> Dict[str, Any]:
|
|||||||
attributes[key] = []
|
attributes[key] = []
|
||||||
for tool in value:
|
for tool in value:
|
||||||
try:
|
try:
|
||||||
module = importlib.import_module("crewai_tools")
|
module = importlib.import_module(tool["module"])
|
||||||
tool_class = getattr(module, tool["name"])
|
tool_class = getattr(module, tool["name"])
|
||||||
attributes[key].append(tool_class())
|
attributes[key].append(tool_class())
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
@@ -2038,7 +2038,7 @@ def mock_get_auth_token():
|
|||||||
|
|
||||||
@patch("crewai.cli.plus_api.PlusAPI.get_agent")
|
@patch("crewai.cli.plus_api.PlusAPI.get_agent")
|
||||||
def test_agent_from_repository(mock_get_agent, mock_get_auth_token):
|
def test_agent_from_repository(mock_get_agent, mock_get_auth_token):
|
||||||
from crewai_tools import SerperDevTool
|
from crewai_tools import SerperDevTool, XMLSearchTool
|
||||||
|
|
||||||
mock_get_response = MagicMock()
|
mock_get_response = MagicMock()
|
||||||
mock_get_response.status_code = 200
|
mock_get_response.status_code = 200
|
||||||
@@ -2046,7 +2046,10 @@ def test_agent_from_repository(mock_get_agent, mock_get_auth_token):
|
|||||||
"role": "test role",
|
"role": "test role",
|
||||||
"goal": "test goal",
|
"goal": "test goal",
|
||||||
"backstory": "test backstory",
|
"backstory": "test backstory",
|
||||||
"tools": [{"name": "SerperDevTool"}],
|
"tools": [
|
||||||
|
{"module": "crewai_tools", "name": "SerperDevTool"},
|
||||||
|
{"module": "crewai_tools", "name": "XMLSearchTool"},
|
||||||
|
],
|
||||||
}
|
}
|
||||||
mock_get_agent.return_value = mock_get_response
|
mock_get_agent.return_value = mock_get_response
|
||||||
agent = Agent(from_repository="test_agent")
|
agent = Agent(from_repository="test_agent")
|
||||||
@@ -2054,8 +2057,9 @@ def test_agent_from_repository(mock_get_agent, mock_get_auth_token):
|
|||||||
assert agent.role == "test role"
|
assert agent.role == "test role"
|
||||||
assert agent.goal == "test goal"
|
assert agent.goal == "test goal"
|
||||||
assert agent.backstory == "test backstory"
|
assert agent.backstory == "test backstory"
|
||||||
assert len(agent.tools) == 1
|
assert len(agent.tools) == 2
|
||||||
assert isinstance(agent.tools[0], SerperDevTool)
|
assert isinstance(agent.tools[0], SerperDevTool)
|
||||||
|
assert isinstance(agent.tools[1], XMLSearchTool)
|
||||||
|
|
||||||
|
|
||||||
@patch("crewai.cli.plus_api.PlusAPI.get_agent")
|
@patch("crewai.cli.plus_api.PlusAPI.get_agent")
|
||||||
@@ -2068,7 +2072,7 @@ def test_agent_from_repository_override_attributes(mock_get_agent, mock_get_auth
|
|||||||
"role": "test role",
|
"role": "test role",
|
||||||
"goal": "test goal",
|
"goal": "test goal",
|
||||||
"backstory": "test backstory",
|
"backstory": "test backstory",
|
||||||
"tools": [{"name": "SerperDevTool"}],
|
"tools": [{"name": "SerperDevTool", "module": "crewai_tools"}],
|
||||||
}
|
}
|
||||||
mock_get_agent.return_value = mock_get_response
|
mock_get_agent.return_value = mock_get_response
|
||||||
agent = Agent(from_repository="test_agent", role="Custom Role")
|
agent = Agent(from_repository="test_agent", role="Custom Role")
|
||||||
@@ -2088,7 +2092,7 @@ def test_agent_from_repository_with_invalid_tools(mock_get_agent, mock_get_auth_
|
|||||||
"role": "test role",
|
"role": "test role",
|
||||||
"goal": "test goal",
|
"goal": "test goal",
|
||||||
"backstory": "test backstory",
|
"backstory": "test backstory",
|
||||||
"tools": [{"name": "DoesNotExist"}],
|
"tools": [{"name": "DoesNotExist", "module": "crewai_tools",}],
|
||||||
}
|
}
|
||||||
mock_get_agent.return_value = mock_get_response
|
mock_get_agent.return_value = mock_get_response
|
||||||
with pytest.raises(
|
with pytest.raises(
|
||||||
|
|||||||
Reference in New Issue
Block a user