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