open-standards/.github/workflows/wai-neural-e2e.yml
Transaction Science 6cdc923813
Some checks failed
wai cross-architecture byte-equality / windows-x86_64 (push) Successful in 31s
wai cross-architecture byte-equality / linux-aarch64 (push) Successful in 1m7s
joule-code conformance gate / Build + round-trip C1-C4 vectors (push) Failing after 1m24s
WAI conformance / cargo-class corpora · windows (push) Successful in 1m13s
WAI conformance / cross-arch byte-equality · windows (push) Successful in 22s
jouleclaw public surface must stay documented / Public-surface audit (jouleclaw-rs) (push) Successful in 1m4s
wai cross-architecture byte-equality / linux-x86_64 (push) Successful in 22s
WAI conformance / cargo-class corpora · linux-arm64 (push) Successful in 2m4s
WAI conformance / cargo-class corpora · linux (push) Successful in 36s
WAI conformance / cross-arch byte-equality · linux (push) Successful in 21s
WAI conformance / cross-arch byte-equality · linux-arm64 (push) Successful in 1m16s
WAI neural decoders end-to-end / synthetic fixtures → Rust decode → reference (±4) (push) Failing after 1m17s
wai cross-architecture byte-equality / macos-arm64 (reference) (push) Successful in 5m56s
WAI conformance / cargo-class corpora · macos (push) Successful in 12m7s
WAI conformance / cross-arch byte-equality · macos (push) Successful in 36s
ci: bump hardcoded toolchain pins 1.97.1 → 1.98.0
Five workflows install an exact toolchain instead of deferring to
rust-toolchain.toml (wai-conformance, wai-neural-e2e, wai-byte-equality,
joule-code-conformance, jouleclaw-public-surface-documented). Align them with the
now-uniform 1.98.0 dev/root pin so CI builds the same compiler as the dev box.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-08-26 07:41:56 -04:00

63 lines
3 KiB
YAML

name: WAI neural decoders end-to-end
# The float neural decoders (elic / mlicpp / glc / dcvc / snac) cannot make
# WAI's cross-architecture byte-equality promise — their ONNX synthesis is
# float, so the low bits differ by hardware (this is exactly why the
# integer-exact int_synth path exists, and why only it is in the byte-equality
# matrix). What they CAN be is *correct end-to-end* on a real machine: entropy
# decode → ONNX synthesis → image assembly, reproducing a reference within ORT
# float rounding (±4). This job proves that, with no committed model blobs:
# the committed tool builds minimal synthetic CompressAI-compatible models +
# bitstreams, and the Rust decoders reproduce each reference. It runs only when
# the neural decode code or the generator changes — not on every cargo class.
on:
push:
branches: [main]
paths:
- 'wai/wai-rs/src/neural/**'
- 'wai/wai-rs/tests/neural_native_decode.rs'
- 'wai/tools/wai_validate_synthetic.py'
- '.github/workflows/wai-neural-e2e.yml'
pull_request:
paths:
- 'wai/wai-rs/src/neural/**'
- 'wai/wai-rs/tests/neural_native_decode.rs'
- 'wai/tools/wai_validate_synthetic.py'
- '.github/workflows/wai-neural-e2e.yml'
jobs:
neural-e2e:
name: synthetic fixtures → Rust decode → reference (±4)
runs-on: linux
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: ML stack (CPU torch + torchvision + compressai + onnxruntime)
run: |
python -m pip install --upgrade pip
# torch AND torchvision from the CPU index so their compiled ops match
# (compressai imports torchvision; a mismatched build fails at
# `torchvision::nms does not exist`).
pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu
# `onnx` (the exporter) is separate from `onnxruntime` (the decoder).
pip install compressai onnx onnxruntime numpy pillow
- name: Build the synthetic fixtures (elic / mlicpp / snac / dcvc / glc)
working-directory: wai
run: python tools/wai_validate_synthetic.py --size 256
# Bootstrap rustup: the docker runner image ships no Rust.
- name: Install Rust 1.98.0
run: |
export PATH="$HOME/.cargo/bin:$PATH"
command -v rustup >/dev/null 2>&1 || \
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.98.0
rustup toolchain install 1.98.0 --profile minimal
rustup default 1.98.0
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
- name: Each Rust decoder reproduces its reference end-to-end
working-directory: wai/wai-rs
# --no-default-features: the neural decoders need only `ort`, NOT the C
# codec chain (AV1/JXL/opus), so the job needs no system codec deps.
run: cargo test --no-default-features --features neural --test neural_native_decode -- _matches_reference --nocapture