YAML Metadata Warning:empty or missing yaml metadata in repo card

Check out the documentation for more information.

PROCEDURE ep15 merged3225 corrected-true-time runtime

This package is designed to be downloaded into an empty directory, built as a GPU container, and invoked with one local video plus one question. The package contains the complete 13-file merged model, preprocessing source, inference entrypoint, immutable model manifest, and Docker build recipe.

Model identity and limitation

  • Model: historical PROCEDURE ep15 merged checkpoint3225, full merged Qwen3.5-9B.
  • Exact model inventory: 13 regular files, 18,839,811,919 bytes.
  • Model-manifest SHA256: c372e38348349baa7a20eb3ea771b2ae3f742f764f107c3b9e539d272931677b.
  • This is not checkpoint430. The exact old checkpoint430 adapter bytes are absent and are not reconstructed or substituted here.
  • The ep15 model was historically associated with the old/uniform temporal input path. This runtime deliberately uses the later corrected true-time path. Therefore this package is an operational model+preprocessing combination, not a pure checkpoint ablation and not a claim that a historical ep15 score is reproduced.

Exact preprocessing contract

The runtime applies these steps in order:

  1. PyAV decodes the first video stream in native decode order. Each frame's source time is its integer pts * time_base; missing timestamps or a regressing presentation timeline fail the request.
  2. The full-video ledger keeps native source ordinals 0, 5, 10, ... (stride 5). Optional clip bounds are inclusive source-time bounds. The default is the whole video.
  3. The clipped stride ledger must contain at least 256 entries. Exactly 256 endpoint-inclusive positions are chosen using (i * (M - 1) + 127) // 255, for i=0..255.
  4. Decord, configured with one CPU decode thread, fetches those exact native ordinals. Its timestamp start must agree with the PyAV PTS within 5 ms.
  5. Decord RGB uint8 pixels are converted to BGR and encoded by OpenCV as JPEG at quality 95. The written bytes are compared with an in-memory OpenCV encoding of the same frame.
  6. High-confidence flat black or blue sentinel frames are removed without replacement. At least 74 retained frames are required; gaps remain visible.
  7. Retained absolute source times are rounded half-up to integer milliseconds. The Qwen3.5 processor receives them as frames_indices with fps=1000, so it cannot collapse gaps to a fake uniform clock. The prompt also declares the first and last absolute source time and says not to renormalize them.
  8. Generation is greedy: temperature=0, seed 43, maximum 128 new tokens, maximum model length 32768, thinking disabled, and the ms-swift non-thinking prefix enabled.

Direct dependency versions are recorded in requirements.direct.txt; the resolved 254-package Python 3.11/CUDA 13.0 environment is frozen in requirements.lock.txt. The preprocessing identity used during development was PyAV 18.1.0, Decord 0.6.0, OpenCV headless 5.0.0.93, ms-swift 4.5.2, qwen-vl-utils 0.0.14, Transformers 5.15.1, vLLM 0.26.0, Torch 2.11.0 from the CUDA 13.0 wheel index, NumPy 2.3.5, and Pillow 10.4.0. The headless OpenCV wheel is deliberately reinstalled last because vLLM also declares the GUI OpenCV distribution; the final image receipt must bind the imported cv2 native-library identity. Transitive dependency versions are reported in each inference output; the Docker build is not considered frozen until a successful image smoke receipt names the final image digest and package freeze.

Empty-directory download and verification

The final publication will use the private model repository gwd200/orena-procedure-runtime. Replace <REVISION> with the immutable commit OID announced with the release; do not use main for a reproducible build.

mkdir procedure-runtime && cd procedure-runtime
hf download gwd200/orena-procedure-runtime \
  --revision <REVISION> \
  --local-dir .
podman build --tag procedure-ep15-runtime:<REVISION> .
podman run --rm --network=none \
  procedure-ep15-runtime:<REVISION> verify

verify hashes all 13 model files, requires the exact manifest inventory, imports and version-checks every direct runtime dependency, binds the loaded OpenCV native extension, and hashes both requirement files. It must print a JSON object with "status": "PASS".

One-request inference

The container needs one NVIDIA GPU with enough memory for the 9B model and a writable output mount. H200/H100-80GB or A100-80GB is the intended class; A100-40GB is not a supported target for the frozen 32k configuration.

mkdir -p output
podman run --rm --gpus all --network=none \
  --volume "$PWD/input:/input:ro" \
  --volume "$PWD/output:/output:rw" \
  procedure-ep15-runtime:<REVISION> infer \
  --video /input/example.mp4 \
  --question 'What procedure is performed in the video?' \
  --output /output/result.json

Optional inclusive source-time bounds are decimal seconds:

  --clip-start 12.5 --clip-end 87.25

On success, result.json contains the answer, finish reason, model verification receipt, dependency versions, complete 256-frame JPEG/PTS ledger, blank-filter count, true-time mapping error statistics, template configuration, and sampling configuration. No annotation, gold answer, scorer, dataset index, network service, W&B credential, or project-private path is required.

Preprocess-only inspection

To inspect and retain the frame surface without loading the model:

mkdir -p output
podman run --rm --network=none \
  --volume "$PWD/input:/input:ro" \
  --volume "$PWD/output:/output:rw" \
  procedure-ep15-runtime:<REVISION> preprocess \
  --video /input/example.mp4 \
  --question 'What procedure is performed in the video?' \
  --work-dir /output/preprocessed \
  --output /output/preprocess.json

The preprocess command retains preprocessed/frames/ plus a JSON inference-row surface. infer uses a temporary frame directory unless --work-dir is given.

Failure behavior

The command exits non-zero on model-manifest mismatch, missing/extra model files, timestamp regression, Decord/PyAV ordinal mismatch, a clip with fewer than 256 stride frames, fewer than 74 frames after blank removal, dependency or template failure, model-load failure, or inference failure. It never falls back to a different sampling path, checkpoint, model length, precision, or GPU topology.

Output JSON paths are no-clobber evidence surfaces: an existing output file is never replaced. Choose a fresh output path for every request.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support