File size: 1,360 Bytes
6d55fec |
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 44 45 46 47 |
from diskcache import Cache
from functools import wraps
import hashlib
import json
from config import settings
# Initialize cache
cache = Cache(settings.CACHE_DIR, size_limit=1000000000) # 1GB limit
def cache_llm_response(expire=86400):
"""Cache decorator for LLM responses"""
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
if not settings.CACHE_ENABLED:
return func(*args, **kwargs)
# Create cache key
key_data = {
"func": func.__name__,
"args": str(args),
"kwargs": str(kwargs)
}
key = hashlib.md5(json.dumps(key_data, sort_keys=True).encode()).hexdigest()
# Check cache
if key in cache:
return cache[key]
# Call function and cache result
result = func(*args, **kwargs)
cache.set(key, result, expire=expire)
return result
return wrapper
return decorator
def clear_cache():
"""Clear all cached responses"""
cache.clear()
def get_cache_stats():
"""Get cache statistics"""
return {
"size": cache.volume(),
"count": len(cache),
"enabled": settings.CACHE_ENABLED
} |