Reviews decisions.
Returns a probability, not a paragraph.
A small open model that answers typed questions about any JSON state in tens of milliseconds. No generated text, no output tokens, no JSON to parse. Train it on your own rows with one command.
Get the code and weights Read the docs
Three question types. That is the whole API.
ChoicePick one of N named options. Returns a probability per option.
ScorePlace on an ordinal rubric. Returns a distribution over levels.
NoulYes or no, with a calibrated probability you can threshold.
One call
from openauditor import OpenAuditor, Choice, Noul, Score
auditor = OpenAuditor.from_pretrained("artifacts/model", device="cuda")
result = auditor.review(
{"message": "Our payment integration is down and customers cannot check out."},
{
"team": Choice("Which team should own this?", {"billing": "Payments", "technical": "Outages"}),
"urgent": Noul("Does this need urgent attention?"),
"frustration": Score("How frustrated is the customer?", ["calm", "frustrated", "very frustrated"]),
},
)
# team: {"billing": 0.04, "technical": 0.96} urgent: 0.91 frustration: {"0": 0.02, "1": 0.31, "2": 0.67}
Also a CLI (openauditor infer), a local HTTP server (POST /v1/review), and a training pipeline that takes JSONL rows of state, questions and targets.
What it is good for
- Routing and classification on labeled data. Which team, which queue, which intent, which category.
- Any place you ask a chat model for one word back. Triage, tagging, "is a refund requested", "should the agent act now".
- Reviewing every agent action. Cheap enough to run on every step instead of a sample, with a probability attached.
- Probabilities you can threshold. Proper-scoring training and validation-only calibration, so 0.83 means something on the data you trained on.
What it is not
- It does not generate text, explain itself, or fill tool-call arguments. It picks, scores and gates.
- It does not generalize to instructions it was not trained on. Unseen policy tasks are its weakest measured area.
- It is not TypeSafe's Jev, not a reproduction of RLCD, and not demonstrated parity. It is inspired by that idea and built in the open.
Measured, not claimed
Results for the v0.3.0 public-data checkpoint are being finalized. The full evidence report, with calibration, ablations and every failure, ships with the release.
Inside
Qwen3-0.6B with two learned graph bridges inserted after decoder layers 9 and 18: sixteen latent nodes read the prompt, form a sparse directed graph, run two rounds of message passing, and write back into the decision token. Rank-16 LoRA and the bridges train jointly and merge into one checkpoint. Trained on public and synthetic data only; no chat or session transcripts.
Install
gh release download v0.3.0 -R erphq/openauditor -p openauditor-model.tar.gz -p SHA256SUMS -D artifacts
cd artifacts && shasum -a 256 -c SHA256SUMS --ignore-missing && tar -xzf openauditor-model.tar.gz && cd ..
pip install -e .
openauditor infer --model artifacts/model --request examples/request.json