Skip to content
Docs / Patterns

Patterns

These are Jev's four patterns. They work unchanged on our answers; the difference is that the numbers come from a model that learned your decision, and your rules are already applied.

Speculative fan-out

Ask every question in one request. They're answered together, and you only pay one round trip.

python
res = decide(model="triage@latest", state=ticket, questions={
    "team": team_q, "priority": priority_q, "churn_risk": churn_q,
})
a = res["answers"]
route(a["team"]["choice"], priority=a["priority"]["score"], flag=a["churn_risk"]["noul"] > 0.7)

Pricing is flat, so asking more questions costs nothing extra.

Confidence-gated routing

Act on confident answers; send the rest somewhere smarter or to a person.

python
d = res["decision"]
if d["route"] == "act":      do(d["action"])
elif d["route"] == "review": do(d["action"]); review_later(res["id"])
else:                        escalate(res["id"])

The safety bar sets itself after every training run, so route already says which answers are automatic. See Confidence.

Composite scoring

Combine several answers with weights, in your code:

python
a = res["answers"]
risk = 0.5 * a["fraud_likely"]["noul"] + 0.3 * (a["urgency"]["score"] / 2) + 0.2 * a["new_payee"]["noul"]
if risk > 0.6:
    hold(txn)

Keep the weights in code where you can test them. If the combination is itself a decision you make every day, make it a domain's decision question instead, and let it learn from outcomes.

Intent routing

Classify first, then hand each case to the right handler: code, a specialist LLM, or a person.

python
topic = res["answers"]["topic"]["choice"]
handler = {"refund": refunds_flow, "lost_stolen": block_and_replace, "info": faq_bot}.get(topic, human)
handler(ticket)

Your rules still apply to the decision question, whatever the handler does next.