Probabilities and confidence
How to read strike-1 probabilities, confidence, confidence_band, and meta.
Every strike-1 answer includes a probability on every option, read directly from the model (prob_source is "native"). Probabilities are uncalibrated in beta. The playground marks them Uncalibrated. Use them to compare options and route work, not as forecasts.
Reading the distribution
import strikeflow as strike
result = strike.decide(
"Which team?",
["billing", "tech", "sales"],
context="Please refund the duplicate charge on my card.",
)
for option, prob in result.probabilities.items():
print(option, round(prob, 4))
assert abs(sum(result.probabilities.values()) - 1.0) < 1e-5Use probabilities to:
- Route only when the margin is clear.
- Send ambiguous cases to a human or a general LLM fallback.
- Log decision quality in traces.
Confidence
confidence is the top answer probability: the largest value in probabilities (for yes/no, the larger of noul and 1 - noul). It ranges from 0 to 1 and is uncalibrated in beta. If the API omits it, the SDK sets confidence = probabilities[answer], which is the same value.
separation is optional and shows how far the top answer stands above an even split: (n × p_max - 1) / (n - 1), where n is the number of options. It ranges from 0 (all options equal) to 1 (one option has all the probability). It has no calibration meaning, so do not use it as a probability.
if result.confidence < 0.7:
# your fallback: ask a human, call a general LLM, or re-prompt
...confidence_band
confidence_band is reserved and is currently always null. Bands will be enabled only after a measured reliability check. Until then, route on confidence.
The strikeflow SDK maps the HTTP response into DecisionResult; inspect result.raw if you need confidence_band or meta from the API.
meta
The top-level meta object on a systemone response includes latency, region, and related fields. Use it for observability, not as a user-facing accuracy score.
low_confidence flag
Pass min_confidence on decide or configure the engine once:
import strikeflow as strike
strike.configure(min_confidence=0.7)
result = strike.decide("Escalate?", "yes_no", context="vague message: hmm")
if result.low_confidence:
...The flag is computed client-side: (result.confidence or 0) < min_confidence.
abstain_below compares its threshold with the top answer probability (confidence), never with separation.
Tool results
strike_decision_tool().handle(...) returns a JSON dict (via DecisionResult.to_dict()) with rounded probabilities, confidence, low_confidence, and trace_id when tracing is active.