rlmesh.RunResult

classfrom rlmesh import RunResult[source]

The result of a Model.run() eval.

RunResult(
    episodes: tuple[EpisodeResult, ...] = (),
    telemetry: tuple[TelemetryRow, ...] = (),
    advisories: tuple[Advisory, ...] = (),
)

episodes

attribute[source]
episodes: tuple[EpisodeResult, ...]

telemetry

attribute[source]
telemetry: tuple[TelemetryRow, ...]

advisories

attribute[source]
advisories: tuple[Advisory, ...]

num_episodes

property[source]
property num_episodes: int

Number of episodes in this result.

total_steps

property[source]
property total_steps: int

Total env steps across all episodes.

mean_reward

property[source]
property mean_reward: float

Mean total reward per episode (0.0 when empty).

success_rate

property[source]
property success_rate: float | None

Fraction of episodes the env reported as a success, or None.

Counts the env-reported task outcome only (Gymnasium info["is_success"] / ["success"], captured per episode in EpisodeResult.success). None when the run is empty or any episode lacks that signal: an unknown outcome is never inferred from terminated. Read EpisodeResult.terminated yourself if a terminal state is the metric you want.

format_telemetry

function[source]
format_telemetry()

The telemetry rows as an aligned text table.

One line per row – op, metric, unit, count, avg/p50/p95/p99 – so print(result.format_telemetry()) answers where a run’s time went (model forward, env step, serialization, queueing) without a profiler.