nvikou's picture
Deploy PolyglotRAG v1.1
2697b4c verified
Raw History Blame Contribute Delete
1.49 kB
from __future__ import annotations
import threading
from typing import Any
from cachetools import TTLCache
from config import settings
class SimpleCache:
def __init__(self, maxsize: int, ttl: int, enabled: bool = True) -> None:
self._enabled = enabled
self._lock = threading.Lock()
self._store: TTLCache | None = TTLCache(maxsize=maxsize, ttl=ttl) if enabled else None
def get(self, key: str) -> Any | None:
if not self._enabled:
return None
with self._lock:
return self._store.get(key)
def set(self, key: str, value: Any) -> None:
if not self._enabled:
return
with self._lock:
self._store[key] = value
def clear(self) -> None:
if self._enabled:
with self._lock:
self._store.clear()
def stats(self) -> dict:
if not self._enabled:
return {"enabled": False, "size": 0, "maxsize": 0}
with self._lock:
return {
"enabled": True,
"size": len(self._store),
"maxsize": self._store.maxsize,
}
def make_cache_key(*parts: str) -> str:
return "||".join(parts)
embedding_cache = SimpleCache(
maxsize=settings.cache_max_size, ttl=settings.cache_ttl_seconds, enabled=settings.enable_cache
)
answer_cache = SimpleCache(
maxsize=settings.cache_max_size, ttl=settings.cache_ttl_seconds, enabled=settings.enable_cache
)