#!/usr/bin/env python3 """Create the immutable release manifest after all package files are frozen.""" from __future__ import annotations import hashlib import json from pathlib import Path RELEASE_ROOT = Path(__file__).resolve().parent MANIFEST_PATH = RELEASE_ROOT / "MANIFEST.json" def sha256(path: Path) -> str: digest = hashlib.sha256() with path.open("rb") as handle: for chunk in iter(lambda: handle.read(1 << 20), b""): digest.update(chunk) return digest.hexdigest() def read_json(path: Path) -> dict: return json.loads(path.read_text(encoding="utf-8")) def role_for(path: Path) -> str: value = path.as_posix() if value == "README.md": return "Hugging Face model card and usage guide" if value == "model_index.json": return "Hugging Face Diffusers metadata and download-tracking query file" if value == "generate.py": return "portable single-image inference entry point" if value == "run_validation.py": return "portable frozen-prompt validation entry point" if value == "validate_release.py": return "package hash validator" if value == "build_native.sh": return "project-local native runtime build helper" if value == "build_manifest.py": return "release manifest builder" if value.startswith("transformer/") and value.endswith(".safetensors"): return "complete sharded Mage transformer checkpoint with native NVFP4 modules" if value.startswith("transformer/"): return "Mage transformer component configuration, index, or quantization metadata" if value.startswith("text_encoder/") and value.endswith(".safetensors"): return "complete mixed NVFP4/FP8 Qwen3-VL text checkpoint" if value.startswith("text_encoder/"): return "packaged Qwen3-VL configuration or tokenizer asset" if value.startswith("vae/"): return "complete Mage VAE component" if value.startswith("scheduler/"): return "Mage FlowMatch scheduler component" if value.startswith("runtime/"): return "native runtime, loader, source, or Python integration" if value.startswith("vendor/"): return "pinned Microsoft Mage inference source" if value.startswith("licenses/") or value in { "LICENSE", "THIRD_PARTY_NOTICES.md", }: return "license or third-party attribution" if value.startswith("examples/"): return "release support file" return "release support file" def package_files() -> list[dict[str, object]]: records: list[dict[str, object]] = [] for path in sorted(RELEASE_ROOT.rglob("*")): if not path.is_file() or path == MANIFEST_PATH: continue relative = path.relative_to(RELEASE_ROOT) if "__pycache__" in relative.parts or path.suffix == ".pyc": raise RuntimeError( f"generated Python cache must not be shipped: {relative}" ) if path.is_symlink(): raise RuntimeError(f"release files must be independent: {relative}") records.append( { "path": relative.as_posix(), "size": path.stat().st_size, "sha256": sha256(path), "role": role_for(relative), } ) return records def main() -> int: if MANIFEST_PATH.exists(): raise SystemExit(f"refusing to overwrite {MANIFEST_PATH}") transformer_config = read_json(RELEASE_ROOT / "transformer" / "config.json") transformer_meta = read_json(RELEASE_ROOT / "transformer" / "nvfp4_metadata.json") text_config = read_json(RELEASE_ROOT / "text_encoder" / "config.json") quant = transformer_config["quantization_config"] runtime_defaults = quant.get("native_runtime_defaults", {}) payload = { "schema_version": "mage-flow-nvfp4-huggingface-release-v1", "release_status": "packaging-candidate-unvalidated", "base_models": { "mage_flow": "microsoft/Mage-Flow", "mage_transformer_sha256": "04431abbc3acd1a5b86a7f77269f8e77e05a6cac3b21f35e1aef7493f6ab4934", "qwen": "Qwen/Qwen3-VL-4B-Instruct", "qwen_quantized": "InsecureErasure/Qwen3-VL-4B-Instruct-NVFP4", }, "policy": { "mage_transformer": { "variant_id": quant.get("variant_id"), "target_count": quant.get("target_count"), "targets": quant.get("targets"), "bf16_passthrough_target_count": quant.get("bf16_passthrough_target_count"), "bf16_passthrough_targets": quant.get("bf16_passthrough_targets"), "native_runtime_defaults": runtime_defaults, }, "qwen_text_encoder": text_config.get("quantization_config"), "native_compute_capability": "12.0", "component_layout": "complete_huggingface_sharded_repository", }, "loader_implications": { "transformer_checkpoint_tensor_count": ( len(transformer_meta["non_target_keys"]) + (4 * len(transformer_meta["targets"])) ), "loaded_non_target_tensor_count": len(transformer_meta["non_target_keys"]), "loaded_nvfp4_projection_count": len(transformer_meta["targets"]), "bf16_quantized_target_weight_reads": 0, }, "files": package_files(), } with MANIFEST_PATH.open("xb") as handle: handle.write( json.dumps(payload, indent=2, sort_keys=True).encode("utf-8") + b"\n" ) print(f"wrote {MANIFEST_PATH} with {len(payload['files'])} files") return 0 if __name__ == "__main__": raise SystemExit(main())