ML-Project / deploy_to_hf.py
QaziAbsaar's picture
Upload 17 files
13bb27f verified
Raw
History Blame Contribute Delete
2.41 kB
from __future__ import annotations
import os
from pathlib import Path
from huggingface_hub import HfApi
ROOT = Path(__file__).resolve().parent
REQUIRED_FILES = [
"app.py",
"taxi_fare.py",
"requirements.txt",
"README.md",
"HF_DEPLOYMENT_GUIDE.md",
"PROJECT_SUMMARY.md",
"DATASET_GUIDE.md",
"train.py",
"download_dataset.py",
"generate_synthetic_data.py",
"push_to_hf.sh",
"artifacts/taxi_fare_ann_model.joblib",
"artifacts/metrics.json",
"artifacts/training_summary.txt",
]
IGNORE_PATTERNS = [
".git/**",
".venv/**",
"**/__pycache__/**",
"**/.ipynb_checkpoints/**",
"**/*.pyc",
"**/*.pyo",
]
def main() -> None:
username = os.environ.get("HF_USERNAME")
space_name = os.environ.get("HF_SPACE")
token = os.environ.get("HF_TOKEN")
if not username or not space_name or not token:
raise SystemExit("Missing HF_USERNAME, HF_SPACE, or HF_TOKEN environment variables.")
repo_id = f"{username}/{space_name}"
api = HfApi()
api.create_repo(
repo_id=repo_id,
repo_type="space",
space_sdk="gradio",
exist_ok=True,
token=token,
)
missing_files = [relative_path for relative_path in REQUIRED_FILES if not (ROOT / relative_path).exists()]
if missing_files:
print("Skipping missing files:")
for relative_path in missing_files:
print(f" - {relative_path}")
# Build list of files we expect to upload (existing required files)
files_to_upload = [str((ROOT / p).resolve()) for p in REQUIRED_FILES if (ROOT / p).exists()]
print(f"Found {len(files_to_upload)} required files to upload")
for p in files_to_upload:
print(f" - {p}")
print(f"Uploading workspace files to https://huggingface.co/spaces/{repo_id} ...")
try:
api.upload_folder(
repo_id=repo_id,
repo_type="space",
folder_path=str(ROOT),
commit_message="Deploy Space from local workspace",
token=token,
ignore_patterns=IGNORE_PATTERNS,
)
except Exception as exc:
print("Upload failed with exception:")
print(exc)
raise
print("Upload complete.")
print(f"Open https://huggingface.co/spaces/{repo_id} to see the build status.")