R-levels: what they mean and how to use them
Viora maps every turn (and session, and end-user) to one of four categorical buckets. These are designed to map cleanly to operational decisions in your product.
| Level | Description | Suggested action |
|---|---|---|
| R0 | No signal worth flagging | Nothing — normal flow |
| R1-mid | Moderate distress; non-urgent | Gentle check-in copy / soft resources |
| R1-high | Significant distress; needs attention | Surface crisis resources prominently |
| R2 | Imminent risk | Hard escalation: hotline, human review |
How R-levels are computed
Per turn (PRS). We run a trained model that produces continuous scores for 10 mental-health signals. The peak is your PRS, with an imminence override: if the structured imminence fields fire (intent + plan + accessible means + near timeframe), we force R2 regardless of the continuous score. This catches "I have pills in the cabinet and I'm doing it tonight" even when the model would otherwise miss it.
Per session (SRS, R-level). We aggregate per-turn PRSs with a peak + recency-weighted-sum approach. The session R-level applies a sticky-floor: it can only escalate, never auto-downgrade. Letting "jk i'm fine lol" silence a real crisis would be a product-safety failure.
To allow a session to step down by one level, the latest turn must show structured de-escalation evidence:
- Non-empty
protective_factors(e.g.support_system,help_seeking,reasons_for_living) - Drop in imminence intent of ≥ 0.3
- Plan no longer specific
Per end-user (LBRS). An EWMA over the user's session SRSs with a 30-day half-life. This is the long-term pattern view. A user who hits R1-mid weekly for two months may have an LBRS of R1-high even if their current session is R0.
Urgency vs severity
Severity is "how bad is the state" — captured by the continuous signals. Urgency (imminence) is "how close to a crisis act." They're orthogonal axes:
- Severity high, urgency low: chronic distress without an immediate plan. Care matters, not 911.
- Severity moderate, urgency high: "I have a plan for tonight" deserves R2 even if the language is calm.
Most products only model severity. R-levels collapse both axes into actionable categories.
What to do at each level
This is a starting point — calibrate to your product.
- R0 — no overlay. Treat as normal traffic.
- R1-mid — display a soft footer ("How are you feeling? Here are some resources if you need them") on the bot's reply.
- R1-high — display crisis resources inline. Optionally notify your safety team in batch.
- R2 — interrupt the conversation if you can. Surface 988 (US) / local crisis line. Notify your safety team immediately. If you're regulated, this is the decision point for breakage-glass workflows.