The l3-jouleclaw binding gains HybridBackend — the wave
57/58 hybrid surface as a Joule Code L3 stage:
point it at a snapshot directory; the family is
auto-detected from config.json's model_type
(nemotron_h | granitemoehybrid | falcon_h1), the BF16
checkpoint mmaps, and hybrid_lm::generate drives it —
batched prefill (bit-identical to sequential by the
loader's parity guarantees), greedy or seeded sampling,
EOS stop ids read from the config (int or list).
Same LlmBackend trait as every other backend; it drops
into jouleclaw_l3_stage unchanged. Energy stays honest:
no per-call meter on this path → energy_joules: None,
the receipt carries the catalog Estimator figure.
Verified on the real Falcon-H1-0.5B checkpoint
(opt-in --ignored, JOULE_HYBRID env to point elsewhere):
backend: "The capital of France is"
→ " Paris. It is known for"
cascade: L0 cache miss → closes at L3 with a
content-addressed CodingOp
(op_id b3:23u9…, estimated_uj 1000000)
Also: repair the example for the jouleclaw-llm-cheap →
jouleclaw-llm crate rename (the example was unbuildable at
HEAD; same API, new name, all refs fixed).
A Mamba2/attention hybrid running on the family's own
from-scratch tensor code now closes the standard's
cascade end to end: tokenize → prefill → decode →
CodingOp → JCR-1-ready receipt, no llama.cpp, no FFI,
no Python.
Co-Authored-By: Claude Fable 5 <[email protected]>