Skip to content

feat(evaluator): add agent-eval engine (AgentEvaluator) - #369

Merged
arpitsardhana merged 1 commit into
mainfrom
aalgo-272-agent-engine/arpsingh
Jun 17, 2026
Merged

feat(evaluator): add agent-eval engine (AgentEvaluator)#369
arpitsardhana merged 1 commit into
mainfrom
aalgo-272-agent-engine/arpsingh

Conversation

@arpitsardhana

@arpitsardhana arpitsardhana commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Add the standalone agent-eval orchestration engine on top of the domain model: AgentEvaluator (generation + scoring), run-bundle persistence, and an HTML dashboard.

Adapted to the refactored domain model: trial/score naming, status enums, AggregatedMetricResult-based summary, and from_scores aggregation. Online inference seams (inference fns, clients, default headers) are injected on the AgentEvaluator instance rather than AgentEvalRunConfig. Also maps candidate evidence through build_metric_input so metrics can consume trial evidence.

Summary by CodeRabbit

Release Notes

  • New Features
    • Added an agent evaluation orchestrator to validate inputs, run scoring concurrently, and return a complete evaluation result bundle.
    • Added HTML dashboard rendering and file writing for compact evaluation summaries, metric rollups, and per-trial score tables.
    • Added run persistence to save benchmark/summary JSON, JSONL task/trial/score data, and a run manifest to disk.
    • Extended evaluation sample handling to include evidence in candidate payloads.
  • Tests
    • Added dashboard and evaluator test suites covering scoring flows, failure modes, persistence, and live trial generation.

@github-actions github-actions Bot added the feat label Jun 17, 2026
@github-actions

github-actions Bot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor
Suite Lines Covered Line Rate Branch Rate
Unit Tests 20036/26510 75.6% 60.9%
Integration Tests 11650/25282 46.1% 19.7%

@arpitsardhana
arpitsardhana force-pushed the aalgo-272-agent-engine/arpsingh branch 2 times, most recently from 1fd0172 to b3660c2 Compare June 17, 2026 08:54
@arpitsardhana
arpitsardhana marked this pull request as ready for review June 17, 2026 08:54
@arpitsardhana
arpitsardhana requested review from a team as code owners June 17, 2026 08:54
Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/evaluator.py Outdated
Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/evaluator.py Outdated
Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/evaluator.py Outdated
Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/evaluator.py Outdated
Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/evaluator.py Outdated
@arpitsardhana arpitsardhana self-assigned this Jun 17, 2026
@arpitsardhana
arpitsardhana force-pushed the aalgo-272-agent-engine/arpsingh branch from b3660c2 to 9256690 Compare June 17, 2026 16:21
@coderabbitai

coderabbitai Bot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

Adds AgentEvaluator for orchestrating agent evaluation runs with async trial generation and concurrent scoring, persist_run for writing evaluation artifacts to disk, render_dashboard/write_dashboard for generating an HTML result page, and evidence field propagation through metric input building.

Changes

Agent Evaluation Pipeline

Layer / File(s) Summary
Evidence field propagation into metric inputs
packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/execution/samples.py, packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/tasks.py
_CANDIDATE_SAMPLE_FIELDS gains "evidence" and build_metric_input passes sample.get("evidence") into CandidateOutput. A TODO is added to AgentEvalTask about declaring required capabilities.
AgentEvaluator class: run, run_sync, and orchestration flow
packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/evaluator.py
AgentEvaluator accepts injected inference/client seams. run validates inputs, assigns a run id, branches to trial import or generation, scores trials concurrently, assembles AgentEvalResult with summary and benchmark metadata, and dispatches to persist/dashboard. run_sync wraps run synchronously.
Trial scoring orchestration and metric computation
packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/evaluator.py
_score_trials groups trials by task, validates completeness, runs concurrent (task, trial, metric) scoring under a semaphore, handles exceptions via fail_fast. _score_metric builds input rows and returns AgentEvalTaskScore. Helpers construct failed scores with diagnostics, score identifiers, task/metric rows, and trial sample dicts.
Live trial generation from Model/Agent/TaskRunner targets
packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/evaluator.py
_generate_trials validates targets, resolves params and prompt templates, manages client lifecycle, and runs generation concurrently; request failures optionally become FAILED trials. _generate_sample, _trial_from_sample, and _failed_generation_trial handle per-target routing, evidence extraction, and error wrapping.
Run artifact persistence
packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/persistence.py
persist_run writes benchmark.json, tasks.jsonl, trials.jsonl, scores.jsonl, summary.json, and run.json manifest to the output directory and returns the updated result. _write_json and _write_jsonl handle Pydantic/dict serialization with sorted keys.
HTML dashboard rendering and writing
packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/dashboard.py
render_dashboard builds a standalone HTML page with run summary counts, metric rollup table, and per-score table. write_dashboard persists it to disk. Helpers cover Pydantic model_dump, HTML escaping, and numeric score formatting.
Evaluator comprehensive test coverage
packages/nemo_evaluator_sdk/tests/agent_eval/test_evaluator.py
Covers input validation, imported/partial trial scoring with persistence, runtime trial generation, live model/agent generation with mocked inference, metric failure isolation and fail-fast, summary aggregation, trace evidence propagation, and ignore_request_failure behavior. Includes metric doubles and helper factories.
Dashboard rendering test
packages/nemo_evaluator_sdk/tests/agent_eval/test_dashboard.py
Verifies HTML output includes formatted scores (3-decimal precision), metric names, trial ids, output labels, and section headers.

Sequence Diagram(s)

sequenceDiagram
  participant Caller
  participant AgentEvaluator
  participant _generate_trials
  participant _score_trials
  participant persist_run
  participant write_dashboard

  Caller->>AgentEvaluator: run(tasks, trials|target, config)
  AgentEvaluator->>AgentEvaluator: validate inputs, assign run_id
  alt target provided
    AgentEvaluator->>_generate_trials: generate trials concurrently
    _generate_trials-->>AgentEvaluator: trials[]
  end
  AgentEvaluator->>_score_trials: score(tasks, trials, config)
  _score_trials-->>AgentEvaluator: scores[]
  AgentEvaluator->>AgentEvaluator: build summary + benchmark metadata
  opt output_dir configured
    AgentEvaluator->>persist_run: persist result artifacts
    persist_run-->>AgentEvaluator: updated AgentEvalResult
    opt write_dashboard configured
      AgentEvaluator->>write_dashboard: render and write HTML
    end
  end
  AgentEvaluator-->>Caller: AgentEvalResult
Loading

Possibly related PRs

  • NVIDIA-NeMo/nemo-platform#339: Introduced CandidateEvidence/EvidenceDescriptor types and CandidateOutput.evidence/AgentEvalTrial.evidence fields that this PR's evidence propagation through _CANDIDATE_SAMPLE_FIELDS and build_metric_input directly depends on.

Suggested reviewers

  • ngoncharenko
  • SandyChapman
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 9.59% 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 'feat(evaluator): add agent-eval engine (AgentEvaluator)' directly and clearly describes the main change: introducing the AgentEvaluator orchestration engine. It accurately reflects the primary addition across the changeset.
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.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch aalgo-272-agent-engine/arpsingh

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

@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_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/tasks.py (1)

65-66: TODO noted: task capability requirements.

This would help skip tasks incompatible with certain targets (e.g., file-based tasks on text-only models).

Want me to open an issue to track this capability-matching feature?

🤖 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_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/tasks.py`
around lines 65 - 66, The TODO comment in the tasks.py file notes that Tasks may
need to define required_capabilities to allow the runtime to skip incompatible
tasks. While this is a valid enhancement idea for the capability-matching
feature, it is currently just a TODO comment without any associated tracking or
implementation. Consider whether to create a separate issue in your project's
tracking system to formally document this feature request so it can be
prioritized and implemented as part of the task evaluation framework, or
alternatively, enhance the TODO comment with more specific requirements for what
required_capabilities should include and how the runtime should use them to
filter tasks.
🤖 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_evaluator_sdk/tests/agent_eval/test_dashboard.py`:
- Line 4: Remove the `from __future__ import annotations` import statement from
the top of the test_dashboard.py file. This import defers all type hints and
stores them as strings at runtime, which conflicts with the coding guideline
requiring concrete runtime type hints. Simply delete this line to ensure type
hints are evaluated as concrete types at runtime.

In `@packages/nemo_evaluator_sdk/tests/agent_eval/test_evaluator.py`:
- Line 4: Remove the `from __future__ import annotations` import statement at
the top of the file. Since the codebase targets Python 3.11+ and already uses
modern type hint syntax like PEP 604 unions (|) and PEP 585 built-in generics
(list[], dict[]), this future import is unnecessary and converts all type hints
to strings, which contradicts the goal of using concrete type hints. Simply
delete this line and the type annotations will continue to work as concrete
types with the native Python 3.11+ support.

---

Nitpick comments:
In `@packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/tasks.py`:
- Around line 65-66: The TODO comment in the tasks.py file notes that Tasks may
need to define required_capabilities to allow the runtime to skip incompatible
tasks. While this is a valid enhancement idea for the capability-matching
feature, it is currently just a TODO comment without any associated tracking or
implementation. Consider whether to create a separate issue in your project's
tracking system to formally document this feature request so it can be
prioritized and implemented as part of the task evaluation framework, or
alternatively, enhance the TODO comment with more specific requirements for what
required_capabilities should include and how the runtime should use them to
filter tasks.
🪄 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: 680e33f6-66d5-4a1e-aec4-318b438c149d

📥 Commits

Reviewing files that changed from the base of the PR and between d36974f and 9256690.

⛔ Files ignored due to path filters (5)
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/dashboard.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/evaluator.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/persistence.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/tasks.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/execution/samples.py is excluded by !sdk/**
📒 Files selected for processing (7)
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/dashboard.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/evaluator.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/persistence.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/tasks.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/execution/samples.py
  • packages/nemo_evaluator_sdk/tests/agent_eval/test_dashboard.py
  • packages/nemo_evaluator_sdk/tests/agent_eval/test_evaluator.py

Comment thread packages/nemo_evaluator_sdk/tests/agent_eval/test_dashboard.py Outdated
Comment thread packages/nemo_evaluator_sdk/tests/agent_eval/test_evaluator.py Outdated
@arpitsardhana
arpitsardhana force-pushed the aalgo-272-agent-engine/arpsingh branch from 9256690 to 0848abc Compare June 17, 2026 16:44

@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

🤖 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_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/dashboard.py`:
- Around line 129-132: The _jsonish function currently only catches TypeError
when calling json.dumps on the value, but json.dumps can also raise ValueError
for issues like circular references. Modify the except clause to catch both
TypeError and ValueError (or a broader Exception) instead of just TypeError, so
that any serialization failure will fall back to the str(value) conversion
instead of crashing the dashboard rendering.

In
`@packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/persistence.py`:
- Around line 56-58: The _write_jsonl function currently materializes the entire
file content in memory by joining all rows at once, which can cause memory
spikes with large datasets. Instead of using "\n".join() to create a single
payload string, refactor the function to open the file in write mode and iterate
through each row, writing each serialized row followed by a newline directly to
the file in a streaming fashion. This avoids loading the complete content into
memory before writing.
🪄 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: 48cbefec-99c3-4558-92b1-785878391b66

📥 Commits

Reviewing files that changed from the base of the PR and between 9256690 and 0848abc.

⛔ Files ignored due to path filters (5)
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/dashboard.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/evaluator.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/persistence.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/tasks.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/execution/samples.py is excluded by !sdk/**
📒 Files selected for processing (7)
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/dashboard.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/evaluator.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/persistence.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/tasks.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/execution/samples.py
  • packages/nemo_evaluator_sdk/tests/agent_eval/test_dashboard.py
  • packages/nemo_evaluator_sdk/tests/agent_eval/test_evaluator.py
✅ Files skipped from review due to trivial changes (1)
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/tasks.py
🚧 Files skipped from review as they are similar to previous changes (4)
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/execution/samples.py
  • packages/nemo_evaluator_sdk/tests/agent_eval/test_dashboard.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/evaluator.py
  • packages/nemo_evaluator_sdk/tests/agent_eval/test_evaluator.py

Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/persistence.py Outdated
@arpitsardhana
arpitsardhana force-pushed the aalgo-272-agent-engine/arpsingh branch from 0848abc to a6c2ec6 Compare June 17, 2026 16:51
Add the standalone agent-eval orchestration engine on top of the domain
model: AgentEvaluator (generation + scoring), run-bundle persistence, and an
HTML dashboard.

Adapted to the refactored domain model: trial/score naming, status enums,
AggregatedMetricResult-based summary, and from_scores aggregation. Online
inference seams (inference fns, clients, default headers) are injected on the
AgentEvaluator instance rather than AgentEvalRunConfig. Also maps candidate
evidence through build_metric_input so metrics can consume trial evidence.

Signed-off-by: Arpit Singh (SW-CLOUD) <arpsingh@nvidia.com>
@arpitsardhana
arpitsardhana force-pushed the aalgo-272-agent-engine/arpsingh branch from a6c2ec6 to 59f1c1a Compare June 17, 2026 16:56

@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: 3

♻️ Duplicate comments (1)
packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/dashboard.py (1)

129-132: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Catch ValueError in _jsonish fallback path.

json.dumps can raise ValueError (e.g., circular refs), which currently escapes and can break rendering.

Diff
 def _jsonish(value: Any) -> str:
     if isinstance(value, BaseModel):
         value = value.model_dump(mode="json")
     try:
         return json.dumps(value, indent=2, sort_keys=True)
-    except TypeError:
+    except (TypeError, ValueError):
         return str(value)
🤖 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_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/dashboard.py`
around lines 129 - 132, The `_jsonish` function only catches `TypeError` when
calling `json.dumps`, but `json.dumps` can also raise `ValueError` for cases
like circular references, which currently escapes the exception handler and
breaks rendering. Modify the except clause to catch both `TypeError` and
`ValueError` exceptions so that both cases are handled by the fallback
`str(value)` conversion.
🧹 Nitpick comments (1)
packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/evaluator.py (1)

6-6: ⚡ Quick win

Remove postponed annotations.

This makes every annotation string-based in this module; the shown types can be imported normally.

As per coding guidelines, **/*.py: “Always prefer concrete type hints over string-based ones in Python code; do not import types under TYPE_CHECKING, instead import types as regular imports when possible.”

Proposed fix
-from __future__ import annotations
-
🤖 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_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/evaluator.py`
at line 6, Remove the `from __future__ import annotations` import statement at
the top of the evaluator.py file. This import makes all type annotations
string-based, which violates the coding guideline that requires concrete type
hints over string-based ones. After removing this line, ensure all type hints in
the module use concrete imported types rather than string-based forward
references, and import any necessary types directly as regular imports instead
of under TYPE_CHECKING blocks.

Source: Coding guidelines

🤖 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_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/evaluator.py`:
- Around line 208-214: The _score_id() function is generating non-unique IDs for
metrics because it omits the metric index or configuration details. When
multiple metrics of the same type exist on a single task/trial, the IDs collide.
Modify the _score_id() function to include the metric's index position or
configuration details (such as metric name or any unique metric identifier) in
the ID generation to ensure each metric instance produces a unique score ID.
Also check the code at lines 437-438 for the same issue and apply the same fix
there.
- Around line 235-243: Add validation in the client initialization logic to
reject mismatched injected clients before generation proceeds. When self.client
is not None, verify that it matches the target type - for a Model target,
self.client should be an httpx.AsyncClient; for an Agent target, it should be an
AsyncOpenAI client. If there is a mismatch, raise an appropriate error to
prevent None from being passed to inference. Apply this same validation logic in
the other relevant section mentioned around lines 301-318 to ensure consistency
across all client handling paths.
- Around line 541-542: The _new_run_id() function uses only a second-level
timestamp, which can create collisions in parallel or rapid runs, causing score
ID and bundle identifier reuse. Modify the function to generate a
collision-resistant ID by appending a unique random component (such as a UUID or
random string) to the timestamp, ensuring each run ID is guaranteed to be unique
even when multiple runs occur within the same second.

---

Duplicate comments:
In `@packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/dashboard.py`:
- Around line 129-132: The `_jsonish` function only catches `TypeError` when
calling `json.dumps`, but `json.dumps` can also raise `ValueError` for cases
like circular references, which currently escapes the exception handler and
breaks rendering. Modify the except clause to catch both `TypeError` and
`ValueError` exceptions so that both cases are handled by the fallback
`str(value)` conversion.

---

Nitpick comments:
In `@packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/evaluator.py`:
- Line 6: Remove the `from __future__ import annotations` import statement at
the top of the evaluator.py file. This import makes all type annotations
string-based, which violates the coding guideline that requires concrete type
hints over string-based ones. After removing this line, ensure all type hints in
the module use concrete imported types rather than string-based forward
references, and import any necessary types directly as regular imports instead
of under TYPE_CHECKING blocks.
🪄 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: d1a60727-4a5c-4e5b-ac4b-7430f9f82766

📥 Commits

Reviewing files that changed from the base of the PR and between 0848abc and a6c2ec6.

⛔ Files ignored due to path filters (5)
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/dashboard.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/evaluator.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/persistence.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/tasks.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/execution/samples.py is excluded by !sdk/**
📒 Files selected for processing (7)
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/dashboard.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/evaluator.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/persistence.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/tasks.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/execution/samples.py
  • packages/nemo_evaluator_sdk/tests/agent_eval/test_dashboard.py
  • packages/nemo_evaluator_sdk/tests/agent_eval/test_evaluator.py
✅ Files skipped from review due to trivial changes (1)
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/tasks.py
🚧 Files skipped from review as they are similar to previous changes (3)
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/execution/samples.py
  • packages/nemo_evaluator_sdk/tests/agent_eval/test_dashboard.py
  • packages/nemo_evaluator_sdk/tests/agent_eval/test_evaluator.py

@arpitsardhana
arpitsardhana enabled auto-merge June 17, 2026 17:00

@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_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/persistence.py (1)

6-6: ⚡ Quick win

Remove postponed-annotation mode in this module.

Drop from __future__ import annotations and keep concrete runtime-resolved annotations only, per repo rule.

As per coding guidelines: “Always prefer concrete type hints over string-based ones in Python code; do not import types under TYPE_CHECKING, instead import types as regular imports when possible.”

🤖 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_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/persistence.py`
at line 6, Remove the `from __future__ import annotations` import statement from
the top of the module and ensure all type annotations use concrete
runtime-resolved types instead of string-based annotations. Review any type
hints throughout the module and convert them to use regular imports of the
required types rather than importing them under TYPE_CHECKING blocks, so that
the annotations are fully resolvable at runtime.

Source: Coding guidelines

🤖 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_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/persistence.py`:
- Line 6: Remove the `from __future__ import annotations` import statement from
the top of the module and ensure all type annotations use concrete
runtime-resolved types instead of string-based annotations. Review any type
hints throughout the module and convert them to use regular imports of the
required types rather than importing them under TYPE_CHECKING blocks, so that
the annotations are fully resolvable at runtime.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: ebc2892a-c4ab-4a8f-8808-ecbc8c813438

📥 Commits

Reviewing files that changed from the base of the PR and between a6c2ec6 and 59f1c1a.

⛔ Files ignored due to path filters (5)
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/dashboard.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/evaluator.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/persistence.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/tasks.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/execution/samples.py is excluded by !sdk/**
📒 Files selected for processing (7)
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/dashboard.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/evaluator.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/persistence.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/tasks.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/execution/samples.py
  • packages/nemo_evaluator_sdk/tests/agent_eval/test_dashboard.py
  • packages/nemo_evaluator_sdk/tests/agent_eval/test_evaluator.py
✅ Files skipped from review due to trivial changes (1)
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/tasks.py
🚧 Files skipped from review as they are similar to previous changes (4)
  • packages/nemo_evaluator_sdk/tests/agent_eval/test_dashboard.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/execution/samples.py
  • packages/nemo_evaluator_sdk/tests/agent_eval/test_evaluator.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/evaluator.py

@arpitsardhana
arpitsardhana added this pull request to the merge queue Jun 17, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Jun 17, 2026
@arpitsardhana
arpitsardhana added this pull request to the merge queue Jun 17, 2026
Merged via the queue into main with commit 71d6c4e Jun 17, 2026
53 checks passed
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