Bud Decision Studio documentation
Bud Decision Studio runs open decision models on your own computer. You describe a situation, ask questions about it, and get calibrated probabilities back, with every decision kept in a history you can review. Start in the app, or call it from your code.
Use the app
- Install the studioWindows, macOS and Linux, and what your computer needs.
- Ask your first questionLoad a model, describe a situation and read the answer.
- Save it as a templateReuse the same questions with new details each time.
- Review what was decidedEvery decision, what the model saw, and what needed a person.
- Choose a modelThe eleven models, what each is good at and the memory it needs.
- Teach it your decisionsTrain a model on your own examples; keep it only if it got better.
Build with the API
- Call the studio from your codeSend a situation and questions, act on the answers.
- DecisionsCreate, wait for, rerun, label and redact decisions.
- TemplatesVersions, aliases and safe changes from a script or CI.
- Move from Jev or a gatewayChange the base URL; your SDK code keeps working.
- ErrorsEvery error code, what causes it and how to fix it.
POST
/v1/studio/decisionscurl -s http://127.0.0.1:8420/v1/studio/decisions -d '{ "state": { "ticket": "We were billed twice for March. Refund the duplicate today or we cancel.", "plan": "enterprise" }, "questions": { "department": { "type": "choice", "instructions": "Which team should handle this ticket?", "criteria": {"billing": "invoices, payments, refunds", "technical": "bugs and outages", "sales": "pricing and upgrades"} }, "churn_risk": { "type": "noul", "instructions": "Does the customer threaten to cancel?" } }}'import httpxstudio = httpx.Client(base_url="http://127.0.0.1:8420/v1/studio", timeout=120)d = studio.post("/decisions", json={ "state": { "ticket": "We were billed twice for March. Refund the duplicate today or we cancel.", "plan": "enterprise", }, "questions": { "department": { "type": "choice", "instructions": "Which team should handle this ticket?", "criteria": {"billing": "invoices, payments, refunds", "technical": "bugs and outages", "sales": "pricing and upgrades"}, }, "churn_risk": {"type": "noul", "instructions": "Does the customer threaten to cancel?"}, },}).raise_for_status().json()print(d["answers"]["department"]["choice"], d["needs_review"])const res = await fetch("http://127.0.0.1:8420/v1/studio/decisions", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ state: { ticket: "We were billed twice for March. Refund the duplicate today or we cancel.", plan: "enterprise", }, questions: { department: { type: "choice", instructions: "Which team should handle this ticket?", criteria: { billing: "invoices, payments, refunds", technical: "bugs and outages", sales: "pricing and upgrades" }, }, churn_risk: { type: "noul", instructions: "Does the customer threaten to cancel?" }, }, }),});const d = await res.json();console.log(d.answers.department.choice, d.needs_review);Response200 OK
{ "id": "dec_01M3TDKH7M3GAHDWDK87SV6NYB", "object": "decision", "status": "completed", "model": "laya", "answers": { "department": { "type": "choice", "choice": "billing", "probabilities": {"billing": 0.9815, "technical": 0.0094, "sales": 0.0091}, "certainty": 0.9815, "act": true }, "churn_risk": { "type": "noul", "noul": 0.8696, "probabilities": {"false": 0.1304, "true": 0.8696}, "certainty": 0.8696, "act": false } }, "act": false, "needs_review": ["churn_risk"], "store": "full"}