#!/usr/bin/env python3 from __future__ import annotations import argparse import hashlib import json import os import urllib.request from pathlib import Path LFS_INCLUDE = "models/tmcra_v4_longmemeval_s500_20260715/*.pt" def digest(path: Path) -> str: hasher = hashlib.sha256() with path.open("rb") as handle: for chunk in iter(lambda: handle.read(1024 * 1024), b""): hasher.update(chunk) return hasher.hexdigest() def fetch_file(root: Path, row: dict[str, object]) -> None: destination = (root / str(row["destination"])).resolve() expected = str(row["sha256"]) expected_bytes = int(row["bytes"]) if destination.is_file() and destination.stat().st_size == expected_bytes and digest(destination) == expected: print(f"verified {row['id']}: {destination}") return if row.get("storage") == "git_lfs": detail = "file is missing" if destination.is_file(): with destination.open("rb") as handle: prefix = handle.read(128) if prefix.startswith(b"version https://git-lfs.github.com/spec/v1"): detail = "only a Git LFS pointer is present" else: detail = f"size or SHA-256 mismatch ({destination.stat().st_size} bytes)" raise RuntimeError( f"Git LFS checkpoint {row['id']} is unavailable: {detail}: {destination}\n" f"run from the repository root: git lfs pull --include=\"{LFS_INCLUDE}\"" ) if not row.get("url"): raise RuntimeError(f"asset {row['id']} has neither a valid local Git LFS file nor a download URL") destination.parent.mkdir(parents=True, exist_ok=True) temporary = destination.with_suffix(destination.suffix + ".part") temporary.unlink(missing_ok=True) print(f"downloading {row['id']} -> {destination}") urllib.request.urlretrieve(str(row["url"]), temporary) if temporary.stat().st_size != expected_bytes: raise RuntimeError(f"size mismatch for {row['id']}") actual = digest(temporary) if actual != expected: raise RuntimeError(f"SHA-256 mismatch for {row['id']}: {actual}") os.replace(temporary, destination) def fetch_model(root: Path, row: dict[str, object]) -> None: from huggingface_hub import snapshot_download destination = root / str(row["destination"]) destination.parent.mkdir(parents=True, exist_ok=True) print(f"downloading {row['repo_id']}@{row['revision']} -> {destination}") snapshot_download( repo_id=str(row["repo_id"]), revision=str(row["revision"]), local_dir=destination, ) def main() -> int: parser = argparse.ArgumentParser() parser.add_argument("--manifest", type=Path, default=Path("configs/assets.lock.json")) parser.add_argument("--root", type=Path, default=Path.cwd()) parser.add_argument("--kind", choices=("all", "dataset", "checkpoint", "model"), default="all") args = parser.parse_args() payload = json.loads(args.manifest.read_text(encoding="utf-8")) if args.kind in {"all", "dataset", "checkpoint"}: selected = [ row for row in payload["files"] if args.kind == "all" or row["kind"] == args.kind ] # Validate repository-owned LFS files before starting any large network # download, so an incomplete clone fails quickly and predictably. selected.sort(key=lambda row: row.get("storage") != "git_lfs") for row in selected: fetch_file(args.root, row) if args.kind in {"all", "model"}: for row in payload["huggingface_models"]: fetch_model(args.root, row) return 0 if __name__ == "__main__": raise SystemExit(main())