Recipe catalog / clause-kind
Classify contract clause kind
What does clause primarily do?
You need to sort contract or policy clauses by what they do so obligations and prohibitions can be tracked separately from rights and definitions.
Explore this recipe interactively ยท Source and implementation guide
Use clause-kind 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 { clauseKind } from 'jev-recipes/clause-kind';
const result = await clauseKind({
"clause": "The Supplier shall deliver the Goods to the Delivery Address no later than thirty (30) days after receipt of a Purchase Order.",
"context": "Clause 4.2 of a goods supply agreement between a manufacturer and a retailer.",
"minConfidence": 0.8
});
console.log(result);
Input contract
| Field | Type | Needed |
|---|---|---|
| clause | string | Required |
| context | string | Optional |
| minConfidence | number | Optional |
Full input and result schemas
{
"input": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"clause": {
"type": "string"
},
"context": {
"type": "string"
},
"minConfidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"clause"
]
},
"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": [
"obligation",
"right",
"prohibition",
"condition",
"definition",
"unclear"
]
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"probabilities": {
"type": "object",
"propertyNames": {
"type": "string",
"enum": [
"obligation",
"right",
"prohibition",
"condition",
"definition",
"unclear"
]
},
"additionalProperties": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"required": [
"obligation",
"right",
"prohibition",
"condition",
"definition",
"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 clause-kind.
{
"model": "demo-fixture",
"usage": {
"input_tokens": 0,
"output_tokens": 0
},
"status": "ready",
"verdict": "obligation",
"confidence": 0.92,
"probabilities": {
"obligation": 0.92,
"right": 0.02,
"prohibition": 0.01,
"condition": 0.03,
"definition": 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
- Classifies the operative effect of the clause as written. It is not legal advice and does not establish whether the clause is enforceable or which party it favors.
- A clause that mixes effects is graded by its primary one. Split compound clauses in code when each part matters.
Related recipes
- constraint-strength: Use constraint-strength to grade how binding a single stated constraint is rather than what kind of clause it is.
- document-role: Use document-role to classify the purpose of a whole document rather than one clause.