diff --git a/src/google/adk/cli/cli_tools_click.py b/src/google/adk/cli/cli_tools_click.py index e5194272..6c3e7b98 100644 --- a/src/google/adk/cli/cli_tools_click.py +++ b/src/google/adk/cli/cli_tools_click.py @@ -627,7 +627,7 @@ def cli_eval( from ..evaluation.local_eval_set_results_manager import LocalEvalSetResultsManager from ..evaluation.local_eval_sets_manager import load_eval_set_from_file from ..evaluation.local_eval_sets_manager import LocalEvalSetsManager - from ..evaluation.user_simulator_provider import UserSimulatorProvider + from ..evaluation.simulation.user_simulator_provider import UserSimulatorProvider from .cli_eval import _collect_eval_results from .cli_eval import _collect_inferences from .cli_eval import get_root_agent diff --git a/src/google/adk/evaluation/agent_evaluator.py b/src/google/adk/evaluation/agent_evaluator.py index cafa712f..514681bf 100644 --- a/src/google/adk/evaluation/agent_evaluator.py +++ b/src/google/adk/evaluation/agent_evaluator.py @@ -50,7 +50,7 @@ from .eval_sets_manager import EvalSetsManager from .evaluator import EvalStatus from .in_memory_eval_sets_manager import InMemoryEvalSetsManager from .local_eval_sets_manager import convert_eval_set_to_pydantic_schema -from .user_simulator_provider import UserSimulatorProvider +from .simulation.user_simulator_provider import UserSimulatorProvider logger = logging.getLogger("google_adk." + __name__) diff --git a/src/google/adk/evaluation/eval_config.py b/src/google/adk/evaluation/eval_config.py index d5b94af5..13b2e922 100644 --- a/src/google/adk/evaluation/eval_config.py +++ b/src/google/adk/evaluation/eval_config.py @@ -27,7 +27,7 @@ from pydantic import Field from ..evaluation.eval_metrics import EvalMetric from .eval_metrics import BaseCriterion from .eval_metrics import Threshold -from .user_simulator import BaseUserSimulatorConfig +from .simulation.user_simulator import BaseUserSimulatorConfig logger = logging.getLogger("google_adk." + __name__) diff --git a/src/google/adk/evaluation/evaluation_generator.py b/src/google/adk/evaluation/evaluation_generator.py index e9c7dc54..5d8b48c1 100644 --- a/src/google/adk/evaluation/evaluation_generator.py +++ b/src/google/adk/evaluation/evaluation_generator.py @@ -45,9 +45,9 @@ from .eval_case import InvocationEvents from .eval_case import SessionInput from .eval_set import EvalSet from .request_intercepter_plugin import _RequestIntercepterPlugin -from .user_simulator import Status as UserSimulatorStatus -from .user_simulator import UserSimulator -from .user_simulator_provider import UserSimulatorProvider +from .simulation.user_simulator import Status as UserSimulatorStatus +from .simulation.user_simulator import UserSimulator +from .simulation.user_simulator_provider import UserSimulatorProvider _USER_AUTHOR = "user" _DEFAULT_AUTHOR = "agent" diff --git a/src/google/adk/evaluation/local_eval_service.py b/src/google/adk/evaluation/local_eval_service.py index 30344702..f454266e 100644 --- a/src/google/adk/evaluation/local_eval_service.py +++ b/src/google/adk/evaluation/local_eval_service.py @@ -55,7 +55,7 @@ from .evaluator import EvaluationResult from .evaluator import PerInvocationResult from .metric_evaluator_registry import DEFAULT_METRIC_EVALUATOR_REGISTRY from .metric_evaluator_registry import MetricEvaluatorRegistry -from .user_simulator_provider import UserSimulatorProvider +from .simulation.user_simulator_provider import UserSimulatorProvider logger = logging.getLogger('google_adk.' + __name__) diff --git a/src/google/adk/evaluation/simulation/__init__.py b/src/google/adk/evaluation/simulation/__init__.py new file mode 100644 index 00000000..0a2669d7 --- /dev/null +++ b/src/google/adk/evaluation/simulation/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/src/google/adk/evaluation/llm_backed_user_simulator.py b/src/google/adk/evaluation/simulation/llm_backed_user_simulator.py similarity index 96% rename from src/google/adk/evaluation/llm_backed_user_simulator.py rename to src/google/adk/evaluation/simulation/llm_backed_user_simulator.py index 2fbfcc44..4af22877 100644 --- a/src/google/adk/evaluation/llm_backed_user_simulator.py +++ b/src/google/adk/evaluation/simulation/llm_backed_user_simulator.py @@ -22,14 +22,14 @@ from google.genai import types as genai_types from pydantic import Field from typing_extensions import override -from ..events.event import Event -from ..models.llm_request import LlmRequest -from ..models.registry import LLMRegistry -from ..utils.context_utils import Aclosing -from ..utils.feature_decorator import experimental -from ._retry_options_utils import add_default_retry_options_if_not_present -from .conversation_scenarios import ConversationScenario -from .evaluator import Evaluator +from ...events.event import Event +from ...models.llm_request import LlmRequest +from ...models.registry import LLMRegistry +from ...utils.context_utils import Aclosing +from ...utils.feature_decorator import experimental +from .._retry_options_utils import add_default_retry_options_if_not_present +from ..conversation_scenarios import ConversationScenario +from ..evaluator import Evaluator from .user_simulator import BaseUserSimulatorConfig from .user_simulator import NextUserMessage from .user_simulator import Status diff --git a/src/google/adk/evaluation/static_user_simulator.py b/src/google/adk/evaluation/simulation/static_user_simulator.py similarity index 93% rename from src/google/adk/evaluation/static_user_simulator.py rename to src/google/adk/evaluation/simulation/static_user_simulator.py index 4c5e2cb5..e1de18a7 100644 --- a/src/google/adk/evaluation/static_user_simulator.py +++ b/src/google/adk/evaluation/simulation/static_user_simulator.py @@ -19,10 +19,10 @@ from typing import Optional from typing_extensions import override -from ..events.event import Event -from ..utils.feature_decorator import experimental -from .eval_case import StaticConversation -from .evaluator import Evaluator +from ...events.event import Event +from ...utils.feature_decorator import experimental +from ..eval_case import StaticConversation +from ..evaluator import Evaluator from .user_simulator import BaseUserSimulatorConfig from .user_simulator import NextUserMessage from .user_simulator import Status diff --git a/src/google/adk/evaluation/user_simulator.py b/src/google/adk/evaluation/simulation/user_simulator.py similarity index 95% rename from src/google/adk/evaluation/user_simulator.py rename to src/google/adk/evaluation/simulation/user_simulator.py index c5ab013d..57656b76 100644 --- a/src/google/adk/evaluation/user_simulator.py +++ b/src/google/adk/evaluation/simulation/user_simulator.py @@ -26,10 +26,10 @@ from pydantic import Field from pydantic import model_validator from pydantic import ValidationError -from ..events.event import Event -from ..utils.feature_decorator import experimental -from .common import EvalBaseModel -from .evaluator import Evaluator +from ...events.event import Event +from ...utils.feature_decorator import experimental +from ..common import EvalBaseModel +from ..evaluator import Evaluator class BaseUserSimulatorConfig(BaseModel): diff --git a/src/google/adk/evaluation/user_simulator_provider.py b/src/google/adk/evaluation/simulation/user_simulator_provider.py similarity index 97% rename from src/google/adk/evaluation/user_simulator_provider.py rename to src/google/adk/evaluation/simulation/user_simulator_provider.py index 1aea8c8c..b1bfd322 100644 --- a/src/google/adk/evaluation/user_simulator_provider.py +++ b/src/google/adk/evaluation/simulation/user_simulator_provider.py @@ -16,8 +16,8 @@ from __future__ import annotations from typing import Optional -from ..utils.feature_decorator import experimental -from .eval_case import EvalCase +from ...utils.feature_decorator import experimental +from ..eval_case import EvalCase from .llm_backed_user_simulator import LlmBackedUserSimulator from .static_user_simulator import StaticUserSimulator from .user_simulator import BaseUserSimulatorConfig diff --git a/tests/unittests/evaluation/simulation/__init__.py b/tests/unittests/evaluation/simulation/__init__.py new file mode 100644 index 00000000..0a2669d7 --- /dev/null +++ b/tests/unittests/evaluation/simulation/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/tests/unittests/evaluation/test_llm_backed_user_simulator.py b/tests/unittests/evaluation/simulation/test_llm_backed_user_simulator.py similarity index 95% rename from tests/unittests/evaluation/test_llm_backed_user_simulator.py rename to tests/unittests/evaluation/simulation/test_llm_backed_user_simulator.py index 6ef3969e..75db778b 100644 --- a/tests/unittests/evaluation/test_llm_backed_user_simulator.py +++ b/tests/unittests/evaluation/simulation/test_llm_backed_user_simulator.py @@ -15,9 +15,9 @@ from __future__ import annotations from google.adk.evaluation import conversation_scenarios -from google.adk.evaluation.llm_backed_user_simulator import LlmBackedUserSimulator -from google.adk.evaluation.llm_backed_user_simulator import LlmBackedUserSimulatorConfig -from google.adk.evaluation.user_simulator import Status +from google.adk.evaluation.simulation.llm_backed_user_simulator import LlmBackedUserSimulator +from google.adk.evaluation.simulation.llm_backed_user_simulator import LlmBackedUserSimulatorConfig +from google.adk.evaluation.simulation.user_simulator import Status from google.adk.events.event import Event from google.genai import types import pytest @@ -112,7 +112,7 @@ async def to_async_iter(items): def mock_llm_agent(mocker): """Provides a mock LLM agent.""" mock_llm_registry_cls = mocker.patch( - "google.adk.evaluation.llm_backed_user_simulator.LLMRegistry" + "google.adk.evaluation.simulation.llm_backed_user_simulator.LLMRegistry" ) mock_llm_registry = mocker.MagicMock() mock_llm_registry_cls.return_value = mock_llm_registry diff --git a/tests/unittests/evaluation/test_static_user_simulator.py b/tests/unittests/evaluation/simulation/test_static_user_simulator.py similarity index 93% rename from tests/unittests/evaluation/test_static_user_simulator.py rename to tests/unittests/evaluation/simulation/test_static_user_simulator.py index 5cc70c80..f18c23f5 100644 --- a/tests/unittests/evaluation/test_static_user_simulator.py +++ b/tests/unittests/evaluation/simulation/test_static_user_simulator.py @@ -14,9 +14,9 @@ from __future__ import annotations -from google.adk.evaluation import static_user_simulator -from google.adk.evaluation import user_simulator from google.adk.evaluation.eval_case import Invocation +from google.adk.evaluation.simulation import static_user_simulator +from google.adk.evaluation.simulation import user_simulator from google.genai import types import pytest diff --git a/tests/unittests/evaluation/test_user_simulator.py b/tests/unittests/evaluation/simulation/test_user_simulator.py similarity index 90% rename from tests/unittests/evaluation/test_user_simulator.py rename to tests/unittests/evaluation/simulation/test_user_simulator.py index c3e1e606..dbe7aff1 100644 --- a/tests/unittests/evaluation/test_user_simulator.py +++ b/tests/unittests/evaluation/simulation/test_user_simulator.py @@ -14,8 +14,8 @@ from __future__ import annotations -from google.adk.evaluation.user_simulator import NextUserMessage -from google.adk.evaluation.user_simulator import Status +from google.adk.evaluation.simulation.user_simulator import NextUserMessage +from google.adk.evaluation.simulation.user_simulator import Status from google.genai.types import Content import pytest diff --git a/tests/unittests/evaluation/test_user_simulator_provider.py b/tests/unittests/evaluation/simulation/test_user_simulator_provider.py similarity index 86% rename from tests/unittests/evaluation/test_user_simulator_provider.py rename to tests/unittests/evaluation/simulation/test_user_simulator_provider.py index 7cff4241..c4fb826f 100644 --- a/tests/unittests/evaluation/test_user_simulator_provider.py +++ b/tests/unittests/evaluation/simulation/test_user_simulator_provider.py @@ -16,10 +16,10 @@ from __future__ import annotations from google.adk.evaluation import conversation_scenarios from google.adk.evaluation import eval_case -from google.adk.evaluation import user_simulator_provider -from google.adk.evaluation.llm_backed_user_simulator import LlmBackedUserSimulator -from google.adk.evaluation.llm_backed_user_simulator import LlmBackedUserSimulatorConfig -from google.adk.evaluation.static_user_simulator import StaticUserSimulator +from google.adk.evaluation.simulation import user_simulator_provider +from google.adk.evaluation.simulation.llm_backed_user_simulator import LlmBackedUserSimulator +from google.adk.evaluation.simulation.llm_backed_user_simulator import LlmBackedUserSimulatorConfig +from google.adk.evaluation.simulation.static_user_simulator import StaticUserSimulator from google.genai import types import pytest @@ -52,7 +52,7 @@ class TestUserSimulatorProvider: def test_provide_llm_backed_user_simulator(self, mocker): """Tests the case when a LlmBackedUserSimulator should be provided.""" mock_llm_registry = mocker.patch( - 'google.adk.evaluation.llm_backed_user_simulator.LLMRegistry', + 'google.adk.evaluation.simulation.llm_backed_user_simulator.LLMRegistry', autospec=True, ) mock_llm_registry.return_value.resolve.return_value = mocker.Mock() diff --git a/tests/unittests/evaluation/test_evaluation_generator.py b/tests/unittests/evaluation/test_evaluation_generator.py index 27372f12..873239e7 100644 --- a/tests/unittests/evaluation/test_evaluation_generator.py +++ b/tests/unittests/evaluation/test_evaluation_generator.py @@ -18,9 +18,9 @@ from google.adk.evaluation.app_details import AgentDetails from google.adk.evaluation.app_details import AppDetails from google.adk.evaluation.evaluation_generator import EvaluationGenerator from google.adk.evaluation.request_intercepter_plugin import _RequestIntercepterPlugin -from google.adk.evaluation.user_simulator import NextUserMessage -from google.adk.evaluation.user_simulator import Status as UserSimulatorStatus -from google.adk.evaluation.user_simulator import UserSimulator +from google.adk.evaluation.simulation.user_simulator import NextUserMessage +from google.adk.evaluation.simulation.user_simulator import Status as UserSimulatorStatus +from google.adk.evaluation.simulation.user_simulator import UserSimulator from google.adk.events.event import Event from google.adk.models.llm_request import LlmRequest from google.genai import types