Determinism first, then latency

The Sgraal preflight gate is deterministic and formally verified (Z3 SMT). The honest cost of running real formal verification inside the gate is ~170ms p50 single-request compute — measured on production, not asserted. In exchange you get a byte-identical, reproducible verdict (N=1,200 runs, zero drift) — something an LLM-judge cannot give at any speed.

Preflight Gate Latency

~170ms

p50 single-request compute

~250ms

p95 single-request compute

~395ms

p99 single-request compute

N=50

samples / path · prod

Measured on production (Railway EU-West) via the server-side pipeline_ms timer — single-request compute for the full 85-module decision path; demo-key dry-run (excludes Redis/persistence), warmed, N=50/path. Fast-path (detection short-circuit) and full-decision are indistinguishable at this resolution. Network round-trip adds client-dependent transit. Production calibration pending paying-customer onboarding.

What pipeline_ms measures

Single-request compute (~170ms p50)

The deterministic preflight gate runs the full 85-module decision path and returns the verdict. The compute time is reported in the pipeline_ms field of every preflight response. Your agent waits for this plus network transit.

No fast/slow split

The detection short-circuit (obvious-attack fast-path) and the full-decision path measure the same at this resolution — the short-circuit gives no measurable compute speedup. There is no separate sub-pipeline that returns earlier.

Per-module breakdown

A per-layer profile (scoring engine vs detection vs analytics) is not yet published — only the end-to-end pipeline_ms total (~170ms p50) is measured. The compact response profile (response_profile: "compact") skips heavy analytics modules but has not been separately benchmarked; treat any lower figure as unverified until measured.

Optimization Tips

Place preflight at action checkpoints

At ~170ms single-request compute, the metered /v1/preflight is best at critical action checkpoints rather than on every inner-loop token. Throughput is single-process and scales with worker count (not yet benchmarked).

Auto-profile selection

informational and reversible actions auto-select compact profile. irreversible and destructive get standard (full pipeline).

Reading pipeline_ms

from sgraal import SgraalClient

result = client.preflight(memory_state=[...])
print(result["_trace"]["duration_ms"])  # pipeline time in ms

Try it now

Try it now — no signup Read the docs