Introduction

Introduction

Conformal Logit Inference (CLI) turns the raw output of any LLM — a generated-token log-probability, a sampled answer, a judge’s verdict, a hidden-state activation — into a finite-sample statistical guarantee. It is not a model. It is a calibration and decision layer that sits between the model you already use and the code that has to act on its output.

CLI ships three engines:

  • Conformal prediction — prediction sets, intervals, and risk-controlled decisions with a marginal or group-conditional coverage guarantee.
  • Venn-Abers calibration — probability intervals [p0,p1][p_0, p_1] with a formally proven calibration guarantee, instead of heuristic confidence scores.
  • E-values — anytime-valid drift monitors, safe optional stopping, and false-discovery-rate control that survives arbitrary dependence between simultaneous decisions.

All three require only one assumption: that your calibration data is exchangeable with the production traffic the guarantee is meant to cover. None of them require the underlying model to be accurate, unbiased, or trained any particular way — a worse model only produces bigger sets, wider intervals, or more escalations, never an invalid guarantee.

Where to start

If you want toRead
Make a first guaranteed callQuickstart
Understand the one assumptionExchangeability
See the math behind each engineThe three engines, Venn-Abers, E-values
Pick a primitivePrimitives
Follow an end-to-end scenarioGuides
Connect your modelBackends, Provider connections
Use the hosted service: keys, limits, jobsHosted API
See what happened on every requestObservability, Events API, OTLP
Set up a team, roles and SSOOrganizations and SSO
Test without provider keysTesting without keys
Read a guarantee cardGuarantee reference
Run everything inside your own networkSelf-hosting
Handle failuresErrors and retries

Two ways to run it

  • The hosted service at https://cci.gitdate.ink/api/v1. You bring your own provider key, stored as an encrypted connection, or your own model through a CustomBackend; the service keeps calibration profiles, runs calibration jobs, monitors and audits, and records a trace of every request. Authenticate with a cci_live_... API key.
  • Local mode in your own process: LocalCLIClient runs the same statistics engine against a model you bring, with profiles stored as files, and the offline engine needs nothing but NumPy.

The seven primitives

PrimitiveReturnsGuarantee
BeliefA Venn-Abers probability interval for one statementVenn-Abers calibration
SetA set of optionsCoverage ≥1−α\ge 1-\alpha
IntervalA conformalized ordinal or continuous intervalCoverage ≥1−α\ge 1-\alpha
Gateauto_approve or escalateRisk ≤\le target, risk ≤\le target with probability ≥1−δ\ge 1-\delta, or FDR ≤\le target
ClaimLong-form output filtered to supported claimsP(all retained claims true)≥1−αP(\text{all retained claims true}) \ge 1-\alpha
JudgeA verdict, with an escalation cascadeHuman agreement ≥1−α\ge 1-\alpha on non-escalated verdicts
RouteWhich backend in a cascade served the requestCost budget or accuracy bound

Every guarantee in the table is marginal (averaged over exchangeable data) or group-conditional (averaged within a declared group). None is a promise about one individual decision.

Design principle

CLI never returns a guarantee it cannot back. Every primitive requires a calibration profile, and a profile with too few labelled examples for the requested α\alpha serves a heuristic-labelled answer instead of silently under-covering. The SDK makes that visible (answer.is_heuristic) and can refuse it outright (CLIClient(strict_guarantees=True)). Each profile calibrates exactly one query against one backend: a different backend on a strict profile fails closed rather than borrowing a calibration it was not built on. See Guarantee reference for the exact schema and Calibration profiles for the lifecycle.