D1A avatar: an anime girl with silver-white and dark purple hair, round glasses and headphones on a round #D1A badge

D1A-E4B-it v0.6 · MLX 8-bit

A small decision model for Apple Silicon: give it a document and a few questions, and it picks the answers. Each question is yes/no, multiple choice or a score; D1A returns a calibrated probability for every option in one forward pass, with no generated text, so every answer is a valid option.

This is the 8-bit MLX build of JohnP1/d1a-e4b-it v0.6, with the adapter merged into its weights. Scores, training and limits are on that card; how far this build moves from the served chat build is below.

from d1a import D1A   # pip install "d1a[serve,mlx,media] @ git+https://github.com/jonpol01/d1a"  (needs jonpol01/d1a#261)
m = D1A.load("JohnP1/d1a-e4b-it-mlx-q8@v0.6")
m.decide("The customer was charged twice for the same order and wants a refund today.",
         {"team": {"type": "choice", "instructions": "Which team handles this?",
                   "criteria": {"billing": None, "shipping": None, "support": None}},
          "angry": {"type": "noul", "instructions": "Is the customer angry?"}})

Not a chat model. This build has the adapter merged into its weights, so it answers D1A decisions only; text generated from it would come from a changed backbone, not Gemma 4 E4B-it. To chat with the same model that decides, build an unmerged folder from the adapter: see Enable chat.

<bos>: encode with it. The Gemma 4 E4B-it tokenizer adds no <bos>, but this model was trained with one at the start of every record (d1a_config.json records leading_ids: [2]). If you encode requests yourself, prepend id 2.

What's inside

  • the LoRA adapter merged into Gemma 4 E4B-it (revision ee0ef602); linear layers and token embeddings 8-bit (group 64), per-layer embeddings 4-bit;
  • pointer head fp32 (head.safetensors);
  • calibration temperature 1.55 in d1a_config.json, the run's, not refitted for this build; no use-case temperatures;
  • 6.1 GB on disk for the text model, plus 0.9 GB of photo, voice and video encoders in media/ (unchanged from the -it base).

Against the served build

Same code, this build against the unmerged 8-bit chat build (quality_gate.py, Apple M1 Max): 145 demo requests (202 questions) and 92 PR-labeler states (276 questions).

  • 1 of 202 demo answers and 3 of 276 labeler answers change; largest probability change 0.073;
  • model time 1.01× the chat build's.

Numbers on the D1A-E4B-it card were measured on the chat build, so they carry over to this build within those flips.

Run it

pip install "d1a[serve,mlx,media] @ git+https://github.com/jonpol01/d1a"
python -m d1a.serving.serve --run JohnP1/d1a-e4b-it-mlx-q8@v0.6 --port 8009

Limits

  • Everything on the D1A-E4B-it card applies.
  • The adapter is merged, so this build cannot chat (above).
  • <bos>: requests encoded without the leading id 2 are out of distribution.

Versions

Tag What it is
v0.6 MLX 8-bit build of D1A-E4B-it v0.6 (adapter merged)

License and data

Apache-2.0. Base model: Gemma 4 by Google (Apache-2.0). Code: github.com/jonpol01/d1a, built on Kev by Jared Palmer (Apache-2.0). Japanese decision data derived from JGLUE by Yahoo Japan Corporation and Waseda University (CC BY-SA 4.0). Pull-request data from NousResearch/hermes-agent (MIT); the labelled PR dataset itself, including the recent PRs, is private.

Downloads last month
26
Safetensors
Model size
7B params
Tensor type
U32
·
BF16
·
MLX
Hardware compatibility
Log In to add your hardware

8-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for JohnP1/d1a-e4b-it-mlx-q8

Quantized
(397)
this model

Collection including JohnP1/d1a-e4b-it-mlx-q8