story writer backend migration complete, Blog writer SEO and story writer backend migration complete, Blog writer SEO and story writer frontend migration complete
This commit is contained in:
70
backend/api/story_writer/cache_manager.py
Normal file
70
backend/api/story_writer/cache_manager.py
Normal file
@@ -0,0 +1,70 @@
|
||||
"""
|
||||
Cache Management System for Story Writer API
|
||||
|
||||
Handles story generation cache operations.
|
||||
"""
|
||||
|
||||
from typing import Any, Dict, Optional
|
||||
from loguru import logger
|
||||
|
||||
|
||||
class CacheManager:
|
||||
"""Manages cache operations for story generation data."""
|
||||
|
||||
def __init__(self):
|
||||
"""Initialize the cache manager."""
|
||||
self.cache: Dict[str, Dict[str, Any]] = {}
|
||||
logger.info("[StoryWriter] CacheManager initialized")
|
||||
|
||||
def get_cache_key(self, request_data: Dict[str, Any]) -> str:
|
||||
"""Generate a cache key from request data."""
|
||||
import hashlib
|
||||
import json
|
||||
|
||||
# Create a normalized version of the request for caching
|
||||
cache_data = {
|
||||
"persona": request_data.get("persona", ""),
|
||||
"story_setting": request_data.get("story_setting", ""),
|
||||
"character_input": request_data.get("character_input", ""),
|
||||
"plot_elements": request_data.get("plot_elements", ""),
|
||||
"writing_style": request_data.get("writing_style", ""),
|
||||
"story_tone": request_data.get("story_tone", ""),
|
||||
"narrative_pov": request_data.get("narrative_pov", ""),
|
||||
"audience_age_group": request_data.get("audience_age_group", ""),
|
||||
"content_rating": request_data.get("content_rating", ""),
|
||||
"ending_preference": request_data.get("ending_preference", ""),
|
||||
}
|
||||
|
||||
cache_str = json.dumps(cache_data, sort_keys=True)
|
||||
return hashlib.md5(cache_str.encode()).hexdigest()
|
||||
|
||||
def get_cached_result(self, cache_key: str) -> Optional[Dict[str, Any]]:
|
||||
"""Get a cached result if available."""
|
||||
if cache_key in self.cache:
|
||||
logger.debug(f"[StoryWriter] Cache hit for key: {cache_key}")
|
||||
return self.cache[cache_key]
|
||||
logger.debug(f"[StoryWriter] Cache miss for key: {cache_key}")
|
||||
return None
|
||||
|
||||
def cache_result(self, cache_key: str, result: Dict[str, Any]):
|
||||
"""Cache a result."""
|
||||
self.cache[cache_key] = result
|
||||
logger.debug(f"[StoryWriter] Cached result for key: {cache_key}")
|
||||
|
||||
def clear_cache(self):
|
||||
"""Clear all cached results."""
|
||||
count = len(self.cache)
|
||||
self.cache.clear()
|
||||
logger.info(f"[StoryWriter] Cleared {count} cached entries")
|
||||
return {"status": "success", "message": f"Cleared {count} cached entries"}
|
||||
|
||||
def get_cache_stats(self) -> Dict[str, Any]:
|
||||
"""Get cache statistics."""
|
||||
return {
|
||||
"total_entries": len(self.cache),
|
||||
"cache_keys": list(self.cache.keys())
|
||||
}
|
||||
|
||||
|
||||
# Global cache manager instance
|
||||
cache_manager = CacheManager()
|
||||
Reference in New Issue
Block a user