Skip to main content

RuntimeSessionSpec

Struct RuntimeSessionSpec 

Source
pub struct RuntimeSessionSpec {
Show 18 fields pub session_id: String, pub env_id: String, pub env_component_id: String, pub model_component_id: String, pub workflow_edition: Edition, pub env_contract: EnvContract, pub num_envs: usize, pub base_seed: Option<i64>, pub episode_seeds: Vec<i64>, pub max_episodes: Option<u64>, pub trial_index_base: Option<u64>, pub max_episode_steps: Option<i64>, pub max_episode_seconds: Option<f64>, pub close_env_on_end: bool, pub limits: RuntimeLimits, pub subset_step: bool, pub env_ceiling: Option<PeerCeiling>, pub model_ceiling: Option<PeerCeiling>,
}
Expand description

Everything one route needs to run: its identity, the negotiated env contract, and the per-op limits. validate gates a spec before the driver runs it.

Fields§

§session_id: String

Correlation label only; OSS does not key on it (the managed layer owns session lifecycle). Kept as plumbing for telemetry/logs — its removal is the deferred closed split, out of scope here.

§env_id: String

The connected env container, UUIDv7 (minted by the runtime on attach). The single routing key: replaces the old route_id + positional lane. (Repurposed from the former descriptive-name field; the human env name now lives only in the language SDK’s own contract type.)

§env_component_id: String§model_component_id: String§workflow_edition: Edition

Workflow edition negotiated at the env handshake, already resolved to the typed arm whose semantics this session runs under. Wire names are parsed once, where they arrive, by rlmesh_proto::parse_retained_edition — that is where the runtime refuses an edition it was not built to drive, so a name outside the retained list never reaches this field.

§env_contract: EnvContract§num_envs: usize§base_seed: Option<i64>§episode_seeds: Vec<i64>

Explicit per-episode reset seeds, consumed in episode-start order (a vector reset claims one per lane). Overrides base_seed derivation when non-empty; episodes beyond the list reset unseeded. Requires driver-owned resets (autoreset DISABLED): under NEXT_STEP the env seeds its own rolls, so the list would silently not apply.

§max_episodes: Option<u64>§trial_index_base: Option<u64>

First trial ordinal this route’s episodes walk; None is the default base, 0 (so is an explicit Some(0)). Under driver-owned resets (autoreset DISABLED) the driver always mints one ordinal per episode start (base, base + 1, …), reports it on the episode events and summaries, and delivers it as ResetRequest.options["trial_index"] to an env that declared the key (see ENV_RESET_OPTIONS_KEY) – an env that did not never sees it. A sharded run gives each shard its own base so the shards together walk a benchmark’s trials once each, instead of every shard re-deriving an index from a hashed seed. Under NEXT_STEP autoreset the env restarts its own lanes, so no ordinal is minted at all: the default base is inert there, and a non-zero base is rejected by validate since it could never be walked.

§max_episode_steps: Option<i64>

Truncate any episode after this many steps (runtime-enforced; the lane is reset and the episode reported truncated). Requires driver-owned resets (autoreset DISABLED).

§max_episode_seconds: Option<f64>

Truncate any episode after this wall-clock duration (seconds), same semantics and autoreset requirement as max_episode_steps.

§close_env_on_end: bool§limits: RuntimeLimits§subset_step: bool

The env advertised the subset_step handshake capability: every lane can be reset and stepped on its own. The driver then runs one episode loop per lane (a lane is its own group) instead of stepping the vector in lockstep, and episode seeds/indices come from a route-global slot counter so the scored set is fixed by the budget alone.

§env_ceiling: Option<PeerCeiling>

The served env’s ceiling; None when the env runs in-process.

§model_ceiling: Option<PeerCeiling>

The served model’s ceiling; None when the model runs in-process.

Implementations§

Source§

impl RuntimeSessionSpec

Source

pub fn trial_index_base(&self) -> u64

The first trial ordinal this route walks: trial_index_base, or 0 when the session left it unset.

Source

pub fn validate(&self) -> Result<(), String>

Source

pub fn edition_defaults(&self) -> &'static EditionDefaults

The edition-governed defaults this session runs under. Every value the driver would otherwise hardcode comes from here, so a future edition changes a table row instead of a code path.

Source

pub fn env_context(&self) -> RuntimeEnvContext

Source

pub fn observation_space(&self) -> Option<&SpaceSpec>

Returns the observation space, or None if the spec has not been populated/validated (env_contract.observation_space is unset).

All RuntimeSessionSpec fields are public, so an unvalidated spec is trivial to construct; this accessor never panics. The driver validates the spec before running and uses the infallible internal accessor.

Source

pub fn action_space(&self) -> Option<&SpaceSpec>

Returns the action space, or None if the spec has not been populated/validated (env_contract.action_space is unset).

See RuntimeSessionSpec::observation_space for why this is fallible.

Trait Implementations§

Source§

impl Clone for RuntimeSessionSpec

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RuntimeSessionSpec

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for RuntimeSessionSpec

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for RuntimeSessionSpec

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more