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 | |