Skip to content
Open
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
10 changes: 8 additions & 2 deletions src/google/adk/cli/api_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -742,7 +742,10 @@ async def get_runner_async(self, app_name: str) -> Runner:
return self.runner_dict[app_name]

# Create new runner
agent_or_app = self.agent_loader.load_agent(app_name)
try:
agent_or_app = self.agent_loader.load_agent(app_name)
except ValueError as ve:
raise HTTPException(status_code=404, detail=str(ve)) from ve

if self.default_llm_model:
from .cli import _override_default_llm_model
Expand Down Expand Up @@ -1162,7 +1165,10 @@ async def get_adk_app_info(app_name: str) -> AppInfo:
" mode."
),
)
agent_or_app = self.agent_loader.load_agent(app_name)
try:
agent_or_app = self.agent_loader.load_agent(app_name)
except ValueError as ve:
raise HTTPException(status_code=404, detail=str(ve)) from ve
root_agent = self._get_root_agent(agent_or_app)
if isinstance(root_agent, LlmAgent):
return AppInfo(
Expand Down
50 changes: 50 additions & 0 deletions tests/unittests/cli/test_fast_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -1275,6 +1275,56 @@ def test_get_adk_app_info_non_llm_agent(test_app, mock_agent_loader):
assert "Root agent is not an LlmAgent" in response.json()["detail"]


def test_get_adk_app_info_unknown_app_returns_404(test_app, mock_agent_loader):
"""Test app-info returns 404 when the app_name matches no agent."""
with patch.object(
mock_agent_loader,
"load_agent",
side_effect=ValueError("Agent not found: unknown_app"),
):
response = test_app.get("/apps/unknown_app/app-info")
assert response.status_code == 404
assert "Agent not found: unknown_app" in response.json()["detail"]


def test_agent_run_unknown_app_returns_404(test_app, mock_agent_loader):
"""Test /run returns 404 instead of 500 when the app_name matches no agent."""
payload = {
"app_name": "unknown_app",
"user_id": "test_user",
"session_id": "test_session",
"new_message": {"role": "user", "parts": [{"text": "Hello agent"}]},
"streaming": False,
}
with patch.object(
mock_agent_loader,
"load_agent",
side_effect=ValueError("Agent not found: unknown_app"),
):
response = test_app.post("/run", json=payload)
assert response.status_code == 404
assert "Agent not found: unknown_app" in response.json()["detail"]


def test_agent_run_sse_unknown_app_returns_404(test_app, mock_agent_loader):
"""Test /run_sse returns 404 instead of 500 when the app_name matches no agent."""
payload = {
"app_name": "unknown_app",
"user_id": "test_user",
"session_id": "test_session",
"new_message": {"role": "user", "parts": [{"text": "Hello agent"}]},
"streaming": True,
}
with patch.object(
mock_agent_loader,
"load_agent",
side_effect=ValueError("Agent not found: unknown_app"),
):
response = test_app.post("/run_sse", json=payload)
assert response.status_code == 404
assert "Agent not found: unknown_app" in response.json()["detail"]


def test_create_session_with_id(test_app, test_session_info):
"""Test creating a session with a specific ID."""
new_session_id = "new_session_id"
Expand Down