from __future__ import annotations import subprocess import sys from pathlib import Path from scripts.verify_external_checkpoint import build_manifest def test_external_checkpoint_manifest_ready_when_required_files_exist(tmp_path: Path) -> None: checkpoint = tmp_path / "checkpoint" checkpoint.mkdir() (checkpoint / "config.json").write_text("{}", encoding="utf-8") (checkpoint / "model.safetensors").write_bytes(b"weights") manifest = build_manifest( checkpoint, model_family="smolvla", repo_id="lerobot/smolvla_base", revision="abc", required_files=["config.json", "model.safetensors"], ) assert manifest["ready"] is True assert manifest["missing_required_files"] == [] assert manifest["file_count"] == 2 assert manifest["total_bytes"] == len("{}") + len(b"weights") model_row = next(row for row in manifest["files"] if row["path"] == "model.safetensors") assert len(model_row["sha256"]) == 64 def test_external_checkpoint_cli_reports_missing_required_files(tmp_path: Path) -> None: checkpoint = tmp_path / "checkpoint" checkpoint.mkdir() (checkpoint / "config.json").write_text("{}", encoding="utf-8") out = tmp_path / "manifest.json" result = subprocess.run( [ sys.executable, "scripts/verify_external_checkpoint.py", "--checkpoint", str(checkpoint), "--out", str(out), "--model-family", "smolvla", "--required-file", "config.json", "--required-file", "model.safetensors", ], capture_output=True, text=True, ) assert result.returncode == 2 assert "model.safetensors" in result.stdout assert out.exists()