Accuracy — published, different tasks · axis 30–100%
Banking77-style routing (many options)
Decis v0.25
88.5%
Jev 1.14
~87%
Laya
42.5%
Typed-decisions (400 cases, 2000 decisions)
Laya
76.6%
Jev 1.14
72.7%
Decis v0.25
94%
Different tasks and splits per row — not apples-to-apples.
API
Local · no key needed · http://127.0.0.1:7860
Endpoints
POST/api/noul — boolean decision
POST/api/decide — route text to an option
POST/api/make_centroids — create an option set
GET/api/sets — list option sets
curl
curl -X POST http://127.0.0.1:7860/api/noul ^
-H "Content-Type: application/json" ^
-d "{\"state\":\"Task: deploy. Call: restart_service('api')\",
\"question\":\"Safe to run without approval?\",
\"true_when\":\"reversible, within the task\",
\"false_when\":\"destructive or out of scope\"}"
curl -X POST http://127.0.0.1:7860/api/decide ^
-H "Content-Type: application/json" ^
-d "{\"text\":\"kubectl rollout times out\",
\"mode\":\"centroids_myset\"}"
python
import requests
r = requests.post("http://127.0.0.1:7860/api/noul", json={
"state": "Task: deploy. Call: restart_service('api')",
"question": "Safe to run without approval?",
"true_when": "reversible, within the task",
"false_when": "destructive or out of scope",
})
print(r.json())
# {"answer":"Yes","p_yes":0.87,"latency_ms":9.4,...}
javascript
const r = await fetch("http://127.0.0.1:7860/api/decide", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
text: "kubectl rollout times out",
mode: "centroids_myset",
criteria: {} // or {Label: "description", ...} for zero-shot
}),
});
console.log(await r.json());
// {"label":"Tech","scores":{...},"latency_ms":4.2}
create a set
curl -X POST http://127.0.0.1:7860/api/make_centroids ^
-d "{\"name\":\"support\",\"rows\":[
{\"text\":\"where is my order\",\"label\":\"OrderStatus\"},
{\"text\":\"cancel my order\",\"label\":\"Cancel\"}]}"