Skip to content

fix: add machine-readable CLI output controls - #1119

Merged
mckornfield merged 6 commits into
mainfrom
6556548-cli-machine-readable/mck
Aug 7, 2026
Merged

fix: add machine-readable CLI output controls#1119
mckornfield merged 6 commits into
mainfrom
6556548-cli-machine-readable/mck

Conversation

@mckornfield

@mckornfield mckornfield commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add --output aliases alongside existing CLI format flags.
  • Add --stream support for list commands and manual plugin/skill listings, emitting NDJSON for JSON/raw output.
  • Keep streamed list item extraction lazy for callable paginated responses.
  • Document root CLI exit codes and return exit code 3 for remote/API failures.
  • Regenerate API list commands and vendor the NeMo Platform CLI changes into the SDK copy.

NVBugs

  • 6556548
  • 6556552
  • 6556553
  • 6556555

Validation

  • make update-cli
  • make vendor-nemo-platform-ext
  • uv run --frozen pytest packages/nemo_platform_ext/tests/cli/commands/use_cases/test_chat.py -q: 33 passed
  • uv run --frozen pytest tests/vendored/nemo_platform_ext/cli/commands/use_cases/test_chat.py -q from sdk/python/nemo-platform: 33 passed
  • uv run --frozen pytest packages/nemo_platform_ext/tests/cli/core/test_formatters.py packages/nemo_platform_ext/tests/cli/core/test_errors.py packages/nemo_platform_ext/tests/cli/test_app.py packages/nemo_platform_ext/tests/cli/commands/test_plugins.py packages/nemo_platform_ext/tests/cli/commands/skills/test_cli.py -q: 215 passed
  • uv run --frozen ruff check packages/nemo_platform_ext/tests/cli/commands/use_cases/test_chat.py: passed
  • git diff --check: passed
  • Source and SDK CLI smokes for --help, --output, --stream, NDJSON output, and remote error exit code 3

Review follow-up

  • dfc09505a keeps streamed response item extraction lazy and adds regression coverage.
  • 266d554f1 regenerates list commands after merging current main so new experiments commands get the same stream/output behavior.
  • 34d0bca44 updates chat syntax tests to expect the documented remote/API exit code 3 and vendors the test update into the SDK copy.
  • Added docs coverage for --output and JSON-lines list streaming.

Summary by CodeRabbit

  • New Features

    • Added --stream support across CLI list commands for newline-delimited JSON output.
    • Added --output as an alias for --output-format.
    • Streaming supports JSON and raw formats, with validation for unsupported formats.
    • Updated generated list commands to include streaming support.
  • Bug Fixes

    • Remote and API errors now return a dedicated exit code.
    • Timeout messages now clearly identify timeout failures.
    • Preserved explicit output columns when applying default column selections.
  • Documentation

    • Documented streaming options, output aliases, and CLI exit codes.

@mckornfield
mckornfield requested review from a team as code owners August 5, 2026 23:06
NVBugs: 6556548, 6556552, 6556553, 6556555
Signed-off-by: Matt Kornfield <mkornfield@nvidia.com>
@mckornfield
mckornfield force-pushed the 6556548-cli-machine-readable/mck branch from df07b50 to 8a35a57 Compare August 5, 2026 23:10
@mckornfield mckornfield changed the title Add machine-readable CLI output controls fix: add machine-readable CLI output controls Aug 5, 2026
@github-actions github-actions Bot added the fix label Aug 5, 2026
@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The CLI adds --output aliases, newline-delimited JSON streaming for list commands, generated-command support, and remote/API error exit code 3. Tests and documentation cover formatting, validation, help output, and error handling.

Changes

CLI output and error handling

Layer / File(s) Summary
Output contracts and formatter
packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/*, packages/nemo_platform_ext/src/nemo_platform_ext/cli/app.py
Adds output aliases, StreamOutputOption, JSON Lines serialization, streaming validation, and documented exit codes.
List command integration
packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/*, packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/plugins.py, packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/skills/cli.py
Adds --stream to list commands and forwards it to format_output. Plugin and skill column handling preserves explicit selections.
Generated command support
tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/sdk/cli_generator/templates/list_command.py.j2
Generated list commands now include and forward the stream option.
Error and behavior tests
packages/nemo_platform_ext/tests/cli/*
Tests cover streamed output, aliases, format validation, help text, and remote/API exit code 3.

Possibly related PRs

Suggested reviewers: anastasia-nesterenko, briannewsom, mikeknep

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 69.86% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: adding machine-readable output controls to the CLI.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 6556548-cli-machine-readable/mck

Warning

Review ran into problems

🔥 Problems

Git: Failed to clone repository. Please run the @coderabbitai full review command to re-trigger a full review. If the issue persists, set path_filters to include or exclude specific files.


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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (1)
packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/formatters.py (1)

267-270: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Make iter_json_lines lazy.

The function builds the complete list[str] before format_output writes the first record. Large --stream or --all-pages responses retain the response data and all serialized lines in memory. Return an iterator and yield one serialized record per loop.

Proposed fix
+from collections.abc import Iterator
+
-def iter_json_lines(data: Any, *, is_list: bool = False) -> list[str]:
+def iter_json_lines(data: Any, *, is_list: bool = False) -> Iterator[str]:
     """Return newline-delimited JSON records for streaming-style output."""
     records = _extract_items_from_response(data) if is_list else [data]
-    return [json.dumps(model_to_dict(record), ensure_ascii=False, separators=(",", ":")) for record in records]
+    for record in records:
+        yield json.dumps(model_to_dict(record), ensure_ascii=False, separators=(",", ":"))
🤖 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 `@packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/formatters.py`
around lines 267 - 270, Update iter_json_lines to return an iterator rather than
list[str], yielding each serialized record from the records loop as it is
processed. Preserve the existing _extract_items_from_response, model_to_dict,
and JSON serialization behavior while allowing format_output to consume records
lazily.
🤖 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 `@packages/nemo_platform_ext/tests/cli/core/test_errors.py`:
- Line 27: Update the remote/API failure assertions in the affected tests to use
the documented exit code value 3 or a test-owned constant, rather than the
imported REMOTE_ERROR_EXIT_CODE from the module under test. Remove that import
and ensure every listed failure case asserts the actual status independently;
leave the root help text assertion unchanged.

In
`@tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/sdk/cli_generator/templates/list_command.py.j2`:
- Line 67: Move stream-format validation to the start of each command, before
any data acquisition: in
tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/sdk/cli_generator/templates/list_command.py.j2
lines 67-67, validate before handle_code_generation and API fetching; in
packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/plugins.py lines
94-94, validate before discover_manifests(); and in
packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/skills/cli.py
lines 209-209, validate before load_skills(). Preserve UsageError behavior for
invalid --stream combinations.

---

Nitpick comments:
In `@packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/formatters.py`:
- Around line 267-270: Update iter_json_lines to return an iterator rather than
list[str], yielding each serialized record from the records loop as it is
processed. Preserve the existing _extract_items_from_response, model_to_dict,
and JSON serialization behavior while allowing format_output to consume records
lazily.
🪄 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: d65098e1-88b0-4880-8f69-743566055a79

📥 Commits

Reviewing files that changed from the base of the PR and between 96cb643 and df07b50.

⛔ Files ignored due to path filters (38)
  • sdk/python/nemo-platform/src/nemo_platform/cli/app.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/adapters.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/files/filesets.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/guardrail/configs.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/iam/role_bindings.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/deployment_configs/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/deployment_configs/versions.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/deployments/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/deployments/versions.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/gateway/openai/v1/models.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/models.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/prompts.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/providers.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/virtual_models.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/annotations.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/evaluator_results.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/spans/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/spans/evaluator_results.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/spans/groups.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/traces.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/jobs/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/jobs/results.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/jobs/steps.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/jobs/tasks.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/models/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/projects.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/secrets/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/workspaces/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/workspaces/members.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/plugins.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/skills/cli.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/core/errors.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/core/formatters.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/core/types.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/vendored/nemo_platform_ext/cli/commands/test_plugins.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/vendored/nemo_platform_ext/cli/core/test_errors.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/vendored/nemo_platform_ext/cli/core/test_formatters.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/vendored/nemo_platform_ext/cli/test_app.py is excluded by !sdk/**
📒 Files selected for processing (39)
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/app.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/adapters.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/files/filesets.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/guardrail/configs.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/iam/role_bindings.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployment_configs/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployment_configs/versions.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployments/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployments/versions.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/gateway/openai/v1/models.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/models.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/prompts.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/providers.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/virtual_models.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/annotations.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/evaluator_results.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/spans/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/spans/evaluator_results.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/spans/groups.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/traces.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/results.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/steps.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/tasks.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/models/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/projects.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/secrets/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/workspaces/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/workspaces/members.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/plugins.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/skills/cli.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/errors.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/formatters.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/types.py
  • packages/nemo_platform_ext/tests/cli/commands/test_plugins.py
  • packages/nemo_platform_ext/tests/cli/core/test_errors.py
  • packages/nemo_platform_ext/tests/cli/core/test_formatters.py
  • packages/nemo_platform_ext/tests/cli/test_app.py
  • tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/sdk/cli_generator/templates/list_command.py.j2

Comment thread packages/nemo_platform_ext/tests/cli/core/test_errors.py Outdated
@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 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 `@packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/formatters.py`:
- Around line 267-270: Update iter_json_lines to return Iterator[str] and lazily
yield each serialized record as it is processed, rather than building and
returning a list comprehension. Preserve the existing record extraction,
model_to_dict conversion, and JSON formatting behavior while allowing callers
such as the output path around line 622 to receive the first record immediately.
🪄 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: be637102-9e99-48ec-9b56-f1b00568a988

📥 Commits

Reviewing files that changed from the base of the PR and between 96cb643 and 8a35a57.

⛔ Files ignored due to path filters (38)
  • sdk/python/nemo-platform/src/nemo_platform/cli/app.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/adapters.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/files/filesets.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/guardrail/configs.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/iam/role_bindings.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/deployment_configs/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/deployment_configs/versions.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/deployments/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/deployments/versions.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/gateway/openai/v1/models.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/models.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/prompts.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/providers.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/virtual_models.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/annotations.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/evaluator_results.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/spans/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/spans/evaluator_results.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/spans/groups.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/traces.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/jobs/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/jobs/results.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/jobs/steps.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/jobs/tasks.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/models/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/projects.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/secrets/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/workspaces/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/workspaces/members.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/plugins.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/skills/cli.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/core/errors.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/core/formatters.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/core/types.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/vendored/nemo_platform_ext/cli/commands/test_plugins.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/vendored/nemo_platform_ext/cli/core/test_errors.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/vendored/nemo_platform_ext/cli/core/test_formatters.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/vendored/nemo_platform_ext/cli/test_app.py is excluded by !sdk/**
📒 Files selected for processing (39)
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/app.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/adapters.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/files/filesets.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/guardrail/configs.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/iam/role_bindings.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployment_configs/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployment_configs/versions.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployments/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployments/versions.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/gateway/openai/v1/models.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/models.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/prompts.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/providers.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/virtual_models.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/annotations.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/evaluator_results.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/spans/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/spans/evaluator_results.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/spans/groups.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/traces.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/results.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/steps.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/tasks.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/models/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/projects.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/secrets/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/workspaces/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/workspaces/members.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/plugins.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/skills/cli.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/errors.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/formatters.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/types.py
  • packages/nemo_platform_ext/tests/cli/commands/test_plugins.py
  • packages/nemo_platform_ext/tests/cli/core/test_errors.py
  • packages/nemo_platform_ext/tests/cli/core/test_formatters.py
  • packages/nemo_platform_ext/tests/cli/test_app.py
  • tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/sdk/cli_generator/templates/list_command.py.j2
🚧 Files skipped from review as they are similar to previous changes (38)
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/annotations.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/models/init.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployment_configs/versions.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/spans/evaluator_results.py
  • packages/nemo_platform_ext/tests/cli/test_app.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/workspaces/init.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/adapters.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/workspaces/members.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployments/versions.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/tasks.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/guardrail/configs.py
  • packages/nemo_platform_ext/tests/cli/core/test_formatters.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/files/filesets.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployments/init.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/virtual_models.py
  • tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/sdk/cli_generator/templates/list_command.py.j2
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/evaluator_results.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/secrets/init.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/plugins.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/app.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/projects.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/types.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/models.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/steps.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/spans/init.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/prompts.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/spans/groups.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/results.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/gateway/openai/v1/models.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployment_configs/init.py
  • packages/nemo_platform_ext/tests/cli/core/test_errors.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/errors.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/iam/role_bindings.py
  • packages/nemo_platform_ext/tests/cli/commands/test_plugins.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/init.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/traces.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/skills/cli.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/providers.py

Comment thread packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/formatters.py Outdated
@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor
Suite Lines Covered Line Rate Branch Rate
Unit Tests 31663/40284 78.6% 63.3%
Integration Tests 18399/38215 48.1% 20.8%

Comment thread packages/nemo_platform_ext/tests/cli/core/test_errors.py Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/formatters.py (1)

629-631: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Remove the redundant per-record flush.

Click documents that click.echo() always flushes its output and uses Click-managed output streams. (click.palletsprojects.com) Calling sys.stdout.flush() again adds unnecessary overhead and may flush a different stream. Verify the pinned Click version, then remove the second flush.

Proposed fix
         for line in iter_json_lines(data, is_list=is_list):
             click.echo(line)
-            sys.stdout.flush()
         return
🤖 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 `@packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/formatters.py`
around lines 629 - 631, Remove the redundant sys.stdout.flush() call from the
loop that emits records via click.echo() in the formatter, after verifying the
pinned Click version supports Click-managed flushing. Keep click.echo(line) as
the sole output operation.
🤖 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.

Nitpick comments:
In `@packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/formatters.py`:
- Around line 629-631: Remove the redundant sys.stdout.flush() call from the
loop that emits records via click.echo() in the formatter, after verifying the
pinned Click version supports Click-managed flushing. Keep click.echo(line) as
the sole output operation.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 257cd8ad-ac58-4ccd-9e94-baa27c884ad4

📥 Commits

Reviewing files that changed from the base of the PR and between 8a35a57 and c48fc86.

⛔ Files ignored due to path filters (36)
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/adapters.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/files/filesets.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/guardrail/configs.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/iam/role_bindings.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/deployment_configs/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/deployment_configs/versions.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/deployments/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/deployments/versions.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/gateway/openai/v1/models.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/models.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/prompts.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/providers.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/virtual_models.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/annotations.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/evaluator_results.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/spans/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/spans/evaluator_results.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/spans/groups.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/traces.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/jobs/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/jobs/results.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/jobs/steps.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/jobs/tasks.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/models/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/projects.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/secrets/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/workspaces/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/workspaces/members.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/plugins.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/skills/cli.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/core/formatters.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/vendored/nemo_platform_ext/cli/commands/skills/test_cli.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/vendored/nemo_platform_ext/cli/commands/test_plugins.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/vendored/nemo_platform_ext/cli/core/test_errors.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/vendored/nemo_platform_ext/cli/core/test_formatters.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/vendored/nemo_platform_ext/cli/test_app.py is excluded by !sdk/**
📒 Files selected for processing (37)
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/adapters.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/files/filesets.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/guardrail/configs.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/iam/role_bindings.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployment_configs/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployment_configs/versions.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployments/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployments/versions.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/gateway/openai/v1/models.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/models.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/prompts.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/providers.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/virtual_models.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/annotations.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/evaluator_results.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/spans/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/spans/evaluator_results.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/spans/groups.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/traces.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/results.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/steps.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/tasks.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/models/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/projects.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/secrets/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/workspaces/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/workspaces/members.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/plugins.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/skills/cli.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/formatters.py
  • packages/nemo_platform_ext/tests/cli/commands/skills/test_cli.py
  • packages/nemo_platform_ext/tests/cli/commands/test_plugins.py
  • packages/nemo_platform_ext/tests/cli/core/test_errors.py
  • packages/nemo_platform_ext/tests/cli/core/test_formatters.py
  • packages/nemo_platform_ext/tests/cli/test_app.py
  • tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/sdk/cli_generator/templates/list_command.py.j2
🚧 Files skipped from review as they are similar to previous changes (30)
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/workspaces/init.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/spans/evaluator_results.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/spans/groups.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/secrets/init.py
  • tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/sdk/cli_generator/templates/list_command.py.j2
  • packages/nemo_platform_ext/tests/cli/commands/test_plugins.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/workspaces/members.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/models/init.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/providers.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/annotations.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/guardrail/configs.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/results.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/plugins.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/gateway/openai/v1/models.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/models.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployment_configs/versions.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/traces.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/virtual_models.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/steps.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployment_configs/init.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployments/versions.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/iam/role_bindings.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/files/filesets.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/skills/cli.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployments/init.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/adapters.py
  • packages/nemo_platform_ext/tests/cli/core/test_errors.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/evaluator_results.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/init.py
  • packages/nemo_platform_ext/tests/cli/core/test_formatters.py

Signed-off-by: Matt Kornfield <mkornfield@nvidia.com>
@mckornfield
mckornfield force-pushed the 6556548-cli-machine-readable/mck branch from c48fc86 to 7aed28d Compare August 7, 2026 04:36
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 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 `@packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/formatters.py`:
- Around line 268-272: Update iter_json_lines to obtain records through a lazy
iterator rather than _extract_items_from_response, avoiding list(value())
materialization and unnecessary copies of list-backed results. Preserve the
existing single-record behavior when is_list is false and yield each converted
record unchanged.
🪄 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: 5f9cd69c-f7dc-4f5f-9c4b-36e2049b4947

📥 Commits

Reviewing files that changed from the base of the PR and between cb45559 and 7aed28d.

⛔ Files ignored due to path filters (39)
  • sdk/python/nemo-platform/src/nemo_platform/cli/app.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/adapters.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/files/filesets.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/guardrail/configs.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/iam/role_bindings.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/deployment_configs/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/deployment_configs/versions.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/deployments/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/deployments/versions.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/gateway/openai/v1/models.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/models.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/prompts.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/providers.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/inference/virtual_models.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/annotations.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/evaluator_results.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/spans/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/spans/evaluator_results.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/spans/groups.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/intake/traces.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/jobs/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/jobs/results.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/jobs/steps.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/jobs/tasks.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/models/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/projects.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/secrets/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/workspaces/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/workspaces/members.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/plugins.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/skills/cli.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/core/errors.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/core/formatters.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/core/types.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/vendored/nemo_platform_ext/cli/commands/skills/test_cli.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/vendored/nemo_platform_ext/cli/commands/test_plugins.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/vendored/nemo_platform_ext/cli/core/test_errors.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/vendored/nemo_platform_ext/cli/core/test_formatters.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/vendored/nemo_platform_ext/cli/test_app.py is excluded by !sdk/**
📒 Files selected for processing (40)
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/app.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/adapters.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/files/filesets.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/guardrail/configs.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/iam/role_bindings.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployment_configs/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployment_configs/versions.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployments/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployments/versions.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/gateway/openai/v1/models.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/models.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/prompts.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/providers.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/virtual_models.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/annotations.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/evaluator_results.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/spans/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/spans/evaluator_results.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/spans/groups.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/traces.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/results.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/steps.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/tasks.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/models/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/projects.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/secrets/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/workspaces/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/workspaces/members.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/plugins.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/skills/cli.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/errors.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/formatters.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/types.py
  • packages/nemo_platform_ext/tests/cli/commands/skills/test_cli.py
  • packages/nemo_platform_ext/tests/cli/commands/test_plugins.py
  • packages/nemo_platform_ext/tests/cli/core/test_errors.py
  • packages/nemo_platform_ext/tests/cli/core/test_formatters.py
  • packages/nemo_platform_ext/tests/cli/test_app.py
  • tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/sdk/cli_generator/templates/list_command.py.j2
🚧 Files skipped from review as they are similar to previous changes (38)
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/prompts.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/spans/evaluator_results.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/steps.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/results.py
  • packages/nemo_platform_ext/tests/cli/commands/skills/test_cli.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/models.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/workspaces/members.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/adapters.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployment_configs/versions.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/models/init.py
  • tools/nemo-platform-sdk-tools/src/nemo_platform_sdk_tools/sdk/cli_generator/templates/list_command.py.j2
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployments/versions.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/tasks.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/jobs/init.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/providers.py
  • packages/nemo_platform_ext/tests/cli/test_app.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/types.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployment_configs/init.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/evaluator_results.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/annotations.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/guardrail/configs.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/errors.py
  • packages/nemo_platform_ext/tests/cli/core/test_formatters.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/secrets/init.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/spans/init.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/skills/cli.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/files/filesets.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/traces.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/plugins.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/virtual_models.py
  • packages/nemo_platform_ext/tests/cli/commands/test_plugins.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/intake/spans/groups.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/inference/deployments/init.py
  • packages/nemo_platform_ext/tests/cli/core/test_errors.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/app.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/workspaces/init.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/projects.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/iam/role_bindings.py

@anastasia-nesterenko anastasia-nesterenko left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

minor questions

Comment thread packages/nemo_platform_ext/src/nemo_platform_ext/cli/core/types.py
Signed-off-by: Matt Kornfield <mkornfield@nvidia.com>
Signed-off-by: Matt Kornfield <mkornfield@nvidia.com>
Signed-off-by: Matt Kornfield <mkornfield@nvidia.com>
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Signed-off-by: Matt Kornfield <mkornfield@nvidia.com>
@mckornfield
mckornfield added this pull request to the merge queue Aug 7, 2026
Merged via the queue into main with commit 749495c Aug 7, 2026
60 checks passed
@mckornfield
mckornfield deleted the 6556548-cli-machine-readable/mck branch August 7, 2026 22:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants