Agent workflows · 2026-09-25

Choosing Noul, Choice, and Score with Jev

Which decision shape each of Jev's three core question types, Noul, Choice and Score, corresponds to, what each returns, and the most common mix-ups, with an example request and the response fields.

Diagram applying the Noul, Choice and Score question types to the same support message, returning a probability of yes, the selected team and a frustration level.

Short answer

Jev is a structured-decision model that runs on LLMTR's /v1/systemone endpoint. It produces no free text; it takes a state (the content to evaluate) and typed questions you define, and returns for each question an answer your code can read directly. There are three question types for decisions over text, and the shape of the decision determines which one to use; Jev 1.14 also answers the experimental Box type, which locates an object in an image.

If the answer is yes or no, use Noul; if it is one of several unordered options, use Choice; if it is a position on ordered levels, use Score. When that split is made wrongly the model still returns a number, but the number does not measure what you asked.

The three types at a glance

All three share the type and instructions fields; the criteria field differs by type. Each answer carries its own type field, so it is clear which fields to read.

Jev question types (checked 26 September 2026)
TypeDecision shapecriteriaReturned fields
NoulYes or noOptional; what each end meansnoul: probability of yes, from 0 to 1
ChoiceOne of several unordered optionsMap from option name to description; a description may be nullchoice, probabilities, confidence
ScoreA position on ordered levelsOrdered array of at least two levelsscore, legend, probabilities, confidence

Keeping Noul and Score apart

The most common mix-up is measuring a level with a yes/no question. A Noul of 0.5 for "Is this candidate strong in Python?" does not mean the candidate is intermediate; it means the model gave yes and no equal probability, in other words it is unsure. A value near 1 is a strong yes and a value near 0 a strong no.

If a level is what you want to measure, the right type is Score: ordered levels such as "Beginner", "Intermediate" and "Advanced" are defined and the returned score gives the position on them. A score can fall between two levels; it does not have to be an integer. If a firm decision is what you want, the Noul criteria field spells out what yes and no mean.

Inputs that do not fit a Choice list

Choice always returns one of the defined options. Even when an input fits none of them, the model picks the closest option on the list. So where the list might not cover every input, an option such as other is added; TypeSafe makes the same recommendation. That way a new or unexpected request is not forced into the wrong box.

It also matters that the options exclude each other. If a message can belong to two options at once, Choice returns only one of them. In that case a separate Noul question for each topic keeps both visible. The descriptions are the text the model sees; if an option name alone is not enough, the boundary belongs in the description.

Writing Score levels

In Score, criteria is an ordered array of at least two levels, and the order carries meaning: levels are written from lowest to highest. A short but concrete description for each level helps the model place answers more consistently between two neighbouring levels. Writing "Calm, only asking for information" instead of "Calm" leaves less of the boundary to the model's guess.

Because the returned score can fall between levels, the scale is not limited to whole steps, and the threshold in code is placed on that position: for example, every message past the second level goes to an experienced agent. More levels make the scale finer, but they also bring the descriptions of neighbouring levels closer together.

Using all three types in one request

Questions asked of the same state are evaluated independently and in parallel; one question's answer is not context for another. So the three types can be asked together in one request, and adding a question does not change the results of the others. The example below asks, for the same support message, whether a refund is requested, which team should handle it and how frustrated the customer is.

Asking Noul, Choice and Score in one request

import os, requests

res = requests.post(
    os.environ["LLMTR_BASE_URL"] + "/v1/systemone",
    headers={"Authorization": "Bearer " + os.environ["LLMTR_API_KEY"]},
    json={
        "model": "typesafe/jev",
        "state": "I was charged twice on my card and have had no reply for three days.",
        "questions": {
            "refund_request": {"type": "noul", "instructions": "Is the customer asking for a refund?"},
            "department": {
                "type": "choice",
                "instructions": "Which team should handle this request?",
                "criteria": {"billing": "Payments, invoices, refunds",
                             "technical": "Bugs, outages, integrations",
                             "other": None},
            },
            "frustration": {
                "type": "score",
                "instructions": "How upset does the customer seem?",
                "criteria": ["Calm", "Upset but polite", "Very angry"],
            },
        },
    },
    timeout=30,
)
answers = res.json()["answers"]
print(answers["refund_request"]["noul"])   # probability of yes
print(answers["department"]["choice"])     # selected option
print(answers["frustration"]["score"])     # position between levels

Question keys and instructions

The keys in the questions map are not sent to the model; they exist only to match the answers. However descriptive a key looks, the text the model sees is the instructions field. Writing only "Yes?" under a refund_request key means never telling the model what is being asked.

When a question's type changes, the fields to read change too: noul for Noul, choice and confidence for Choice, score and legend for Score. Having the code branch on the answer's type field keeps it from silently reading the wrong field after a question's type is changed later.

Which decision, which type

The examples below show different questions on the same subject landing on different types. What decides is not the subject of the question but the shape of the expected answer.

Examples of choosing a type by decision shape
QuestionShape of the answerType
Is this email spam?Yes or noNoul
Which language is the message written in?One of the known languagesChoice
How formal is the text?A position on an ordered scaleScore
Does the applicant meet the experience requirement?A yes or no with a written definitionNoul
What is the applicant's experience level?Ordered levelsScore
Which product is the complaint about?One from the product list, plus otherChoice

Frequently asked questions

Does Noul return confidence?

No. Noul returns only the probability of yes, in the noul field. confidence appears only in Choice and Score answers.

Is a Score an integer?

No. score is a position on the levels you defined and can fall between two of them. The legend field shows which levels the position corresponds to.

Why add an other option to Choice?

Choice always returns an option from the list. Without an escape option for inputs that do not fit, the model picks the closest but wrong option.

Are question keys sent to the model?

No. Keys are only for matching answers. The whole question is written in the instructions field.

Related posts