| 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): |
| |
| 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 |
| |
| |
| self.votes_file = self.votes_cache / "votes_data.jsonl" |
| self.eval_requests_file = self.eval_cache / "eval_requests.jsonl" |
| |
| |
| 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 |
|
|
| |
| cache_config = CacheConfig() |