Files
odysseus/src/rag_singleton.py
pewdiepie-archdaemon e5c99a5eee Odysseus v1.0
2026-05-31 23:58:26 +09:00

57 lines
1.6 KiB
Python

"""
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