Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
import os | |
import shutil | |
from pathlib import Path | |
from datetime import timedelta | |
import logging | |
from app.utils.logging import LogFormatter | |
from app.config.base import ( | |
CACHE_ROOT, | |
DATASETS_CACHE, | |
MODELS_CACHE, | |
VOTES_CACHE, | |
EVAL_CACHE, | |
CACHE_TTL | |
) | |
logger = logging.getLogger(__name__) | |
class CacheConfig: | |
def __init__(self): | |
# Get cache paths from config | |
self.cache_root = CACHE_ROOT | |
self.datasets_cache = DATASETS_CACHE | |
self.models_cache = MODELS_CACHE | |
self.votes_cache = VOTES_CACHE | |
self.eval_cache = EVAL_CACHE | |
# Specific files | |
self.votes_file = self.votes_cache / "votes_data.jsonl" | |
self.eval_requests_file = self.eval_cache / "eval_requests.jsonl" | |
# Cache TTL | |
self.cache_ttl = timedelta(seconds=CACHE_TTL) | |
self._initialize_cache_dirs() | |
self._setup_environment() | |
def _initialize_cache_dirs(self): | |
"""Initialize all necessary cache directories""" | |
try: | |
logger.info(LogFormatter.section("CACHE INITIALIZATION")) | |
cache_dirs = { | |
"Root": self.cache_root, | |
"Datasets": self.datasets_cache, | |
"Models": self.models_cache, | |
"Votes": self.votes_cache, | |
"Eval": self.eval_cache | |
} | |
for name, cache_dir in cache_dirs.items(): | |
cache_dir.mkdir(parents=True, exist_ok=True) | |
logger.info(LogFormatter.success(f"{name} cache directory: {cache_dir}")) | |
except Exception as e: | |
logger.error(LogFormatter.error("Failed to create cache directories", e)) | |
raise | |
def _setup_environment(self): | |
"""Configure HuggingFace environment variables""" | |
logger.info(LogFormatter.subsection("ENVIRONMENT SETUP")) | |
env_vars = { | |
"HF_HOME": str(self.cache_root), | |
"TRANSFORMERS_CACHE": str(self.models_cache), | |
"HF_DATASETS_CACHE": str(self.datasets_cache) | |
} | |
for var, value in env_vars.items(): | |
os.environ[var] = value | |
logger.info(LogFormatter.info(f"Set {var}={value}")) | |
def get_cache_path(self, cache_type: str) -> Path: | |
"""Returns the path for a specific cache type""" | |
cache_paths = { | |
"datasets": self.datasets_cache, | |
"models": self.models_cache, | |
"votes": self.votes_cache, | |
"eval": self.eval_cache | |
} | |
return cache_paths.get(cache_type, self.cache_root) | |
def flush_cache(self, cache_type: str = None): | |
"""Flush specified cache or all caches if no type is specified""" | |
try: | |
if cache_type: | |
logger.info(LogFormatter.section(f"FLUSHING {cache_type.upper()} CACHE")) | |
cache_dir = self.get_cache_path(cache_type) | |
if cache_dir.exists(): | |
stats = { | |
"Cache_Type": cache_type, | |
"Directory": str(cache_dir) | |
} | |
for line in LogFormatter.tree(stats, "Cache Details"): | |
logger.info(line) | |
shutil.rmtree(cache_dir) | |
cache_dir.mkdir(parents=True, exist_ok=True) | |
logger.info(LogFormatter.success("Cache cleared successfully")) | |
else: | |
logger.info(LogFormatter.section("FLUSHING ALL CACHES")) | |
for cache_type in ["datasets", "models", "votes", "eval"]: | |
self.flush_cache(cache_type) | |
logger.info(LogFormatter.success("All caches cleared successfully")) | |
except Exception as e: | |
logger.error(LogFormatter.error("Failed to flush cache", e)) | |
raise | |
# Singleton instance of cache configuration | |
cache_config = CacheConfig() |