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 state and the decision in instructions; keep option descriptions short and distinct.
  • state may be structured JSON: {"ticket": {...}, "customer": {"plan": "pro"}}.
  • Vana 3.0 reads English text; inputs longer than 512 tokens are truncated; usage.input_tokens reports what was processed.