orena-procedure-runtime / bundle /verify_runtime.py
gwd200's picture
Publish PROCEDURE ep15 merged3225 self-contained runtime v1
f6588d9 verified
Raw History Blame Contribute Delete
2.88 kB
"""Verify the exact Python/CUDA package surface used by the runtime."""
from __future__ import annotations
import hashlib
import importlib
import importlib.metadata
import json
import sys
from pathlib import Path
from typing import Any
EXPECTED_PYTHON = (3, 11)
EXPECTED_PACKAGES = {
"av": "18.1.0",
"decord": "0.6.0",
"ms-swift": "4.5.2",
"numpy": "2.3.5",
"opencv-python-headless": "5.0.0.93",
"Pillow": "10.4.0",
"qwen-vl-utils": "0.0.14",
"torch": "2.11.0+cu130",
"transformers": "5.15.1",
"vllm": "0.26.0",
}
IMPORT_NAMES = {
"av": "av",
"decord": "decord",
"ms-swift": "swift",
"numpy": "numpy",
"opencv-python-headless": "cv2",
"Pillow": "PIL",
"qwen-vl-utils": "qwen_vl_utils",
"torch": "torch",
"transformers": "transformers",
"vllm": "vllm",
}
def _sha256(path: Path) -> str:
digest = hashlib.sha256()
with path.open("rb") as handle:
for block in iter(lambda: handle.read(8 * 1024 * 1024), b""):
digest.update(block)
return digest.hexdigest()
def verify_runtime() -> dict[str, Any]:
"""Import every direct runtime dependency and bind native OpenCV bytes."""
if sys.version_info[:2] != EXPECTED_PYTHON:
raise RuntimeError(
f"Python version changed: {sys.version_info[:2]} != {EXPECTED_PYTHON}"
)
versions = {name: importlib.metadata.version(name) for name in EXPECTED_PACKAGES}
if versions != EXPECTED_PACKAGES:
raise RuntimeError(
f"direct package versions changed: {versions} != {EXPECTED_PACKAGES}"
)
modules = {
name: importlib.import_module(module_name)
for name, module_name in IMPORT_NAMES.items()
}
torch = modules["torch"]
if torch.version.cuda != "13.0":
raise RuntimeError(f"Torch CUDA build changed: {torch.version.cuda!r}")
cv2_root = (
Path(modules["opencv-python-headless"].__file__).resolve(strict=True).parent
)
native_candidates = sorted(cv2_root.glob("cv2*.so"))
if len(native_candidates) != 1 or not native_candidates[0].is_file():
raise RuntimeError(
f"expected one OpenCV native extension, found {native_candidates}"
)
native = native_candidates[0]
return {
"schema_version": "procedure.ep15_merged3225.runtime_verify.v1",
"status": "PASS",
"python": sys.version.split()[0],
"packages": versions,
"torch_cuda": torch.version.cuda,
"opencv": {
"module_root": str(cv2_root),
"native_path": str(native),
"native_bytes": native.stat().st_size,
"native_sha256": _sha256(native),
},
}
def main() -> int:
print(json.dumps(verify_runtime(), ensure_ascii=False, sort_keys=True))
return 0
if __name__ == "__main__":
raise SystemExit(main())