Recipe catalog / narrative-consistency
Check a narrative for internal contradictions
Are the statements within narrative consistent with each other in timeline, cause, and extent, with no statement contradicting another in the same account?
A claims, incident, or intake system receives a single free-form account and needs to flag accounts that contradict themselves before a person reviews them or a downstream step relies on them.
Explore this recipe interactively ยท Source and implementation guide
Use narrative-consistency in TypeScript
Install with npm install jev-recipes. Requires Node.js 22.9 or newer and ES modules. Set TYPESAFE_API_KEY in your server environment for live calls, which send input to TypeSafe and use API quota. See the installation guide.
import { narrativeConsistency } from 'jev-recipes/narrative-consistency';
const result = await narrativeConsistency({
"narrative": "I was at the office all afternoon on Thursday and got home around 7 pm to find the kitchen flooded. The dishwasher supply hose had split. I heard the hose burst at about 2 pm and shut off the water right away, so the water only ran for a few minutes. Even so, the water reached the hallway and the two bedrooms, and the flooring in all three rooms will need replacing. Nothing outside the kitchen was affected.",
"minConfidence": 0.8
});
console.log(result);
Input contract
| Field | Type | Needed |
|---|---|---|
| narrative | string | Required |
| minConfidence | number | Optional |
Full input and result schemas
{
"input": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"narrative": {
"type": "string"
},
"minConfidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"narrative"
]
},
"result": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"model": {
"type": "string"
},
"usage": {
"type": "object",
"properties": {
"input_tokens": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"output_tokens": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"input_tokens",
"output_tokens"
],
"additionalProperties": false
},
"status": {
"type": "string",
"enum": [
"ready",
"review"
]
},
"probability": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"verdict": {
"type": "string",
"enum": [
"consistent",
"contradictory"
]
}
},
"required": [
"model",
"usage",
"status",
"probability",
"confidence",
"verdict"
],
"additionalProperties": false
}
}Saved example result
This hand-authored response demonstrates the contract. It is not a model accuracy measurement. Run it without an API key: npx jev-recipes demo narrative-consistency.
{
"model": "demo-fixture",
"usage": {
"input_tokens": 0,
"output_tokens": 0
},
"status": "ready",
"probability": 0.07,
"confidence": 0.9299999999999999,
"verdict": "contradictory"
}
Evaluation evidence
No verified live accuracy measurement is available. Evaluate representative cases before using this decision in your workflow.
Use the evaluation guide to measure this decision on your own labeled cases.
Limitations
- Checks internal consistency only. A narrative can be perfectly consistent and false, or contain a contradiction that is an innocent slip; it does not judge truth, credibility, or intent.
- Judges wording. Exact date arithmetic, unit conversions, and comparisons against external records belong in application code.
Related recipes
- evidence-conflict: Use evidence-conflict when you have two separate passages and need to know whether they conflict about a question; this recipe checks one account against itself.
- answer-consistency: Use answer-consistency to compare two discrete statements rather than to scan a single narrative for internal contradictions.