""" Monkey-patch cascade-lattice to use writable directories. This MUST be imported BEFORE any cascade imports. HF Spaces runs as non-root user, so site-packages is read-only. """ import os from pathlib import Path # Get writable directory from env or use home LATTICE_DIR = Path(os.environ.get('LATTICE_DIR', Path.home() / '.cascade')) LATTICE_DIR.mkdir(parents=True, exist_ok=True) def patch_cascade(): """Patch cascade.observation.ObservationManager to use writable dir.""" try: import cascade.observation as obs_module _original_init = obs_module.ObservationManager.__init__ def _patched_init(self, lattice_dir: Path = None): # Force use of writable directory _original_init(self, lattice_dir=lattice_dir or LATTICE_DIR) obs_module.ObservationManager.__init__ = _patched_init print(f"[CASCADE-PATCH] ObservationManager patched to use {LATTICE_DIR}") return True except Exception as e: print(f"[CASCADE-PATCH] Failed: {e}") return False def patch_model_registry(): """Patch ModelRegistry to use writable dir.""" try: import cascade.identity as id_module _original_init = id_module.ModelRegistry.__init__ def _patched_init(self, lattice_dir: Path = None): _original_init(self, lattice_dir=lattice_dir or LATTICE_DIR) id_module.ModelRegistry.__init__ = _patched_init print(f"[CASCADE-PATCH] ModelRegistry patched to use {LATTICE_DIR}") return True except Exception as e: print(f"[CASCADE-PATCH] ModelRegistry patch failed: {e}") return False # Apply patches immediately on import patch_cascade() patch_model_registry()