Spaces:
Sleeping
Sleeping
Update modules/utils.py
Browse files- modules/utils.py +32 -0
modules/utils.py
CHANGED
|
@@ -12,6 +12,7 @@ from typing import Any, Dict, Optional, List
|
|
| 12 |
# ------------------------------------------------------------
|
| 13 |
_DATA_DIR: Optional[Path] = None
|
| 14 |
_EXPORT_DIR: Optional[Path] = None
|
|
|
|
| 15 |
|
| 16 |
def _is_writable(p: Path) -> bool:
|
| 17 |
try:
|
|
@@ -33,6 +34,34 @@ def _pick_writable_dir(candidates: List[Path]) -> Path:
|
|
| 33 |
fallback.mkdir(parents=True, exist_ok=True)
|
| 34 |
return fallback
|
| 35 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
def ensure_dirs() -> None:
|
| 37 |
"""書き込み可能なデータディレクトリを決定して作成。"""
|
| 38 |
global _DATA_DIR, _EXPORT_DIR
|
|
@@ -61,6 +90,9 @@ def ensure_dirs() -> None:
|
|
| 61 |
_DATA_DIR = chosen
|
| 62 |
_EXPORT_DIR = export
|
| 63 |
|
|
|
|
|
|
|
|
|
|
| 64 |
def data_dir() -> Path:
|
| 65 |
ensure_dirs()
|
| 66 |
return _DATA_DIR # type: ignore
|
|
|
|
| 12 |
# ------------------------------------------------------------
|
| 13 |
_DATA_DIR: Optional[Path] = None
|
| 14 |
_EXPORT_DIR: Optional[Path] = None
|
| 15 |
+
_HF_INIT_DONE: bool = False
|
| 16 |
|
| 17 |
def _is_writable(p: Path) -> bool:
|
| 18 |
try:
|
|
|
|
| 34 |
fallback.mkdir(parents=True, exist_ok=True)
|
| 35 |
return fallback
|
| 36 |
|
| 37 |
+
def _init_hf_env(base: Path) -> None:
|
| 38 |
+
"""
|
| 39 |
+
Hugging Face / Transformers / Sentence-Transformers の
|
| 40 |
+
キャッシュ&ホームをすべて base 配下に固定して PermissionError を回避。
|
| 41 |
+
"""
|
| 42 |
+
global _HF_INIT_DONE
|
| 43 |
+
if _HF_INIT_DONE:
|
| 44 |
+
return
|
| 45 |
+
|
| 46 |
+
hf_home = base / "hf_home"
|
| 47 |
+
hf_cache = base / "hf_cache"
|
| 48 |
+
hf_home.mkdir(parents=True, exist_ok=True)
|
| 49 |
+
hf_cache.mkdir(parents=True, exist_ok=True)
|
| 50 |
+
|
| 51 |
+
# 主要な環境変数を強制設定(既存設定より優先)
|
| 52 |
+
os.environ.setdefault("HF_HOME", str(hf_home))
|
| 53 |
+
os.environ.setdefault("HUGGINGFACE_HUB_CACHE", str(hf_cache))
|
| 54 |
+
os.environ.setdefault("TRANSFORMERS_CACHE", str(hf_cache))
|
| 55 |
+
os.environ.setdefault("SENTENCE_TRANSFORMERS_HOME", str(hf_cache))
|
| 56 |
+
|
| 57 |
+
# 余計な参照を抑制
|
| 58 |
+
os.environ.setdefault("HF_HUB_DISABLE_TELEMETRY", "1")
|
| 59 |
+
os.environ.setdefault("HF_HUB_DISABLE_PROGRESS_BARS", "1")
|
| 60 |
+
# 既定のトークン探索を避けるため空文字に(公開モデルの匿名DLを想定)
|
| 61 |
+
os.environ.setdefault("HF_TOKEN", "")
|
| 62 |
+
|
| 63 |
+
_HF_INIT_DONE = True
|
| 64 |
+
|
| 65 |
def ensure_dirs() -> None:
|
| 66 |
"""書き込み可能なデータディレクトリを決定して作成。"""
|
| 67 |
global _DATA_DIR, _EXPORT_DIR
|
|
|
|
| 90 |
_DATA_DIR = chosen
|
| 91 |
_EXPORT_DIR = export
|
| 92 |
|
| 93 |
+
# ★ Hugging Face 関連のホーム/キャッシュを、この書き込み可能ベースに固定
|
| 94 |
+
_init_hf_env(chosen)
|
| 95 |
+
|
| 96 |
def data_dir() -> Path:
|
| 97 |
ensure_dirs()
|
| 98 |
return _DATA_DIR # type: ignore
|