strands-decider-1.4B-v21-pruned

An unofficial, smaller build of strands-decider-2B-hobson-v21 by Alex Nahas. It is not a Strands release. Strands Decider answers typed questions about a state (noul, yes/no; choice, one of N options; score, a level on an ordered scale) with calibrated probabilities; the v21 card describes the model and its training.

What changed from v21

  • v21's LoRA adapter is merged into Qwen/Qwen3.5-2B-Base in float32, and the result is saved in bfloat16 (base revision b1485b2fa6dfa1287294f269f5fb618e03d52d7c).
  • Decoder layers 14 to 22 (9 of 24) are removed. One linear block, h + W rms_norm(h) + b (4.2M parameters), takes their place after layer 13. It was trained to match v21 (KL on the readout plus the final hidden state's squared error) on 1,516 rows built from v21's public training recipes, none of them JevBench items. Nothing else was trained: the readout head and its temperatures are v21's.

1.37B parameters (857M in the 15 layers, 509M embedding, 4M linear block, 1M head), 2.7 GB in bfloat16. v21 is 1.88B.

Results

JevBench public set (231 tasks, harness commit 1bcc55e), served at 4096 tokens:

correct answers changed vs v21 mean KL vs v21
v21 176
this build 173 6 0.0072

v21 ran in bfloat16 on MLX, this build on torch (--device mps). The scores come from the same 231 public tasks that were used to compare builds during the work, so they may read a little high.

Rescored with the JevBench v1.6.1 board rules on those 231 items only (no sealed half, so not a board number): Capability 51.7 (Intelligence 30.5, Calibration 72.9); v21 53.2 (32.3, 74.2).

Against other small decision models

JevBench public-task accuracy of small decision models

system base public tasks correct (of 231) board v1.6.1 Capability
Strands Decider v21, bf16 † Qwen3.5-2B, 1.88B 176 (0.762) β€”
decider-2b v11 (Mapika) ‑ Qwen3.5-2B, 1.9B 175 (0.758) β€”
Decision 2B (FlyMy.AI) MiniCPM5-2B, 2.5B 174 (0.753) 54.8
This build † Qwen3.5-2B, 15 layers, 1.37B 173 (0.749) β€”
system-one-open Gemma 4 E2B 169 (0.732) β€”
decider-2b (Mapika), board entry Qwen3.5-2B, 1.9B 164 (0.710) 44.6
Malkuth-2B 2B 161 (0.697) 47.6
kev 0.6B Qwen3-0.6B 154 (0.667) 36.9
Open-Jev 2B Qwen3.5-2B 149 (0.645) 47.7
Decision Fast (FlyMy.AI) Qwen3-0.6B 146 (0.632) 40.6

Every row is the same 231 public tasks through JevBench's typesafe adapter, in separate runs on different hardware: † my runs (harness 1bcc55e), ‑ the Strands Decider harness (decider-2b v11, from strands-labs/strands-decider), the rest the board's per-system data of 27 September (results/v1.4.2.2 in fstandhartinger/jevbench). The board now ranks by Capability over 1,500 items, half of them sealed (v1.6.1, scored 6 October). This build and v21 are not on it, and the rescore above covers only the public items, so it does not compare with that column.

Other languages: 48 public tasks translated into each language, correct of 48:

en zh ja ko ar hi uk de pl
v21 45 43 43 44 40 31 42 43 39
this build 45 44 43 43 39 32 41 42 38

Held-out tests, never used to choose a build. The same weights in bfloat16 on MLX; accuracy in percent, and the gap to v21 in points with a 95% paired-bootstrap interval:

tasks v21 this build gap
OpenBookQA (choice: each question bare, with its supporting fact, with an unrelated fact) 3,000 64.1 64.5 +0.4 [βˆ’0.4, +1.2]
BoolQ validation (noul) 3,270 86.8 86.5 βˆ’0.3 [βˆ’0.6, +0.1]

Time per forward pass in bfloat16, torch 2.14.1 on MPS (Apple M4 Pro), batch 1, median of 10 runs after 3 warmups:

tokens 68 512 2,048
v21, LoRA merged 65 ms 283 ms 1,141 ms
this build 41 ms 177 ms 711 ms

This build takes 0.62 to 0.63 of v21's time (1.6x faster). On macOS, transformers runs its reference kernels for the Gated DeltaNet layers (flash-linear-attention and causal-conv1d need CUDA).

Use

The checkpoint needs the torso_dir loader on the small-model branch of alxnahas/strands-decider, which no strands-decider release has yet.

pip install "strands-decider @ git+https://github.com/alxnahas/strands-decider@c6003ecc25dc9fecf4fa6457fbc329b06434ea09"
strands-decider serve alxnahas/strands-decider-1.4B-v21-pruned --device cuda --port 8000     # POST /v1/systemone; JevBench's typesafe adapter
strands-decider ask alxnahas/strands-decider-1.4B-v21-pruned \
  --state "Help! My payouts have been failing for 3 days! " \
  --choice "Which team should handle this?=billing,sales,retail" \
  --noul "Does this convey urgency?" \
  --score "How frustrated is the writer?=calm,frustrated,depressed"

Output (--device mps):

noul_0 noul = 0.844
choice_0 -> billing (confidence 0.830)
    billing                  0.886
    retail                   0.058
    sales                    0.056
score_0 score = 1.07 (confidence 0.628)
    0: calm                                     0.130
    1: frustrated                               0.669
    2: depressed                                0.201

max_length is 4096 in strands_decider_config.json; longer states are cut from the front.

Files

  • torso/: a Qwen3_5ForCausalLM checkpoint with 15 layers (transformers 5), and adapters.safetensors, the linear block (keys 13.weight, 13.bias: applied to the output of layer 13).
  • head.safetensors: v21's readout head, unchanged.
  • Tokenizer files, strands_decider_config.json (v21's, with use_lora false and torso_dir "torso"), export.json (sources and revisions), MANIFEST.sha256.

License

Apache-2.0, like v21 and Qwen/Qwen3.5-2B-Base; see LICENSE.md.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for alxnahas/strands-decider-1.4B-v21-pruned

Finetuned
(2)
this model