testtest123's picture
Initial commit: Multimodal RAG Pipeline V3.0 with Fallback Logic
2ecc4a7
Raw
History Blame Contribute Delete
1.52 kB
import redis
import hashlib
import json
from typing import Optional, Dict, Any
from ..config import settings
import logging
logger = logging.getLogger(__name__)
class CacheService:
def __init__(self):
try:
self.redis = redis.from_url(settings.REDIS_URL, decode_responses=True)
except Exception as e:
logger.error(f"Failed to connect to Redis: {e}")
self.redis = None
def _get_key(self, user_id: str, document_id: str, query: str, technique: str) -> str:
data = f"{user_id}:{document_id}:{query}:{technique}"
q_hash = hashlib.sha256(data.encode()).hexdigest()
return f"rag_cache:{q_hash}"
def get(self, user_id: str, document_id: str, query: str, technique: str) -> Optional[Dict[str, Any]]:
if not self.redis: return None
key = self._get_key(user_id, document_id, query, technique)
try:
val = self.redis.get(key)
if val:
return json.loads(val)
except Exception as e:
logger.error(f"Redis get failed: {e}")
return None
def set(self, user_id: str, document_id: str, query: str, technique: str, response: Dict[str, Any]):
if not self.redis: return
key = self._get_key(user_id, document_id, query, technique)
try:
self.redis.setex(key, settings.CACHE_TTL_SECONDS, json.dumps(response))
except Exception as e:
logger.error(f"Redis set failed: {e}")
cache_service = CacheService()