Daniel Kantor
set up ruff for formatting
58582d3
raw
history blame contribute delete
3.82 kB
import os
import shutil
from pathlib import Path
from datetime import timedelta
import logging
from app.core.formatting 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),
"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()