| |
| """Upload a local folder to a private Hugging Face repo.""" |
|
|
| from __future__ import annotations |
|
|
| import argparse |
| import os |
| import pathlib |
| import sys |
|
|
| from huggingface_hub import HfApi |
|
|
| DEFAULT_IGNORE_PATTERNS = ( |
| ".cache/**", |
| ".git/**", |
| "__pycache__/**", |
| "*.pyc", |
| "openpi/.git/**", |
| "openpi/.venv/**", |
| "openpi/checkpoints/**", |
| "openpi/.pytest_cache/**", |
| "openpi/.ruff_cache/**", |
| ) |
|
|
|
|
| def _resolve_token() -> str | None: |
| for key in ("HF_TOKEN", "HUGGINGFACE_HUB_TOKEN", "HUGGING_FACE_HUB_TOKEN"): |
| token = os.getenv(key) |
| if token: |
| return token |
| return None |
|
|
|
|
| def main() -> int: |
| parser = argparse.ArgumentParser() |
| parser.add_argument( |
| "--folder", |
| default="/mnt/c/users/luiss/pi05tests", |
| help="Local folder to upload.", |
| ) |
| parser.add_argument( |
| "--repo-id", |
| default=None, |
| help="Target HF repo id (namespace/name). If omitted, uses <username>/pi05tests-openpi-multiarm.", |
| ) |
| parser.add_argument( |
| "--commit-message", |
| default="Upload pi05 multiarm workspace", |
| help="Commit message for upload.", |
| ) |
| parser.add_argument( |
| "--include-checkpoints", |
| action="store_true", |
| help="If set, do not ignore openpi/checkpoints/**.", |
| ) |
| args = parser.parse_args() |
|
|
| folder = pathlib.Path(args.folder).resolve() |
| if not folder.exists(): |
| raise FileNotFoundError(f"Folder does not exist: {folder}") |
|
|
| token = _resolve_token() |
| if not token: |
| print( |
| "No HF token found in env. Set one of: HF_TOKEN, HUGGINGFACE_HUB_TOKEN, HUGGING_FACE_HUB_TOKEN.", |
| file=sys.stderr, |
| ) |
| return 2 |
|
|
| api = HfApi(token=token) |
| who = api.whoami(token=token) |
| username = who["name"] |
| repo_id = args.repo_id or f"{username}/pi05tests-openpi-multiarm" |
|
|
| ignore_patterns = list(DEFAULT_IGNORE_PATTERNS) |
| if args.include_checkpoints: |
| ignore_patterns = [p for p in ignore_patterns if p != "openpi/checkpoints/**"] |
|
|
| print(f"Uploading folder: {folder}") |
| print(f"Repo: {repo_id} (private)") |
| print(f"Ignore patterns: {ignore_patterns}") |
|
|
| api.create_repo( |
| repo_id=repo_id, |
| private=True, |
| exist_ok=True, |
| repo_type="model", |
| token=token, |
| ) |
| api.upload_folder( |
| folder_path=str(folder), |
| repo_id=repo_id, |
| repo_type="model", |
| token=token, |
| commit_message=args.commit_message, |
| ignore_patterns=ignore_patterns, |
| ) |
| print(f"Upload completed: https://huggingface.co/{repo_id}") |
| return 0 |
|
|
|
|
| if __name__ == "__main__": |
| raise SystemExit(main()) |
|
|