Skip to content

Commit ef87ea2

Browse files
committed
Version 0.4.0
1 parent 367d801 commit ef87ea2

3 files changed

Lines changed: 67 additions & 64 deletions

File tree

CHANGELOG.md

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

RELEASE.md

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

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ defmodule Emily.MixProject do
22
use Mix.Project
33

44
@app :emily
5-
@version "0.3.5"
5+
@version "0.4.0"
66
@source_url "https://github.com/ausimian/emily"
77

88
# MLX pin. Drives the git tag the `:mlx_src` dep is cloned at (see

0 commit comments

Comments
 (0)