[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-nvidia-deepstream-sop":3,"mdc-2wn5l7-key":37,"related-repo-nvidia-deepstream-sop":2928,"related-org-nvidia-deepstream-sop":3032},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"deepstream-sop","deploy and monitor DeepStream inference services","Use this skill when building, deploying, evaluating, debugging, or measuring latency for the DeepStream SOP Inference Microservice — a GPU-accelerated FastAPI service that detects whether operators perform assembly-line steps in order via event boundary detection (GEBD) plus VLM classification. Trigger even if the user does not name it: verify operator step sequence, detect missing or out-of-order SOP steps, score factory\u002Fwork-cell video for procedure compliance, run VLM-based SOP checking on industrial cameras, or call \u002Fv1\u002Fchat\u002Fcompletions with a file, RTSP, or Basler camera. Also trigger for its internals: SOPVideoProcessor, DeepStream GEBD model (e.g. DDM) via Triton CAPI, nvds_custom_postprocess, Cosmos Reason 1\u002F2 vLLM, SSE streaming, Kafka NvProto\u002FJSON output, Basler\u002FPylon camera + emulation, Docker compose, chunk-level latency. Do NOT trigger for generic DeepStream pipelines, object detection\u002Ftracking, NIM imports, or video summarization.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},"nvidia","NVIDIA","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fnvidia.png",[12,16,19,20,23],{"name":13,"slug":14,"type":15},"Observability","observability","tag",{"name":17,"slug":18,"type":15},"Deployment","deployment",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"FastAPI","fastapi",{"name":24,"slug":25,"type":15},"Debugging","debugging",2473,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fskills","2026-07-14T05:29:43.239172","CC-BY-4.0 AND Apache-2.0",281,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"AI agent skills published by NVIDIA","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fdeepstream-sop","---\nname: \"deepstream-sop\"\ndescription: >\n  Use this skill when building, deploying, evaluating, debugging, or measuring\n  latency for the DeepStream SOP Inference Microservice — a GPU-accelerated\n  FastAPI service that detects whether operators perform assembly-line steps in\n  order via event boundary detection (GEBD) plus VLM classification. Trigger\n  even if the user does not name it: verify operator step sequence, detect\n  missing or out-of-order SOP steps, score factory\u002Fwork-cell video for\n  procedure compliance, run VLM-based SOP checking on industrial cameras, or\n  call \u002Fv1\u002Fchat\u002Fcompletions with a file, RTSP, or Basler camera. Also trigger\n  for its internals: SOPVideoProcessor, DeepStream GEBD model (e.g. DDM) via\n  Triton CAPI, nvds_custom_postprocess, Cosmos Reason 1\u002F2 vLLM, SSE streaming,\n  Kafka NvProto\u002FJSON output, Basler\u002FPylon camera + emulation, Docker compose,\n  chunk-level latency. Do NOT trigger for generic DeepStream pipelines, object\n  detection\u002Ftracking, NIM imports, or video summarization.\nowner: \"windy@nvidia.com\"\nservice: \"deepstream-sop\"\nversion: \"1.0.0\"\nlicense: \"CC-BY-4.0 AND Apache-2.0\"\nreviewed: \"2026-04-08\"\nmetadata:\n  author: \"Wind Yuan \u003Cwindy@nvidia.com>\"\n  tags:\n    - deepstream\n    - sop\n    - vlm\n    - triton\n    - gpu\n  languages:\n    - python\n  frameworks:\n    - deepstream\n    - triton\n    - fastapi\n  domain: video-analytics\n---\n# DeepStream SOP Inference Microservice Skill\n\nThis skill guides AI coding assistants in building, extending, and debugging the\n**NVIDIA DeepStream SOP (Standard Operating Procedure) Inference Microservice** —\na GPU-accelerated pipeline for temporal action detection and VLM-based SOP compliance\nmonitoring on industrial video feeds.\n\n**Reference repository**: https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fsop-monitoring-blueprints\u002Ftree\u002Fmain\u002Fmicroservices\u002Fsop-inference-bp\n**Local reference code**: `sop-inference-bp\u002F` directory (from a local clone of the repository)\n\n---\n\n## Models\n\nModel-agnostic at both inference stages — swap via env var (and Triton dir for GEBD).\n\n| Stage | Role | Model class | Default | Swap via |\n|------|------|-------------|---------|----------|\n| Stage 1 (CV) | Per-frame boundary scoring → chunk segmentation | **Generic Event Boundary Detection (GEBD)** | **DDM** ([MCG-NJU\u002FDDM](https:\u002F\u002Fgithub.com\u002FMCG-NJU\u002FDDM)) via Triton Python backend | Replace `triton_model_repo\u002F\u003Cmodel>\u002F` + `DDM_MODEL_PATH` (§ 5) |\n| Stage 3 (VLM) | Per-chunk action classification | Vision-language model via vLLM | **Cosmos Reason 1 7B** (Reason 2 also supported) | Set `VLLM_MODEL_PATH` to a different HF ID or local path |\n\n\"GEBD\" = swappable Stage-1 slot; \"DDM\" = the default architecture (terms used interchangeably).\n\n**Chunking is selectable per request** (§ 2): default `ddm-net` uses GEBD; `uniform` produces fixed-length chunks and **bypasses Stage-1 GEBD** (§ 3, § 6). DDM temporal window is configurable via `FRAMES_PER_SIDE` \u002F `SEQUENCE_BATCH` (§ 4, § 5), with optional **TensorRT** (§ 5).\n\n---\n\n## Architecture Overview\n\nRuns in a Docker container (`nvds-action-sop`) alongside a Kafka container. Full diagram: [`references\u002Fsop_architecture.svg`](references\u002Fsop_architecture.svg).\n\n**Data flow through the 4-stage `SOPVideoProcessor` pipeline (per-request):**\n\n```\nInput Sources                    Docker Container: nvds-action-sop\n─────────────                    ──────────────────────────────────────────────────\nVideo Files ──┐                  FastAPI Server (port 8300)\nRTSP Streams ─┤── base64\u002F       ├─ \u002Fv1\u002Fchat\u002Fcompletions → SOPProcessManager\nBasler Camera ┘   file\u002Frtsp\u002F       │\n                  camera           │ ModelInitializer: VLM first, then DDM dummy pipeline\n                                   │ 4 Thread Pools: cv(32), clip(32), vlm(64), vlm_req(64)\n                                   │\n                                   ▼ SOPVideoProcessor (per-request)\n                                   ┌────────────────────────────────────────────────┐\n                                   │ Stage 1: DeepStream Pipeline (GPU)             │\n                                   │   Source → nvstreammux → tee1                  │\n                                   │    ├─[inference] queue1 → nvdspreprocess       │\n                                   │    │  → nvinferserver (Triton CAPI + DDM)      │\n                                   │    │  → InferOutputTensorParser → score_queue  │\n                                   │    ├─[frames]  queue3 → nvvideoconvert         │\n                                   │    │  → capsfilter → appsink                   │\n                                   │    │  → DecodedFrameRetriever → frame_queue    │\n                                   │    └─[RTSP out] queue → convert → H.264 enc    │  (optional, § 18)\n                                   │       → rtppay → udpsink → RTSPServer (§ 18)   │  opt-in only\n                                   │              │ boundary scores                 │\n                                   │              ▼                                 │\n                                   │ Stage 2: Clip Post-Process                     │\n                                   │   Boundary detection → chunk segmentation      │\n                                   │              │ video frames + timestamps        │\n                                   │              ▼                                 │\n                                   │ Stage 3: VLM Inference                         │\n                                   │   Embedded vLLM (Cosmos Reason 1\u002F2)            │\n                                   │   Frame sampling at VLM_FPS → classification   │\n                                   │              │ action labels                    │\n                                   │              ▼                                 │\n                                   │ Stage 4: SOP Checker                           │\n                                   │   Sequence validation → missing\u002Fmisordered     │\n                                   │              │ chunk results                    │\n                                   │              ▼                                 │\n                                   │         final_queue                            │\n                                   └────────────────────────────────────────────────┘\n                                          │\nOutput                                    ▼\n──────                             ┌─────────────────┐\nSSE Stream (chat.completion.chunk) │ Kafka Messages   │\nNon-streaming (chat.completion)    │ (JSON\u002FProtobuf)  │\nPrometheus metrics (\u002Fv1\u002Fmetrics)   └────────┬────────┘\n                                            ▼\n                                   Docker Container: kafka\n                                   (apache\u002Fkafka:3.7.0)\n```\n\n---\n\n## Section Index\n\nEach section is a standalone file in `references\u002F` — load only what your task needs.\n\n| § | File | Responsibility |\n|---|------|---------------|\n| 1 | [`skill_01_fastapi_endpoints.md`](references\u002Fskill_01_fastapi_endpoints.md) | FastAPI endpoints, server init, Prometheus metrics |\n| 2 | [`skill_02_pydantic_schemas.md`](references\u002Fskill_02_pydantic_schemas.md) | Request\u002Fresponse Pydantic models (`api_types.py`) |\n| 3 | [`skill_03_deepstream_pipeline.md`](references\u002Fskill_03_deepstream_pipeline.md) | DeepStream pyservicemaker pipeline, tensor parser, dummy pipeline |\n| 4 | [`skill_04_config_templates.md`](references\u002Fskill_04_config_templates.md) | nvdspreprocess \u002F nvinferserver config templates + rendering |\n| 5 | [`skill_05_triton_ddm_model.md`](references\u002Fskill_05_triton_ddm_model.md) | Triton model repo, config.pbtxt, model.py, ddm_net.py |\n| 5b | [`skill_05b_custom_postprocess.md`](references\u002Fskill_05b_custom_postprocess.md) | C++ postprocess plugin, Makefile, IOptions API |\n| 6 | [`skill_06_sop_process_manager.md`](references\u002Fskill_06_sop_process_manager.md) | SOPProcessManager, SOPVideoProcessor, VLLMInference, Kafka |\n| 6b | [`skill_06b_sop_checker.md`](references\u002Fskill_06b_sop_checker.md) | SOP sequence and checker compliance: MissingNumberDetector, SopCheckerCache, SopCheckerRequest\u002FResponse |\n| 7 | [`skill_07_sse_streaming.md`](references\u002Fskill_07_sse_streaming.md) | SSE generator, stream response formatting, dummy test mode |\n| 8 | [`skill_08_basler_camera.md`](references\u002Fskill_08_basler_camera.md) | Basler camera support, Pylon SDK, emulation, formats |\n| 9 | [`skill_09_docker_build_deploy.md`](references\u002Fskill_09_docker_build_deploy.md) | Docker build, deploy, .env configuration |\n| 10 | [`skill_10_test_suite.md`](references\u002Fskill_10_test_suite.md) | Test suite coverage, assertions, running tests |\n| 11 | [`skill_11_env_variables.md`](references\u002Fskill_11_env_variables.md) | All environment variables reference |\n| 12 | [`skill_12_evaluation_workflow.md`](references\u002Fskill_12_evaluation_workflow.md) | End-to-end eval workflow: static checks, build, launch, tests, API\u002Fcamera\u002FKafka checks, report |\n| 13 | [`skill_13_verification_curl.md`](references\u002Fskill_13_verification_curl.md) | Verification steps and curl examples |\n| 14 | [`skill_14_implementation_checklist.md`](references\u002Fskill_14_implementation_checklist.md) | Implementation checklist: file copy list, generated files, Docker prereqs, verification |\n| 15 | [`skill_15_latency_measurement.md`](references\u002Fskill_15_latency_measurement.md) | TTFC and C2C latency measurement for file input via SSE streaming |\n| 16 | [`skill_16_message_schema.md`](references\u002Fskill_16_message_schema.md) | Kafka message schema selection (`JSON` default vs `NvProtoSchema`) and extending messages with custom data |\n| 17 | [`skill_17_camera_latency_measurement.md`](references\u002Fskill_17_camera_latency_measurement.md) | Camera \u002F live-stream chunk_e2e latency measurement using internal pipeline timestamps |\n| 18 | [`skill_18_rtsp_streaming_output.md`](references\u002Fskill_18_rtsp_streaming_output.md) | **OPT-IN** RTSP streaming output: `tee1`-tap re-stream, `RTSPStreamingServer`, `SW_ENCODER` toggle. Generate **only** when user explicitly requests RTSP |\n\nFor end-to-end evaluation, read § 12 first; load build\u002Ftest\u002Fcurl\u002Flatency\u002Fcamera\u002FKafka as needed.\n\n**§ 18 is opt-in** — generate only when the user explicitly requests RTSP output; otherwise skip § 18 and the `RTSP_*` rules below.\n\n---\n\n## Key Files Map\n\nThe full source-to-target file mapping lives in\n[`skill_14_implementation_checklist.md`](references\u002Fskill_14_implementation_checklist.md):\n\n- **Files copied verbatim** from `references\u002F` (non-trivial algorithms — cycle\n  detection, qwen_vl_utils preprocessing, DeepStream `IOptions` API, protobuf\n  sources) with the rationale per file.\n- **Files copied as adaptable templates** (Dockerfile, compose.yaml, Triton\n  config and `model.py`, `ddm_net.py`, Pylon emulation config, etc.).\n- **Files generated from skill sections** — each annotated with the Critical\n  Rules below that the generation must follow exactly.\n- Docker build prerequisites and post-build verification checklist.\n\nConfig files (`nvds_preprocess_template.txt`, `nvds_inference_template.txt`,\n`vlm_prompts.txt`) are used as-is from `configs\u002F`.\n\nWhen `skill_06b` is loaded, read `configs\u002Factions.json` from the project root and run the\n§ 6b-G generation workflow to produce `nvds_action_detector\u002Fmissing_number_detector.py`.\nIf `configs\u002Factions.json` is absent or invalid, fall back to copying the reference file.\n\n---\n\n## Critical Rules\n\n> Each rule's full detail lives in the linked `skill_NN_*.md` reference file.\n\n| Tag | Rule summary | Details in |\n|-----|---|---|\n| `MANAGER_INIT_IN_MAIN` | `SOPProcessManager` init in `main()` before `uvicorn.run()` — not inside `lifespan()` | `skill_01_fastapi_endpoints.md` |\n| `NAMED_KWARGS` | `create_video_processor()` uses named kwargs; camera args as separate kwargs | `skill_06_sop_process_manager.md` |\n| `LIVE_REQUIRES_STREAM_TRUE` | `stream: true` required for live inputs (RTSP \u002F camera) | `skill_08_basler_camera.md` |\n| `VLM_DISABLED_DISABLES_SOP_CHECKER` | `DISABLE_VLM_INFERENCE=true` auto-disables SOP checker at import | `skill_06_sop_process_manager.md` |\n| `CHUNK_PARAMS_MAX_LENGTH` | `ChunkParams.max_length_sec` = 10s internal; 60s API default | `skill_06_sop_process_manager.md` |\n| `VLM_WARMUP_BEFORE_DDM` | `ModelInitializer`: VLM warmup FIRST, then CV dummy pipeline | `skill_06_sop_process_manager.md` |\n| `VLM_WARMUP_3_FRAMES` | VLM warmup needs 3 frames (`torch.zeros`) — Qwen3VL hangs on \u003C 3 | `skill_06_sop_process_manager.md` |\n| `THREAD_POOL_SIZES` | 4 thread pools: `cv`(32), `clip`(32), `vlm_inference`(64), `vlm_request`(64) | `skill_06_sop_process_manager.md` |\n| `MEDIA_INFO_PYMEDIAINFO` | Media info via `pymediainfo`; live sources set fps=30\u002Fduration=inf directly | `skill_06_sop_process_manager.md` |\n| `CAMERA_EMULATION_PYLON_CAMEMU` | `PYLON_CAMEMU=1` for camera emulation (serial `0815-0000`) | `skill_08_basler_camera.md` |\n| `DEEPSTREAM_LIB_HIDE` | DeepStream lib hide trick: rename lib → lib.tmp during gst-plugin-pylon build | `skill_08_basler_camera.md` |\n| `VLM_REAL_GPU_FRAMES` | VLM uses real GPU frames via `DecodedFrameRetriever`; never `torch.zeros` for inference | `skill_06_sop_process_manager.md` |\n| `BUFFER_RETRIEVER_STATIC_BASE` | `DecodedFrameRetriever` MUST inherit `BufferRetriever` statically via `super().__init__()`; runtime `__class__.__bases__` mutation hangs `pipeline.attach()` | `skill_06_sop_process_manager.md` |\n| `FRAME_RETRIEVER_PRIORITY` | `create_inference_pipeline`: `frame_retriever=` kwarg takes priority over `frame_queue` | `skill_03_deepstream_pipeline.md` |\n| `MUX_ORIGINAL_RESOLUTION` | nvstreammux uses original resolution (not 224); pass `mux_width\u002Fmux_height` from `get_media_info()` (probe live RTSP for non-camera inputs; camera path unaffected) | `skill_03_deepstream_pipeline.md`, `skill_06_sop_process_manager.md` |\n| `FILE_URI_NO_DOUBLE_PREFIX` | `create_inference_pipeline` file source: check `file_path.startswith(\"file:\u002F\u002F\")` before prepending — API passes `file:\u002F\u002F` URLs directly | `skill_03_deepstream_pipeline.md` |\n| `CLEANUP_ON_DISCONNECT` | Pipeline cleanup on client disconnect via `trigger_stop_processors` in `try\u002Ffinally` | `skill_07_sse_streaming.md` |\n| `UNIFIED_CLIP_POST_PROCESS` | Unified `clip_post_process()` for file + live; `stop()` puts `None` in `_score_queue` | `skill_06_sop_process_manager.md` |\n| `ABORT_INFLIGHT_VLM` | Abort in-flight VLM requests on `stop()` via `llm.abort(req_id)` | `skill_06_sop_process_manager.md` |\n| `LOGGER_EXPORT_GET_LOGGER` | `ds_logger.py` must export `get_logger` | `skill_06_sop_process_manager.md` |\n| `KAFKA_USE_CREATE_PRODUCER` | Kafka: use `create_producer()` from `messager.py`; no `Messager` class | `skill_06_sop_process_manager.md` |\n| `USER_PROMPT_PRIORITY` | User request text takes priority over `VLM_PROMPT_PATH` file; `{\"type\":\"text\"}` in the request overrides the config-file prompt | `skill_06_sop_process_manager.md` |\n| `EVAL_USE_CONFIG_PROMPT` | Eval\u002Flatency requests omit request text by default so the VLM uses `VLM_PROMPT_PATH` | `skill_12_evaluation_workflow.md`, `skill_13_verification_curl.md`, `skill_15_latency_measurement.md`, `skill_17_camera_latency_measurement.md` |\n| `CHUNK_SCHEMA_FIELD_NAMES` | Chunk schema: `chunk_idx`, `cv_boundary_score`, `checker_result`; summary `chunk_idx=-1` | `skill_06_sop_process_manager.md` |\n| `SEQUENTIAL_FRAME_DRAIN` | Drain `decoded_frame_queue` (FIFO, shared across chunks) in a SINGLE thread and submit VLM per chunk incrementally; parallel drain steals frames → 0-frame chunks \u002F wrong VLM input | `skill_06_sop_process_manager.md` |\n| `WALL_CLOCK_BEFORE_GPU` | `DecodedFrameRetriever.consume()`: capture `wall_clock_entry = time.time()` BEFORE GPU dlpack; queue 3-tuple `(timestamp, wall_clock_entry, tensor)` | `skill_06_sop_process_manager.md`, `skill_17_camera_latency_measurement.md` |\n| `CHUNK_E2E_PIPELINE_TIMESTAMPS` | Write `pipeline_chunk_end_timestamp` (last frame wall_clock) and `pipeline_vlm_ready_timestamp` (`tm_e2e.now()`) into `chunk_info` for camera latency (§ 17) | `skill_06_sop_process_manager.md`, `skill_17_camera_latency_measurement.md` |\n| `VLM_INFERENCE_REQUIRED_KWARGS` | Every `VLLMInference.inference()` call must pass `video_fps`, `system_prompt`, `max_completion_tokens` | `skill_06_sop_process_manager.md` |\n| `UNIFORM_CHUNKING_BYPASSES_DDM` | `chunking_options.algorithm=\"uniform\"` → fixed-length chunks; `create_inference_pipeline(uniform_chunk=True)` skips DDM but keeps `tee1` fanout; Stage 2 uses `uniform_clip_post_process` | `skill_02_pydantic_schemas.md`, `skill_03_deepstream_pipeline.md`, `skill_06_sop_process_manager.md` |\n| `DDM_TEMPORAL_CONFIGURABLE` | `SLIDING_WINDOWS_SIZE = 2*FRAMES_PER_SIDE + SEQUENCE_BATCH` rendered into preprocess\u002Fnvinferserver (no hard-coded 18); Triton `config.pbtxt` sequence dim `-1` | `skill_04_config_templates.md`, `skill_05_triton_ddm_model.md` |\n| `DDM_TRT_OPTIONAL_PATH` | `DDM_TRT_OPTIMIZATION=true` runs DDM via TensorRT (per-thread contexts, fixed batch = SEQUENCE_BATCH); PyTorch fallback; never both. PyTorch is default | `skill_05_triton_ddm_model.md` |\n| `DDM_TRT_STREAM_ORDERING` | `DDMTensorRTEngine.infer()`: `wait_stream(current)` → `execute_async_v3` → **`torch.cuda.synchronize(device)`** (NOT per-stream). Per-stream sync leaves TRT aux-stream work in flight → gst-CV SIGSEGV (NVBug 6289256) | `skill_05_triton_ddm_model.md` |\n| `METADATA_LICENSE_FROM_FILE` | `\u002Fv1\u002Fmetadata` reads `licenseInfo` from `DS_SOP_LICENSE_PATH` (default `\u002Fopt\u002Fnvidia\u002Fnvds_sop\u002Flicense.txt`); never hard-code license text | `skill_01_fastapi_endpoints.md` |\n| `CAMERA_EMULATION_FRAMES_RGB` | Pylon emulation PNGs must be explicit 3-channel RGB (matches `Emulation_0815-0000.pfs PixelFormat=RGB8Packed`); generate via `nvvideoconvert ! videoconvert ! \"video\u002Fx-raw,format=RGB\" ! pngenc` | `skill_08_basler_camera.md` |\n| `COMPOSE_ENV_PASSTHROUGH` | `docker compose` only substitutes `${VAR}` references; every runtime env var must be explicitly listed under `environment:` to reach the container. | `skill_09_docker_build_deploy.md` |\n\n> The four `RTSP_*` rules below apply **only when the optional RTSP streaming-output feature\n> (§ 18) is requested**. They do not apply to the default build — skip them if the user did\n> not ask for RTSP output.\n\n| `RTSP_OUTPUT_TAPS_TEE1` | RTSP output branch links from the existing `tee1` (added after the main inference link) only when `rtsp_port` is present. | `skill_18_rtsp_streaming_output.md` |\n| `RTSP_LEAKY_QUEUE_TINY` | RTSP branch queue must be `leaky=2` + tiny cap (`max-size-buffers=2`) to prevent backpressure and NVMM pool exhaustion. | `skill_18_rtsp_streaming_output.md` |\n| `RTSP_KEYINT_MAX_30` | RTSP H.264 encoder must set `key-int-max=30` (and B-frames disabled) to allow downstream seeking. | `skill_18_rtsp_streaming_output.md` |\n| `RTSP_ENCODER_FALLBACK` | Select software\u002Fhardware H.264 encoder based on `SW_ENCODER` with MJPEG fallback. | `skill_18_rtsp_streaming_output.md` |\n\n---\n",{"data":38,"body":54},{"name":4,"description":6,"owner":39,"service":4,"version":40,"license":29,"reviewed":41,"metadata":42},"windy@nvidia.com","1.0.0","2026-04-08",{"author":43,"tags":44,"languages":50,"frameworks":52,"domain":53},"Wind Yuan \u003Cwindy@nvidia.com>",[45,46,47,48,49],"deepstream","sop","vlm","triton","gpu",[51],"python",[45,48,22],"video-analytics",{"type":55,"children":56},"root",[57,66,80,113,117,124,129,274,279,335,338,344,368,384,396,399,405,418,1025,1030,1048,1051,1057,1072,1142,1177,1213,1216,1222,1239,2794,2816,2925],{"type":58,"tag":59,"props":60,"children":62},"element","h1",{"id":61},"deepstream-sop-inference-microservice-skill",[63],{"type":64,"value":65},"text","DeepStream SOP Inference Microservice Skill",{"type":58,"tag":67,"props":68,"children":69},"p",{},[70,72,78],{"type":64,"value":71},"This skill guides AI coding assistants in building, extending, and debugging the\n",{"type":58,"tag":73,"props":74,"children":75},"strong",{},[76],{"type":64,"value":77},"NVIDIA DeepStream SOP (Standard Operating Procedure) Inference Microservice",{"type":64,"value":79}," —\na GPU-accelerated pipeline for temporal action detection and VLM-based SOP compliance\nmonitoring on industrial video feeds.",{"type":58,"tag":67,"props":81,"children":82},{},[83,88,90,98,103,104,111],{"type":58,"tag":73,"props":84,"children":85},{},[86],{"type":64,"value":87},"Reference repository",{"type":64,"value":89},": ",{"type":58,"tag":91,"props":92,"children":96},"a",{"href":93,"rel":94},"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fsop-monitoring-blueprints\u002Ftree\u002Fmain\u002Fmicroservices\u002Fsop-inference-bp",[95],"nofollow",[97],{"type":64,"value":93},{"type":58,"tag":73,"props":99,"children":100},{},[101],{"type":64,"value":102},"Local reference code",{"type":64,"value":89},{"type":58,"tag":105,"props":106,"children":108},"code",{"className":107},[],[109],{"type":64,"value":110},"sop-inference-bp\u002F",{"type":64,"value":112}," directory (from a local clone of the repository)",{"type":58,"tag":114,"props":115,"children":116},"hr",{},[],{"type":58,"tag":118,"props":119,"children":121},"h2",{"id":120},"models",[122],{"type":64,"value":123},"Models",{"type":58,"tag":67,"props":125,"children":126},{},[127],{"type":64,"value":128},"Model-agnostic at both inference stages — swap via env var (and Triton dir for GEBD).",{"type":58,"tag":130,"props":131,"children":132},"table",{},[133,167],{"type":58,"tag":134,"props":135,"children":136},"thead",{},[137],{"type":58,"tag":138,"props":139,"children":140},"tr",{},[141,147,152,157,162],{"type":58,"tag":142,"props":143,"children":144},"th",{},[145],{"type":64,"value":146},"Stage",{"type":58,"tag":142,"props":148,"children":149},{},[150],{"type":64,"value":151},"Role",{"type":58,"tag":142,"props":153,"children":154},{},[155],{"type":64,"value":156},"Model class",{"type":58,"tag":142,"props":158,"children":159},{},[160],{"type":64,"value":161},"Default",{"type":58,"tag":142,"props":163,"children":164},{},[165],{"type":64,"value":166},"Swap via",{"type":58,"tag":168,"props":169,"children":170},"tbody",{},[171,233],{"type":58,"tag":138,"props":172,"children":173},{},[174,180,185,193,212],{"type":58,"tag":175,"props":176,"children":177},"td",{},[178],{"type":64,"value":179},"Stage 1 (CV)",{"type":58,"tag":175,"props":181,"children":182},{},[183],{"type":64,"value":184},"Per-frame boundary scoring → chunk segmentation",{"type":58,"tag":175,"props":186,"children":187},{},[188],{"type":58,"tag":73,"props":189,"children":190},{},[191],{"type":64,"value":192},"Generic Event Boundary Detection (GEBD)",{"type":58,"tag":175,"props":194,"children":195},{},[196,201,203,210],{"type":58,"tag":73,"props":197,"children":198},{},[199],{"type":64,"value":200},"DDM",{"type":64,"value":202}," (",{"type":58,"tag":91,"props":204,"children":207},{"href":205,"rel":206},"https:\u002F\u002Fgithub.com\u002FMCG-NJU\u002FDDM",[95],[208],{"type":64,"value":209},"MCG-NJU\u002FDDM",{"type":64,"value":211},") via Triton Python backend",{"type":58,"tag":175,"props":213,"children":214},{},[215,217,223,225,231],{"type":64,"value":216},"Replace ",{"type":58,"tag":105,"props":218,"children":220},{"className":219},[],[221],{"type":64,"value":222},"triton_model_repo\u002F\u003Cmodel>\u002F",{"type":64,"value":224}," + ",{"type":58,"tag":105,"props":226,"children":228},{"className":227},[],[229],{"type":64,"value":230},"DDM_MODEL_PATH",{"type":64,"value":232}," (§ 5)",{"type":58,"tag":138,"props":234,"children":235},{},[236,241,246,251,261],{"type":58,"tag":175,"props":237,"children":238},{},[239],{"type":64,"value":240},"Stage 3 (VLM)",{"type":58,"tag":175,"props":242,"children":243},{},[244],{"type":64,"value":245},"Per-chunk action classification",{"type":58,"tag":175,"props":247,"children":248},{},[249],{"type":64,"value":250},"Vision-language model via vLLM",{"type":58,"tag":175,"props":252,"children":253},{},[254,259],{"type":58,"tag":73,"props":255,"children":256},{},[257],{"type":64,"value":258},"Cosmos Reason 1 7B",{"type":64,"value":260}," (Reason 2 also supported)",{"type":58,"tag":175,"props":262,"children":263},{},[264,266,272],{"type":64,"value":265},"Set ",{"type":58,"tag":105,"props":267,"children":269},{"className":268},[],[270],{"type":64,"value":271},"VLLM_MODEL_PATH",{"type":64,"value":273}," to a different HF ID or local path",{"type":58,"tag":67,"props":275,"children":276},{},[277],{"type":64,"value":278},"\"GEBD\" = swappable Stage-1 slot; \"DDM\" = the default architecture (terms used interchangeably).",{"type":58,"tag":67,"props":280,"children":281},{},[282,287,289,295,297,303,305,310,312,318,320,326,328,333],{"type":58,"tag":73,"props":283,"children":284},{},[285],{"type":64,"value":286},"Chunking is selectable per request",{"type":64,"value":288}," (§ 2): default ",{"type":58,"tag":105,"props":290,"children":292},{"className":291},[],[293],{"type":64,"value":294},"ddm-net",{"type":64,"value":296}," uses GEBD; ",{"type":58,"tag":105,"props":298,"children":300},{"className":299},[],[301],{"type":64,"value":302},"uniform",{"type":64,"value":304}," produces fixed-length chunks and ",{"type":58,"tag":73,"props":306,"children":307},{},[308],{"type":64,"value":309},"bypasses Stage-1 GEBD",{"type":64,"value":311}," (§ 3, § 6). DDM temporal window is configurable via ",{"type":58,"tag":105,"props":313,"children":315},{"className":314},[],[316],{"type":64,"value":317},"FRAMES_PER_SIDE",{"type":64,"value":319}," \u002F ",{"type":58,"tag":105,"props":321,"children":323},{"className":322},[],[324],{"type":64,"value":325},"SEQUENCE_BATCH",{"type":64,"value":327}," (§ 4, § 5), with optional ",{"type":58,"tag":73,"props":329,"children":330},{},[331],{"type":64,"value":332},"TensorRT",{"type":64,"value":334}," (§ 5).",{"type":58,"tag":114,"props":336,"children":337},{},[],{"type":58,"tag":118,"props":339,"children":341},{"id":340},"architecture-overview",[342],{"type":64,"value":343},"Architecture Overview",{"type":58,"tag":67,"props":345,"children":346},{},[347,349,355,357,366],{"type":64,"value":348},"Runs in a Docker container (",{"type":58,"tag":105,"props":350,"children":352},{"className":351},[],[353],{"type":64,"value":354},"nvds-action-sop",{"type":64,"value":356},") alongside a Kafka container. Full diagram: ",{"type":58,"tag":91,"props":358,"children":360},{"href":359},"references\u002Fsop_architecture.svg",[361],{"type":58,"tag":105,"props":362,"children":364},{"className":363},[],[365],{"type":64,"value":359},{"type":64,"value":367},".",{"type":58,"tag":67,"props":369,"children":370},{},[371],{"type":58,"tag":73,"props":372,"children":373},{},[374,376,382],{"type":64,"value":375},"Data flow through the 4-stage ",{"type":58,"tag":105,"props":377,"children":379},{"className":378},[],[380],{"type":64,"value":381},"SOPVideoProcessor",{"type":64,"value":383}," pipeline (per-request):",{"type":58,"tag":385,"props":386,"children":390},"pre",{"className":387,"code":389,"language":64},[388],"language-text","Input Sources                    Docker Container: nvds-action-sop\n─────────────                    ──────────────────────────────────────────────────\nVideo Files ──┐                  FastAPI Server (port 8300)\nRTSP Streams ─┤── base64\u002F       ├─ \u002Fv1\u002Fchat\u002Fcompletions → SOPProcessManager\nBasler Camera ┘   file\u002Frtsp\u002F       │\n                  camera           │ ModelInitializer: VLM first, then DDM dummy pipeline\n                                   │ 4 Thread Pools: cv(32), clip(32), vlm(64), vlm_req(64)\n                                   │\n                                   ▼ SOPVideoProcessor (per-request)\n                                   ┌────────────────────────────────────────────────┐\n                                   │ Stage 1: DeepStream Pipeline (GPU)             │\n                                   │   Source → nvstreammux → tee1                  │\n                                   │    ├─[inference] queue1 → nvdspreprocess       │\n                                   │    │  → nvinferserver (Triton CAPI + DDM)      │\n                                   │    │  → InferOutputTensorParser → score_queue  │\n                                   │    ├─[frames]  queue3 → nvvideoconvert         │\n                                   │    │  → capsfilter → appsink                   │\n                                   │    │  → DecodedFrameRetriever → frame_queue    │\n                                   │    └─[RTSP out] queue → convert → H.264 enc    │  (optional, § 18)\n                                   │       → rtppay → udpsink → RTSPServer (§ 18)   │  opt-in only\n                                   │              │ boundary scores                 │\n                                   │              ▼                                 │\n                                   │ Stage 2: Clip Post-Process                     │\n                                   │   Boundary detection → chunk segmentation      │\n                                   │              │ video frames + timestamps        │\n                                   │              ▼                                 │\n                                   │ Stage 3: VLM Inference                         │\n                                   │   Embedded vLLM (Cosmos Reason 1\u002F2)            │\n                                   │   Frame sampling at VLM_FPS → classification   │\n                                   │              │ action labels                    │\n                                   │              ▼                                 │\n                                   │ Stage 4: SOP Checker                           │\n                                   │   Sequence validation → missing\u002Fmisordered     │\n                                   │              │ chunk results                    │\n                                   │              ▼                                 │\n                                   │         final_queue                            │\n                                   └────────────────────────────────────────────────┘\n                                          │\nOutput                                    ▼\n──────                             ┌─────────────────┐\nSSE Stream (chat.completion.chunk) │ Kafka Messages   │\nNon-streaming (chat.completion)    │ (JSON\u002FProtobuf)  │\nPrometheus metrics (\u002Fv1\u002Fmetrics)   └────────┬────────┘\n                                            ▼\n                                   Docker Container: kafka\n                                   (apache\u002Fkafka:3.7.0)\n",[391],{"type":58,"tag":105,"props":392,"children":394},{"__ignoreMap":393},"",[395],{"type":64,"value":389},{"type":58,"tag":114,"props":397,"children":398},{},[],{"type":58,"tag":118,"props":400,"children":402},{"id":401},"section-index",[403],{"type":64,"value":404},"Section Index",{"type":58,"tag":67,"props":406,"children":407},{},[408,410,416],{"type":64,"value":409},"Each section is a standalone file in ",{"type":58,"tag":105,"props":411,"children":413},{"className":412},[],[414],{"type":64,"value":415},"references\u002F",{"type":64,"value":417}," — load only what your task needs.",{"type":58,"tag":130,"props":419,"children":420},{},[421,442],{"type":58,"tag":134,"props":422,"children":423},{},[424],{"type":58,"tag":138,"props":425,"children":426},{},[427,432,437],{"type":58,"tag":142,"props":428,"children":429},{},[430],{"type":64,"value":431},"§",{"type":58,"tag":142,"props":433,"children":434},{},[435],{"type":64,"value":436},"File",{"type":58,"tag":142,"props":438,"children":439},{},[440],{"type":64,"value":441},"Responsibility",{"type":58,"tag":168,"props":443,"children":444},{},[445,471,505,531,557,583,609,635,661,687,713,739,765,791,817,843,869,895,937,963],{"type":58,"tag":138,"props":446,"children":447},{},[448,453,466],{"type":58,"tag":175,"props":449,"children":450},{},[451],{"type":64,"value":452},"1",{"type":58,"tag":175,"props":454,"children":455},{},[456],{"type":58,"tag":91,"props":457,"children":459},{"href":458},"references\u002Fskill_01_fastapi_endpoints.md",[460],{"type":58,"tag":105,"props":461,"children":463},{"className":462},[],[464],{"type":64,"value":465},"skill_01_fastapi_endpoints.md",{"type":58,"tag":175,"props":467,"children":468},{},[469],{"type":64,"value":470},"FastAPI endpoints, server init, Prometheus metrics",{"type":58,"tag":138,"props":472,"children":473},{},[474,479,492],{"type":58,"tag":175,"props":475,"children":476},{},[477],{"type":64,"value":478},"2",{"type":58,"tag":175,"props":480,"children":481},{},[482],{"type":58,"tag":91,"props":483,"children":485},{"href":484},"references\u002Fskill_02_pydantic_schemas.md",[486],{"type":58,"tag":105,"props":487,"children":489},{"className":488},[],[490],{"type":64,"value":491},"skill_02_pydantic_schemas.md",{"type":58,"tag":175,"props":493,"children":494},{},[495,497,503],{"type":64,"value":496},"Request\u002Fresponse Pydantic models (",{"type":58,"tag":105,"props":498,"children":500},{"className":499},[],[501],{"type":64,"value":502},"api_types.py",{"type":64,"value":504},")",{"type":58,"tag":138,"props":506,"children":507},{},[508,513,526],{"type":58,"tag":175,"props":509,"children":510},{},[511],{"type":64,"value":512},"3",{"type":58,"tag":175,"props":514,"children":515},{},[516],{"type":58,"tag":91,"props":517,"children":519},{"href":518},"references\u002Fskill_03_deepstream_pipeline.md",[520],{"type":58,"tag":105,"props":521,"children":523},{"className":522},[],[524],{"type":64,"value":525},"skill_03_deepstream_pipeline.md",{"type":58,"tag":175,"props":527,"children":528},{},[529],{"type":64,"value":530},"DeepStream pyservicemaker pipeline, tensor parser, dummy pipeline",{"type":58,"tag":138,"props":532,"children":533},{},[534,539,552],{"type":58,"tag":175,"props":535,"children":536},{},[537],{"type":64,"value":538},"4",{"type":58,"tag":175,"props":540,"children":541},{},[542],{"type":58,"tag":91,"props":543,"children":545},{"href":544},"references\u002Fskill_04_config_templates.md",[546],{"type":58,"tag":105,"props":547,"children":549},{"className":548},[],[550],{"type":64,"value":551},"skill_04_config_templates.md",{"type":58,"tag":175,"props":553,"children":554},{},[555],{"type":64,"value":556},"nvdspreprocess \u002F nvinferserver config templates + rendering",{"type":58,"tag":138,"props":558,"children":559},{},[560,565,578],{"type":58,"tag":175,"props":561,"children":562},{},[563],{"type":64,"value":564},"5",{"type":58,"tag":175,"props":566,"children":567},{},[568],{"type":58,"tag":91,"props":569,"children":571},{"href":570},"references\u002Fskill_05_triton_ddm_model.md",[572],{"type":58,"tag":105,"props":573,"children":575},{"className":574},[],[576],{"type":64,"value":577},"skill_05_triton_ddm_model.md",{"type":58,"tag":175,"props":579,"children":580},{},[581],{"type":64,"value":582},"Triton model repo, config.pbtxt, model.py, ddm_net.py",{"type":58,"tag":138,"props":584,"children":585},{},[586,591,604],{"type":58,"tag":175,"props":587,"children":588},{},[589],{"type":64,"value":590},"5b",{"type":58,"tag":175,"props":592,"children":593},{},[594],{"type":58,"tag":91,"props":595,"children":597},{"href":596},"references\u002Fskill_05b_custom_postprocess.md",[598],{"type":58,"tag":105,"props":599,"children":601},{"className":600},[],[602],{"type":64,"value":603},"skill_05b_custom_postprocess.md",{"type":58,"tag":175,"props":605,"children":606},{},[607],{"type":64,"value":608},"C++ postprocess plugin, Makefile, IOptions API",{"type":58,"tag":138,"props":610,"children":611},{},[612,617,630],{"type":58,"tag":175,"props":613,"children":614},{},[615],{"type":64,"value":616},"6",{"type":58,"tag":175,"props":618,"children":619},{},[620],{"type":58,"tag":91,"props":621,"children":623},{"href":622},"references\u002Fskill_06_sop_process_manager.md",[624],{"type":58,"tag":105,"props":625,"children":627},{"className":626},[],[628],{"type":64,"value":629},"skill_06_sop_process_manager.md",{"type":58,"tag":175,"props":631,"children":632},{},[633],{"type":64,"value":634},"SOPProcessManager, SOPVideoProcessor, VLLMInference, Kafka",{"type":58,"tag":138,"props":636,"children":637},{},[638,643,656],{"type":58,"tag":175,"props":639,"children":640},{},[641],{"type":64,"value":642},"6b",{"type":58,"tag":175,"props":644,"children":645},{},[646],{"type":58,"tag":91,"props":647,"children":649},{"href":648},"references\u002Fskill_06b_sop_checker.md",[650],{"type":58,"tag":105,"props":651,"children":653},{"className":652},[],[654],{"type":64,"value":655},"skill_06b_sop_checker.md",{"type":58,"tag":175,"props":657,"children":658},{},[659],{"type":64,"value":660},"SOP sequence and checker compliance: MissingNumberDetector, SopCheckerCache, SopCheckerRequest\u002FResponse",{"type":58,"tag":138,"props":662,"children":663},{},[664,669,682],{"type":58,"tag":175,"props":665,"children":666},{},[667],{"type":64,"value":668},"7",{"type":58,"tag":175,"props":670,"children":671},{},[672],{"type":58,"tag":91,"props":673,"children":675},{"href":674},"references\u002Fskill_07_sse_streaming.md",[676],{"type":58,"tag":105,"props":677,"children":679},{"className":678},[],[680],{"type":64,"value":681},"skill_07_sse_streaming.md",{"type":58,"tag":175,"props":683,"children":684},{},[685],{"type":64,"value":686},"SSE generator, stream response formatting, dummy test mode",{"type":58,"tag":138,"props":688,"children":689},{},[690,695,708],{"type":58,"tag":175,"props":691,"children":692},{},[693],{"type":64,"value":694},"8",{"type":58,"tag":175,"props":696,"children":697},{},[698],{"type":58,"tag":91,"props":699,"children":701},{"href":700},"references\u002Fskill_08_basler_camera.md",[702],{"type":58,"tag":105,"props":703,"children":705},{"className":704},[],[706],{"type":64,"value":707},"skill_08_basler_camera.md",{"type":58,"tag":175,"props":709,"children":710},{},[711],{"type":64,"value":712},"Basler camera support, Pylon SDK, emulation, formats",{"type":58,"tag":138,"props":714,"children":715},{},[716,721,734],{"type":58,"tag":175,"props":717,"children":718},{},[719],{"type":64,"value":720},"9",{"type":58,"tag":175,"props":722,"children":723},{},[724],{"type":58,"tag":91,"props":725,"children":727},{"href":726},"references\u002Fskill_09_docker_build_deploy.md",[728],{"type":58,"tag":105,"props":729,"children":731},{"className":730},[],[732],{"type":64,"value":733},"skill_09_docker_build_deploy.md",{"type":58,"tag":175,"props":735,"children":736},{},[737],{"type":64,"value":738},"Docker build, deploy, .env configuration",{"type":58,"tag":138,"props":740,"children":741},{},[742,747,760],{"type":58,"tag":175,"props":743,"children":744},{},[745],{"type":64,"value":746},"10",{"type":58,"tag":175,"props":748,"children":749},{},[750],{"type":58,"tag":91,"props":751,"children":753},{"href":752},"references\u002Fskill_10_test_suite.md",[754],{"type":58,"tag":105,"props":755,"children":757},{"className":756},[],[758],{"type":64,"value":759},"skill_10_test_suite.md",{"type":58,"tag":175,"props":761,"children":762},{},[763],{"type":64,"value":764},"Test suite coverage, assertions, running tests",{"type":58,"tag":138,"props":766,"children":767},{},[768,773,786],{"type":58,"tag":175,"props":769,"children":770},{},[771],{"type":64,"value":772},"11",{"type":58,"tag":175,"props":774,"children":775},{},[776],{"type":58,"tag":91,"props":777,"children":779},{"href":778},"references\u002Fskill_11_env_variables.md",[780],{"type":58,"tag":105,"props":781,"children":783},{"className":782},[],[784],{"type":64,"value":785},"skill_11_env_variables.md",{"type":58,"tag":175,"props":787,"children":788},{},[789],{"type":64,"value":790},"All environment variables reference",{"type":58,"tag":138,"props":792,"children":793},{},[794,799,812],{"type":58,"tag":175,"props":795,"children":796},{},[797],{"type":64,"value":798},"12",{"type":58,"tag":175,"props":800,"children":801},{},[802],{"type":58,"tag":91,"props":803,"children":805},{"href":804},"references\u002Fskill_12_evaluation_workflow.md",[806],{"type":58,"tag":105,"props":807,"children":809},{"className":808},[],[810],{"type":64,"value":811},"skill_12_evaluation_workflow.md",{"type":58,"tag":175,"props":813,"children":814},{},[815],{"type":64,"value":816},"End-to-end eval workflow: static checks, build, launch, tests, API\u002Fcamera\u002FKafka checks, report",{"type":58,"tag":138,"props":818,"children":819},{},[820,825,838],{"type":58,"tag":175,"props":821,"children":822},{},[823],{"type":64,"value":824},"13",{"type":58,"tag":175,"props":826,"children":827},{},[828],{"type":58,"tag":91,"props":829,"children":831},{"href":830},"references\u002Fskill_13_verification_curl.md",[832],{"type":58,"tag":105,"props":833,"children":835},{"className":834},[],[836],{"type":64,"value":837},"skill_13_verification_curl.md",{"type":58,"tag":175,"props":839,"children":840},{},[841],{"type":64,"value":842},"Verification steps and curl examples",{"type":58,"tag":138,"props":844,"children":845},{},[846,851,864],{"type":58,"tag":175,"props":847,"children":848},{},[849],{"type":64,"value":850},"14",{"type":58,"tag":175,"props":852,"children":853},{},[854],{"type":58,"tag":91,"props":855,"children":857},{"href":856},"references\u002Fskill_14_implementation_checklist.md",[858],{"type":58,"tag":105,"props":859,"children":861},{"className":860},[],[862],{"type":64,"value":863},"skill_14_implementation_checklist.md",{"type":58,"tag":175,"props":865,"children":866},{},[867],{"type":64,"value":868},"Implementation checklist: file copy list, generated files, Docker prereqs, verification",{"type":58,"tag":138,"props":870,"children":871},{},[872,877,890],{"type":58,"tag":175,"props":873,"children":874},{},[875],{"type":64,"value":876},"15",{"type":58,"tag":175,"props":878,"children":879},{},[880],{"type":58,"tag":91,"props":881,"children":883},{"href":882},"references\u002Fskill_15_latency_measurement.md",[884],{"type":58,"tag":105,"props":885,"children":887},{"className":886},[],[888],{"type":64,"value":889},"skill_15_latency_measurement.md",{"type":58,"tag":175,"props":891,"children":892},{},[893],{"type":64,"value":894},"TTFC and C2C latency measurement for file input via SSE streaming",{"type":58,"tag":138,"props":896,"children":897},{},[898,903,916],{"type":58,"tag":175,"props":899,"children":900},{},[901],{"type":64,"value":902},"16",{"type":58,"tag":175,"props":904,"children":905},{},[906],{"type":58,"tag":91,"props":907,"children":909},{"href":908},"references\u002Fskill_16_message_schema.md",[910],{"type":58,"tag":105,"props":911,"children":913},{"className":912},[],[914],{"type":64,"value":915},"skill_16_message_schema.md",{"type":58,"tag":175,"props":917,"children":918},{},[919,921,927,929,935],{"type":64,"value":920},"Kafka message schema selection (",{"type":58,"tag":105,"props":922,"children":924},{"className":923},[],[925],{"type":64,"value":926},"JSON",{"type":64,"value":928}," default vs ",{"type":58,"tag":105,"props":930,"children":932},{"className":931},[],[933],{"type":64,"value":934},"NvProtoSchema",{"type":64,"value":936},") and extending messages with custom data",{"type":58,"tag":138,"props":938,"children":939},{},[940,945,958],{"type":58,"tag":175,"props":941,"children":942},{},[943],{"type":64,"value":944},"17",{"type":58,"tag":175,"props":946,"children":947},{},[948],{"type":58,"tag":91,"props":949,"children":951},{"href":950},"references\u002Fskill_17_camera_latency_measurement.md",[952],{"type":58,"tag":105,"props":953,"children":955},{"className":954},[],[956],{"type":64,"value":957},"skill_17_camera_latency_measurement.md",{"type":58,"tag":175,"props":959,"children":960},{},[961],{"type":64,"value":962},"Camera \u002F live-stream chunk_e2e latency measurement using internal pipeline timestamps",{"type":58,"tag":138,"props":964,"children":965},{},[966,971,984],{"type":58,"tag":175,"props":967,"children":968},{},[969],{"type":64,"value":970},"18",{"type":58,"tag":175,"props":972,"children":973},{},[974],{"type":58,"tag":91,"props":975,"children":977},{"href":976},"references\u002Fskill_18_rtsp_streaming_output.md",[978],{"type":58,"tag":105,"props":979,"children":981},{"className":980},[],[982],{"type":64,"value":983},"skill_18_rtsp_streaming_output.md",{"type":58,"tag":175,"props":985,"children":986},{},[987,992,994,1000,1002,1008,1010,1016,1018,1023],{"type":58,"tag":73,"props":988,"children":989},{},[990],{"type":64,"value":991},"OPT-IN",{"type":64,"value":993}," RTSP streaming output: ",{"type":58,"tag":105,"props":995,"children":997},{"className":996},[],[998],{"type":64,"value":999},"tee1",{"type":64,"value":1001},"-tap re-stream, ",{"type":58,"tag":105,"props":1003,"children":1005},{"className":1004},[],[1006],{"type":64,"value":1007},"RTSPStreamingServer",{"type":64,"value":1009},", ",{"type":58,"tag":105,"props":1011,"children":1013},{"className":1012},[],[1014],{"type":64,"value":1015},"SW_ENCODER",{"type":64,"value":1017}," toggle. Generate ",{"type":58,"tag":73,"props":1019,"children":1020},{},[1021],{"type":64,"value":1022},"only",{"type":64,"value":1024}," when user explicitly requests RTSP",{"type":58,"tag":67,"props":1026,"children":1027},{},[1028],{"type":64,"value":1029},"For end-to-end evaluation, read § 12 first; load build\u002Ftest\u002Fcurl\u002Flatency\u002Fcamera\u002FKafka as needed.",{"type":58,"tag":67,"props":1031,"children":1032},{},[1033,1038,1040,1046],{"type":58,"tag":73,"props":1034,"children":1035},{},[1036],{"type":64,"value":1037},"§ 18 is opt-in",{"type":64,"value":1039}," — generate only when the user explicitly requests RTSP output; otherwise skip § 18 and the ",{"type":58,"tag":105,"props":1041,"children":1043},{"className":1042},[],[1044],{"type":64,"value":1045},"RTSP_*",{"type":64,"value":1047}," rules below.",{"type":58,"tag":114,"props":1049,"children":1050},{},[],{"type":58,"tag":118,"props":1052,"children":1054},{"id":1053},"key-files-map",[1055],{"type":64,"value":1056},"Key Files Map",{"type":58,"tag":67,"props":1058,"children":1059},{},[1060,1062,1070],{"type":64,"value":1061},"The full source-to-target file mapping lives in\n",{"type":58,"tag":91,"props":1063,"children":1064},{"href":856},[1065],{"type":58,"tag":105,"props":1066,"children":1068},{"className":1067},[],[1069],{"type":64,"value":863},{"type":64,"value":1071},":",{"type":58,"tag":1073,"props":1074,"children":1075},"ul",{},[1076,1102,1127,1137],{"type":58,"tag":1077,"props":1078,"children":1079},"li",{},[1080,1085,1087,1092,1094,1100],{"type":58,"tag":73,"props":1081,"children":1082},{},[1083],{"type":64,"value":1084},"Files copied verbatim",{"type":64,"value":1086}," from ",{"type":58,"tag":105,"props":1088,"children":1090},{"className":1089},[],[1091],{"type":64,"value":415},{"type":64,"value":1093}," (non-trivial algorithms — cycle\ndetection, qwen_vl_utils preprocessing, DeepStream ",{"type":58,"tag":105,"props":1095,"children":1097},{"className":1096},[],[1098],{"type":64,"value":1099},"IOptions",{"type":64,"value":1101}," API, protobuf\nsources) with the rationale per file.",{"type":58,"tag":1077,"props":1103,"children":1104},{},[1105,1110,1112,1118,1119,1125],{"type":58,"tag":73,"props":1106,"children":1107},{},[1108],{"type":64,"value":1109},"Files copied as adaptable templates",{"type":64,"value":1111}," (Dockerfile, compose.yaml, Triton\nconfig and ",{"type":58,"tag":105,"props":1113,"children":1115},{"className":1114},[],[1116],{"type":64,"value":1117},"model.py",{"type":64,"value":1009},{"type":58,"tag":105,"props":1120,"children":1122},{"className":1121},[],[1123],{"type":64,"value":1124},"ddm_net.py",{"type":64,"value":1126},", Pylon emulation config, etc.).",{"type":58,"tag":1077,"props":1128,"children":1129},{},[1130,1135],{"type":58,"tag":73,"props":1131,"children":1132},{},[1133],{"type":64,"value":1134},"Files generated from skill sections",{"type":64,"value":1136}," — each annotated with the Critical\nRules below that the generation must follow exactly.",{"type":58,"tag":1077,"props":1138,"children":1139},{},[1140],{"type":64,"value":1141},"Docker build prerequisites and post-build verification checklist.",{"type":58,"tag":67,"props":1143,"children":1144},{},[1145,1147,1153,1154,1160,1162,1168,1170,1176],{"type":64,"value":1146},"Config files (",{"type":58,"tag":105,"props":1148,"children":1150},{"className":1149},[],[1151],{"type":64,"value":1152},"nvds_preprocess_template.txt",{"type":64,"value":1009},{"type":58,"tag":105,"props":1155,"children":1157},{"className":1156},[],[1158],{"type":64,"value":1159},"nvds_inference_template.txt",{"type":64,"value":1161},",\n",{"type":58,"tag":105,"props":1163,"children":1165},{"className":1164},[],[1166],{"type":64,"value":1167},"vlm_prompts.txt",{"type":64,"value":1169},") are used as-is from ",{"type":58,"tag":105,"props":1171,"children":1173},{"className":1172},[],[1174],{"type":64,"value":1175},"configs\u002F",{"type":64,"value":367},{"type":58,"tag":67,"props":1178,"children":1179},{},[1180,1182,1188,1190,1196,1198,1204,1206,1211],{"type":64,"value":1181},"When ",{"type":58,"tag":105,"props":1183,"children":1185},{"className":1184},[],[1186],{"type":64,"value":1187},"skill_06b",{"type":64,"value":1189}," is loaded, read ",{"type":58,"tag":105,"props":1191,"children":1193},{"className":1192},[],[1194],{"type":64,"value":1195},"configs\u002Factions.json",{"type":64,"value":1197}," from the project root and run the\n§ 6b-G generation workflow to produce ",{"type":58,"tag":105,"props":1199,"children":1201},{"className":1200},[],[1202],{"type":64,"value":1203},"nvds_action_detector\u002Fmissing_number_detector.py",{"type":64,"value":1205},".\nIf ",{"type":58,"tag":105,"props":1207,"children":1209},{"className":1208},[],[1210],{"type":64,"value":1195},{"type":64,"value":1212}," is absent or invalid, fall back to copying the reference file.",{"type":58,"tag":114,"props":1214,"children":1215},{},[],{"type":58,"tag":118,"props":1217,"children":1219},{"id":1218},"critical-rules",[1220],{"type":64,"value":1221},"Critical Rules",{"type":58,"tag":1223,"props":1224,"children":1225},"blockquote",{},[1226],{"type":58,"tag":67,"props":1227,"children":1228},{},[1229,1231,1237],{"type":64,"value":1230},"Each rule's full detail lives in the linked ",{"type":58,"tag":105,"props":1232,"children":1234},{"className":1233},[],[1235],{"type":64,"value":1236},"skill_NN_*.md",{"type":64,"value":1238}," reference file.",{"type":58,"tag":130,"props":1240,"children":1241},{},[1242,1263],{"type":58,"tag":134,"props":1243,"children":1244},{},[1245],{"type":58,"tag":138,"props":1246,"children":1247},{},[1248,1253,1258],{"type":58,"tag":142,"props":1249,"children":1250},{},[1251],{"type":64,"value":1252},"Tag",{"type":58,"tag":142,"props":1254,"children":1255},{},[1256],{"type":64,"value":1257},"Rule summary",{"type":58,"tag":142,"props":1259,"children":1260},{},[1261],{"type":64,"value":1262},"Details in",{"type":58,"tag":168,"props":1264,"children":1265},{},[1266,1319,1350,1381,1412,1443,1474,1507,1563,1596,1634,1659,1699,1759,1803,1849,1895,1934,1988,2026,2063,2111,2152,2200,2253,2286,2337,2399,2452,2516,2567,2598,2654,2708,2747],{"type":58,"tag":138,"props":1267,"children":1268},{},[1269,1278,1311],{"type":58,"tag":175,"props":1270,"children":1271},{},[1272],{"type":58,"tag":105,"props":1273,"children":1275},{"className":1274},[],[1276],{"type":64,"value":1277},"MANAGER_INIT_IN_MAIN",{"type":58,"tag":175,"props":1279,"children":1280},{},[1281,1287,1289,1295,1297,1303,1305],{"type":58,"tag":105,"props":1282,"children":1284},{"className":1283},[],[1285],{"type":64,"value":1286},"SOPProcessManager",{"type":64,"value":1288}," init in ",{"type":58,"tag":105,"props":1290,"children":1292},{"className":1291},[],[1293],{"type":64,"value":1294},"main()",{"type":64,"value":1296}," before ",{"type":58,"tag":105,"props":1298,"children":1300},{"className":1299},[],[1301],{"type":64,"value":1302},"uvicorn.run()",{"type":64,"value":1304}," — not inside ",{"type":58,"tag":105,"props":1306,"children":1308},{"className":1307},[],[1309],{"type":64,"value":1310},"lifespan()",{"type":58,"tag":175,"props":1312,"children":1313},{},[1314],{"type":58,"tag":105,"props":1315,"children":1317},{"className":1316},[],[1318],{"type":64,"value":465},{"type":58,"tag":138,"props":1320,"children":1321},{},[1322,1331,1342],{"type":58,"tag":175,"props":1323,"children":1324},{},[1325],{"type":58,"tag":105,"props":1326,"children":1328},{"className":1327},[],[1329],{"type":64,"value":1330},"NAMED_KWARGS",{"type":58,"tag":175,"props":1332,"children":1333},{},[1334,1340],{"type":58,"tag":105,"props":1335,"children":1337},{"className":1336},[],[1338],{"type":64,"value":1339},"create_video_processor()",{"type":64,"value":1341}," uses named kwargs; camera args as separate kwargs",{"type":58,"tag":175,"props":1343,"children":1344},{},[1345],{"type":58,"tag":105,"props":1346,"children":1348},{"className":1347},[],[1349],{"type":64,"value":629},{"type":58,"tag":138,"props":1351,"children":1352},{},[1353,1362,1373],{"type":58,"tag":175,"props":1354,"children":1355},{},[1356],{"type":58,"tag":105,"props":1357,"children":1359},{"className":1358},[],[1360],{"type":64,"value":1361},"LIVE_REQUIRES_STREAM_TRUE",{"type":58,"tag":175,"props":1363,"children":1364},{},[1365,1371],{"type":58,"tag":105,"props":1366,"children":1368},{"className":1367},[],[1369],{"type":64,"value":1370},"stream: true",{"type":64,"value":1372}," required for live inputs (RTSP \u002F camera)",{"type":58,"tag":175,"props":1374,"children":1375},{},[1376],{"type":58,"tag":105,"props":1377,"children":1379},{"className":1378},[],[1380],{"type":64,"value":707},{"type":58,"tag":138,"props":1382,"children":1383},{},[1384,1393,1404],{"type":58,"tag":175,"props":1385,"children":1386},{},[1387],{"type":58,"tag":105,"props":1388,"children":1390},{"className":1389},[],[1391],{"type":64,"value":1392},"VLM_DISABLED_DISABLES_SOP_CHECKER",{"type":58,"tag":175,"props":1394,"children":1395},{},[1396,1402],{"type":58,"tag":105,"props":1397,"children":1399},{"className":1398},[],[1400],{"type":64,"value":1401},"DISABLE_VLM_INFERENCE=true",{"type":64,"value":1403}," auto-disables SOP checker at import",{"type":58,"tag":175,"props":1405,"children":1406},{},[1407],{"type":58,"tag":105,"props":1408,"children":1410},{"className":1409},[],[1411],{"type":64,"value":629},{"type":58,"tag":138,"props":1413,"children":1414},{},[1415,1424,1435],{"type":58,"tag":175,"props":1416,"children":1417},{},[1418],{"type":58,"tag":105,"props":1419,"children":1421},{"className":1420},[],[1422],{"type":64,"value":1423},"CHUNK_PARAMS_MAX_LENGTH",{"type":58,"tag":175,"props":1425,"children":1426},{},[1427,1433],{"type":58,"tag":105,"props":1428,"children":1430},{"className":1429},[],[1431],{"type":64,"value":1432},"ChunkParams.max_length_sec",{"type":64,"value":1434}," = 10s internal; 60s API default",{"type":58,"tag":175,"props":1436,"children":1437},{},[1438],{"type":58,"tag":105,"props":1439,"children":1441},{"className":1440},[],[1442],{"type":64,"value":629},{"type":58,"tag":138,"props":1444,"children":1445},{},[1446,1455,1466],{"type":58,"tag":175,"props":1447,"children":1448},{},[1449],{"type":58,"tag":105,"props":1450,"children":1452},{"className":1451},[],[1453],{"type":64,"value":1454},"VLM_WARMUP_BEFORE_DDM",{"type":58,"tag":175,"props":1456,"children":1457},{},[1458,1464],{"type":58,"tag":105,"props":1459,"children":1461},{"className":1460},[],[1462],{"type":64,"value":1463},"ModelInitializer",{"type":64,"value":1465},": VLM warmup FIRST, then CV dummy pipeline",{"type":58,"tag":175,"props":1467,"children":1468},{},[1469],{"type":58,"tag":105,"props":1470,"children":1472},{"className":1471},[],[1473],{"type":64,"value":629},{"type":58,"tag":138,"props":1475,"children":1476},{},[1477,1486,1499],{"type":58,"tag":175,"props":1478,"children":1479},{},[1480],{"type":58,"tag":105,"props":1481,"children":1483},{"className":1482},[],[1484],{"type":64,"value":1485},"VLM_WARMUP_3_FRAMES",{"type":58,"tag":175,"props":1487,"children":1488},{},[1489,1491,1497],{"type":64,"value":1490},"VLM warmup needs 3 frames (",{"type":58,"tag":105,"props":1492,"children":1494},{"className":1493},[],[1495],{"type":64,"value":1496},"torch.zeros",{"type":64,"value":1498},") — Qwen3VL hangs on \u003C 3",{"type":58,"tag":175,"props":1500,"children":1501},{},[1502],{"type":58,"tag":105,"props":1503,"children":1505},{"className":1504},[],[1506],{"type":64,"value":629},{"type":58,"tag":138,"props":1508,"children":1509},{},[1510,1519,1555],{"type":58,"tag":175,"props":1511,"children":1512},{},[1513],{"type":58,"tag":105,"props":1514,"children":1516},{"className":1515},[],[1517],{"type":64,"value":1518},"THREAD_POOL_SIZES",{"type":58,"tag":175,"props":1520,"children":1521},{},[1522,1524,1530,1532,1538,1539,1545,1547,1553],{"type":64,"value":1523},"4 thread pools: ",{"type":58,"tag":105,"props":1525,"children":1527},{"className":1526},[],[1528],{"type":64,"value":1529},"cv",{"type":64,"value":1531},"(32), ",{"type":58,"tag":105,"props":1533,"children":1535},{"className":1534},[],[1536],{"type":64,"value":1537},"clip",{"type":64,"value":1531},{"type":58,"tag":105,"props":1540,"children":1542},{"className":1541},[],[1543],{"type":64,"value":1544},"vlm_inference",{"type":64,"value":1546},"(64), ",{"type":58,"tag":105,"props":1548,"children":1550},{"className":1549},[],[1551],{"type":64,"value":1552},"vlm_request",{"type":64,"value":1554},"(64)",{"type":58,"tag":175,"props":1556,"children":1557},{},[1558],{"type":58,"tag":105,"props":1559,"children":1561},{"className":1560},[],[1562],{"type":64,"value":629},{"type":58,"tag":138,"props":1564,"children":1565},{},[1566,1575,1588],{"type":58,"tag":175,"props":1567,"children":1568},{},[1569],{"type":58,"tag":105,"props":1570,"children":1572},{"className":1571},[],[1573],{"type":64,"value":1574},"MEDIA_INFO_PYMEDIAINFO",{"type":58,"tag":175,"props":1576,"children":1577},{},[1578,1580,1586],{"type":64,"value":1579},"Media info via ",{"type":58,"tag":105,"props":1581,"children":1583},{"className":1582},[],[1584],{"type":64,"value":1585},"pymediainfo",{"type":64,"value":1587},"; live sources set fps=30\u002Fduration=inf directly",{"type":58,"tag":175,"props":1589,"children":1590},{},[1591],{"type":58,"tag":105,"props":1592,"children":1594},{"className":1593},[],[1595],{"type":64,"value":629},{"type":58,"tag":138,"props":1597,"children":1598},{},[1599,1608,1626],{"type":58,"tag":175,"props":1600,"children":1601},{},[1602],{"type":58,"tag":105,"props":1603,"children":1605},{"className":1604},[],[1606],{"type":64,"value":1607},"CAMERA_EMULATION_PYLON_CAMEMU",{"type":58,"tag":175,"props":1609,"children":1610},{},[1611,1617,1619,1625],{"type":58,"tag":105,"props":1612,"children":1614},{"className":1613},[],[1615],{"type":64,"value":1616},"PYLON_CAMEMU=1",{"type":64,"value":1618}," for camera emulation (serial ",{"type":58,"tag":105,"props":1620,"children":1622},{"className":1621},[],[1623],{"type":64,"value":1624},"0815-0000",{"type":64,"value":504},{"type":58,"tag":175,"props":1627,"children":1628},{},[1629],{"type":58,"tag":105,"props":1630,"children":1632},{"className":1631},[],[1633],{"type":64,"value":707},{"type":58,"tag":138,"props":1635,"children":1636},{},[1637,1646,1651],{"type":58,"tag":175,"props":1638,"children":1639},{},[1640],{"type":58,"tag":105,"props":1641,"children":1643},{"className":1642},[],[1644],{"type":64,"value":1645},"DEEPSTREAM_LIB_HIDE",{"type":58,"tag":175,"props":1647,"children":1648},{},[1649],{"type":64,"value":1650},"DeepStream lib hide trick: rename lib → lib.tmp during gst-plugin-pylon build",{"type":58,"tag":175,"props":1652,"children":1653},{},[1654],{"type":58,"tag":105,"props":1655,"children":1657},{"className":1656},[],[1658],{"type":64,"value":707},{"type":58,"tag":138,"props":1660,"children":1661},{},[1662,1671,1691],{"type":58,"tag":175,"props":1663,"children":1664},{},[1665],{"type":58,"tag":105,"props":1666,"children":1668},{"className":1667},[],[1669],{"type":64,"value":1670},"VLM_REAL_GPU_FRAMES",{"type":58,"tag":175,"props":1672,"children":1673},{},[1674,1676,1682,1684,1689],{"type":64,"value":1675},"VLM uses real GPU frames via ",{"type":58,"tag":105,"props":1677,"children":1679},{"className":1678},[],[1680],{"type":64,"value":1681},"DecodedFrameRetriever",{"type":64,"value":1683},"; never ",{"type":58,"tag":105,"props":1685,"children":1687},{"className":1686},[],[1688],{"type":64,"value":1496},{"type":64,"value":1690}," for inference",{"type":58,"tag":175,"props":1692,"children":1693},{},[1694],{"type":58,"tag":105,"props":1695,"children":1697},{"className":1696},[],[1698],{"type":64,"value":629},{"type":58,"tag":138,"props":1700,"children":1701},{},[1702,1711,1751],{"type":58,"tag":175,"props":1703,"children":1704},{},[1705],{"type":58,"tag":105,"props":1706,"children":1708},{"className":1707},[],[1709],{"type":64,"value":1710},"BUFFER_RETRIEVER_STATIC_BASE",{"type":58,"tag":175,"props":1712,"children":1713},{},[1714,1719,1721,1727,1729,1735,1737,1743,1745],{"type":58,"tag":105,"props":1715,"children":1717},{"className":1716},[],[1718],{"type":64,"value":1681},{"type":64,"value":1720}," MUST inherit ",{"type":58,"tag":105,"props":1722,"children":1724},{"className":1723},[],[1725],{"type":64,"value":1726},"BufferRetriever",{"type":64,"value":1728}," statically via ",{"type":58,"tag":105,"props":1730,"children":1732},{"className":1731},[],[1733],{"type":64,"value":1734},"super().__init__()",{"type":64,"value":1736},"; runtime ",{"type":58,"tag":105,"props":1738,"children":1740},{"className":1739},[],[1741],{"type":64,"value":1742},"__class__.__bases__",{"type":64,"value":1744}," mutation hangs ",{"type":58,"tag":105,"props":1746,"children":1748},{"className":1747},[],[1749],{"type":64,"value":1750},"pipeline.attach()",{"type":58,"tag":175,"props":1752,"children":1753},{},[1754],{"type":58,"tag":105,"props":1755,"children":1757},{"className":1756},[],[1758],{"type":64,"value":629},{"type":58,"tag":138,"props":1760,"children":1761},{},[1762,1771,1795],{"type":58,"tag":175,"props":1763,"children":1764},{},[1765],{"type":58,"tag":105,"props":1766,"children":1768},{"className":1767},[],[1769],{"type":64,"value":1770},"FRAME_RETRIEVER_PRIORITY",{"type":58,"tag":175,"props":1772,"children":1773},{},[1774,1780,1781,1787,1789],{"type":58,"tag":105,"props":1775,"children":1777},{"className":1776},[],[1778],{"type":64,"value":1779},"create_inference_pipeline",{"type":64,"value":89},{"type":58,"tag":105,"props":1782,"children":1784},{"className":1783},[],[1785],{"type":64,"value":1786},"frame_retriever=",{"type":64,"value":1788}," kwarg takes priority over ",{"type":58,"tag":105,"props":1790,"children":1792},{"className":1791},[],[1793],{"type":64,"value":1794},"frame_queue",{"type":58,"tag":175,"props":1796,"children":1797},{},[1798],{"type":58,"tag":105,"props":1799,"children":1801},{"className":1800},[],[1802],{"type":64,"value":525},{"type":58,"tag":138,"props":1804,"children":1805},{},[1806,1815,1835],{"type":58,"tag":175,"props":1807,"children":1808},{},[1809],{"type":58,"tag":105,"props":1810,"children":1812},{"className":1811},[],[1813],{"type":64,"value":1814},"MUX_ORIGINAL_RESOLUTION",{"type":58,"tag":175,"props":1816,"children":1817},{},[1818,1820,1826,1827,1833],{"type":64,"value":1819},"nvstreammux uses original resolution (not 224); pass ",{"type":58,"tag":105,"props":1821,"children":1823},{"className":1822},[],[1824],{"type":64,"value":1825},"mux_width\u002Fmux_height",{"type":64,"value":1086},{"type":58,"tag":105,"props":1828,"children":1830},{"className":1829},[],[1831],{"type":64,"value":1832},"get_media_info()",{"type":64,"value":1834}," (probe live RTSP for non-camera inputs; camera path unaffected)",{"type":58,"tag":175,"props":1836,"children":1837},{},[1838,1843,1844],{"type":58,"tag":105,"props":1839,"children":1841},{"className":1840},[],[1842],{"type":64,"value":525},{"type":64,"value":1009},{"type":58,"tag":105,"props":1845,"children":1847},{"className":1846},[],[1848],{"type":64,"value":629},{"type":58,"tag":138,"props":1850,"children":1851},{},[1852,1861,1887],{"type":58,"tag":175,"props":1853,"children":1854},{},[1855],{"type":58,"tag":105,"props":1856,"children":1858},{"className":1857},[],[1859],{"type":64,"value":1860},"FILE_URI_NO_DOUBLE_PREFIX",{"type":58,"tag":175,"props":1862,"children":1863},{},[1864,1869,1871,1877,1879,1885],{"type":58,"tag":105,"props":1865,"children":1867},{"className":1866},[],[1868],{"type":64,"value":1779},{"type":64,"value":1870}," file source: check ",{"type":58,"tag":105,"props":1872,"children":1874},{"className":1873},[],[1875],{"type":64,"value":1876},"file_path.startswith(\"file:\u002F\u002F\")",{"type":64,"value":1878}," before prepending — API passes ",{"type":58,"tag":105,"props":1880,"children":1882},{"className":1881},[],[1883],{"type":64,"value":1884},"file:\u002F\u002F",{"type":64,"value":1886}," URLs directly",{"type":58,"tag":175,"props":1888,"children":1889},{},[1890],{"type":58,"tag":105,"props":1891,"children":1893},{"className":1892},[],[1894],{"type":64,"value":525},{"type":58,"tag":138,"props":1896,"children":1897},{},[1898,1907,1926],{"type":58,"tag":175,"props":1899,"children":1900},{},[1901],{"type":58,"tag":105,"props":1902,"children":1904},{"className":1903},[],[1905],{"type":64,"value":1906},"CLEANUP_ON_DISCONNECT",{"type":58,"tag":175,"props":1908,"children":1909},{},[1910,1912,1918,1920],{"type":64,"value":1911},"Pipeline cleanup on client disconnect via ",{"type":58,"tag":105,"props":1913,"children":1915},{"className":1914},[],[1916],{"type":64,"value":1917},"trigger_stop_processors",{"type":64,"value":1919}," in ",{"type":58,"tag":105,"props":1921,"children":1923},{"className":1922},[],[1924],{"type":64,"value":1925},"try\u002Ffinally",{"type":58,"tag":175,"props":1927,"children":1928},{},[1929],{"type":58,"tag":105,"props":1930,"children":1932},{"className":1931},[],[1933],{"type":64,"value":681},{"type":58,"tag":138,"props":1935,"children":1936},{},[1937,1946,1980],{"type":58,"tag":175,"props":1938,"children":1939},{},[1940],{"type":58,"tag":105,"props":1941,"children":1943},{"className":1942},[],[1944],{"type":64,"value":1945},"UNIFIED_CLIP_POST_PROCESS",{"type":58,"tag":175,"props":1947,"children":1948},{},[1949,1951,1957,1959,1965,1967,1973,1974],{"type":64,"value":1950},"Unified ",{"type":58,"tag":105,"props":1952,"children":1954},{"className":1953},[],[1955],{"type":64,"value":1956},"clip_post_process()",{"type":64,"value":1958}," for file + live; ",{"type":58,"tag":105,"props":1960,"children":1962},{"className":1961},[],[1963],{"type":64,"value":1964},"stop()",{"type":64,"value":1966}," puts ",{"type":58,"tag":105,"props":1968,"children":1970},{"className":1969},[],[1971],{"type":64,"value":1972},"None",{"type":64,"value":1919},{"type":58,"tag":105,"props":1975,"children":1977},{"className":1976},[],[1978],{"type":64,"value":1979},"_score_queue",{"type":58,"tag":175,"props":1981,"children":1982},{},[1983],{"type":58,"tag":105,"props":1984,"children":1986},{"className":1985},[],[1987],{"type":64,"value":629},{"type":58,"tag":138,"props":1989,"children":1990},{},[1991,2000,2018],{"type":58,"tag":175,"props":1992,"children":1993},{},[1994],{"type":58,"tag":105,"props":1995,"children":1997},{"className":1996},[],[1998],{"type":64,"value":1999},"ABORT_INFLIGHT_VLM",{"type":58,"tag":175,"props":2001,"children":2002},{},[2003,2005,2010,2012],{"type":64,"value":2004},"Abort in-flight VLM requests on ",{"type":58,"tag":105,"props":2006,"children":2008},{"className":2007},[],[2009],{"type":64,"value":1964},{"type":64,"value":2011}," via ",{"type":58,"tag":105,"props":2013,"children":2015},{"className":2014},[],[2016],{"type":64,"value":2017},"llm.abort(req_id)",{"type":58,"tag":175,"props":2019,"children":2020},{},[2021],{"type":58,"tag":105,"props":2022,"children":2024},{"className":2023},[],[2025],{"type":64,"value":629},{"type":58,"tag":138,"props":2027,"children":2028},{},[2029,2038,2055],{"type":58,"tag":175,"props":2030,"children":2031},{},[2032],{"type":58,"tag":105,"props":2033,"children":2035},{"className":2034},[],[2036],{"type":64,"value":2037},"LOGGER_EXPORT_GET_LOGGER",{"type":58,"tag":175,"props":2039,"children":2040},{},[2041,2047,2049],{"type":58,"tag":105,"props":2042,"children":2044},{"className":2043},[],[2045],{"type":64,"value":2046},"ds_logger.py",{"type":64,"value":2048}," must export ",{"type":58,"tag":105,"props":2050,"children":2052},{"className":2051},[],[2053],{"type":64,"value":2054},"get_logger",{"type":58,"tag":175,"props":2056,"children":2057},{},[2058],{"type":58,"tag":105,"props":2059,"children":2061},{"className":2060},[],[2062],{"type":64,"value":629},{"type":58,"tag":138,"props":2064,"children":2065},{},[2066,2075,2103],{"type":58,"tag":175,"props":2067,"children":2068},{},[2069],{"type":58,"tag":105,"props":2070,"children":2072},{"className":2071},[],[2073],{"type":64,"value":2074},"KAFKA_USE_CREATE_PRODUCER",{"type":58,"tag":175,"props":2076,"children":2077},{},[2078,2080,2086,2087,2093,2095,2101],{"type":64,"value":2079},"Kafka: use ",{"type":58,"tag":105,"props":2081,"children":2083},{"className":2082},[],[2084],{"type":64,"value":2085},"create_producer()",{"type":64,"value":1086},{"type":58,"tag":105,"props":2088,"children":2090},{"className":2089},[],[2091],{"type":64,"value":2092},"messager.py",{"type":64,"value":2094},"; no ",{"type":58,"tag":105,"props":2096,"children":2098},{"className":2097},[],[2099],{"type":64,"value":2100},"Messager",{"type":64,"value":2102}," class",{"type":58,"tag":175,"props":2104,"children":2105},{},[2106],{"type":58,"tag":105,"props":2107,"children":2109},{"className":2108},[],[2110],{"type":64,"value":629},{"type":58,"tag":138,"props":2112,"children":2113},{},[2114,2123,2144],{"type":58,"tag":175,"props":2115,"children":2116},{},[2117],{"type":58,"tag":105,"props":2118,"children":2120},{"className":2119},[],[2121],{"type":64,"value":2122},"USER_PROMPT_PRIORITY",{"type":58,"tag":175,"props":2124,"children":2125},{},[2126,2128,2134,2136,2142],{"type":64,"value":2127},"User request text takes priority over ",{"type":58,"tag":105,"props":2129,"children":2131},{"className":2130},[],[2132],{"type":64,"value":2133},"VLM_PROMPT_PATH",{"type":64,"value":2135}," file; ",{"type":58,"tag":105,"props":2137,"children":2139},{"className":2138},[],[2140],{"type":64,"value":2141},"{\"type\":\"text\"}",{"type":64,"value":2143}," in the request overrides the config-file prompt",{"type":58,"tag":175,"props":2145,"children":2146},{},[2147],{"type":58,"tag":105,"props":2148,"children":2150},{"className":2149},[],[2151],{"type":64,"value":629},{"type":58,"tag":138,"props":2153,"children":2154},{},[2155,2164,2174],{"type":58,"tag":175,"props":2156,"children":2157},{},[2158],{"type":58,"tag":105,"props":2159,"children":2161},{"className":2160},[],[2162],{"type":64,"value":2163},"EVAL_USE_CONFIG_PROMPT",{"type":58,"tag":175,"props":2165,"children":2166},{},[2167,2169],{"type":64,"value":2168},"Eval\u002Flatency requests omit request text by default so the VLM uses ",{"type":58,"tag":105,"props":2170,"children":2172},{"className":2171},[],[2173],{"type":64,"value":2133},{"type":58,"tag":175,"props":2175,"children":2176},{},[2177,2182,2183,2188,2189,2194,2195],{"type":58,"tag":105,"props":2178,"children":2180},{"className":2179},[],[2181],{"type":64,"value":811},{"type":64,"value":1009},{"type":58,"tag":105,"props":2184,"children":2186},{"className":2185},[],[2187],{"type":64,"value":837},{"type":64,"value":1009},{"type":58,"tag":105,"props":2190,"children":2192},{"className":2191},[],[2193],{"type":64,"value":889},{"type":64,"value":1009},{"type":58,"tag":105,"props":2196,"children":2198},{"className":2197},[],[2199],{"type":64,"value":957},{"type":58,"tag":138,"props":2201,"children":2202},{},[2203,2212,2245],{"type":58,"tag":175,"props":2204,"children":2205},{},[2206],{"type":58,"tag":105,"props":2207,"children":2209},{"className":2208},[],[2210],{"type":64,"value":2211},"CHUNK_SCHEMA_FIELD_NAMES",{"type":58,"tag":175,"props":2213,"children":2214},{},[2215,2217,2223,2224,2230,2231,2237,2239],{"type":64,"value":2216},"Chunk schema: ",{"type":58,"tag":105,"props":2218,"children":2220},{"className":2219},[],[2221],{"type":64,"value":2222},"chunk_idx",{"type":64,"value":1009},{"type":58,"tag":105,"props":2225,"children":2227},{"className":2226},[],[2228],{"type":64,"value":2229},"cv_boundary_score",{"type":64,"value":1009},{"type":58,"tag":105,"props":2232,"children":2234},{"className":2233},[],[2235],{"type":64,"value":2236},"checker_result",{"type":64,"value":2238},"; summary ",{"type":58,"tag":105,"props":2240,"children":2242},{"className":2241},[],[2243],{"type":64,"value":2244},"chunk_idx=-1",{"type":58,"tag":175,"props":2246,"children":2247},{},[2248],{"type":58,"tag":105,"props":2249,"children":2251},{"className":2250},[],[2252],{"type":64,"value":629},{"type":58,"tag":138,"props":2254,"children":2255},{},[2256,2265,2278],{"type":58,"tag":175,"props":2257,"children":2258},{},[2259],{"type":58,"tag":105,"props":2260,"children":2262},{"className":2261},[],[2263],{"type":64,"value":2264},"SEQUENTIAL_FRAME_DRAIN",{"type":58,"tag":175,"props":2266,"children":2267},{},[2268,2270,2276],{"type":64,"value":2269},"Drain ",{"type":58,"tag":105,"props":2271,"children":2273},{"className":2272},[],[2274],{"type":64,"value":2275},"decoded_frame_queue",{"type":64,"value":2277}," (FIFO, shared across chunks) in a SINGLE thread and submit VLM per chunk incrementally; parallel drain steals frames → 0-frame chunks \u002F wrong VLM input",{"type":58,"tag":175,"props":2279,"children":2280},{},[2281],{"type":58,"tag":105,"props":2282,"children":2284},{"className":2283},[],[2285],{"type":64,"value":629},{"type":58,"tag":138,"props":2287,"children":2288},{},[2289,2298,2323],{"type":58,"tag":175,"props":2290,"children":2291},{},[2292],{"type":58,"tag":105,"props":2293,"children":2295},{"className":2294},[],[2296],{"type":64,"value":2297},"WALL_CLOCK_BEFORE_GPU",{"type":58,"tag":175,"props":2299,"children":2300},{},[2301,2307,2309,2315,2317],{"type":58,"tag":105,"props":2302,"children":2304},{"className":2303},[],[2305],{"type":64,"value":2306},"DecodedFrameRetriever.consume()",{"type":64,"value":2308},": capture ",{"type":58,"tag":105,"props":2310,"children":2312},{"className":2311},[],[2313],{"type":64,"value":2314},"wall_clock_entry = time.time()",{"type":64,"value":2316}," BEFORE GPU dlpack; queue 3-tuple ",{"type":58,"tag":105,"props":2318,"children":2320},{"className":2319},[],[2321],{"type":64,"value":2322},"(timestamp, wall_clock_entry, tensor)",{"type":58,"tag":175,"props":2324,"children":2325},{},[2326,2331,2332],{"type":58,"tag":105,"props":2327,"children":2329},{"className":2328},[],[2330],{"type":64,"value":629},{"type":64,"value":1009},{"type":58,"tag":105,"props":2333,"children":2335},{"className":2334},[],[2336],{"type":64,"value":957},{"type":58,"tag":138,"props":2338,"children":2339},{},[2340,2349,2385],{"type":58,"tag":175,"props":2341,"children":2342},{},[2343],{"type":58,"tag":105,"props":2344,"children":2346},{"className":2345},[],[2347],{"type":64,"value":2348},"CHUNK_E2E_PIPELINE_TIMESTAMPS",{"type":58,"tag":175,"props":2350,"children":2351},{},[2352,2354,2360,2362,2368,2369,2375,2377,2383],{"type":64,"value":2353},"Write ",{"type":58,"tag":105,"props":2355,"children":2357},{"className":2356},[],[2358],{"type":64,"value":2359},"pipeline_chunk_end_timestamp",{"type":64,"value":2361}," (last frame wall_clock) and ",{"type":58,"tag":105,"props":2363,"children":2365},{"className":2364},[],[2366],{"type":64,"value":2367},"pipeline_vlm_ready_timestamp",{"type":64,"value":202},{"type":58,"tag":105,"props":2370,"children":2372},{"className":2371},[],[2373],{"type":64,"value":2374},"tm_e2e.now()",{"type":64,"value":2376},") into ",{"type":58,"tag":105,"props":2378,"children":2380},{"className":2379},[],[2381],{"type":64,"value":2382},"chunk_info",{"type":64,"value":2384}," for camera latency (§ 17)",{"type":58,"tag":175,"props":2386,"children":2387},{},[2388,2393,2394],{"type":58,"tag":105,"props":2389,"children":2391},{"className":2390},[],[2392],{"type":64,"value":629},{"type":64,"value":1009},{"type":58,"tag":105,"props":2395,"children":2397},{"className":2396},[],[2398],{"type":64,"value":957},{"type":58,"tag":138,"props":2400,"children":2401},{},[2402,2411,2444],{"type":58,"tag":175,"props":2403,"children":2404},{},[2405],{"type":58,"tag":105,"props":2406,"children":2408},{"className":2407},[],[2409],{"type":64,"value":2410},"VLM_INFERENCE_REQUIRED_KWARGS",{"type":58,"tag":175,"props":2412,"children":2413},{},[2414,2416,2422,2424,2430,2431,2437,2438],{"type":64,"value":2415},"Every ",{"type":58,"tag":105,"props":2417,"children":2419},{"className":2418},[],[2420],{"type":64,"value":2421},"VLLMInference.inference()",{"type":64,"value":2423}," call must pass ",{"type":58,"tag":105,"props":2425,"children":2427},{"className":2426},[],[2428],{"type":64,"value":2429},"video_fps",{"type":64,"value":1009},{"type":58,"tag":105,"props":2432,"children":2434},{"className":2433},[],[2435],{"type":64,"value":2436},"system_prompt",{"type":64,"value":1009},{"type":58,"tag":105,"props":2439,"children":2441},{"className":2440},[],[2442],{"type":64,"value":2443},"max_completion_tokens",{"type":58,"tag":175,"props":2445,"children":2446},{},[2447],{"type":58,"tag":105,"props":2448,"children":2450},{"className":2449},[],[2451],{"type":64,"value":629},{"type":58,"tag":138,"props":2453,"children":2454},{},[2455,2464,2496],{"type":58,"tag":175,"props":2456,"children":2457},{},[2458],{"type":58,"tag":105,"props":2459,"children":2461},{"className":2460},[],[2462],{"type":64,"value":2463},"UNIFORM_CHUNKING_BYPASSES_DDM",{"type":58,"tag":175,"props":2465,"children":2466},{},[2467,2473,2475,2481,2483,2488,2490],{"type":58,"tag":105,"props":2468,"children":2470},{"className":2469},[],[2471],{"type":64,"value":2472},"chunking_options.algorithm=\"uniform\"",{"type":64,"value":2474}," → fixed-length chunks; ",{"type":58,"tag":105,"props":2476,"children":2478},{"className":2477},[],[2479],{"type":64,"value":2480},"create_inference_pipeline(uniform_chunk=True)",{"type":64,"value":2482}," skips DDM but keeps ",{"type":58,"tag":105,"props":2484,"children":2486},{"className":2485},[],[2487],{"type":64,"value":999},{"type":64,"value":2489}," fanout; Stage 2 uses ",{"type":58,"tag":105,"props":2491,"children":2493},{"className":2492},[],[2494],{"type":64,"value":2495},"uniform_clip_post_process",{"type":58,"tag":175,"props":2497,"children":2498},{},[2499,2504,2505,2510,2511],{"type":58,"tag":105,"props":2500,"children":2502},{"className":2501},[],[2503],{"type":64,"value":491},{"type":64,"value":1009},{"type":58,"tag":105,"props":2506,"children":2508},{"className":2507},[],[2509],{"type":64,"value":525},{"type":64,"value":1009},{"type":58,"tag":105,"props":2512,"children":2514},{"className":2513},[],[2515],{"type":64,"value":629},{"type":58,"tag":138,"props":2517,"children":2518},{},[2519,2528,2553],{"type":58,"tag":175,"props":2520,"children":2521},{},[2522],{"type":58,"tag":105,"props":2523,"children":2525},{"className":2524},[],[2526],{"type":64,"value":2527},"DDM_TEMPORAL_CONFIGURABLE",{"type":58,"tag":175,"props":2529,"children":2530},{},[2531,2537,2539,2545,2547],{"type":58,"tag":105,"props":2532,"children":2534},{"className":2533},[],[2535],{"type":64,"value":2536},"SLIDING_WINDOWS_SIZE = 2*FRAMES_PER_SIDE + SEQUENCE_BATCH",{"type":64,"value":2538}," rendered into preprocess\u002Fnvinferserver (no hard-coded 18); Triton ",{"type":58,"tag":105,"props":2540,"children":2542},{"className":2541},[],[2543],{"type":64,"value":2544},"config.pbtxt",{"type":64,"value":2546}," sequence dim ",{"type":58,"tag":105,"props":2548,"children":2550},{"className":2549},[],[2551],{"type":64,"value":2552},"-1",{"type":58,"tag":175,"props":2554,"children":2555},{},[2556,2561,2562],{"type":58,"tag":105,"props":2557,"children":2559},{"className":2558},[],[2560],{"type":64,"value":551},{"type":64,"value":1009},{"type":58,"tag":105,"props":2563,"children":2565},{"className":2564},[],[2566],{"type":64,"value":577},{"type":58,"tag":138,"props":2568,"children":2569},{},[2570,2579,2590],{"type":58,"tag":175,"props":2571,"children":2572},{},[2573],{"type":58,"tag":105,"props":2574,"children":2576},{"className":2575},[],[2577],{"type":64,"value":2578},"DDM_TRT_OPTIONAL_PATH",{"type":58,"tag":175,"props":2580,"children":2581},{},[2582,2588],{"type":58,"tag":105,"props":2583,"children":2585},{"className":2584},[],[2586],{"type":64,"value":2587},"DDM_TRT_OPTIMIZATION=true",{"type":64,"value":2589}," runs DDM via TensorRT (per-thread contexts, fixed batch = SEQUENCE_BATCH); PyTorch fallback; never both. PyTorch is default",{"type":58,"tag":175,"props":2591,"children":2592},{},[2593],{"type":58,"tag":105,"props":2594,"children":2596},{"className":2595},[],[2597],{"type":64,"value":577},{"type":58,"tag":138,"props":2599,"children":2600},{},[2601,2610,2646],{"type":58,"tag":175,"props":2602,"children":2603},{},[2604],{"type":58,"tag":105,"props":2605,"children":2607},{"className":2606},[],[2608],{"type":64,"value":2609},"DDM_TRT_STREAM_ORDERING",{"type":58,"tag":175,"props":2611,"children":2612},{},[2613,2619,2620,2626,2628,2634,2635,2644],{"type":58,"tag":105,"props":2614,"children":2616},{"className":2615},[],[2617],{"type":64,"value":2618},"DDMTensorRTEngine.infer()",{"type":64,"value":89},{"type":58,"tag":105,"props":2621,"children":2623},{"className":2622},[],[2624],{"type":64,"value":2625},"wait_stream(current)",{"type":64,"value":2627}," → ",{"type":58,"tag":105,"props":2629,"children":2631},{"className":2630},[],[2632],{"type":64,"value":2633},"execute_async_v3",{"type":64,"value":2627},{"type":58,"tag":73,"props":2636,"children":2637},{},[2638],{"type":58,"tag":105,"props":2639,"children":2641},{"className":2640},[],[2642],{"type":64,"value":2643},"torch.cuda.synchronize(device)",{"type":64,"value":2645}," (NOT per-stream). Per-stream sync leaves TRT aux-stream work in flight → gst-CV SIGSEGV (NVBug 6289256)",{"type":58,"tag":175,"props":2647,"children":2648},{},[2649],{"type":58,"tag":105,"props":2650,"children":2652},{"className":2651},[],[2653],{"type":64,"value":577},{"type":58,"tag":138,"props":2655,"children":2656},{},[2657,2666,2700],{"type":58,"tag":175,"props":2658,"children":2659},{},[2660],{"type":58,"tag":105,"props":2661,"children":2663},{"className":2662},[],[2664],{"type":64,"value":2665},"METADATA_LICENSE_FROM_FILE",{"type":58,"tag":175,"props":2667,"children":2668},{},[2669,2675,2677,2683,2684,2690,2692,2698],{"type":58,"tag":105,"props":2670,"children":2672},{"className":2671},[],[2673],{"type":64,"value":2674},"\u002Fv1\u002Fmetadata",{"type":64,"value":2676}," reads ",{"type":58,"tag":105,"props":2678,"children":2680},{"className":2679},[],[2681],{"type":64,"value":2682},"licenseInfo",{"type":64,"value":1086},{"type":58,"tag":105,"props":2685,"children":2687},{"className":2686},[],[2688],{"type":64,"value":2689},"DS_SOP_LICENSE_PATH",{"type":64,"value":2691}," (default ",{"type":58,"tag":105,"props":2693,"children":2695},{"className":2694},[],[2696],{"type":64,"value":2697},"\u002Fopt\u002Fnvidia\u002Fnvds_sop\u002Flicense.txt",{"type":64,"value":2699},"); never hard-code license text",{"type":58,"tag":175,"props":2701,"children":2702},{},[2703],{"type":58,"tag":105,"props":2704,"children":2706},{"className":2705},[],[2707],{"type":64,"value":465},{"type":58,"tag":138,"props":2709,"children":2710},{},[2711,2720,2739],{"type":58,"tag":175,"props":2712,"children":2713},{},[2714],{"type":58,"tag":105,"props":2715,"children":2717},{"className":2716},[],[2718],{"type":64,"value":2719},"CAMERA_EMULATION_FRAMES_RGB",{"type":58,"tag":175,"props":2721,"children":2722},{},[2723,2725,2731,2733],{"type":64,"value":2724},"Pylon emulation PNGs must be explicit 3-channel RGB (matches ",{"type":58,"tag":105,"props":2726,"children":2728},{"className":2727},[],[2729],{"type":64,"value":2730},"Emulation_0815-0000.pfs PixelFormat=RGB8Packed",{"type":64,"value":2732},"); generate via ",{"type":58,"tag":105,"props":2734,"children":2736},{"className":2735},[],[2737],{"type":64,"value":2738},"nvvideoconvert ! videoconvert ! \"video\u002Fx-raw,format=RGB\" ! pngenc",{"type":58,"tag":175,"props":2740,"children":2741},{},[2742],{"type":58,"tag":105,"props":2743,"children":2745},{"className":2744},[],[2746],{"type":64,"value":707},{"type":58,"tag":138,"props":2748,"children":2749},{},[2750,2759,2786],{"type":58,"tag":175,"props":2751,"children":2752},{},[2753],{"type":58,"tag":105,"props":2754,"children":2756},{"className":2755},[],[2757],{"type":64,"value":2758},"COMPOSE_ENV_PASSTHROUGH",{"type":58,"tag":175,"props":2760,"children":2761},{},[2762,2768,2770,2776,2778,2784],{"type":58,"tag":105,"props":2763,"children":2765},{"className":2764},[],[2766],{"type":64,"value":2767},"docker compose",{"type":64,"value":2769}," only substitutes ",{"type":58,"tag":105,"props":2771,"children":2773},{"className":2772},[],[2774],{"type":64,"value":2775},"${VAR}",{"type":64,"value":2777}," references; every runtime env var must be explicitly listed under ",{"type":58,"tag":105,"props":2779,"children":2781},{"className":2780},[],[2782],{"type":64,"value":2783},"environment:",{"type":64,"value":2785}," to reach the container.",{"type":58,"tag":175,"props":2787,"children":2788},{},[2789],{"type":58,"tag":105,"props":2790,"children":2792},{"className":2791},[],[2793],{"type":64,"value":733},{"type":58,"tag":1223,"props":2795,"children":2796},{},[2797],{"type":58,"tag":67,"props":2798,"children":2799},{},[2800,2802,2807,2809,2814],{"type":64,"value":2801},"The four ",{"type":58,"tag":105,"props":2803,"children":2805},{"className":2804},[],[2806],{"type":64,"value":1045},{"type":64,"value":2808}," rules below apply ",{"type":58,"tag":73,"props":2810,"children":2811},{},[2812],{"type":64,"value":2813},"only when the optional RTSP streaming-output feature\n(§ 18) is requested",{"type":64,"value":2815},". They do not apply to the default build — skip them if the user did\nnot ask for RTSP output.",{"type":58,"tag":67,"props":2817,"children":2818},{},[2819,2821,2827,2829,2834,2836,2842,2844,2849,2851,2857,2859,2865,2867,2873,2875,2880,2881,2887,2889,2895,2897,2902,2903,2909,2911,2916,2918,2923],{"type":64,"value":2820},"| ",{"type":58,"tag":105,"props":2822,"children":2824},{"className":2823},[],[2825],{"type":64,"value":2826},"RTSP_OUTPUT_TAPS_TEE1",{"type":64,"value":2828}," | RTSP output branch links from the existing ",{"type":58,"tag":105,"props":2830,"children":2832},{"className":2831},[],[2833],{"type":64,"value":999},{"type":64,"value":2835}," (added after the main inference link) only when ",{"type":58,"tag":105,"props":2837,"children":2839},{"className":2838},[],[2840],{"type":64,"value":2841},"rtsp_port",{"type":64,"value":2843}," is present. | ",{"type":58,"tag":105,"props":2845,"children":2847},{"className":2846},[],[2848],{"type":64,"value":983},{"type":64,"value":2850}," |\n| ",{"type":58,"tag":105,"props":2852,"children":2854},{"className":2853},[],[2855],{"type":64,"value":2856},"RTSP_LEAKY_QUEUE_TINY",{"type":64,"value":2858}," | RTSP branch queue must be ",{"type":58,"tag":105,"props":2860,"children":2862},{"className":2861},[],[2863],{"type":64,"value":2864},"leaky=2",{"type":64,"value":2866}," + tiny cap (",{"type":58,"tag":105,"props":2868,"children":2870},{"className":2869},[],[2871],{"type":64,"value":2872},"max-size-buffers=2",{"type":64,"value":2874},") to prevent backpressure and NVMM pool exhaustion. | ",{"type":58,"tag":105,"props":2876,"children":2878},{"className":2877},[],[2879],{"type":64,"value":983},{"type":64,"value":2850},{"type":58,"tag":105,"props":2882,"children":2884},{"className":2883},[],[2885],{"type":64,"value":2886},"RTSP_KEYINT_MAX_30",{"type":64,"value":2888}," | RTSP H.264 encoder must set ",{"type":58,"tag":105,"props":2890,"children":2892},{"className":2891},[],[2893],{"type":64,"value":2894},"key-int-max=30",{"type":64,"value":2896}," (and B-frames disabled) to allow downstream seeking. | ",{"type":58,"tag":105,"props":2898,"children":2900},{"className":2899},[],[2901],{"type":64,"value":983},{"type":64,"value":2850},{"type":58,"tag":105,"props":2904,"children":2906},{"className":2905},[],[2907],{"type":64,"value":2908},"RTSP_ENCODER_FALLBACK",{"type":64,"value":2910}," | Select software\u002Fhardware H.264 encoder based on ",{"type":58,"tag":105,"props":2912,"children":2914},{"className":2913},[],[2915],{"type":64,"value":1015},{"type":64,"value":2917}," with MJPEG fallback. | ",{"type":58,"tag":105,"props":2919,"children":2921},{"className":2920},[],[2922],{"type":64,"value":983},{"type":64,"value":2924}," |",{"type":58,"tag":114,"props":2926,"children":2927},{},[],{"items":2929,"total":3031},[2930,2947,2959,2973,2985,3002,3017],{"slug":2931,"name":2931,"fn":2932,"description":2933,"org":2934,"tags":2935,"stars":26,"repoUrl":27,"updatedAt":2946},"accelerated-computing-cudf","accelerate data processing with cuDF","Official NVIDIA-authored guidance for NVIDIA cuDF GPU DataFrames, pandas acceleration, dask-cuDF, ETL, joins, groupby, CSV\u002FParquet I\u002FO, nullable semantics, and multi-GPU DataFrame workloads.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2936,2939,2942,2943],{"name":2937,"slug":2938,"type":15},"Data Analysis","data-analysis",{"name":2940,"slug":2941,"type":15},"Data Engineering","data-engineering",{"name":9,"slug":8,"type":15},{"name":2944,"slug":2945,"type":15},"Performance","performance","2026-07-14T05:28:43.176466",{"slug":2948,"name":2948,"fn":2949,"description":2950,"org":2951,"tags":2952,"stars":26,"repoUrl":27,"updatedAt":2958},"aiq-deploy","deploy and manage NVIDIA AI-Q infrastructure","Use when asked to install, deploy, run, validate, troubleshoot, or stop NVIDIA AI-Q Blueprint infrastructure.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2953,2954,2957],{"name":17,"slug":18,"type":15},{"name":2955,"slug":2956,"type":15},"Infrastructure","infrastructure",{"name":9,"slug":8,"type":15},"2026-07-14T05:29:06.667109",{"slug":2960,"name":2960,"fn":2961,"description":2962,"org":2963,"tags":2964,"stars":26,"repoUrl":27,"updatedAt":2972},"aiq-research","conduct deep research with AI-Q","Use when asked to run deep research or AI-Q research through a reachable NVIDIA AI-Q Blueprint backend.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2965,2968,2969],{"name":2966,"slug":2967,"type":15},"Agents","agents",{"name":9,"slug":8,"type":15},{"name":2970,"slug":2971,"type":15},"Research","research","2026-07-14T05:28:06.816956",{"slug":2974,"name":2974,"fn":2975,"description":2976,"org":2977,"tags":2978,"stars":26,"repoUrl":27,"updatedAt":2984},"amc-run-sample-calibration","run AMC sample dataset calibration","Run end-to-end calibration on the shipped sample dataset (sdg_08_2_sample_data_010926.zip) against a running AMC microservice. Use when user says 'test sample dataset', 'run sample calibration', 'verify AMC install', or 'launch and test'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2979,2980,2981],{"name":2937,"slug":2938,"type":15},{"name":9,"slug":8,"type":15},{"name":2982,"slug":2983,"type":15},"Testing","testing","2026-07-17T05:29:03.913266",{"slug":2986,"name":2986,"fn":2987,"description":2988,"org":2989,"tags":2990,"stars":26,"repoUrl":27,"updatedAt":3001},"amc-run-video-calibration","calibrate video datasets with AutoMagicCalib","Calibrate a new dataset from pre-recorded video files via the AutoMagicCalib REST API. Use when user has local MP4s and says 'calibrate my videos', 'run AMC on these videos', or similar. For RTSP\u002Flive streams, use amc-run-rtsp-calibration instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2991,2994,2997,2998],{"name":2992,"slug":2993,"type":15},"Automation","automation",{"name":2995,"slug":2996,"type":15},"Imaging","imaging",{"name":9,"slug":8,"type":15},{"name":2999,"slug":3000,"type":15},"Video","video","2026-07-17T05:28:53.905004",{"slug":3003,"name":3003,"fn":3004,"description":3005,"org":3006,"tags":3007,"stars":26,"repoUrl":27,"updatedAt":3016},"amc-setup-calibration-stack","deploy AutoMagicCalib microservice with Docker","Launch AutoMagicCalib microservice and web UI from NGC release images via Docker Compose. Use when user says 'deploy auto calibration', 'launch auto calibration', 'launch AMC', 'start MS+UI', or 'set up auto-magic-calib'. Requires NGC API key.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3008,3009,3012,3013],{"name":17,"slug":18,"type":15},{"name":3010,"slug":3011,"type":15},"Docker","docker",{"name":9,"slug":8,"type":15},{"name":3014,"slug":3015,"type":15},"Operations","operations","2026-07-17T05:28:56.913999",{"slug":3018,"name":3018,"fn":3019,"description":3020,"org":3021,"tags":3022,"stars":26,"repoUrl":27,"updatedAt":3030},"cudaq-guide","develop quantum applications with CUDA-Q","CUDA-Q onboarding guide for installation, test programs, GPU simulation, QPU hardware, and quantum applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3023,3024,3027],{"name":9,"slug":8,"type":15},{"name":3025,"slug":3026,"type":15},"Quantum Computing","quantum-computing",{"name":3028,"slug":3029,"type":15},"Simulation","simulation","2026-07-14T05:26:58.898253",305,{"items":3033,"total":3181},[3034,3052,3067,3078,3090,3102,3115,3129,3140,3149,3163,3172],{"slug":3035,"name":3035,"fn":3036,"description":3037,"org":3038,"tags":3039,"stars":3049,"repoUrl":3050,"updatedAt":3051},"nemoclaw-user-guide","retrieve NemoClaw documentation and configuration","Guides human users' AI agents to the NemoClaw docs MCP server and canonical Fern documentation in Markdown form. Use when users ask how to install, configure, operate, troubleshoot, secure, or learn NemoClaw with an AI coding assistant. Trigger keywords - nemoclaw docs, use nemoclaw with ai agent, nemoclaw mcp docs, nemoclaw install help, nemoclaw quickstart, nemoclaw markdown docs, llms.txt, agent skills.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3040,3043,3046],{"name":3041,"slug":3042,"type":15},"Documentation","documentation",{"name":3044,"slug":3045,"type":15},"MCP","mcp",{"name":3047,"slug":3048,"type":15},"Search","search",21777,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNemoClaw","2026-07-20T06:00:01.461044",{"slug":3053,"name":3053,"fn":3054,"description":3055,"org":3056,"tags":3057,"stars":3064,"repoUrl":3065,"updatedAt":3066},"mcore-build-and-dependency","manage Megatron-LM development environments","Container-based dev environment setup and dependency management for Megatron-LM. Covers acquiring and launching the CI container, uv package management, and updating uv.lock.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3058,3061,3062],{"name":3059,"slug":3060,"type":15},"Containers","containers",{"name":17,"slug":18,"type":15},{"name":3063,"slug":51,"type":15},"Python",17049,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FMegatron-LM","2026-07-27T06:06:11.249662",{"slug":3068,"name":3068,"fn":3069,"description":3070,"org":3071,"tags":3072,"stars":3064,"repoUrl":3065,"updatedAt":3077},"mcore-bump-base-image","update NVIDIA PyTorch base images","Bump the NVIDIA PyTorch base image (`nvcr.io\u002Fnvidia\u002Fpytorch:YY.MM-py3`) used by Megatron-LM CI. Covers the two pin sites (GitHub CI in `docker\u002F.ngc_version.dev` and GitLab CI in `.gitlab\u002Fstages\u002F01.build.yml`), the post-bump CI loop (re-run functional tests, refresh golden values, mark broken tests), and the gotchas that bit PRs",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3073,3076],{"name":3074,"slug":3075,"type":15},"CI\u002FCD","ci-cd",{"name":17,"slug":18,"type":15},"2026-07-14T05:25:59.97109",{"slug":3079,"name":3079,"fn":3080,"description":3081,"org":3082,"tags":3083,"stars":3064,"repoUrl":3065,"updatedAt":3089},"mcore-cicd","manage CI\u002FCD pipelines for Megatron-LM","CI\u002FCD reference for Megatron-LM. Covers CI pipeline structure, PR scope labels, triggering internal GitLab CI (which force-pushes the current branch to a pull-request\u002FBRANCH ref — always dry-run and verify the destination first; never run against shared or protected branches), and CI failure investigation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3084,3085,3086],{"name":3074,"slug":3075,"type":15},{"name":17,"slug":18,"type":15},{"name":3087,"slug":3088,"type":15},"GitHub","github","2026-07-27T06:06:12.278222",{"slug":3091,"name":3091,"fn":3092,"description":3093,"org":3094,"tags":3095,"stars":3064,"repoUrl":3065,"updatedAt":3101},"mcore-create-issue","investigate CI failures and create issues","Investigate a failing GitHub Actions run or job and create a GitHub issue for the failure.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3096,3097,3098],{"name":24,"slug":25,"type":15},{"name":3087,"slug":3088,"type":15},{"name":3099,"slug":3100,"type":15},"Triage","triage","2026-07-14T05:25:57.442089",{"slug":3103,"name":3103,"fn":3104,"description":3105,"org":3106,"tags":3107,"stars":3064,"repoUrl":3065,"updatedAt":3114},"mcore-linting-and-formatting","lint and format Megatron-LM code","Linting and formatting for Megatron-LM. Covers running autoformat.sh, tools (ruff, black, isort, pylint, mypy), and code style rules.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3108,3111],{"name":3109,"slug":3110,"type":15},"Best Practices","best-practices",{"name":3112,"slug":3113,"type":15},"Code Analysis","code-analysis","2026-07-14T05:25:56.18433",{"slug":3116,"name":3116,"fn":3117,"description":3118,"org":3119,"tags":3120,"stars":3064,"repoUrl":3065,"updatedAt":3128},"mcore-migrate-gpt-to-hybrid","migrate Megatron-LM models to HybridModel","Migration guide for moving Megatron Core GPTModel checkpoints, model providers, training commands, and layer mappings to HybridModel.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3121,3124,3127],{"name":3122,"slug":3123,"type":15},"Machine Learning","machine-learning",{"name":3125,"slug":3126,"type":15},"Migration","migration",{"name":9,"slug":8,"type":15},"2026-07-17T06:07:11.777011",{"slug":3130,"name":3130,"fn":3131,"description":3132,"org":3133,"tags":3134,"stars":3064,"repoUrl":3065,"updatedAt":3139},"mcore-onboard-gb200-1node-tests","onboard functional tests for GB200","Onboard 1-node GitHub MR functional tests for GB200 from existing mr-scoped 2-node tests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3135,3138],{"name":3136,"slug":3137,"type":15},"QA","qa",{"name":2982,"slug":2983,"type":15},"2026-07-14T05:25:53.673039",{"slug":3141,"name":3141,"fn":3142,"description":3143,"org":3144,"tags":3145,"stars":3064,"repoUrl":3065,"updatedAt":3148},"mcore-run-on-slurm","launch distributed training jobs on SLURM","How to launch distributed Megatron-LM training jobs on a SLURM cluster. Covers a minimal sbatch skeleton, environment-variable setup for torch.distributed.run, CUDA_DEVICE_MAX_CONNECTIONS rules across hardware and parallelism modes, container conventions, monitoring, and per-rank failure diagnosis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3146,3147],{"name":17,"slug":18,"type":15},{"name":2955,"slug":2956,"type":15},"2026-07-14T05:25:49.362534",{"slug":3150,"name":3150,"fn":3151,"description":3152,"org":3153,"tags":3154,"stars":3064,"repoUrl":3065,"updatedAt":3162},"mcore-split-pr","split pull requests to reduce review load","Split a PR into multiple PRs to reduce the number of required CODEOWNERS reviewer groups.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3155,3158,3159],{"name":3156,"slug":3157,"type":15},"Code Review","code-review",{"name":3087,"slug":3088,"type":15},{"name":3160,"slug":3161,"type":15},"Pull Requests","pull-requests","2026-07-14T05:26:01.226578",{"slug":3164,"name":3164,"fn":3165,"description":3166,"org":3167,"tags":3168,"stars":3064,"repoUrl":3065,"updatedAt":3171},"mcore-testing","run and manage Megatron-LM tests","Test system for Megatron-LM. Covers test layout, recipe YAML structure, adding and running unit and functional tests, golden values, marker filters, and CI parity.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3169,3170],{"name":3136,"slug":3137,"type":15},{"name":2982,"slug":2983,"type":15},"2026-07-14T05:25:54.928983",{"slug":3173,"name":3173,"fn":3174,"description":3175,"org":3176,"tags":3177,"stars":3064,"repoUrl":3065,"updatedAt":3180},"nightly-sync","manage nightly main-to-dev sync workflows","Domain knowledge for the nightly main-to-dev sync workflow. Covers merge strategy, CI architecture, failure investigation, and known issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3178,3179],{"name":2992,"slug":2993,"type":15},{"name":3074,"slug":3075,"type":15},"2026-07-30T05:29:03.275638",496]