Agent Evaluation
Agent evaluation is the task-driven shape of NeMo Evaluator (see Dataset-Driven vs Task-Driven Evaluation for how it compares to metrics). You define tasks, an agent performs each one, and you score the resulting trial — not just whether the final answer is right, but how the agent got there. Each task carries its own metrics, so a single suite can grade heterogeneous work.
Local interfaces and durable platform interfaces are available.
- Use
await AgentEvaluator().run(tasks=..., target=...)for local task-driven SDK runs that do not require running nemo-platform. - Use the Evaluator plugin’s
uv run nemo evaluator agent-evaluate submitjob for durable runs with inline tasks or stored tasksets. The high-levelclient.evaluator.submitinterface above remains dataset-driven only.
The model
One run flows through five pieces:
Task → (runner) → Trial → (metrics) → Scores → Result
- Task (
AgentEvalTask) — the unit of work. Its fields:intent— a human-readable description of the goal; metadata for the suite’s authors, not shown to the agent.inputs— the instruction and anything the agent starts from (what the agent actually sees).reference(optional) — grader-only, held-out ground truth the agent never sees.metrics— the scorers for this task.views(optional) — combine several of the task’s metric outputs into one named, reported score (see Score by component under Key properties).
- Runner (
AgentTaskRunner) — performs each task and returns trials through one small interface,run_tasks(tasks) -> [AgentEvalTrial]. The SDK ships runners for a plain async callable, a deployed agent over HTTP, and container/harness backends; you can supply your own. Scoring never depends on which runner produced a trial. - Trial (
AgentEvalTrial) — the durable record of one attempt: the agent’s finaloutput, theevidenceit produced (an ATIF trace of steps and tool calls or OTLP resource spans, final filesystem state, logs), astatus(completed/partial/failed), and arbitrary metadata. The trial — not the runner — is what gets scored, and it can be re-scored offline later. - Metrics (
Metric) — each task’s metrics score its trials throughcompute_scores(input) -> MetricResult. A metric can read the final output and the evidence, so it can grade the outcome (did it answer correctly?) or the trajectory (did it use the expected tool?). - Result (
AgentEvaluator→AgentEvalResult) — the evaluator orchestrates the run and returns the trials, per-trial scores, and an aggregatedsummary. Point it at an output directory and it also writes a run bundle:run.json,trials.jsonl,scores.jsonl,summary.json, and a browsablereport.html.
A minimal example
Conceptual — for a runnable, end-to-end version see the quickstart (coming in this section).
Key properties
- Runner-agnostic scoring. The scorer only ever sees an
AgentEvalTrial, so the same tasks and metrics score any runner’s output — or previously stored trials re-scored offline. - Per-task metrics. Metrics are attached to each task, not once for the whole run, so a suite can grade heterogeneous work (docs, Q&A, tests, net-new code) each with the checks that fit it.
- Score by component. A single run can score at several levels:
- the task outcome — the final answer;
- the trajectory — how the agent worked (its tool use and steps);
- views — named roll-ups you define on a task that combine two or more of its metric outputs into one reported score (for example, averaging an accuracy metric and a tool-use metric into a single
qualityscore); - the run-level aggregate — results also roll up across the whole run.
- Runs locally or durably. A local run can produce the full bundle,
including
report.html, without platform services. Use the plugin’sagent-evaluatejob when the task suite needs durable platform execution and persisted result metadata. - Measurement, not decisions. The evaluator produces scores, aggregates, and provenance — it doesn’t decide pass/fail, gate a release, or compare runs. Those decisions belong to whatever consumes the results.
Targets
An evaluation target is what performs the tasks:
- a
Model— a chat/completions endpoint; - a deployed
Agentreachable over HTTP — aGenericAgent(any JSON endpoint) or aNemoAgentToolkitAgent; - a custom runner (
AgentTaskRunner) — anything that can turn tasks into trials.
See Evaluate a Deployed Agent over HTTP for how to describe an HTTP agent target.
In this section
- Quickstart — evaluate an agent end to end in a local process, no services required.
- Evaluate a Deployed Agent over HTTP — point a run at an agent behind an HTTP endpoint.
- Evaluate a Harbor Task Suite — run an existing Harbor dataset in Docker and score its verifier reward.
- Score by Component — score the trajectory (not just the answer) and roll metrics into a named view.
- Targets and Runners — reference for what a run can point at.
- Writing Metrics — reference for the
Metricprotocol. - Reading Results — what a run returns and the on-disk bundle it writes.