mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-10 00:28:31 +00:00
feat: improve logging when Agent repository is not found during fetch
This commit is contained in:
@@ -20,7 +20,10 @@ from crewai.utilities.errors import AgentRepositoryError
|
|||||||
from crewai.utilities.exceptions.context_window_exceeding_exception import (
|
from crewai.utilities.exceptions.context_window_exceeding_exception import (
|
||||||
LLMContextLengthExceededException,
|
LLMContextLengthExceededException,
|
||||||
)
|
)
|
||||||
|
from rich.console import Console
|
||||||
|
from crewai.cli.config import Settings
|
||||||
|
|
||||||
|
console = Console()
|
||||||
|
|
||||||
def parse_tools(tools: List[BaseTool]) -> List[CrewStructuredTool]:
|
def parse_tools(tools: List[BaseTool]) -> List[CrewStructuredTool]:
|
||||||
"""Parse tools to be used for the task."""
|
"""Parse tools to be used for the task."""
|
||||||
@@ -435,6 +438,13 @@ def show_agent_logs(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def _print_current_organization():
|
||||||
|
settings = Settings()
|
||||||
|
if settings.org_uuid:
|
||||||
|
console.print(f"Fetching agent from organization: {settings.org_name} ({settings.org_uuid})", style="bold blue")
|
||||||
|
else:
|
||||||
|
console.print("No organization currently set. We recommend setting one before using: `crewai org switch <org_id>` command.", style="yellow")
|
||||||
|
|
||||||
def load_agent_from_repository(from_repository: str) -> Dict[str, Any]:
|
def load_agent_from_repository(from_repository: str) -> Dict[str, Any]:
|
||||||
attributes: Dict[str, Any] = {}
|
attributes: Dict[str, Any] = {}
|
||||||
if from_repository:
|
if from_repository:
|
||||||
@@ -444,15 +454,18 @@ def load_agent_from_repository(from_repository: str) -> Dict[str, Any]:
|
|||||||
from crewai.cli.plus_api import PlusAPI
|
from crewai.cli.plus_api import PlusAPI
|
||||||
|
|
||||||
client = PlusAPI(api_key=get_auth_token())
|
client = PlusAPI(api_key=get_auth_token())
|
||||||
|
_print_current_organization()
|
||||||
response = client.get_agent(from_repository)
|
response = client.get_agent(from_repository)
|
||||||
if response.status_code == 404:
|
if response.status_code == 404:
|
||||||
raise AgentRepositoryError(
|
raise AgentRepositoryError(
|
||||||
f"Agent {from_repository} does not exist, make sure the name is correct or the agent is available on your organization"
|
f"Agent {from_repository} does not exist, make sure the name is correct or the agent is available on your organization."
|
||||||
|
f"\nIf you are using the wrong organization, switch to the correct one using `crewai org switch <org_id>` command.",
|
||||||
)
|
)
|
||||||
|
|
||||||
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}"
|
||||||
|
f"\nIf you are using the wrong organization, switch to the correct one using `crewai org switch <org_id>` command.",
|
||||||
)
|
)
|
||||||
|
|
||||||
agent = response.json()
|
agent = response.json()
|
||||||
|
|||||||
@@ -2126,3 +2126,60 @@ def test_agent_from_repository_agent_not_found(mock_get_agent, mock_get_auth_tok
|
|||||||
match="Agent test_agent does not exist, make sure the name is correct or the agent is available on your organization",
|
match="Agent test_agent does not exist, make sure the name is correct or the agent is available on your organization",
|
||||||
):
|
):
|
||||||
Agent(from_repository="test_agent")
|
Agent(from_repository="test_agent")
|
||||||
|
|
||||||
|
|
||||||
|
@patch("crewai.cli.plus_api.PlusAPI.get_agent")
|
||||||
|
@patch("crewai.utilities.agent_utils.Settings")
|
||||||
|
@patch("crewai.utilities.agent_utils.console")
|
||||||
|
def test_agent_from_repository_displays_org_info(mock_console, mock_settings, mock_get_agent):
|
||||||
|
mock_settings_instance = MagicMock()
|
||||||
|
mock_settings_instance.org_uuid = "test-org-uuid"
|
||||||
|
mock_settings_instance.org_name = "Test Organization"
|
||||||
|
mock_settings.return_value = mock_settings_instance
|
||||||
|
|
||||||
|
mock_get_response = MagicMock()
|
||||||
|
mock_get_response.status_code = 200
|
||||||
|
mock_get_response.json.return_value = {
|
||||||
|
"role": "test role",
|
||||||
|
"goal": "test goal",
|
||||||
|
"backstory": "test backstory",
|
||||||
|
"tools": []
|
||||||
|
}
|
||||||
|
mock_get_agent.return_value = mock_get_response
|
||||||
|
|
||||||
|
agent = Agent(from_repository="test_agent")
|
||||||
|
|
||||||
|
mock_console.print.assert_any_call(
|
||||||
|
f"Fetching agent from organization: Test Organization (test-org-uuid)",
|
||||||
|
style="bold blue"
|
||||||
|
)
|
||||||
|
|
||||||
|
assert agent.role == "test role"
|
||||||
|
assert agent.goal == "test goal"
|
||||||
|
assert agent.backstory == "test backstory"
|
||||||
|
|
||||||
|
|
||||||
|
@patch("crewai.cli.plus_api.PlusAPI.get_agent")
|
||||||
|
@patch("crewai.utilities.agent_utils.Settings")
|
||||||
|
@patch("crewai.utilities.agent_utils.console")
|
||||||
|
def test_agent_from_repository_without_org_set(mock_console, mock_settings, mock_get_agent):
|
||||||
|
mock_settings_instance = MagicMock()
|
||||||
|
mock_settings_instance.org_uuid = None
|
||||||
|
mock_settings_instance.org_name = None
|
||||||
|
mock_settings.return_value = mock_settings_instance
|
||||||
|
|
||||||
|
mock_get_response = MagicMock()
|
||||||
|
mock_get_response.status_code = 401
|
||||||
|
mock_get_response.text = "Unauthorized access"
|
||||||
|
mock_get_agent.return_value = mock_get_response
|
||||||
|
|
||||||
|
with pytest.raises(
|
||||||
|
AgentRepositoryError,
|
||||||
|
match="Agent test_agent could not be loaded: Unauthorized access"
|
||||||
|
):
|
||||||
|
Agent(from_repository="test_agent")
|
||||||
|
|
||||||
|
mock_console.print.assert_any_call(
|
||||||
|
"No organization currently set. We recommend setting one before using: `crewai org switch <org_id>` command.",
|
||||||
|
style="yellow"
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user