ostertagmatthieu-dev/saac-jepa-world-model

Action-conditioned world model forecasting CNC sensors 1–16 s ahead, transferred across machines with partial sensor overlap

Public
0 runs

Run time and cost

This model runs on CPU hardware. We don't yet have enough runs of this model to provide performance information.

Readme

SAAC-JEPA world model

Forecasts CNC machine sensors 1 to 16 s ahead from 32 s of context and the planned spindle and feed commands. This is the locked checkpoint (M03) from World Models for Cross-Machine CNC Transfer under Partial Sensor Overlap (arXiv:2609.16071). It was trained on one machine with 17 sensors and evaluated once on a second machine that shares only 10 of them.

On the 2,457 target-machine windows it reaches RMSE 0.546 in normalized units, against 0.654 for persistence. The model on this page is the ONNX export of that checkpoint. Run on the same windows, it gives the sealed values exactly (RMSE 0.545579, MAE 0.352358).

Authors: Ayoub Louaye Bouaziz, Matthieu Ostertag, Anton Demasles. Code: github.com/ostertagmatthieu-dev/saac-jepa · Browser demo: Hugging Face Space · Project page: ostertagmatthieu-dev.github.io/saac-jepa

Input

window is a JSON string. All series are at 1 Hz, in the physical units of the source machine (power in kW, feeds in mm/min).

{
  "sensors":         {"spindle_current": [32 numbers or null], "x_torque": [...], ...},
  "past_commands":   {"a_spindle_speed": [32 numbers or null], ...},
  "future_commands": {"a_spindle_speed": [16 numbers], "a_feed_x": [...], "a_feed_y": [...], "a_feed_z": [...]},
  "hidden":          ["z_power"]
}
  • sensors: any subset of the 17 sensors below, over the last 32 s. A null, or a sensor left out, counts as missing.
  • past_commands (optional): the four commands over the same 32 s.
  • future_commands (required): the four commands for the next 16 s. Edit them to ask “what if” questions: the forecast responds to the commands you plan.
  • hidden (optional): sensors to remove from the input schema entirely, as if the machine did not have them.

Sensors: spindle_current, spindle_torque, spindle_power, x_current, x_torque, y_current, y_torque, z_current, z_torque, z_power (the 10 shared with the target machine), plus spindle_motor_temp, x_motor_temp, y_motor_temp, z_motor_temp, spindle_dc_voltage, spindle_mod_depth, ambient_temp.

coverage (default 0.9) sets the central prediction interval of the Gaussian head.

Output

For each sensor, the mean, std, lower and upper bounds at horizons of 1, 2, 4, 8 and 16 s, in physical units. The output also lists the 10 transfer_sensors and the SHA-256 of the checkpoint and of the ONNX file.

Example

import json, replicate

window = {"sensors": {...}, "future_commands": {...}}
out = replicate.run(
    "ostertagmatthieu-dev/saac-jepa-world-model",
    input={"window": json.dumps(window), "coverage": 0.9},
)
print(out["forecast"]["spindle_power"]["mean"])

Scope and limits

  • Only the 10 shared sensors were evaluated on the target machine. Forecasts for the other 7 are returned but are unvalidated there.
  • The model was trained on DS01 (THWS five-axis milling) and evaluated on DS03 (FH JOANNEUM). A third machine needs its units mapped to the same channels, and its accuracy is unknown.
  • It forecasts sensor readings. It is not a safety system and should not drive a machine unsupervised.

Integrity

At startup, the container checks the SHA-256 of the config, the normalizers and the ONNX file against the lock file written before the target machine was first read. The packaging is in replicate/.

Data and license

Code and model: MIT. Training data: DS01 and DS03, both CC BY 4.0. No dataset content is included in this model.

Citation

Bouaziz, A. L., Ostertag, M., & Demasles, A. (2026). World Models for Cross-Machine CNC Transfer under Partial Sensor Overlap. arXiv:2609.16071. https://doi.org/10.48550/arXiv.2609.16071

Model created