1414
1515from __future__ import annotations
1616
17+ import importlib
1718import json
1819import logging
1920import os
3435from starlette .types import Lifespan
3536from watchdog .observers import Observer
3637
38+ from ..artifacts .in_memory_artifact_service import InMemoryArtifactService
3739from ..auth .credential_service .in_memory_credential_service import InMemoryCredentialService
3840from ..evaluation .local_eval_set_results_manager import LocalEvalSetResultsManager
3941from ..evaluation .local_eval_sets_manager import LocalEvalSetsManager
42+ from ..memory .in_memory_memory_service import InMemoryMemoryService
4043from ..runners import Runner
44+ from ..sessions .in_memory_session_service import InMemorySessionService
4145from .adk_web_server import AdkWebServer
46+ from .service_registry import get_service_registry
4247from .service_registry import load_services_module
4348from .utils import envs
4449from .utils import evals
4550from .utils .agent_change_handler import AgentChangeEventHandler
4651from .utils .agent_loader import AgentLoader
47- from .utils .service_factory import create_artifact_service_from_options
48- from .utils .service_factory import create_memory_service_from_options
49- from .utils .service_factory import create_session_service_from_options
5052
5153logger = logging .getLogger ("google_adk." + __name__ )
5254
55+ _LAZY_SERVICE_IMPORTS : dict [str , str ] = {
56+ "AgentLoader" : ".utils.agent_loader" ,
57+ "InMemoryArtifactService" : "..artifacts.in_memory_artifact_service" ,
58+ "InMemoryMemoryService" : "..memory.in_memory_memory_service" ,
59+ "InMemorySessionService" : "..sessions.in_memory_session_service" ,
60+ "LocalEvalSetResultsManager" : "..evaluation.local_eval_set_results_manager" ,
61+ "LocalEvalSetsManager" : "..evaluation.local_eval_sets_manager" ,
62+ }
63+
64+
65+ def __getattr__ (name : str ):
66+ """Lazily import defaults so patching in tests keeps working."""
67+ if name not in _LAZY_SERVICE_IMPORTS :
68+ raise AttributeError (f"module { __name__ !r} has no attribute { name !r} " )
69+
70+ module = importlib .import_module (_LAZY_SERVICE_IMPORTS [name ], __package__ )
71+ attr = getattr (module , name )
72+ globals ()[name ] = attr
73+ return attr
74+
5375
5476def get_fast_api_app (
5577 * ,
@@ -73,8 +95,6 @@ def get_fast_api_app(
7395 logo_text : Optional [str ] = None ,
7496 logo_image_url : Optional [str ] = None ,
7597) -> FastAPI :
76- # Convert to absolute path for consistency
77- agents_dir = str (Path (agents_dir ).resolve ())
7898
7999 # Set up eval managers.
80100 if eval_storage_uri :
@@ -92,30 +112,48 @@ def get_fast_api_app(
92112 # Load services.py from agents_dir for custom service registration.
93113 load_services_module (agents_dir )
94114
115+ service_registry = get_service_registry ()
116+
95117 # Build the Memory service
96- try :
97- memory_service = create_memory_service_from_options (
98- base_dir = agents_dir ,
99- memory_service_uri = memory_service_uri ,
118+ if memory_service_uri :
119+ memory_service = service_registry .create_memory_service (
120+ memory_service_uri , agents_dir = agents_dir
100121 )
101- except ValueError as exc :
102- raise click .ClickException (str (exc )) from exc
122+ if not memory_service :
123+ raise click .ClickException (
124+ "Unsupported memory service URI: %s" % memory_service_uri
125+ )
126+ else :
127+ memory_service = InMemoryMemoryService ()
103128
104129 # Build the Session service
105- session_service = create_session_service_from_options (
106- base_dir = agents_dir ,
107- session_service_uri = session_service_uri ,
108- session_db_kwargs = session_db_kwargs ,
109- )
130+ if session_service_uri :
131+ session_kwargs = session_db_kwargs or {}
132+ session_service = service_registry .create_session_service (
133+ session_service_uri , agents_dir = agents_dir , ** session_kwargs
134+ )
135+ if not session_service :
136+ # Fallback to DatabaseSessionService if the service registry doesn't
137+ # support the session service URI scheme.
138+ from ..sessions .database_session_service import DatabaseSessionService
139+
140+ session_service = DatabaseSessionService (
141+ db_url = session_service_uri , ** session_kwargs
142+ )
143+ else :
144+ session_service = InMemorySessionService ()
110145
111146 # Build the Artifact service
112- try :
113- artifact_service = create_artifact_service_from_options (
114- base_dir = agents_dir ,
115- artifact_service_uri = artifact_service_uri ,
147+ if artifact_service_uri :
148+ artifact_service = service_registry .create_artifact_service (
149+ artifact_service_uri , agents_dir = agents_dir
116150 )
117- except ValueError as exc :
118- raise click .ClickException (str (exc )) from exc
151+ if not artifact_service :
152+ raise click .ClickException (
153+ "Unsupported artifact service URI: %s" % artifact_service_uri
154+ )
155+ else :
156+ artifact_service = InMemoryArtifactService ()
119157
120158 # Build the Credential service
121159 credential_service = InMemoryCredentialService ()
0 commit comments