agroadvisor-bd / src /cache.py
Borhan72's picture
Initial commit
84a9a2a
Raw
History Blame Contribute Delete
1.34 kB
import hashlib
import json
import os
import time
CACHE_FILE = "data/response_cache.json"
CACHE_TTL = 7 * 24 * 3600 # 1 week in seconds
def _load_cache() -> dict:
if not os.path.exists(CACHE_FILE):
return {}
with open(CACHE_FILE, "r", encoding="utf-8") as f:
return json.load(f)
def _save_cache(cache: dict):
with open(CACHE_FILE, "w", encoding="utf-8") as f:
json.dump(cache, f, ensure_ascii=False, indent=2)
def cache_key(query: str, lang: str) -> str:
normalized = query.lower().strip()
return hashlib.md5(f"{normalized}_{lang}".encode()).hexdigest()
def get_cached(query: str, lang: str):
cache = _load_cache()
key = cache_key(query, lang)
if key in cache:
entry = cache[key]
if time.time() - entry["timestamp"] < CACHE_TTL:
print(f"Cache hit for: {query[:50]}")
return entry["answer"]
return None
def set_cached(query: str, lang: str, answer: str):
cache = _load_cache()
key = cache_key(query, lang)
cache[key] = {
"query": query,
"answer": answer,
"timestamp": time.time()
}
# Keep only last 500 entries
if len(cache) > 500:
oldest_keys = sorted(cache, key=lambda k: cache[k]["timestamp"])[:100]
for k in oldest_keys:
del cache[k]
_save_cache(cache)