Instructions to use jbarney/circuit-8b with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use jbarney/circuit-8b with PEFT:
Task type is invalid.
- Notebooks
- Google Colab
- Kaggle
circuit-8b
A System One decision model: typed questions in, calibrated probability
distributions out, one forward pass, no text generation. It speaks
TypeSafe's POST /v1/systemone contract and is the larger open-weights
backend for decision-circuits. The small
one is circuit-1.7b.
circuit-8b is a LoRA adapter plus a pointer readout head on
Qwen/Qwen3-8B-Base. A request packs a state and a question; each option
is wrapped in delimiter tokens and the sequence ends with a decide token.
The head scores every option's closing delimiter against the decide token
and applies softmax. Those probabilities are the answer, trained with
cross-entropy against outcome labels, so calibration is learned rather
than derived.
Results
Same items for every model, human labels, accuracy / ECE (15 bins).
| cold eval (1,200 items) | MultiNLI | SMS spam | Civil toxicity | CLINC 151-way |
|---|---|---|---|---|
| Jev (TypeSafe, API) | 88% / 0.04 | 96% / 0.05 | 82% / 0.06 | 90% / 0.05 |
| Bespoke-Nimble-9B | 84% / 0.09 | 91% / 0.06 | 86% / 0.08 | not supported (26-option cap) |
| kev-0.5b | 46% / 0.28 | 50% / 0.30 | 62% / 0.16 | 62% / 0.17 |
| circuit-1.7b | 81% / 0.09 | 98% / 0.02 | 90% / 0.16 | 86% / 0.06 |
| circuit-8b | 86% / 0.08 | 98% / 0.02 | 93% / 0.14 | 95% / 0.03 |
The four cold-eval tasks' train splits are in this model's training mix; they are presumably not in Jev's. Checks nothing was trained on:
| out of distribution | Jev | Nimble-9B | kev-0.5b | circuit-1.7b | circuit-8b |
|---|---|---|---|---|---|
| 100 water-utility calls, 11-way (Barney 2025) | 98% / 0.02 | 93% / 0.05 | 80% / 0.13 | 92% / 0.08 | 93% / 0.05 |
| generalization grid, 9 operations x 6 formats, code-labeled | 95% | 85% | 48% | 97%* | 98%* |
| ClassicMiniDIY typesafe-bench, 546 production questions (agreement with Jev / ECE) | 1.0 by definition | 0.84 / 0.05 | 0.49 / 0.11 | 0.70 / 0.05 | 0.84 / 0.04 |
* the grid generator is ours, so this is held-out items, not held-out structure. With the 1.7B recipe, an operation and a format withheld scores 91% on the unseen format and 57% on the unseen operation: layouts transfer, new kinds of judgment must be in the training data.
Known weakness shared with every model above, Jev included: on inputs built to be undecidable, mean confidence is 0.5 to 0.85 where it should be near 0. Calibration on ambiguity is the open problem.
Throughput on one RTX A6000 (48 GB), bf16, batch 8: 72 ms per grid item, about 2,100 input tokens per second. On the 546 production questions (longer states) it is 198 ms per item.
Training
- Base:
Qwen/Qwen3-8B-Base(Apache 2.0), frozen. LoRA rank 16, alpha 32, on all attention and MLP projections (43.7M params). Pointer head: two 4096 x 256 linear maps. - Data, 16,738 items, the same mix as circuit-1.7b: every label computed by code or by humans, every source permissive (CC BY / CC0 / MIT / Apache). The generalization grid (8,100 + 838 oversampled ambiguous items with soft 0.5 labels), a commercial-safe slice of public classification tasks (2,100), and CC-licensed real data (MNLI, civil_comments, sms_spam, CLINC; 5,700). No teacher-model outputs.
- 1 epoch, batch 4, max 1,024 tokens, lr 1e-4 (LoRA) / 1e-3 (head), bf16 with gradient checkpointing, soft-target cross-entropy, early stopping on validation ECE (best at step 2,800: ECE 0.014, accuracy 92.8%). 75 minutes on one RTX A6000.
- Training code, data generators, and the evaluation harness: github.com/Barneyjm/circuit.
Use
Serve it with the circuit repo and point any System One client at it:
S1_MODEL=lora:runs/circuit-8b uv run python -m s1proto # :8901
from decision_circuits import Circuit, Q, argmax
from decision_circuits.backends import SystemOne
c = Circuit()
c.noul("pii", "Does the message contain personal information?")
c.choice("dept", "Which team?", {"billing": None, "technical": None, "other": None})
c.gate("redact", Q("pii") >= 0.7, on_uncertain="escalate")
c.gate("route", argmax("dept", min_confidence=0.35))
out = c.run(SystemOne("http://localhost:8901/v1/systemone", api_key="x"), "Card charged twice, my card ends in 4412")
Files: adapter/ (PEFT LoRA), head.pt (pointer head, keys q.weight, k.weight),
config.json (base, hidden size, head type, layout, training args).
The base needs about 17 GB in bf16; set "load_4bit": true in config.json
and the server loads it in 4-bit (bitsandbytes NF4), which fits a 12 GB card.
Intended use and limits
Research and evaluation of calibrated decision models, and as a local backend for decision circuits. Not a production system for decisions that affect people. English only. Confidence on undecidable inputs is not yet reliable (see above); put thresholds inside an uncertainty band and route the band to a human, which is what decision-circuits does.
License
Adapter and head: Apache 2.0. Base model: Qwen license (Apache 2.0 for Qwen3).
- Downloads last month
- -
Model tree for jbarney/circuit-8b
Base model
Qwen/Qwen3-8B-Base