Recipe catalog / constraint-strength
Distinguish requirements from preferences
Classify a stated constraint as required, preferred, optional, or unclear.
You need to distinguish a hard requirement from a preference or an optional suggestion.
Explore this recipe interactively ยท Source and implementation guide
Use constraint-strength 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 { constraintStrength } from 'jev-recipes/constraint-strength';
const result = await constraintStrength({
"statement": "Prefer a CSV export, but JSON is fine if that is easier."
});
console.log(result);
Input contract
| Field | Type | Needed |
|---|---|---|
| statement | 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": {
"statement": {
"type": "string",
"description": "One constraint or preference to interpret."
},
"context": {
"type": "string",
"description": "The surrounding request and any qualifications that clarify its force."
},
"minConfidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"statement"
]
},
"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": [
"required",
"preferred",
"optional",
"unclear"
]
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"probabilities": {
"type": "object",
"propertyNames": {
"type": "string",
"enum": [
"required",
"preferred",
"optional",
"unclear"
]
},
"additionalProperties": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"required": [
"required",
"preferred",
"optional",
"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 constraint-strength.
{
"model": "demo-fixture",
"usage": {
"input_tokens": 0,
"output_tokens": 0
},
"status": "ready",
"verdict": "preferred",
"confidence": 0.96,
"probabilities": {
"required": 0.013333333333333334,
"preferred": 0.96,
"optional": 0.013333333333333334,
"unclear": 0.013333333333333334
}
}
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
- Reports how the supplied wording presents a constraint; it does not establish authority, consent, or permission.
- Evaluate one constraint at a time. Split mixed requirements in caller code before comparing their strength.
Related recipes
- preference-kind: Use preference-kind to distinguish lasting preferences from facts and temporary requests.
- instruction-fit: Use instruction-fit to decide whether the constraint applies in the current circumstances.
- instruction-conflict: Use instruction-conflict to compare the requirements of two instructions.