1212# See the License for the specific language governing permissions and
1313# limitations under the License.
1414
15+
1516import click
1617
18+ from veadk .memory .long_term_memory import LongTermMemory
19+ from veadk .memory .short_term_memory import ShortTermMemory
20+
21+
22+ def _get_stm_from_module (module ) -> ShortTermMemory :
23+ return module .agent_run_config .short_term_memory
24+
25+
26+ def _get_stm_from_env () -> ShortTermMemory :
27+ import os
28+
29+ from veadk .utils .logger import get_logger
30+
31+ logger = get_logger (__name__ )
32+
33+ short_term_memory_backend = os .getenv ("SHORT_TERM_MEMORY_BACKEND" )
34+ if not short_term_memory_backend : # prevent None or empty string
35+ short_term_memory_backend = "local"
36+ logger .info (f"Short term memory: backend={ short_term_memory_backend } " )
37+
38+ return ShortTermMemory (backend = short_term_memory_backend ) # type: ignore
39+
40+
41+ def _get_ltm_from_module (module ) -> LongTermMemory | None :
42+ agent = module .agent_run_config .agent
43+
44+ if not hasattr (agent , "long_term_memory" ):
45+ return None
46+ else :
47+ return agent .long_term_memory
48+
49+
50+ def _get_ltm_from_env () -> LongTermMemory | None :
51+ import os
52+
53+ from veadk .utils .logger import get_logger
54+
55+ logger = get_logger (__name__ )
56+
57+ long_term_memory_backend = os .getenv ("LONG_TERM_MEMORY_BACKEND" )
58+
59+ if long_term_memory_backend :
60+ logger .info (f"Long term memory: backend={ long_term_memory_backend } " )
61+ return LongTermMemory (backend = long_term_memory_backend ) # type: ignore
62+ else :
63+ logger .warning ("No long term memory backend settings detected." )
64+ return None
65+
66+
67+ def _get_memory (
68+ module_path : str ,
69+ ) -> tuple [ShortTermMemory , LongTermMemory | None ]:
70+ from veadk .utils .logger import get_logger
71+ from veadk .utils .misc import load_module_from_file
72+
73+ logger = get_logger (__name__ )
74+
75+ # 1. load user module
76+ try :
77+ module_file_path = module_path
78+ module = load_module_from_file (
79+ module_name = "agent_and_mem" , file_path = f"{ module_file_path } /agent.py"
80+ )
81+ except Exception as e :
82+ logger .error (
83+ f"Failed to get memory config from `agent.py`: { e } . Fallback to get memory from environment variables."
84+ )
85+ return _get_stm_from_env (), _get_ltm_from_env ()
86+
87+ if not hasattr (module , "agent_run_config" ):
88+ logger .error (
89+ "You must export `agent_run_config` as a global variable in `agent.py`. Fallback to get memory from environment variables."
90+ )
91+ return _get_stm_from_env (), _get_ltm_from_env ()
92+
93+ # 2. try to get short term memory
94+ # short term memory must exist in user code, as we use `default_factory` to init it
95+ short_term_memory = _get_stm_from_module (module )
96+
97+ # 3. try to get long term memory
98+ long_term_memory = _get_ltm_from_module (module )
99+ if not long_term_memory :
100+ long_term_memory = _get_ltm_from_env ()
101+
102+ return short_term_memory , long_term_memory
103+
17104
18105@click .command ()
19106@click .option ("--host" , default = "127.0.0.1" , help = "Host to run the web server on" )
@@ -24,7 +111,6 @@ def web(host: str) -> None:
24111
25112 from google .adk .cli .utils .shared_value import SharedValue
26113
27- from veadk .memory .short_term_memory import ShortTermMemory
28114 from veadk .utils .logger import get_logger
29115
30116 logger = get_logger (__name__ )
@@ -51,26 +137,9 @@ def init_for_veadk(
51137 self .current_app_name_ref = SharedValue (value = "" )
52138 self .runner_dict = {}
53139
54- short_term_memory_backend = os .getenv ("SHORT_TERM_MEMORY_BACKEND" )
55- if not short_term_memory_backend : # prevent None or empty string
56- short_term_memory_backend = "local"
57- logger .info (f"Short term memory: backend={ short_term_memory_backend } " )
58-
59- long_term_memory_backend = os .getenv ("LONG_TERM_MEMORY_BACKEND" )
60- long_term_memory = None
61-
62- if long_term_memory_backend :
63- from veadk .memory .long_term_memory import LongTermMemory
64-
65- logger .info (f"Long term memory: backend={ long_term_memory_backend } " )
66- long_term_memory = LongTermMemory (backend = long_term_memory_backend ) # type: ignore
67- else :
68- logger .info ("No long term memory backend settings detected." )
69-
70- self .session_service = ShortTermMemory (
71- backend = short_term_memory_backend # type: ignore
72- ).session_service
73-
140+ # parse VeADK memories
141+ short_term_memory , long_term_memory = _get_memory (module_path = agents_dir )
142+ self .session_service = short_term_memory .session_service
74143 self .memory_service = long_term_memory
75144
76145 import google .adk .cli .adk_web_server
0 commit comments