--- name: rtvi-byom-porting description: Use when adding, debugging, or validating a bring-your-own VLM in VSS RT-VLM, including custom Hugging Face or NGC checkpoints, vLLM adapters or plugins, model shims, and model-specific runtime dependencies. Not for selecting an already-supported model or ordinary RT-VLM deployment. license: Apache-2.0 metadata: version: "3.3.0-rc0" github-url: "https://github.com/NVIDIA-AI-Blueprints/video-search-and-summarization" tags: "nvidia blueprint rtvi vlm byom vllm model-porting" --- # RTVI BYOM Porting ## Purpose Port a VLM into the VSS RT-VLM service without hard-coding one checkpoint or GPU platform. Prefer configuration, then an RTVI adapter or vLLM plugin, and patch vLLM only when the supported extension points cannot express the model. Use `vss-deploy-dense-captioning` for ordinary deployment or an already-supported model. Use this skill when model architecture, processor, weight mapping, runtime dependencies, or request adaptation requires repository work. ## Model Contract Before changing code, record: - immutable model source and revision, license and access requirements; - architecture, processor, tokenizer, quantization and context length; - vision-token and frame-sampling assumptions; - CUDA architecture, memory, vLLM/runtime and custom-kernel requirements. For a private Hugging Face source, use `HF_TOKEN` only during authenticated download/cache population. Never print it, embed it in `MODEL_PATH`, or bake it into an image. Prove the cached model starts after the temporary credential is removed. If remote model code is required, review it first and pair `VLM_TRUST_REMOTE_CODE=true` with an exact allowlist entry. For the VSS profile, set `RTVI_VLM_MODEL_PATH_ALLOWLIST`; inside the service container this becomes `RTVI_MODEL_PATH_ALLOWLIST`. Likewise, the profile input `RTVI_VLM_ALLOW_UNSAFE_MODEL_CONFIG` becomes `RTVI_ALLOW_UNSAFE_MODEL_CONFIG`; do not enable it without reviewing the blocked config hooks. ## Integration Decision Stop at the first path that works: 1. **Configuration only:** use `VLM_MODEL_TO_USE=vllm-compatible` and `MODEL_PATH=`. A `git:` source is acceptable only for exploration because the develop downloader does not pin Hugging Face revisions; use a revision-pinned mounted snapshot for reproducible evidence. 2. **RTVI adapter:** normalize config, processor, request or response behavior inside `services/rtvi/rt-vlm/` while preserving existing model behavior. 3. **Plugin or shim:** register architecture and deterministic weight mappings without editing vendored vLLM internals. 4. **Version-gated patch:** patch vLLM only after recording why the first three paths cannot work. Keep it optional and add a focused regression test. Use `VLM_MODEL_TO_USE=custom` with `MODEL_IMPLEMENTATION_PATH` only for a custom RTVI model implementation. In the VSS Compose profile these are exposed as `RTVI_VLM_MODEL_TO_USE`, `RTVI_VLM_MODEL_PATH`, and `RTVI_VLM_MODEL_IMPLEMENTATION_PATH`. For source, adapter, plugin, or custom-backend changes, build the RT-VLM image from `services/rtvi/rt-vlm/`, test it with standalone Compose via `RTVI_IMAGE`, then select the same repository and tag in the VSS profile via `VSS_RT_VLM_IMAGE` and `VSS_RT_VLM_TAG`. Record the tested image digest. A host `MODEL_IMPLEMENTATION_PATH` alone is insufficient: the implementation must exist at that path inside the selected image or an explicit Compose bind mount. Read [references/vllm-porting.md](references/vllm-porting.md) before changing model loading, registration, weight mapping, kernels, cache behavior or vLLM. ## Hard Gates - Do not enable eager mode by default. If it is unavoidable, capture the exact blocker, performance impact and removal condition. - Do not bind generic model logic to H100, B200, RTX, Orin, x86 or Jetson. Capability-detect or use existing configuration boundaries. - Keep secrets out of commands, logs, images, reports and committed files. - Do not accept a successful load as proof of a successful port. Output must be legible and grounded for every claimed modality. ## Validation Run the smallest relevant checks in this order: 1. Static checks and focused tests for changed Python, shell and configuration. 2. Start RT-VLM through the canonical VSS Compose/profile path and verify `/v1/health/ready` and `/v1/models`. First use standalone Compose when a revision-pinned host model snapshot must be mounted; the VSS profile does not expose `MODEL_ROOT_DIR` on develop. 3. Smoke-test text, image and video inputs for every claimed modality. Set the explicit media type when testing images rather than relying on video routing. 4. Read [references/quality-gates.md](references/quality-gates.md), retain raw redacted responses, and reject gibberish, repetition or ungrounded claims. 5. Run relevant caption, event-detection or summarization accuracy checks. 6. Record latency, throughput, GPU memory/utilization, eager state and custom kernel state. Use `skills/deployment/rtvi-byom-porting/scripts/byom_port_report.py` to turn observed JSON facts into a compact Markdown report. Evidence is mandatory for a PASS result; the helper does not manufacture it. Run `python3 skills/deployment/rtvi-byom-porting/scripts/tests/test_byom_port_report.py` after changing the helper. ## Completion Contract Report the exact model revision and backend, integration path, eager-mode state, platform gating, smoke/accuracy/performance evidence, remaining blockers and the next bounded validation step.