| """Deploy FATHOM env server to HuggingFace Docker Space -- ENV-10. |
| |
| Run: python scripts/deploy_space.py |
| """ |
| from __future__ import annotations |
|
|
| import os |
| import sys |
| from pathlib import Path |
|
|
| |
| if sys.platform == "win32": |
| import io |
| sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", errors="replace") |
|
|
| HF_TOKEN = os.getenv("HF_TOKEN") |
| SPACE_NAME = os.environ.get("FATHOM_SPACE_NAME", "Pratham-math/fathom-env") |
|
|
| REPO_ROOT = Path(__file__).parent.parent |
|
|
|
|
| def deploy(): |
| from huggingface_hub import HfApi |
|
|
| api = HfApi(token=HF_TOKEN) |
| me = api.whoami() |
| print(f"Logged in as: {me['name']}") |
|
|
| |
| print(f"Ensuring Space exists: {SPACE_NAME} ...") |
| api.create_repo( |
| repo_id=SPACE_NAME, |
| repo_type="space", |
| space_sdk="docker", |
| private=False, |
| exist_ok=True, |
| ) |
| print("Space ready.") |
|
|
| |
| uploads = [ |
| (REPO_ROOT / "space" / "Dockerfile", "Dockerfile"), |
| (REPO_ROOT / "space" / "README.md", "README.md"), |
| (REPO_ROOT / "pyproject.toml", "pyproject.toml"), |
| ] |
|
|
| |
| for p in (REPO_ROOT / "env").rglob("*.py"): |
| rel = str(p.relative_to(REPO_ROOT)).replace("\\", "/") |
| uploads.append((p, rel)) |
|
|
| |
| for p in (REPO_ROOT / "configs").rglob("*.yaml"): |
| rel = str(p.relative_to(REPO_ROOT)).replace("\\", "/") |
| uploads.append((p, rel)) |
|
|
| print(f"Uploading {len(uploads)} files...") |
| for local, remote in uploads: |
| if local.exists(): |
| api.upload_file( |
| path_or_fileobj=str(local), |
| path_in_repo=remote, |
| repo_id=SPACE_NAME, |
| repo_type="space", |
| commit_message=f"Deploy: {remote}", |
| ) |
| print(f" OK {remote}") |
| else: |
| print(f" SKIP (missing): {local}") |
|
|
| space_url_base = SPACE_NAME.replace("/", "-") |
| space_url = f"https://{space_url_base}.hf.space" |
| hf_url = f"https://huggingface.co/spaces/{SPACE_NAME}" |
|
|
| print("=" * 60) |
| print("Deploy complete!") |
| print(f" HF Space : {hf_url}") |
| print(f" App URL : {space_url}") |
| print(f" Health : {space_url}/healthz") |
| print("Space is building (~2-5 min). Once green, set:") |
| print(f" FATHOM_SPACE_URL={space_url}") |
| print("=" * 60) |
|
|
|
|
| if __name__ == "__main__": |
| deploy() |
|
|