Inferify records every decision your model makes and signs it. Because we sign it and not you, the record still means something when a regulator asks a year later.
$ pip install inferify
Apache 2.0 · no dependencies ·
source
AI now makes decisions that get audited, disputed, and litigated. When one is challenged, the proof gets reconstructed months later from scattered logs that were written for debugging, not for evidence.
A regulator, a lawyer, or a customer asks what the model did on one specific case. Nothing in the stack was designed to answer that.
Stitching a timeline together from logs, dashboards, and deployment records is slow, costly, and impossible to prove was never edited.
Accuracy stays green while the one inference that mattered ran outside the conditions the model was ever validated for.
No pipeline rewrites, and no second data plane to operate. Wrap the prediction you already make.
Inferify hashes the input, then records the model version, output, confidence, and timestamp as a structured record. Raw inputs never leave your environment. Only the fingerprint is stored.
Each inference is checked against the envelope the model was validated inside. Inside, the record is sealed VALID. Outside, it is FLAGGED with the reason, returned to your code inline so you can escalate before the decision ships.
Each record hashes its contents together with the hash of the record before it. Any window exports as a signed package an auditor verifies independently.
import inferify verdict = inferify.capture( model="novadx-v2.3.1", input=xray_512, output={"pneumonia": 0.91}, confidence=0.91, ) if verdict.regime != "VALID": escalate(verdict) # inf_a3f921 sealed in 0.7ms # prev 9c1e77be0c4a... chained
Every field an auditor asks for, captured at the moment of the decision rather than reassembled after it.
Every model is validated inside a fixed operating envelope. The moment an input drifts outside it, a new scanner resolution, a rare presentation, a version still running in production, your dashboards keep reading green. That blind spot is structural, and it is exactly where unaccountable decisions live.
Inferify runs alongside the monitoring you already have. It owns the per-decision record those dashboards were never built to produce.
| Capability | Monitoring | Logging | Manual audit | Inferify |
|---|---|---|---|---|
| Per-decision record | ✗ | partial | partial | ✓ |
| Regime verdict at decision time | ✗ | ✗ | ✗ | ✓ |
| Tamper-evident and hash-chained | ✗ | ✗ | ✗ | ✓ |
| Independently verifiable export | ✗ | ✗ | partial | ✓ |
| One-line integration | partial | ✓ | ✗ | ✓ |
Diagnostic and triage models facing FDA documentation and clinical liability.
Underwriting and fraud models under fair-lending rules and model-risk governance.
Models that must justify each individual call to a regulator or a policyholder.
Decision and agent systems where a customer dispute demands a paper trail.
Inferify stores a SHA-256 fingerprint of each input, never the raw image, document, or record. Verification works entirely on hashes.
Deploy inside your own cloud account or on premise. The evidence chain never has to cross your network boundary.
Exports are self contained. An auditor recomputes the chain with standard SHA-256 and confirms integrity without touching our systems.
Every checkpoint receipt is signed with this Ed25519 key. Verify a receipt against it and you do not need our permission, our cooperation, or our continued existence. It is published here so that if the key ever silently changed, you would see it.
A free tier to seal your first model, then a platform fee per production model plus usage on the inferences you record.
No credit card on the free tier. Every plan exports the same verifiable bundle.
Because they answer different questions. FLAGGED is the model's verdict at decision time: this inference ran outside the validated envelope. Chain intact is the auditor's verdict: nobody edited history. A flagged record is a truthful, permanent record of a risky decision, and it has to stay sealed, otherwise you could not prove the flag ever happened. The chain only breaks when a record's contents are altered after the fact.
Each record hashes its own contents together with the hash of the record before it. Altering any field of any past record changes that record's hash, which breaks the link every later record depends on. You cannot quietly edit history. You can only produce a chain that no longer reproduces. Edit a value in the console above and watch it happen.
Capture is a hash and a structured write. Measured on a 512x512 input, the call returns in 0.69 ms at p50 and 1.25 ms at p99, and a single shard sustains about 626 records per second. The write runs off the critical path by default, so your inference latency is unchanged. The regime verdict is available synchronously when you want to gate on it.
No. Inferify records a SHA-256 fingerprint of the input, not the input itself. In VPC and on-premise deployments the entire chain stays inside your network.
From the conditions your model was actually validated under: input schema and resolution, distributional bounds, confidence thresholds, and the approved model versions. You configure it once per model, and Inferify checks every inference against it.
No. Monitoring answers how the system is doing in aggregate. Inferify answers what happened on one specific decision, and proves the answer. They sit side by side.
Anything you can call from Python or TypeScript. Inferify wraps the prediction call, so it is framework agnostic and does not care whether you serve with PyTorch, ONNX, a hosted API, or your own runtime.
Start proving it. Seal your first model on the free tier, no credit card.