""" NovaAi – TTS-Engine-Hub utils/cache.py Version: v0.0.1 Description: Caching utilities for TTS requests (cache key generation, etc). Author: Abby (ChatGPT) Date: 2025-07-23 Canvas: utils/cache.py """ import hashlib import os import time # Cache version - increment this to invalidate all cached files # This is useful when fixing bugs that affect audio generation # Version history: # v1: Initial implementation with --stdin bug # v2: Fixed Bug #1-7 (removed --stdin, added timeouts, better error handling) CACHE_VERSION = "v2" # Für die API: Wichtig! req muss mindestens die Felder .text, .engine, .model, .speaker, .format, .chunking haben. def build_cache_key(req) -> str: """ Build a cache key from all relevant TTS request parameters. Includes CACHE_VERSION to automatically invalidate cache when bugs are fixed. """ data = f"{CACHE_VERSION}|{req.text}|{req.engine}|{req.model}|{req.speaker}|{req.format}|{getattr(req, 'chunking', False)}" return hashlib.sha256(data.encode()).hexdigest() def cleanup_old_cache_files(cache_dir: str, max_age_days: int = 7) -> int: """ Remove cache files older than max_age_days. Returns the number of files deleted. This helps prevent the cache directory from growing indefinitely, especially after cache version changes that make old files obsolete. """ if not os.path.isdir(cache_dir): return 0 current_time = time.time() max_age_seconds = max_age_days * 24 * 60 * 60 deleted_count = 0 for filename in os.listdir(cache_dir): if not filename.startswith('tts_'): continue filepath = os.path.join(cache_dir, filename) try: file_age = current_time - os.path.getmtime(filepath) if file_age > max_age_seconds: os.remove(filepath) deleted_count += 1 except (OSError, IOError): # Skip files we can't access continue return deleted_count