File size: 2,359 Bytes
eafee5b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
"""
Runtime path configuration for keeping project artifacts on the external drive.
"""
from __future__ import annotations

import os
from pathlib import Path


PROJECT_ROOT = Path(__file__).resolve().parents[1]
RUNTIME_ROOT = Path(os.environ.get("GRIDSENSE_RUNTIME_ROOT", PROJECT_ROOT / ".runtime")).resolve()
HOME_DIR = RUNTIME_ROOT / "home"
CACHE_DIR = RUNTIME_ROOT / "cache"
TMP_DIR = RUNTIME_ROOT / "tmp"


def configure_runtime() -> dict[str, str]:
    """Force common ML/tooling caches into the project runtime directory."""
    paths = {
        "GRIDSENSE_RUNTIME_ROOT": str(RUNTIME_ROOT),
        "HOME": str(HOME_DIR),
        "XDG_CACHE_HOME": str(CACHE_DIR),
        "TMPDIR": str(TMP_DIR),
        "HF_HOME": str(CACHE_DIR / "huggingface"),
        "HUGGINGFACE_HUB_CACHE": str(CACHE_DIR / "huggingface" / "hub"),
        "TRANSFORMERS_CACHE": str(CACHE_DIR / "huggingface" / "transformers"),
        "TORCH_HOME": str(CACHE_DIR / "torch"),
        "HF_DATASETS_CACHE": str(CACHE_DIR / "huggingface" / "datasets"),
        "MPLCONFIGDIR": str(CACHE_DIR / "matplotlib"),
        "PIP_CACHE_DIR": str(CACHE_DIR / "pip"),
        "PYTHONPYCACHEPREFIX": str(CACHE_DIR / "pycache"),
        "STREAMLIT_CONFIG_DIR": str(PROJECT_ROOT / ".streamlit"),
        "HF_HUB_DISABLE_TELEMETRY": "1",
        "STREAMLIT_BROWSER_GATHER_USAGE_STATS": "false",
        "PYTHONNOUSERSITE": "1",
    }

    for key, value in paths.items():
        os.environ[key] = value

    for directory in {
        RUNTIME_ROOT,
        HOME_DIR,
        CACHE_DIR,
        TMP_DIR,
        Path(paths["HF_HOME"]),
        Path(paths["HUGGINGFACE_HUB_CACHE"]),
        Path(paths["TRANSFORMERS_CACHE"]),
        Path(paths["TORCH_HOME"]),
        Path(paths["HF_DATASETS_CACHE"]),
        Path(paths["MPLCONFIGDIR"]),
        Path(paths["PIP_CACHE_DIR"]),
        Path(paths["PYTHONPYCACHEPREFIX"]),
        Path(paths["STREAMLIT_CONFIG_DIR"]),
    }:
        directory.mkdir(parents=True, exist_ok=True)

    return paths


def describe_runtime() -> str:
    paths = configure_runtime()
    return (
        f"runtime_root={paths['GRIDSENSE_RUNTIME_ROOT']} "
        f"hf_home={paths['HF_HOME']} "
        f"torch_home={paths['TORCH_HOME']} "
        f"tmpdir={paths['TMPDIR']}"
    )


def chdir_project_root() -> str:
    os.chdir(PROJECT_ROOT)
    return str(PROJECT_ROOT)