Recipe catalog / attribution-match
Check a statement's attributed source
Check whether supplied source text attributes a statement to the claimed speaker or source.
You need to check who said a statement in a transcript or source excerpt, separately from whether it is true.
Explore this recipe interactively ยท Source and implementation guide
Use attribution-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 { attributionMatch } from 'jev-recipes/attribution-match';
const result = await attributionMatch({
"statement": "The deadline is Friday.",
"attributedTo": "Mira",
"source": "Oren: The deadline is Friday.\nMira: Thank you for the update."
});
console.log(result);
Input contract
| Field | Type | Needed |
|---|---|---|
| statement | string | Required |
| attributedTo | string | Required |
| source | string | Required |
| minConfidence | number | Optional |
Full input and result schemas
{
"input": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"statement": {
"type": "string",
"description": "One statement or faithful paraphrase whose attributed speaker or source should be checked."
},
"attributedTo": {
"type": "string",
"description": "The speaker or source claimed to have made or explicitly endorsed the statement."
},
"source": {
"type": "string",
"description": "The supplied transcript or excerpt, including speaker labels or attribution context needed to check the claim."
},
"minConfidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"statement",
"attributedTo",
"source"
]
},
"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"
]
},
"verdict": {
"type": "string",
"enum": [
"matched",
"mismatched",
"not_attributed",
"unclear"
]
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"probabilities": {
"type": "object",
"propertyNames": {
"type": "string",
"enum": [
"matched",
"mismatched",
"not_attributed",
"unclear"
]
},
"additionalProperties": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"required": [
"matched",
"mismatched",
"not_attributed",
"unclear"
]
}
},
"required": [
"model",
"usage",
"status",
"verdict",
"confidence",
"probabilities"
],
"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 attribution-match.
{
"model": "demo-fixture",
"usage": {
"input_tokens": 0,
"output_tokens": 0
},
"status": "ready",
"verdict": "mismatched",
"confidence": 0.97,
"probabilities": {
"matched": 0.01,
"mismatched": 0.97,
"not_attributed": 0.01,
"unclear": 0.01
}
}
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 only the supplied attribution record. It does not authenticate a source or establish original authorship, truth, or copyright ownership.
- Missing statements and unresolved speaker identities require review; absence from an excerpt is not proof of false attribution.
- Nested quotation and endorsement are distinct. Include enough surrounding text to establish who is speaking.
Related recipes
- causal-attribution: Use causal-attribution to classify the kind of cause in an explanation, rather than who made it.
- citation-match: Use citation-match to check which passages support a claim, rather than who made it.
- claim-stance: Use claim-stance to label a response's own position toward a claim, rather than verifying a named attribution.
- reference-resolve: Use reference-resolve to select the referent of an ambiguous expression from supplied candidates.