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.
Classify.
Get your answer before you can blink.
“I paid, but I’m still locked out.”
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.
Measure.
A better prompt? Put it to the test.
Route access problems to Support, even when the message mentions payment.
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.
- 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.idinbox · support@example.comticket #1042Maya Ruiz <maya@northwind.co>
9:41 AMto 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.54Review the team. Billing is the least certain answer, at 54% confidence.
- severity1.7 / 20.85
- 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 firstMaya 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 #1042reviewer note“Payment cleared. Support needs to restore access.”
teambillingmodel · 0.54supportreviewersalesSaved as the expected answer. The next prompt is measured against support on this ticket. - 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- Payment questions go to billing.
- Paid but locked out? Route to support.
- Ticket: {ticket.text}
ticket #1042replayedMaya Ruiz
Paid, but still locked out
teamoriginalbillingrevisedsupportexpectedsupportMatches 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.
“Invoice #4471, paid in full at 9:12 AM.”
- urgenttrue0.92
- teamsupport0.91
- wants_refundfalse0.88
- summary
- Payment cleared; the account is still locked. Support restores access.
- refund_reason
- skipped · wants_refund is false
Close the loop on the classifier you already run.
Measured decisions lead to better decisions.