Odysseus v1.0
This commit is contained in:
56
src/rag_singleton.py
Normal file
56
src/rag_singleton.py
Normal file
@@ -0,0 +1,56 @@
|
||||
"""
|
||||
RAG singleton instance for the application.
|
||||
"""
|
||||
import os
|
||||
import logging
|
||||
import time
|
||||
from pathlib import Path
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
rag_instance = None
|
||||
_last_attempt = 0.0
|
||||
_RETRY_INTERVAL = 30 # seconds between re-init attempts
|
||||
|
||||
def get_rag_manager():
|
||||
"""Disabled: vector document RAG (VectorRAG/ChromaDB) is unused and its
|
||||
client is incompatible with the installed pydantic. Return None so personal-
|
||||
doc routes fall back to non-vector behavior instead of re-attempting (and
|
||||
re-hanging on) a broken ChromaDB init every 30s."""
|
||||
return None
|
||||
|
||||
|
||||
def _get_rag_manager_legacy():
|
||||
"""Original lazy initializer, kept for reference / easy re-enable."""
|
||||
global rag_instance, _last_attempt
|
||||
|
||||
if rag_instance is not None:
|
||||
return rag_instance
|
||||
|
||||
now = time.monotonic()
|
||||
if now - _last_attempt < _RETRY_INTERVAL:
|
||||
return None # too soon to retry
|
||||
|
||||
_last_attempt = now
|
||||
|
||||
try:
|
||||
from src.rag_vector import VectorRAG
|
||||
|
||||
base_dir = Path(__file__).parent.parent
|
||||
persist_dir = os.path.join(base_dir, "data", "rag")
|
||||
|
||||
rag_instance = VectorRAG(persist_directory=persist_dir)
|
||||
if not rag_instance.healthy:
|
||||
logger.warning("VectorRAG created but not healthy, will retry later")
|
||||
rag_instance = None
|
||||
else:
|
||||
logger.info("Initialized VectorRAG with ChromaDB")
|
||||
|
||||
except ImportError as e:
|
||||
logger.warning(f"VectorRAG not available: {e}")
|
||||
rag_instance = None
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to initialize RAG: {e}")
|
||||
rag_instance = None
|
||||
|
||||
return rag_instance
|
||||
Reference in New Issue
Block a user