Loading…
Loading…
Haruspex is a small, local decision layer for security operations. It reads a situation and returns a calibrated typed verdict — boolean (yes/no + probability), choice (pick one option), score (rate on a rubric) — and abstains when it is not confident enough for your risk budget.
Haruspex reuses the published decision encoder
fastino/GLiNER2.5-Decide (Apache-2.0, non-autoregressive, CPU/GPU) and
specializes it on security decisions. It does not train a decision model from scratch.
fastino/GLiNER2.5-Decide.POST /v1/systemone and native /v1/evaluate contracts.It is a classifier for bounded decisions — not a chatbot, not an exploit generator.
from haruspex import Haruspex
m = Haruspex.load("TyrusRC/haruspex", device="cuda") # or "mps" / "cpu"
print(m.decide({"type":"boolean","state":"Target: WordPress 6.2, PHP 8.1",
"question":"Is a WordPress xmlrpc.php template relevant?",
"criteria":{"true":"WordPress target","false":"not WordPress"}}))
Or serve the decision API (keyless, self-hosted):
pip install "haruspex[serve] @ git+https://github.com/TyrusRC/haruspex"
haruspex-serve --model TyrusRC/haruspex --port 3000 # POST /v1/systemone · /v1/evaluate
Fitted calibrator: accept threshold 0.0, target risk 0.2, coverage 1.0 (n=98).
On a 132-row held-out split of the security pack (recipe selected on a separate calibration split, never on test): accuracy 0.8864, ECE 0.0918, Brier 0.0905. The adapter beats a prompted general 8B model on the same set at a small fraction of the parameters; see the repo's docs/benchmark.md comparison card.
A split-conformal selective layer gates each verdict: it accepts when the top-1
confidence clears a threshold fitted to hold the error AMONG accepted items at a target
risk, and abstains otherwise. Fit it with python -m haruspex.calibrate; evaluate
coverage/risk with python -m haruspex.eval.
Apache-2.0. Repo + recipe: https://github.com/TyrusRC/haruspex
fastino/GLiNER2.5-Decide