Skip to content

feat(evaluator): add agent-eval SDK domain model value types - #339

Merged
arpitsardhana merged 1 commit into
mainfrom
aalgo-272-domain-model/arpsingh
Jun 16, 2026
Merged

feat(evaluator): add agent-eval SDK domain model value types#339
arpitsardhana merged 1 commit into
mainfrom
aalgo-272-domain-model/arpsingh

Conversation

@arpitsardhana

@arpitsardhana arpitsardhana commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

Introduce the standalone agent-eval domain model described in the NeMo Evaluator Agent Evaluation design:

  • AgentEvalTask,
  • SemanticView,
  • ViewSignal,
  • AgentOutput,
  • AgentEvalAttempt (trial),
  • AgentEvalTaskResult, and summary/coverage value types, plus the shared EvidenceDescriptor,

CandidateEvidence, and LocalFilesystemEvidence types. Extend CandidateOutput with a candidate.evidence field and the metric protocol to carry evidence. Mirrored into the vendored nemo_platform beta SDK.

erDiagram
    AgentEvalRunResult ||--o{ AgentEvalTask        : "tasks"
    AgentEvalRunResult ||--o{ AgentEvalAttempt     : "attempts"
    AgentEvalRunResult ||--o{ AgentEvalTaskResult  : "results"
    AgentEvalRunResult ||--|| AgentEvalSummary     : "summary"

    AgentEvalTask      ||--o{ Metric               : "metrics (ordered)"
    AgentEvalTask      ||--o{ SemanticView         : "views"
    SemanticView       ||--|{ ViewSignal           : "signals (>=1)"
    ViewSignal         }o--|| Metric               : "metric+output ref"

    AgentEvalAttempt   }o--|| AgentEvalTask        : "task_id (FK)"
    AgentEvalAttempt   ||--o| AgentOutput          : "output"
    AgentEvalAttempt   ||--o| CandidateEvidence    : "evidence"

    CandidateEvidence  ||--o{ EvidenceDescriptor   : "descriptors"
    CandidateEvidence  ||--o{ LocalFilesystemEvidence : "fs cache (lazy)"
    CandidateOutput    ||--o| CandidateEvidence    : "evidence (extension)"

    AgentEvalTaskResult }o--|| AgentEvalRunResult  : "run_id (FK)"
    AgentEvalTaskResult }o--|| AgentEvalTask       : "task_id (FK)"
    AgentEvalTaskResult }o--|| AgentEvalAttempt    : "attempt_id (FK)"
    AgentEvalTaskResult }o--|| Metric              : "metric_type (FK)"
    AgentEvalTaskResult ||--o{ MetricOutput        : "outputs"
    AgentEvalTaskResult ||--o{ AgentEvalDiagnostic : "diagnostics"

    AgentEvalSummary   ||--o{ AgentEvalMetricOutputCoverage : "metric_coverage"

    MetricInput        ||--|| DatasetRow           : "row"
    MetricInput        ||--|| CandidateOutput      : "candidate"

    AgentEvalTask {
        string id PK
        string intent
        dict inputs
        list metrics
        dict views
        dict metadata
    }
    SemanticView {
        enum reducer "single|all|any|mean|weighted_mean"
        list signals
    }
    ViewSignal {
        string metric
        string output
        float weight
    }
    AgentOutput {
        string text
        any response
        dict metadata
    }
    AgentEvalAttempt {
        string id PK
        string task_id FK
        enum status "completed|failed|partial"
        AgentOutput output
        CandidateEvidence evidence
        dict metadata
    }
    EvidenceDescriptor {
        string kind
        string ref "ref or data required"
        string format "parser hint e.g. atif"
        any data
        dict metadata
    }
    CandidateEvidence {
        dict descriptors
        dict metadata
    }
    LocalFilesystemEvidence {
        Path root
    }
    AgentEvalTaskResult {
        string id PK
        string run_id FK
        string task_id FK
        string attempt_id FK
        string metric_type FK
        enum status
        list outputs
        list diagnostics
        dict metadata
    }
    MetricOutput {
        string name
        any value
    }
    AgentEvalDiagnostic {
        enum severity "error|warning|info"
        string message
        string source
        dict details
    }
    AgentEvalMetricOutputCoverage {
        int total
        int scored
        int failed
        int missing
    }
    AgentEvalSummary {
        float overall_score
        dict metric_scores
        dict metric_coverage
        dict semantic_view_scores
        int task_count
        int attempt_count
        int result_count
    }
    AgentEvalRunResult {
        string run_id PK
        list tasks
        list attempts
        list results
        AgentEvalSummary summary
        dict benchmark
        Path output_dir
        Path dashboard_path
    }
    CandidateOutput {
        string output_text
        any response
        any trajectory "deprecated"
        CandidateEvidence evidence
        dict metadata
    }
    MetricInput {
        DatasetRow row
        CandidateOutput candidate
    }
    DatasetRow {
        int row_index
        dict data
    }
Loading

Summary by CodeRabbit

  • New Features
    • Added evidence support for candidate outputs, including filesystem and metadata handling.
    • Introduced comprehensive agent evaluation framework with task configuration, trial execution, metric scoring, and result aggregation.
    • Added diagnostic tracking and semantic view support for multi-signal evaluation.

@coderabbitai

coderabbitai Bot commented Jun 15, 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

Adds three evidence value types (LocalFilesystemEvidence, EvidenceDescriptor, CandidateEvidence) with path traversal protection and URI parsing, exports them from the values public API, and attaches an optional evidence field to CandidateOutput. Introduces a full agent evaluation type layer: task, trial, score, and result models with semantic view reduction and metric aggregation helpers.

Changes

Evidence Value Types

Layer / File(s) Summary
Evidence models
packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/values/evidence.py
LocalFilesystemEvidence with traversal-blocking path() and async exists/read_text/iter_paths; EvidenceDescriptor enforcing ref-or-data; CandidateEvidence with descriptor coercion, lookup helpers, cached filesystem handles; _local_filesystem_ref rejecting network/cloud URI schemes.
CandidateOutput integration and public exports
values/protocol.py, values/__init__.py
Adds optional evidence: CandidateEvidence | None to CandidateOutput and conditionally includes it in as_sample(); re-exports all three evidence types via __all__.

Agent Eval Type Layer

Layer / File(s) Summary
Enums, semantic views, task, trial, and runner contracts
agent_eval/tasks.py, agent_eval/trials.py
SemanticReducer enum; ViewSignal/SemanticView models; AgentEvalTask with metric serialization and view cross-validation; AgentEvalRunConfig; AgentEvalTarget alias; AgentEvalTrialStatus, AgentOutput, AgentEvalTrial with completed-requires-output validation; AgentTaskRunner async protocol.
Score status and per-trial score record
agent_eval/scores.py
AgentEvalScoreStatus and AgentEvalDiagnosticSeverity enums; AgentEvalDiagnostic and AgentEvalTaskScore models capturing identifiers, metric outputs, diagnostics, and metadata.
Result models and aggregation logic
agent_eval/results.py
AgentEvalMetricOutputCoverage, AgentEvalSummary with from_scores(), AgentEvaluationResult root model; _aggregate_scores computing per-metric range stats and semantic view rollups; coverage, output name, and semantic value helpers; mean_numeric.

Sequence Diagram(s)

sequenceDiagram
  participant Caller
  participant AgentTaskRunner
  participant AgentEvalTrial
  participant CandidateEvidence
  participant LocalFilesystemEvidence

  Caller->>AgentTaskRunner: run_tasks(tasks, config)
  AgentTaskRunner-->>Caller: Sequence[AgentEvalTrial]
  Caller->>AgentEvalTrial: access trial.evidence
  AgentEvalTrial-->>Caller: CandidateEvidence | None
  Caller->>CandidateEvidence: filesystem(name)
  CandidateEvidence->>LocalFilesystemEvidence: materialize via _local_filesystem_ref(ref)
  CandidateEvidence-->>Caller: LocalFilesystemEvidence (cached)
  Caller->>LocalFilesystemEvidence: read_text(relative_path)
  LocalFilesystemEvidence-->>Caller: str (file contents)
Loading

Suggested reviewers

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

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 45.16% 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 describes the main change: adding domain model value types for agent evaluation to the SDK.
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 unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch aalgo-272-domain-model/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.

🧹 Nitpick comments (3)
packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/types.py (1)

103-103: ⚡ Quick win

Replace quoted forward refs with concrete type annotations.

At Line 103, Line 145, and Line 163, string-based annotations are used ("AgentEvalTask", "AgentEvalAttempt", "AgentEvalDiagnostic"). Use concrete annotations directly.

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."

Also applies to: 145-145, 163-163

🤖 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/types.py` at
line 103, Replace the quoted string-based type annotations with concrete type
hints in three methods within the AgentEvalTask class. Specifically, change the
return type annotation of _validate_metric_references method (at line 103) from
"AgentEvalTask" to AgentEvalTask, update the return type at line 145 from
"AgentEvalAttempt" to AgentEvalAttempt, and update the return type at line 163
from "AgentEvalDiagnostic" to AgentEvalDiagnostic. Ensure that the necessary
types are imported as regular imports at the top of the file rather than under
TYPE_CHECKING, so that these concrete type annotations can be used directly.

Source: Coding guidelines

packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/values/evidence.py (2)

34-48: ⚡ Quick win

Async methods perform synchronous filesystem I/O.

exists, read_text, and iter_paths are declared async but execute blocking Path.exists(), Path.read_text(), and directory iteration synchronously. This blocks the event loop when called.

If async signatures are intentional for future-proofing, consider wrapping I/O in asyncio.to_thread() or documenting the sync behavior.

Option: Use asyncio.to_thread for non-blocking I/O
+import asyncio
+
 class LocalFilesystemEvidence:
     ...
 
     async def exists(self, relative_path: str | Path = ".") -> bool:
         """Return whether a path exists under the evidence root."""
-        return self.path(relative_path).exists()
+        p = self.path(relative_path)
+        return await asyncio.to_thread(p.exists)
 
     async def read_text(self, relative_path: str | Path, *, encoding: str = "utf-8") -> str:
         """Read a text file under the evidence root."""
-        return self.path(relative_path).read_text(encoding=encoding)
+        p = self.path(relative_path)
+        return await asyncio.to_thread(p.read_text, encoding=encoding)
🤖 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/values/evidence.py` around
lines 34 - 48, The async methods exists, read_text, and iter_paths all perform
blocking filesystem I/O operations synchronously, which blocks the event loop.
Wrap the blocking I/O calls in asyncio.to_thread() to make them non-blocking: in
exists, wrap the self.path(relative_path).exists() call, in read_text wrap the
self.path(relative_path).read_text(encoding=encoding) call, and in iter_paths
wrap the base.is_file() check and the directory iteration logic (base.rglob or
base.iterdir) to ensure the event loop is not blocked during execution.

122-130: Windows drive paths will be rejected as unknown scheme. urlparse("C:\\path") yields scheme="c", triggering the error on line 128–129. Consider detecting Windows drive letters if local Windows paths need to be supported, though the function appears designed for URI refs and POSIX paths (no Windows paths documented or tested).

🤖 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/values/evidence.py` around
lines 122 - 130, The _local_filesystem_ref function will incorrectly reject
valid Windows absolute paths because urlparse interprets Windows drive letters
(e.g., "C") as URL schemes. To fix this, add explicit detection for Windows
drive letter patterns (a single letter followed by a colon, like "C:") before
the urlparse scheme check. If a Windows drive letter is detected, treat it as a
local filesystem path and proceed to return Path(ref) directly, bypassing the
scheme validation that would incorrectly flag it as an unsupported scheme.
Alternatively, if Windows paths are not intended to be supported, document this
limitation clearly in the function's docstring.
🤖 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/types.py`:
- Line 103: Replace the quoted string-based type annotations with concrete type
hints in three methods within the AgentEvalTask class. Specifically, change the
return type annotation of _validate_metric_references method (at line 103) from
"AgentEvalTask" to AgentEvalTask, update the return type at line 145 from
"AgentEvalAttempt" to AgentEvalAttempt, and update the return type at line 163
from "AgentEvalDiagnostic" to AgentEvalDiagnostic. Ensure that the necessary
types are imported as regular imports at the top of the file rather than under
TYPE_CHECKING, so that these concrete type annotations can be used directly.

In `@packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/values/evidence.py`:
- Around line 34-48: The async methods exists, read_text, and iter_paths all
perform blocking filesystem I/O operations synchronously, which blocks the event
loop. Wrap the blocking I/O calls in asyncio.to_thread() to make them
non-blocking: in exists, wrap the self.path(relative_path).exists() call, in
read_text wrap the self.path(relative_path).read_text(encoding=encoding) call,
and in iter_paths wrap the base.is_file() check and the directory iteration
logic (base.rglob or base.iterdir) to ensure the event loop is not blocked
during execution.
- Around line 122-130: The _local_filesystem_ref function will incorrectly
reject valid Windows absolute paths because urlparse interprets Windows drive
letters (e.g., "C") as URL schemes. To fix this, add explicit detection for
Windows drive letter patterns (a single letter followed by a colon, like "C:")
before the urlparse scheme check. If a Windows drive letter is detected, treat
it as a local filesystem path and proceed to return Path(ref) directly,
bypassing the scheme validation that would incorrectly flag it as an unsupported
scheme. Alternatively, if Windows paths are not intended to be supported,
document this limitation clearly in the function's docstring.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 47c61447-bc80-44b5-ad53-2779742e8b2b

📥 Commits

Reviewing files that changed from the base of the PR and between a3c9e2f and 3324a4d.

⛔ Files ignored due to path filters (5)
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/types.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/metrics/protocol.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/values/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/values/evidence.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/values/protocol.py is excluded by !sdk/**
📒 Files selected for processing (5)
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/types.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/metrics/protocol.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/values/__init__.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/values/evidence.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/values/protocol.py

@github-actions

github-actions Bot commented Jun 15, 2026

Copy link
Copy Markdown
Contributor
Suite Lines Covered Line Rate Branch Rate
Unit Tests 19503/25926 75.2% 60.7%
Integration Tests 11411/24698 46.2% 20.1%

@arpitsardhana
arpitsardhana force-pushed the aalgo-272-domain-model/arpsingh branch 2 times, most recently from 21d4a7e to ab2609e Compare June 15, 2026 21:03
Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/types.py Outdated
Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/types.py Outdated
Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/types.py Outdated
Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/types.py Outdated
Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/types.py Outdated
Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/values/evidence.py Outdated
Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/types.py Outdated
@arpitsardhana
arpitsardhana force-pushed the aalgo-272-domain-model/arpsingh branch from ab2609e to 5a4f1de Compare June 15, 2026 23:40

@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/types.py (1)

6-6: ⚡ Quick win

Coding guideline violation: string-based annotations enabled.

from __future__ import annotations converts all type hints to strings at runtime, conflicting with the guideline preferring concrete type hints. If forward references are needed (e.g., AgentEvalTask in its own validator), use quoted strings only where necessary instead of enabling it file-wide.

🤖 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/types.py` at
line 6, Remove the `from __future__ import annotations` import statement at the
top of the file in
packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/types.py, as it
converts all type hints to strings at runtime conflicting with the concrete type
hints guideline. Instead, use quoted string annotations only where necessary for
forward references, such as when the AgentEvalTask class references itself
within validators or other type definitions that would otherwise cause circular
dependency issues.

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/types.py`:
- Line 6: Remove the `from __future__ import annotations` import statement at
the top of the file in
packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/types.py, as it
converts all type hints to strings at runtime conflicting with the concrete type
hints guideline. Instead, use quoted string annotations only where necessary for
forward references, such as when the AgentEvalTask class references itself
within validators or other type definitions that would otherwise cause circular
dependency issues.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 971fd35a-5000-44a2-a447-0a7851337fa0

📥 Commits

Reviewing files that changed from the base of the PR and between ab2609e and 5a4f1de.

⛔ Files ignored due to path filters (4)
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/types.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/values/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/values/evidence.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/values/protocol.py is excluded by !sdk/**
📒 Files selected for processing (5)
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/.README.md.swp
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/types.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/values/__init__.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/values/evidence.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/values/protocol.py
🚧 Files skipped from review as they are similar to previous changes (3)
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/values/protocol.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/values/init.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/values/evidence.py

Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/.README.md.swp Outdated
Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/types.py Outdated
Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/types.py Outdated
Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/types.py Outdated
Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/types.py Outdated
Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/types.py Outdated
Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/types.py Outdated
Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/types.py Outdated
Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/types.py Outdated
@arpitsardhana
arpitsardhana force-pushed the aalgo-272-domain-model/arpsingh branch from 5a4f1de to 2fe5894 Compare June 16, 2026 18:13

@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/results.py`:
- Around line 109-113: The code inconsistently handles the PARTIAL status across
different parts of the pipeline. At lines 109-113, only COMPLETED status is
accepted for numeric values, but at lines 156-161, non-FAILED records (including
PARTIAL) are counted as scored, and at lines 204-208, PARTIAL is also dropped.
Update the condition at line 109 that checks `if score.status ==
AgentEvalScoreStatus.COMPLETED:` to also include PARTIAL status alongside
COMPLETED, so that numeric values are collected consistently. Then verify that
lines 156-161 and 204-208 are consistent with this change to ensure coverage and
aggregate stats agree on the same records.

In `@packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/trials.py`:
- Around line 10-20: There is a bidirectional import cycle where tasks.py
imports AgentTaskRunner from trials.py while trials.py imports
AgentEvalRunConfig and AgentEvalTask from tasks.py under TYPE_CHECKING. Create a
new shared module (e.g., agent_eval/models.py) and move the AgentEvalTask and
AgentEvalRunConfig classes there. Update trials.py to remove the TYPE_CHECKING
import block (lines 15-19) and instead import AgentEvalTask and
AgentEvalRunConfig concretely from the new models module. Update tasks.py
similarly if it also uses TYPE_CHECKING for these imports, so both files can
import concretely without creating circular dependencies.
🪄 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: 0b37dcf3-9bcd-4e93-be29-ab32c104e7be

📥 Commits

Reviewing files that changed from the base of the PR and between 5a4f1de and 2fe5894.

⛔ Files ignored due to path filters (7)
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/results.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/agent_eval/scores.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/agent_eval/trials.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/values/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/values/evidence.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/beta/evaluator/values/protocol.py is excluded by !sdk/**
📒 Files selected for processing (7)
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/results.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/scores.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/tasks.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/trials.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/values/__init__.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/values/evidence.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/values/protocol.py
🚧 Files skipped from review as they are similar to previous changes (3)
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/values/init.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/values/protocol.py
  • packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/values/evidence.py

Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/results.py Outdated
Comment thread packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/trials.py Outdated
@arpitsardhana
arpitsardhana force-pushed the aalgo-272-domain-model/arpsingh branch 2 times, most recently from 3d1af27 to 9587f48 Compare June 16, 2026 19:55
@arpitsardhana
arpitsardhana force-pushed the aalgo-272-domain-model/arpsingh branch from 9587f48 to c4ff314 Compare June 16, 2026 23:04
Introduce the standalone agent-eval domain model described in the
NeMo Evaluator Agent Evaluation design: AgentEvalTask, SemanticView,
ViewSignal, AgentOutput, AgentEvalAttempt (trial), AgentEvalTaskResult,
and summary/coverage value types, plus the shared EvidenceDescriptor,
CandidateEvidence, and LocalFilesystemEvidence types. Extend
CandidateOutput with a candidate.evidence field and the metric protocol
to carry evidence. Mirrored into the vendored nemo_platform beta SDK.

Signed-off-by: Arpit Singh (SW-CLOUD) <arpsingh@nvidia.com>
@arpitsardhana
arpitsardhana force-pushed the aalgo-272-domain-model/arpsingh branch from c4ff314 to 1d5f4d0 Compare June 16, 2026 23:20
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.

3 participants