Spaces:
Running
Running
| import logging | |
| import os | |
| from huggingface_hub import HfApi, hf_hub_download | |
| from src.envs import ( | |
| ON_SPACE, | |
| RESULTS_DATASET_REPO, | |
| RESULTS_DIR, | |
| SPACE_REPO, | |
| SUBMISSIONS_DIR, | |
| SUBMISSIONS_REPO_PREFIX, | |
| TOKEN, | |
| USE_HUB_STORAGE, | |
| ) | |
| logger = logging.getLogger(__name__) | |
| def _api() -> HfApi: | |
| return HfApi(token=TOKEN) | |
| def log_storage_status() -> None: | |
| if not ON_SPACE: | |
| return | |
| if USE_HUB_STORAGE: | |
| print(f"Results dataset storage enabled for {RESULTS_DATASET_REPO}") | |
| return | |
| if not RESULTS_DATASET_REPO: | |
| print("Results storage disabled: could not resolve results dataset repo id") | |
| return | |
| print( | |
| f"Results storage disabled: set HF_TOKEN secret with write access to {RESULTS_DATASET_REPO}" | |
| ) | |
| def _ensure_results_dataset() -> None: | |
| if not USE_HUB_STORAGE: | |
| return | |
| try: | |
| _api().create_repo( | |
| repo_id=RESULTS_DATASET_REPO, | |
| repo_type="dataset", | |
| exist_ok=True, | |
| token=TOKEN, | |
| ) | |
| except Exception as exc: | |
| logger.warning("Could not ensure results dataset exists: %s", exc) | |
| def _download_dataset_file(path_in_repo: str) -> None: | |
| hf_hub_download( | |
| repo_id=RESULTS_DATASET_REPO, | |
| repo_type="dataset", | |
| filename=path_in_repo, | |
| local_dir=RESULTS_DIR, | |
| local_dir_use_symlinks=False, | |
| token=TOKEN, | |
| ) | |
| def _sync_legacy_space_results() -> None: | |
| """One-time compatibility: pull results/*.json committed to the Space repo.""" | |
| if not SPACE_REPO or not TOKEN: | |
| return | |
| try: | |
| repo_files = _api().list_repo_files(repo_id=SPACE_REPO, repo_type="space") | |
| legacy_files = [ | |
| path for path in repo_files | |
| if path.startswith("results/") and path.endswith(".json") | |
| ] | |
| for path_in_repo in legacy_files: | |
| filename = os.path.basename(path_in_repo) | |
| local_path = os.path.join(RESULTS_DIR, filename) | |
| if os.path.isfile(local_path): | |
| continue | |
| hf_hub_download( | |
| repo_id=SPACE_REPO, | |
| repo_type="space", | |
| filename=path_in_repo, | |
| local_dir=os.path.dirname(RESULTS_DIR), | |
| local_dir_use_symlinks=False, | |
| token=TOKEN, | |
| ) | |
| except Exception as exc: | |
| logger.warning("Could not sync legacy Space results: %s", exc) | |
| def sync_results_from_hub() -> None: | |
| """Pull submission JSON and ZIP files from the results dataset (and legacy Space repo).""" | |
| if not USE_HUB_STORAGE: | |
| return | |
| os.makedirs(RESULTS_DIR, exist_ok=True) | |
| os.makedirs(SUBMISSIONS_DIR, exist_ok=True) | |
| try: | |
| repo_files = _api().list_repo_files(repo_id=RESULTS_DATASET_REPO, repo_type="dataset") | |
| result_files = [ | |
| path | |
| for path in repo_files | |
| if path.endswith(".json") | |
| or ( | |
| path.startswith(f"{SUBMISSIONS_REPO_PREFIX}/") | |
| and path.endswith(".zip") | |
| ) | |
| ] | |
| for path_in_repo in result_files: | |
| _download_dataset_file(path_in_repo) | |
| except Exception as exc: | |
| logger.exception("Could not sync results from dataset: %s", exc) | |
| _sync_legacy_space_results() | |
| def upload_result_to_hub(local_path: str, model: str) -> str | None: | |
| """Persist a results JSON file to the results dataset (no Space restart).""" | |
| if not USE_HUB_STORAGE: | |
| if ON_SPACE: | |
| return ( | |
| "Results were saved locally but not uploaded. " | |
| f"Add an HF_TOKEN secret with write access to {RESULTS_DATASET_REPO}." | |
| ) | |
| return None | |
| filename = os.path.basename(local_path) | |
| try: | |
| _ensure_results_dataset() | |
| _api().upload_file( | |
| path_or_fileobj=local_path, | |
| path_in_repo=filename, | |
| repo_id=RESULTS_DATASET_REPO, | |
| repo_type="dataset", | |
| commit_message=f"Update leaderboard results for {model}", | |
| token=TOKEN, | |
| ) | |
| logger.info("Uploaded %s to dataset %s", filename, RESULTS_DATASET_REPO) | |
| return None | |
| except Exception as exc: | |
| logger.exception("Could not upload %s to results dataset", filename) | |
| return f"Could not upload results to the dataset repo: {exc}" | |
| def upload_submission_zip_to_hub(local_path: str, model: str) -> str | None: | |
| """Persist the full submission ZIP to the results dataset.""" | |
| if not USE_HUB_STORAGE: | |
| if ON_SPACE: | |
| return ( | |
| "Submission archive was saved locally but not uploaded. " | |
| f"Add an HF_TOKEN secret with write access to {RESULTS_DATASET_REPO}." | |
| ) | |
| return None | |
| filename = os.path.basename(local_path) | |
| path_in_repo = f"{SUBMISSIONS_REPO_PREFIX}/{filename}" | |
| try: | |
| _ensure_results_dataset() | |
| _api().upload_file( | |
| path_or_fileobj=local_path, | |
| path_in_repo=path_in_repo, | |
| repo_id=RESULTS_DATASET_REPO, | |
| repo_type="dataset", | |
| commit_message=f"Update submission archive for {model}", | |
| token=TOKEN, | |
| ) | |
| logger.info("Uploaded %s to dataset %s", path_in_repo, RESULTS_DATASET_REPO) | |
| return None | |
| except Exception as exc: | |
| logger.exception("Could not upload %s to results dataset", path_in_repo) | |
| return f"Could not upload submission archive to the dataset repo: {exc}" | |
| def ensure_submission_zip_local(model: str) -> str | None: | |
| """Ensure the submission zip for *model* exists locally; download from Hub if needed.""" | |
| from src.leaderboard.store import ( | |
| model_to_zip_filename, | |
| submission_zip_path_for_model, | |
| ) | |
| local_path = submission_zip_path_for_model(model) | |
| if os.path.isfile(local_path): | |
| return local_path | |
| if not USE_HUB_STORAGE: | |
| return None | |
| path_in_repo = f"{SUBMISSIONS_REPO_PREFIX}/{model_to_zip_filename(model)}" | |
| try: | |
| os.makedirs(SUBMISSIONS_DIR, exist_ok=True) | |
| _download_dataset_file(path_in_repo) | |
| except Exception as exc: | |
| logger.warning("Could not download submission archive %s: %s", path_in_repo, exc) | |
| return None | |
| return local_path if os.path.isfile(local_path) else None | |