11import os
22import json
3- import logging
43import re
54from datetime import datetime , timedelta , timezone
65from typing import Dict , Any , List , Optional
76
87import numpy as np
98import google .generativeai as genai
109from pgvector .asyncpg import register_vector
10+ from fastmcp .utilities .logging import get_logger
1111
1212from . import db , llm
13- from .prompts import (
14- fact_relevance_user_prompt_template ,
15- fact_summarization_user_prompt_template ,
16- fact_extraction_user_prompt_template ,
17- cud_decision_user_prompt_template ,
18- fact_analysis_user_prompt_template ,
19- )
13+ from .prompts import fact_analysis_user_prompt_template
14+ from main .config import EMBEDDING_MODEL_NAME , GEMINI_API_KEY
2015
21- logging .basicConfig (level = logging .INFO )
22- logger = logging .getLogger (__name__ )
16+ logger = get_logger (__name__ )
2317
2418# --- Module-level state (initialized by lifespan event) ---
2519embed_model_name : str = None
2923def initialize_embedding_model ():
3024 global embed_model_name
3125 if embed_model_name is None :
32- model_name = os .getenv ("EMBEDDING_MODEL_NAME" , "models/gemini-embedding-001" )
33- api_key = os .getenv ("GEMINI_API_KEY" )
34- if not api_key :
35- raise ValueError ("GEMINI_API_KEY environment variable not set." )
36- logger .info (f"Initializing embedding model: { model_name } " )
37- genai .configure (api_key = api_key )
38- embed_model_name = model_name
26+ if not GEMINI_API_KEY :
27+ raise ValueError ("GEMINI_API_KEY is not set in main.config." )
28+ logger .info (f"Initializing embedding model: { EMBEDDING_MODEL_NAME } " )
29+ genai .configure (api_key = GEMINI_API_KEY )
30+ embed_model_name = EMBEDDING_MODEL_NAME
3931
4032def initialize_agents ():
4133 global agents
@@ -129,7 +121,7 @@ def _get_normalized_embedding(text: str, task_type: str) -> np.ndarray:
129121
130122async def search_memory (user_id : str , query : str ) -> str : # noqa: E501
131123 """Searches memory by performing a semantic search, filtering for relevance, and summarizing results."""
132- print (f"Executing search_memory for user_id='{ user_id } ' with query: '{ query } '" )
124+ logger . info (f"Executing search_memory for user_id='{ user_id } ' with query: '{ query } '" )
133125 pool = await db .get_db_pool ()
134126 async with pool .acquire () as conn :
135127 await register_vector (conn )
@@ -148,7 +140,7 @@ async def search_memory(user_id: str, query: str) -> str: # noqa: E501
148140 )
149141
150142 found_facts = [r ['content' ] for r in records ]
151- print (f"Found { found_facts } potentially relevant facts from vector search." )
143+ logger . info (f"Found { len ( found_facts ) } potentially relevant facts from vector search." )
152144
153145 if not found_facts :
154146 logger .info ("No facts found from vector search. Returning." )
@@ -170,10 +162,10 @@ async def search_memory(user_id: str, query: str) -> str: # noqa: E501
170162 except (json .JSONDecodeError , AttributeError ):
171163 logger .warning (f"Could not parse relevance check response: { relevance_raw } " )
172164
173- print (f"Step 3/4: Found { relevant_facts } truly relevant facts after filtering." )
165+ logger . info (f"Step 3/4: Found { len ( relevant_facts ) } truly relevant facts after filtering." )
174166
175167 if not relevant_facts :
176- print ("No relevant facts remained after filtering. Returning message to user." )
168+ logger . info ("No relevant facts remained after filtering. Returning message to user." )
177169 return "No relevant information found in your memory."
178170
179171 # Step 4: Summarization
@@ -182,7 +174,7 @@ async def search_memory(user_id: str, query: str) -> str: # noqa: E501
182174 summary_raw = llm .run_agent_with_prompt (agents ["fact_summarization" ], prompt )
183175 summary = clean_llm_output (summary_raw )
184176
185- print (f"Summary generated: { summary } " )
177+ logger . info (f"Summary generated: { summary [: 100 ] } ... " )
186178
187179 logger .info ("Search complete. Returning summary." )
188180 return summary if isinstance (summary , str ) and summary else "Could not generate a summary from the retrieved information."
0 commit comments