File size: 2,306 Bytes
d1bff6b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from __future__ import annotations

import os
from pathlib import Path

from huggingface_hub import HfApi


REQUIRED_ENV = ["HF_TOKEN", "HF_SPACE_ID", "KAGGLE_USERNAME", "KAGGLE_API_TOKEN"]


def main() -> None:
    missing = [name for name in REQUIRED_ENV if not os.environ.get(name)]
    if missing:
        raise SystemExit(f"Missing required environment variables: {', '.join(missing)}")

    project_root = Path(__file__).resolve().parents[1]
    repo_id = os.environ["HF_SPACE_ID"]
    token = os.environ["HF_TOKEN"]
    api = HfApi(token=token)

    api.create_repo(
        repo_id=repo_id,
        repo_type="space",
        space_sdk="docker",
        private=True,
        exist_ok=True,
    )

    secrets = {
        "PORT": "7860",
        "GENERATION_PROVIDER": "kaggle",
        "COMMERCIAL_MODE": "1",
        "FLUX_MODEL_ID": os.environ.get("FLUX_MODEL_ID", "black-forest-labs/FLUX.2-klein-4B"),
        "KAGGLE_COMMAND": "kaggle",
        "KAGGLE_USERNAME": os.environ["KAGGLE_USERNAME"],
        "KAGGLE_API_TOKEN": os.environ["KAGGLE_API_TOKEN"],
        "KAGGLE_ACCELERATOR": os.environ.get("KAGGLE_ACCELERATOR", "NvidiaTeslaT4"),
        "KAGGLE_USE_SMALL_DECODER": os.environ.get("KAGGLE_USE_SMALL_DECODER", "0"),
        "KAGGLE_INFERENCE_STEPS": os.environ.get("KAGGLE_INFERENCE_STEPS", "4"),
        "KAGGLE_CACHE_KERNEL_REF": os.environ.get("KAGGLE_CACHE_KERNEL_REF", "jolvangeest/mplus-flux2-cache"),
        "KAGGLE_POLL_INTERVAL_MS": os.environ.get("KAGGLE_POLL_INTERVAL_MS", "5000"),
        "KAGGLE_POLL_TIMEOUT_MS": os.environ.get("KAGGLE_POLL_TIMEOUT_MS", "7200000"),
    }

    for key, value in secrets.items():
        api.add_space_secret(repo_id=repo_id, key=key, value=value)

    api.upload_folder(
        repo_id=repo_id,
        repo_type="space",
        folder_path=str(project_root),
        commit_message="Deploy Mplus Studio",
        ignore_patterns=[
            ".git/*",
            ".angular/*",
            ".kaggle-work/*",
            ".env",
            "backend/dist/*",
            "backend/node_modules/*",
            "dist/*",
            "graphify-out/*",
            "node_modules/*",
            "test-results/*",
        ],
    )

    print(f"Deployed to https://huggingface.co/spaces/{repo_id}")


if __name__ == "__main__":
    main()