Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
225 commits
Select commit Hold shift + click to select a range
8817a97
feat(sidecar): publish LPX engine load to the router (#17539)
andrewpaprotsky Oct 29, 2026
071140e
test(operator): cover vLLM single-node Component upgrades (#17006)
xianlubird Oct 29, 2026
f3fd065
feat: add Muse Spark Open support and shared Chat/Responses tool APIs…
indrajit96 Oct 29, 2026
00d3deb
docs: refresh community events
dynamo-ops Oct 29, 2026
51a653c
feat(frontend): recover realtime transcription after worker loss (#17…
ptarasiewiczNV Oct 29, 2026
1d6b5c8
feat(gms): enable gms xpu phase 3 (#15412)
zxue2 Oct 29, 2026
ebad592
feat(recipes): add Mistral Large 4 recipes for GB300 and Vera Rubin (…
vanshilshah97 Oct 29, 2026
9f88a47
feat(global-router): Global Frontend with load- and session-aware poo…
jthomson04 Oct 29, 2026
c88bd2e
test(python): expose profiler and Replay import failures (#17594)
sttts Oct 29, 2026
4cfde0e
feat(kv-router): add verified ZMQ replay recovery for KV publishers (…
JulienDarve Oct 29, 2026
261a106
fix(frontend): mint internal request ids on the server for HTTP and g…
glamr-agent Oct 29, 2026
56d7a16
fix(aisimulate): pass trace workloads straight to the AIC generator (…
tedzhouhk Oct 29, 2026
27ca7e6
fix(ci): add cuda_copy to GAIE vLLM disagg UCX_TLS so NIXL starts on …
devin-ai-integration[bot] Oct 29, 2026
dff7c99
feat(operator): integrate DGDR v1beta2 candidate flow (#17308)
sttts Oct 29, 2026
67b5ff2
ci(test): OPS-9044 download the pinned kustomize release in Recipe Ch…
dmitry-tokarev-nv Oct 29, 2026
ebee6c1
docs(router): add a kv_router README and expand its agent guide (#17350)
GuanLuo Oct 29, 2026
eeda105
ci(test): OPS-9049 replace flake8 with ruff and upgrade the ruff hook…
dmitry-tokarev-nv Oct 29, 2026
5bb907b
perf(router): build candidate rows off the scheduler queue actor (#17…
jthomson04 Oct 29, 2026
389a509
feat(examples/sglang): add Intel XPU deployment configs (#10023)
yao531441 Oct 29, 2026
eb5f058
ci: move SGLang N-2 compatibility out of pre-merge (#17542)
jain-ria Oct 29, 2026
3bee5f7
docs(pr-checklist): prefer smaller crates and name the agent that wro…
alec-flowers Oct 29, 2026
4f8d764
feat(decisions): bind scoring capabilities to admitted model revision…
biswapanda Oct 29, 2026
1af0657
feat(frontend): route Nemotron 3 through the v2 UnifiedParser (#16981)
luckyq Oct 29, 2026
bd02e0c
ci(sidecar): compile the PR sidecar image without LTO (#17498)
alec-flowers Oct 29, 2026
05442be
feat(global-frontend): serve /metrics (#17525)
jthomson04 Oct 29, 2026
3227150
fix(trtllm): honor engine served model name in sidecar (#17556)
tanmayv25 Oct 29, 2026
695a690
fix(ci): scrape only the EFA collector in the EFA deploy tests (#17567)
jh-nv Oct 29, 2026
8078985
feat(decisions): add bounded admission and local cancellation primiti…
biswapanda Oct 29, 2026
4d407c8
fix(container): enable video encode/decode in SGLang XPU runtime (#16…
dsocek Oct 29, 2026
f5d6795
feat(beam): Beam 1.0 model support on main (#17072)
luckyq Oct 29, 2026
44cfc26
perf(router): read worker load lazily in the scheduler queue gate (#1…
jthomson04 Oct 29, 2026
58cfd0a
feat(operator): support explicit TensorRT-LLM multinode sidecar roles…
tmonty12 Oct 29, 2026
7dd02b7
refactor(planner): share speculative accept-length normalization (#17…
glamr-agent Oct 29, 2026
170f30f
feat(decisions): coordinate bounded scoring with pinned worker placem…
biswapanda Oct 29, 2026
108cbfa
fix(test): tolerate missing vLLM transfer series on idle engines DD_T…
glamr-agent Oct 29, 2026
b9c8f75
feat(decisions): expose compatible decision and systemone endpoints (…
biswapanda Oct 29, 2026
fc843c2
refactor(router): one builder, one booking path, one guard entry poin…
ishandhanani Oct 30, 2026
008d356
feat(operator): deploy active-active PoolRelay for one DGD (#17347)
hhzhang16 Oct 30, 2026
50385d6
docs(decisions): describe dialect schemas and response contracts (#15…
biswapanda Oct 30, 2026
bd0c053
feat(replay): add native conversation affinity to Dynamo simulation (…
Harrilee Oct 30, 2026
e2cd316
fix(llm): keep Gemma 4 reasoning parsing on with the Gemma 4 tool par…
DinhKhangHoang Oct 30, 2026
e911740
test(decisions): add explicit native and SDK qualification profiles (…
biswapanda Oct 30, 2026
cfb388d
feat(multimodal): add DYN_MM_ALLOW_REMOTE_URLS to disable remote medi…
nmpri Oct 30, 2026
d4c396d
fix(llm): decide MiniMax M3 reasoning parsing from the rendered promp…
yifjiang Oct 30, 2026
d1b1f24
feat(sglang): publish KV events in the dynamo format by default (#15746)
livingshade Oct 30, 2026
a416113
ci(operator): serialize shared-cluster test packages (#17593)
xianlubird Oct 30, 2026
a57687b
test(aisimulate): exercise DGD outputs through real CLI cases (#17588)
sttts Oct 30, 2026
46193c6
test(operator): cover missing-origin N-2 takeover (#17566)
xianlubird Oct 30, 2026
91a64d9
docs: refresh community events
dynamo-ops Oct 30, 2026
d7aff44
fix(operator): exempt helper components from runtime version override…
sttts Oct 30, 2026
d76c6c6
fix: keep operator upgrade tests out of the runtime suite (#17687)
nv-anants Oct 30, 2026
670019d
fix(test): pin etcd lease TTL in etcd_ha tests DD_CVM27F (#17622)
glamr-agent Oct 30, 2026
d66b74e
feat(runtime): NVTX v3 hardening, single DYN_NVTX switch, worker mark…
nv-kmcgill53 Oct 30, 2026
6c73c5f
fix(runtime): scope QUIC response client bundles to their Tokio runti…
glamr-agent Oct 30, 2026
22da2a1
fix(ci): give Operator upgrade replay 30 minutes with 40-minute job b…
sttts Oct 30, 2026
89a9304
docs(agents): focus the root AGENTS.md on Dynamo development (#17495)
alec-flowers Oct 30, 2026
0d86794
feat(router): attribute Mooncake session residency from SGLang's dire…
ishandhanani Oct 30, 2026
5f3c7e3
docs(build): fix protoc, Python and binding features in building-from…
alec-flowers Oct 30, 2026
1184678
docs: refresh community events
dynamo-ops Oct 30, 2026
7c3cb19
feat(global-router): keep pool load tied to a Relay replica (#17686)
hhzhang16 Oct 30, 2026
f945f1a
chore: bump trtllm to v1.4.0rc2 (#17587)
dynamo-ops Oct 30, 2026
5a48166
fix(frontend): bump dynamo-parsers-v2 to 0.8.9 so the qwen3_coder str…
luckyq Oct 30, 2026
c10c879
feat(trtllm): support images through the OpenEngine sidecar (#16613)
krishung5 Oct 30, 2026
3057891
test: configure explicit asyncio fixture loop scopes (#17640)
Pranjulcr7 Oct 30, 2026
e5a2ef3
feat(frontend): serve admin routes on an opt-in loopback port (#17165)
jthomson04 Oct 30, 2026
ba9caea
feat(sglang): enable KVCR linker inventory and hints (#17655)
ziqifan617 Oct 30, 2026
c6b055d
build(vllm): Update XPU and CPU builds to use vllm-0.32.0 (#17239)
sandeep-maddipatla Oct 30, 2026
eb9ab16
fix(planner): don't block worker scaling on an unready Frontend (#17627)
salinawu Oct 30, 2026
b09f150
fix(multimodal): align video example and routing-status messages (#17…
krishung5 Oct 30, 2026
a99d917
fix(deps): upgrade Velo to 0.21 for macOS builds (#17577)
xianlubird Oct 30, 2026
fc78d7c
fix(router): forward the conditional-disagg bypass marker only on req…
ksriv001 Oct 31, 2026
2853505
fix(llm): make backend admission control opt-in (#17481)
kthui Oct 31, 2026
e26ee7c
fix(recipes): pin MiniMax M3.1 Flash to its current Hugging Face revi…
furionw Oct 31, 2026
a2623ea
docs(benchmarks): link the multimodal sweep README to the AIPerf repo…
ajcasagrande Oct 31, 2026
2cb12a1
feat(global-router): add the Global Discovery Service library (contra…
atchernych Oct 31, 2026
4435cab
docs(observability): list every Dynamo metric in the Metrics Catalog …
jh-nv Oct 31, 2026
cb5f9a6
fix(tests): cap native vLLM KV cache in token budget parity test (DD_…
glamr-agent Oct 31, 2026
6e55feb
docs: refresh community events
dynamo-ops Oct 31, 2026
f953474
feat(frontend): expose structural-tag parser capabilities (#17255)
stu-cao Nov 1, 2026
994ed03
refactor(frontend): unify native generate handlers behind format plug…
Aphoh Nov 1, 2026
6bcaabc
docs: refresh community events
dynamo-ops Nov 1, 2026
9eb3b8f
fix(logging): keep disabled callsites disabled with JSONL and no OTLP…
jthomson04 Nov 2, 2026
a908c1a
perf(kv-router): log the selected worker from the routing task (#17700)
jthomson04 Nov 2, 2026
c260334
feat(router): add sticky min-load worker-selection policy (#15600)
ishandhanani Nov 2, 2026
464ff29
feat(operator): add dynamo_operator_build_info metric (#17304)
dongjiang1989 Nov 2, 2026
1a39763
docs: refresh community events
dynamo-ops Nov 2, 2026
e421c62
docs(dgdr): clarify nominal VRAM tolerance (#17679)
sttts Nov 2, 2026
318ab03
fix(sidecar): keep stop tokens the frontend needs in LPX output (#17771)
andrewpaprotsky Nov 2, 2026
4cd8f4e
fix(kv-router): filter vLLM partial-tail KV events instead of warning…
marckarp Nov 2, 2026
820bffe
fix(router): stop direct-mode frontends from subscribing to every wor…
atchernych Nov 2, 2026
029ca6d
docs(kubernetes): profile Dynamo components with Nsight Operator (#17…
nv-yna Nov 2, 2026
63dabdf
fix(trtllm): return 400 for prompts over max_num_tokens (#16193)
glamr-agent Nov 2, 2026
c6d0d38
fix(sglang): apply the model's default sampling params (#17777)
leejnau Nov 2, 2026
8da75b3
fix(gms): let V1 allocations span adjacent slabs (#17344)
galletas1712 Nov 2, 2026
24b90f6
fix(anthropic): flush parser-completed tool calls before turn finish …
xianlubird Nov 2, 2026
7c195fd
test(sidecar): cover forced tool calls in vLLM and SGLang e2e (#17624)
KrishnanPrash Nov 2, 2026
b751c95
feat(global-router): add the Global Discovery HTTP service (#17371)
atchernych Nov 2, 2026
b86b1a2
test(sidecar): e2e disaggregated cancellation for vLLM, SGLang and Te…
alec-flowers Nov 2, 2026
d8bfcb1
fix(bindings): preserve session affinity through chat processors (#15…
awesome-pro Nov 2, 2026
2f91416
fix(sglang): warm up and freeze GC before serving, as launch_server d…
leejnau Nov 2, 2026
32926d0
feat(global-planner): add pool priority model and resolver (#17859)
sachalmalick Nov 2, 2026
00ff135
feat(global-planner): order pair partners by pool priority (#17860)
sachalmalick Nov 2, 2026
0efff57
feat(gms): serve each V1 GPU from its own confined process (#17339)
galletas1712 Nov 2, 2026
966ca00
ci: report N-2 compatibility tests to Datadog (#17614)
devin-ai-integration[bot] Nov 2, 2026
2f3e038
perf(runtime): lower the Velo response batch window default to 2 ms (…
jthomson04 Nov 2, 2026
c7bcc7d
fix(sglang): propagate GC freeze to scheduler subprocesses (#16761)
jain-ria Nov 2, 2026
a88749f
fix(mm-routing): handle SGLang engine-owned multimodal pad values (#1…
maheshrbapatu Nov 2, 2026
f9779a0
feat(gms): restore V1 weights from a ModelExpress peer (#17340)
galletas1712 Nov 2, 2026
0c5a199
fix(trtllm): drop cache transceiver from Qwen3-VL aggregated config (…
glamr-agent Nov 2, 2026
94b8deb
fix(mocker): omit TRT-LLM token strings the real servicer leaves empt…
jthomson04 Nov 2, 2026
9fd7b0f
perf(frontend): [P2] optimize GPT-OSS v2 continuation state (#17476)
keivenchang Nov 3, 2026
ff072fc
perf(global-frontend): serve with per-connection shutdown signals (#1…
jthomson04 Nov 3, 2026
319ad3b
fix(multimodal): release resources after failed transfer preparation …
bojiang-li Nov 3, 2026
7e44a1d
feat(router): support single-source fetch continuations (#17657)
PeaBrane Nov 3, 2026
d7fecab
fix(global-planner): prefer intra-participant pair partners (#14036)
sachalmalick Nov 3, 2026
d2c9fc9
docs: refresh community events
dynamo-ops Nov 3, 2026
884151a
fix(anthropic): align Messages framing, errors, and validation (#17367)
maheshrbapatu Nov 3, 2026
c56034d
feat(vllm): add audio transcription serving (#16208)
NurullahMorshed Nov 3, 2026
e37f0b9
fix(frontend): honor vLLM renderer and cache options (#17797)
KyleZheng1284 Nov 3, 2026
2ec0b11
perf(prefill-router): a successful decode terminal no longer waits fo…
liqiangxl Nov 3, 2026
ce6a733
docs: refresh community events
dynamo-ops Nov 3, 2026
9ef5c37
test(operator): parallelize upgrade replay in one Kind cluster (#17745)
xianlubird Nov 3, 2026
c80a17b
feat(global-planner): declare GPU cost for pools whose DGD requests n…
sachalmalick Nov 3, 2026
844ab5c
feat(pool-relay): poll the Global Router replicas from Global Discove…
jioffe502 Nov 3, 2026
e38aa51
docs(runtime): remove stale Context controller Arc TODO (#17791)
xianlubird Nov 3, 2026
a48bc25
refactor: P3 make ChoiceState grammar state explicit (#17719)
keivenchang Nov 3, 2026
3aafbef
docs(llm): clarify tool-call completion delivery semantics (#17788)
xianlubird Nov 3, 2026
147b78a
feat(mocker): attach KVCR fetch hints from the KV router in offline r…
dreamtalen Nov 3, 2026
d1cf542
feat(global-router): read pool models from registrations, not a file …
atchernych Nov 3, 2026
4e2a36a
feat(recipes): add Cosmos3 Nano Reasoner (#17305)
jkiczka-nvidia Nov 3, 2026
b487ef3
perf(sidecar): default to 32 gRPC connections to the engine (#17864)
jthomson04 Nov 3, 2026
81f06a5
fix(profiler): size Hub checkpoints from file metadata (#17563)
Alex-Wengg Nov 3, 2026
c60e700
docs: refresh community events
dynamo-ops Nov 3, 2026
d554c60
feat(planner): collect batch scheduling observations (#14196)
sachalmalick Nov 3, 2026
1732fd7
refactor(lora): prepare allocation for crate extraction (#17894)
biswapanda Nov 3, 2026
23ff72c
ci: split feature-gated Rust builds into a parallel pre-merge job (#1…
nv-anants Nov 3, 2026
52a7c94
feat(global-router): add GET /pools and a pool cache to the Global Di…
jioffe502 Nov 3, 2026
e11e128
fix(mocker): admit a same-worker migration retry beside its active at…
datdo-msft Nov 3, 2026
dbc43d4
fix(frontend): keep emitted GLM reasoning out of content (#17660)
Raytorin Nov 3, 2026
607f867
fix(multimodal): validate NIXL READ metadata before borrowing embeddi…
glamr-agent Nov 3, 2026
740a707
feat(planner): add leased batch runtime (#14197)
sachalmalick Nov 3, 2026
94db5c0
fix(anthropic): omit automatic tool choice when a Messages request ha…
glamr-agent Nov 3, 2026
0e4551a
feat(router): make worker-selection plugins support host-path routing…
karen-sy Nov 3, 2026
18cd462
fix(helm): reject skipped minor transitions (#16651)
sttts Nov 3, 2026
a6bfda0
chore(sglang): bump SGLang to 0.5.23 (#17653)
jain-ria Nov 3, 2026
478b247
feat(sidecar): forward image, video, and audio inputs to SGLang (#16203)
KrishnanPrash Nov 3, 2026
465aa3d
chore(container): OPS-9080 add libbrotli1 to the runtime OS package r…
dmitry-tokarev-nv Nov 3, 2026
22e6531
feat(kvcr): supervise startup and configure memory-service resources …
aranadive Nov 3, 2026
8ba9317
chore: Move to shared org runners (#17966)
dillon-cullinan Nov 3, 2026
87f3aa0
chore(deps): bump Grove to v0.2.0-beta1 (#17851)
julienmancuso Nov 3, 2026
d86c1f5
chore(container): OPS-9079 update the planner Python bases to 3.13.18…
dmitry-tokarev-nv Nov 3, 2026
b0a6bd1
chore(deps): OPS-9084 raise diffusers to 0.40.0 in the SGLang image (…
dmitry-tokarev-nv Nov 3, 2026
a0bf0fd
fix(sidecar): set the SGLang media fields once (#17980)
JulienDarve Nov 3, 2026
e4ad12b
feat(backend-common): drain and exit the worker when its engine is lo…
JulienDarve Nov 3, 2026
bd6aa89
feat(sidecar): restart the vLLM sidecar when vLLM stops serving (#17728)
JulienDarve Nov 3, 2026
f4ca9ac
feat(trtllm): support videos through the OpenEngine sidecar (#16870)
krishung5 Nov 3, 2026
76d66f7
test(operator): add DGDR v1beta2 vCluster smoke test (#17684)
sttts Nov 3, 2026
9e4cdef
ci: auto-bump main version after release branch cut (#17142)
pvijayakrish Nov 3, 2026
1564a73
feat(planner): schedule batch work on native ticks (#14200)
sachalmalick Nov 3, 2026
f492fcf
ci(release): pin setup-rust-toolchain to the allowlisted v1.17.0 (#17…
pvijayakrish Nov 3, 2026
258c44a
ci: run Bump Main Version on the test-runner pool (#17996)
pvijayakrish Nov 3, 2026
2a0cc9a
feat(sidecar): restart the SGLang sidecar when SGLang stops serving (…
JulienDarve Nov 3, 2026
1c537be
docs(sidecar): add backend support matrix (#17855)
tanmayv25 Nov 3, 2026
37144cc
feat(sidecar): restart the TensorRT-LLM sidecar when TensorRT-LLM sto…
JulienDarve Nov 3, 2026
2d126e0
refactor(router): refactor random/RR/LL/pow-of-2 as builtin plugins (…
karen-sy Nov 4, 2026
d7c7747
fix(parsers): [P2] validate V1 fallback and V2 selector pairs (#17475)
keivenchang Nov 4, 2026
96a7d70
feat(vllm): serve the restore Pod's DYN_SERVED_MODEL_NAME after snaps…
skpulipaka26 Nov 4, 2026
a4dabd6
docs(kubernetes): profile one replica with a per-pod Nsight tag (#17869)
nv-yna Nov 4, 2026
54ee241
ci: raise stale cleaner operation budget and process oldest first (#1…
nv-anants Nov 4, 2026
c3fb4fe
feat(planner): live retune from recorded traces through DGDR v1beta2 …
tedzhouhk Nov 4, 2026
a90469c
fix(frontend): preserve chat token IDs and EOS logprobs (#17586)
Jiminator Nov 4, 2026
115395a
fix(frontend): return Anthropic error envelopes for drain rejections …
glamr-agent Nov 4, 2026
665cb8d
fix(sidecar): migrate requests after engine death or drain (#17710)
alec-flowers Nov 4, 2026
2164107
chore(router): remove power-of-two and plugin-API paths marked for 1.…
karen-sy Nov 4, 2026
bb16008
feat(trtllm): support audio through the OpenEngine sidecar (#16871)
krishung5 Nov 4, 2026
26d0133
feat(llm): integrate MiniMax M3 UnifiedParser (#17236)
mattwittwer Nov 4, 2026
6461b69
fix(pool-relay): set TCP_NODELAY on accepted WAN gRPC connections (#1…
glamr-agent Nov 4, 2026
de49ef3
fix(recipes): drop decode CPU KV tier from Nemotron 3.5 Super VL disa…
tzulingk Nov 4, 2026
a80115b
feat(frontend): refuse media before routing for text-only models (#17…
biswapanda Nov 4, 2026
182039d
fix(recipes): lower the Nemotron 3.5 Super VL frontend memory request…
tzulingk Nov 4, 2026
7301490
feat(lora): add backend-neutral resolver plugins (#15835)
biswapanda Nov 4, 2026
19fcaf8
feat(router): judge class decode wait limits on a paired pool
ishandhanani Oct 29, 2026
e1ab5ba
fix(router): make the per-class decode wait limit correct for disaggr…
ishandhanani Oct 29, 2026
2be8ec8
docs(router): describe the class decode wait limit in both topologies
ishandhanani Oct 29, 2026
e6b5a99
fix(router): propagate client cancellation to remote prefill workers …
biswapanda Nov 4, 2026
e66077a
docs: refresh community events
dynamo-ops Nov 4, 2026
d5dd600
fix(router): keep the class gate for conditional-disagg bypass requests
ishandhanani Nov 4, 2026
2356540
refactor(router): read admitted_upstream before building the scheduli…
ishandhanani Nov 4, 2026
8b4ad6a
feat(pool-relay): share live pool state across router connection mode…
hhzhang16 Nov 4, 2026
fb84db1
chore: Update Dynamo Triton Runtime README (#17908)
whoisj Nov 4, 2026
5a26da6
fix(request-trace): record the tool-call IDs clients receive on /v1/m…
ishandhanani Nov 4, 2026
e5fccd1
feat(trtllm): add image-aware KV routing to OpenEngine sidecars (#17437)
krishung5 Nov 4, 2026
517e77d
chore(deps): OPS-9092 move PyNvVideoCodec to 2.2.4 in every image (#1…
dmitry-tokarev-nv Nov 4, 2026
13f3fba
docs: refresh community events
dynamo-ops Nov 4, 2026
3fcb63f
feat(docs): Kimi K3.1 Pro GB300, VR200, B200 recipes (#18083)
NVShreyas Nov 4, 2026
ee56f54
refactor(operator): rename DGDR aisimulate API fields to aisim (#17950)
sttts Nov 4, 2026
2035216
fix(frontend): end SGLang chat stream on error finish reason (#18000)
glamr-agent Nov 4, 2026
11e5fcf
chore(deps): OPS-9082 raise pyasn1 to 0.6.5 in the SGLang and vLLM im…
dmitry-tokarev-nv Nov 4, 2026
10e5919
fix(multimodal): preserve NVDEC frames when host buffers are reused (…
egecemkirci Nov 4, 2026
9d639c9
ci(datadog): fix the dropped test_suite DD_TAG, and split framework f…
nv-nmailhot Nov 4, 2026
e4aeea8
fix(frontend): apply --default-chat-template-kwargs for vllm/sglang (…
KrishnanPrash Nov 4, 2026
65f6a38
test(multimodal): cover SHM cleanup error preservation (#18099)
krishung5 Nov 4, 2026
ca12818
chore(container): OPS-9100 add libgnutls30t64 to the runtime OS packa…
dagil-nvidia Nov 4, 2026
545f85b
test(sglang): gate VL mm_agg_router hit-rate check on wide-pad SGLang…
glamr-agent Nov 4, 2026
d61b28b
feat(operator): validate DGDR AISimulate inputs against generated sch…
sttts Nov 4, 2026
4f42393
fix(runtime): bound HTTP and WebSocket draining at shutdown (#17064)
neilkg Nov 4, 2026
8e44069
docs(agents): add metrics guidelines for authoring metrics, logs, and…
nv-yna Nov 4, 2026
6f049ce
feat(skills): add profile-with-nsight-operator skill (#17315)
nv-yna Nov 4, 2026
b8ac983
refactor(bench): share the KV-router replay deadline clock (#17887)
glamr-agent Nov 4, 2026
2d718d0
fix(vllm): return prompt_embeds decode errors to clients (#16474)
glamr-agent Nov 4, 2026
e51394e
feat(pool-relay): register the routing pool with Global Discovery (#1…
jioffe502 Nov 4, 2026
4ff9539
fix(llm): honor prompt-open MiniMax M3 reasoning with guided decoding…
furionw Nov 4, 2026
29cb457
refactor(mocker): buffer vLLM and SGLang mock output in LiveEngine, a…
jthomson04 Nov 4, 2026
53490c5
refactor(router): flatten policy class configuration (#17723)
kthui Nov 4, 2026
da37000
feat(router): add EDF ordering to policy queues (#17724)
kthui Nov 4, 2026
4a4c83c
feat(router): policy queue to support controlled delay (#17725)
kthui Nov 4, 2026
b9ba191
feat(operator): apply atomic DGDR v1beta2 DGD overrides (#17683)
sttts Nov 4, 2026
f2a3784
test(profiler): guard generated Planner entrypoint (#18144)
tedzhouhk Nov 4, 2026
c3df5f9
fix(http): build the readiness state in the shutdown-deadline test (#…
luckyq Nov 4, 2026
a270532
fix(recipes): pin dev.2-post.1 image and use 2 x TP4 for H200 aggrega…
sungsooha Nov 5, 2026
53015f9
feat(bindings): mark Python response encoding with an NVTX range (#17…
nv-kmcgill53 Nov 5, 2026
7bd3f86
perf(kv-router): scale the CRTC stale-leaf sweep trigger with tree si…
jthomson04 Nov 5, 2026
83f28d1
perf(router): probe worker availability with an Fx set (#18008)
jthomson04 Nov 5, 2026
4fb7b3a
fix(beam): finalize constrained tool calls at confirmed model EOS (#1…
luckyq Nov 5, 2026
5b1fa3c
Merge remote-tracking branch 'origin/main' into idhanani/dyn-16543-di…
ishandhanani Nov 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 4 additions & 2 deletions .agents/skills/pr-checklist/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ SPDX-License-Identifier: Apache-2.0

## Usage

Use this skill when making a pull request to Dynamo or reviewing one. Run the review with multiple agents that investigate each section below, plus an adversarial agent that presses on the weakest areas. Report what needs to change. Keep the PR description up to date as new commits change the PR or address review comments.
Use this skill when making a pull request to Dynamo or reviewing one. Work through each section below and report what needs to change. For medium- or high-complexity changes (see Complexity), run the review with multiple agents, one per section. Keep the PR description up to date as new commits change the PR or address review comments.

## 1. Design Fit

Expand All @@ -46,6 +46,8 @@ Use this skill when making a pull request to Dynamo or reviewing one. Run the re

Exclude tests, documentation, comments, and whitespace from this count, as they typically do not contribute significantly to the complexity of the main change.

**Modularity.** Dynamo is moving toward smaller, modular crates. Add as few dependencies as possible, and justify every new package, such as an added Rust crate, in the PR description.

**Correctness and compatibility.** The change must stay correct for every path that shares the changed code: each backend (vLLM, SGLang, TensorRT-LLM), aggregated and disaggregated serving, and Python callers through the bindings. State what the change makes worse, such as performance on another configuration or a feature it no longer supports, and justify any breaking change to a user-facing contract (request fields, CLI flags, environment variables, metrics, CRD fields) in the PR description.

**Area review guidance.** Apply the review guidance for each area the change touches:
Expand All @@ -66,7 +68,7 @@ Check any change to the hot path (code that runs per token, KV block, KV event,

Every change must be validated: bug fixes on a reproducer, and features and performance changes end to end.

**Coverage and effectiveness.** Add tests only where the change is prone to errors or regressions, and recommend deleting redundant or trivial tests. A test must exercise the new path, not a fallback, and a bug-fix test must fail without the fix. Avoid excessive mock objects, especially ones coupled to internal logic.
**Coverage and effectiveness.** Add tests only where the change is prone to errors or regressions, and recommend deleting redundant or trivial tests. A test must exercise the new path, not a fallback, and a bug-fix test must fail without the fix. Avoid excessive mock objects, especially ones coupled to internal logic. Don't test the test: scope tests to Dynamo functionality, not to test helpers, fixtures, or harness logic. Test the behavior Dynamo should have, not whatever the code does today; mark behavior that doesn't work yet as `xfail` (pytest) or `#[ignore = "..."]` (Rust).

**Reliability and speed.** Tests must not be flaky: avoid bit-exact floating-point assertions, dependence on test order or shared state, and hardcoded ports or paths. Tests must also be fast: no fixed or long sleeps or waits, and a proper timeout on every wait. Dynamo has three test levels. E2E tests generally live under `tests/` and use pytest; other Rust and Python tests are unit or integration tests. As a rule of thumb:

Expand Down
220 changes: 220 additions & 0 deletions .agents/skills/profile-with-nsight-operator/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
---
name: profile-with-nsight-operator
description: >-
Profiles chosen components of a Dynamo DynamoGraphDeployment on Kubernetes with Nsight Systems (nsys) through NVIDIA
Nsight Operator, using kubectl, Nsight's Dynamo helper nsight_operator_dynamo.py, and Nsight's nsight_operator.py CLI,
and verifies that every expected pod produced a report. Use when someone asks to profile, trace, or run nsys on a
Dynamo frontend, router, aggregated worker, or prefill or decode worker on a cluster that runs Nsight Operator. Use
deploy-dynamo-recipe for bring-up and troubleshoot-dynamo for failed deployments.
license: Apache-2.0
metadata:
author: NVIDIA
tags:
- dynamo
- kubernetes
- profiling
- nsight-systems
---

# Profile with Nsight Operator

<!--
SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
SPDX-License-Identifier: Apache-2.0
-->

## Purpose

Profile the Dynamo components a user names with `nsys`, in one capture window, and prove that every expected pod
produced a report. Nsight Operator adds `nsys` to selected pods when they are created; this skill chooses the
selectors, configures profiling with Nsight's Dynamo helper or its own profile config, runs the window with Nsight's
CLI, and checks completeness. It does not wrap or replace `nsight_operator_dynamo.py` or `nsight_operator.py`.

Read `docs/fern/pages/kubernetes/operations/nsight-operator-profiling.mdx` first. It holds the profile-config
template, the label table, the per-component `nsys` arguments and NVTX settings, and the pitfalls. This skill does
not repeat them.

## Prerequisites

- Nsight Operator 26.3 or newer, installed by a cluster admin, and a test namespace with a coordinator and a gateway
(auto-provisioned or created by the namespace admin). For S3 reports, a `NsightCloudStorageConfig` in the namespace.
Older operators use other profile-config field names and a CLI without timed windows; ask the user to upgrade.
- `kubectl` rights in the namespace to create `NsightOperatorProfileConfig` and `DynamoGraphDeployment` objects, list
pods, and port-forward.
- `nsight_operator.py`, and `nsight_operator_dynamo.py` for the helper path, from the NGC "Nsight Operator Resources"
of the same release as the operator. The helper writes that release's profile-config field names.
- Never print, copy, or log secrets. `autoconfigure` writes the gateway's storage key to `~/.nsight-cloud.conf`;
where the user allows it, use `configure` and read reports with the user's own credentials instead.

## Required Inputs

- Kube context and namespace.
- DGD name. Use a test DGD; ask before applying, editing, or restarting any DGD.
- The components to record, for example `frontend` or `decode`. Ask if they are not given.
- Warm-up delay and window length. Keep the window at 300 seconds or less.
- The storage config name for S3, or in-cluster storage.

## Instructions

### 1. Preflight

- Pin `--context` and `-n` on every `kubectl` call, as the commands below do, and bound every wait with a timeout.
- `nsight_operator_dynamo.py` and `nsight_operator.py` have no `--context` option; they use the kubeconfig's current
context. Before each call to either script, check that `kubectl config current-context` prints `<context>`. If it
does not, stop and ask the user: do not switch the shared kubeconfig's context on your own. With the user's approval,
run the scripts with `KUBECONFIG` set to a kubeconfig whose current context is `<context>`.
- Check that the operator is 26.3 or newer:
`kubectl --context <context> -n <namespace> explain nsightoperatorprofileconfig.spec.injectionRules.podObjectSelector`
must succeed, and `python3 nsight_operator.py profiler-start --help` must list `--delay` and `--duration`. If either
fails, stop and ask the user to upgrade Nsight Operator and use the matching CLI.
- Check the real labels of the DGD's pods, when they exist, before choosing a path in step 2:
`kubectl --context <context> -n <namespace> get pods -l nvidia.com/dynamo-graph-deployment-name=<dgd> --show-labels`.
Component types are lowercase; `Frontend` is a component name, not a type. If the workers carry
`nvidia.com/dynamo-sub-component-type` with type `worker`, use your own profile config (2b): the helper cannot select
only prefill or only decode workers on those pods.
- Point the CLI at this namespace's gateway: the CLI reads the gateway from `~/.nsight-cloud.conf`, not from the kube
context. If the namespace already has an Nsight gateway
(`kubectl --context <context> -n <namespace> get nsightgateways`), run
`python3 nsight_operator.py autoconfigure -n <namespace>`, or `configure` where the user keeps the storage key off
this machine, and check that the next `status` succeeds. Otherwise the gateway appears when the first profiled pod is
admitted; configure the CLI then, in step 4, before the first `status`.
- List existing profile configs in the namespace. Do not reuse or overwrite another test's config, tool-config, or rule
names. `dynamo-profile-config` belongs to Nsight's helper; never write it by hand.
- If the CLI is configured, run `python3 nsight_operator.py --tag <tag> status` to see whether the tag already holds
a session. A tag holds one
session at a time. `<tag>` is `default` on the helper path and the DGD name on the own-config path.

### 2. Configure Profiling

Choose one path and tell the user which one and why.

#### 2a. Nsight's Dynamo Helper

Use the helper when the operator runs with auto-provisioning, in-cluster storage is enough, and no one else profiles in
the namespace with the helper. Its `configure` command applies one profile config named `dynamo-profile-config`, with
a coordinator tool config, on the `default` tag. A second `configure` in the same namespace replaces it.

```bash
python3 nsight_operator_dynamo.py -n <namespace> configure \
--deployment-name <dgd> \
--components <type> [<type> ...] \
--nsys-profile-args "-t cuda,nvtx,osrt --cuda-graph-trace=node --python-sampling=true"
```

- `-n` goes before the subcommand.
- Pass lowercase component types, such as `frontend`, `worker`, `prefill`, or `decode`. The helper compares them with
`nvidia.com/dynamo-component-type`, so `Frontend` or `Backend` selects no pod.
- Always pass `--deployment-name`. Without it the helper selects every Dynamo pod in the namespace. It matches pods
whose name contains the string, so check that no other DGD's name contains it.
- Always pass `--nsys-profile-args`. The default adds `--pytorch=autograd-nvtx`. Keep `--cuda-graph-trace=node`:
without it, kernels launched by CUDA graphs produce no kernel rows, and step 6 would report the capture as incomplete.
- Never pass `--gpu-metrics`; it applies a DaemonSet whose pods run privileged. Never run the helper's `install` or
`uninstall`; they install or remove the operator for the whole cluster, which is the cluster admin's job.
- Read the profile config the helper prints, then continue at step 3 with `<tag>` = `default`.

#### 2b. Your Own Profile Config

Use your own config for S3 reports, a tag per DGD, process patterns per component, or when the helper's config would
collide with someone else's. Start from the page's template. Then:

- Add one rule per requested component. Select on `nvidia.com/dynamo-graph-deployment-name: <dgd>` plus the component
label from the page's table that the observed labels support:
- a component type, for example `nvidia.com/dynamo-component-type: decode`. It matches every component of that type.
- `nvidia.com/dynamo-sub-component-type: prefill` or `decode` for workers that kept type `worker` across an operator
upgrade.
- `nvidia.com/dynamo-component: <component name>`, with the name's case kept, to select one named component when
several share a type, or a component without a type, such as a standalone router.
- To record only decode workers, write only the decode rule.
- Put the same literal tag, the DGD name, on every rule. Use per-test names for the config, the tool configs, and the
rules.
- Write process patterns with `[.]`, never a backslash.
- Leave out `--pytorch=autograd-nvtx`, `--gpu-metrics`, and `--trace-fork-before-exec`.
- Validate with `kubectl --context <context> -n <namespace> apply --dry-run=server -f <file>`, then apply it with the
same flags. Use `<tag>` = the DGD name in later steps.

### 3. Get Fresh Pods

Only pods created after the config exists are profiled.

- New DGD: apply the config first, then hand the DGD to `deploy-dynamo-recipe` (ask before applying it).
- Running DGD: ask before restarting its pods. Restarting GPU workers can stall on a full cluster.
- Wait until every selected pod is Ready. The first profiled pod in a namespace can wait while Nsight's services start.

### 4. Confirm Injection

- Derive the expected pods from the DGD and the selectors
(`kubectl --context <context> -n <namespace> get pods -l ...`), never from the agents that happened to register.
- If the CLI is not configured yet, configure it now as in step 1. Then
`python3 nsight_operator.py --tag <tag> status` must list one collection agent per expected pod. Ignore
`otlp-converter-*` entries; they are Nsight's OpenTelemetry converter.
- If a pod is missing, follow Nsight's sidecar injection checks, check the pod's init containers and its
`nsight-profile.nvidia.com/profiles` annotation, and set `logOutput` on the rule for the process hook's log. Hand
pod failures to `troubleshoot-dynamo`.

### 5. Capture One Window

- Start the load first: the user's own tool, or `run-aiperf-benchmark`.
- Run:

```bash
python3 nsight_operator.py --tag <tag> session-begin --title <dgd>
python3 nsight_operator.py --tag <tag> profiler-start --delay <warm-up seconds> --duration <seconds>
```

- Use `nsight_operator.py` windows by default. A window started with `kubectl exec ... nsys start` in one injected pod
also works, but its report stays only inside that pod's `main` container: it is not uploaded, `ls` does not list it,
and it is lost if the container restarts. Use it only when the user asks for one exact pod, and copy the report out
as the docs page shows.

### 6. Collect And Verify

- Reports appear only after the delay, the window, report generation, and the upload. Set a polling deadline of the
delay plus the window plus 10 minutes, unless the user gives another one, and tell the user the deadline.
- Poll `python3 nsight_operator.py --tag <tag> ls` until every expected pod has a report or the deadline passes.
- Download while the session is still active, because `ls` and `download` use the tag's active session unless
`--session <UUID>` is passed. Then end the session, also when the deadline passed:

```bash
python3 nsight_operator.py --tag <tag> download -o <dir>
python3 nsight_operator.py --tag <tag> session-end
```

Instead of `download`, you can read the reports from the bucket with the user's credentials.
- Check completeness: every expected pod has a report, and every GPU worker report contains kernel rows
(`nsys stats --report cuda_gpu_kern_sum <file>`). Report a missing pod or a GPU report without kernels as an
incomplete capture; do not present partial results as complete.
- If the deadline passed, check `status` and injection for each missing pod, and report the capture as incomplete
with the reports you have.
- Only then remove the profile config, and the DGD if the user created it only for this test. On the helper path,
check the current context, then run `python3 nsight_operator_dynamo.py -n <namespace> unconfigure`. On the
own-config path, run
`kubectl --context <context> -n <namespace> delete nsightoperatorprofileconfig <config name>`.

### 7. Hand Off Analysis

Use `nsys stats`, `nsys recipe`, or the agent skill that ships with recent Nsight Systems releases for analysis. Run
heavy analysis where the reports are, not on shared login hosts.

## Output Contract

Report:

- the namespace, the DGD, and the components and pods captured;
- the tag, the session, and the window start time and length;
- the report location for every expected pod, and the completeness verdict;
- the `nsys` arguments and NVTX variables used;
- anything skipped or not verified.

## Limitations

- A tag holds one session at a time, so one test per tag.
- Selection is per component; all replicas of a component share the tag.
- Tested on Nsight Operator 26.3 with vLLM, SGLang, and TensorRT-LLM, in aggregated and disaggregated DGDs. Not yet
tested: upload to external S3, workers with more than one GPU, and Dynamo sidecar mode.

## References

- `docs/fern/pages/kubernetes/operations/nsight-operator-profiling.mdx`: the helper, template, labels, settings, and
pitfalls.
- [Nsight Operator documentation](https://docs.nvidia.com/nsight-operator/), including the multitenant quickstart and
the CLI reference.
Loading
Loading