Instructions to use frontier-infra/jebadiah-9b-v1 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use frontier-infra/jebadiah-9b-v1 with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3.5-9B-Base") model = PeftModel.from_pretrained(base_model, "frontier-infra/jebadiah-9b-v1") - Notebooks
- Google Colab
- Kaggle
Jebadiah 9B v1
Jebadiah (Jeb for short) is Frontier Infra's open System One style decision model, trained and served with AINode: it answers typed questions with a
probability over the option labels instead of generating text, calibrated per question type when the shipped
temperatures are applied. Three question types, the
same three Jev uses: choice (pick one of N), noul (a yes or no statement, returned as P(yes)) and
score (place the state on an ordered rubric). It is trained with AINode's trainer on public data only
and served by AINode's /v1/decide and /v1/systemone routes on any NVIDIA GPU. The routes answer Jev's
three question types; the request schema is AINode's own (documented on the route), not Jev's exact wire format.
This repository holds the v1 9B adapter: a LoRA on Qwen/Qwen3.5-9B-Base (pinned revision 68c46c4b),
one epoch over 14,900 public training questions, trained on one H100 PCIe in 116 minutes.
v1 changes two things against v0: score questions train
towards an ordinal target around the human label with the temperature fitted on that target, and the pool
carries two licensed human-rubric sources (HelpSteer2 train, SummEval). v1 is a fixed version; newer versions
are published as new repositories and never replace this one.
Made in Texas.
Read this first. Served through AINode today, /v1/systemone and /v1/decide return the model's raw distribution; the per-type temperatures in temperatures.json are applied offline in every calibrated number on this card (AINode issue 276 tracks applying them on the route). To reproduce the numbers, or to get the calibrated answer yourself, use the standalone script in scripts/ (below).
Namespace note: published under jbrashear on 2026-09-22 and moved to the frontier-infra organization on 2026-09-23; the old URLs redirect. The version is unchanged.
Results
Measured by us with AINode's bench, one logit read per question, the same rendered prompt for every model. Accuracy is the share of questions whose top label is the human label. Decision Score is Jevals' metric: 100 = perfect, 0 = guessing the label base rates, below 0 = worse than that. These are our numbers on the public suites, not rows on the Jevals board. Headline (macro over the zero-shot public sets): 73.3 (v0: 72.5).
| Set (questions) | Type | Accuracy | Floor (majority label) | Decision Score (Jevals) | ECE, temperatures applied | Flips over identical repeats |
|---|---|---|---|---|---|---|
| Jevals PubMedQA (300) | noul | 89.7 | 62.0 | 66.8 | 0.032 | 0.0% |
| Jevals Banking77 (300, 77 options) | choice | 70.0 | 1.3 | 56.9 | 0.072 | 0.7% |
| Jevals HelpSteer2 helpfulness (300, 5 levels) | score | 40.3 | 41.7 | 11.9 | 0.045 (raw 0.030) | 0.3% |
| Nimble held-out eval (324) | mixed | 78.7 | 17.6 | 65.0 | 0.063 | 0.3% |
| Kev transfer-v4 test (764) | mixed | 84.0 | 21.5 | 67.0 | 0.023 | 0.0% |
| Kev decision-v7 test (1,440) | mixed | 80.8 | 20.3 | 70.6 | 0.048 | n/a |
| typed-decisions test (2,000) | mixed | 78.9 | 15.3 | 56.4 | 0.165 | 0.1% |
Nimble's 13 public human-labelled subsets (3,880 questions), macro accuracy: 77.0 (per subset: aegis2 79.2, boolq 85.7, civil_comments 86.7, helpsteer2 41.0, massive-de-DE 84.9, massive-en-US 85.7, multinli 87.6, paws 85.6, pubmedqa 68.8, squad2 80.3, summeval-consistency 87.5, summeval-relevance 51.7, vitaminc-dev 76.3). For scale, Bespoke's published table puts Nimble-9B at 74.8 and Jev at 76.0 on the same subsets with their scorer.
Two things to read carefully. HelpSteer2 and SummEval are no longer zero-shot for Jeb: v1 trained on the HelpSteer2 train split (the Jevals and Nimble items come from validation, and no item overlaps) and on SummEval articles that Nimble does not score (its 15 evaluation articles are held out entirely), so those rows are held-out items of a seen rubric. And the in-distribution score set (typed-decisions) gives back a few points of Decision Score against v0, the cost of honest calibration on human rubrics.
Every eval record (per question: option keys, probabilities, pick, label, repeat, option order) is in
eval/, with eval/results.json carrying the full metric set.
Robustness to irrelevant content (nonce test)
Every question on the four head sets was scored once clean and three more times with a fresh UUID planted
in the state (state) or appended to the instructions (instr). Records are in eval/nonce/.
| Set | Pick agreement (state / instr) | Questions with any flip (state / instr) | Mean change of p_max, points (state / instr) |
|---|---|---|---|
| Jevals PubMedQA | 97.8% / 99.2% | 3.0% / 1.7% | 1.1 / 0.7 |
| Jevals Banking77 | 96.6% / 98.8% | 4.3% / 2.3% | 2.2 / 1.6 |
| Jevals HelpSteer2 | 91.8% / 95.9% | 10.0% / 8.0% | 0.9 / 0.6 |
| Nimble 324 | 98.4% / 99.0% | 2.8% / 2.2% | 0.8 / 0.9 |
Choice and yes/no answers are close to immune. On score questions v1 flips its top level more often than
v0 while moving its probabilities far less: a calibrated rubric model sits honestly between adjacent
levels, so a small nudge tips the argmax. Read the expected level and the probabilities (which is what the
route returns as score), not the top pick, for rubric questions.
How it decides
Which temperature fit, and why. temperatures.json carries two fits on the calibration split (689 records, 921 questions: choice 225, noul 147, score 549). The hard fit minimises NLL against the argmax label and sharpens (T 0.73 / 0.87 / 0.81). The train fit minimises NLL against the training target, the soft or ordinal distribution the model was taught, and softens (T 1.13 / 1.26 / 1.18). v1 applies train, because the ordinal target is what makes rubric probabilities honest, and the hard fit is exactly the sharpening that made v0's HelpSteer2 calibration worse. The price is visible in the same file: on the calibration split measured against hard labels, ECE moves from 0.092 to 0.094 (choice), 0.090 to 0.114 (noul) and 0.078 to 0.107 (score) while NLL on the training target falls. The ECE column in the results table is measured on the evaluation sets, not on this split, with the applied temperatures. Both fits are in the file; a consumer who gates on the argmax may prefer hard, and either way should refit on its own data.
The prompt is AINode's own decide rendering (ainode.api.decide.build_messages, source commit
e5c08938, prompt_source_sha256 in prompt_contract.json), through the base chat template with
thinking off. The option labels are single tokens; the model's answer is the distribution over those label
tokens at the last prompt position, read in fp32 from the last hidden state and then temperature scaled
per type (temperatures.json: choice 1.13, noul 1.26, score 1.18). Nothing is generated.
The supported way to run it is AINode, which renders the prompt exactly as trained (a worked
/v1/systemone request and response is in the AINode docs issue tracker until the page lands):
curl -sS https://<your-ainode>/v1/systemone -H "Authorization: Bearer <key>" -H "Content-Type: application/json" -d '{
"model": "frontier-infra/jebadiah-9b-v1",
"state": {"ticket": "Customer says the invoice total does not match the quote."},
"questions": {
"route": {"type": "choice", "instructions": "Which team should take this ticket?", "criteria": {"billing": "an invoice, a charge or a refund", "support": "a product question", "sales": "a quote or a renewal"}},
"urgent": {"type": "noul", "instructions": "The customer is blocked from working.", "criteria": {"true": "work has stopped", "false": "it can wait"}}
}
}'
Standalone, reproducible
scripts/ in this repository carries the trainer's own copies of the renderer and the logit read: ainode_prompt_verbatim.py is AINode's decide rendering copied verbatim from getainode/ainode at e5c08938 (its sha256 is the prompt_source_sha256 in prompt_contract.json), jebadiah_prompt.py turns a /v1/systemone question into that prompt with single-token labels, jebadiah_model.py reads the label-token logits at the answer position in fp32, and decide_standalone.py runs one request end to end:
pip install torch transformers==5.17.0 peft==0.21.0 huggingface_hub
huggingface-cli download frontier-infra/jebadiah-9b-v1 --local-dir jeb
python jeb/scripts/decide_standalone.py --base Qwen/Qwen3.5-9B-Base --revision 68c46c4b3498877f3ef123c856ecfde50c39f404 \
--adapter jeb --request jeb/scripts/example-request.json # add --no-temperatures for the raw distribution
It prints the answers in the route's shape (choice: choice, confidence, probabilities; noul: noul = P(true); score: score, legend, probabilities) plus the temperatures it applied. Runs on CPU too (slow, minutes per request without the DeltaNet kernels), which is how it was checked before publishing.
Thresholds belong to the caller: act on a high probability, confirm or escalate on a middle one, hand a low one to a person or a bigger model. The model never refuses; policy is built from decisions.
Training
- Objective: cross-entropy over the candidate option-label logits at the answer position. Choice and noul use the source's gold distribution where it provides one (typed-decisions) and the hard label otherwise; score questions use an ordinal kernel around the human label (adjacent level 0.2 of the label's weight), and the score temperature is fitted on that same target.
- Adapter: LoRA r=16, alpha=32, dropout 0.05 on every linear projection including the Gated DeltaNet projections, 43.3M trainable parameters. bf16, SDPA attention, micro-batch 8, learning rate 1e-4, one epoch, 1,862 steps, gradient checkpointing.
- Data (public only), 15,813 questions in the pool:
LocalLLaMA/typed-decisionstrain (Apache-2.0, revisionea930645); the Kev v7 training sources whose licenses permit derived weights (BoolQ, MNLI, DBpedia14 and Kev's contrastive and composition sets, Kev suites revisiona88f56db);nvidia/HelpSteer2train split (CC BY 4.0, 2,573 score questions: helpfulness in the Jevals task's exact shape for 1,609 rows, plus correctness, coherence, complexity and verbosity on 241 of them); SummEval (MIT, viamteb/summeval, 1,664 score questions over four dimensions on 26 articles, with Nimble's 15 evaluation articles excluded). 95/5 family split into 14,892 training records and 689 calibration records (921 calibration questions). Nimble's train set is excluded (no license stated); the Jevals test items are excluded from training. No private data of any kind. - Compute: one NVIDIA H100 PCIe 80 GB, 116 min training, 26 min evaluation, torch 2.11, PEFT 0.21.
Limitations
- Single-hop judgments only. Split a chain of inference into hops.
- AINode caps a choice question at 20 options; Banking77's 77 options were scored with an extended single-token alphabet for the benchmark only.
- English data, plus Massive's German subset scoring well by accident of the base model.
- Calibration was fitted on the training distribution. Refit the temperatures on your own data before trusting a threshold, and remember the served route applies none yet.
Versioning and license
v1 is frozen. Later versions land as jebadiah-<size>-v<N> repositories. The adapter is Apache-2.0,
the base model is Apache-2.0. Evaluation data: Jevals suite 0.1.0 (CC-BY-4.0, "Jevals (jevals.com),
release 2026-09-18"), Nimble public subsets (Bespoke Labs), Kev test sets and typed-decisions test,
each under its own license.
- Downloads last month
- 8
Model tree for frontier-infra/jebadiah-9b-v1
Base model
Qwen/Qwen3.5-9B-BaseDatasets used to train frontier-infra/jebadiah-9b-v1
mteb/summeval
LocalLLaMA/typed-decisions
Evaluation results
- accuracy on Jevals suite 0.1.0, PubMedQA (noul)self-reported89.700
- decision_score_jevals on Jevals suite 0.1.0, PubMedQA (noul)self-reported66.800
- accuracy on Jevals suite 0.1.0, Banking77 (choice, 77-way)self-reported70.000
- decision_score_jevals on Jevals suite 0.1.0, Banking77 (choice, 77-way)self-reported56.900
- decision_score_jevals on Jevals suite 0.1.0, HelpSteer2 helpfulness (score)self-reported11.900
- accuracy on Nimble public human-labelled subsets (13, macro accuracy)self-reported77.000