Factuality
Factuality compares a submitted answer with an expert (expected) answer and classifies their relationship as subset, superset, equivalent, disagreement, or a difference that does not affect the facts. It is the autoevals Factuality evaluator, answered by Jev as a five-way choice with a probability per option.
What the evaluator does
Jev sees the input question, the output and the expected answer, and picks one of five options A–E. The option maps to a score the same way autoevals does (A 0.4, B 0.6, C 1.0, D 0, E 1.0). Because it is a Choice, you also get the full probability distribution, so a 55/45 split between “subset” and “equivalent” is visible instead of hidden behind a single letter.
Compare the factual content of `output` with `expected`. Ignore style. Select the option that best describes the relationship.
The question, verbatim
This is the question the API sends for the example below, generated from the same code path the playground and API use. Jev sees the request fields as state and returns a probability for each outcome. Nothing is generated, so there is nothing to parse.
Compare the factual content of `output` (the submitted answer) with `expected` (the expert answer) for the question in `input`. Ignore differences in style, grammar, or punctuation. Select the option that best describes the relationship.
- AThe submitted answer is a subset of the expert answer and is fully consistent with it.
- BThe submitted answer is a superset of the expert answer and is fully consistent with it.
- CThe submitted answer contains all the same details as the expert answer.
- DThere is a disagreement between the submitted answer and the expert answer.
- EThe answers differ, but these differences don't matter from the perspective of factuality.
Reach for it when
- You have a reference answer and want to know whether the model's answer agrees with it, not whether it is worded the same.
- Regression testing an assistant against a golden set where partial answers should score differently from wrong ones.
- You need to separate “said less than the reference” from “said something different”.
Not the right tool when
- No reference answer exists (use answer_relevancy or llm_judge with criteria).
- The reference is a long document rather than an answer (use faithfulness with the document as context).
- You need exact-string agreement (use exact_match or levenshtein, which are free).
Watch out for
- Option E (“differ but doesn't matter”) can absorb subtle numeric changes if the question does not make precision matter; state units and precision in the input.
- Very long expected answers make “subset” the default; keep references tight.
- A superset can still contain an error; pair with faithfulness when the output adds detail.
What to send
score mapped from the chosen option, label = option key, confidence, a probability per option, passed by option.
{
"evaluators": [
"factuality"
],
"input": "What are Jev's rate limits?",
"output": "1,200 requests per minute.",
"expected": "250,000 tokens per second and 1,200 requests per minute."
}Option A (subset): the output is consistent with the reference but omits the token-rate limit. Score 0.4.
Aggregate with
One result per item is a fact; a dataset of them is a metric. These are the aggregations that fit this evaluator's output shape.
Accuracy is the share of items the evaluator got right.
A confusion matrix counts, for a binary or multiclass check, how often each true label was predicted as each label: true positives, false positives, false negatives and true negatives.
Mean score averages the normalised 0–1 score across items.
- What does Factuality return?
- One of five options (A–E) with a probability for each, a confidence, and a mapped score: A 0.4, B 0.6, C 1, D 0, E 1.
- Is jeval's Factuality the same as autoevals Factuality?
- Same options, same score weights and same intent. The difference is the answer comes from Jev as a calibrated distribution in one request instead of an LLM completion.