Make unsure models sure.

You can't improve a classifier you don't measure. Use unsure to create a universal classifier that responds in milliseconds. Then iterate on it with feedback, prototyping, and multimodal reasoning. Powered by Jev.

01

Classify.

Get your answer before you can blink.

latest decision · prompt v1Billing · 54%

“I paid, but I’m still locked out.”

1 classified
02

Review.

Uncertain answers deserve a second look.

Needs your judgment

“I paid, but I’m still locked out.”

The model guessed Billing · 54% confidence.

Which team should handle this?

Your answer becomes a test case for the next prompt.

03

Measure.

A better prompt? Put it to the test.

proposed prompt change

Route access problems to Support, even when the message mentions payment.

Save a review to create your first test case.

Feedback loops for a better classifier.

You can't improve a classifier without knowing where it goes wrong. Use our decide, feedback, and prototype APIs to build the best possible classifier.

  1. 01

    Classify on Jev

    A customer has paid, but their account is still locked. Jev classifies the ticket as urgent and routes it to billing. Its confidence in that team is only 54%.

    Three fields round-trip in 111 ms median from a laptop. Unsure records every answer and its confidence under one decision_id, so this uncertain route can be reviewed.

    class Triage(BaseModel):
        urgent: bool
        team: Literal["billing", "support", "sales"]
        severity: Annotated[float, Score("Low", "Mid", "High")]
    
    decision = client.decide(
        prompt=(
            "Payment questions go to billing. "
            f"Ticket: {ticket.text}"
        ),
        schema=Triage,
    )
    ticket.decision_id = decision.id
    inbox · support@example.comticket #1042

    Maya Ruiz <maya@northwind.co>

    9:41 AM

    to support@example.com

    Paid, but still locked out

    Hi there,

    I paid the invoice, but my account is still locked. The receipt came through an hour ago and I have a demo at noon.

    — Maya

    decision3 fields · classified
    • urgenttrue0.92
    • teambilling0.54
      Review the team. Billing is the least certain answer, at 54% confidence.
    • severity1.7 / 20.85
  2. 02

    Correct the route

    The review queue surfaces the least certain decisions. On this ticket, a human reviewer sees that payment succeeded, and restoring access belongs to support. They correct the team from billing to support.

    Corrections like this can be assigned through a UI or CLI. Now this ticket has an expected answer to test the next prompt iteration against.

    # Same ticket: payment cleared, but access is blocked.
    # The reviewer moves it from billing to support.
    client.feedback(
        decision_id=ticket.decision_id,
        team="support",
    )
    review queueleast certain first
    • Maya Ruiz

      Paid, but still locked out

      team

      0.54

    • Jonah Okafor

      Invoice shows the wrong plan

      team

      0.61

    • Lena Sørensen

      Export keeps timing out

      urgent

      0.66

    correctionticket #1042
    reviewer note

    “Payment cleared. Support needs to restore access.”

    team
    billingmodel · 0.54
    supportreviewer
    sales 
    Saved as the expected answer. The next prompt is measured against support on this ticket.
  3. 03

    Prove the prompt improved

    The original prompt always sent payment questions to billing. Add the missing rule: if the customer has paid but is locked out, route to support. Replay it on the reviewed set, including this ticket.

    Now, the ticket goes to support, matching the saved correction. Compare the original and revised prompts across the same reviewed set to ensure the change helped overall before you ship it.

    group = client.group(decision.group_id)["group"]
    new_template = group["template"] + (
        "\nPaid but locked out? Route to support."
    )
    run = client.prototype(
        decision.group_id,
        template=new_template,
    )
    prompt+1 line
    1. Payment questions go to billing.
    2. Paid but locked out? Route to support.
    3. Ticket: {ticket.text}
    ticket #1042replayed

    Maya Ruiz

    Paid, but still locked out

    team
    originalbilling
    revisedsupport
    expectedsupport
    Matches the reviewer's correction. The revised prompt gets this ticket right without being told the answer.
    score · same reviewed set84.2%91.0%

Model anything.

Jev is unbelievably fast, but that speed comes from a narrow job: text in, structured fields out. It can't read a receipt, watch a screen recording, or write the reply to a customer.

Unsure pipelines widen that to every modality. An encoder takes the image or video, summarizes it in text, and hands it to Jev. A decoder takes Jev's fields and writes the richer string you actually need. Pipelines combine them all in one visual canvas with a single billing rate.

The result is a pipeline that drops in anywhere you use an LLM today, whatever the inputs and outputs look like. The decision in the middle is still Jev's, still a few hundred milliseconds, and still carries a confidence per field. A custom API for all your decisions no matter how rich.

The same decision loop applies: the least certain answers from Jev go to review, and a new prompt is replayed against the reviewed set before it ships.

input
messagestring
screenshotreceipt.png
read
Vision modelreads the receipt

“Invoice #4471, paid in full at 9:12 AM.”

decide
Jevdecides from the message and what was read
  • urgenttrue0.92
  • teamsupport0.91
  • wants_refundfalse0.88
write
Text modelwrites only what the decisions call for
summary
Payment cleared; the account is still locked. Support restores access.
refund_reason
skipped · wants_refund is false
output
Triage · one response, confidence on every Jev field

Close the loop on the classifier you already run.

Measured decisions lead to better decisions.