From 955632ce2c48a1f2cb38859d32be13e6e203ca2f Mon Sep 17 00:00:00 2001 From: Ankur Sharma Date: Wed, 22 Oct 2025 23:11:16 -0700 Subject: [PATCH] feat:Allow agent evaluation from modules ending in ".agent" PiperOrigin-RevId: 822888194 --- src/google/adk/evaluation/agent_evaluator.py | 30 +++++++++++++------- tests/integration/test_single_agent.py | 9 ++++++ 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/google/adk/evaluation/agent_evaluator.py b/src/google/adk/evaluation/agent_evaluator.py index ff6666d6..f3a3afe1 100644 --- a/src/google/adk/evaluation/agent_evaluator.py +++ b/src/google/adk/evaluation/agent_evaluator.py @@ -478,19 +478,27 @@ class AgentEvaluator: module_path = f"{module_name}" agent_module = importlib.import_module(module_path) print(dir(agent_module)) - if hasattr(agent_module, "agent"): - if hasattr(agent_module.agent, "root_agent"): - root_agent = agent_module.agent.root_agent - elif hasattr(agent_module.agent, "get_agent_async"): - root_agent, _ = await agent_module.agent.get_agent_async() - else: - raise ValueError( - f"Module {module_name} does not have a root_agent or" - " get_agent_async method." - ) + + # One of the two things should be satisfied, either the module should have + # an "agent" as a member in it or the module name itself should end with + # ".agent". + if not (hasattr(agent_module, "agent") or module_name.endswith(".agent")): + raise ValueError( + f"Module {module_name} does not have a member named `agent` or the" + " name should endwith `.agent`." + ) + + agent_module_with_agent = ( + agent_module.agent if hasattr(agent_module, "agent") else agent_module + ) + if hasattr(agent_module_with_agent, "root_agent"): + root_agent = agent_module_with_agent.root_agent + elif hasattr(agent_module_with_agent, "get_agent_async"): + root_agent, _ = await agent_module_with_agent.get_agent_async() else: raise ValueError( - f"Module {module_name} does not have a member named `agent`." + f"Module {module_name} does not have a root_agent or" + " get_agent_async method." ) agent_for_eval = root_agent diff --git a/tests/integration/test_single_agent.py b/tests/integration/test_single_agent.py index 49f3b7ba..769e5576 100644 --- a/tests/integration/test_single_agent.py +++ b/tests/integration/test_single_agent.py @@ -25,6 +25,15 @@ async def test_eval_agent(): ) +@pytest.mark.asyncio +async def test_eval_agent_with_agent_suffix_in_module_name(): + await AgentEvaluator.evaluate( + agent_module="tests.integration.fixture.home_automation_agent.agent", + eval_dataset_file_path_or_dir="tests/integration/fixture/home_automation_agent/simple_test.test.json", + num_runs=4, + ) + + @pytest.mark.asyncio async def test_eval_agent_async(): await AgentEvaluator.evaluate(