phi-drift / core /gen_cache.py
crexs's picture
Upload folder using huggingface_hub
914e970 verified
Raw
History Blame Contribute Delete
1.84 kB
import sqlite3
import time
from pathlib import Path
from typing import Optional
class DiskGenCache:
def __init__(self, path: Optional[Path] = None, max_entries: int = 1024):
if path is None:
path = Path.home() / ".infj_bot" / "drift_gen_cache.sqlite3"
self.path = Path(path)
self.path.parent.mkdir(parents=True, exist_ok=True)
self.max_entries = max_entries
self._conn = sqlite3.connect(str(self.path), timeout=10)
self._conn.execute(
"CREATE TABLE IF NOT EXISTS cache (k TEXT PRIMARY KEY, v TEXT, ts INTEGER)"
)
self._conn.commit()
def get(self, key: str) -> Optional[str]:
cur = self._conn.execute("SELECT v FROM cache WHERE k = ?", (key,))
row = cur.fetchone()
if not row:
return None
# update timestamp to reflect recent use
try:
self._conn.execute("UPDATE cache SET ts = ? WHERE k = ?", (int(time.time()), key))
self._conn.commit()
except Exception:
pass
return row[0]
def set(self, key: str, value: str) -> None:
ts = int(time.time())
self._conn.execute("INSERT OR REPLACE INTO cache (k, v, ts) VALUES (?, ?, ?)", (key, value, ts))
self._conn.commit()
# enforce max entries
cur = self._conn.execute("SELECT COUNT(1) FROM cache")
count = cur.fetchone()[0]
if count > self.max_entries:
# delete oldest
to_delete = count - self.max_entries
self._conn.execute(
"DELETE FROM cache WHERE k IN (SELECT k FROM cache ORDER BY ts ASC LIMIT ?)",
(to_delete,)
)
self._conn.commit()
def close(self):
try:
self._conn.close()
except Exception:
pass