Ask five questions.
Get five typed answers.
Hand a decision model a support ticket, a vendor invoice, a security alert or an agent trace, and ask it which team, whether it is fraud, how severe it is. Every answer comes back as a choice, a probability or a score, from a single forward pass on a GPU that Chalk deploys from one Python file.
Pick a case, then change it
Each case is a real-shaped record with the questions a team would ask about it. Edit the record and press Decide: raise the invoice total, add MFA to the alert, make the customer polite, and watch the probabilities move.
What should the assistant do next with this conversation?
What is this customer conversation primarily about?
This conversation requires a human agent rather than automated handling.
How likely is this customer to stop doing business with us because of this interaction?
How time-sensitive is this conversation?
The model is laya-typed-decisions, a 421M-parameter ModernBERT-large specialist fine-tuned on four workflows: support, invoices, security alerts and agent traces. On the 2,000 held-out decisions in its test set it gives the reference answer 77% of the time (86% on yes/no questions), against 48% for always picking each question’s most common answer. Outside those four workflows, expect weaker answers.
Three question types
You describe the situation once, as text or a JSON record, and write each question in plain language. The type decides the shape of the answer, so downstream code always knows what it is getting.
choice
Pick one option from a set you describe in words: which team, which disposition, which next step. Returns the winner and a probability for every option.
yes / no
Judge a statement about the situation, such as “this invoice duplicates one already paid.” Returns the probability that it is true, not just a label.
score
Place the situation on an ordered scale like low to critical. Returns a distribution over the levels and its expected value, so 2.7 means more than 2.
One endpoint, any question
The server is a small FastAPI app around the model. POST a state and a map of questions to /decide and you get typed answers back. Questions are data, not code: add one, rename an option, or change a scale without redeploying.
To run your own copy, clone the repo and run the deploy script. Chalk builds the image with the weights baked in, provisions an L4, and prints the URL.
chalk-ai/typed-decisionsimport httpx
response = httpx.post(
f"{web_url}/decide",
json={
"state": {
"ticket": "Charged twice for our annual renewal. Refund it today or we leave.",
},
"questions": {
"team": {
"type": "choice",
"instructions": "Which team should handle this?",
"criteria": {
"billing": "Charges, invoices and refunds",
"technical": "The product is not working",
"account": "Login, plan and access",
},
},
"needs_human": {
"type": "noul", # a statement; the answer is P(true)
"instructions": "A human agent should take over this conversation.",
},
"churn_risk": {
"type": "score",
"instructions": "How likely is this customer to leave?",
"criteria": ["low", "moderate", "high", "imminent"],
},
},
},
)
answers = response.json()["answers"]
answers["team"]["choice"] # "billing" (p = 0.86)
answers["needs_human"]["noul"] # P(true) = 0.68
answers["churn_risk"]["score"] # expected level on 0..3 = 2.48Why a decision model
Most triage is the same handful of questions asked thousands of times a day. A small encoder answers them in milliseconds, with probabilities you can act on.
Every question, one pass
The record is encoded once and every question is answered from the same forward pass. On an L4, five questions take 46 ms of model time and one takes 24 ms.
Answers you can branch on
Outputs are typed: an option name, a probability, or a number on a scale. Route on them directly instead of parsing free text from an LLM.
Probabilities, not just labels
Each answer carries its full distribution, so you can set thresholds per decision and send the uncertain middle to a person.
A GPU behind one URL
Chalk builds the image from Python, provisions the GPU, and gives the replica an HTTPS endpoint. Scale replicas up for throughput.
Runs in your cloud
The model runs in your Chalk environment, next to the tickets, invoices and alerts it reads. Records never pass through a third-party API.
Open source
The server, deploy script and playground are Apache-2.0 on GitHub. Swap in your own questions, or fine-tune the model on your own decisions.
Put decisions next to your data
Serve triage, routing and risk models on GPUs in your own cloud. Talk to an engineer about your workflow.