Skip to content
Merged
Show file tree
Hide file tree
Changes from 102 commits
Commits
Show all changes
203 commits
Select commit Hold shift + click to select a range
d7cf898
feat(operator): add LPX integration
andrewpaprotsky Sep 9, 2026
e58aad7
fix(operator): separate LPX scaling-group replicas
andrewpaprotsky Sep 9, 2026
f785f20
fix(operator): let LPX own PodCliqueSet identity
andrewpaprotsky Sep 9, 2026
ff93d1c
fix(operator): use conductor image for SSH init
andrewpaprotsky Sep 9, 2026
5b2d46a
fix(operator): preserve DGD placement status (#424)
andrewpaprotsky Sep 9, 2026
9da4166
fix(operator): ignore foreign LPX child during finalization (#425)
andrewpaprotsky Sep 9, 2026
c60c3c4
refactor(operator): narrow the LPX Grove seam (#426)
andrewpaprotsky Sep 9, 2026
b75fc18
fix(operator): scope fsGroup policy to LPX pods (#427)
andrewpaprotsky Sep 10, 2026
6260265
fix(operator): preserve args-only LPX entrypoints (#428)
andrewpaprotsky Sep 10, 2026
66ec78d
fix(operator): clamp LPX CPU request to limit (#429)
andrewpaprotsky Sep 10, 2026
38c5255
fix(operator): bound LPX auxiliary names (#430)
andrewpaprotsky Sep 10, 2026
c065d37
refactor(operator): give LPX roles semantic names (#431)
andrewpaprotsky Sep 10, 2026
7d9d853
fix(operator): reserve LPX role container names (#432)
andrewpaprotsky Sep 10, 2026
4786dc5
fix(operator): use canonical conductor control-plane port flag
gradenr Sep 11, 2026
2476aa9
fix(operator): root LPX children in LGD identity (#433)
andrewpaprotsky Sep 11, 2026
825c7fc
fix(operator): preserve LPX engines and immutable runtime config (#434)
andrewpaprotsky Sep 11, 2026
86e1169
fix(operator): evict LPX failure-domain neighbors (#435)
andrewpaprotsky Sep 11, 2026
9153741
fix(docs): support cross-version API type references (#437)
andrewpaprotsky Sep 11, 2026
4b3ff71
docs(operator): explain LPX finalizer handshake (#438)
andrewpaprotsky Sep 11, 2026
fc7d7f4
test(operator): cover LPX eviction ownership changes (#439)
andrewpaprotsky Sep 11, 2026
5600d70
fix(operator): bound LPX model download checks (#440)
andrewpaprotsky Sep 11, 2026
58b2e0d
fix(operator): clean up stale LPX runtime config (#441)
andrewpaprotsky Sep 11, 2026
85f5186
fix(operator): resolve Grove watch ownership (#442)
andrewpaprotsky Sep 11, 2026
a0e8c28
refactor(operator): keep provider rejection in program (#443)
andrewpaprotsky Sep 11, 2026
c69ed58
refactor(operator): isolate LPX restart observation (#444)
andrewpaprotsky Sep 11, 2026
db52c6f
refactor(operator): model absent ordinary Grove workload (#445)
andrewpaprotsky Sep 11, 2026
2b17bab
fix(helm): require Grove for LPX (#446)
andrewpaprotsky Sep 11, 2026
b958447
fix(operator): validate LPX ConfigMap size (#447)
andrewpaprotsky Sep 11, 2026
162fe39
fix(operator): use fixed LPX SSH volume name (#448)
andrewpaprotsky Sep 11, 2026
113a2ae
fix(operator): report LPX component runtime namespaces (#450)
andrewpaprotsky Sep 11, 2026
0b2460d
fix(operator): bound LPX metadata snapshot RPCs (#455)
andrewpaprotsky Sep 11, 2026
7d5c415
fix(operator): preserve direct LPX agent pod security (#457)
andrewpaprotsky Sep 11, 2026
9260de6
fix(operator): reject LPX init container name collisions (#458)
andrewpaprotsky Sep 11, 2026
fd499e4
test(operator): cover ordinary Grove PCS identity (#459)
andrewpaprotsky Sep 11, 2026
2e24946
fix(operator): refresh LPX APIs and eviction identity (#454)
kathleenfrench Sep 11, 2026
11c373b
refactor(operator): keep PCS absence in workload convergence (#461)
andrewpaprotsky Sep 12, 2026
f63c48e
fix(operator): preserve Cyborg partition zero (#462)
andrewpaprotsky Sep 12, 2026
b6223dd
test(operator): preserve projected Cyborg endpoints (#464)
andrewpaprotsky Sep 12, 2026
c4bf30e
docs(operator): correct LPX replica limits (#466)
andrewpaprotsky Sep 12, 2026
d692870
fix(operator): fence PCSG readiness by controller UID (#467)
andrewpaprotsky Sep 12, 2026
59134d6
fix(operator): verify the LPX PodGang API prerequisite (#468)
andrewpaprotsky Sep 12, 2026
7e25841
fix(operator): reconcile LPX staging with main
andrewpaprotsky Sep 12, 2026
f3e7730
fix(operator): remove LPX CRD schema compaction (#470)
andrewpaprotsky Sep 12, 2026
a1f17d9
fix(operator): align Python generation with upstream and refresh schemas
andrewpaprotsky Sep 12, 2026
ad8e441
fix(operator): bound local build inventory acquisition (#473)
andrewpaprotsky Sep 13, 2026
a23b576
fix(operator): reject conductor SSH key volume collisions (#475)
andrewpaprotsky Sep 13, 2026
c2eee54
fix(operator): reject ignored LPX draft minimum availability (#476)
andrewpaprotsky Sep 13, 2026
9dd0470
fix(operator): reject non-regular local manifests
andrewpaprotsky Sep 13, 2026
74eac8f
fix(operator): add copyright headers to LPX fixtures
andrewpaprotsky Sep 14, 2026
9469d08
fix(operator): validate LPX host-device volumes
andrewpaprotsky Sep 14, 2026
f43dc3e
fix(operator): reject read-only LPX Agent temporary storage
andrewpaprotsky Sep 14, 2026
eab93bb
refactor(operator): remove strategic PodTemplate merging
andrewpaprotsky Sep 14, 2026
fa8077d
docs(helm): clarify LPX integration enablement
andrewpaprotsky Sep 14, 2026
57e2b36
chore(helm): remove redundant test exclusion comment
andrewpaprotsky Sep 14, 2026
89be03d
refactor(operator): align role PodTemplate with upstream
andrewpaprotsky Sep 14, 2026
6f712fd
refactor(operator)!: clean up legacy LPU API compatibility
andrewpaprotsky Sep 14, 2026
df87346
fix(operator): refresh Grove scheduling diagnostics
andrewpaprotsky Sep 14, 2026
27f6148
fix(operator): retry incomplete LPX model refreshes
andrewpaprotsky Sep 14, 2026
5430372
fix(operator): preserve LPX PodCliqueSet list order
andrewpaprotsky Sep 14, 2026
f52b411
fix(operator): scope device volume checks to LP30 init
andrewpaprotsky Sep 14, 2026
1de6c88
docs(operator): restore upstream BackendFramework comment
andrewpaprotsky Sep 14, 2026
1895334
fix(operator): preserve omitted LPX replicas through admission (#495)
andrewpaprotsky Sep 14, 2026
eba9c3b
fix(operator): use Grove scale subresource for LPX replicas (#496)
andrewpaprotsky Sep 15, 2026
5e59774
docs(operator): align remaining backend comments with upstream (#498)
andrewpaprotsky Sep 15, 2026
a9b2e32
test(docs): update Kubernetes API type counts (#500)
andrewpaprotsky Sep 15, 2026
a9607ff
fix(operator): retire removed LPX before ordinary reconciliation (#501)
andrewpaprotsky Sep 15, 2026
a7903a5
refactor(operator): relocate generated LPX bindings (#502)
andrewpaprotsky Sep 15, 2026
e8ff1f8
fix(operator): reuse LPX SSH host keys on restart (#503)
andrewpaprotsky Sep 15, 2026
cc59129
fix(operator): finish LPX cleanup when request API is removed (#504)
andrewpaprotsky Sep 16, 2026
45c897b
refactor(lpx): use runtime image entrypoints (#505)
andrewpaprotsky Sep 16, 2026
b9f8c98
chore(codeowners): add LPX co-ownership
andrewpaprotsky Sep 16, 2026
347e4dc
refactor(helm): align Grove configuration with upstream (#508)
andrewpaprotsky Sep 16, 2026
c2711ce
fix(lpx): retire changed intent before Grove updates (#509)
andrewpaprotsky Sep 16, 2026
9f26fd8
fix(lpx): report source watch lookup failures (#510)
andrewpaprotsky Sep 16, 2026
d5ae24d
fix(lpx): propagate datacenter encoding errors (#512)
andrewpaprotsky Sep 16, 2026
e536635
refactor(lpx): separate retirement from operational errors (#514)
andrewpaprotsky Sep 16, 2026
8151289
refactor(lpx): isolate pure request decisions (#515)
andrewpaprotsky Sep 16, 2026
9362266
fix(lpx): stop enabling worker tty and stdin by default (#513)
steved Sep 16, 2026
bce7d64
fix(operator): make LPX workload names readable (#517)
andrewpaprotsky Sep 17, 2026
adfebdd
fix(operator): preserve LPX replica seeds during native scaling (#518)
andrewpaprotsky Sep 17, 2026
8235aa1
refactor(operator)!: let LPX pod templates own runtime startup (#519)
andrewpaprotsky Sep 17, 2026
fba0382
fix(operator): relax Cyborg model-storage validation (#520)
andrewpaprotsky Sep 17, 2026
43b5eba
refactor(lpx)!: move ownership of LpuPipelineRequest to PodCliqueSet …
steved Sep 17, 2026
bc49331
refactor(lpx)!: simplify LPR deadline handling (#506)
steved Sep 17, 2026
f0e89cb
fix(operator): use Grove LPX scheduler backend (#402)
steved Sep 17, 2026
7ff723d
refactor(operator)!: let LPX pod templates own pod settings (#521)
andrewpaprotsky Sep 17, 2026
37b36f1
fix(operator): check LPX PCS ownership before scaling (#523)
andrewpaprotsky Sep 17, 2026
99a4a51
fix(operator): download uncached LPX successor builds (#524)
andrewpaprotsky Sep 17, 2026
219afcc
fix(operator): retain exact LPX deadline cleanup requests (#526)
andrewpaprotsky Sep 17, 2026
9d8403c
fix(operator): check missing LPX PCS request owner name (#527)
andrewpaprotsky Sep 17, 2026
9bd7d9a
fix(operator): bound LPX engine replicas (#528)
andrewpaprotsky Sep 18, 2026
ba4240b
docs(operator): correct LPX security context ownership (#529)
andrewpaprotsky Sep 18, 2026
31b677c
fix(codeowners): include LPX in generated artifact owners
andrewpaprotsky Sep 18, 2026
fd1d692
refactor(operator): let LPX runtimes consume build manifests (#531)
andrewpaprotsky Sep 18, 2026
d42d252
docs(helm): correct LPX startup prerequisites (#532)
andrewpaprotsky Sep 18, 2026
299f798
fix(operator): require Cyborg to consume declared resource claims (#533)
andrewpaprotsky Sep 18, 2026
817e61d
refactor(lpx): defer model configuration to runtimes (#534)
andrewpaprotsky Sep 18, 2026
b8ae764
fix(operator): reject unused hybrid runtime overrides (#536)
andrewpaprotsky Sep 18, 2026
9e07b9f
refactor(lpx): move model configuration into pod templates (#537)
andrewpaprotsky Sep 18, 2026
30ac06c
refactor(lpx): remove deployment settings (#538)
andrewpaprotsky Sep 18, 2026
535a006
fix(operator): preserve LPX endpoint Service allocations
andrewpaprotsky Sep 18, 2026
f8b7ab8
refactor(lpx): leave runtime bindings to pod templates (#540)
andrewpaprotsky Sep 18, 2026
c18f27d
chore(codeowners): cover LPX integration filenames
andrewpaprotsky Sep 18, 2026
bb71fcf
docs(kubernetes): remove LPX details from DGD guide
andrewpaprotsky Sep 18, 2026
18392f1
chore: merge main into LPX integration
andrewpaprotsky Sep 22, 2026
709ef36
fix(operator): reject absolute builds with a configured LPX registry
andrewpaprotsky Sep 22, 2026
268fd38
fix(operator): skip LPX in shared checkpoint reconciliation
andrewpaprotsky Sep 22, 2026
c1ba618
fix(operator): grant Grove owner-reference permission
andrewpaprotsky Sep 22, 2026
cbe1564
fix(operator): avoid idle LPX deadline polling
andrewpaprotsky Sep 22, 2026
281cfd3
refactor(lpx)!: remove placement status from LPXGD
steved Sep 21, 2026
fdbbb98
refactor(lpx)!: lpx controller readability and refactor
steved Sep 17, 2026
274172b
feat: support multiple LPX components
steved Sep 22, 2026
6a7ded8
fix(lpx): allowing scaling of cyborg replicas
steved Sep 22, 2026
9e14107
test(operator): restore PCSG readiness coverage
andrewpaprotsky Sep 23, 2026
4655cec
docs(operator): explain PCS owner-reference RBAC
andrewpaprotsky Sep 23, 2026
a165b48
refactor(operator): remove LPX eviction controller
andrewpaprotsky Sep 23, 2026
20042d7
refactor(operator): keep LPX download status on the child
andrewpaprotsky Sep 23, 2026
465ba3d
Update deploy/operator/api/v1beta1/dynamocomponentdeployment_types.go
andrewpaprotsky Sep 23, 2026
9d0130d
fix(operator): preserve complete roles documentation
andrewpaprotsky Sep 23, 2026
d044e92
fix(operator): scope LPX scheduling deadlines to components
andrewpaprotsky Sep 23, 2026
63031ac
style(docs): format LPX API reference test
andrewpaprotsky Sep 23, 2026
ea355e3
fix(operator): keep component readiness on LPX deployments
andrewpaprotsky Sep 23, 2026
811f209
refactor(operator): tidy LPX API helpers and documentation
andrewpaprotsky Sep 23, 2026
dbc464e
fix(operator): persist Cyborg replica counts in PCS templates (#555)
steved Sep 23, 2026
f7262ab
refactor(operator): move LPX constants into the API (#557)
andrewpaprotsky Sep 23, 2026
9238960
refactor(operator): remove redundant LPX checkpoint guard
andrewpaprotsky Sep 23, 2026
12110e0
fix(operator): clarify component provider rejection (#558)
andrewpaprotsky Sep 23, 2026
2837cef
refactor(operator): simplify Grove component projection (#559)
andrewpaprotsky Sep 23, 2026
265ce03
perf(operator): avoid deep-copying Grove projections
andrewpaprotsky Sep 23, 2026
b201c3d
fix(operator): require parallel LPX restarts
andrewpaprotsky Sep 23, 2026
808ea28
Merge branch 'main' into upstream-lpx-integration
andrewpaprotsky Sep 23, 2026
38b7c88
Merge branch 'main' into upstream-lpx-integration
andrewpaprotsky Sep 24, 2026
e93e77a
docs(operator): correct LPX conductor and placement references
andrewpaprotsky Sep 24, 2026
91d4a73
refactor(operator): remove unused pod spec helpers
andrewpaprotsky Sep 24, 2026
c9fab88
refactor(operator): remove unused LPX generation annotation
andrewpaprotsky Sep 24, 2026
443b816
fix(operator): bind LPX allocation before authored references
andrewpaprotsky Sep 24, 2026
8961f70
refactor(operator): remove obsolete environment helper
andrewpaprotsky Sep 24, 2026
70530a1
refactor(operator): remove test-only conductor clique field
andrewpaprotsky Sep 24, 2026
05ced10
refactor(operator): remove test-only ConfigMap naming helper
andrewpaprotsky Sep 24, 2026
2aa53e8
fix(operator): admit LPX native scaling above one engine
andrewpaprotsky Sep 24, 2026
4c2f6f2
refactor(operator): remove unused LPX ownership helpers
andrewpaprotsky Sep 24, 2026
3e48f18
refactor(operator): leave LPX child deletion to owner garbage collection
andrewpaprotsky Sep 24, 2026
c45db8c
refactor(operator): remove unreachable LPX deselection cleanup
andrewpaprotsky Sep 24, 2026
8dd3621
test(operator): preserve environment order in LPX render goldens
andrewpaprotsky Sep 24, 2026
8af22cf
refactor(operator): remove duplicate LPX conductor validation
andrewpaprotsky Sep 24, 2026
6aca369
refactor(operator): restore pod-cache projection parity
andrewpaprotsky Sep 24, 2026
60749ba
refactor(operator): render Cyborg configuration at its consumer
andrewpaprotsky Sep 24, 2026
629cbab
refactor(operator): skip ordinary PCS handling for LPX-only graphs
andrewpaprotsky Sep 24, 2026
455d5c6
refactor(operator): remove unused manifest build-root mode
andrewpaprotsky Sep 24, 2026
cedf1b2
refactor(operator): remove unused LPX pending error
andrewpaprotsky Sep 24, 2026
0a4bcab
fix(operator): preserve failover group availability
andrewpaprotsky Sep 24, 2026
e1e12de
fix(operator): deliver ordinary restarts before persisting selection
andrewpaprotsky Sep 24, 2026
f621952
refactor(operator): remove redundant backend parsing
andrewpaprotsky Sep 24, 2026
9c9bf58
refactor(operator): remove redundant LPX UID annotations
andrewpaprotsky Sep 24, 2026
a6ca2cf
refactor(operator): trust validated LPX deadline targets
andrewpaprotsky Sep 24, 2026
5d431b6
refactor(operator): omit unused LPX backend fingerprint input
andrewpaprotsky Sep 24, 2026
ba1f4e8
refactor(operator): reuse component labels for LPX readiness
andrewpaprotsky Sep 24, 2026
e5cf4b6
refactor(operator): validate prop-sync chain length at manifest boundary
andrewpaprotsky Sep 24, 2026
411e4ab
refactor(operator): remove redundant LPX scheduler assignment
andrewpaprotsky Sep 25, 2026
bdc3051
refactor(operator): remove redundant LPX code
andrewpaprotsky Sep 25, 2026
248dd27
refactor(operator): avoid redundant LPX copies and writes
andrewpaprotsky Sep 25, 2026
015a6eb
refactor(operator): avoid copying converted ports twice
andrewpaprotsky Sep 25, 2026
7c36647
refactor(operator): reuse the owned LPX security context
andrewpaprotsky Sep 25, 2026
74c1314
refactor(operator): ignore unused LPX template hash updates
andrewpaprotsky Sep 25, 2026
3d91e13
refactor(operator): remove redundant PCS annotation allocation
andrewpaprotsky Sep 25, 2026
8d59a63
refactor(operator): reuse LPX conductor labels and count
andrewpaprotsky Sep 25, 2026
d9b3c5b
refactor(operator): remove redundant LPX checks
andrewpaprotsky Sep 25, 2026
0a78776
refactor(operator): remove unused LPX dependencies and copies
andrewpaprotsky Sep 25, 2026
2c1286c
refactor(operator): reuse the validated LPX restart token
andrewpaprotsky Sep 25, 2026
1621400
refactor(operator): simplify Cyborg startup dependencies
andrewpaprotsky Sep 25, 2026
16c1eb1
fix(operator): skip download bookkeeping for local LPX builds
andrewpaprotsky Sep 25, 2026
ece8141
refactor(operator): preserve existing LPX scheduling failures
andrewpaprotsky Sep 25, 2026
e33cacd
refactor(operator): simplify HX node-count compatibility
andrewpaprotsky Sep 25, 2026
f3f4a53
refactor(operator): retain HX runtime partitions
andrewpaprotsky Sep 25, 2026
a33c270
refactor(operator): skip unused LPX reconciliation work
andrewpaprotsky Sep 25, 2026
279be26
refactor(operator): simplify LPX status projection
andrewpaprotsky Sep 25, 2026
b7e7d59
refactor(operator): avoid redundant LPX derived work
andrewpaprotsky Sep 26, 2026
f7d038a
refactor(operator): skip no-op LPX reconciliation
andrewpaprotsky Sep 26, 2026
301e6ac
refactor(operator): skip unused LPX evaluation work
andrewpaprotsky Sep 26, 2026
ecef5b5
refactor(operator): skip unused reconciliation preparation
andrewpaprotsky Sep 26, 2026
59caec6
refactor(operator): defer LPX requests until PCS observation
andrewpaprotsky Sep 26, 2026
bb14f74
refactor(operator): skip unused LPX role calculations
andrewpaprotsky Sep 26, 2026
e09c305
refactor(operator): skip unaffected deadline cleanup groups
andrewpaprotsky Sep 26, 2026
13fd373
perf(operator): avoid redundant LPX hashing and indexing
andrewpaprotsky Sep 27, 2026
d014f60
perf(operator): skip unnecessary LPX restart and deadline work
andrewpaprotsky Sep 27, 2026
e644da3
perf(operator): reconcile scaling adapters only for ordinary components
andrewpaprotsky Sep 27, 2026
5ad6600
test(operator): remove obsolete LPX tests and disconnected assertions
andrewpaprotsky Sep 27, 2026
50dc443
test(operator): drop retired build ID encoding from LPX fixtures
andrewpaprotsky Sep 27, 2026
68d9500
refactor(operator): complete LPX restarts from aggregate readiness
andrewpaprotsky Sep 27, 2026
4a1e376
refactor(operator): hash Grove workers from the ordinary projection
andrewpaprotsky Sep 27, 2026
adec4b4
test(operator): exercise successful reconciliation without LPX child …
andrewpaprotsky Sep 27, 2026
92b9550
refactor(operator): remove unreachable absent-child LPX status handling
andrewpaprotsky Sep 27, 2026
da0471a
test(operator): advance generation for unselected LPX restart edits
andrewpaprotsky Sep 28, 2026
d37bc3c
refactor(operator): remove redundant LPX restart-token validation
andrewpaprotsky Sep 28, 2026
e36572c
fix(operator): use beta paths for LPX conductor errors
andrewpaprotsky Sep 28, 2026
4ad02ea
fix(operator): enforce the LPX feature gate
andrewpaprotsky Sep 28, 2026
8adf556
docs(operator): separate LPX API comment paragraphs
andrewpaprotsky Sep 28, 2026
59cbd6c
chore: merge main into LPX integration branch
andrewpaprotsky Sep 28, 2026
f90624b
chore: merge updated main into LPX integration branch
andrewpaprotsky Sep 28, 2026
3104d46
chore: merge main into LPX integration branch
andrewpaprotsky Sep 28, 2026
3546a43
fix(tests): use host CUDA library for TRTLLM checkpoints
andrewpaprotsky Sep 29, 2026
cf24cb0
chore: merge main into LPX integration
andrewpaprotsky Sep 29, 2026
5143224
revert(tests): remove checkpoint CUDA library workaround
andrewpaprotsky Sep 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .github/codeowners/areas.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -425,6 +425,11 @@ areas:
- deploy/utils/tests/
- examples/deployments/
- tests/deploy/
- label: lpx
github_team: '@ai-dynamo/dynamo-lpx-codeowners'
path_globs:
- deploy/operator/internal/controller/lpx/
- deploy/operator/internal/dynamo/lpx/
- label: gms
github_team: '@ai-dynamo/dynamo-gms-codeowners'
path_globs:
Expand Down Expand Up @@ -575,6 +580,7 @@ shared:
- frontend
- gms
- kv-memory
- lpx
- multimodal
- observability
- operator
Expand Down Expand Up @@ -980,6 +986,14 @@ shared:
owners:
- operator
- observability
- glob: deploy/operator/internal/controller/lpx/
owners:
- operator
- lpx
- glob: deploy/operator/internal/dynamo/lpx/
owners:
- operator
- lpx
- glob: deploy/operator/internal/controller/*checkpoint*
owners:
- operator
Expand Down
8 changes: 7 additions & 1 deletion CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
# frontend @ai-dynamo/dynamo-frontend-codeowners
# gms @ai-dynamo/dynamo-gms-codeowners
# kv-memory @ai-dynamo/dynamo-kv-memory-codeowners
# lpx @ai-dynamo/dynamo-lpx-codeowners
# multimodal @ai-dynamo/dynamo-multimodal-codeowners
# observability @ai-dynamo/dynamo-observability-codeowners
# operator @ai-dynamo/dynamo-operator-codeowners
Expand Down Expand Up @@ -45,6 +46,7 @@
# @ai-dynamo/dynamo-frontend-codeowners
# @ai-dynamo/dynamo-gms-codeowners
# @ai-dynamo/dynamo-kv-memory-codeowners
# @ai-dynamo/dynamo-lpx-codeowners
# @ai-dynamo/dynamo-multimodal-codeowners
# @ai-dynamo/dynamo-observability-codeowners
# @ai-dynamo/dynamo-operator-codeowners
Expand Down Expand Up @@ -539,6 +541,7 @@ requirements.txt
/lib/llm/src/block_manager/layout.rs @ai-dynamo/dynamo-kv-memory-codeowners
/tests/fault_tolerance/cancellation/ @ai-dynamo/dynamo-fault-tolerance-codeowners
/deploy/operator/internal/checkpoint/ @ai-dynamo/dynamo-gms-codeowners
/deploy/operator/internal/dynamo/lpx/ @ai-dynamo/dynamo-lpx-codeowners
/dev/observability/prometheus-xpu.yml @ai-dynamo/dynamo-xpu-codeowners
/lib/llm/src/block_manager/connector/ @ai-dynamo/dynamo-kv-memory-codeowners
/lib/llm/src/block_manager/offload.rs @ai-dynamo/dynamo-kv-memory-codeowners
Expand All @@ -556,6 +559,7 @@ requirements.txt
/lib/llm/src/block_manager/controller.rs @ai-dynamo/dynamo-kv-memory-codeowners
/components/src/dynamo/common/multimodal/ @ai-dynamo/dynamo-multimodal-codeowners
/components/src/dynamo/trtllm/multimodal/ @ai-dynamo/dynamo-multimodal-codeowners
/deploy/operator/internal/controller/lpx/ @ai-dynamo/dynamo-lpx-codeowners
/lib/llm/src/block_manager/distributed.rs @ai-dynamo/dynamo-kv-memory-codeowners
/lib/llm/src/block_manager/kv_consolidator/ @ai-dynamo/dynamo-kv-memory-codeowners
/tests/serve/multimodal_profiles/vllm_xpu.py @ai-dynamo/dynamo-xpu-codeowners
Expand All @@ -576,7 +580,7 @@ requirements.txt
/.codex/ @ai-dynamo/dynamo-process-codeowners @ai-dynamo/dynamo-agents-codeowners
/agents/ @ai-dynamo/dynamo-process-codeowners @ai-dynamo/dynamo-agents-codeowners
/.agents/ @ai-dynamo/dynamo-process-codeowners @ai-dynamo/dynamo-agents-codeowners
/CODEOWNERS @ai-dynamo/dynamo-process-codeowners @ai-dynamo/dynamo-agents-codeowners @ai-dynamo/dynamo-backend-sglang-codeowners @ai-dynamo/dynamo-backend-trtllm-codeowners @ai-dynamo/dynamo-backend-vllm-codeowners @ai-dynamo/dynamo-diffusion-codeowners @ai-dynamo/dynamo-docs-codeowners @ai-dynamo/dynamo-epp-codeowners @ai-dynamo/dynamo-fault-tolerance-codeowners @ai-dynamo/dynamo-frontend-codeowners @ai-dynamo/dynamo-gms-codeowners @ai-dynamo/dynamo-kv-memory-codeowners @ai-dynamo/dynamo-multimodal-codeowners @ai-dynamo/dynamo-observability-codeowners @ai-dynamo/dynamo-operator-codeowners @ai-dynamo/dynamo-ops-codeowners @ai-dynamo/dynamo-performance-codeowners @ai-dynamo/dynamo-planner-codeowners @ai-dynamo/dynamo-rl-codeowners @ai-dynamo/dynamo-router-codeowners @ai-dynamo/dynamo-runtime-codeowners @ai-dynamo/dynamo-tokenspeed-codeowners @ai-dynamo/dynamo-xpu-codeowners
/CODEOWNERS @ai-dynamo/dynamo-process-codeowners @ai-dynamo/dynamo-agents-codeowners @ai-dynamo/dynamo-backend-sglang-codeowners @ai-dynamo/dynamo-backend-trtllm-codeowners @ai-dynamo/dynamo-backend-vllm-codeowners @ai-dynamo/dynamo-diffusion-codeowners @ai-dynamo/dynamo-docs-codeowners @ai-dynamo/dynamo-epp-codeowners @ai-dynamo/dynamo-fault-tolerance-codeowners @ai-dynamo/dynamo-frontend-codeowners @ai-dynamo/dynamo-gms-codeowners @ai-dynamo/dynamo-kv-memory-codeowners @ai-dynamo/dynamo-lpx-codeowners @ai-dynamo/dynamo-multimodal-codeowners @ai-dynamo/dynamo-observability-codeowners @ai-dynamo/dynamo-operator-codeowners @ai-dynamo/dynamo-ops-codeowners @ai-dynamo/dynamo-performance-codeowners @ai-dynamo/dynamo-planner-codeowners @ai-dynamo/dynamo-rl-codeowners @ai-dynamo/dynamo-router-codeowners @ai-dynamo/dynamo-runtime-codeowners @ai-dynamo/dynamo-tokenspeed-codeowners @ai-dynamo/dynamo-xpu-codeowners
/agent-docs/ @ai-dynamo/dynamo-process-codeowners @ai-dynamo/dynamo-agents-codeowners
/.lycheeignore @ai-dynamo/dynamo-ops-codeowners @ai-dynamo/dynamo-docs-codeowners
/tests/deploy/ @ai-dynamo/dynamo-ops-codeowners @ai-dynamo/dynamo-operator-codeowners
Expand Down Expand Up @@ -646,6 +650,7 @@ requirements.txt
/lib/llm/src/http/service/metrics.rs @ai-dynamo/dynamo-frontend-codeowners @ai-dynamo/dynamo-observability-codeowners
/container/deps/requirements.vllm.txt @ai-dynamo/dynamo-ops-codeowners @ai-dynamo/dynamo-backend-vllm-codeowners
/deploy/operator/internal/checkpoint/ @ai-dynamo/dynamo-gms-codeowners @ai-dynamo/dynamo-operator-codeowners
/deploy/operator/internal/dynamo/lpx/ @ai-dynamo/dynamo-operator-codeowners @ai-dynamo/dynamo-lpx-codeowners
/lib/llm/src/preprocessor/mm_routing/ @ai-dynamo/dynamo-frontend-codeowners @ai-dynamo/dynamo-multimodal-codeowners @ai-dynamo/dynamo-router-codeowners
/lib/llm/src/protocols/openai/audios/ @ai-dynamo/dynamo-frontend-codeowners @ai-dynamo/dynamo-multimodal-codeowners
/lib/llm/src/protocols/openai/images/ @ai-dynamo/dynamo-frontend-codeowners @ai-dynamo/dynamo-diffusion-codeowners
Expand Down Expand Up @@ -680,6 +685,7 @@ requirements.txt
/components/src/dynamo/trtllm/snapshot.py @ai-dynamo/dynamo-backend-trtllm-codeowners @ai-dynamo/dynamo-gms-codeowners
/components/src/dynamo/vllm/cache_info.py @ai-dynamo/dynamo-backend-vllm-codeowners @ai-dynamo/dynamo-kv-memory-codeowners
/container/deps/requirements.frontend.txt @ai-dynamo/dynamo-ops-codeowners @ai-dynamo/dynamo-frontend-codeowners
/deploy/operator/internal/controller/lpx/ @ai-dynamo/dynamo-operator-codeowners @ai-dynamo/dynamo-lpx-codeowners
/lib/kv-router/src/services/shared_cache/ @ai-dynamo/dynamo-router-codeowners @ai-dynamo/dynamo-kv-memory-codeowners
/lib/kv-router/src/zmq_wire/extra_keys.rs @ai-dynamo/dynamo-router-codeowners @ai-dynamo/dynamo-multimodal-codeowners
/lib/runtime/src/metrics/frontend_perf.rs @ai-dynamo/dynamo-observability-codeowners @ai-dynamo/dynamo-frontend-codeowners
Expand Down
2 changes: 1 addition & 1 deletion deploy/helm/charts/platform/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ verify-operator-chart-crds: ## Verify operator CRDs are managed from the image,

.PHONY: test
test: helm-unittest-install charts-prep verify-operator-chart-crds ## Run helm-unittest chart tests
@helm unittest .
@helm unittest . components/operator

.PHONY: lint
lint: charts-prep verify-operator-chart-crds ## Run helm lint
Expand Down
2 changes: 2 additions & 0 deletions deploy/helm/charts/platform/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,8 @@ Kubernetes: `>=1.30.0-0`
| dynamo-operator.natsAddr | string | `""` | NATS server address for operator communication. When empty, the operator uses bundled NATS only if global.nats.install=true; otherwise NATS is not configured. Format: `nats://hostname:4222` |
| dynamo-operator.etcdAddr | string | `""` | etcd server address for an external etcd instance. Only needed when using external etcd without the bundled subchart. Format: `http://hostname:2379` or `https://hostname:2379` |
| dynamo-operator.modelExpressURL | string | `""` | URL for the Model Express server if not deployed by this helm chart. This is ignored if Model Express server is installed by this helm chart (global.model-express.enabled is true). |
| dynamo-operator.lpx.enabled | bool | `false` | Enable the Dynamo operator's LPX integration. Startup requires the externally installed scheduling.lpu.nvidia.com/v1alpha1 LpuPipelineRequest API. |
| dynamo-operator.lpx.modelRegistryURL | string | `""` | Configure the LPU model registry used by the LPX integration. |
| dynamo-operator.namespaceRestriction | object | `{"enabled":false,"lease":{"duration":"30s","renewInterval":"10s"},"targetNamespace":null}` | DEVELOPMENT AND TESTING ONLY: Namespace-restricted mode is not supported for production. Use cluster-wide mode for production deployments. |
| dynamo-operator.namespaceRestriction.enabled | bool | `false` | DEVELOPMENT AND TESTING ONLY: Enable namespace-restricted reconciliation and admission. Not supported for production. |
| dynamo-operator.namespaceRestriction.targetNamespace | string | `nil` | DEVELOPMENT AND TESTING ONLY: Target namespace. Defaults to the Helm release namespace. |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,4 @@
.idea/
*.tmproj
.vscode/
tests/
13 changes: 13 additions & 0 deletions deploy/helm/charts/platform/components/operator/files/role.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,7 @@ rules:
- dynamographdeployments
- dynamographdeploymentscalingadapters
- dynamomodels
- lpxgraphdeployments
verbs:
- create
- delete
Expand All @@ -269,6 +270,7 @@ rules:
- dynamographdeploymentrequests/finalizers
- dynamographdeployments/finalizers
- dynamomodels/finalizers
- lpxgraphdeployments/finalizers
verbs:
- update
- apiGroups:
Expand All @@ -279,6 +281,7 @@ rules:
- dynamographdeployments/status
- dynamographdeploymentscalingadapters/status
- dynamomodels/status
- lpxgraphdeployments/status
verbs:
- get
- patch
Expand Down Expand Up @@ -354,6 +357,16 @@ rules:
- patch
- update
- watch
- apiGroups:
- scheduling.lpu.nvidia.com
resources:
- lpupipelinerequests
verbs:
- create
- delete
- get
- list
- watch
- apiGroups:
- scheduling.run.ai
resources:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,9 @@ spec:
- mountPath: /tmp/k8s-webhook-server/serving-certs
name: cert
readOnly: true
{{- with .Values.controllerManager.manager.volumeMounts }}
{{- toYaml . | nindent 8 }}
{{- end }}
securityContext:
runAsNonRoot: true
serviceAccountName: {{ include "dynamo-operator.fullname" . }}-controller-manager
Expand All @@ -151,3 +154,6 @@ spec:
# Allow the pod to start before the secret exists so the
# in-operator cert-controller can bootstrap it at runtime.
optional: true
{{- with .Values.controllerManager.manager.volumes }}
{{- toYaml . | nindent 6 }}
{{- end }}
Original file line number Diff line number Diff line change
Expand Up @@ -213,3 +213,8 @@ data:
gpu:
discoveryEnabled: {{ .Values.gpuDiscovery.enabled }}
{{- end }}
lpx:
enabled: {{ .Values.lpx.enabled }}
{{- with .Values.lpx.modelRegistryURL }}
modelRegistryURL: {{ . | quote }}
{{- end }}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,25 @@
Each check detects an old value path and fails with a migration message.
*/}}

{{/*
LPX requires Grove integration. Only a parent chart can install Grove;
a standalone operator chart must explicitly enable an external Grove.
*/}}

{{- if and .Values.lpx.enabled (not (and
.Values.global
.Values.global.grove
(or
.Values.global.grove.enabled
(and (not .Chart.IsRoot) .Values.global.grove.install)
)
)) }}
{{- fail `
CONFIGURATION ERROR: LPX requires Grove integration to be enabled.
Set global.grove.enabled=true to use an externally installed Grove operator.
` }}
{{- end }}

{{/* ---- NATS toggle (moved to global.nats.install) ---- */}}

{{- if and (hasKey .Values "nats") (hasKey .Values.nats "enabled") }}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

suite: standalone LPX and Grove configuration
templates:
- templates/operator-config.yaml
- templates/validate-values.yaml
tests:
- it: leaves LPX disabled when Grove is not configured
template: templates/operator-config.yaml
asserts:
- matchRegex:
path: data["config.yaml"]
pattern: '(?m)^lpx:\n enabled: false$'

- it: rejects LPX when global values are absent
template: templates/validate-values.yaml
set:
lpx.enabled: true
asserts:
- failedTemplate:
errorPattern: "LPX requires Grove integration to be enabled"

- it: rejects LPX when Grove integration is explicitly disabled
template: templates/validate-values.yaml
set:
lpx.enabled: true
global.grove.enabled: false
global.grove.install: false
asserts:
- failedTemplate:
errorPattern: "LPX requires Grove integration to be enabled"

- it: enables LPX with externally installed Grove
template: templates/operator-config.yaml
set:
lpx.enabled: true
global.grove.enabled: true
asserts:
- matchRegex:
path: data["config.yaml"]
pattern: '(?m)^lpx:\n enabled: true$'
- matchRegex:
path: data["config.yaml"]
pattern: '(?m)^ grove:\n enabled: true$'

- it: rejects install-only Grove settings without a parent chart
template: templates/validate-values.yaml
set:
lpx.enabled: true
global.grove.enabled: false
global.grove.install: true
asserts:
- failedTemplate:
errorPattern: "LPX requires Grove integration to be enabled"
10 changes: 10 additions & 0 deletions deploy/helm/charts/platform/components/operator/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,14 @@
# the cluster-wide operator.
upgradeCRD: true

# The LPX scheduler and its CRDs must be installed separately.
lpx:
# -- Enable the Dynamo operator's LPX integration. Startup requires the
# externally installed scheduling.lpu.nvidia.com/v1alpha1 LpuPipelineRequest API.
enabled: false
# -- Configure the LPU model registry used by the LPX integration.
modelRegistryURL: ""

# Environment variables to pass to operator Deployment.
env: []

Expand Down Expand Up @@ -90,6 +98,8 @@ controllerManager:
requests:
cpu: 512m
memory: 1Gi
volumeMounts: []
volumes: []
replicas: 1
serviceAccount:
annotations: {}
Expand Down
68 changes: 68 additions & 0 deletions deploy/helm/charts/platform/tests/lpx_config_test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

suite: LPX operator configuration and RBAC
templates:
- charts/dynamo-operator/templates/operator-config.yaml
- charts/dynamo-operator/templates/manager-rbac.yaml
- charts/dynamo-operator/templates/validate-values.yaml
tests:
- it: rejects LPX without Grove integration
template: charts/dynamo-operator/templates/validate-values.yaml
set:
dynamo-operator.lpx.enabled: true
asserts:
- failedTemplate:
errorPattern: "LPX requires Grove integration to be enabled"

- it: keeps LPX disabled by default
template: charts/dynamo-operator/templates/operator-config.yaml
asserts:
- matchRegex:
path: data["config.yaml"]
pattern: '(?m)^lpx:\n enabled: false$'

- it: enables LPX and externally installed Grove together
template: charts/dynamo-operator/templates/operator-config.yaml
set:
global.grove.enabled: true
dynamo-operator.lpx.enabled: true
asserts:
- matchRegex:
path: data["config.yaml"]
pattern: '(?m)^lpx:\n enabled: true$'
- matchRegex:
path: data["config.yaml"]
pattern: '(?m)^ grove:\n enabled: true$'

- it: renders canonical LPX model registry configuration
template: charts/dynamo-operator/templates/operator-config.yaml
set:
global.grove.enabled: true
dynamo-operator.lpx.enabled: true
dynamo-operator.lpx.modelRegistryURL: gs://models/canonical
asserts:
- matchRegex:
path: data["config.yaml"]
pattern: '(?m)^lpx:\n enabled: true\n modelRegistryURL: "gs://models/canonical"$'
- notMatchRegex:
path: data["config.yaml"]
pattern: '(?m)^lpu:'

- it: renders the exact inert LpuPipelineRequest manager grant
template: charts/dynamo-operator/templates/manager-rbac.yaml
asserts:
- contains:
path: rules
content:
apiGroups:
- scheduling.lpu.nvidia.com
resources:
- lpupipelinerequests
verbs:
- create
- delete
- get
- list
- watch
documentIndex: 0
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,6 @@ tests:
global.kai-scheduler.install: true
asserts:
- notFailedTemplate: {}

# --- Default values should render cleanly ---

- it: should render successfully with default values
Expand Down
9 changes: 9 additions & 0 deletions deploy/helm/charts/platform/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,15 @@ dynamo-operator:

# -- URL for the Model Express server if not deployed by this helm chart. This is ignored if Model Express server is installed by this helm chart (global.model-express.enabled is true).
modelExpressURL: ""

# The LPX scheduler and its CRDs must be installed separately.
lpx:
# -- Enable the Dynamo operator's LPX integration. Startup requires the
# externally installed scheduling.lpu.nvidia.com/v1alpha1 LpuPipelineRequest API.
enabled: false
# -- Configure the LPU model registry used by the LPX integration.
modelRegistryURL: ""

# -- DEVELOPMENT AND TESTING ONLY: Namespace-restricted mode is not supported for production. Use cluster-wide mode for production deployments.
namespaceRestriction:
# -- DEVELOPMENT AND TESTING ONLY: Enable namespace-restricted reconciliation and admission. Not supported for production.
Expand Down
Loading
Loading