Skip to content

Releases: mattt/AnyDecisionModel

0.5.0

Choose a tag to compare

@mattt mattt released this 11 Oct 12:19
Immutable release. Only release title and notes can be modified.
2fec2ce

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

Choose a tag to compare

@mattt mattt released this 02 Oct 12:11
Immutable release. Only release title and notes can be modified.
cfa7c36

Fixes

  • The MLX trait builds again for packages that resolve AnyDecisionModel fresh. AnyDecisionModel now requires mlx-swift-lm 3.31.x; mlx-swift-lm 3.32 changes APIs that MLXDecisionModel uses, 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

Choose a tag to compare

@mattt mattt released this 02 Oct 12:04
Immutable release. Only release title and notes can be modified.
ca20767

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

  • CoreAIDecisionModel answers decisions with Apple's Core AI engine through coreai-kit's TypedDecisions. Enable it with the new CoreAI trait. It reads label probabilities from the same last-position logits as MLXDecisionModel, 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

Choose a tag to compare

@mattt mattt released this 27 Sep 11:08
Immutable release. Only release title and notes can be modified.
3e14027

Changes

  • JevDecisionModel now retries 503 responses by default, along with 429 and 529. Local System One servers such as Ollaya return 503 with Retry-After when their request queue is full (#13)
  • The README shows how to use a local Ollaya server with JevDecisionModel (#12)

0.3.0

Choose a tag to compare

@mattt mattt released this 22 Sep 11:53
Immutable release. Only release title and notes can be modified.
b543533

Additions

  • MLXDecisionModel evaluates prompts in batches when a request has several questions or a choice with rotation debiasing, with up to maximumBatchSize prompts 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.duration for 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

Choose a tag to compare

@mattt mattt released this 21 Sep 16:53
Immutable release. Only release title and notes can be modified.
1760ed0

Changes

  • MLXDecisionModel no 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). Pass prefixCaching: true to opt back in after checking cached results for your model (#7)

Additions

  • DecisionSession.Diagnostics reports duration, the wall-clock time for each local answer, excluding model loading and prefix filling (#5)
  • MLXDecisionModel has an opt-in closedThinkFallback that appends a closed thinking block for reasoning models whose chat template ignores enable_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)

0.1.0

Choose a tag to compare

@mattt mattt released this 21 Sep 12:12
Immutable release. Only release title and notes can be modified.
0364dc7

Initial release