"""Short-term in-memory store with TTL.""" import time import logging from typing import Any, Dict logger = logging.getLogger("kapo.memory.short_term") class ShortTermMemory: def __init__(self, ttl_sec: int = 1800, max_items: int = 500): self.ttl_sec = ttl_sec self.max_items = max_items self._store: Dict[str, Any] = {} self._ts: Dict[str, float] = {} def _cleanup(self): try: now = time.time() expired = [k for k, t in self._ts.items() if now - t > self.ttl_sec] for k in expired: self._store.pop(k, None) self._ts.pop(k, None) if len(self._store) > self.max_items: for k in list(self._store.keys())[: len(self._store) - self.max_items]: self._store.pop(k, None) self._ts.pop(k, None) except Exception: logger.exception("Cleanup failed") def set(self, key: str, value: Any): self._store[key] = value self._ts[key] = time.time() self._cleanup() def get(self, key: str): self._cleanup() return self._store.get(key)