> 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.sandbox.providers.registry

Provider registration utilities.

Providers can be made available three ways, in lookup precedence order:

1. `register_provider(name, cls)` — explicit in-process registration.
2. Built-in loaders shipped with NeMo Gym (e.g. `opensandbox`).
3. Python entry points in the `nemo_gym.sandbox_providers` group, so a separate
   package can publish a provider that becomes available on install. Declare one
   in that package's `pyproject.toml`::

   \[project.entry-points."nemo\_gym.sandbox\_providers"]
   my\_provider = "my\_pkg.provider:MyProvider"

On name collisions: two entry points sharing a name raise (selection would be
nondeterministic); an entry point shadowed by a higher-precedence built-in or
registered provider is warned and ignored.

## Module Contents

### Functions

| Name                                                                                            | Description                                                          |
| ----------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- |
| [`_entry_point_dist_name`](#nemo_gym-sandbox-providers-registry-_entry_point_dist_name)         | -                                                                    |
| [`_entry_point_loaders`](#nemo_gym-sandbox-providers-registry-_entry_point_loaders)             | Discover provider loaders from installed entry points (cached).      |
| [`_load_apptainer_provider`](#nemo_gym-sandbox-providers-registry-_load_apptainer_provider)     | -                                                                    |
| [`_load_opensandbox_provider`](#nemo_gym-sandbox-providers-registry-_load_opensandbox_provider) | -                                                                    |
| [`create_provider`](#nemo_gym-sandbox-providers-registry-create_provider)                       | Instantiate a provider from a single-key provider config.            |
| [`get_provider_class`](#nemo_gym-sandbox-providers-registry-get_provider_class)                 | Return a provider class by name (explicit > built-in > entry point). |
| [`list_providers`](#nemo_gym-sandbox-providers-registry-list_providers)                         | List available provider names from all sources.                      |
| [`register_provider`](#nemo_gym-sandbox-providers-registry-register_provider)                   | Register a sandbox provider class.                                   |

### Data

[`ENTRY_POINT_GROUP`](#nemo_gym-sandbox-providers-registry-ENTRY_POINT_GROUP)

[`LOGGER`](#nemo_gym-sandbox-providers-registry-LOGGER)

[`ProviderClass`](#nemo_gym-sandbox-providers-registry-ProviderClass)

[`ProviderLoader`](#nemo_gym-sandbox-providers-registry-ProviderLoader)

[`_BUILTIN_PROVIDER_LOADERS`](#nemo_gym-sandbox-providers-registry-_BUILTIN_PROVIDER_LOADERS)

[`_ENTRY_POINT_LOADERS`](#nemo_gym-sandbox-providers-registry-_ENTRY_POINT_LOADERS)

[`_PROVIDER_REGISTRY`](#nemo_gym-sandbox-providers-registry-_PROVIDER_REGISTRY)

### API

```python
nemo_gym.sandbox.providers.registry._entry_point_dist_name(
    ep: importlib.metadata.EntryPoint
) -> str
```

```python
nemo_gym.sandbox.providers.registry._entry_point_loaders() -> dict[str, nemo_gym.sandbox.providers.registry.ProviderLoader]
```

Discover provider loaders from installed entry points (cached).

Raises if two distributions publish the same provider name, since lookup
would otherwise pick one nondeterministically. Warns when an entry point is
shadowed by a built-in or explicitly registered provider of the same name.

```python
nemo_gym.sandbox.providers.registry._load_apptainer_provider() -> nemo_gym.sandbox.providers.registry.ProviderClass
```

```python
nemo_gym.sandbox.providers.registry._load_opensandbox_provider() -> nemo_gym.sandbox.providers.registry.ProviderClass
```

```python
nemo_gym.sandbox.providers.registry.create_provider(
    config: collections.abc.Mapping[str, typing.Any]
) -> nemo_gym.sandbox.providers.base.SandboxProvider
```

Instantiate a provider from a single-key provider config.

```python
nemo_gym.sandbox.providers.registry.get_provider_class(
    name: str
) -> nemo_gym.sandbox.providers.registry.ProviderClass
```

Return a provider class by name (explicit > built-in > entry point).

```python
nemo_gym.sandbox.providers.registry.list_providers() -> list[str]
```

List available provider names from all sources.

```python
nemo_gym.sandbox.providers.registry.register_provider(
    name: str,
    provider_class: nemo_gym.sandbox.providers.registry.ProviderClass,
    override: bool = False
) -> None
```

Register a sandbox provider class.

```python
nemo_gym.sandbox.providers.registry.ENTRY_POINT_GROUP = 'nemo_gym.sandbox_providers'
```

```python
nemo_gym.sandbox.providers.registry.LOGGER = logging.getLogger(__name__)
```

```python
nemo_gym.sandbox.providers.registry.ProviderClass: TypeAlias = type[SandboxProvider]
```

```python
nemo_gym.sandbox.providers.registry.ProviderLoader: TypeAlias = Callable[[], ProviderClass]
```

```python
nemo_gym.sandbox.providers.registry._BUILTIN_PROVIDER_LOADERS: dict[str, ProviderLoader] = {}
```

```python
nemo_gym.sandbox.providers.registry._ENTRY_POINT_LOADERS: dict[str, ProviderLoader] | None = None
```

```python
nemo_gym.sandbox.providers.registry._PROVIDER_REGISTRY: dict[str, ProviderClass] = {}
```