incident-commander / scripts /push_to_hf.py
r1cksync
feat(phase8-10): saboteur+slack+replay, 381 scenarios, Colab Unsloth+Qwen72B critic, push helpers
94db88e
Raw
History Blame
3.08 kB
"""Upload IncidentCommander artifacts to Hugging Face.
Required env vars:
IC_HF_USER - your HF username (e.g. "sara-sre")
HF_TOKEN - HF token with **write** scope
Creates / updates three repos under your account:
1. <user>/incident-commander (Space, gradio SDK)
2. <user>/incident-commander-scenarios (Dataset)
3. <user>/incident-commander-actor (Model β€” adapter + replays)
"""
from __future__ import annotations
import os
import sys
from pathlib import Path
from huggingface_hub import HfApi, create_repo
USER = os.environ.get("IC_HF_USER", "").strip()
TOKEN = os.environ.get("HF_TOKEN", "").strip()
if not USER or not TOKEN:
sys.exit("Set IC_HF_USER and HF_TOKEN before running.")
ROOT = Path(__file__).resolve().parents[1]
api = HfApi(token=TOKEN)
def _push_folder(folder: Path, repo: str, repo_type: str,
path_in_repo: str = ".",
allow_patterns: list[str] | None = None) -> None:
if not folder.exists():
print(f" Β· skip {folder} (missing)")
return
create_repo(repo, exist_ok=True, repo_type=repo_type, token=TOKEN)
print(f" Β· uploading {folder} β†’ {repo_type}://{repo}/{path_in_repo}")
api.upload_folder(
folder_path=str(folder),
repo_id=repo,
repo_type=repo_type,
path_in_repo=path_in_repo,
allow_patterns=allow_patterns,
commit_message="sync from local",
)
# 1. SPACE β€” full tree (Streamlit / Gradio SDK).
space_repo = f"{USER}/incident-commander"
print(f"[1/3] Space β†’ {space_repo}")
create_repo(space_repo, exist_ok=True, repo_type="space",
space_sdk="gradio", token=TOKEN)
api.upload_folder(
folder_path=str(ROOT),
repo_id=space_repo,
repo_type="space",
ignore_patterns=["__pycache__/*", "*.pyc", ".git/*", ".venv/*",
"node_modules/*", ".next/*", "out/*", "dist/*",
"build/*", "*.zip"],
commit_message="phase8-10 sync",
)
# 2. DATASET β€” scenarios.
print(f"[2/3] Dataset β†’ {USER}/incident-commander-scenarios")
_push_folder(ROOT / "rl-agent" / "scenarios",
f"{USER}/incident-commander-scenarios",
repo_type="dataset")
# 3. MODEL β€” adapter + replays + training logs.
model_repo = f"{USER}/incident-commander-actor"
print(f"[3/3] Model β†’ {model_repo}")
create_repo(model_repo, exist_ok=True, repo_type="model", token=TOKEN)
finals = sorted((ROOT / "colab" / "logs").glob("adapter_*_final"))
if finals:
_push_folder(finals[-1], model_repo, "model", path_in_repo="adapter")
_push_folder(ROOT / "colab" / "logs", model_repo, "model",
path_in_repo="logs", allow_patterns=["*.json"])
_push_folder(ROOT / "rl-agent" / "replays", model_repo, "model",
path_in_repo="replays", allow_patterns=["*.html"])
print("\nDone.")
print(f" Space https://huggingface.co/spaces/{space_repo}")
print(f" Dataset https://huggingface.co/datasets/{USER}/incident-commander-scenarios")
print(f" Model https://huggingface.co/{model_repo}")