Skip to content

feat(insights): Move the insights-powered analysis into the platform repo - #679

Merged
nicot merged 10 commits into
mainfrom
migrate-insights-plugins/ntonozzi
Jul 14, 2026
Merged

feat(insights): Move the insights-powered analysis into the platform repo#679
nicot merged 10 commits into
mainfrom
migrate-insights-plugins/ntonozzi

Conversation

@nicot

@nicot nicot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Move the analyzer out of https://github.com/NVIDIA-dev/NeMo-Optimizer into the main platform repo. The plugin is not enabled or installed by default.

This move will let us develop the analyzer more consistently with the rest of the platform and platform plugins and make it easier to release as a research preview when we are ready.

It includes the test bed, which is the way we evaluate the quality of the analyzer.

This does not move the rest of the optimization stack yet. In a future PR to the Optimizer plugin, we will change the optimizer to depend on the insights-driven analysis plugin in this repository.

There are no substantive changes here, this is just a move from the other repository.

Summary by CodeRabbit

  • New Features
    • Added the NeMo Insights plugin with HTTP APIs, SDK resources, and authorization for insight CRUD plus periodic analysis configuration and run-status management.
    • Introduced an nemo insights CLI to run analysis and manage enablement/status and reporting.
    • Added a full Insights testbed covering run, snapshot/restore, re-ingest, and state publishing, with automated CI orchestration.
  • Documentation
    • Added plugin, example, and testbed documentation (including usage and workflow guidance).
  • Tests / CI
    • Expanded unit and end-to-end coverage, plus a dedicated CI workflow for the testbed pipeline.

nicot added 2 commits July 14, 2026 10:24
Migrate telemetry analysis, persistent insight APIs, SDK resources, scheduling, and the research-agent example without installing the plugin in default or all-package environments.

Signed-off-by: Nico Tonozzi <ntonozzi@nvidia.com>
Migrate pinned Intake replay, Tau2 trace generation, artifact round trips, and opt-in CI without Harbor adapters or vendored agent runtimes.

Signed-off-by: Nico Tonozzi <ntonozzi@nvidia.com>
@github-actions github-actions Bot added the feat label Jul 14, 2026
Comment thread plugins/nemo-insights/src/nemo_insights_plugin/service.py Fixed
Comment thread plugins/nemo-insights/src/nemo_insights_plugin/service.py Fixed
Comment thread plugins/nemo-insights/src/nemo_insights_plugin/service.py Fixed
Comment thread plugins/nemo-insights/src/nemo_insights_plugin/service.py Fixed
Comment thread plugins/nemo-insights/src/nemo_insights_plugin/service.py Fixed
Comment thread plugins/nemo-insights/src/nemo_insights_plugin/service.py Fixed
Comment thread plugins/nemo-insights/src/nemo_insights_plugin/service.py Fixed
Comment thread plugins/nemo-insights/src/nemo_insights_plugin/service.py Fixed
Comment thread plugins/nemo-insights/src/nemo_insights_plugin/service.py Fixed
Comment thread plugins/nemo-insights/src/nemo_insights_plugin/service.py Fixed
@github-actions

github-actions Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor
Suite Lines Covered Line Rate Branch Rate
Unit Tests 24401/31577 77.3% 62.0%
Integration Tests 14023/30226 46.4% 19.3%

nicot added 3 commits July 14, 2026 10:56
Signed-off-by: Nico Tonozzi <ntonozzi@nvidia.com>
Keep default test discovery independent of optional dependencies while adding dedicated plugin coverage, and remove user-controlled values from exception logs.

Signed-off-by: Nico Tonozzi <ntonozzi@nvidia.com>
Document the optional dependency group required for tests and remove stale optimizer terminology from testbed help.

Signed-off-by: Nico Tonozzi <ntonozzi@nvidia.com>
@nicot nicot changed the title feat(insights): add optional analyst plugin and testbed Move the insights-powered analysis out of Jul 14, 2026
@nicot nicot changed the title Move the insights-powered analysis out of feat(insights): Move the insights-powered analysis into the platform repo Jul 14, 2026
@nicot
nicot marked this pull request as ready for review July 14, 2026 18:44
@nicot
nicot requested review from a team as code owners July 14, 2026 18:44
Avoid applying an unrelated cached OAuth context when the target platform reports authentication disabled, allowing local analyst runs against freeplay telemetry.

Signed-off-by: Nico Tonozzi <ntonozzi@nvidia.com>
@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 5f16a7e6-ada0-4d22-9898-ce4f92036899

📥 Commits

Reviewing files that changed from the base of the PR and between a717367 and e42a5f5.

📒 Files selected for processing (2)
  • .github/workflows/insights-testbed.yml
  • plugins/nemo-insights/testbed/README.md
🚧 Files skipped from review as they are similar to previous changes (2)
  • plugins/nemo-insights/testbed/README.md
  • .github/workflows/insights-testbed.yml

📝 Walkthrough

Walkthrough

Adds the nemo-insights-plugin with entities, HTTP APIs, SDK resources, CLI, analyst execution, periodic analysis, testbed tooling, CI workflows, research-agent examples, tests, and workspace/type-checking integration.

Changes

Insights Plugin

Layer / File(s) Summary
Contracts, service, and SDK
plugins/nemo-insights/src/nemo_insights_plugin/{entities.py,config.py,schema.py,_perms.py,authz.py,service.py,sdk.py,sdk_resources/*}
Defines Insights entities, scheduling and API schemas, permissions, authorization scope, workspace-scoped HTTP routers, and synchronous/asynchronous SDK resources.
Analyst and periodic execution
plugins/nemo-insights/src/nemo_insights_plugin/{analyst/*,controller.py,jobs/*,cli.py,client.py,schedule.py}
Adds the analyst agent, Intake tools, remote/local persistence, observability, CLI commands, scheduled reconciliation, and analysis jobs.
Plugin validation
plugins/nemo-insights/tests/*.py
Tests client construction, scheduling, job execution, controller reconciliation, SDK metadata hydration, and analyst backend behavior.

Testbed and CI

Layer / File(s) Summary
Benchmark and telemetry flow
plugins/nemo-insights/testbed/{adapters.py,tau2run.py,otlp_build.py,otlp_ingest.py,ingest.py}
Runs benchmark subjects, converts simulations to spans, posts OTLP and evaluator data, and waits for trace visibility.
State bundles and CLI
plugins/nemo-insights/testbed/{artifact.py,export.py,reingest.py,release.py,publish.py,cli.py}
Exports and restores state bundles, applies idempotency and round-trip checks, resolves release refs, and exposes testbed commands.
CI workflow and support
.github/actions/*, .github/workflows/insights-testbed.yml, plugins/nemo-insights/testbed/eval/*
Adds preparation and stack actions, workflow planning, stack checks, benchmark production, analysis, and publication.
Examples and test coverage
plugins/nemo-insights/examples/*, plugins/nemo-insights/tests/testbed/*
Adds the research-agent example and unit, integration, artifact, release, and opt-in end-to-end coverage.

Workspace Tooling

Layer / File(s) Summary
Package and checker wiring
plugins/nemo-insights/pyproject.toml, pyproject.toml, tests/discovery_exclusions.py, tools/lint/lint-python-types.sh
Registers the plugin workspace and optional dependency group, extends type-check paths, conditionally excludes unavailable tests, and runs type checking with the Insights group.

Suggested labels: ci

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 36.03% 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
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: moving the insights-powered analysis plugin and testbed into the platform repo.
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 migrate-insights-plugins/ntonozzi

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: 14

🧹 Nitpick comments (7)
plugins/nemo-insights/examples/research-agent/README.md (1)

115-119: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add a "Next Steps" section with cross-links.

Per coding guidelines, docs should "Include 'Next Steps' section at the end with cross-links to related documentation content" — this file ends at "Gotchas" with none.

🤖 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 `@plugins/nemo-insights/examples/research-agent/README.md` around lines 115 -
119, Add a “Next Steps” section after the existing “Gotchas” section in the
research-agent README, including cross-links to relevant related documentation
using the repository’s established documentation link conventions.

Source: Coding guidelines

plugins/nemo-insights/README.md (1)

1-62: 📐 Maintainability & Code Quality | 🔵 Trivial

Missing prerequisites/Next Steps, and CLI+SDK mixed with reference content.

No prerequisites list up top, no closing "Next Steps" cross-links, and the SDK section only names resources without a runnable example alongside the CLI one.

As per coding guidelines: "Always list prerequisites at the top of documentation pages before other content", "Include 'Next Steps' section at the end with cross-links to related documentation content", and "Provide both Python SDK and CLI examples in tab-sets for consistency and to support multiple user workflows."

🤖 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 `@plugins/nemo-insights/README.md` around lines 1 - 62, Update the NeMo
Insights README by adding a prerequisites section at the top, separating the CLI
and SDK guidance into consistent tabbed examples with a runnable Python SDK
example alongside the existing CLI commands, and ending with a Next Steps
section containing cross-links to related documentation. Preserve the existing
installation, configuration, development, and testbed content while organizing
the reference material around these additions.

Source: Coding guidelines

plugins/nemo-insights/src/nemo_insights_plugin/cli.py (1)

62-67: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Duplicated base_url Option block across 4 commands.

Same os.environ.get(NMP_BASE_URL, DEFAULT_BASE_URL) + envvar pattern repeated in analyze/enable/disable/status.

♻️ Proposed fix: shared Option factory
+def _base_url_option() -> str:
+    return typer.Option(
+        os.environ.get("NMP_BASE_URL", DEFAULT_BASE_URL),
+        "--base-url",
+        help="Base URL of the running NMP instance.",
+        envvar="NMP_BASE_URL",
+    )

Then replace each inline base_url: str = typer.Option(...) with base_url: str = _base_url_option().

Also applies to: 121-126, 152-157, 183-188

🤖 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 `@plugins/nemo-insights/src/nemo_insights_plugin/cli.py` around lines 62 - 67,
Introduce a shared _base_url_option() factory encapsulating the existing
NMP_BASE_URL, DEFAULT_BASE_URL, CLI flag, help text, and envvar configuration,
then replace the duplicated base_url typer.Option definitions in the analyze,
enable, disable, and status commands with calls to that factory.
plugins/nemo-insights/src/nemo_insights_plugin/analyst/analyst_backend.py (1)

193-231: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

list_span_groups hard-caps at 1000 groups regardless of limit, contradicting its own guidance.

The docstring tells the model a truncated survey can be fixed by narrowing the filter "or raise the limit," but page_size = max(1, min(limit, 1000)) caps at 1000 and only page 1 is ever fetched — raising limit past 1000 has no effect. Either drain multiple pages (like list_spans/list_annotations do via _drain) up to limit, or clarify the docstring that 1000 is a hard ceiling.

🤖 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 `@plugins/nemo-insights/src/nemo_insights_plugin/analyst/analyst_backend.py`
around lines 193 - 231, Update list_span_groups so limits above 1000 can
retrieve additional group pages: use the existing pagination-draining approach
from list_spans/list_annotations, fetching successive pages until limit groups
are collected or no more results remain. Preserve the current filtering,
sorting, response shape, and truncated semantics while ensuring the requested
limit is honored.
plugins/nemo-insights/testbed/ingest.py (1)

66-146: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Client-lifecycle boilerplate duplicated 4x.

ensure_workspace, ensure_experiment_group, create_experiment, poll_visible all repeat the "own-or-reuse httpx.Client, close in finally" pattern (two different local-variable names for the same idea: active_client vs. reassigning client). Worth extracting into a small helper/contextmanager to reduce duplication and unify naming.

🤖 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 `@plugins/nemo-insights/testbed/ingest.py` around lines 66 - 146, The HTTP
client ownership and cleanup logic is duplicated across ensure_workspace,
ensure_experiment_group, create_experiment, and poll_visible. Extract a small
context manager/helper that yields either the injected client or a newly created
client and closes only newly owned clients, then update all four functions to
use it with consistent client naming while preserving their existing request and
error behavior.
plugins/nemo-insights/tests/test_sdk_entity_hydration.py (1)

43-88: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Assert all metadata in the resource-wrapper tests.

These tests only check subsets, so _analysis_config_page_from_response or _insight_from_response could drop timestamps, updater fields, or _db_version unnoticed. Reuse a helper that asserts every _METADATA field.

🤖 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 `@plugins/nemo-insights/tests/test_sdk_entity_hydration.py` around lines 43 -
88, Extend test_analysis_config_page_restores_item_metadata and
test_insight_response_restores_all_store_metadata to validate every field in
_METADATA, reusing an existing metadata assertion helper if available. Ensure
the checks cover timestamps, updater fields, _db_version, and all other metadata
fields rather than only id, created_by, and parent.
.github/workflows/insights-testbed.yml (1)

1-225: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

Add explicit least-privilege permissions to plan/stack-check and a workflow-level default.

Both jobs rely on implicit default GITHUB_TOKEN permissions (zizmor: excessive-permissions), which can be broader than needed org-wide. Add permissions: {} at workflow level and permissions: { contents: read } (or none) per job, matching what plugin-tests/analyze already do.

Also applies to: 63-78, 80-100

🤖 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 @.github/workflows/insights-testbed.yml around lines 1 - 225, Add
workflow-level permissions: {} near the top of insights-testbed, then explicitly
set permissions: { contents: read } or permissions: {} on the plan and
stack-check jobs. Preserve the existing narrower permissions on plugin-tests,
produce, and analyze.

Source: Linters/SAST tools

🤖 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 @.github/workflows/insights-testbed.yml:
- Around line 54-55: Update every actions/checkout step in the workflow,
including the steps near the referenced checkout blocks, to set
persist-credentials to false in their with configuration. Preserve each step’s
existing paths and other checkout options.

In `@plugins/nemo-insights/src/nemo_insights_plugin/analyst/analyst_backend.py`:
- Around line 351-362: Update the updated-insights loop in the analyst backend
to validate or fetch each insight ID before reporting it as updated, including
when upd.trace_refs is empty. Reuse the existing store lookup or validation path
used by LocalAnalystBackend.persist_result, while preserving the
InsightNotFoundError skip message and continuing to use _add_trace_refs for
non-empty trace_refs.
- Around line 94-109: Update _merge_datetime_lower_bound to parse the existing
gte value and compare datetime objects rather than raw strings, handling
equivalent ISO representations such as Z suffixes and differing precision
correctly. Preserve the current bound when it is already at or after since;
otherwise set gte to since.isoformat().

In `@plugins/nemo-insights/src/nemo_insights_plugin/cli.py`:
- Line 21: Remove the stray TODO comment about remote train/validation datasets
and remote experiment mode from the CLI module; it is unrelated to the telemetry
analysis CLI and should not remain after the NeMo-Optimizer migration.
- Around line 202-203: Guard each entry point’s loading and registration in the
CLI construction flow around get_cli(), so an exception from entry_point.load()
or the resulting command setup is isolated to that plugin. Skip the malformed
entry point and allow the main insights CLI, including analyze and analysis, to
initialize normally; preserve successful registration for valid entry points.

In `@plugins/nemo-insights/src/nemo_insights_plugin/jobs/analyze.py`:
- Around line 101-112: The fallback in the analyze job environment construction
currently embeds the raw INFERENCE_API_KEY in the job spec. Update the `elif
inference_api_key := os.environ.get("INFERENCE_API_KEY")` path to prevent
plaintext secrets from being submitted, such as restricting it to an explicitly
non-production/local mode and emitting an appropriate warning; retain the
`canonical.inference_api_key_secret_name` `from_secret` path unchanged.

In `@plugins/nemo-insights/testbed/eval/prep.py`:
- Around line 22-27: Update repoint_judge so each re.subn call uses a callable
replacement that returns the complete assignment string, preventing judge_model
backslashes from being interpreted as replacement escapes. Preserve the existing
JUDGE_VARS iteration and total replacement count behavior.

In `@plugins/nemo-insights/testbed/eval/run_subjects.py`:
- Around line 53-57: Update the subprocess retry handling around
CalledProcessError in the subject evaluation flow to inspect the captured
failure status/output and retry only when the failure is confirmed as HTTP 429
rate limiting. Immediately re-raise authentication, configuration, data, and
other non-429 failures without cooling down or rerunning the command; preserve
the existing retry count and delay for confirmed rate-limit failures.

In `@plugins/nemo-insights/testbed/ingest.py`:
- Around line 60-63: Update mint_agent_id to generate its timestamp using UTC
rather than local time, matching the timestamp conventions in the plugin’s other
utilities. Preserve the existing YYYYMMDD-HHMMSS formatting and random suffix.

In `@plugins/nemo-insights/testbed/README.md`:
- Around line 205-209: Correct the repository slug in all three GitHub Actions
links in the README run list by replacing the literal space in “nemo-insights
plugin” with the valid slug separator. Preserve each run ID and the surrounding
descriptions unchanged.

In `@plugins/nemo-insights/testbed/reingest.py`:
- Around line 557-597: Validate every workspace’s manifest counts against the
preloaded spans, annotations, and evaluator_results collections before entering
the API-writing loop or calling ensure_workspace. Reject any mismatch, including
missing or truncated JSONL files that produce empty lists, and only proceed with
workspace creation and ingestion after all workspaces pass validation.
- Around line 700-713: Update _diff_collection’s per-key comparison to
distinguish an absent key from a present key whose value is None, using
membership checks alongside value comparison. Ensure mismatches are reported
when either document contains the key and the other does not, while preserving
the existing comparison and reporting behavior for keys present in both
documents.
- Around line 626-630: Update the healing logic around evaluator_result_count to
compare stable (session_id, span_id, name) identities, not only aggregate
counts. Validate that every existing evaluator result belongs to the expected
bundle, reject unknown rows, and only enable full-bundle reposting when the
existing rows are a valid expected subset.
- Around line 839-848: Update the re-export call in the test flow around
ingest_bundle and export.export_workspaces to pass the manifest’s time-bound
value instead of since=None. Reuse the existing manifest symbol and preserve the
current workspace and comparison logic.

---

Nitpick comments:
In @.github/workflows/insights-testbed.yml:
- Around line 1-225: Add workflow-level permissions: {} near the top of
insights-testbed, then explicitly set permissions: { contents: read } or
permissions: {} on the plan and stack-check jobs. Preserve the existing narrower
permissions on plugin-tests, produce, and analyze.

In `@plugins/nemo-insights/examples/research-agent/README.md`:
- Around line 115-119: Add a “Next Steps” section after the existing “Gotchas”
section in the research-agent README, including cross-links to relevant related
documentation using the repository’s established documentation link conventions.

In `@plugins/nemo-insights/README.md`:
- Around line 1-62: Update the NeMo Insights README by adding a prerequisites
section at the top, separating the CLI and SDK guidance into consistent tabbed
examples with a runnable Python SDK example alongside the existing CLI commands,
and ending with a Next Steps section containing cross-links to related
documentation. Preserve the existing installation, configuration, development,
and testbed content while organizing the reference material around these
additions.

In `@plugins/nemo-insights/src/nemo_insights_plugin/analyst/analyst_backend.py`:
- Around line 193-231: Update list_span_groups so limits above 1000 can retrieve
additional group pages: use the existing pagination-draining approach from
list_spans/list_annotations, fetching successive pages until limit groups are
collected or no more results remain. Preserve the current filtering, sorting,
response shape, and truncated semantics while ensuring the requested limit is
honored.

In `@plugins/nemo-insights/src/nemo_insights_plugin/cli.py`:
- Around line 62-67: Introduce a shared _base_url_option() factory encapsulating
the existing NMP_BASE_URL, DEFAULT_BASE_URL, CLI flag, help text, and envvar
configuration, then replace the duplicated base_url typer.Option definitions in
the analyze, enable, disable, and status commands with calls to that factory.

In `@plugins/nemo-insights/testbed/ingest.py`:
- Around line 66-146: The HTTP client ownership and cleanup logic is duplicated
across ensure_workspace, ensure_experiment_group, create_experiment, and
poll_visible. Extract a small context manager/helper that yields either the
injected client or a newly created client and closes only newly owned clients,
then update all four functions to use it with consistent client naming while
preserving their existing request and error behavior.

In `@plugins/nemo-insights/tests/test_sdk_entity_hydration.py`:
- Around line 43-88: Extend test_analysis_config_page_restores_item_metadata and
test_insight_response_restores_all_store_metadata to validate every field in
_METADATA, reusing an existing metadata assertion helper if available. Ensure
the checks cover timestamps, updater fields, _db_version, and all other metadata
fields rather than only id, created_by, and parent.
🪄 Autofix (Beta)

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: f0ac9b25-94ff-45f3-9da5-77b4b3474583

📥 Commits

Reviewing files that changed from the base of the PR and between 926e8d5 and 803b700.

⛔ Files ignored due to path filters (2)
  • plugins/nemo-insights/testbed/state.lock is excluded by !**/*.lock
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (83)
  • .github/actions/insights-intake-stack/action.yml
  • .github/actions/insights-testbed-prep/action.yml
  • .github/workflows/insights-testbed.yml
  • plugins/nemo-insights/README.md
  • plugins/nemo-insights/examples/insight-example.yaml
  • plugins/nemo-insights/examples/research-agent/.gitignore
  • plugins/nemo-insights/examples/research-agent/README.md
  • plugins/nemo-insights/examples/research-agent/main.py
  • plugins/nemo-insights/examples/research-agent/pyproject.toml
  • plugins/nemo-insights/examples/research-agent/tests/test_analyst_e2e.py
  • plugins/nemo-insights/examples/research-agent/workflow.yml
  • plugins/nemo-insights/pyproject.toml
  • plugins/nemo-insights/src/nemo_insights_plugin/_perms.py
  • plugins/nemo-insights/src/nemo_insights_plugin/analyst/agent.py
  • plugins/nemo-insights/src/nemo_insights_plugin/analyst/analyst_backend.py
  • plugins/nemo-insights/src/nemo_insights_plugin/analyst/deps.py
  • plugins/nemo-insights/src/nemo_insights_plugin/analyst/functions/annotations.py
  • plugins/nemo-insights/src/nemo_insights_plugin/analyst/functions/insights.py
  • plugins/nemo-insights/src/nemo_insights_plugin/analyst/functions/spans.py
  • plugins/nemo-insights/src/nemo_insights_plugin/analyst/observability.py
  • plugins/nemo-insights/src/nemo_insights_plugin/analyst/result.py
  • plugins/nemo-insights/src/nemo_insights_plugin/analyst/run.py
  • plugins/nemo-insights/src/nemo_insights_plugin/authz.py
  • plugins/nemo-insights/src/nemo_insights_plugin/cli.py
  • plugins/nemo-insights/src/nemo_insights_plugin/client.py
  • plugins/nemo-insights/src/nemo_insights_plugin/config.py
  • plugins/nemo-insights/src/nemo_insights_plugin/controller.py
  • plugins/nemo-insights/src/nemo_insights_plugin/entities.py
  • plugins/nemo-insights/src/nemo_insights_plugin/jobs/analyze.py
  • plugins/nemo-insights/src/nemo_insights_plugin/jobs/bridge.py
  • plugins/nemo-insights/src/nemo_insights_plugin/py.typed
  • plugins/nemo-insights/src/nemo_insights_plugin/schedule.py
  • plugins/nemo-insights/src/nemo_insights_plugin/schema.py
  • plugins/nemo-insights/src/nemo_insights_plugin/sdk.py
  • plugins/nemo-insights/src/nemo_insights_plugin/sdk_resources/_entity.py
  • plugins/nemo-insights/src/nemo_insights_plugin/sdk_resources/analysis_configs.py
  • plugins/nemo-insights/src/nemo_insights_plugin/sdk_resources/insights.py
  • plugins/nemo-insights/src/nemo_insights_plugin/service.py
  • plugins/nemo-insights/testbed/README.md
  • plugins/nemo-insights/testbed/__main__.py
  • plugins/nemo-insights/testbed/adapters.py
  • plugins/nemo-insights/testbed/artifact.py
  • plugins/nemo-insights/testbed/cli.py
  • plugins/nemo-insights/testbed/eval/plan.py
  • plugins/nemo-insights/testbed/eval/prep.py
  • plugins/nemo-insights/testbed/eval/run_subjects.py
  • plugins/nemo-insights/testbed/eval/stack.py
  • plugins/nemo-insights/testbed/export.py
  • plugins/nemo-insights/testbed/ingest.py
  • plugins/nemo-insights/testbed/otlp_build.py
  • plugins/nemo-insights/testbed/otlp_ingest.py
  • plugins/nemo-insights/testbed/publish.py
  • plugins/nemo-insights/testbed/registry.py
  • plugins/nemo-insights/testbed/reingest.py
  • plugins/nemo-insights/testbed/release.py
  • plugins/nemo-insights/testbed/runstore.py
  • plugins/nemo-insights/testbed/summary.py
  • plugins/nemo-insights/testbed/tau2run.py
  • plugins/nemo-insights/testbed/testbeds.toml
  • plugins/nemo-insights/testbed/timeparse.py
  • plugins/nemo-insights/tests/test_client.py
  • plugins/nemo-insights/tests/test_periodic_analysis.py
  • plugins/nemo-insights/tests/test_sdk_entity_hydration.py
  • plugins/nemo-insights/tests/testbed/conftest.py
  • plugins/nemo-insights/tests/testbed/test_adapters.py
  • plugins/nemo-insights/tests/testbed/test_artifact.py
  • plugins/nemo-insights/tests/testbed/test_cli.py
  • plugins/nemo-insights/tests/testbed/test_eval_scripts.py
  • plugins/nemo-insights/tests/testbed/test_export.py
  • plugins/nemo-insights/tests/testbed/test_ingest.py
  • plugins/nemo-insights/tests/testbed/test_otlp_build.py
  • plugins/nemo-insights/tests/testbed/test_otlp_ingest.py
  • plugins/nemo-insights/tests/testbed/test_publish.py
  • plugins/nemo-insights/tests/testbed/test_registry.py
  • plugins/nemo-insights/tests/testbed/test_reingest.py
  • plugins/nemo-insights/tests/testbed/test_release.py
  • plugins/nemo-insights/tests/testbed/test_runstore.py
  • plugins/nemo-insights/tests/testbed/test_summary.py
  • plugins/nemo-insights/tests/testbed/test_tau2run.py
  • plugins/nemo-insights/tests/testbed/test_timeparse.py
  • pyproject.toml
  • tests/discovery_exclusions.py
  • tools/lint/lint-python-types.sh

Comment thread .github/workflows/insights-testbed.yml Outdated
Comment thread plugins/nemo-insights/src/nemo_insights_plugin/cli.py Outdated
Comment thread plugins/nemo-insights/src/nemo_insights_plugin/cli.py
Comment thread plugins/nemo-insights/testbed/README.md Outdated
Comment thread plugins/nemo-insights/testbed/reingest.py
Comment thread plugins/nemo-insights/testbed/reingest.py
Comment thread plugins/nemo-insights/testbed/reingest.py
Comment thread plugins/nemo-insights/testbed/reingest.py
nicot added 2 commits July 14, 2026 13:38
Use the standard workspace dependency model while keeping Insights outside the default and enabled plugin groups.

Signed-off-by: Nico Tonozzi <ntonozzi@nvidia.com>
Harden workflow checkouts and correct analyst timestamp, persistence, and testbed utility edge cases identified during PR review.

Signed-off-by: Nico Tonozzi <ntonozzi@nvidia.com>
@svvarom
svvarom self-requested a review July 14, 2026 21:50
Comment thread .github/workflows/insights-testbed.yml Outdated
Wire the testbed jobs to the inference credentials available across NeMo repositories.

Signed-off-by: Nico Tonozzi <ntonozzi@nvidia.com>
Comment thread .github/workflows/insights-testbed.yml Outdated
Trigger inference only when the run-insights label is applied so later commits do not repeat costly analysis.

Signed-off-by: Nico Tonozzi <ntonozzi@nvidia.com>
@nicot
nicot added this pull request to the merge queue Jul 14, 2026
Merged via the queue into main with commit 8e58f17 Jul 14, 2026
62 checks passed
@nicot
nicot deleted the migrate-insights-plugins/ntonozzi branch July 14, 2026 22:55
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.

4 participants