Bayram Eker
EN
CV Start a conversation

Home / Writing / Systems

When software needs a decision, not another paragraph

A billing message needs the right destination. TypeSafe’s Jev offers one way to turn an interpretation into a result that software can act on.

Program state enters a decision model; a typed result and its uncertainty pass to a policy in code before an action is taken.
The message becomes a proposed answer. Application rules decide where it goes next.

“I was charged twice this month.” The person sending that message wants the problem put right, and probably wants to get on with their day. Before anyone can help, the message has to reach the right team. This small step is easy to overlook in a conversation about AI: the software needs somewhere to send the request, rather than a beautifully written explanation of billing.

Many small software decisions look like this: classify a message, choose a branch or check a proposed action. A model can help understand the input. The useful output may be a category or a number the rest of the application can work with.

TypeSafe introduced Jev on 15 September 2026 as a System One Model, designed to return probabilistic decisions in declared types. Writing five days after that launch, I cannot offer a settled product verdict. I can look at the idea and the questions I would bring to a trial.

Ask for the answer the application can use

In TypeSafe’s API design, a request contains the current state and one or more typed questions. The result belongs to a declared shape, so the application can branch on it directly. Questions in the same call are evaluated independently against the shared state.

The interface offers three ways to ask. Their names matter less than the kind of answer each gives the application.

Three questions, three output shapesTypeSafe primitives
Choice
Which option fits?Choose from declared categories, such as billing, technical or sales.choice · probabilities · confidence
Score
Where does it sit on this rubric?Evaluate against defined levels, such as low, medium or high urgency.score · probabilities · confidence
Noul
Is this proposition true?Estimate the probability of yes, such as whether the customer requests a refund.noul: a value from 0 to 1
Noul returns a proposition probability without a separate confidence field. Choice and Score return distributions and a confidence summary.

The design encourages narrow questions. Instead of asking whether a request should be handled automatically, ask what it concerns, whether information is missing and whether it needs specialist attention. Then make the combination explicit in code.

I like this separation because a team can read and change the workflow without asking the model to explain itself. The model still makes a judgement, but the next step is visible in the application.

The right format can still hold the wrong answer

It would be misleading to describe this as the first way to obtain dependable JSON from a model. Modern structured-output systems can constrain generation to a supported schema during decoding. OpenAI’s Structured Outputs is one example. The alternative is no longer simply free-form text followed by a fragile parser.

TypeSafe’s distinction is its decision-oriented model and interface: fixed output types, probability distributions and a design focused on short judgements. Whether that produces better accuracy, latency or cost on a particular workload is an empirical question.

The company’s schema guarantee also needs a precise reading. Returning one of billing, technical or sales prevents an undeclared fourth category. It does not prevent a technical question from being routed to billing. A well-formed answer can still be the wrong answer.

That is a useful boundary, not a reason to dismiss the idea. Software can handle a known kind of mistake more deliberately than an unexpected output format. It still needs a way to detect uncertainty and measure errors.

What does this probability actually mean?

Suppose a model estimates P(refund_requested) = 0.03. That is a strong answer of “probably not”, not a statement that the model has almost no confidence in its answer. Around 0.5, the same binary question is much less settled.

Choice and Score expose a different signal. Their confidence field summarises how concentrated the returned distribution is. TypeSafe’s confidence documentation describes it as a statistic derived from that distribution. It should not automatically be read as the probability that the chosen answer is correct.

For a ticket router, confidence might determine whether to route immediately, gather more information or ask a person. For a binary risk question, a high probability might instead mean stop. The direction of the action comes from the meaning of the question.

One score, three possible routesIllustrative ticket-routing policy
  1. c < 0.70
    Send to a reviewerThe answer is too uncertain for this route.
  2. 0.70 ≤ c < 0.98
    Gather another signalCheck account context or ask a clarifying question.
  3. c ≥ 0.98
    Route to the chosen queueProceed only if the route is allowed by application policy.
Here c means Choice confidence. These thresholds are examples, not measured recommendations. Routing a ticket does not authorise a refund or another account change.

These example thresholds need testing before use. Sending a message to the wrong queue is not the same mistake as changing the wrong account. A high score should not bypass the checks that the action normally requires.

Try the numbers on your own cases

Calibration is a relationship between predictions and observed outcomes. Among comparable cases assigned a probability near 0.8, the event should occur roughly eight times out of ten. A single answer cannot demonstrate that relationship.

I would try labelled messages from the actual workflow and keep the threshold-setting examples separate from the final test. Then I would read the errors by language and request type. A good overall result can hide a poor experience for the people whose messages are less familiar to the model.

The next question is how much work the system really helps with. How many messages reach a queue automatically, how many need review and which errors remain? A router that sends everything to a person has avoided the hard part rather than helped with it.

This is close to the discipline behind the QANTIS research: specify the reference, the conditions and the boundary of the result. “Calibrated” is most useful when followed by a dataset, a method and an account of where the claim stops holding.

Let the application choose the next step

A small example makes the separation easier to see. The following is illustrative application logic, not a TypeSafe SDK example. Its input is a validated Choice result, and its confidence thresholds are the same ones used in the diagram.

def route_ticket(ticket, decision, policy):
    if decision.confidence < 0.70:
        return send_to_reviewer(ticket)

    if decision.confidence < 0.98:
        return request_more_context(ticket)

    if not policy.allows_route(ticket, decision.choice):
        return send_to_reviewer(ticket)

    return assign_queue(ticket, decision.choice)

The model supplies the category and uncertainty. Code owns the conditions, the permitted destinations and the fallback. Changing a threshold becomes a versioned policy change that can be evaluated, reviewed and rolled back.

This connects directly to the harness engineering argument. A narrow model call can help interpret an input or flag a concern. It should not become the sole authority on whether an operation is permitted.

A judgement inside a governed workflowModel output meets application policy
Incoming requestMessage, account context and proposed action
IntentChoice
UrgencyScore
Missing information?Noul
Policy in codeCheck uncertainty, access, action scope and required approval.
ProceedAll required checks pass.
Review or stopA check fails or evidence is incomplete.
Record the inputs, model result, policy version and outcome.
The model answers bounded questions. Deterministic checks retain authority. Both branches produce a record that can be inspected later.

In NowFlow, an approval gate is an explicit route. In NODERIQ, evidence must reach the person who decides. In QANTIS, the planner stays classical while a separate component updates a belief. These are different implementations of a useful boundary: a probabilistic judgement can inform an action without owning the authority to take it.

The launch is a starting point for testing

TypeSafe’s launch post reports large speed and cost advantages on its workflow evaluations. It also says those workflows were created by its own model-capabilities team, may reflect bias and sit toward the high end of expected gains. Those caveats belong beside the claims.

For a deployment decision, I would compare the complete workflow: task accuracy, latency across the distribution, total cost, review rate and the effects of retries or extra checks. A fast model call is valuable; the application’s useful output is the end of the measurement.

As of 20 September 2026, this is an early-access product with a short public history. That leaves substantial questions about performance across domains, distribution shifts and sustained production use. I would treat the launch as an invitation to evaluate a new component.

A judgement becomes useful inside a clear workflow

I would not ask a ticket router to replace a model that helps write or investigate. This is a different job: making a small judgement that the next piece of software can use without another conversation.

The useful combination is easy to picture. The model reads the messy message. It returns a category and uncertainty. Application rules choose a route, and the resulting queue assignment can be checked. Each part has a job we can describe.

That is what I would carry beyond this particular product: give uncertainty a meaning people can work with, and make it possible to see why the application took the next step.

Sources

  1. Introducing System One Models and Jev (TypeSafe AI, 15 September 2026) typesafe.ai
  2. TypeSafe documentation: state, questions and typed decisions docs.typesafe.ai
  3. Choice: selecting from declared options docs.typesafe.ai
  4. Score: evaluating against a defined rubric docs.typesafe.ai
  5. Noul: the probability of a yes-or-no proposition docs.typesafe.ai
  6. Confidence: distribution, uncertainty and application thresholds docs.typesafe.ai
  7. Introducing Structured Outputs in the API (OpenAI, August 2024) openai.com

Written by Bayram Yüksel Eker. Corrections and disagreement are welcome at bayram@neuraparse.com.

Keep exploring

Another way into the work.