Margin
MARGIN® Get a key

Every claim your model makes, marked against the source it came from.

Margin reads an answer and its retrieved context together, then highlights each assertion by what actually backs it. Supported in green. Stretched in orange. Invented out of nothing in red.

The tray

Four colours, and each one means something.

A grounding score is a number you have to take on faith. A mark is a thing you can point at, argue with, and send to whoever wrote the retrieval.

Grounded

Every token traceable to a retrieved span. Quote it in a report.

Paraphrased

Supported, but reworded far enough that the wording is the model's.

Stretched

A source is adjacent but does not carry the claim as stated.

Unsupported

Nothing in the context says this. The interesting ones live here.

A marked answer

This is what comes back.

The same answer your model produced, with a verdict on every claim. Pick one to read the span it was checked against.

run 4c1f · gpt-class model · 6 retrieved spans 3 grounded · 1 stretched · 1 unsupported

and has supplied the eastern districts ever since. , which is when the current capacity figure dates from.

, and .

On paper

What it catches.

1 in 9claims in a grounded answer are not actually grounded
210 msmedian, for an answer of a thousand tokens
Spanlevel verdicts, not one score for the whole answer
0changes to the model you already run

Invented product, invented figures. Nothing here was measured.

How it works

One call, after the answer exists.

Send both halves

The answer and the spans you retrieved for it. Margin does not need your prompt, your weights or your vector store.

Get claims back

The answer is split into assertions, each with a verdict, a confidence and the span offsets it was checked against.

Mark it up, or gate on it

Render the marks for a human, or fail the response in CI when anything comes back unsupported. Same payload either way.

The payload

Plain JSON, with the pencil marks left in.

Each claim comes back with its verdict, a confidence, and character offsets into the span it was checked against: the spans you sent, not a copy we made.

The run as a whole gets a gate: pass if nothing is unsupported, fail if anything is. Wire that to CI and stop reading.

POST /v1/check → 200 142 ms
{
  "run": "4c1f",
  "gate": "fail",← one red is enough
  "claims": [
    {
      "text": "commissioned in 1936",
      "verdict": "grounded",
      "confidence": 0.97,
      "span": { "id": 2, "start": 118, "end": 171 }
      ↑ offsets into span 2, as you sent it
    },
    {
      "text": "second intake by 2031",
      "verdict": "unsupported",
      "confidence": 0.91,
      "span": null← nothing to point at
    }
  ]
}

Where it goes

Anywhere an answer gets quoted back to you.

If someone downstream will repeat it, whether a customer, a lawyer or a dashboard, it is worth knowing which parts were actually in the source.

for

Support bots

Catch the refund policy the model invented before a customer quotes it back at your team.

for

Research tools

Every citation checked against the document it says it came from, down to the passage.

for

Internal search

Answers about your own wiki, held to your own wiki, not to what the model remembers about companies like yours.

for

Evals

Grounding as a per-claim metric, so a regression points at the sentence that broke instead of a score that dipped.

Margin notes

Questions people write in the margins.

Does it need my prompt, or my model?

No. It reads two things: the answer, and the spans you retrieved for it. Whatever produced them is your business.

What counts as a claim?

Anything that could be true or false on its own. A sentence with three assertions comes back as three claims, each with its own verdict.

Can it be wrong?

Yes, and it says how sure it is. Stretched exists because the line between supported and not is sometimes genuinely fuzzy; better to show you the fuzz than hide it in a score.

Does it keep my documents?

This is a demo of an invented product, so it has nothing to keep. A real one should answer this question in its first paragraph, not its last.

Stop shipping answers you cannot point at.

Send one answer through it and see how much of it survives.

Get a key