Skip to main content
Noul answers a probabilistic yes/no proposition. You send a context and a proposition about it; Krun returns the probability that the proposition holds.

Complete example

Response:
The body always has a context (the text to decide on) and a questions map. Each question is keyed by an id you choose (needs_human here), and the answer comes back under the same id in answers. A request can mix noul questions with choice and score questions, up to 16. Typical propositions:
  • Should retrieve? “Does answering this question require looking up the knowledge base?”
  • Needs human? “Is the customer asking to speak with a person?”
  • Likely fraud? “Does the message describe a payment the customer did not make?”
  • Should retry? “Did the tool call fail for a temporary reason?”

Question fields

A noul question is one entry of questions: Without criteria, the model decides from the proposition alone:
Use criteria when the boundary is not obvious from the question alone, for example what counts as “urgent” in your support policy.

Reading the answer

noul is the probability: there is no separate confidence field. To act on it, choose a threshold for your use case: a high threshold (say 0.9) when a false “yes” is expensive, a lower one when a missed “yes” is worse.
Krun One’s noul probabilities are calibrated on the kinds of propositions it was trained and evaluated on (intents, tool fit, moderation and quality properties). On propositions and texts far from those, the ranking usually holds but the probabilities can be over-confident. Validate your threshold on a sample of your own data, and send feedback with expected: {"type": "noul", "value": true | false}.

Writing good propositions

  • Ask one thing per question. “Is the customer angry and asking for a refund?” is two propositions: use two questions.
  • Phrase it about the context, not about the model: “Does the message mention a delivery date?”.
  • Prefer concrete wording over labels: “Is the customer reporting a card they do not recognise?” beats “card_payment_not_recognised?”.