Spaces:
Sleeping
Sleeping
File size: 1,302 Bytes
29ce3e6 fc2011e 29ce3e6 fc2011e 29ce3e6 fc2011e 29ce3e6 fc2011e 29ce3e6 fc2011e 29ce3e6 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | import time
from typing import Any, Optional
class TTLCache:
"""Simple dict-based TTL cache."""
def __init__(self, maxsize: int = 100, ttl: int = 3600):
self.maxsize = maxsize
self.ttl = ttl
self._cache: dict[str, tuple[float, Any]] = {}
@staticmethod
def _normalize_key(key: str) -> str:
return key.strip().lower()
def get(self, key: str) -> Optional[Any]:
normalized = self._normalize_key(key)
entry = self._cache.get(normalized)
if entry is None:
return None
timestamp, value = entry
if time.time() - timestamp < self.ttl:
return value
del self._cache[normalized]
return None
def set(self, key: str, value: Any) -> None:
normalized = self._normalize_key(key)
# Evict oldest if at capacity and inserting a new key
if normalized not in self._cache and len(self._cache) >= self.maxsize:
oldest_key = min(self._cache, key=lambda k: self._cache[k][0])
del self._cache[oldest_key]
self._cache[normalized] = (time.time(), value)
def clear(self) -> None:
self._cache.clear()
# Cache instances
retrieval_cache = TTLCache(maxsize=100, ttl=3600)
generation_cache = TTLCache(maxsize=100, ttl=3600)
|