Spaces:
Build error
Build error
| """ | |
| Utilities for interacting with the Hugging Face Hub. | |
| """ | |
| import os | |
| from huggingface_hub import HfApi, login, hf_hub_download | |
| def upload_to_hub(to_parse_file, results_file, repo_id=None): | |
| """ | |
| Uploads files to the Hugging Face Hub. | |
| Args: | |
| to_parse_file: Path to the categories file | |
| results_file: Path to the results file | |
| repo_id: Hub repository ID | |
| Returns: | |
| True if upload succeeded, False otherwise | |
| """ | |
| try: | |
| # Use environment variable HUGGING_FACE_STORAGE_REPO if available | |
| # Otherwise, use default value | |
| if repo_id is None: | |
| repo_id = os.getenv("HUGGING_FACE_STORAGE_REPO", "leaderboard-explorer/leaderboard_explorer") | |
| if os.getenv("HUGGING_FACE_STORAGE_REPO"): | |
| print(f"Using target dataset specified in HUGGING_FACE_STORAGE_REPO: {repo_id}") | |
| else: | |
| print(f"No target dataset specified, using default value: {repo_id}") | |
| # Check if token is available | |
| token = os.getenv("HUGGING_FACE_HUB_TOKEN") | |
| if not token: | |
| print("ERROR: Environment variable HUGGING_FACE_HUB_TOKEN is not defined.") | |
| return False | |
| # Connect to Hub | |
| print("Connecting to Hugging Face Hub...") | |
| login(token=token) | |
| api = HfApi() | |
| # Upload JSON files | |
| print(f"\n--- UPLOADING CATEGORIES FILE ---") | |
| print(f"Local file: {to_parse_file}") | |
| print(f"Destination: {repo_id}/best_model_for_category_list.json") | |
| print(f"Uploading...") | |
| try: | |
| api.upload_file( | |
| path_or_fileobj=to_parse_file, | |
| path_in_repo="best_model_for_category_list.json", | |
| repo_id=repo_id, | |
| repo_type="dataset", | |
| commit_message="Update leaderboard categories" | |
| ) | |
| print(f"Upload of {to_parse_file} successful!") | |
| except Exception as e: | |
| print(f"Note when uploading {to_parse_file}: {e}") | |
| if "No files have been modified since last commit" in str(e): | |
| print("β The categories file is identical to the one already on the Hub. No changes needed.") | |
| else: | |
| print(f"β ERROR: Upload failed for another reason.") | |
| raise e | |
| print(f"\n--- UPLOADING RESULTS FILE ---") | |
| print(f"Local file: {results_file}") | |
| print(f"Destination: {repo_id}/best_model_for_results.json") | |
| print(f"Uploading...") | |
| try: | |
| api.upload_file( | |
| path_or_fileobj=results_file, | |
| path_in_repo="best_model_for_results.json", | |
| repo_id=repo_id, | |
| repo_type="dataset", | |
| commit_message="Update leaderboard results" | |
| ) | |
| print(f"Upload of {results_file} successful!") | |
| except Exception as e: | |
| print(f"Note when uploading {results_file}: {e}") | |
| if "No files have been modified since last commit" in str(e): | |
| print("β The results file is identical to the one already on the Hub. No changes needed.") | |
| else: | |
| print(f"β ERROR: Upload failed for another reason.") | |
| raise e | |
| print(f"\nUpload operation completed: files have been processed!") | |
| return True | |
| except Exception as e: | |
| print(f"GENERAL ERROR during file upload to Hub: {e}") | |
| return False | |
| def download_from_hub(repo_id=None): | |
| """ | |
| Downloads files from the Hugging Face Hub. | |
| Args: | |
| repo_id: Hub repository ID | |
| Returns: | |
| True if download succeeded, False otherwise | |
| """ | |
| try: | |
| # Use environment variable HUGGING_FACE_STORAGE_REPO if available | |
| # Otherwise, use default value | |
| if repo_id is None: | |
| repo_id = os.getenv("HUGGING_FACE_STORAGE_REPO", "leaderboard-explorer/leaderboard_explorer") | |
| if os.getenv("HUGGING_FACE_STORAGE_REPO"): | |
| print(f"Using source dataset specified in HUGGING_FACE_STORAGE_REPO: {repo_id}") | |
| else: | |
| print(f"No source dataset specified, using default value: {repo_id}") | |
| # Check if token is available | |
| token = os.getenv("HUGGING_FACE_HUB_TOKEN") | |
| if not token: | |
| print("ERROR: Environment variable HUGGING_FACE_HUB_TOKEN is not defined.") | |
| return False | |
| # Connect to Hub | |
| login(token=token) | |
| # Create data directory if it doesn't exist | |
| script_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | |
| data_dir = os.path.join(script_dir, "data") | |
| os.makedirs(data_dir, exist_ok=True) | |
| # List of required and optional files | |
| required_files = [ | |
| "final_leaderboards.json", | |
| "best_model_for_category_list.json" | |
| ] | |
| optional_files = [ | |
| "best_model_for_results.json" | |
| ] | |
| # Download required files first | |
| for filename in required_files: | |
| local_path = os.path.join(data_dir, filename) | |
| try: | |
| # Download file | |
| print(f"Downloading {filename} from {repo_id}...") | |
| hf_hub_download( | |
| repo_id=repo_id, | |
| filename=filename, | |
| repo_type="dataset", | |
| local_dir=data_dir, | |
| local_dir_use_symlinks=False | |
| ) | |
| print(f"File {filename} successfully downloaded to {local_path}") | |
| except Exception as e: | |
| print(f"ERROR: Unable to download required file {filename}: {e}") | |
| return False | |
| # Download optional files next | |
| for filename in optional_files: | |
| local_path = os.path.join(data_dir, filename) | |
| try: | |
| print(f"Downloading {filename} from {repo_id}...") | |
| hf_hub_download( | |
| repo_id=repo_id, | |
| filename=filename, | |
| repo_type="dataset", | |
| local_dir=data_dir, | |
| local_dir_use_symlinks=False | |
| ) | |
| print(f"File {filename} successfully downloaded to {local_path}") | |
| except Exception as e: | |
| print(f"WARNING: Unable to download optional file {filename}: {e}") | |
| print(f"This is not a problem, a new file will be created if necessary.") | |
| return True | |
| except Exception as e: | |
| print(f"ERROR during file download from Hub: {e}") | |
| return False |