v0.1.0-rc2
The pre-1.0 breaking wave: rc.2 freezes the wire contract and finalizes the authoring API. It does not interoperate with rc.1, so upgrade every environment, model, and runtime together.
Breaking changes
- Observation and action values now travel as spec-directed bytes, and protocol generation (
rlmesh-wire-v1) is matched by exact equality. An rc.1 peer cannot connect to an rc.2 peer. - Roles are required on
ImageTag,StateTag,TextTag,Image, andText, passed as the first argument:ImageTag(IMAGE_PRIMARY),Text(INSTRUCTION). - Adapter spec classes use their final names. Rename the old input and action classes in your imports, for example
ImageInputtoImage,StateComponenttoConcat,ActionComponenttoActuator,ActionLayouttoAction. action_horizon=onrun()andsession()is nowexecution_horizon=, andexecute_horizonis gone fromAction. The horizon is a runtime setting, not part of the spec.predict_chunk(self, observation)no longer takes a horizon; return your native chunk and the runtime replays it one action per step. An autoregressive head may addexecution_horizon: int = 1to decode exactly that many.on_resetis removed fromModelandSession. Useon_episode_end, which fires at every episode boundary on both the local and served paths; a subclassreset()is wired to it.- Sandbox config is grouped. Pass
build=SandboxBuild(...)andruntime=SandboxRuntime(...)instead of flat kwargs:SandboxEnv("CartPole-v1", build=SandboxBuild(packages=["gymnasium==1.3.0"])).
Added
- Action chunking and batched prediction in the runtime. Implement the most general of four corners and the runtime derives the rest:
predict,predict_chunk,predict_batch,predict_chunk_batch. The runtime owns chunk replay and the execution horizon, so one action still reaches the environment per step. session()andSessionfor manualreset/predict/stepcontrol alongsiderun(), plusSession.reader()andSession.read()for read-only, role-addressed views of an observation through the model's adapter.- PyTorch and JAX environments served with framework tensors:
EnvServer(env, framework="torch", device="cuda:0"), withrlmesh.torchandrlmesh.jaxfactory, model, and sandbox classes. A model'sdevicemoves observations beforepredict. - Declared construction parameters:
EnvFactory.params = ParamSpec(Param(...))validatesmake()arguments and adds aVectortype.enumerate_variants()lists a factory's concrete sub-environments. describe(),describe_json(), andpython -m rlmesh.describeemit a JSON metadata envelope for a factory or model without constructing it.- More adapter conversions: rotation accept-sets, image
fit,normalizeranges, channel validation, optional cameras, per-actuatorclip, role-less actuators, andadapter.advisories()for data-loss notes. A newer environment contract also parses against an older core and fails only when a model input needs the missing piece. - A live debug viewer: pass
view="terminal",view="http:9000", orview="both"torun()/session(), or configurerlmesh.View(...). It is best-effort and never breaks an eval. - Sampling and ergonomic helpers on the space wrappers.
Changed
- The adapter engine and chunk replay moved into the Rust core for vectorized, stateful serving. The Python authoring path is unchanged.
Actuatorscale,invert, andthresholdapply on both sides and compose in order, so a model can bridge its output convention at the boundary.
Fixed
- Sandbox startup waits longer before timing out, so slow environments such as LIBERO task suites start reliably.
- Debug viewer fixes for SSH terminals and observation-fed frames.