> 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

Run-metadata exporters.

`setup_exporters` opens one exporter per configured backend during global config resolution; call
sites then fan out through the module-level `export_*` helpers.

A backend's module — and with it a multi-hundred-millisecond tracking SDK import — is loaded only
once its config says it is wired up. That is why the registry pairs each backend with a config
model from `config_types` rather than asking the exporter class whether it is available.

## Submodules

* **[`nemo_gym.exporters.base`](/nemo-gym/nemo_gym/exporters/base)**
* **[`nemo_gym.exporters.mlflow`](/nemo-gym/nemo_gym/exporters/mlflow)**
* **[`nemo_gym.exporters.wandb`](/nemo-gym/nemo_gym/exporters/wandb)**

## Package Contents

### Functions

| Name                                                               | Description                                                                  |
| ------------------------------------------------------------------ | ---------------------------------------------------------------------------- |
| [`_load_exporter_class`](#nemo_gym-exporters-_load_exporter_class) | -                                                                            |
| [`export_metrics`](#nemo_gym-exporters-export_metrics)             | -                                                                            |
| [`export_rollouts`](#nemo_gym-exporters-export_rollouts)           | -                                                                            |
| [`get_exporters`](#nemo_gym-exporters-get_exporters)               | The exporters opened for this process. Empty when no backend is configured.  |
| [`setup_exporters`](#nemo_gym-exporters-setup_exporters)           | Open every backend that is fully configured, and log the run config to each. |
| [`teardown_exporters`](#nemo_gym-exporters-teardown_exporters)     | Close all open exporters. Safe to call repeatedly and when none are open.    |

### Data

[`EXPORTER_REGISTRY`](#nemo_gym-exporters-EXPORTER_REGISTRY)

[`_EXPORTERS`](#nemo_gym-exporters-_EXPORTERS)

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

### API

```python
nemo_gym.exporters._load_exporter_class(
    class_path: str
) -> type[nemo_gym.exporters.base.BaseExporter]
```

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

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

```python
nemo_gym.exporters.get_exporters() -> list[nemo_gym.exporters.base.BaseExporter]
```

The exporters opened for this process. Empty when no backend is configured.

```python
nemo_gym.exporters.setup_exporters(
    global_config_dict: omegaconf.DictConfig
) -> list[nemo_gym.exporters.base.BaseExporter]
```

Open every backend that is fully configured, and log the run config to each.

Replaces any previously opened exporters. A backend that fails to start is skipped with a
warning: telemetry must not take the run down with it.

```python
nemo_gym.exporters.teardown_exporters() -> None
```

Close all open exporters. Safe to call repeatedly and when none are open.

```python
nemo_gym.exporters.EXPORTER_REGISTRY: dict[str, tuple[type[ExporterConfig], str]] = {'wandb': (WANDBConfig, 'nemo_gym.exporters.wandb:WandbExporter'), 'mlflow': (ML...
```

```python
nemo_gym.exporters._EXPORTERS: list[BaseExporter] = []
```

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