TyrusRC/haruspex

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.

  • Base: fastino/GLiNER2.5-Decide.
  • Added: a typed decision contract, security specialization data, and a split-conformal selective-calibration layer (accept/abstain against a risk budget).
  • Serves the TypeSafe POST /v1/systemone and native /v1/evaluate contracts.

Intended use (security, both sides)

  • Offensive (pentest / red-team): is this template/probe relevant to the target? is this scanner hit a real finding? finding severity; verdict discipline (vulnerable / not-vulnerable / inconclusive); attack-path next step.
  • Defensive (SOC / blue-team): alert triage (true vs false positive), alert severity/priority, detection-rule applicability, incident routing, CVE applicability.

It is a classifier for bounded decisions โ€” not a chatbot, not an exploit generator.

Use

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

Calibration

Fitted calibrator: accept threshold 0.0, target risk 0.2, coverage 1.0 (n=116).

Evaluation

On a 156-row held-out split of the security pack (recipe selected on a separate calibration split, never on test): accuracy 0.8718, ECE 0.1076, Brier 0.1071. 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.

Limitations

  • A specialist for the decision types above; novel free-form judgments belong to a general LLM.
  • Calibrated on the training mix โ€” recalibrate for a very different domain.
  • Prediction SETS (not just abstention) await a GLiNER2 fix for per-label scores.

Apache-2.0. Repo + recipe: https://github.com/TyrusRC/haruspex

Downloads last month
62
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for TyrusRC/haruspex

Finetuned
(12)
this model

Evaluation results