Skip to content

docs(fern): add evaluation workflow page - #1676

Closed
ritaneves wants to merge 84 commits into
mainfrom
docs/evaluation-page
Closed

ritaneves wants to merge 84 commits into
mainfrom
docs/evaluation-page

Conversation

@ritaneves

Copy link
Copy Markdown
Contributor

Add documentation on Evaluation for https://docs.nvidia.com/nemo/gym/about

@copy-pr-bot

copy-pr-bot Bot commented Jun 23, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@cwing-nvidia cwing-nvidia added the documentation Improvements to documentation label Jun 23, 2026
@ritaneves ritaneves linked an issue Jun 24, 2026 that may be closed by this pull request
@ritaneves
ritaneves force-pushed the docs/evaluation-page branch from 92d7bec to 1a84541 Compare June 24, 2026 07:53
@ritaneves
ritaneves marked this pull request as ready for review June 24, 2026 10:49

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

Thanks for working on this @ritaneves. Added some comments for review.

@ritaneves

Copy link
Copy Markdown
Contributor Author

Hi @sephmard , thank you for the great comments :) If you're happy to approve, I'll close

@ritaneves ritaneves moved this from Dev Todo to Review WIP in NeMo Gym 0.4.0 - July 1 Jun 25, 2026
@ritaneves
ritaneves requested a review from sephmard June 25, 2026 11:36
@ritaneves
ritaneves force-pushed the docs/evaluation-page branch from 20e0e51 to bac5e30 Compare June 25, 2026 14:13

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

Looks great Rita. Two comments:

  1. Suggest moving the Add a benchmark into the Evaluation tab. We can do this as a follow-up, but since this PR is touching a lot. Thought it good to include.
  2. I suggest some light revisions on the BLADE tutorial to clarify more on the analysis tool.

tamohannes and others added 12 commits June 25, 2026 18:07
## Summary

- Add a NeMo-Gym `ns_tools` config that exposes `WikipediaSearchTool`
through the existing NeMo-Skills ToolManager bridge.
- Add a focused config test to keep the resource-server wiring valid.
- This is the Gym-side companion to NVIDIA-NeMo/Skills#1419.

Replaces fork-origin PR #1217 so CI can run with full repository
secrets.

## Test plan

- `PYTHONPATH=. python -m pytest
resources_servers/ns_tools/tests/test_wikipedia_mcp_config.py -q
--tb=short`

---------

Signed-off-by: tamohannes <hovhannes.tamoyan@gmail.com>
Co-authored-by: Christian Munley <cmunley@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
## Summary

- Add a NeMo-Gym `ns_tools` config that exposes `PeriodictableTool`
through the existing NeMo-Skills ToolManager bridge.
- Add a focused config test to keep the resource-server wiring valid.
- This is the Gym-side companion to NVIDIA-NeMo/Skills#1421.

Replaces fork-origin PR #1219 so CI can run with full repository
secrets.

## Test plan

- `PYTHONPATH=. python -m pytest
resources_servers/ns_tools/tests/test_periodictable_mcp_config.py -q
--tb=short`

---------

Signed-off-by: tamohannes <hovhannes.tamoyan@gmail.com>
Co-authored-by: Christian Munley <cmunley@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
## Summary
- Adds automated Claude Code review on PR
`opened`/`reopened`/`ready_for_review`, plus manual re-trigger via
`/claude review` comment
- On-call engineer persona with BLOCKER/RISK/NOTE grading and SHIP/SHIP
WITH CARE/HOLD verdict — modeled on [NeMo-CI-TF-States
#110](NVIDIA-NeMo/NeMo-CI-TF-States#110)
- No preflight job needed — gates directly on `author_association ∈
{OWNER, MEMBER, COLLABORATOR}` using only `ANTHROPIC_API_KEY`

## Test plan
- [ ] Confirm `ANTHROPIC_API_KEY` secret has visibility for this repo in
the NVIDIA-NeMo org
- [ ] Open a test PR and verify `auto-review` job triggers
- [ ] Comment `/claude review` and verify `manual-review` job triggers

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Signed-off-by: Kajal Jain <kajalj@nvidia.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
## Changes

Documents the `use_absolute_ip` global config option on the Fern
**Configuration** reference page
(`fern/versions/latest/pages/reference/configuration.mdx`):

- Adds it to the `env.yaml` example block.
- Adds a short **Multi-Node Configuration** subsection explaining
default (`127.0.0.1`), when to use it (multi-node / Ray clusters), and
its effect (`gethostbyname(gethostname())`).

## Why a fresh PR

This supersedes #595, which documented the same option but targeted
`docs/reference/configuration.md` — a path that no longer exists after
the docs migration to Fern. The option itself is still live
(`nemo_gym/global_config.py`) and was undocumented in the current docs.
Content ported and adapted to the Fern page.

Closes #595

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Signed-off-by: Lawrence Lane <llane@nvidia.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
## Summary

- Add a NeMo-Gym `ns_tools` config that exposes `CoolPropTool` through
the existing NeMo-Skills ToolManager bridge.
- Add a focused config test to keep the resource-server wiring valid.
- This is the Gym-side companion to NVIDIA-NeMo/Skills#1420.

Replaces fork-origin PR #1218 so CI can run with full repository
secrets.

## Test plan

- `PYTHONPATH=. python -m pytest
resources_servers/ns_tools/tests/test_coolprop_mcp_config.py -q
--tb=short`

---------

Signed-off-by: tamohannes <hovhannes.tamoyan@gmail.com>
Co-authored-by: Christian Munley <cmunley@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
## Summary

- Add a NeMo-Gym `ns_tools` config that exposes `ParticleTool` through
the existing NeMo-Skills ToolManager bridge.
- Add a focused config test to keep the resource-server wiring valid.
- This is the Gym-side companion to NVIDIA-NeMo/Skills#1422.

Replaces fork-origin PR #1220 so CI can run with full repository
secrets.

## Test plan

- `PYTHONPATH=. python -m pytest
resources_servers/ns_tools/tests/test_particle_mcp_config.py -q
--tb=short`

---------

Signed-off-by: tamohannes <hovhannes.tamoyan@gmail.com>
Co-authored-by: Christian Munley <cmunley@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
## Summary

- Add a NeMo-Gym `ns_tools` config that exposes `RadioactivedecayTool`
through the existing NeMo-Skills ToolManager bridge.
- Add a focused config test to keep the resource-server wiring valid.
- This is the Gym-side companion to NVIDIA-NeMo/Skills#1423.

Replaces fork-origin PR #1221 so CI can run with full repository
secrets.

## Test plan

- `PYTHONPATH=. python -m pytest
resources_servers/ns_tools/tests/test_radioactivedecay_mcp_config.py -q
--tb=short`

---------

Signed-off-by: tamohannes <hovhannes.tamoyan@gmail.com>
Co-authored-by: Christian Munley <cmunley@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
…1612)

vLLM computes `logprobs = top_logprobs if logprobs else None`, so a
request carrying an explicit `top_logprobs` field makes vLLM return no
logprobs. That empties the captured token ids and silently zeroes the
training loss mask, which freezes RL training with no error.

- Pin `top_logprobs=0` when `return_token_id_information` is set, so
capture is independent of any value inherited from the request or
dataset
- Drop a null `top_logprobs` on the non-capture path before forwarding
- Raise a clear error when capture is requested but vLLM returns no
logprobs, instead of an opaque TypeError or silently empty training data

supersedes #1013

Signed-off-by: Ananth Subramaniam <ansubramania@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
Migrates the SciCode benchmark from nemo-skills into nemo-gym.

**How it works in gym:**
- Architecture - Multi-step: the agent makes one model call per
sub-step, accumulating its own prior-step code as context, then submits
the accumulated solutions to `/verify`. N model calls per problem (N
varies).

- Execution - Resources server runs each sub-step's accumulated code in
a Ray subprocess against ground-truth targets in `test_data.h5`.

- Test data - `test_data.h5` must be staged manually from the official
SciCode Google Drive.

- Reward - Binary per problem (`1.0` iff every sub-step passes), same as
skills' problem-level accuracy.

- Headline metric - `subtask_accuracy` (total sub-steps passed / total)
via `compute_metrics`/`get_key_metrics` override on the agent.
Numerically equal to nemo-skills' `pass@1[avg-of-3]/subtask_accuracy`.

**Test results:**
With ultra mopd/step36 checkpoint:
```
  Key metrics for scicode_benchmark_agent:
  {
      "mean/reward": 0.19583333333333333,
      "mean/num_steps_passed": 1.8875,
      "mean/num_steps_total": 4.225,
      "mean/problem_accuracy": 0.19583333333333333,
      "mean/input_tokens": 3554.2,
      "mean/output_tokens": 5608.7125,
      "mean/total_tokens": 9162.9125,
      "subtask_accuracy": 0.4467455621301775
  }
```
wandb: https://wandb.ai/nvidia/fsiino-gym-dev/runs/3jom33yh

---------

Signed-off-by: Frankie Siino <fsiino@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
Fixes DCO issue in #1537

--

Migrates the CritPt benchmark from nemo-skills into nemo-gym. This keeps
the workflow gym-shaped (per-rollout `reward` flowing through the
standard `/verify` contract).

**How it works in gym:**
- Architecture - Single phase: agent runs per-rollout `/run` ->
`/verify`.

- Batching - Resources server buffers concurrent `verify()` calls until
70 unique `problem_id`s accumulate, then fires once and resolves all 70
awaiting futures with the same aggregate accuracy

- `num_repeats > 1` - Each repeat of a `problem_id` opens a new pending
batch. N repeats -> N independent AA API calls.

- Reward - Same as skills in that the aggregate is distributed to all
batch members as their `reward`.

- Headline metric - `pass@k/accuracy` via `compute_metrics` override.
Numerically equal to nemo-skills' `accuracy` at `num_repeats=1`.

**Test results**:
With ultra mopd/step36 checkpoint:
```
Key metrics for critpt_benchmark_agent:
{
    "mean/reward": 0.05714285714285713,
    "mean/accuracy": 0.05714285714285713,
    "mean/timeout_rate": 0.0,
    "mean/input_tokens": 6107.028571428571,
    "mean/output_tokens": 2514.1857142857143,
    "mean/total_tokens": 8621.214285714286
}
```
wandb: https://wandb.ai/nvidia/fsiino-gym-dev/runs/lle631hq

---------

Signed-off-by: Frankie Siino <fsiino@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
…nt README (#1642)

## Summary

Fixes two CI breakages on `main` introduced by the CritPt benchmark
(#1588). Both fail unit/server CI for any PR once it is merged with
current `main`:

1. **`resources_servers/critpt/configs/critpt.yaml`** referenced
`${artificial_analysis_api_key}` with no definition or default.
`list_benchmarks()` (chained via `benchmarks/critpt/config.yaml`) cannot
resolve it, failing
`tests/unit_tests/test_benchmarks.py::TestListBenchmarks::test_lists_found_benchmarks`
and dropping unit-test coverage below the 96% gate (the errored test
stops covering `benchmarks.py`). Changed to
`${oc.select:artificial_analysis_api_key,null}` so it resolves to `null`
when unset — matching the default-bearing pattern used by sibling
configs (e.g. `labbench2_vlm`'s `${oc.select:judge_api_key,unset}`,
`frontierscience_judge`'s `${oc.env:NVIDIA_API_KEY,null}`). The override
key name is unchanged, so any existing `artificial_analysis_api_key`
config/env override still applies.

2. **`responses_api_agents/critpt_agent`** shipped without a
`README.md`. `ng_test_all` counts it as a candidate module but not a
testable one, failing the total-vs-tested assertion (`Mismatch on the
number of total modules found (120) ... (119)`) on **every**
server-suite shard. Added a `README.md` describing the two-turn agent.

## Testing

- `pytest tests/unit_tests/` → 290 passed; coverage **96.20%** (was
95.87%)
- Module discovery: **120 candidates == 120 testable**
- `critpt` server test is unaffected (it constructs its config directly
with a dummy key and never resolves the YAML interpolation)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Signed-off-by: Lin Jia <linj@nvidia.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
This PR solves issue #1106

---------

Signed-off-by: Marta Stepniewska-Dziubinska <martas@nvidia.com>
Signed-off-by: Lawrence Lane <llane@nvidia.com>
Co-authored-by: Lawrence Lane <llane@nvidia.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
wprazuch and others added 23 commits June 25, 2026 18:15
…(FEP-1025) (#1637)

## What

Replaces the two parallel identifier fields on `DatasetConfig` —
`gitlab_identifier` and `huggingface_identifier` — with a single,
self-describing
discriminated `source:` block:

```yaml
# GitLab
source:
  type: gitlab
  dataset_name: my_dataset
  version: 0.0.1
  artifact_fpath: train.jsonl

# HuggingFace
source:
  type: huggingface
  repo_id: org/dataset
  artifact_fpath: train.jsonl   # optional
```

The `type` discriminator makes it unambiguous which fields apply,
instead of two
optional sibling blocks where only one may be set.

## Backward compatibility

Fully non-breaking — no consumer changes required:

- A **legacy `*_identifier`** is accepted, mirrored into `source`, and
emits a
  `DeprecationWarning`.
- A **`source:`** is back-filled into the matching legacy field, so
existing code
that reads `gitlab_identifier` / `huggingface_identifier` keeps working
unchanged.
- Specifying **both** `source` and a legacy identifier is rejected with
a clear error.
- Specifying **neither** (local `jsonl_fpath` only) remains valid.

## Tests

- `tests/unit_tests/test_dataset_source.py` — 7 cases covering both
backends, the
legacy↔source mirroring (incl. deprecation warning), the both-set
rejection, the
  no-source path, and discriminator validation.
- Updated `test_train_data_utils.py` serialization fixture for the new
`source` field.

Part of the configuration-friction epic (#1205).

---------

Signed-off-by: Wojciech Prazuch <wprazuch@nvidia.com>
Co-authored-by: Ananth Subramaniam <ansubramania@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
…hs (#1205 #8/#12; #1488/#1489/#1490) (#1609)

## What

One coherent fix for the three `config_paths` failure modes, all failing
fast with a **clean message and no traceback**:

| Issue | Bad input | Before | After |
|-------|-----------|--------|-------|
| [#1488](#1488) | typo'd /
missing path | 7-frame `FileNotFoundError` | `Error: config_paths entry
'...' was not found. Looked in: ...` |
| [#1490](#1490) | scalar
instead of list | raw Pydantic `ValidationError` (+pydantic.dev URL) |
`Error: 'config_paths' must be a list of paths ...` |
| [#1489](#1489) | empty /
omitted (zero servers) | Ray starts, hangs until SIGTERM | `Error: No
server instances are configured ...` before Ray |

## How

- New `ConfigError` base in `config_types.py`;
`ConfigPathNotFoundError`, `MalformedConfigPathsError`,
`NoServerInstancesError` (and the existing `ServerRefNotFoundError`)
inherit it. They stay ordinary exceptions, so `ng_validate` (#1599,
`except Exception`) can still catch and format them.
- `load_extra_config_paths` wraps `OmegaConf.load` (#1488); `parse()`
wraps `ta.validate_python` (#1490).
- `raise_on_no_server_instances` (validated server-instance check, not a
raw key count) runs in **`RunHelper.start()`** before `initialize_ray()`
— covers both run and `e2e_rollout_collection` (#1489).
- A CLI decorator `exit_cleanly_on_config_error` converts any
`ConfigError` to a rich-escaped message + `exit 1`, **no traceback**.
Unexpected errors still propagate unchanged.

## Supersedes #1510

Consolidates [#1510](#1510):
typed exceptions `ng_validate` can catch/format (a bare `SystemExit`
would escape it), a validated zero-server check, the guard in `start()`
so `e2e` is covered, and deterministic tests.

## Tests

`test_global_config.py`: path-not-found (both-locations / dedup /
absolute), malformed config_paths, zero-server (raise + pass).
`test_cli.py`: the decorator (ConfigError → clean exit; non-ConfigError
propagates unchanged; success passes through). 67/67
`test_global_config`+`test_cli` pass; ruff + pre-commit clean.

---------

Signed-off-by: Wojciech Prazuch <wprazuch@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
… / M2) (#1635)

## What

The **M2 keystone** — discover environments by name from the CLI:

**1. `nemo_gym/registry.py` (new) — discovery only**
- `discover_environments()` → name → `EnvironmentEntry` for every
[`environments/<name>/config.yaml`](https://github.com/NVIDIA-NeMo/Gym/tree/main/environments)
(name = dir), with `description`/`domain` read **without resolving
interpolations/secrets** (a config referencing an unset key is still
discoverable — no crash).

**2. `gym list environments` (CLI wiring)**
- `list_environments()` in `cli/env.py` renders discovered environments
(name / domain / description) as a table, or `--json` for programmatic
use — matching `gym list benchmarks` / `gym list agents` (#1671).
Registered in the `gym` router; the `list` group is no longer
"benchmarks only".

```
$ gym list environments
┏━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Environment         ┃ Domain ┃ Description                                   ┃
┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ workplace_assistant │ agent  │ Workplace assistant multi-step tool-using env │
└─────────────────────┴────────┴───────────────────────────────────────────────┘
$ gym list environments --json
[{"name": "workplace_assistant", "domain": "agent", "description": "..."}, ...]
```

## Why

Epic [#1205](#1205) friction 8.
Directly answers the reviewer asks for "`gym list` by environment name".
The `environments/` layout was live but unconsumed in code; this
surfaces it in the CLI.

## Alignment with the unified CLI (#1434)

Run-by-**name** for environments is already provided by the unified
CLI's generic **`--environment`** asset selector (on `gym env start` /
`gym eval run`, with `--search-dir` and `name/flavor` support). So this
registry is intentionally **discovery-only** — an earlier
`resolve_environment_config_paths` was removed as a duplicate of that
selector. `gym list environments` is the piece the asset selectors don't
provide.

## Tests

`test_registry.py` (discovery: name/metadata, missing dir, malformed
YAML tolerance, unset-secret tolerance, real-repo discovery) +
`test_cli.py` / `test_cli_main.py` (`list_environments` table / empty /
`--json` output + router dispatch incl. `--json`). Smoke-tested `gym
list environments [--json]` end-to-end. ruff + pre-commit clean.

---------

Signed-off-by: Wojciech Prazuch <wprazuch@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
… core) (#1671)

## What

Adds `nemo_gym.agent_registry` + the **`gym list agents`** command — the
foundation for RFC **M3 / friction 6** ("every agent×environment
combination requires a separate config"). Maps an agent's short `<name>`
(directory under `responses_api_agents/`) to its config variant(s) and
classifies how each harness composes.

## `gym list agents` (CLI)

Lists every discovered agent and its composition pattern — the one thing
the unified CLI's generic `--<asset>` selectors can't surface. Table +
`--json`, mirroring `gym list benchmarks` / `gym list environments`
(#1635).

```
$ gym list agents
  agent           composition          variants                     description
  simple_agent    composable (A)       simple_agent
  swe_agents      self-contained (B)   swebench_openhands, ...      Software engineering tasks ...
  ...
```
Across the repo: **23 agents — 15 Pattern A (composable), 8 Pattern B
(self-contained).**

## API
- `discover_agents() -> Dict[str, AgentEntry]` — one entry per agent
dir; `AgentEntry(name, path, config_paths, self_contained, description)`
with a `.variants` map (variant stem → config).
- `resolve_agent_config_path(name, variant=None, *,
require_composable=False) -> str` — explicit variant wins; a single
config is used directly; a variant named after the agent is the default
when several exist; otherwise raises. The run-by-name primitive consumed
by the composer (#1673).
- Errors: `AgentNotFoundError` (did-you-mean), `AgentVariantError`
(zero-config / ambiguous), `AgentNotComposableError` (for the composer's
`require_composable` guard).

## Composition classification (`self_contained`)
- **Pattern A (`self_contained=False`):** references a *separate*
`resources_server` → wireable into a compatible environment (e.g.
`simple_agent`, `langgraph_agent`). Which harness↔resources-server
pairings are actually compatible is the **composer's** concern, not the
registry's.
- **Pattern B (`self_contained=True`):** bundles its own
environment/framework or external LLM loop (`agent_framework`; e.g.
`swe_agents`, `harbor_agent`, `verifiers_agent`, `claude_code_agent`)
and runs with its own config. `require_composable=True` rejects these
with a clear error.
- Non-agent YAML in a `configs/` dir is filtered out; zero-config agents
(e.g. `aviary_agent`) are still discovered (their wiring lives in a
paired benchmark/resources config). Resolution-safe (`resolve=False,
throw_on_missing=False`; never starts servers), so it works with unset
secrets.

> Reflects @cmunley1's review: classification reframed around Pattern A
vs self-contained B, field renamed `composable`→`self_contained`, and
cross-pattern compatibility documented as the composer's job (separate
commit, history preserved).

## Tests
`test_agent_registry.py` (21 cases — A/B classification,
external-harness carve-out, zero-config, variant selection,
did-you-mean, `require_composable`) + `test_cli_agents.py` /
`test_cli_main.py` (`gym list agents` table / empty / `--json` / router
dispatch).

Part of epic #1205 (M3 / friction 6).

---------

Signed-off-by: Wojciech Prazuch <wprazuch@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
Signed-off-by: Rita Fernandes Neves <rfernandesne@nvidia.com>
@ritaneves
ritaneves force-pushed the docs/evaluation-page branch from fd3343c to bbafeb0 Compare June 25, 2026 17:30
@ritaneves
ritaneves requested a review from a team as a code owner June 25, 2026 17:30
@ritaneves ritaneves closed this Jun 25, 2026
@github-project-automation github-project-automation Bot moved this from Review WIP to Done in NeMo Gym 0.4.0 - July 1 Jun 25, 2026
@ritaneves

Copy link
Copy Markdown
Contributor Author

This rebasing cost me too much, I will open this somewhere else

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements to documentation

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

Epic: Documentation for v0.4.0 release