Skip to navigation

nemo_gym.environment.registry

View as Markdown

Read-only catalog for manifest-backed and legacy environments and benchmarks.

Module Contents

Classes

NameDescription
EnvironmentCatalogEntryA discovered runnable unit and its lightweight catalog metadata.
EnvironmentEntryA discovered environment: its name, where it lives, and lightweight metadata.
RegistryErrorA catalog entry is invalid or cannot be selected unambiguously.

Functions

NameDescription
_discover_environments_in_dirMap environment name to its effective manifest or legacy entry under one directory.
_discover_registry_treeDiscover one catalog tree without importing or resolving runnable components.
_discover_resource_workloadsDiscover legacy runnable workloads colocated with resources servers.
_enum_value-
_legacy_config_paths-
_legacy_entry-
_manifest_entry-
_manifest_pathsEvery manifest.yaml under tree_dir, without descending into Harbor datasets.
_path_identity-
_resource_workload_identity-
_runnable_resource_configRead a resource-tree config that carries its own runnable workload.
discover_environment_catalogDiscover manifest and legacy runnable units across all workload locations.
discover_environmentsDiscover environments with standard component-root precedence.
read_environment_detailsDeep-parse an environment config for the gym list environments <name> inspect view.
resolve_catalog_entryResolve a catalog name, requiring its kind only for a cross-kind collision.

Data

BENCHMARKS_SUBDIR

CatalogKind

CatalogStatus

ENVIRONMENTS_DIR

ENVIRONMENTS_SUBDIR

ENVIRONMENT_CONFIG_FILENAME

HARBOR_DATASET_MANIFEST

RESOURCES_SERVERS_SUBDIR

API

class nemo_gym.environment.registry.EnvironmentCatalogEntry(
name: str,
config_path: pathlib.Path,
path: pathlib.Path,
description: typing.Optional[str] = None,
domain: typing.Optional[str] = None,
status: typing.Optional[nemo_gym.environment.registry.CatalogStatus] = 'no-manifest',
manifest_path: typing.Optional[pathlib.Path] = None,
version: typing.Optional[str] = None,
integration_profile: typing.Optional[str] = None,
modality: typing.Optional[str] = None,
licensing: typing.Optional[str] = None,
lifecycle: typing.Optional[str] = None,
resources_server_selector: typing.Optional[str] = None
)
Dataclass

A discovered runnable unit and its lightweight catalog metadata.

config_path
Path
description
Optional[str] = None
domain
Optional[str] = None
integration_profile
Optional[str] = None
kind
CatalogKind = 'environment'
licensing
Optional[str] = None
lifecycle
Optional[str] = None
manifest_path
Optional[Path] = None
modality
Optional[str] = None
name
str
path
Path
resources_server_selector
Optional[str] = None
status
Optional[CatalogStatus] = 'no-manifest'
version
Optional[str] = None
class nemo_gym.environment.registry.EnvironmentEntry(
name: str,
config_path: pathlib.Path,
path: pathlib.Path,
description: typing.Optional[str] = None,
domain: typing.Optional[str] = None,
status: typing.Optional[nemo_gym.environment.registry.CatalogStatus] = 'no-manifest',
manifest_path: typing.Optional[pathlib.Path] = None,
version: typing.Optional[str] = None,
integration_profile: typing.Optional[str] = None,
modality: typing.Optional[str] = None,
licensing: typing.Optional[str] = None,
lifecycle: typing.Optional[str] = None,
resources_server_selector: typing.Optional[str] = None
)
Dataclass

Bases: EnvironmentCatalogEntry

A discovered environment: its name, where it lives, and lightweight metadata.

kind
CatalogKind = field(default='environment', init=False)
class nemo_gym.environment.registry.RegistryError()

Bases: ConfigError

A catalog entry is invalid or cannot be selected unambiguously.

nemo_gym.environment.registry._discover_environments_in_dir(
environments_dir: pathlib.Path

Map environment name to its effective manifest or legacy entry under one directory.

nemo_gym.environment.registry._discover_registry_tree(
tree_dir: pathlib.Path,
claimed: frozenset[tuple[nemo_gym.environment.registry.CatalogKind, str]] = frozenset()

Discover one catalog tree without importing or resolving runnable components.

nemo_gym.environment.registry._discover_resource_workloads(
resources_dir: pathlib.Path,
claimed: frozenset[tuple[nemo_gym.environment.registry.CatalogKind, str]] = frozenset()

Discover legacy runnable workloads colocated with resources servers.

nemo_gym.environment.registry._enum_value(
value: object
) -> typing.Optional[str]
nemo_gym.environment.registry._legacy_config_paths(
tree_dir: pathlib.Path,
) -> typing.Iterable[tuple[str, pathlib.Path]]
nemo_gym.environment.registry._legacy_entry(
name: str,
config_path: pathlib.Path,
nemo_gym.environment.registry._manifest_entry(
tree_dir: pathlib.Path,
manifest_path: pathlib.Path,
nemo_gym.environment.registry._manifest_paths(
tree_dir: pathlib.Path
) -> typing.List[pathlib.Path]

Every manifest.yaml under tree_dir, without descending into Harbor datasets.

A fetched dataset (nemo_gym.data.tasks.harbor.hub.fetch_ref) lands under environments/harbor/ with a Harbor manifest.toml at its root and hundreds of task folders below. Those folders are data, not catalog entries, so the walk stops at any folder holding that file instead of scanning every task. The folder itself is still read: a local dataset registered by a manifest.yaml at its root gets the same manifest.toml the first time it is prepared (nemo_gym.data.tasks.harbor.manifest.check_manifest) and stays a catalog entry.

Hidden folders are skipped at every depth, as recursive task discovery skips them (nemo_gym.data.tasks.harbor.task.discover_tasks): the fetch stages its clone, a copy of every task, in a hidden .nemo-gym-harbor-* folder inside the dataset folder, and a first fetch killed mid-clone leaves it there before the manifest.toml that would stop the walk above it is written.

nemo_gym.environment.registry._path_identity(
tree_dir: pathlib.Path,
manifest_path: pathlib.Path
) -> str
nemo_gym.environment.registry._resource_workload_identity(
resources_dir: pathlib.Path,
config_path: pathlib.Path
) -> tuple[str, str]
nemo_gym.environment.registry._runnable_resource_config(
config_path: pathlib.Path
) -> tuple[nemo_gym.environment.registry.CatalogKind, typing.Optional[str], typing.Optional[str]] | None

Read a resource-tree config that carries its own runnable workload.

nemo_gym.environment.registry.discover_environment_catalog() -> tuple[nemo_gym.environment.registry.EnvironmentCatalogEntry, ...]

Discover manifest and legacy runnable units across all workload locations.

nemo_gym.environment.registry.discover_environments() -> typing.Dict[str, nemo_gym.environment.registry.EnvironmentEntry]

Discover environments with standard component-root precedence.

nemo_gym.environment.registry.read_environment_details(
config_path: pathlib.Path
) -> typing.Dict[str, object]

Deep-parse an environment config for the gym list environments <name> inspect view.

Returns domain, description (via read_config_metadata), plus value, resources_servers (names), agent (the agent type), and dataset names read from the config’s server blocks. Never raises: an unreadable config yields empty/None fields.

nemo_gym.environment.registry.resolve_catalog_entry(
name: str,
kind: nemo_gym.environment.registry.CatalogKind | str | None = None,
entries: typing.Iterable[nemo_gym.environment.registry.EnvironmentCatalogEntry] | None = None

Resolve a catalog name, requiring its kind only for a cross-kind collision.

nemo_gym.environment.registry.BENCHMARKS_SUBDIR = 'benchmarks'
nemo_gym.environment.registry.CatalogKind = Literal['environment', 'benchmark']
nemo_gym.environment.registry.CatalogStatus = Literal['experimental', 'no-manifest']
nemo_gym.environment.registry.ENVIRONMENTS_DIR = PARENT_DIR / ENVIRONMENTS_SUBDIR
nemo_gym.environment.registry.ENVIRONMENTS_SUBDIR = 'environments'
nemo_gym.environment.registry.ENVIRONMENT_CONFIG_FILENAME = 'config.yaml'
nemo_gym.environment.registry.HARBOR_DATASET_MANIFEST = 'manifest.toml'
nemo_gym.environment.registry.RESOURCES_SERVERS_SUBDIR = 'resources_servers'