Some checks failed
joule-moq-remote host agent / joule-moq-remote · does this change touch it (pull_request) Successful in 12s
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 10s
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Successful in 12s
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Successful in 15s
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (pull_request) Successful in 6s
wai-app and Create / wai-app · does this change touch it (pull_request) Successful in 18s
wai-audit collector and player integration / does this change touch it (pull_request) Successful in 18s
wai cross-architecture byte-equality / does this change touch it (pull_request) Successful in 7s
WAI operation catalogue / does this change touch it (pull_request) Successful in 7s
WAI conformance / does this change touch it (pull_request) Successful in 7s
WAI energy receipts / does this change touch it (pull_request) Successful in 6s
jouleclaw public surface must stay documented / Public-surface audit (jouleclaw-rs) (pull_request) Successful in 25s
wai-ledger service / does this change touch it (pull_request) Successful in 7s
WAI JPEG-AI whole decode (pinned inputs, required) / does this change touch it (pull_request) Successful in 9s
WAI neural decoders end-to-end / does this change touch it (pull_request) Successful in 5s
wai-key-proxy / does this change touch it (pull_request) Successful in 9s
wai-fleet service / does this change touch it (pull_request) Successful in 13s
WAI HTTP delivery / WAI HTTP · does this change touch it (pull_request) Successful in 16s
wai-ops-gpu integer operators on GPUs / does this change touch it (pull_request) Successful in 6s
wai-pack / wai-pack · does this change touch it (pull_request) Successful in 6s
WAI examples / WAI examples · does this change touch them (pull_request) Successful in 22s
WAI neural sink gates / does this change touch it (pull_request) Successful in 9s
wai-ops integer operators / does this change touch it (pull_request) Successful in 8s
joule-code conformance gate / joule-moq-relay, its own energy on a counter (macos) (pull_request) Successful in 44s
wai-quantum contract / does this change touch it (pull_request) Successful in 8s
wai-quantum CUDA member / does this change touch it (pull_request) Successful in 8s
wai-quantum dataflow member / does this change touch it (pull_request) Successful in 7s
wai-quantum command line / does this change touch it (pull_request) Successful in 13s
wai-quantum editors / does this change touch it (pull_request) Successful in 8s
wai-quantum signal processor / does this change touch it (pull_request) Successful in 10s
wai-quantum other formats / does this change touch it (pull_request) Successful in 6s
wai-quantum resource estimation / does this change touch it (pull_request) Successful in 7s
wai-quantum docs, course and locales / does this change touch it (pull_request) Successful in 13s
wai-quantum HIP member / does this change touch it (pull_request) Successful in 10s
wai-quantum for JavaScript / does this change touch it (pull_request) Successful in 8s
wai-quantum FPGA member / does this change touch it (pull_request) Successful in 13s
wai-quantum OpenQASM reader / does this change touch it (pull_request) Successful in 7s
wai-quantum npu-cores member / does this change touch it (pull_request) Successful in 7s
wai-quantum Metal member / does this change touch it (pull_request) Successful in 10s
wai-quantum OpenCL member / does this change touch it (pull_request) Successful in 12s
wai-quantum neural-processor member / does this change touch it (pull_request) Successful in 15s
joule-moq-remote host agent / joule-moq-remote, every target (macos) (pull_request) Successful in 1m9s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 1m42s
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (pull_request) Successful in 2m16s
joule-code conformance gate / joule-moq-relay, every target (pull_request) Successful in 2m56s
energy meters on real hardware / sink decode table · per-task energy and the GPU rail on macOS (pull_request) Successful in 2m58s
joule-code conformance gate / Build + round-trip C1-C4 vectors (pull_request) Successful in 3m4s
wai-quantum on every processor / emulated · aarch64-unknown-linux-gnu (pull_request) Successful in 2m36s
standards workspaces build + test / jouleclaw-rs (-nodebug, jouleclaw/jouleclaw-rs, -p jouleclaw-energy --features rapl,nvml, jouleclaw-rs, linux-arm64, -C target-feature=+fp16) (pull_request) Successful in 3m34s
standards workspaces build + test / mesh-rs (mesh/mesh-rs, -p mesh-engine-gguf -p mesh-openai --features mesh-engine-gguf/gguf,mesh-openai/server, mesh-rs, linux-arm64) (pull_request) Successful in 1m20s
wai-quantum CUDA member / member · CUDA (thor) (pull_request) Successful in 2m13s
WAI conformance / fast integer kernels, every x86_64 kernel set (AVX-512 silicon) (pull_request) Successful in 3m31s
wai cross-architecture byte-equality / linux-aarch64 (pull_request) Successful in 34s
wai-quantum on every processor / emulated · powerpc64le-unknown-linux-gnu (pull_request) Successful in 3m31s
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (pull_request) Successful in 1m44s
wai-quantum pulse and dynamics / does this change touch it (pull_request) Successful in 5s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 25s
wai-quantum for Python / does this change touch it (pull_request) Successful in 4s
wai-quantum error correction and mitigation / does this change touch it (pull_request) Successful in 5s
wai-quantum-qpu / does this change touch it (pull_request) Successful in 5s
wai-quantum OpenCL member / member · OpenCL GPU and CPU (thor) (pull_request) Successful in 1m14s
wai cross-architecture byte-equality / macos-arm64 (reference) (pull_request) Successful in 26s
wai-quantum extension points / does this change touch it (pull_request) Successful in 5s
wai-quantum HIP member / member · HIP (framework-128gb) (pull_request) Successful in 1m13s
wai-quantum service / does this change touch it (pull_request) Successful in 6s
wai-quantum matrix-extension member / does this change touch it (pull_request) Successful in 6s
energy meters on real hardware / RAPL and NVML on jetson-hub (pull_request) Successful in 37s
wai-quantum studio and desktop / does this change touch it (pull_request) Successful in 5s
wai-quantum tensor-engine member / does this change touch it (pull_request) Successful in 5s
wai-quantum portable tensor program / does this change touch it (pull_request) Successful in 4s
wai-quantum variational and algorithm library / does this change touch it (pull_request) Successful in 5s
wai-quantum CPU vector units / does this change touch it (pull_request) Successful in 6s
wai-quantum on every processor / emulated · s390x-unknown-linux-gnu (pull_request) Successful in 4m41s
wai-quantum verdicts and repairs / does this change touch it (pull_request) Successful in 5s
wai-quantum views in agent hosts / does this change touch it (pull_request) Successful in 6s
wai-quantum WebGPU member / does this change touch it (pull_request) Successful in 5s
wai-sink-android native sink library / does this change touch it (pull_request) Successful in 7s
wai-sink-swift native sink package / does this change touch it (pull_request) Successful in 5s
wai-quantum on every processor / emulated · armv7-unknown-linux-gnueabihf (pull_request) Successful in 5m8s
WAI mbt2018_mean integer decode (regenerated vectors) / does this change touch it (pull_request) Successful in 4s
WAI Studio / does this change touch it (pull_request) Successful in 7s
standards workspaces build + test / jouledesk-rs (jouledesk/jouledesk-rs, jouledesk-rs, macos) (pull_request) Successful in 6m5s
wai-vector vector graphics / does this change touch it (pull_request) Successful in 6s
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Successful in 6s
joule-code conformance gate / joule-moq-ingest, every target (pull_request) Successful in 6m23s
wai-web wasm32 / does this change touch it (pull_request) Successful in 7s
joule-moq-room room service / joule-moq-room, every target (pull_request) Successful in 3m48s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 28s
wai-app and Create / wai-app · tests, clippy, the line language's verifier (linux) (pull_request) Successful in 28s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 14s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (pull_request) Successful in 35s
wai-quantum npu-cores member / member · npu-cores, neural processor (framework-128gb silicon) (pull_request) Successful in 1m50s
wai-app and Create / wai-app · Create, browser end-to-end (macos) (pull_request) Successful in 5m49s
wai-quantum on every processor / emulated · loongarch64-unknown-linux-gnu (pull_request) Successful in 6m28s
wai-quantum OpenCL member / member · OpenCL GPU (framework-128gb) (pull_request) Successful in 30s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 32s
wai-quantum on every processor / emulated · riscv64gc-unknown-linux-gnu (pull_request) Successful in 6m39s
wai-quantum portable tensor program / tensor program · integrated GPU (framework-128gb) (pull_request) Successful in 17s
standards workspaces build + test / joulehook-rs (joulehook/joulehook-rs, joulehook-rs, linux) (pull_request) Successful in 1m32s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 6m14s
wai-quantum on every processor / emulated · i686-unknown-linux-gnu (pull_request) Successful in 4m17s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 1m8s
wai cross-architecture byte-equality / linux-x86_64 (pull_request) Successful in 32s
energy meters on real hardware / sink decode table · RAPL on jetson-hub (NVML surveyed) (pull_request) Successful in 2m44s
wai-quantum CPU vector units / member · vector units, avx2 and avx512 (framework-128gb silicon) (pull_request) Successful in 22s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 8m5s
wai-audit collector and player integration / collector · linux (pull_request) Successful in 1m21s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 33s
wai-ledger service / service · macos (pull_request) Successful in 1m14s
wai-fleet service / service · macos (pull_request) Successful in 1m13s
WAI conformance / faces from keypoints under wasm32-wasip2 (wasmtime) (pull_request) Successful in 1m27s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 2m2s
wai-quantum CUDA member / member · CUDA (jetson-hub) (pull_request) Successful in 1m33s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (pull_request) Successful in 2m50s
wai-quantum OpenCL member / member · OpenCL GPU and CPU (jetson-hub) (pull_request) Successful in 40s
wai-ledger service / service · linux (pull_request) Successful in 1m31s
wai-quantum on every processor / emulated · sparc64-unknown-linux-gnu (pull_request) Successful in 8m6s
wai-quantum service / service energy · linux packages (pull_request) Successful in 1m33s
wai-quantum WebGPU member / member · DX12 and Vulkan (cbio-windows) (pull_request) Successful in 11m53s
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 4m10s
wai-quantum portable tensor program / tensor program · GPUs (jetson-hub) (pull_request) Successful in 25s
WAI neural decoders end-to-end / synthetic fixtures → Rust decode → reference (±4) (pull_request) Successful in 1m23s
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Successful in 4s
wai-key-proxy / proxy · linux (pull_request) Successful in 1m27s
wai-pack / wai-pack · macos (pull_request) Successful in 4m10s
wai-fleet service / service · linux (pull_request) Successful in 2m18s
wai-pack / wai-pack · linux (pull_request) Successful in 2m41s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 8m10s
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Successful in 3m2s
WAI JPEG-AI whole decode (pinned inputs, required) / fetch pinned JPEG-AI inputs → whole decode + pixel hash, required (pull_request) Successful in 5m57s
wai-ops integer operators / macos-arm64 (pull_request) Successful in 47s
wai-ops integer operators / linux-x86_64 (pull_request) Successful in 51s
WAI operation catalogue / the catalogue and every door · linux (pull_request) Successful in 8m41s
wai-ops integer operators / wasm32-wasip2 (wasmtime) (pull_request) Successful in 28s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 16m29s
wai-ops integer operators / wasm32 under Node (pull_request) Successful in 42s
wai-ops integer operators / independent checker (Python) (pull_request) Successful in 14s
wai-quantum dataflow member / member · dataflow device absent (macos) (pull_request) Successful in 17s
WAI neural sink gates / the exact JPEG-AI decoder reports its path (pinned inputs, required) (pull_request) Successful in 1m58s
WAI neural sink gates / model-free refusals of the neural sink (pull_request) Successful in 2m17s
wai-quantum contract / the policy is linked, and the deprecations page reads (pull_request) Successful in 5s
wai-quantum command line / command line · macos (pull_request) Successful in 1m31s
wai-quantum editors / editors · macos (pull_request) Successful in 1m18s
wai-quantum FPGA member / member · FPGA datapath, simulated (macos) (pull_request) Successful in 1m6s
wai-quantum OpenCL member / member · OpenCL GPU (macos) (pull_request) Successful in 24s
wai-quantum CUDA member / member · CUDA absent (linux) (pull_request) Successful in 1m44s
wai-quantum Metal member / member · Metal (macos) (pull_request) Successful in 39s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 10m49s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 12m21s
wai-quantum on every processor / emulated · powerpc64-unknown-linux-gnu (pull_request) Successful in 19m15s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 15m44s
wai-quantum command line / command line · linux (pull_request) Successful in 3m9s
wai-quantum studio and desktop / desktop app · windows (pull_request) Successful in 8m58s
wai-quantum pulse and dynamics / the same bits · macos (pull_request) Successful in 1m22s
wai-quantum WebGPU member / member · integrated GPU, Vulkan (framework-128gb) (pull_request) Successful in 13m19s
wai-quantum-qpu / credentials in the keychain (macos) (pull_request) Successful in 38s
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (pull_request) Successful in 9m25s
wai-quantum contract / schemas and the committed tool lists · linux (pull_request) Successful in 5m52s
WAI conformance / each feature of the independent verifiers' steps compiles alone (pull_request) Successful in 17m10s
wai-quantum neural-processor member / member · neural processor (macos) (pull_request) Successful in 4m20s
wai-quantum for Python / python · macos (pull_request) Successful in 2m52s
wai-quantum dataflow member / member · dataflow device, simulated (pci 1e52:401e) (pull_request) Successful in 3m36s
wai-quantum portable tensor program / tensor program · Metal and the arm64 CPU (macos) (pull_request) Successful in 15s
wai-quantum matrix-extension member / member · matrix extension absent (macos) (pull_request) Successful in 12s
wai-quantum CPU vector units / member · vector unit absent (macos) (pull_request) Successful in 13s
wai-quantum resource estimation / estimation and calibration · linux, release (pull_request) Successful in 1m33s
wai-quantum dataflow member / member · dataflow device, simulated (pci 1e52:b140) (pull_request) Successful in 5m31s
WAI examples / WAI examples · portable · linux (pull_request) Successful in 11m16s
wai-quantum contract / API compatibility · linux (pull_request) Successful in 8m33s
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Successful in 1m46s
wai-quantum other formats / the set under wasm32-wasip2 (wasmtime) (pull_request) Successful in 1m14s
wai-quantum docs, course and locales / the Studio's words in every locale · linux (pull_request) Successful in 20s
wai-quantum service / service · macos (pull_request) Successful in 4m10s
wai-quantum FPGA member / member · FPGA simulation absent (linux) (pull_request) Successful in 19s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 3m27s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 18m53s
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Successful in 2m50s
wai-quantum OpenQASM reader / corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 47s
wai-quantum OpenQASM reader / reader and corpus · linux (pull_request) Successful in 1m33s
wai-quantum docs, course and locales / the course and the command line's languages · linux (pull_request) Successful in 2m15s
wai-quantum Metal member / member · Metal absent (linux) (pull_request) Successful in 30s
wai-quantum OpenCL member / member · OpenCL absent (linux) (pull_request) Successful in 22s
wai-quantum editors / editors · linux (pull_request) Successful in 5m26s
wai-quantum neural-processor member / member · neural processor absent (linux) (pull_request) Successful in 24s
wai-vector vector graphics / macos-arm64 (pull_request) Successful in 2m9s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 25m21s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 20m28s
wai-quantum pulse and dynamics / reader, simulator and pulse jobs · linux, release (pull_request) Successful in 1m14s
wai-quantum pulse and dynamics / reader, simulator and pulse jobs under wasm32-wasip2 (wasmtime) (pull_request) Successful in 1m8s
wai-quantum WebGPU member / member · GPU, Vulkan (thor) (pull_request) Successful in 24m33s
wai-quantum-qpu / clients against their contracts (linux) (pull_request) Successful in 1m21s
wai-quantum error correction and mitigation / codes, decoders, texts and mitigation · linux, release (pull_request) Successful in 2m15s
wai-quantum for Python / python · linux (pull_request) Successful in 3m7s
wai-quantum for JavaScript / javascript · linux (pull_request) Successful in 6m27s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (pull_request) Successful in 7m10s
wai-quantum matrix-extension member / member · matrix extension, emulated (aarch64 Linux) (pull_request) Successful in 20s
wai-quantum extension points / the registry under wasm32-wasip2 (wasmtime) (pull_request) Successful in 1m48s
wai-quantum extension points / the registry and the example · linux (pull_request) Successful in 2m37s
wai-quantum portable tensor program / tensor program · CPU, mutants, GPU builds (pull_request) Successful in 35s
wai-quantum signal processor / processor and member · signal processor, emulated (pull_request) Successful in 13m45s
wai-quantum other formats / readers, writers and the set · linux (pull_request) Successful in 10m58s
wai-quantum CPU vector units / member · vector unit, rvv 1024-bit (riscv64, emulated) (pull_request) Successful in 26s
wai-quantum CPU vector units / member · vector unit, sve 128-bit (aarch64, emulated) (pull_request) Successful in 27s
wai-quantum WebGPU member / member · GPU, Vulkan (jetson-hub) (pull_request) Successful in 22m50s
wai-quantum CPU vector units / member · vector unit, avx2 (x86_64 silicon) (pull_request) Successful in 18s
wai-quantum CPU vector units / member · vector unit, sve 2048-bit (aarch64, emulated) (pull_request) Successful in 31s
wai-quantum CPU vector units / member · vector unit, sve 512-bit (aarch64, emulated) (pull_request) Successful in 10s
wai-quantum CPU vector units / member · vector unit, rvv 128-bit (riscv64, emulated) (pull_request) Successful in 57s
wai-quantum variational and algorithm library / parameters, gradients, optimisers, VQE, QAOA and builders · linux, release (pull_request) Successful in 1m41s
wai-quantum service / service · linux (pull_request) Successful in 4m41s
WAI Studio / Studio in Chromium and Firefox · macos (pull_request) Successful in 10m16s
wai-quantum verdicts and repairs / the intent set and the verdict under wasm32-wasip2 (wasmtime) (pull_request) Successful in 1m12s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (pull_request) Successful in 10m58s
wai-quantum verdicts and repairs / verdicts, repairs and the intent set · linux (pull_request) Successful in 1m59s
wai-quantum WebGPU member / member · software Vulkan (linux) (pull_request) Successful in 1m42s
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Failing after 1m15s
WAI Studio / the catalogue's actions, the unit tests and the core · linux (pull_request) Successful in 51s
wai-quantum WebGPU member / shader checks · browser build · wasip2 inertness (pull_request) Successful in 2m58s
wai-quantum studio and desktop / desktop app · linux (pull_request) Successful in 6m38s
wai-quantum views in agent hosts / views · a scripted host (pull_request) Successful in 3m39s
wai-vector vector graphics / wasm32 under Node (pull_request) Successful in 31s
wai-vector vector graphics / wasm32-wasip2 (wasmtime) (pull_request) Successful in 51s
wai-vector vector graphics / fuzz, peak allocation, comparison count (pull_request) Successful in 23s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 8m6s
wai-vector vector graphics / linux-x86_64 (pull_request) Successful in 1m51s
wai-vector vector graphics / wasm32 in three browser engines (pull_request) Successful in 2m57s
wai-quantum views in agent hosts / views · the page and its engine (pull_request) Successful in 7m24s
wai-vector vector graphics / independent checker (Python) (pull_request) Successful in 3m2s
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Successful in 3m0s
WAI HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Successful in 34m32s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 5m9s
wai-quantum docs, course and locales / every command and snippet in the docs · linux (pull_request) Successful in 22m13s
wai-quantum tensor-engine member / member · tensor engine, the kernel toolchain's simulator (linux) (pull_request) Successful in 16m25s
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Successful in 11m1s
WAI Studio / Studio in WebKit · linux (pull_request) Successful in 13m37s
WAI HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Successful in 33m15s
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Successful in 26m0s
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Successful in 2m51s
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Successful in 1m53s
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Successful in 16m21s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 2m53s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 28s
WAI HTTP delivery / HTTP corpus · falsify mutations 2/3 (pull_request) Successful in 40m8s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 17s
wai-ops integer operators / linux-aarch64 (pull_request) Successful in 1m47s
wai-quantum HIP member / member · HIP absent (linux-arm64) (pull_request) Successful in 1m21s
wai-quantum npu-cores member / member · npu-cores absent (linux-arm64) (pull_request) Successful in 35s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 7m2s
wai-quantum pulse and dynamics / the same bits · linux-arm64 (pull_request) Successful in 2m1s
wai-quantum extension points / the registry and the example · linux-arm64 (pull_request) Successful in 2m21s
wai-quantum tensor-engine member / member · tensor engine absent (linux-arm64) (pull_request) Successful in 25s
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Successful in 17m5s
WAI examples / WAI examples · android-app · linux-arm64 (pull_request) Successful in 7m45s
wai-quantum variational and algorithm library / parameters, gradients, optimisers, VQE, QAOA and builders · linux-arm64, release (pull_request) Successful in 1m33s
wai-vector vector graphics / linux-aarch64 (pull_request) Successful in 2m23s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 1h8m16s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Successful in 3m39s
hw-meter-apple now enables jouleclaw-energy's `smc` beside `ioreport`. On a Mac whose IOReport CPU rail is frozen for an unprivileged reader (macOS 27 on an M5 Max and an M3 Ultra), HwMeter::detect's backend becomes the SMC's whole-machine power integral (ModelBased, EnergyDomain::System) instead of the load estimator. A live IOReport counter still comes first. The minimum-window rule (#630) is what makes this sound: the SMC's figure needs 2 s, so a span at least that long is sealed ModelBased, and a shorter one (most served requests) is this crate's estimate of its own length, as before. System covers the whole request (#622), so a long span's figure stands for it: high, since it holds whatever else the machine powered, never low. mesh-core, mesh-openai and mesh-engine-gguf take it through their own hw-meter-apple and metal features. ProcessMeter's host fallback becomes the SMC on such a Mac, under the same window rule. On the M3 Ultra: the bridge picks apple-smc with a 2 s floor; a 20 ms span is Estimator (0.38 J) and a 2.2 s span ModelBased (152.6 J for the whole, shared machine); mesh-openai's serve example over hw-meter-apple seals a microsecond serve as Estimator (172 µJ), and over metal its process meter still seals HwShunt. Tests pass on macOS (mesh-meter, mesh-core with hw-meter-apple; mesh-openai with server,hw-meter-apple and server,metal) and Linux (mesh-meter with hw-meter-apple); clippy clean; mesh-engine-gguf --features metal checks. Co-Authored-By: Claude Opus 5.5 <[email protected]>
118 lines
5.6 KiB
Rust
118 lines
5.6 KiB
Rust
//! Run the Mesh OpenAI-compatible reference server — a real
|
||
//! `/v1/chat/completions` endpoint any OpenAI client (curl, the SDKs, vLLM-style
|
||
//! tooling) can drive, returning energy-metered serving + a sealed receipt.
|
||
//!
|
||
//! ```text
|
||
//! cargo run --example serve --features server -- 127.0.0.1:8088 &
|
||
//! curl -s localhost:8088/v1/chat/completions \
|
||
//! -d '{"model":"gpt-mini","messages":[{"role":"user","content":"hi"}],"max_tokens":8}'
|
||
//! ```
|
||
//!
|
||
//! **What a receipt's figure is.** Each request's `usage.energy` carries the
|
||
//! energy of the served span — the deterministic reference engine's work, in
|
||
//! this process (the HTTP handling around it is outside the span) — at the
|
||
//! grade of whatever read it, in `usage.energy.provenance` and in the sealed
|
||
//! `mesh/1` receipt. The meter is the one this build can read:
|
||
//!
|
||
//! - `--features server,metal` (macOS): `mesh_meter::ProcessMeter`, this
|
||
//! process's own CPU and GPU energy over the span. The engine runs in this
|
||
//! process and uses no GPU, so where the GPU counter is proved live its GPU
|
||
//! energy is exactly zero and the span covers the whole request: `HwShunt`,
|
||
//! the kernel's count of this process's CPU energy. That count is every
|
||
//! thread of this process, so a request served while another of its
|
||
//! threads works reads that work too. Where the GPU counter is not proved
|
||
//! live (a GPU busy with other work fails its probe) the span covers part
|
||
//! of the request and is sealed as an estimate of all of it, `Estimator`.
|
||
//! A serve too short for the CPU count to advance over it (this engine's
|
||
//! are microseconds) has no reading either, and is the estimator's figure
|
||
//! for the serve, `Estimator`.
|
||
//! - `--features server,hw-meter` (or `hw-meter-rapl`, `-nvml`, `-apple`):
|
||
//! `mesh_meter::HwMeter::detect`, the machine's counter, a reading only
|
||
//! where a live one covers the whole request (a RAPL package on Linux) and
|
||
//! `mesh_meter::EstimatorMeter` otherwise. With `-apple` on a Mac whose
|
||
//! IOReport CPU rail is frozen it is the SMC's whole-machine power: a modeled
|
||
//! figure (`ModelBased`) for a serve at least its 2 s floor long, an estimate
|
||
//! for a shorter one, as this engine's are. A machine counter reads
|
||
//! everything the host does over the span, not this request alone.
|
||
//! - `--features server` alone: `mesh_meter::EstimatorMeter`, wall time × an
|
||
//! assumed draw, `Estimator`.
|
||
//!
|
||
//! No build seals a figure nothing read: a `mesh/1` receipt has no coverage
|
||
//! field, so `HwShunt` there claims a hardware reading of the whole request
|
||
//! (SPEC §3.3), and only a meter that read one may say so.
|
||
|
||
use std::net::TcpListener;
|
||
|
||
use ed25519_dalek::SigningKey;
|
||
use mesh_core::Mesh;
|
||
use mesh_engine::ReferenceEngine;
|
||
use mesh_meter::Meter;
|
||
use mesh_openai::{server, ChatBackend};
|
||
use mesh_router::BackendSpec;
|
||
use mesh_schema::Fidelity;
|
||
|
||
/// A trivial tokenizer bridge: bytes in, a deterministic note out. A real
|
||
/// deployment pairs the model's own tokenizer with the engine that serves it.
|
||
pub struct ByteBackend;
|
||
impl ChatBackend for ByteBackend {
|
||
fn encode(&self, text: &str) -> Vec<u32> {
|
||
text.bytes().map(u32::from).collect()
|
||
}
|
||
fn decode(&self, ids: &[u32]) -> String {
|
||
format!("[mesh reference engine served {} tokens]", ids.len())
|
||
}
|
||
}
|
||
|
||
/// The meter this build serves with: see the module docs for each feature's
|
||
/// meter and what its figures cover.
|
||
pub fn meter() -> Box<dyn Meter> {
|
||
#[cfg(feature = "metal")]
|
||
let meter: Box<dyn Meter> = Box::new(mesh_meter::ProcessMeter::new(
|
||
jouleclaw_backend_apple::gpu_liveness_load,
|
||
mesh_meter::SpanUses::CpuGpu,
|
||
));
|
||
#[cfg(all(feature = "hw-meter", not(feature = "metal")))]
|
||
let meter: Box<dyn Meter> = Box::new(mesh_meter::HwMeter::detect());
|
||
#[cfg(not(feature = "hw-meter"))]
|
||
let meter: Box<dyn Meter> = Box::new(mesh_meter::EstimatorMeter::default());
|
||
meter
|
||
}
|
||
|
||
/// The deterministic reference engine behind one steward-signed receipt
|
||
/// chain, metered by `meter`.
|
||
pub fn mesh(meter: &dyn Meter) -> Mesh<'_> {
|
||
let sk = SigningKey::from_bytes(&[8u8; 32]);
|
||
let mut mesh = Mesh::new(meter, sk, "did:example:mesh-demo");
|
||
mesh.register(
|
||
BackendSpec::new("tiny", "ssm-1b", Fidelity::F2, 50_000),
|
||
Box::new(ReferenceEngine::new("tiny", "ssm-1b", Fidelity::F2, 50_000, 32)),
|
||
);
|
||
mesh
|
||
}
|
||
|
||
fn main() -> std::io::Result<()> {
|
||
let addr = std::env::args().nth(1).unwrap_or_else(|| "127.0.0.1:8088".to_string());
|
||
let listener = TcpListener::bind(&addr)?;
|
||
let meter = meter();
|
||
eprintln!("mesh OpenAI server: http://{addr}/v1/chat/completions (meter: {})", meter.name());
|
||
let mut mesh = journalled(mesh(meter.as_ref()))?;
|
||
server::run(&listener, &mut mesh, &ByteBackend, 100_000_000)
|
||
}
|
||
|
||
/// With `MESH_JOURNAL` set, record grant decisions and seals in that file and
|
||
/// replay what it already holds before serving, so a restart gives no budget
|
||
/// back and the receipt chain continues (Mesh SPEC §2.2). Without it the
|
||
/// journal is in memory, which a steward that restarts must not rely on.
|
||
pub fn journalled(mesh: mesh_core::Mesh<'_>) -> std::io::Result<mesh_core::Mesh<'_>> {
|
||
let Some(path) = std::env::var_os("MESH_JOURNAL") else {
|
||
return Ok(mesh);
|
||
};
|
||
let (journal, recorded) = mesh_core::FileJournal::open(&path)?;
|
||
let mesh = mesh
|
||
.with_journal(journal, &recorded)
|
||
.map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidData, e.to_string()))?;
|
||
for u in mesh.unresolved() {
|
||
eprintln!("unresolved: request {} on backend {}, debited {} µJ", u.request_id.to_hex(), u.backend, u.debited_uj);
|
||
}
|
||
Ok(mesh)
|
||
}
|