open-standards/wai/wai-rs/tests/int_world.rs
Transaction Science 5ccedac360 wai: integer-exact interactive world model — the byte-exact renderer for wai.world.model
Phase 2 of the world-model ingest: a generative interactive world whose every frame
is byte-exact. Genie / Oasis / Matrix / fal-WMA generate the next frame from an
action through a FLOAT network and stream the pixels, so the world is
non-reproducible, unmetered, ephemeral. Here the world model is integer:

  frame_0 = g_s(z_0);  z_{t+1} = clip( T( z_t ‖ action_t ) );  frame_{t+1} = g_s(z_{t+1})

BOTH the transition T and the synthesis g_s are int_hyper IntModels (WHM1: per-out
int12 weights, integer IGDN/leaky, all i64); the action is folded in as constant
input planes; the latent is clamped each step so the recurrence stays bounded. So
given (model, z_0, action trace) every frame is byte-identical on every machine.
Paired with wai.world.model's signed, replay-equivalent action trace (Phase 1),
both the trace AND the generated frames hash-converge — a generative interactive
world you can put in a receipt.

- src/int_world.rs (feature world_int = ["neural_int"]): reuses int_hyper_synth
  run_net + decode for T and g_s; step() builds [c+A] input (latent ‖ dx/dy/btn
  planes), runs T, clamps; decode() rolls the action trace → per-frame + clip hash.
- tools/wai_int_world_export.py: trains a small action-conditioned next-frame model
  (E + recurrent T + g_s, free-rolled) on a navigable procedural world, PTQs T and
  g_s to WHM1, runs an INTEGER reference decode mirroring the Rust loop → frame
  hashes. float SNR 17.9 / integer 17.2 dB (PTQ ~lossless).
- examples/int_world_decode.rs + tests/int_world.rs (never-skip): the committed
  tiny vector (z0 + an 8-action walk + the two models) regenerates 9 frames whose
  per-frame + clip hash (1cc16522e5d57982) reproduce byte-for-byte. Rust == Python.
- wai-web: WorldModel{new,reset,step} stateful stepper (arrow-key live play) +
  worldSessionHash (in-browser signed-trace replay → session hash); same pure-i64
  decode in the browser.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-27 18:34:30 -04:00

44 lines
2.3 KiB
Rust

//! `wai.world.model` integer renderer — a generative INTERACTIVE world whose every
//! frame is byte-exact. The committed transition + synthesis models, an initial
//! latent, and an action walk regenerate a frame sequence whose per-frame and clip
//! hashes reproduce on every machine — replay-equivalence for a *generated* world.
//! Committed tiny vector under `tests/vectors/int_world/`; never skips.
#![cfg(feature = "world_int")]
use std::path::PathBuf;
use wai::int_hyper_synth::IntModel;
use wai::int_world::decode;
fn dir() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/vectors/int_world")
}
#[test]
fn interactive_world_regenerates_byte_for_byte() {
let t = IntModel::from_bytes(&std::fs::read(dir().join("world_T.bin")).unwrap()).expect("transition WHM1");
let gs = IntModel::from_bytes(&std::fs::read(dir().join("world_gs.bin")).unwrap()).expect("synthesis WHM1");
let j: serde_json::Value =
serde_json::from_slice(&std::fs::read(dir().join("world.json")).unwrap()).unwrap();
let c = j["c"].as_u64().unwrap() as usize;
let lat = j["lat"].as_u64().unwrap() as usize;
let z0: Vec<i64> = j["z0"].as_array().unwrap().iter().map(|v| v.as_i64().unwrap()).collect();
let actions: Vec<usize> = j["actions"].as_array().unwrap().iter().map(|v| v.as_u64().unwrap() as usize).collect();
// From z0 + the action walk, the integer transition + synthesis regenerate the
// frames in pure i64 — no float, no ML runtime. Each must reproduce its committed
// hash (a 1-ULP disagreement anywhere in the conv/IGDN/transition would diverge).
let clip = decode(&t, &gs, &z0, &actions, c, lat);
let want = j["frame_hashes"].as_array().unwrap();
assert_eq!(clip.frames.len(), want.len(), "frame count = initial + one per action");
assert_eq!(clip.frames.len(), actions.len() + 1);
for i in 0..clip.frames.len() {
let got = format!("{:016x}", clip.frame_hash(i));
assert_eq!(got, want[i].as_str().unwrap(), "generated frame {i} must reproduce its committed hash");
}
let clip_hash = format!("{:016x}", clip.clip_hash());
assert_eq!(clip_hash, j["clip_hash"].as_str().unwrap(), "clip hash");
println!("int_world: {} frames {}px regenerated byte-exact, clip {clip_hash}", clip.frames.len(), clip.frame_px);
}