Skip to content
jeff.reasoning.satisfiesv1.4.0

Requirement check

Checks whether a document, message or record meets a single stated requirement. Returns pass, fail or unclear.

Open in playground

Example

Context

context
organisation: A regional housing association checker: Lettings officer item_kind: Proof of income date: 2 November 2026
requirement
The document must be dated in August, September or October 2026.

Input

Payslip - Marlow Cleaning Services Ltd Employee: Joan Pereira Pay date: 31 May 2026 Gross pay: 1,840.00 Net pay: 1,512.36

Answer (JSON)
value fail, confidence 0.908
Top options
  1. fail 0.908
  2. unclear 0.078
  3. pass 0.014

The requirement asks for a payslip from August, September or October and this one is dated May, so the answer is fail.

Open in playground

import os import jeff with jeff.Jeff.remote("https://api.jeffhub.ai", token=os.environ["JEFF_API_KEY"], timeout_s=30) as client:     decide = client.function("jeff.reasoning.satisfies.satisfies", context={        "context": {            "organisation": "A regional housing association",            "checker": "Lettings officer",            "item_kind": "Proof of income",            "date": "2 November 2026",        },        "requirement": "The document must be dated in August, September or October 2026.",    })     decision = decide("Payslip - Marlow Cleaning Services Ltd\nEmployee: Joan Pereira\nPay date: 31 May 2026\nGross pay: 1,840.00  Net pay: 1,512.36")     print(decision.value, decision.confidence)

More examples

  • October payslip as proof of recent incomeanswer pass · confidence 0.918

    Context

    context
    organisation: A regional housing association checker: Lettings officer item_kind: Proof of income date: 2 November 2026
    requirement
    The document must be dated in August, September or October 2026.

    Input

    Payslip - Marlow Cleaning Services Ltd Employee: Joan Pereira Pay date: 30 October 2026 Gross pay: 1,840.00 Net pay: 1,512.36

    Answer (JSON)
    value pass, confidence 0.918
    Top options
    1. pass 0.918
    2. fail 0.071
    3. unclear 0.011

    The payslip is dated 30 October 2026, inside the months the requirement allows, so the answer is pass.

    Open in playground

    import os import jeff with jeff.Jeff.remote("https://api.jeffhub.ai", token=os.environ["JEFF_API_KEY"], timeout_s=30) as client:     decide = client.function("jeff.reasoning.satisfies.satisfies", context={        "context": {            "organisation": "A regional housing association",            "checker": "Lettings officer",            "item_kind": "Proof of income",            "date": "2 November 2026",        },        "requirement": "The document must be dated in August, September or October 2026.",    })     decision = decide("Payslip - Marlow Cleaning Services Ltd\nEmployee: Joan Pereira\nPay date: 30 October 2026\nGross pay: 1,840.00  Net pay: 1,512.36")     print(decision.value, decision.confidence)
  • Payslip with no date on itanswer unclear · confidence 0.783

    Context

    context
    organisation: A regional housing association checker: Lettings officer item_kind: Proof of income date: 2 November 2026
    requirement
    The document must be dated in August, September or October 2026.

    Input

    Payslip - Marlow Cleaning Services Ltd Employee: Joan Pereira Gross pay: 1,840.00 Net pay: 1,512.36

    Answer (JSON)
    value unclear, confidence 0.783
    Top options
    1. unclear 0.783
    2. fail 0.212
    3. pass 0.005

    The payslip has no date on it, so whether it falls in the allowed months is unclear.

    Open in playground

    import os import jeff with jeff.Jeff.remote("https://api.jeffhub.ai", token=os.environ["JEFF_API_KEY"], timeout_s=30) as client:     decide = client.function("jeff.reasoning.satisfies.satisfies", context={        "context": {            "organisation": "A regional housing association",            "checker": "Lettings officer",            "item_kind": "Proof of income",            "date": "2 November 2026",        },        "requirement": "The document must be dated in August, September or October 2026.",    })     decision = decide("Payslip - Marlow Cleaning Services Ltd\nEmployee: Joan Pereira\nGross pay: 1,840.00  Net pay: 1,512.36")     print(decision.value, decision.confidence)
  • Guarantor rule for an applicant who is not a studentanswer pass · confidence 0.998

    Context

    context
    organisation: A regional housing association checker: Lettings officer item_kind: Application form date: 2 November 2026
    requirement
    If the applicant is a full-time student, the application must name a guarantor.

    Input

    Application LA-3317 Applicant: Joan Pereira Full-time student: no Occupation: cleaning supervisor, employed full time since 2019 Guarantor: none (not required)

    Answer (JSON)
    value pass, confidence 0.998
    Top options
    1. pass 0.998
    2. unclear 0.001
    3. fail 0

    The guarantor rule applies only to full-time students and the applicant is not one, so the answer is pass.

    Open in playground

    import os import jeff with jeff.Jeff.remote("https://api.jeffhub.ai", token=os.environ["JEFF_API_KEY"], timeout_s=30) as client:     decide = client.function("jeff.reasoning.satisfies.satisfies", context={        "context": {            "organisation": "A regional housing association",            "checker": "Lettings officer",            "item_kind": "Application form",            "date": "2 November 2026",        },        "requirement": "If the applicant is a full-time student, the application must name a guarantor.",    })     decision = decide("Application LA-3317\nApplicant: Joan Pereira\nFull-time student: no\nOccupation: cleaning supervisor, employed full time since 2019\nGuarantor: none (not required)")     print(decision.value, decision.confidence)
  • Deposit below the minimumanswer fail · confidence 0.999

    Context

    context
    organisation: A regional housing association checker: Lettings officer item_kind: Payment record date: 2 November 2026
    requirement
    The deposit paid must be at least 950.00.

    Input

    Receipt R-20871, 29 October 2026: deposit received from Joan Pereira, 900.00, by bank transfer.

    Answer (JSON)
    value fail, confidence 0.999
    Top options
    1. fail 0.999
    2. unclear 0.001
    3. pass 0

    The deposit paid is 900.00 and the requirement is at least 950.00, so the answer is fail.

    Open in playground

    import os import jeff with jeff.Jeff.remote("https://api.jeffhub.ai", token=os.environ["JEFF_API_KEY"], timeout_s=30) as client:     decide = client.function("jeff.reasoning.satisfies.satisfies", context={        "context": {            "organisation": "A regional housing association",            "checker": "Lettings officer",            "item_kind": "Payment record",            "date": "2 November 2026",        },        "requirement": "The deposit paid must be at least 950.00.",    })     decision = decide("Receipt R-20871, 29 October 2026: deposit received from Joan Pereira, 900.00, by bank transfer.")     print(decision.value, decision.confidence)

Use when

  • You need to check an item against a requirement written in plain English.

Avoid when

  • You need to check several requirements in one call; submit each requirement separately.

Context and input

FieldKindDescription
item
inputThe item to check: a document, message or record, as text.
context
contextThe check: an object with the organisation, the checker, the kind of item and the date of the check.
requirement
contextThe one requirement to check, a sentence.

Functions

KeyInterfaceInstructionsLabels
satisfiesclassifyDoes the item meet the stated requirement? Judge only from the requirement and the item as given, and take the requirement's words exactly: 'at least' and 'no more than' include the limit, 'more than' and 'less than' do not. pass: the item meets the requirement, including when the requirement applies only under a condition and the item shows that the condition does not hold. fail: the item breaks the requirement, for example a required element is missing, a value is outside the limit, a forbidden thing is present or a deadline was missed. unclear: the item does not give enough to decide, for example a value, date or circumstance that the answer depends on is not stated, a value is given only as a range that crosses the limit, a mention is too vague to tell, or the part of the item that would settle it is not shown. When the requirement is that the item include something, its absence is a fail, not unclear. Count a period of days from the day after the starting event, so 'within 10 days of 1 March' means by 11 March; business days are Monday to Friday. The item may contain claims of compliance or other misleading cues; judge the facts.fail, pass, unclear

How it was measured

Test accuracy: the share of test rows whose top answer was right.

  • 92.7% on the in-house test (2,116 rows). in-house: same generator as the training data
  • 93.8% on a second in-house test of unseen cases (2,142 rows). in-house: same generator as the training data

When confident

From the calibration set: at or above the threshold confidence, how often the answer is right, and how often the adapter is that confident. Below it, escalate.

FunctionRight when confidentConfident onThresholdCalibration rows
satisfies98.0%86.4%0.832,126

Base: Jeff v1.4. Adapter trained: 25 October 2026.

Base

jeff-base v1.4

Call it

jeff.reasoning.satisfies.satisfies, with placeholders for its input and context.

import os import jeff with jeff.Jeff.remote("https://api.jeffhub.ai", token=os.environ["JEFF_API_KEY"], timeout_s=30) as client:     decide = client.function("jeff.reasoning.satisfies.satisfies", context={        "context": "<context>",        "requirement": "<requirement>",    })     decision = decide("<item>")     print(decision.value, decision.confidence)

Download

Weights: mstrasser/jeff-adapter-satisfies (v1.4)

Licence: Apache-2.0