unik-ml / cache /local_cache.py
RoniFinTech's picture
cache-fix
98b8e77
raw
history blame
No virus
1.36 kB
from datetime import datetime, timedelta
from functools import wraps
from io import BytesIO
from fastapi.responses import StreamingResponse
CACHE_SIZE = 50
_cache = {}
_cache_time = {}
def ttl_cache(key_name, media_type=None, ttl_secs=20):
def decorator(func):
@wraps(func)
async def wrapper(*args, **kwargs):
# Assuming the prompt is the key for caching, change as necessary
key = kwargs.get(key_name)
ttl = timedelta(seconds=ttl_secs)
# Check cache
if key in _cache:
if datetime.now() - _cache_time[key] > ttl:
# Cache has expired
del _cache[key]
del _cache_time[key]
else:
# if media_type == 'image/png':
# return StreamingResponse(BytesIO(_cache[key]), media_type=media_type)
# else:
return StreamingResponse(BytesIO(_cache[key]), media_type="image/png")
# Call the actual function if not in cache or expired
response, image_data = await func(*args, **kwargs)
# Cache the content of the response's body.
_cache[key] = image_data
_cache_time[key] = datetime.now()
return response
return wrapper
return decorator