These docs describe unreleased changes on main. See the latest release.

rlmesh.recorder.EpisodeRecord

classfrom rlmesh.recorder import EpisodeRecord[source]

One episode's outcome plus any media captured for it.

EpisodeRecord(
    index: int,
    seed: int | None,
    steps: int,
    reward: float,
    terminated: bool,
    truncated: bool,
    success: bool | None = None,
    duration_s: float = 0.0,
    included_in_metrics: bool = True,
    media: tuple[MediaRef, ...] = (),
)

Fields mirror rlmesh.EpisodeResult. included_in_metrics (default True) lets a caller mark warmup/discarded episodes so aggregates and the dashboard skip them – it maps to the platform’s includedInMetrics.

index

attribute[source]
index: int

seed

attribute[source]
seed: int | None

steps

attribute[source]
steps: int

reward

attribute[source]
reward: float

terminated

attribute[source]
terminated: bool

truncated

attribute[source]
truncated: bool

success

attribute[source]
success: bool | None

duration_s

attribute[source]
duration_s: float

included_in_metrics

attribute[source]
included_in_metrics: bool

media

attribute[source]
media: tuple[MediaRef, ...]

from_result

function[source]
from_result(
    result: EpisodeResult,
    *,
    index: int | None = None,
    included_in_metrics: bool = True,
    media: tuple[MediaRef, ...] = (),
) -> EpisodeRecord

Build a record from a EpisodeResult (drops op-latency).

index overrides the per-run episode index with a workload-stable one, so episodes from several run calls into one workload stay uniquely keyed (the platform dedupes on resultSetId + task + index). Defaults to the result’s own index.

to_dict

function[source]
to_dict() -> dict[str, Any]

JSON-native episode record (SDK vocabulary; media only when present).