--- license: apache-2.0 base_model: - perplexity-ai/pplx-decider-v1.2 - Qwen/Qwen3.8-27B base_model_relation: finetune library_name: pytorch pipeline_tag: text-classification tags: - decision-model - classification - custom-code - noncausal - joint-questions - sn92 --- # 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": {"": {"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**): ```python 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.