Skip to content

Commit 61baef5

Browse files
committed
fix: allow internal builder assistant app name
1 parent aa51512 commit 61baef5

2 files changed

Lines changed: 54 additions & 9 deletions

File tree

src/google/adk/cli/api_server.py

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -680,6 +680,24 @@ def _maybe_add_bq_plugin(plugins: list[BasePlugin]) -> list[BasePlugin]:
680680
)
681681
return plugins
682682

683+
def _wrap_loaded_agent(
684+
app_name: str,
685+
agent_or_app: Any,
686+
plugins: list[BasePlugin],
687+
) -> App:
688+
if app_name.startswith("__"):
689+
# AgentLoader validates special agents before they reach this point.
690+
return App.model_construct(
691+
name=app_name,
692+
root_agent=agent_or_app,
693+
plugins=plugins,
694+
)
695+
return App(
696+
name=app_name,
697+
root_agent=agent_or_app,
698+
plugins=plugins,
699+
)
700+
683701
if isinstance(agent_or_app, App):
684702
# Combine existing plugins with extra plugins
685703
plugins = _maybe_add_bq_plugin(
@@ -689,17 +707,11 @@ def _maybe_add_bq_plugin(plugins: list[BasePlugin]) -> list[BasePlugin]:
689707
agentic_app = agent_or_app
690708
elif isinstance(agent_or_app, BaseAgent):
691709
plugins = _maybe_add_bq_plugin(extra_plugins_instances)
692-
agentic_app = App(
693-
name=app_name,
694-
root_agent=agent_or_app,
695-
plugins=plugins,
696-
)
710+
agentic_app = _wrap_loaded_agent(app_name, agent_or_app, plugins)
697711
else:
698712
# BaseNode (non-agent)
699-
agentic_app = App(
700-
name=app_name,
701-
root_agent=agent_or_app,
702-
plugins=extra_plugins_instances,
713+
agentic_app = _wrap_loaded_agent(
714+
app_name, agent_or_app, extra_plugins_instances
703715
)
704716

705717
# If the root agent was loaded from YAML, we treat it as being from Visual Builder

tests/unittests/cli/test_fast_api.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -644,6 +644,39 @@ def test_agent_with_bigquery_analytics_plugin(
644644
assert getattr(runner.app, "_is_visual_builder_app", False) is True
645645

646646

647+
def test_get_runner_async_accepts_internal_special_agent_name(
648+
tmp_path,
649+
mock_session_service,
650+
mock_artifact_service,
651+
mock_memory_service,
652+
mock_agent_loader,
653+
mock_eval_sets_manager,
654+
mock_eval_set_results_manager,
655+
):
656+
from google.adk.cli.adk_web_server import AdkWebServer
657+
658+
special_app_name = "__adk_agent_builder_assistant"
659+
special_agent = DummyAgent(name="agent_builder_assistant")
660+
mock_agent_loader.load_agent = MagicMock(return_value=special_agent)
661+
662+
adk_web_server = AdkWebServer(
663+
agent_loader=mock_agent_loader,
664+
session_service=mock_session_service,
665+
memory_service=mock_memory_service,
666+
artifact_service=mock_artifact_service,
667+
credential_service=MagicMock(),
668+
eval_sets_manager=mock_eval_sets_manager,
669+
eval_set_results_manager=mock_eval_set_results_manager,
670+
agents_dir=str(tmp_path),
671+
)
672+
673+
runner = asyncio.run(adk_web_server.get_runner_async(special_app_name))
674+
675+
assert runner.app.name == special_app_name
676+
assert runner.app.root_agent is special_agent
677+
mock_agent_loader.load_agent.assert_called_once_with(special_app_name)
678+
679+
647680
@pytest.fixture
648681
def test_app(
649682
mock_session_service,

0 commit comments

Comments
 (0)