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
    }