File size: 3,416 Bytes
495526b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
"""
Upload WorldDisasterLM-8B as a public HuggingFace Space (Gradio demo).

Usage
-----
  # Set your HF token first:
  $env:HF_TOKEN = "hf_xxxxxxxxxxxxxxxxxxxx"

  # Then run:
  python scripts/upload_space.py --username YOUR_HF_USERNAME

  # Optionally specify a custom space name:
  python scripts/upload_space.py --username YOUR_HF_USERNAME --space-name WorldDisasterLM-8B

Requirements
------------
  pip install huggingface_hub
"""

from __future__ import annotations

import argparse
import os
import sys
from pathlib import Path

ROOT = Path(__file__).parent.parent
SPACE_DIR = ROOT / "hf_space"


def parse_args() -> argparse.Namespace:
    p = argparse.ArgumentParser(description="Upload WorldDisasterLM-8B to HuggingFace Spaces")
    p.add_argument("--username", required=True, help="Your HuggingFace username")
    p.add_argument("--space-name", default="WorldDisasterLM-8B", help="Space repository name")
    p.add_argument("--private", action="store_true", help="Create as private space (default: public)")
    return p.parse_args()


def main() -> None:
    args = parse_args()

    # Check token
    token = os.environ.get("HF_TOKEN")
    if not token:
        print("ERROR: HF_TOKEN environment variable is not set.")
        print("  Set it with:  $env:HF_TOKEN = 'hf_xxxxxxxxxxxx'")
        sys.exit(1)

    try:
        from huggingface_hub import HfApi, create_repo
    except ImportError:
        print("ERROR: huggingface_hub not installed. Run:  pip install huggingface_hub")
        sys.exit(1)

    repo_id = f"{args.username}/{args.space_name}"
    api = HfApi(token=token)

    print(f"\n{'='*60}")
    print(f"  WorldDisasterLM-8B → HuggingFace Space")
    print(f"  Repo   : {repo_id}")
    print(f"  Private: {args.private}")
    print(f"{'='*60}\n")

    # 1. Create the Space repo
    print("Step 1/3 — Creating Space repository...")
    create_repo(
        repo_id=repo_id,
        repo_type="space",
        space_sdk="gradio",
        private=args.private,
        exist_ok=True,
        token=token,
    )
    print(f"  ✓ Space created: https://huggingface.co/spaces/{repo_id}")

    # 2. Patch README.md with actual username
    readme_src = SPACE_DIR / "README.md"
    readme_text = readme_src.read_text(encoding="utf-8")
    readme_text = readme_text.replace("YOUR_HF_USERNAME", args.username)

    import tempfile, shutil
    tmp_dir = Path(tempfile.mkdtemp())
    try:
        # Copy space files to temp dir with patched README
        shutil.copytree(str(SPACE_DIR), str(tmp_dir / "space"))
        (tmp_dir / "space" / "README.md").write_text(readme_text, encoding="utf-8")

        # 3. Upload the folder
        print("Step 2/3 — Uploading files...")
        api.upload_folder(
            folder_path=str(tmp_dir / "space"),
            repo_id=repo_id,
            repo_type="space",
            commit_message="Upload WorldDisasterLM-8B Space demo",
            token=token,
        )
        print("  ✓ Files uploaded")
    finally:
        shutil.rmtree(tmp_dir, ignore_errors=True)

    print("\nStep 3/3 — Verifying Space...")
    space_info = api.space_info(repo_id=repo_id, token=token)
    print(f"  ✓ Space status: {getattr(space_info, 'runtime', {})}")

    print(f"\n{'='*60}")
    print(f"  DONE! Your Space is live at:")
    print(f"  https://huggingface.co/spaces/{repo_id}")
    print(f"{'='*60}\n")


if __name__ == "__main__":
    main()