Recipe catalog / citation-match
Match claims to citations
Find supplied passages that independently support an entire claim.
You want to find which supplied passages support an entire claim.
Explore this recipe interactively ยท Source and implementation guide
Use citation-match 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 { citationMatch } from 'jev-recipes/citation-match';
const result = await citationMatch({
"claim": "Reset links expire after 30 minutes.",
"passages": [
{
"id": "reset",
"text": "Password reset links expire after 30 minutes."
},
{
"id": "billing",
"text": "Invoices are available on the Billing page."
}
]
});
console.log(result);
Input contract
| Field | Type | Needed |
|---|---|---|
| claim | string | Required |
| passages | array | Required |
| minConfidence | number | Optional |
Full input and result schemas
{
"input": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"claim": {
"type": "string"
},
"passages": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"id",
"text"
]
}
},
"minConfidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"claim",
"passages"
]
},
"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"
]
},
"passageIds": {
"type": "array",
"items": {
"type": "string"
}
},
"checks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"ready",
"review"
]
},
"verdict": {
"type": "string",
"enum": [
"supported",
"contradicted",
"unsupported"
]
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"probabilities": {
"type": "object",
"propertyNames": {
"type": "string",
"enum": [
"supported",
"contradicted",
"unsupported"
]
},
"additionalProperties": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"required": [
"supported",
"contradicted",
"unsupported"
]
}
},
"required": [
"id",
"status",
"verdict",
"confidence",
"probabilities"
],
"additionalProperties": false
}
}
},
"required": [
"model",
"usage",
"status",
"passageIds",
"checks"
],
"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 citation-match.
{
"model": "demo-fixture",
"usage": {
"input_tokens": 0,
"output_tokens": 0
},
"status": "ready",
"passageIds": [
"reset"
],
"checks": [
{
"id": "reset",
"status": "ready",
"verdict": "supported",
"confidence": 0.96,
"probabilities": {
"supported": 1,
"contradicted": 0,
"unsupported": 0
}
},
{
"id": "billing",
"status": "ready",
"verdict": "unsupported",
"confidence": 0.96,
"probabilities": {
"supported": 0,
"contradicted": 0,
"unsupported": 1
}
}
]
}
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
- Returns passages that independently support the entire claim. Joint support across several individually incomplete passages is not assessed.
- Supply 1 to 50 items per list, each with a unique non-empty ID and non-empty text.
Related recipes
- verify: Use verify when each claim already has its own paired evidence.