Skip to content

feat(nvca): add grove and kai-scheduler Karta defns - #726

Open
estroz wants to merge 1 commit into
mainfrom
estroczynski/feat/grove-kai-kartas
Open

feat(nvca): add grove and kai-scheduler Karta defns#726
estroz wants to merge 1 commit into
mainfrom
estroczynski/feat/grove-kai-kartas

Conversation

@estroz

@estroz estroz commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

TL;DR

Add new Dynamo DGD version, Grove PodCliqueSet, and KAI Scheduler PodGroup Karta types to miniservice controller as follow-up to #603

Additional Details (optional for docs, build, test, refactor, ci, chore, style, and revert PRs)

For the Reviewer

For QA (optional for docs, build, test, refactor, ci, chore, style, and revert PRs)

Issues

Relates to #598

Checklist

  • I am familiar with the Contributing Guidelines.
  • I have signed off my commits for Developer Certificate of Origin (DCO) compliance.
  • New or existing tests cover these changes.
  • The documentation is up to date with these changes.

Summary by CodeRabbit

  • New Features
    • Added support for managing DynamoGraphDeployment resources, including status tracking, component discovery, scaling, and gang scheduling.
    • Added support for Grove PodCliqueSet resources with lifecycle tracking, scaling, pod discovery, and gang-scheduling optimization.
    • Added scheduling support for PodGroup resources, including replica scaling, condition tracking, pod association, and gang scheduling.

Signed-off-by: Eric Stroczynski <estroczynski@nvidia.com>
@estroz
estroz requested a review from a team as a code owner August 7, 2026 19:15
@estroz
estroz requested a review from balajinvda August 7, 2026 19:15
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The PR adds Karta configurations for DynamoGraphDeployment, PodCliqueSet, and Kai Scheduler PodGroup resources. The configurations map lifecycle states, discover child resources, define scaling and pod selectors, register supported kinds, and configure gang-scheduling groups.

Changes

Karta resource mappings

Layer / File(s) Summary
DynamoGraphDeployment mappings
src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/*
The v1alpha1 and v1beta1 definitions map lifecycle states, discover component resources, calculate replicas, select pods, register child kinds, and group pods by the Dynamo component label.
PodCliqueSet mappings
src/compute-plane-services/nvca/internal/miniservice/karta/grove/*
The PodCliqueSet definition maps lifecycle conditions, configures PodClique and PodCliqueScalingGroup components, registers child kinds, and groups members by application ownership and replica index.
Kai Scheduler PodGroup mapping
src/compute-plane-services/nvca/internal/miniservice/karta/kai-scheduler/*
The PodGroup definition configures scaling, status detection, Pod ownership and selectors, and gang-scheduling membership based on the pod-group annotation.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Suggested reviewers: balajinvda

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title uses valid Conventional Commits syntax and accurately describes the Grove and KAI Scheduler Karta definition additions.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch estroczynski/feat/grove-kai-kartas

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1beta1.yaml`:
- Around line 16-26: Add repository-native validation tests for both Dynamo
mappings: in
src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1beta1.yaml:16-26,
cover initializing, running, and failed phases; in :49-75, cover child kinds and
normalized gang group keys; in
src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1alpha1.yaml:21,
cover the initializing mapping; and in :52-78, cover child kinds and gang group
keys. Run the repository-native test runner before committing.

In
`@src/compute-plane-services/nvca/internal/miniservice/karta/grove/grove_io_podcliqueset_v1alpha1.yaml`:
- Around line 4-101: Add regression coverage for the Karta mapping defined by
the root component and child components clique and scalinggroup, validating
status mappings, resource discovery, scaling paths, pod selectors, and
gangScheduling configuration; if this repository has no applicable test
mechanism for YAML mappings, document that justification in the PR instead.

In
`@src/compute-plane-services/nvca/internal/miniservice/karta/kai-scheduler/scheduling-run-ai-podgroup-v2alpha2.yaml`:
- Around line 16-17: The scaleDefinition replicasPath mapping is incorrect for
hierarchical PodGroups because it reports scheduling thresholds as the current
replica count. Update the hierarchical PodGroup configuration to use a
Karta-compatible replica-count mapping, or remove scale reporting for this
unsupported mode; preserve the existing flat PodGroup behavior and add
regression coverage for both modes, or document why tests are not applicable.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 68e96a02-17ec-4601-9f44-7e9740733e73

📥 Commits

Reviewing files that changed from the base of the PR and between 2d4a828 and a0add2c.

📒 Files selected for processing (4)
  • src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1alpha1.yaml
  • src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1beta1.yaml
  • src/compute-plane-services/nvca/internal/miniservice/karta/grove/grove_io_podcliqueset_v1alpha1.yaml
  • src/compute-plane-services/nvca/internal/miniservice/karta/kai-scheduler/scheduling-run-ai-podgroup-v2alpha2.yaml

Comment on lines +16 to +26
statusDefinition:
phaseDefinition:
path: .status.state
statusMappings:
initializing:
- byPhase: initializing
- byPhase: pending
running:
- byPhase: successful
failed:
- byPhase: failed

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add validation coverage for both Dynamo mappings.

The PR changes lifecycle classification, child discovery, and gang-scheduling behavior. The supplied PR contains no tests and no explanation that tests do not apply.

  • src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1beta1.yaml#L16-L26: Test initializing, running, and failed phase mappings.
  • src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1beta1.yaml#L49-L75: Test child kinds and normalized gang group keys.
  • src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1alpha1.yaml#L21-L21: Test the new initializing phase mapping.
  • src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1alpha1.yaml#L52-L78: Test child kinds and gang group keys.

Run the repository-native test runner before merge.

As per coding guidelines, “Code changes must include tests, or the Pull Request must explain why tests are not applicable; run the repository-native test runner before committing.”

📍 Affects 2 files
  • src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1beta1.yaml#L16-L26 (this comment)
  • src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1beta1.yaml#L49-L75
  • src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1alpha1.yaml#L21-L21
  • src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1alpha1.yaml#L52-L78
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1beta1.yaml`
around lines 16 - 26, Add repository-native validation tests for both Dynamo
mappings: in
src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1beta1.yaml:16-26,
cover initializing, running, and failed phases; in :49-75, cover child kinds and
normalized gang group keys; in
src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1alpha1.yaml:21,
cover the initializing mapping; and in :52-78, cover child kinds and gang group
keys. Run the repository-native test runner before committing.

Source: Coding guidelines

Comment on lines +4 to +101
kind: Karta
apiVersion: run.ai/v1alpha1
metadata:
name: grove-io-podcliqueset-v1alpha1
spec:
structureDefinition:
rootComponent:
name: podcliqueset
kind:
group: grove.io
version: v1alpha1
kind: PodCliqueSet
statusDefinition:
conditionsDefinition:
path: .status.conditions
typeFieldName: type
statusFieldName: status
messageFieldName: message
reasonFieldName: reason
statusMappings:
initializing:
- byExpression:
expression: (.spec.replicas // 0) > 0 and (.status.availableReplicas // 0) < (.spec.replicas // 0)
expectedResult: "true"
running:
- byExpression:
expression: (.status.availableReplicas // 0) >= (.spec.replicas // 0)
expectedResult: "true"
failed:
- byConditions:
- type: TopologyLevelsUnavailable
status: "True"
childComponents:
- name: clique
kind:
group: grove.io
version: v1alpha1
kind: PodClique
ownerRef: podcliqueset
specDefinition:
fragmentedPodSpecDefinition:
schedulerNamePath: .spec.template.cliques[].spec.podSpec.schedulerName
labelsPath: .spec.template.cliques[].labels
annotationsPath: .spec.template.cliques[].annotations
resourceClaimsPath: .spec.template.cliques[].spec.podSpec.resourceClaims
podAffinityPath: .spec.template.cliques[].spec.podSpec.affinity.podAffinity
nodeAffinityPath: .spec.template.cliques[].spec.podSpec.affinity.nodeAffinity
containersPath: .spec.template.cliques[].spec.podSpec.containers
priorityClassNamePath: .spec.template.cliques[].spec.podSpec.priorityClassName
scaleDefinition:
replicasPath: (.spec.replicas // 1) * (.spec.template.cliques[].spec.replicas // 1)
minReplicasPath: .spec.template.cliques[].spec.autoScalingConfig.minReplicas
maxReplicasPath: .spec.template.cliques[].spec.autoScalingConfig.maxReplicas
instanceIdPath: .spec.template.cliques[].name
podSelector:
componentInstanceSelector:
idPath: .metadata.labels["grove.io/podclique"]
replicaSelector:
keyPath: .metadata.labels["grove.io/podcliqueset-replica-index"]
- name: scalinggroup
kind:
group: grove.io
version: v1alpha1
kind: PodCliqueScalingGroup
ownerRef: podcliqueset
scaleDefinition:
replicasPath: (.spec.replicas // 1) * (.spec.template.podCliqueScalingGroups[].replicas // 1)
minReplicasPath: .spec.template.podCliqueScalingGroups[].scaleConfig.minReplicas
maxReplicasPath: .spec.template.podCliqueScalingGroups[].scaleConfig.maxReplicas
instanceIdPath: .spec.template.podCliqueScalingGroups[].name
podSelector:
componentInstanceSelector:
idPath: .metadata.labels["grove.io/podcliquescalinggroup"]
replicaSelector:
keyPath: .metadata.labels["grove.io/podcliquescalinggroup-replica-index"]
additionalChildKinds:
- group: grove.io
version: v1alpha1
kind: PodClique
- group: grove.io
version: v1alpha1
kind: PodCliqueScalingGroup
- group: scheduler.grove.io
version: v1alpha1
kind: PodGang
optimizationInstructions:
gangScheduling:
podGroups:
- name: podcliqueset-replica
members:
- componentName: clique
groupByKeyPaths:
- .metadata.labels["app.kubernetes.io/part-of"]
- .metadata.labels["grove.io/podcliqueset-replica-index"]
- componentName: scalinggroup
groupByKeyPaths:
- .metadata.labels["app.kubernetes.io/part-of"]
- .metadata.labels["grove.io/podcliqueset-replica-index"] No newline at end of file

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Add mapping coverage or explain why tests are not applicable.

This Karta mapping changes status, resource discovery, scaling, pod selection, and gang scheduling. The PR includes no test change or test exception. Add regression coverage for this mapping. If tests are not applicable, document the reason in the PR.

As per coding guidelines, “Code changes must include tests, or the Pull Request must explain why tests are not applicable.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/compute-plane-services/nvca/internal/miniservice/karta/grove/grove_io_podcliqueset_v1alpha1.yaml`
around lines 4 - 101, Add regression coverage for the Karta mapping defined by
the root component and child components clique and scalinggroup, validating
status mappings, resource discovery, scaling paths, pod selectors, and
gangScheduling configuration; if this repository has no applicable test
mechanism for YAML mappings, document that justification in the PR instead.

Source: Coding guidelines

Comment on lines +16 to +17
scaleDefinition:
replicasPath: .spec.minMember // ((.spec.subGroups // []) | map(.minMember // 0) | add // 0)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Locate Karta test infrastructure and related mappings.
fd -HI '^(AGENTS\.md|go\.mod|Makefile)$' . | sort
rg -n -C 4 \
  --glob '*_test.go' \
  --glob '*.yaml' \
  'minSubGroup|subGroups|replicasPath|PodGroup|Karta' \
  src/compute-plane-services/nvca

Repository: NVIDIA/nvcf

Length of output: 50367


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '--- subtree guidance ---'
cat src/compute-plane-services/nvca/AGENTS.md

echo '--- reviewed definition ---'
cat -n src/compute-plane-services/nvca/internal/miniservice/karta/kai-scheduler/scheduling-run-ai-podgroup-v2alpha2.yaml

echo '--- scale-definition symbols and tests ---'
rg -n -C 5 \
  'ReplicasPath|replicasPath|ScaleDefinition|scaleDefinition|gojq|RunString|Query' \
  src/compute-plane-services/nvca/internal/miniservice \
  src/compute-plane-services/nvca/pkg \
  --glob '*.go' --glob '*.yaml' \
  | head -n 1000

echo '--- minSubGroup definitions and references ---'
rg -n -C 5 'minSubGroup|MinSubGroup|subGroups|SubGroups' \
  src/compute-plane-services/nvca/vendor \
  src/compute-plane-services/nvca \
  --glob '*.go' --glob '*.yaml' --glob '*.md' \
  | head -n 1000

echo '--- focused test files ---'
git ls-files 'src/compute-plane-services/nvca/**/*_test.go' | sort | \
  while IFS= read -r f; do
    if rg -q 'scaleDefinition|replicasPath|Karta' "$f"; then
      echo "$f"
    fi
  done

Repository: NVIDIA/nvcf

Length of output: 50369


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '--- Karta implementation files ---'
git ls-files 'src/compute-plane-services/nvca/internal/miniservice/karta/**' \
  'src/compute-plane-services/nvca/internal/miniservice/*karta*' \
  | sort

echo '--- evaluator references ---'
rg -n -C 8 \
  'ReplicasPath|Replicas|replicasPath|ScaleDefinition|scale definition|gojq|go-jq|RunString|Parse' \
  src/compute-plane-services/nvca/internal/miniservice/karta \
  src/compute-plane-services/nvca/internal/miniservice/status_karta.go \
  src/compute-plane-services/nvca/internal/miniservice/status_karta_test.go \
  --glob '*.go' --glob '*.yaml' \
  | head -n 1600

echo '--- KAI dependency/type files ---'
rg -n -C 5 \
  'kai-scheduler|github.com/.*/kai|scheduling.run.ai|PodGroupSpec|minSubGroup|MinSubGroup' \
  src/compute-plane-services/nvca/go.mod \
  src/compute-plane-services/nvca/vendor/modules.txt \
  src/compute-plane-services/nvca/vendor \
  --glob '*.go' --glob '*.mod' --glob '*.txt' \
  | head -n 1600

echo '--- available expression tools ---'
command -v gojq || true
command -v jq || true
command -v go || true

Repository: NVIDIA/nvcf

Length of output: 22362


🌐 Web query:

KAI Scheduler v2alpha2 PodGroup minSubGroup minMember subGroups API documentation

💡 Result:

In the KAI Scheduler v2alpha2 API, PodGroup introduces a hierarchical structure for gang scheduling that uses minMember and minSubGroup to define scheduling thresholds [1][2]. These two fields are functionally distinct and mutually exclusive in their usage within a specific PodGroup or SubGroup scope [2]. minMember This field specifies the minimum number of individual pods that must be scheduled for a PodGroup or a leaf SubGroup [3][1]. It is the standard parameter for flat PodGroups where pod-level gang scheduling is required [3][2]. minSubGroup This field specifies the minimum number of direct child SubGroups that must be successfully scheduled for a hierarchical PodGroup or a mid-level SubGroup [3][1]. It enables elastic gang scheduling at the subgroup level, where a workload can be activated once a subset of its children (rather than all of them) meets their respective scheduling requirements [3][1]. Key Characteristics - Hierarchical Scheduling: When using SubGroups, the hierarchy consists of mid-level SubGroups and leaf SubGroups [1][2]. Leaf SubGroups typically use minMember to control pod counts, while mid-level SubGroups use minSubGroup to control child group counts [1][2]. - Elasticity: KAI Scheduler supports elasticity at both the pod and subgroup levels [3][4]. If a workload is configured with minSubGroup, the scheduler will activate the workload once the specified threshold of children is met, treating the remaining children as elastic capacity that can be scheduled later [3]. - Mutual Exclusivity: Users must choose either minMember or minSubGroup for a given component; they cannot be used simultaneously on the same level [2]. Providing both can result in validation errors from the admission webhook [5]. - Best Practices: For complex hierarchical workloads (e.g., JobSets), the scheduler is designed to automatically manage these thresholds, often setting minSubGroup based on the total number of child groups or via configuration overrides [4][2]. Top Results: [3][1][2]

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

expr='.spec.minMember // ((.spec.subGroups // []) | map(.minMember // 0) | add // 0)'

python3 - "$expr" <<'PY'
import json
import subprocess
import sys

expr = sys.argv[1]
cases = {
    "flat minMember": {"spec": {"minMember": 3}},
    "hierarchical all subgroups": {
        "spec": {"subGroups": [{"minMember": 2}, {"minMember": 4}]}
    },
    "hierarchical minSubGroup one": {
        "spec": {
            "minSubGroup": 1,
            "subGroups": [{"minMember": 2}, {"minMember": 4}],
        }
    },
    "hierarchical minSubGroup two": {
        "spec": {
            "minSubGroup": 2,
            "subGroups": [{"minMember": 2}, {"minMember": 4}],
        }
    },
    "missing scale fields": {"spec": {}},
}

for name, obj in cases.items():
    result = subprocess.run(
        ["jq", "-cn", "--arg", "expr", expr, "--argjson", "obj", json.dumps(obj),
         "$obj | (" + expr + ")"],
        text=True,
        capture_output=True,
        check=False,
    )
    print(name + ": " + result.stdout.strip() if result.returncode == 0
          else name + ": ERROR " + result.stderr.strip())
PY

echo '--- vendored KAI v2alpha2 paths ---'
find src/compute-plane-services/nvca/vendor/github.com/NVIDIA/KAI-scheduler \
  -type f \( -path '*v2alpha2*' -o -name '*podgroup*' -o -name '*types.go' \) \
  -print | sort | head -n 300

echo '--- vendored KAI fields ---'
rg -n -C 8 'minSubGroup|minMember|SubGroup|PodGroupSpec' \
  src/compute-plane-services/nvca/vendor/github.com/NVIDIA/KAI-scheduler \
  --glob '*.go' --glob '*.yaml' --glob '*.json' --glob '*.md' \
  | head -n 1600

echo '--- direct replicas-path test coverage ---'
rg -n -C 4 'replicasPath|replicas path|scaleDefinition|ScaleDefinition|subGroups|minSubGroup' \
  src/compute-plane-services/nvca/internal/miniservice \
  --glob '*_test.go' \
  --glob '*.go' \
  | head -n 1200

Repository: NVIDIA/nvcf

Length of output: 458


🏁 Script executed:

#!/bin/bash
set -euo pipefail

expr='.spec.minMember // ((.spec.subGroups // []) | map(.minMember // 0) | add // 0)'

python3 - "$expr" <<'PY'
import json
import subprocess
import sys

expr = sys.argv[1]
cases = {
    "flat minMember": {"spec": {"minMember": 3}},
    "hierarchical all subgroups": {
        "spec": {"subGroups": [{"minMember": 2}, {"minMember": 4}]}
    },
    "hierarchical minSubGroup one": {
        "spec": {
            "minSubGroup": 1,
            "subGroups": [{"minMember": 2}, {"minMember": 4}],
        }
    },
    "hierarchical minSubGroup two": {
        "spec": {
            "minSubGroup": 2,
            "subGroups": [{"minMember": 2}, {"minMember": 4}],
        }
    },
    "missing scale fields": {"spec": {}},
}

for name, obj in cases.items():
    result = subprocess.run(
        ["jq", "-cn", "--argjson", "obj", json.dumps(obj),
         "$obj | (" + expr + ")"],
        text=True,
        capture_output=True,
        check=False,
    )
    print(name + ": " + result.stdout.strip() if result.returncode == 0
          else name + ": ERROR " + result.stderr.strip())
PY

echo '--- vendored KAI v2alpha2 paths ---'
find src/compute-plane-services/nvca/vendor/github.com/NVIDIA/KAI-scheduler \
  -type f \( -path '*v2alpha2*' -o -name '*podgroup*' -o -name '*types.go' \) \
  -print | sort | head -n 300

echo '--- vendored KAI fields ---'
rg -n -C 8 'minSubGroup|minMember|SubGroup|PodGroupSpec' \
  src/compute-plane-services/nvca/vendor/github.com/NVIDIA/KAI-scheduler \
  --glob '*.go' --glob '*.yaml' --glob '*.json' --glob '*.md' \
  | head -n 1600

echo '--- direct replicas-path test coverage ---'
rg -n -C 4 'replicasPath|replicas path|scaleDefinition|ScaleDefinition|subGroups|minSubGroup' \
  src/compute-plane-services/nvca/internal/miniservice \
  --glob '*_test.go' \
  --glob '*.go' \
  | head -n 1200

Repository: NVIDIA/nvcf

Length of output: 458


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '--- Karta scale types and documentation ---'
rg -n -l \
  'type .*Scale|ScaleDefinition|replicasPath|ReplicaCount|replica count|scale definition' \
  src/compute-plane-services/nvca \
  --glob '*.go' --glob '*.yaml' --glob '*.md' \
  | head -n 300

echo '--- Karta dependency metadata ---'
rg -n -C 4 \
  'karta|Karta|run.ai' \
  src/compute-plane-services/nvca/go.mod \
  src/compute-plane-services/nvca/vendor/modules.txt \
  | head -n 500

echo '--- scale consumers ---'
rg -n -C 8 \
  'ReplicasPath|replicasPath|ScaleDefinition|DesiredReplicas|Desired.*Replica|replica.*scale|scale.*replica' \
  src/compute-plane-services/nvca \
  --glob '*.go' \
  | head -n 1600

Repository: NVIDIA/nvcf

Length of output: 50368


🏁 Script executed:

#!/bin/bash
set -euo pipefail

for f in \
  src/compute-plane-services/nvca/vendor/github.com/run-ai/karta/pkg/api/runai/v1alpha1/structure.go \
  src/compute-plane-services/nvca/vendor/github.com/run-ai/karta/pkg/resource/accessor.go \
  src/compute-plane-services/nvca/vendor/github.com/run-ai/karta/pkg/resource/component.go \
  src/compute-plane-services/nvca/vendor/github.com/run-ai/karta/pkg/jq/execution/execution.go
do
  if [ -f "$f" ]; then
    echo "--- $f ($(wc -l < "$f") lines) ---"
    cat -n "$f"
  fi
done

Repository: NVIDIA/nvcf

Length of output: 50367


Correct the replicasPath mapping for hierarchical PodGroups.

ReplicasPath represents the current replica count, but minMember and minSubGroup are scheduling thresholds. The expression returns 6 for minSubGroup: 1 with subgroup minima 2 and 4, although only one subgroup is required. Use a mapping that matches Karta’s scale contract, or omit scale reporting for unsupported hierarchical mode. Add regression coverage for both modes, or explain why tests are not applicable in the PR.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/compute-plane-services/nvca/internal/miniservice/karta/kai-scheduler/scheduling-run-ai-podgroup-v2alpha2.yaml`
around lines 16 - 17, The scaleDefinition replicasPath mapping is incorrect for
hierarchical PodGroups because it reports scheduling thresholds as the current
replica count. Update the hierarchical PodGroup configuration to use a
Karta-compatible replica-count mapping, or remove scale reporting for this
unsupported mode; preserve the existing flat PodGroup behavior and add
regression coverage for both modes, or document why tests are not applicable.

Source: Coding guidelines

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants