What's Changed
- perf(kv-cache): split the cold write so disk IO no longer holds the eval lock by @magicnight in #102
- feat(rerank): true cross-encoder reranker (bi-encoder kept as fallback) by @magicnight in #103
- feat(speculative): register MTP drafters and detect them without loading weights by @magicnight in #104
- fix(benchmark): make Cancel actually stop a run, and keep a restart's state and attribution clean by @magicnight in #105
- feat(audio): MLX-native STT and TTS over OpenAI-compatible endpoints by @magicnight in #106
- fix(mlx): carry the NAX split-K GEMM fix, and make the CLI actually use the fork by @magicnight in #107
- chore(release): scan upstream mlx for correctness fixes the fork does not carry by @magicnight in #108
- test(app): give the app a test target, and cover the benchmark run lifecycle by @magicnight in #109
- fix(mlx): carry two quantized-matmul fixes, and regenerate the JIT sources so they apply by @magicnight in #110
- docs(release): note that kernel-level upstream fixes need the JIT sources regenerated by @magicnight in #111
- fix(mlx): carry the steel GEMM safe-load index fix, preventively by @magicnight in #112
- feat(audio): surface transcription and speech in the GUI, and list audio models by @magicnight in #113
- fix(mlx): carry four more upstream fixes, and make the app actually use the fork by @magicnight in #114
- test(mlx): trip on the cross-thread eval break that starts at core v0.31.2 by @magicnight in #115
- content(site): re-verify our own facts before the 45-day guard expires them by @magicnight in #116
- fix(mlx): carry four more upstream fixes, two of them reproduced here by @magicnight in #117
Full Changelog: v0.8.0...v0.9.0