Make the decision explainable
Which model ran is the easy question. What an audit actually asks is which instruction text and which rule caused it. The decision trace holds that — including the rules that matched and lost.
- A decision digest under 512 bytes in the response header
- The full trace by
requestId - Rules that matched and lost are recorded too
< 512Bdecision digest header
An audit trail should say why, not just what
Logging the model and the rule name is easy. What an auditor asks is: what was the instruction text that produced this answer, which rule won, which rules matched and lost, and which signals the decision looked at. The decision trace keeps all four together; a system that keeps two of them is no use in an audit.
What it does
Decision digest header
Every response carries a summary under 512 bytes in the Modelion-Decision header, so your application never has to query the decision separately.
The full trace
Fetched by requestId: signals, the layers evaluated, the winning and losing rules, the obligations enforced.
Cost breakdown
Tokens, latency and cost, sliceable by virtual key, model, prompt version and combo.
Conversation logs
End-to-end conversations are retained and can be reviewed across the team through a shareable link.
Divergence report
Decisions produced in shadow mode are compared against current behaviour; the agreement rate and the diverging requests are listed.
Standard telemetry
OpenTelemetry traces, Grafana dashboards, Tempo and Loki. It flows into your own observability stack.
The answer to "why did this model produce this answer?"
A decision trace keeps not only the winning rule but the ones that matched and lost. In an audit, that is the actual question.
4.8M
sliceable by virtual key812 ms
policy + routing + provider31.4%
semantic, org-scoped$6,240
token-based, liveRequest volume and p99 latency
Last 24 hours
Model mix
gpt-4o-mini42%llama-3.3-70b27%claude-sonnet-419%gpt-4o12%
Decision traces
decision_traces| Time | Winning rule | Effect | Model | Latency | Cost |
|---|---|---|---|---|---|
| 14:22:07 | kvkk-pii-route-resident | route | gpt-4o-mini | 812 ms | $0.0021 |
| 14:22:07 | default-allow-with-cache | cache hit | — | 41 ms | $0.0000 |
| 14:22:06 | free-tier-constrain | constrain | llama-3.3-70b | 394 ms | $0.0003 |
| 14:22:05 | regulatory-data-deny | deny | — | 6 ms | $0.0000 |
| 14:22:04 | long-context-upgrade | route | claude-sonnet-4 | 1 284 ms | $0.0184 |
The Modelion-Decision header
Every response carries a decision digest under 512 bytes. The full trace is fetched by requestId.
The demo on this page runs in your browser; no real gateway call is made.
How it works
The recording path is not on the request's critical path; telemetry is written asynchronously.
- 1
The decision is produced
The evaluation result is collected in memory along with the winning and losing rules.
PDP output - 2
The digest is written to the header
The sub-512-byte digest returned with the response lets the client see the decision immediately.
Modelion-Decision - 3
The full trace is stored
Written asynchronously to the analytical store; queryable, with retention set per organization.
decision_traces - 4
Billing and budget are fed
The usage record is processed consistently with the double-entry ledger; estimate and invoice stay separate.
ledger · usage
Technical summary
- Decision digest
Modelion-Decisionresponse header, < 512 bytes- Full trace
- Fetched by
requestId - Recorded fields
- Signals · layers · winning rule · losing rules · obligations
- Cost breakdown
- Virtual key · model · prompt version · combo
- Telemetry
- OpenTelemetry · Grafana · Tempo · Loki
- Analytical store
- Columnar, queryable
- Conversation logs
- Shareable-link support
- Divergence report
- Agreement rate and diverging requests in shadow mode
What it costs to keep the losing rules
Logging only the winning rule takes less space and less time. But in an audit, "why was this request not refused" comes up at least as often as "why was it refused", and the answer lives only in the list of rules that matched and lost. So the trace keeps the decision along with the alternatives that came close to being it.
The rest of the control plane
This capability works on its own, but most of its value comes from sharing one decision contract with the others.
See it on your own traffic
In a 30-minute session we run your own rule set in shadow mode.