File size: 1,768 Bytes
54c857f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
"""
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()