decision: pplx-decider v1.1 and v1.2 on MLX, controls and images in the contract (plugin API 14)
Decision models on MLX, end to end: routes pplx-decider v1.1 and v1.2 checkpoints, and adds per-request controls and images to the public decision contract so callers like Wally can drive them.
Contract (IDL 1.6.0, additive): DecisionOptions gains grouping, max_length, max_pixels and min_pixels; DecisionRequest gains images. The C struct rac_decision_options_t carries the same fields, so RAC_PLUGIN_API_VERSION moves to 14. NeuRT is re-released as v0.20.40 against 14 and re-pinned.
Engines: an engine that cannot honour a control refuses with RAC_ERROR_NOT_SUPPORTED and says which one, and that reason now reaches the caller's error message. llama.cpp refuses all of them. MLX honours them for pplx v1.2 and refuses them for the other decision checkpoints.
MLX: pins mlx-swift-lm 3.31.11 (the v1.2 runtime) and mlx-audio-swift 0.1.9 (which pins it). RUNANYWHERE_MLX_SWIFT_LM_PATH builds against a local checkout for development.
Tests: core decision tests cover the proto-to-C mapping, refusals and error reasons. A new MLXRuntimeTests target covers the adapter, with real-checkpoint cases opt-in through MLX_DECIDER_*. All 110 Swift tests pass building from the released tags. End to end through wally decisions --local, v1.1 27B and v1.2 4B pass on text, image, the controls and the refusals.
Known: this branch is 41 commits behind main; the merge has two conflicts, both the IDL version and lock, resolved by bumping past main and regenerating.
Summary by CodeRabbit
- New Features
- Decision scoring now supports additional model families, including D1, D1 Omni, GLiNER, and Qwen deciders.
- Decision requests can specify grouping, sequence-length and image-size limits, and shared images. Unsupported controls are reported as errors.
- Added an API to retrieve the loaded model’s context length.
- Improvements
- Updated SDK and backend packages to version 0.20.40 across supported platforms.