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
2 changes: 1 addition & 1 deletion src/google/adk/cli/fast_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -337,7 +337,7 @@ def setup_observer(observer: Observer, adk_web_server: ApiServer):
agent_change_handler = AgentChangeEventHandler(
agent_loader=agent_loader,
runners_to_clean=adk_web_server.runners_to_clean,
current_app_name_ref=adk_web_server.current_app_name_ref,
agents_dir=agents_dir,
)
observer.schedule(agent_change_handler, agents_dir, recursive=True)
observer.start()
Expand Down
13 changes: 8 additions & 5 deletions src/google/adk/cli/utils/agent_change_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@
from __future__ import annotations

import logging
from pathlib import Path

from watchdog.events import FileSystemEventHandler

from .agent_loader import AgentLoader
from .shared_value import SharedValue

logger = logging.getLogger("google_adk." + __name__)

Expand All @@ -31,15 +31,18 @@ def __init__(
self,
agent_loader: AgentLoader,
runners_to_clean: set[str],
current_app_name_ref: SharedValue[str],
agents_dir: str,
):
self.agent_loader = agent_loader
self.runners_to_clean = runners_to_clean
self.current_app_name_ref = current_app_name_ref
self.agents_dir = Path(agents_dir).resolve()

def on_modified(self, event):
if not event.src_path.endswith((".py", ".yaml", ".yml")):
return
logger.info("Change detected in agents directory: %s", event.src_path)
self.agent_loader.remove_agent_from_cache(self.current_app_name_ref.value)
self.runners_to_clean.add(self.current_app_name_ref.value)
agent_name = (
Path(event.src_path).resolve().relative_to(self.agents_dir).parts[0]
)
self.agent_loader.remove_agent_from_cache(agent_name)
self.runners_to_clean.add(agent_name)
10 changes: 4 additions & 6 deletions tests/unittests/cli/utils/test_agent_change_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@

from google.adk.cli.utils import agent_loader
from google.adk.cli.utils.agent_change_handler import AgentChangeEventHandler
from google.adk.cli.utils.shared_value import SharedValue
import pytest
from watchdog.events import FileModifiedEvent

Expand All @@ -35,19 +34,18 @@ def mock_agent_loader(self):
def handler(self, mock_agent_loader):
"""Create an AgentChangeEventHandler with mocked dependencies."""
runners_to_clean = set()
current_app_name_ref = SharedValue(value="test_agent")
return AgentChangeEventHandler(
agent_loader=mock_agent_loader,
runners_to_clean=runners_to_clean,
current_app_name_ref=current_app_name_ref,
agents_dir="/path/to",
)

@pytest.mark.parametrize(
"file_path",
[
pytest.param("/path/to/agent.py", id="python_file"),
pytest.param("/path/to/config.yaml", id="yaml_file"),
pytest.param("/path/to/config.yml", id="yml_file"),
pytest.param("/path/to/test_agent/agent.py", id="python_file"),
pytest.param("/path/to/test_agent/config.yaml", id="yaml_file"),
pytest.param("/path/to/test_agent/config.yml", id="yml_file"),
],
)
def test_on_modified_triggers_reload_for_supported_extensions(
Expand Down