Repository navigation
Releases: mattt/AnyDecisionModel
Releases · mattt/AnyDecisionModel
Release list
0.5.0
Important
MLXDecisionModel and CoreAIDecisionModel no longer have a default model ID. Pass modelID: explicitly, for example MLXDecisionModel(modelID: "mlx-community/Qwen3-4B-Instruct-2507-4bit"). The defaultModelID static properties are removed (#17)
What's Changed
- Add an MLX backend for decision heads, starting with Clef by @mattt in #16
- Distill the README and require an explicit model ID by @mattt in #17
- Bump the README dependency examples to 0.5.0 by @mattt in #18
Full Changelog: 0.4.1...0.5.0
0.4.1
Fixes
- The
MLXtrait builds again for packages that resolve AnyDecisionModel fresh. AnyDecisionModel now requires mlx-swift-lm 3.31.x; mlx-swift-lm 3.32 changes APIs thatMLXDecisionModeluses, and its MLX release makes quantized results depend on batch size (ml-explore/mlx#4613). The trait can't be used in the same app as a package that requires mlx-swift-lm 3.32, such as AnyLanguageModel 0.15 (#15)
0.4.0
Breaking changes
- The minimum deployment targets are now macOS 26 and iOS 26 (from macOS 14 and iOS 17). SwiftPM doesn't let a package depend on a product with a higher platform floor, even behind a trait (#11)
Changes
CoreAIDecisionModelanswers decisions with Apple's Core AI engine through coreai-kit'sTypedDecisions. Enable it with the newCoreAItrait. It reads label probabilities from the same last-position logits asMLXDecisionModel, uses the same scoring, calibration, and rotation code, and has prefix caching on by default. It needs Xcode 27 to build and macOS 27 or iOS 27 to run; apps can deploy to 26 and check availability before using it (#11)
0.3.1
0.3.0
Additions
MLXDecisionModelevaluates prompts in batches when a request has several questions or a choice with rotation debiasing, with up tomaximumBatchSizeprompts in one forward pass (default 16; set it to 1 to evaluate each prompt separately). Batching applies to models whose layers use plain key-value caches, such as Qwen3; other models evaluate each prompt separately. Tokenization now runs outside the model lock with up to four concurrent tasks. On an M4 Max with Qwen3 4B, a request with 16 binary questions and two rotated choices fell from 2.8–2.9 s to 1.2–1.3 s with a short state (#9)
Changes
- With
prefixCaching: true, models whose layers use plain key-value caches now get an explicit causal mask array instead of the symbolic mask that MLX 0.31.1 applies incorrectly for split prefills (#9) DecisionSession.Diagnostics.durationfor MLX answers is now an estimate allocated from the request's total scoring time in proportion to each answer's prompt evaluations, so it can change when other questions in the request change (#9)
0.2.0
Changes
MLXDecisionModelno longer caches the shared prompt prefix by default. mlx-swift 0.31.6 and earlier include an MLX version whose Metal attention kernel applies the causal mask incorrectly when a prompt is prefilled in two parts, which can change answers. MLX 0.31.2 fixes this (ml-explore/mlx#3271). PassprefixCaching: trueto opt back in after checking cached results for your model (#7)
Additions
DecisionSession.Diagnosticsreportsduration, the wall-clock time for each local answer, excluding model loading and prefix filling (#5)MLXDecisionModelhas an opt-inclosedThinkFallbackthat appends a closed thinking block for reasoning models whose chat template ignoresenable_thinking: false. The approach follows Daisuke Majima's coreai-kit#13 (#6)
Under the hood
- MLX CI builds no longer fail on Metal compiler paths restored from another runner's cache (#4)