Decisions, typed.
One API call.
Send a state (text or JSON) and typed questions. Get back typed, calibrated answers with probabilities and confidence, all from one forward pass. Vana doesn't generate text, so you have nothing to parse.
English · about 200 ms server-side · prepaid, no subscription
curl https://api.vana.annamal.ai/v1/systemone \
-H "Authorization: Bearer $VANA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"vana-latest",
"state":"Customer: I was charged twice for my October invoice, please fix this today.",
"questions":{
"refund": {"type":"noul","instructions":"Should we issue a refund?"},
"team": {"type":"choice","instructions":"Which team should handle this?",
"criteria":{"billing":"Billing / payments","tech":"Technical issue","sales":"Sales"}},
"urgency":{"type":"score","instructions":"How urgent is this?",
"criteria":["not urgent","normal","urgent","critical"]}}}'# pip install annamal-vana
from annamal_vana import Vana, YesNo, Choice, Score
r = Vana().decide(
"Customer: I was charged twice for my October invoice, please fix this today.",
{
"refund": YesNo("Should we issue a refund?"),
"team": Choice({"billing": "Billing / payments", "tech": "Technical issue",
"sales": "Sales"}, "Which team should handle this?"),
"urgency": Score(["not urgent", "normal", "urgent", "critical"], "How urgent is this?"),
},
)
print(r["team"].choice, r["refund"].noul, r["urgency"].score)// npm i @annamal/vana
import { Vana, yesNo, choice, score } from '@annamal/vana';
const r = await new Vana().decide(
'Customer: I was charged twice for my October invoice, please fix this today.',
{
refund: yesNo('Should we issue a refund?'),
team: choice({ billing: 'Billing / payments', tech: 'Technical issue', sales: 'Sales' },
'Which team should handle this?'),
urgency: score(['not urgent', 'normal', 'urgent', 'critical'], 'How urgent is this?'),
},
);
console.log(r.answers.team.choice, r.answers.refund.noul);{
"model": "vana-3.0",
"answers": {
"refund": {"type": "noul", "noul": 0.93, "confidence": 0.86},
"team": {"type": "choice", "choice": "billing",
"probabilities": {"billing": 0.91, "tech": 0.06, "sales": 0.03}},
"urgency": {"type": "score", "score": 2.6, "confidence": 0.52}
},
"usage": {"input_tokens": 112, "output_tokens": 3}
}How it works
Three steps. You get the answer as data, not as text.
Send state
Any text or JSON: a ticket, an email, a transaction, a record.
Ask typed questions
Up to 64 questions in one request, keyed by your own ids.
Get typed answers
The choice, probability or score, with calibrated probabilities and confidence, from one forward pass.
Question types
Choice
Pick one of 2–255 options. Returns the chosen option plus probabilities over all options.
Yes / no
Returns P(true) as noul. You pick the threshold.
Score
An ordinal scale of 2–10 levels, lowest first. Returns the expected level and the distribution.
Use cases
Examples of what you can build. These are illustrations, not customer claims.
Support ticket routing
Send each ticket to billing, tech or sales.
Churn-risk detection
Probability that a customer message signals intent to cancel.
Urgency scoring
Rate incoming requests from “not urgent” to “critical”.
Content moderation
Flag policy violations and pick the category.
Intent classification
Map a user utterance to one of your intents.
Lead qualification
Score inbound leads against your own criteria.
Fast and cheap
server-side latency per call, however many questions you ask
per 1M input tokens. Output isn't billed.
minimum top-up. Prepaid, no subscription.
Pricing is subject to change. See pricing and the cost calculator →
Try it
The live demo is not enabled yet. Get an API key and run the curl sample above. It takes one request.
Make your first decision call
Create a key, top up $5 and send one request.