mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-10 08:38:30 +00:00
Enhance Agent repository feedback & fix Tool auto-import (#2829)
Some checks failed
Notify Downstream / notify-downstream (push) Has been cancelled
Some checks failed
Notify Downstream / notify-downstream (push) Has been cancelled
* fix: fix tool auto-import from agent repository * feat: enhance error message when agent is not found
This commit is contained in:
@@ -441,6 +441,11 @@ def load_agent_from_repository(from_repository: str) -> Dict[str, Any]:
|
|||||||
|
|
||||||
client = PlusAPI(api_key=get_auth_token())
|
client = PlusAPI(api_key=get_auth_token())
|
||||||
response = client.get_agent(from_repository)
|
response = client.get_agent(from_repository)
|
||||||
|
if response.status_code == 404:
|
||||||
|
raise AgentRepositoryError(
|
||||||
|
f"Agent {from_repository} does not exist, make sure the name is correct or the agent is available on your organization"
|
||||||
|
)
|
||||||
|
|
||||||
if response.status_code != 200:
|
if response.status_code != 200:
|
||||||
raise AgentRepositoryError(
|
raise AgentRepositoryError(
|
||||||
f"Agent {from_repository} could not be loaded: {response.text}"
|
f"Agent {from_repository} could not be loaded: {response.text}"
|
||||||
@@ -450,14 +455,14 @@ def load_agent_from_repository(from_repository: str) -> Dict[str, Any]:
|
|||||||
for key, value in agent.items():
|
for key, value in agent.items():
|
||||||
if key == "tools":
|
if key == "tools":
|
||||||
attributes[key] = []
|
attributes[key] = []
|
||||||
for tool_name in value:
|
for tool in value:
|
||||||
try:
|
try:
|
||||||
module = importlib.import_module("crewai_tools")
|
module = importlib.import_module("crewai_tools")
|
||||||
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:
|
||||||
raise AgentRepositoryError(
|
raise AgentRepositoryError(
|
||||||
f"Tool {tool_name} could not be loaded: {e}"
|
f"Tool {tool['name']} could not be loaded: {e}"
|
||||||
) from e
|
) from e
|
||||||
else:
|
else:
|
||||||
attributes[key] = value
|
attributes[key] = value
|
||||||
|
|||||||
@@ -2044,7 +2044,7 @@ 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": ["SerperDevTool"],
|
"tools": [{"name": "SerperDevTool"}],
|
||||||
}
|
}
|
||||||
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")
|
||||||
@@ -2066,7 +2066,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": ["SerperDevTool"],
|
"tools": [{"name": "SerperDevTool"}],
|
||||||
}
|
}
|
||||||
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")
|
||||||
@@ -2086,7 +2086,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": ["DoesNotExist"],
|
"tools": [{"name": "DoesNotExist"}],
|
||||||
}
|
}
|
||||||
mock_get_agent.return_value = mock_get_response
|
mock_get_agent.return_value = mock_get_response
|
||||||
with pytest.raises(
|
with pytest.raises(
|
||||||
@@ -2096,6 +2096,19 @@ def test_agent_from_repository_with_invalid_tools(mock_get_agent, mock_get_auth_
|
|||||||
Agent(from_repository="test_agent")
|
Agent(from_repository="test_agent")
|
||||||
|
|
||||||
|
|
||||||
|
@patch("crewai.cli.plus_api.PlusAPI.get_agent")
|
||||||
|
def test_agent_from_repository_internal_error(mock_get_agent, mock_get_auth_token):
|
||||||
|
mock_get_response = MagicMock()
|
||||||
|
mock_get_response.status_code = 500
|
||||||
|
mock_get_response.text = "Internal server error"
|
||||||
|
mock_get_agent.return_value = mock_get_response
|
||||||
|
with pytest.raises(
|
||||||
|
AgentRepositoryError,
|
||||||
|
match="Agent test_agent could not be loaded: Internal server error",
|
||||||
|
):
|
||||||
|
Agent(from_repository="test_agent")
|
||||||
|
|
||||||
|
|
||||||
@patch("crewai.cli.plus_api.PlusAPI.get_agent")
|
@patch("crewai.cli.plus_api.PlusAPI.get_agent")
|
||||||
def test_agent_from_repository_agent_not_found(mock_get_agent, mock_get_auth_token):
|
def test_agent_from_repository_agent_not_found(mock_get_agent, mock_get_auth_token):
|
||||||
mock_get_response = MagicMock()
|
mock_get_response = MagicMock()
|
||||||
@@ -2104,6 +2117,6 @@ def test_agent_from_repository_agent_not_found(mock_get_agent, mock_get_auth_tok
|
|||||||
mock_get_agent.return_value = mock_get_response
|
mock_get_agent.return_value = mock_get_response
|
||||||
with pytest.raises(
|
with pytest.raises(
|
||||||
AgentRepositoryError,
|
AgentRepositoryError,
|
||||||
match="Agent NOT_FOUND could not be loaded: Agent not found",
|
match="Agent test_agent does not exist, make sure the name is correct or the agent is available on your organization",
|
||||||
):
|
):
|
||||||
Agent(from_repository="NOT_FOUND")
|
Agent(from_repository="test_agent")
|
||||||
|
|||||||
Reference in New Issue
Block a user