ProRiboGen / api /common.py
TimelessAEther's picture
Upload ProRiboGen inference package and checkpoints
6dd9839 verified
Raw
History Blame Contribute Delete
1.62 kB
#!/usr/bin/env python3
"""Shared path helpers and env loading."""
from __future__ import annotations
import os
from pathlib import Path
PKG_ROOT = Path(__file__).resolve().parent.parent
def load_env(env_path: Path | None = None) -> None:
path = env_path or (PKG_ROOT / "configs" / "paths.env")
if not path.is_file():
example = PKG_ROOT / "configs" / "paths.env.example"
raise FileNotFoundError(
f"Missing {path}. Copy {example} to paths.env and set VESM paths."
)
for raw in path.read_text(encoding="utf-8").splitlines():
line = raw.strip()
if not line or line.startswith("#") or "=" not in line:
continue
key, val = line.split("=", 1)
key, val = key.strip(), val.strip().strip('"').strip("'")
if key and key not in os.environ:
os.environ[key] = val
def resolve(rel_or_abs: str) -> Path:
p = Path(rel_or_abs)
if p.is_absolute():
return p
return (PKG_ROOT / p).resolve()
def vesm_paths() -> tuple[Path, Path]:
base = os.environ.get("VESM_BASE_MODEL_DIR")
weights = os.environ.get("VESM_WEIGHTS")
root = os.environ.get("VESM_ROOT")
if base and weights:
return Path(base), Path(weights)
if not root:
raise RuntimeError(
"Set VESM_ROOT or VESM_BASE_MODEL_DIR+VESM_WEIGHTS in configs/paths.env"
)
root_p = Path(root)
return (
root_p / "models" / "base" / "facebook_esm2_t36_3B_UR50D",
root_p / "models" / "weights" / "VESM_3B.pth",
)
def device() -> str:
return os.environ.get("DEVICE", "cuda:0")