Recipe catalog / content-facets
Label article facets
Which of these does article include: a clear thesis, supporting evidence, counterarguments, a call to action, and signals of author expertise?
You audit published or drafted articles for structural completeness before deciding whether they need more evidence, a stance, or a conclusion.
Explore this recipe interactively ยท Source and implementation guide
Use content-facets 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 { contentFacets } from 'jev-recipes/content-facets';
const result = await contentFacets({
"article": "Why every small team should ship a status page\n\nAfter running infrastructure for three startups over eight years, I am convinced that a public status page is the highest-leverage reliability investment a small team can make. When we added one at my last company, support tickets during incidents dropped from an average of 41 to 9, because customers could see we already knew. It also forced us to define what \"degraded\" meant, which improved our own alerting. Start today: pick a hosted provider, list your five most visible services, and link the page from your app footer before the next incident finds you.",
"minConfidence": 0.8
});
console.log(result);
Input contract
| Field | Type | Needed |
|---|---|---|
| article | string | Required |
| minConfidence | number | Optional |
Full input and result schemas
{
"input": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"article": {
"type": "string"
},
"minConfidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"article"
]
},
"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"
]
},
"detected": {
"type": "array",
"items": {
"type": "string",
"enum": [
"statesThesis",
"providesEvidence",
"addressesCounterarguments",
"includesCallToAction",
"signalsExpertise"
]
}
},
"labels": {
"type": "object",
"properties": {
"statesThesis": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ready",
"review"
]
},
"verdict": {
"type": "string",
"enum": [
"present",
"absent"
]
},
"probability": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"status",
"verdict",
"probability",
"confidence"
],
"additionalProperties": false
},
"providesEvidence": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ready",
"review"
]
},
"verdict": {
"type": "string",
"enum": [
"present",
"absent"
]
},
"probability": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"status",
"verdict",
"probability",
"confidence"
],
"additionalProperties": false
},
"addressesCounterarguments": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ready",
"review"
]
},
"verdict": {
"type": "string",
"enum": [
"present",
"absent"
]
},
"probability": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"status",
"verdict",
"probability",
"confidence"
],
"additionalProperties": false
},
"includesCallToAction": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ready",
"review"
]
},
"verdict": {
"type": "string",
"enum": [
"present",
"absent"
]
},
"probability": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"status",
"verdict",
"probability",
"confidence"
],
"additionalProperties": false
},
"signalsExpertise": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ready",
"review"
]
},
"verdict": {
"type": "string",
"enum": [
"present",
"absent"
]
},
"probability": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"status",
"verdict",
"probability",
"confidence"
],
"additionalProperties": false
}
},
"required": [
"statesThesis",
"providesEvidence",
"addressesCounterarguments",
"includesCallToAction",
"signalsExpertise"
],
"additionalProperties": false
}
},
"required": [
"model",
"usage",
"status",
"detected",
"labels"
],
"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 content-facets.
{
"model": "demo-fixture",
"usage": {
"input_tokens": 0,
"output_tokens": 0
},
"status": "ready",
"detected": [
"statesThesis",
"providesEvidence",
"includesCallToAction",
"signalsExpertise"
],
"labels": {
"statesThesis": {
"status": "ready",
"verdict": "present",
"probability": 0.93,
"confidence": 0.93
},
"providesEvidence": {
"status": "ready",
"verdict": "present",
"probability": 0.9,
"confidence": 0.9
},
"addressesCounterarguments": {
"status": "ready",
"verdict": "absent",
"probability": 0.12,
"confidence": 0.88
},
"includesCallToAction": {
"status": "ready",
"verdict": "present",
"probability": 0.88,
"confidence": 0.88
},
"signalsExpertise": {
"status": "ready",
"verdict": "present",
"probability": 0.91,
"confidence": 0.91
}
}
}
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
- Labels what the article contains; it does not judge whether the thesis is correct, the evidence is sound, or the expertise is genuine.
- Long articles are read as one text. Section-level analysis and scoring rules belong in code.
Related recipes
- answer-disclosures: Use answer-disclosures to label the caveats and disclosures an answer contains rather than the structure of an article.
- argument-fit: Use argument-fit to judge whether a specific argument supports a specific claim.