Skip to content

feat(evaluator): add GymRunnerTarget plugin wiring and Studio rendering - #1257

Merged
JashG merged 5 commits into
mainfrom
jgulabrai/gym-runner-plugin-with-studio
Aug 13, 2026
Merged

feat(evaluator): add GymRunnerTarget plugin wiring and Studio rendering#1257
JashG merged 5 commits into
mainfrom
jgulabrai/gym-runner-plugin-with-studio

Conversation

@JashG

@JashG JashG commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Summary

  1. Adds GymRunnerTarget to the evaluator plugin so Gym evals can run as governed platform jobs with result persistence and Intake publication.
  2. Updated Studio to display runner.gym.* scores in a separate "Runner Scores" section on the Evaluation Details page.

Related Issue

  • Closes AALGO-436
  • Closes AALGO-488
  • Closes AALGO-486 by enabling the existing generic Intake publication flow for GymRunnerTarget via target_agent_identity. Before this PR, submitting a Gym job with publication.intake would fail at spec validation because the agent name could not be derived from the target.

Changes

Backend:

  • Add GymRunnerTarget DTO following the same pattern as HarborRunnerTarget; its fields mirror GymRuntimeConfig 1:1 and _resolve_target maps them onto GymAgentTaskRunner.
  • Fix _to_runtime_task to round-trip Gym-specific task data through the plugin's string-only metadata serialization.

Frontend: Add disableScoreColoring prop to EvalAggregateScoresTable and use it to render runner.* scores in a separate "Runner Scores" section with gray badges.

Type of Change

  • Code change (feature, bug fix, or refactor)

Quality Gates

  • Tests added or updated for changed behavior
  • Documentation not applicable — internal plugin wiring and Studio rendering with no user-facing docs surface

Verification

  • Pull request title follows the repository's Conventional Commit format
  • Every commit includes an appropriate Signed-off-by: trailer
  • uv run pre-commit run -a passes, or any blocked checks are identified below
  • Targeted tests pass, or tests are marked not applicable above
  • No secrets, API keys, or credentials are included

Targeted validation:

End-to-end (AALGO-436 + AALGO-488):

  1. Submitted a Gym eval job via nemo evaluator agent-evaluate submit with GymRunnerTarget dataset (5 questions, simple_agent, llama-3.1-8b-instruct via NVIDIA Build).
  2. Verified job moved from created → active → completed. Results visible in Studio under Runner Scores table:
Screenshot 2026-08-12 at 1 21 25 PM

End-to-end (AALGO-486):

  1. Resubmitted with publication.intake set to a pre-existing Evaluation (gym-mcqa-eval).
  2. Verified spans appear in Intake, one per task, all linked to gym-mcqa-eval via
nemo intake spans list --filter.evaluation-id gym-mcqa-eval --mode preview --workspace default --output-format json
  1. Another example: Evaluator score queryable per session
nemo intake evaluator-results list \
  --filter.session-id "agent-eval-20260812161911-a1142c3a:4b6fe932dcf61efc52408508ae535b6af1168b805ca4a8b7588cf5887e7b4ced:0" \
  --workspace default

Summary by CodeRabbit

  • New Features

    • Added support for Gym-based evaluation targets, including configurable agents, environments, resources, retries, timeouts, and rewards.
    • Evaluation details now display native and runner scores in separate sections.
    • Added an option to display score badges without score-based coloring.
  • Bug Fixes

    • Improved evaluation detail handling when only runner metrics are available or no runner metrics exist.
  • Tests

    • Added coverage for Gym target execution, persistence, publication, and evaluation score display.

JashG added 2 commits August 12, 2026 12:38
Signed-off-by: Jash Gulabrai <jgulabrai@nvidia.com>
Signed-off-by: Jash Gulabrai <jgulabrai@nvidia.com>
@github-actions github-actions Bot added the feat label Aug 12, 2026
@JashG
JashG marked this pull request as ready for review August 12, 2026 17:26
@JashG
JashG requested review from a team as code owners August 12, 2026 17:26
@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

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: f216c1a5-37d8-497f-9b00-f658eed323d3

📥 Commits

Reviewing files that changed from the base of the PR and between 2c9351b and a8a0b1f.

📒 Files selected for processing (1)
  • plugins/nemo-evaluator/tests/test_agent_evaluate.py
🚧 Files skipped from review as they are similar to previous changes (1)
  • plugins/nemo-evaluator/tests/test_agent_evaluate.py

📝 Walkthrough

Walkthrough

The PR adds GymRunnerTarget support across evaluator schemas, runtime resolution, publication, and result persistence. Studio separates runner scores from native scores and renders runner scores without score-based coloring.

Changes

Gym evaluation support

Layer / File(s) Summary
Gym target contract
plugins/nemo-evaluator/openapi/openapi.yaml, plugins/nemo-evaluator/src/nemo_evaluator/jobs/agent_spec.py
Defines GymRunnerTarget fields and adds it to supported agent target types.
Gym runtime resolution
plugins/nemo-evaluator/src/nemo_evaluator/jobs/agent_evaluate.py, plugins/nemo-evaluator/tests/test_agent_evaluate.py
Builds GymRuntimeConfig, returns GymAgentTaskRunner, and verifies forwarded settings.
Publication and result persistence
plugins/nemo-evaluator/src/nemo_evaluator/jobs/{agent_spec.py,result_persistence.py}, plugins/nemo-evaluator/tests/jobs/*
Publishes the configured Gym agent name and persists Gym targets with kind "gym".
Runner score display
web/packages/studio/src/components/evaluation/EvalAggregateScoresTable.tsx, web/packages/studio/src/routes/agents/AgentEvaluationsRoute/*
Separates runner.* scores, renders them in a dedicated section, and disables score coloring for runner scores. Tests cover native-only and mixed results.

Sequence Diagram(s)

sequenceDiagram
  participant AgentEvalSpec
  participant agent_evaluate
  participant GymAgentTaskRunner
  AgentEvalSpec->>agent_evaluate: Provide GymRunnerTarget
  agent_evaluate->>GymAgentTaskRunner: Create GymRuntimeConfig
  GymAgentTaskRunner-->>agent_evaluate: Return configured runner
Loading

Possibly related PRs

Suggested labels: test

Suggested reviewers: sandychapman, ngoncharenko, arpitsardhana

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the two primary changes: GymRunnerTarget evaluator integration and Studio score rendering.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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 docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jgulabrai/gym-runner-plugin-with-studio

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.

🧹 Nitpick comments (1)
web/packages/studio/src/routes/agents/AgentEvaluationsRoute/AgentEvaluationDetailRoute.test.tsx (1)

87-127: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add a runner-only result test.

Current fixtures always include a native score when runner scores exist. Add a runner-only fixture. Assert the native empty message and the gray runner badge. This verifies both changed branches.

🤖 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
`@web/packages/studio/src/routes/agents/AgentEvaluationsRoute/AgentEvaluationDetailRoute.test.tsx`
around lines 87 - 127, The existing evaluation tests only cover runner scores
alongside a native score; add a runner-only fixture in the test around
renderDetail and the agent-evaluation result request. Assert that the native
section displays its empty-state message and that the runner section shows the
gray runner badge, while preserving the existing runner metric assertions.
🤖 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
`@web/packages/studio/src/routes/agents/AgentEvaluationsRoute/AgentEvaluationDetailRoute.test.tsx`:
- Around line 87-127: The existing evaluation tests only cover runner scores
alongside a native score; add a runner-only fixture in the test around
renderDetail and the agent-evaluation result request. Assert that the native
section displays its empty-state message and that the runner section shows the
gray runner badge, while preserving the existing runner metric assertions.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: bc93b92e-ba78-4327-9db7-229b437ae68d

📥 Commits

Reviewing files that changed from the base of the PR and between d4b8171 and f04ef3b.

📒 Files selected for processing (10)
  • plugins/nemo-evaluator/openapi/openapi.yaml
  • plugins/nemo-evaluator/src/nemo_evaluator/jobs/agent_evaluate.py
  • plugins/nemo-evaluator/src/nemo_evaluator/jobs/agent_spec.py
  • plugins/nemo-evaluator/src/nemo_evaluator/jobs/result_persistence.py
  • plugins/nemo-evaluator/tests/jobs/test_publication.py
  • plugins/nemo-evaluator/tests/test_agent_evaluate.py
  • plugins/nemo-evaluator/tests/test_result_persistence.py
  • web/packages/studio/src/components/evaluation/EvalAggregateScoresTable.tsx
  • web/packages/studio/src/routes/agents/AgentEvaluationsRoute/AgentEvaluationDetailRoute.test.tsx
  • web/packages/studio/src/routes/agents/AgentEvaluationsRoute/AgentEvaluationDetailRoute.tsx

@github-actions

github-actions Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor
Suite Lines Covered Line Rate Branch Rate
Unit Tests 32020/40717 78.6% 63.4%
Integration Tests 18567/38643 48.0% 20.8%

JashG added 3 commits August 12, 2026 13:56
Signed-off-by: Jash Gulabrai <jgulabrai@nvidia.com>
Signed-off-by: Jash Gulabrai <jgulabrai@nvidia.com>
Signed-off-by: Jash Gulabrai <jgulabrai@nvidia.com>

@SandyChapman SandyChapman 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.

This looks good to me!

@JashG
JashG added this pull request to the merge queue Aug 12, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Aug 12, 2026
@JashG
JashG added this pull request to the merge queue Aug 12, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Aug 12, 2026
@JashG
JashG added this pull request to the merge queue Aug 13, 2026
Merged via the queue into main with commit c2383c7 Aug 13, 2026
57 checks passed
@JashG
JashG deleted the jgulabrai/gym-runner-plugin-with-studio branch August 13, 2026 02: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.

2 participants