@@ -7,6 +7,72 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
77
88<!-- %% CHANGELOG_ENTRIES %% -->
99
10+ ## 0.4.0 - 2026-05-17
11+
12+ ### Changed
13+
14+ - Upgraded to Nx 0.12 / Bumblebee 0.7 / Axon 0.8. Nx 0.12 replaces
15+ the optional-callback list (` lu ` , ` svd ` , ` qr ` , ` cholesky ` , ` eigh ` ,
16+ ` solve ` , ` take ` , ` take_along_axis ` , ` fft2 ` , ` ifft2 ` ,
17+ ` cumulative_* ` , ` logical_not ` , ` all_close ` ) with a single
18+ generic ` Nx.Backend.block/4 ` dispatch keyed on ` Nx.Block.* `
19+ structs. ` Emily.Backend ` now routes every previously-native op
20+ through ` block/4 ` , preserving the MLX fast paths without losing
21+ the BinaryBackend fallback when an unknown block arrives. Existing
22+ ` Emily.Backend ` consumers see no behavioural change.
23+ - Migrated ` Emily.Fast.* ` from the now-removed
24+ ` Nx.Defn.Expr.optional/3 ` extension point to ` Nx.block/4 ` . Each
25+ fused kernel (` rms_norm ` , ` layer_norm ` , ` rope ` , ` rope_with_freqs ` ,
26+ ` scaled_dot_product_attention ` with and without mask/sinks) now
27+ emits an ` Emily.Fast.Block.* ` struct that ` Emily.Backend.block/4 `
28+ pattern-matches to the matching ` mx::fast::* ` NIF. The
29+ composed-defn fallbacks under non-Emily backends are unchanged.
30+ - Bumblebee 0.7 ships Qwen3 first-class, so
31+ ` notebooks/qwen3_quantized.livemd ` no longer needs the ` main ` -ref
32+ Bumblebee pin from the 0.6.3 era.
33+
34+ ### Added
35+
36+ - ` Nx.rfft/2 ` and ` Nx.irfft/2 ` support. The underlying
37+ ` Native.rfftn ` / ` Native.irfftn ` NIFs were already in place from
38+ earlier MLX work; Nx 0.12 surfaces these as backend-block ops so
39+ Emily wires them up at no MLX-side cost.
40+ - Smoke tests for three new Bumblebee 0.7 model families on
41+ ` Emily.Backend ` : NomicBERT (` :nomic_embeddings ` ), SmolLM3
42+ (` :smollm3 ` ), and ModernBERT (` :modernbert ` ). All three drive a
43+ tiny synthetic spec end-to-end through ` Axon.predict ` so they
44+ remain offline-friendly; tagged ` :conformance ` .
45+ - Runnable Livebooks for each of the three new Bumblebee 0.7
46+ families: ` notebooks/nomic_embeddings.livemd ` (NomicBERT
47+ embeddings with cosine similarity), ` notebooks/smollm3_chat.livemd `
48+ (SmolLM3-3B chat completion with a ` <think> ` toggle for hybrid
49+ reasoning), and ` notebooks/modernbert_classification.livemd `
50+ (ModernBERT NLI fine-tune). All three are published under the
51+ HexDocs Notebooks group.
52+ - A ` [:emily, :block, :fallback] ` telemetry event fires whenever
53+ ` Emily.Backend.block/4 ` falls through to the supplied default
54+ ` fun ` . Surfaces ops we used to handle natively but now land on
55+ the composed-defn path — useful in soak runs to spot silent
56+ regressions after a Bumblebee bump.
57+
58+ ### Fixed
59+
60+ - ` mix docs ` no longer emits autolinker warnings for the
61+ ` Emily.Backend.block/4 ` and ` Nx.Defn.Expr.optional/3 ` references
62+ in the ` Emily.Fast ` and ` Emily.Fast.Block ` moduledocs. The
63+ references resolved to ` @doc false ` callees (the backend callback
64+ is hidden by ` Nx.Backend ` , and ` optional/3 ` was removed in Nx 0.12);
65+ the prose stays, the ` Mod.fun/arity ` shape is broken up so the
66+ autolinker no longer follows it. Same pattern as the earlier
67+ fix in ` ee32c7c ` .
68+
69+ ### Removed
70+
71+ - ` {:f8_e4m3fn, 8} ` (introduced in Nx 0.11) is rejected at the
72+ backend boundary with the same "no MLX primitive" ` ArgumentError `
73+ pattern as ` {:f, 64} ` . MLX has no float-8 dtype; cast to ` :f16 ` or
74+ ` :bf16 ` .
75+
1076## 0.3.5 - 2026-05-03
1177
1278## 0.3.4 - 2026-05-03
0 commit comments