REAX 1

REAX 1 is a 27B decision model by REAX (decisionmodels.io). It reads a state and several questions (choice, yes/no, score) in one forward pass and returns calibrated probabilities without generating text. It is a fine-tune of pplx-decider-v1.2 (Perplexity AI, Apache-2.0), itself derived from Qwen/Qwen3.8-27B (Apache-2.0). This model is not affiliated with or endorsed by Perplexity AI or the Qwen team.

Intended use

Routing, triage, moderation, grading, retrieval/tool reranking and other structured judgements where the answer is one of a closed set. Intended as a base for further fine-tuning; it is the base model of the SN92 (REAX) generalist miner competition. Not for sole decision-making in high-stakes settings (medical, legal, credit, employment) without human review.

Protocol

Same joint request schema and readout as pplx-decider-v1.2 (joint protocol v3, template joint-question-inline-readout-v1):

{"state": str|dict|list, "questions": {"<id>": {"type": "choice"|"noul"|"score", "instructions": str|None, "criteria": ...}}, "images": [...]}

Full attention is noncausal: every question attends to the state and to all other questions. One readout per question at the <|fim_suffix|> marker via the separate readout head ([255, 5120]); probabilities use softmax over option codes A, B, ... with temperature 1.9754 (decision_config.json). The readout head is stored pre-scaled (x1.41 x 1.4) and the saved temperature is scaled by the same factor, so native probabilities are unchanged; the scaling calibrates the single-question SN92 REAX readout, which uses a fixed temperature of 2 and ignores decision_config.json. Group questions that are facets of one decision; send independent candidates one per request (see upstream README, "When to group questions").

Loading uses the pplx_decider package bundled in source/src/ (code by Perplexity AI, Apache-2.0, unmodified):

import sys; from pathlib import Path
from huggingface_hub import snapshot_download
ckpt = Path(snapshot_download("decisionmodels/reax-1"))
sys.path.insert(0, str(ckpt / "source" / "src"))
from pplx_decider import Decider
decider = Decider.from_pretrained(ckpt, device="cuda")   # ~52 GiB BF16
print(decider.decide({"state": "...", "questions": {"q": {"type": "noul", "instructions": "..."}}}))

Training

Four LoRA fine-tunes of pplx-decider-v1.2 (rank 16/16/64/16, all linear layers, readout head trained, KL-to-base 0.5, lr 1e-4, 1 epoch) were merged into the backbone with weight 1/3 each (a "model soup" of fine-tune deltas). Two of them were trained on decision questions the base model got wrong or was unsure about ("hard-mined", plus 25 % easy replay); the third on an 8,000-item mix of generated items and public SN92 specialist training rows (CC-BY-4.0); a fourth on 3,000 Aegis 2.0 training rows (safety classification). Generated items were written by API models and checked by blind solvers from other model families; during an API outage about 1,400 items of one training file had weaker checks (sometimes a single verifier or one from the author's family). All items were deduplicated against every benchmark item we hold. No official benchmark test items were used for training.

Evaluation (internal, not official)

Our composite validator (frozen eval v4: 6,842 items / 21,896 questions; public benchmark items for evaluation only + private held-out items written for this purpose; temperature fitted per model):

Part pplx-decider-v1.2 REAX 1
HF-DI-style public items (5 areas) 75.26 74.48
AA-DI-style public items (Omniscience, HLE-style, When2Call, WildGuard-style) 61.96 64.82
JevBench public items 92.34 93.28
Private same-skill items 88.40 89.78
Private new-domain items 72.21 75.24
Composite 79.76 81.39 (+1.63; bootstrap mean +1.60, SE 0.38)

Question-level accuracy on the private new-domain items: 73.0 % -> 76.0 %. AA-Omniscience-style knowledge with an "I don't know" option: AA-decision score 30.4 -> 39.4 (the model abstains more often when unsure; head-entity abstention 7.6 %). Safety classification on 1,713 fresh Aegis 2.0 test rows (never used for selection): 83.9 % -> 84.2 % (21 better / 14 worse). An earlier soup without the safety fine-tune (same three other components) was audited once on our locked split: composite +1.65 (SE 0.58). These are our own measurements, not official leaderboard results. The model is not ranked on JevBench (SN92 lineage).

Limitations

  • Same input limits and protocol as the base (see upstream README): trained at <= ~12k tokens per request here, base trained at 32k.
  • Lower accuracy on arts/taste-style public benchmarks than the base (-1.8 points on that area).
  • SN92 REAX prompt (one question, fixed temperature 2): revision ea9d5d8b (head x1.41) scored 2.5 points below the base on the competition's calibration draws because it was underconfident there; this revision scales the head by a further 1.4 for that path (native output unchanged). On our pool-like dev split this moves it from -2.2 to +1.3 points (category mean, internal measurement).
  • Abstains ("I don't know") more often than the base on hard knowledge questions; tune the temperature or the abstain option if a task needs forced answers.

Licence and attribution

Apache-2.0. Based on pplx-decider-v1.2 by Perplexity AI and Qwen3.8-27B by the Qwen team; see NOTICE and MODIFICATIONS.md. Not affiliated with, endorsed by, or sponsored by Perplexity AI or the Qwen team.

Downloads last month
3
Safetensors
Model size
26B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for decisionmodels/reax-1

Base model

Qwen/Qwen3.8-27B
Finetuned
(664)
this model
Finetunes
1 model