Open-source decision engine
Turn judgments
into decisions
Models tell you what is going on. Ordo decides what to do about it, and shows who a change affects first.
{ "jev": { "intent": { "choice": "refund", "confidence": 0.97 }, "urgency": { "score": 0.43 }, "chargeback": { "noul": 0.04 } }, "order": { "amount": "129.00", "days_since_delivery": 1 }, "customer": { "refunds_90d": 0 } }
{"jev":{"intent":{"choice":"refund","confidence":0.97},"urgency":{"score":0.43},"chargeback":{"noul":0.04}},"order":{"amount":"129.00","days_since_delivery":1},"customer":{"refunds_90d":0}}{"amount":129,"jev_confidence":0.97,"priority":"normal"}What Ordo does for you
Models judge, rules decide
Models like Jev read what a customer wrote. Whether to refund, and whether a person looks first, is written in rules anyone on the team can read.
See the impact first
Before you move a threshold, see which decisions change and what they change to.
Live without a release
Updated rules take effect right away. Your application code stays the same, with no redeploy.
An example
A 0.85 hard-coded in the app
A customer writes in, Jev decides it is a refund request, and anything above 0.85 is refunded automatically. That 0.85 usually sits in code nobody has looked at, and after a model update it means something else.
Once it lives in Ordo, someone proposes 0.80. Every test still passes. Ordo runs the old and new rules side by side and finds 18 cases that move from "agent checks" to "refund now". You decide before the change goes in.
You can swap the model or upgrade it. The refund threshold stays in Ordo, with tests and a version history.
21 of 309 cases change
Wants a refund, 0.84 sure, order of 129, delivered yesterday
Agent checks→Refund nowLLM_DRAFT → AUTO_REFUND
Wants a refund, 0.80 sure, order of 39.90, delivered 2 days ago
Agent checks→Refund nowLLM_DRAFT → AUTO_REFUND
The other 288 cases stay the same
Studio
Rules your whole team can read
See the same rules as a flow or as a table. Business teams read the logic, run tests and request releases there. Engineers keep working in the code repository.
About Studio| Trace | Conditions | Outputs | ||||||
|---|---|---|---|---|---|---|---|---|
| # | Trace | INchoicestring $.jev.intent.choice | INconfidencenumber $.jev.intent.confidence | INamountnumber $.order.amount | INdays_since_deliverynumber $.order.days_since_delivery | INrefunds_90dnumber $.customer.refunds_90d | OUTdecisionstring decision | OUTreasonstring reason |
| Input | Actual | refund | 0.97 | 129.00 | 1 | 0 | AUTO_REFUND | |
| 1 | Skipped 0 in [3, ∞) | *Actual: refund | *Actual: 0.97 | *Actual: 129.00 | *Actual: 1 | [3, ∞)Actual: 0 | HUMAN_REVIEW | repeat_refunds |
| 2 | Skipped 1 in (30, ∞) | *Actual: refund | *Actual: 0.97 | *Actual: 129.00 | (30, ∞)Actual: 1 | *Actual: 0 | HUMAN_REVIEW | outside_window |
| 3 | Matched All conditions matched | refundActual: refund | [0.85, ∞)Actual: 0.97 | (-∞, 200]Actual: 129.00 | *Actual: 1 | *Actual: 0 | AUTO_REFUND | |
| 4 | Skipped All conditions matched | refundActual: refund | [0.85, ∞)Actual: 0.97 | *Actual: 129.00 | *Actual: 1 | *Actual: 0 | HUMAN_REVIEW | amount |
| 5 | Skipped All conditions matched | refundActual: refund | [0.6, ∞)Actual: 0.97 | *Actual: 129.00 | *Actual: 1 | *Actual: 0 | LLM_DRAFT | medium_confidence |
| 6 | Skipped All conditions matched | *Actual: refund | *Actual: 0.97 | *Actual: 129.00 | *Actual: 1 | *Actual: 0 | HUMAN_REVIEW | low_confidence |
Start from a ready-made example
Jev refund routing, credit approval, promo stacking and fraud scoring, already written. Copy one and change it to your own policy.