Question types
A request carries one state (string, object or array) and up to 64 questions keyed by your own ids. All
questions are answered in a single forward pass, so asking 5 questions costs about the same latency as 1.
Every question has a type, free-text instructions, and type-specific criteria.
choice — pick one option
criteria: object of 2–255 option_id: description.
"team": {"type": "choice", "instructions": "Which team should handle this ticket?",
"criteria": {"billing": "Billing, invoices, refunds", "tech": "Bugs, outages, errors", "sales": "Pricing, upgrades"}}
Answer: {"type": "choice", "choice": "billing", "probabilities": {"billing": 0.91, ...}, "confidence": 0.91} —
probabilities sum to 1 over your option ids.
noul — yes / no probability
criteria: null, or {"true": "...", "false": "..."} to spell out what each side means.
"refund": {"type": "noul", "instructions": "Should we refund the customer?"},
"phishing": {"type": "noul", "instructions": "Is this email a phishing attempt?",
"criteria": {"true": "asks for credentials or payment under false pretences", "false": "legitimate"}}
Answer: {"type": "noul", "noul": 0.93, "probabilities": {"true": 0.93, "false": 0.07}, "confidence": 0.86} —
noul is P(true). Pick your own threshold (0.5 by default in the SDK's .value).
score — ordinal level
criteria: array of 2–10 level descriptions, lowest first.
"urgency": {"type": "score", "instructions": "How urgent is this?",
"criteria": ["not urgent", "normal", "urgent", "critical"]}
Answer: {"type": "score", "score": 2.6, "legend": {"1": "not urgent", ...}, "probabilities": {"1": 0.02, ...}, "confidence": 0.52} — score is the expected level (1-based), probabilities the distribution over levels.
Tips
- Put the facts in
stateand the decision ininstructions; keep option descriptions short and distinct. statemay be structured JSON:{"ticket": {...}, "customer": {"plan": "pro"}}.- Vana 3.0 reads English text; inputs longer than 512 tokens are truncated;
usage.input_tokensreports what was processed.