from __future__ import annotations import argparse import os from pathlib import Path from huggingface_hub import create_repo, get_token, upload_folder, whoami def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser(description="Upload the prepared release folder to Hugging Face.") parser.add_argument("--repo-id", default=None, help="Target repo id. Defaults to /gomoku-maskable-ppo-stage3-h6.") parser.add_argument("--token", default=None, help="HF token. Falls back to cached login or HF_TOKEN/HUGGINGFACE_HUB_TOKEN.") parser.add_argument("--private", action="store_true", help="Create/upload as a private model repo.") parser.add_argument("--commit-message", default="Upload Gomoku MaskablePPO stage3_h6 release") return parser.parse_args() def main() -> None: args = parse_args() token = args.token or os.environ.get("HF_TOKEN") or os.environ.get("HUGGINGFACE_HUB_TOKEN") or get_token() if not token: raise SystemExit( "No Hugging Face token found. Set HF_TOKEN/HUGGINGFACE_HUB_TOKEN, " "pass --token, or login with huggingface_hub.login()." ) repo_id = args.repo_id if not repo_id: user = whoami(token)["name"] repo_id = f"{user}/gomoku-maskable-ppo-stage3-h6" folder = Path(__file__).resolve().parent create_repo(repo_id=repo_id, token=token, repo_type="model", private=args.private, exist_ok=True) upload_folder( repo_id=repo_id, folder_path=str(folder), token=token, repo_type="model", commit_message=args.commit_message, ignore_patterns=["__pycache__", "*.pyc"], ) print(f"Upload complete: https://huggingface.co/{repo_id}") if __name__ == "__main__": main()