Spaces:
Runtime error
Runtime error
from __future__ import annotations | |
import os | |
import pathlib | |
import shlex | |
import subprocess | |
import slugify | |
from huggingface_hub import HfApi | |
from constants import ( | |
MODEL_LIBRARY_ORG_NAME, | |
URL_TO_JOIN_MODEL_LIBRARY_ORG, | |
UploadTarget, | |
) | |
def join_model_library_org(hf_token: str) -> None: | |
subprocess.run( | |
shlex.split( | |
f'curl -X POST -H "Authorization: Bearer {hf_token}" -H "Content-Type: application/json" {URL_TO_JOIN_MODEL_LIBRARY_ORG}' | |
) | |
) | |
def upload( | |
local_folder_path: str, | |
target_repo_name: str, | |
upload_to: str, | |
private: bool = True, | |
delete_existing_repo: bool = False, | |
hf_token: str = "", | |
) -> str: | |
hf_token = os.getenv("HF_TOKEN") or hf_token | |
if not hf_token: | |
raise ValueError | |
api = HfApi(token=hf_token) | |
if not local_folder_path: | |
raise ValueError | |
if not target_repo_name: | |
target_repo_name = pathlib.Path(local_folder_path).name | |
target_repo_name = slugify.slugify(target_repo_name) | |
if upload_to == UploadTarget.PERSONAL_PROFILE.value: | |
organization = api.whoami()["name"] | |
elif upload_to == UploadTarget.MODEL_LIBRARY.value: | |
organization = MODEL_LIBRARY_ORG_NAME | |
join_model_library_org(hf_token) | |
else: | |
raise ValueError | |
repo_id = f"{organization}/{target_repo_name}" | |
if delete_existing_repo: | |
try: | |
api.delete_repo(repo_id, repo_type="model") | |
except Exception: | |
pass | |
try: | |
api.create_repo(repo_id, repo_type="model", private=private) | |
api.upload_folder(repo_id=repo_id, folder_path=local_folder_path, path_in_repo=".", repo_type="model") | |
url = f"https://huggingface.co/{repo_id}" | |
message = f"Your model was successfully uploaded to {url}." | |
except Exception as e: | |
message = str(e) | |
return message | |