Skip to navigation

nemo_gym.episode_types

View as Markdown

Wire contracts for environment servers.

Module Contents

Classes

NameDescription
BaseEpisodeRequestCarry environment-neutral identity and typed task input.
BaseEpisodeResponseReturn either a typed result or a handled failure.
EpisodeFailureDescribe a failure using the same fields on the wire and in saved records.
EpisodeIdIdentify one physical attempt of a logical rollout.
MaterializedTaskCarry durable task identity and protocol-shaped task input.
TaskIdIdentify one task within a run-qualified taskset.

Functions

NameDescription
is_materialized_task_rowReturn whether a row has a materialized-task envelope.

Data

EpisodeResultT

TaskInputT

_CAPTURE_KEY_ATTEMPT

API

class nemo_gym.episode_types.BaseEpisodeRequest()

Bases: BaseModel, Generic[TaskInputT]

Carry environment-neutral identity and typed task input.

episode_id
EpisodeId
model_config
= ConfigDict(extra='forbid')
task
MaterializedTask[TaskInputT]
class nemo_gym.episode_types.BaseEpisodeResponse()

Bases: BaseModel, Generic[EpisodeResultT]

Return either a typed result or a handled failure.

episode_id
EpisodeId
failure
EpisodeFailure | None = None
model_config
= ConfigDict(extra='forbid')
result
EpisodeResultT | None = None
task_id
TaskId
nemo_gym.episode_types.BaseEpisodeResponse.validate_result() -> typing_extensions.Self
class nemo_gym.episode_types.EpisodeFailure()

Bases: BaseModel

Describe a failure using the same fields on the wire and in saved records.

The explanation is failure_reason. Kind and stage are optional. The kind identifies what happened; it does not determine terminality. A collector observing a lost reply may not know the episode’s stage.

failure_kind
str | None = None
failure_reason
str = Field(max_length=2000)
model_config
= ConfigDict(extra='forbid')
stage
FailureStage | None = None
terminal
bool
nemo_gym.episode_types.EpisodeFailure._serialize_failure(
handler: pydantic.SerializerFunctionWrapHandler
)
nemo_gym.episode_types.EpisodeFailure._validate_failure_kind(
value: str | None
) -> str | None
classmethod
class nemo_gym.episode_types.EpisodeId()

Bases: BaseModel

Identify one physical attempt of a logical rollout.

attempt
int = Field(default=0, ge=0)
capture_key
str

Return the attempt-qualified key used by capture routes.

model_config
= ConfigDict(extra='forbid', frozen=True)
rollout_id
str
nemo_gym.episode_types.EpisodeId.from_capture_key(
capture_key: str
) -> typing_extensions.Self
classmethod

Invert capture_key; the reserved attempt suffix makes the mapping one-to-one.

nemo_gym.episode_types.EpisodeId.reserve_attempt_suffix(
rollout_id: str
) -> str
classmethod

Keep the derived capture key injective without changing existing keys.

class nemo_gym.episode_types.MaterializedTask()

Bases: BaseModel, Generic[TaskInputT]

Carry durable task identity and protocol-shaped task input.

model_config
= ConfigDict(extra='forbid')
task_id
TaskId
task_input
TaskInputT
class nemo_gym.episode_types.TaskId()

Bases: BaseModel

Identify one task within a run-qualified taskset.

model_config
= ConfigDict(extra='forbid', frozen=True)
task_id
str = Field(min_length=1)
taskset
str
nemo_gym.episode_types.is_materialized_task_row(
row: collections.abc.Mapping[str, object]
) -> bool

Return whether a row has a materialized-task envelope.

This identifies the routing shape, not whether the envelope is valid. A malformed task_input must still route as a materialized task and fail task validation instead of falling through to the legacy run-request path.

nemo_gym.episode_types.EpisodeResultT = TypeVar('EpisodeResultT')
nemo_gym.episode_types.TaskInputT = TypeVar('TaskInputT', bound=BaseModel)
nemo_gym.episode_types._CAPTURE_KEY_ATTEMPT = re.compile('-a([1-9][0-9]*)$')