> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/nemo/gym/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/nemo/gym/_mcp/server.

# nemo_gym.exporters.base

## Module Contents

### Classes

| Name                                                    | Description                                                                    |
| ------------------------------------------------------- | ------------------------------------------------------------------------------ |
| [`BaseExporter`](#nemo_gym-exporters-base-BaseExporter) | Sink for the run metadata a NeMo Gym eval produces: config, metrics, rollouts. |

### Data

[`logger`](#nemo_gym-exporters-base-logger)

### API

```python
class nemo_gym.exporters.base.BaseExporter(
    global_config_dict: omegaconf.DictConfig
)
```

Abstract

Sink for the run metadata a NeMo Gym eval produces: config, metrics, rollouts.

A backend (W\&B, MLflow, ...) subclasses this and wraps its own run handle. Lifecycle is
`setup` -> any number of `log_*` calls -> `teardown`. Whether a backend runs at all is decided
by its `ExporterConfig` in the registry, not here.

Exporters are best-effort telemetry: a failing tracking server must not fail the eval. Call
sites go through the `export_*` wrappers, which swallow and log backend exceptions. Subclasses
implement the unwrapped `_*` hooks and may raise freely.

**`name`** `str`

---

```python
nemo_gym.exporters.base.BaseExporter.__enter__() -> nemo_gym.exporters.base.BaseExporter
```

```python
nemo_gym.exporters.base.BaseExporter.__exit__(
    exc_type,
    exc_value,
    traceback
) -> None
```

```python
nemo_gym.exporters.base.BaseExporter._guard(
    what: str,
    fn,
    args = ()
) -> None
```

```python
nemo_gym.exporters.base.BaseExporter._log_config(
    config_dict: omegaconf.DictConfig
) -> None
```

abstract

Record the resolved run config. Secrets are already masked by `export_config`.

```python
nemo_gym.exporters.base.BaseExporter._log_metrics(
    metrics: dict[str, typing.Any],
    step: typing.Optional[int] = None
) -> None
```

abstract

Record scalar metrics. `step` is the training step, or None for a one-shot eval.

```python
nemo_gym.exporters.base.BaseExporter._log_rollouts(
    rollouts: list[dict[str, typing.Any]]
) -> None
```

abstract

Record rollout results as a table. Rollouts are sanitized dicts, one per rollout.

```python
nemo_gym.exporters.base.BaseExporter.export_config() -> None
```

```python
nemo_gym.exporters.base.BaseExporter.export_metrics(
    metrics: dict[str, typing.Any],
    step: typing.Optional[int] = None
) -> None
```

```python
nemo_gym.exporters.base.BaseExporter.export_rollouts(
    rollouts: list[dict[str, typing.Any]]
) -> None
```

```python
nemo_gym.exporters.base.BaseExporter.setup() -> None
```

abstract

Open the backing run. Called once, after config resolution.

```python
nemo_gym.exporters.base.BaseExporter.teardown() -> None
```

abstract

Close the backing run. Must be safe to call when `setup` failed or never ran.

```python
nemo_gym.exporters.base.logger = logging.getLogger(__name__)
```