feat: behavioral crisis detection — frequency, time, withdrawal (#130, #133) #149

Closed
Rockachopa wants to merge 1 commits from fix/130-behavioral into main
Owner

Closes #133. Part of #130.

What

Behavioral pattern detection for crisis signals. Analyzes session-level patterns beyond text content.

Signals Detected

Signal Detection Risk Levels
Frequency Messages/hour rate HIGH (>30/hr), MEDIUM (>15/hr)
Time Late-night messaging HIGH (1-4 AM), MEDIUM (10PM-7AM)
Withdrawal Message length + gap trends HIGH (both declining), MEDIUM
Escalation Rising crisis scores over time HIGH (1.5x increase), MEDIUM

Usage

from crisis.behavioral import analyze_session, Message

messages = [Message(timestamp=..., content=..., crisis_score=0.3), ...]
signals = analyze_session(messages)
risk = get_session_risk_level(signals)  # HIGH/MEDIUM/LOW/NONE

Design

  • Pure Python, zero dependencies
  • Works with existing crisis score from text detector
  • Self-test included (rapid-fire, late-night, escalation)
Closes #133. Part of #130. ## What Behavioral pattern detection for crisis signals. Analyzes session-level patterns beyond text content. ## Signals Detected | Signal | Detection | Risk Levels | |--------|-----------|-------------| | Frequency | Messages/hour rate | HIGH (>30/hr), MEDIUM (>15/hr) | | Time | Late-night messaging | HIGH (1-4 AM), MEDIUM (10PM-7AM) | | Withdrawal | Message length + gap trends | HIGH (both declining), MEDIUM | | Escalation | Rising crisis scores over time | HIGH (1.5x increase), MEDIUM | ## Usage ```python from crisis.behavioral import analyze_session, Message messages = [Message(timestamp=..., content=..., crisis_score=0.3), ...] signals = analyze_session(messages) risk = get_session_risk_level(signals) # HIGH/MEDIUM/LOW/NONE ``` ## Design - Pure Python, zero dependencies - Works with existing crisis score from text detector - Self-test included (rapid-fire, late-night, escalation)
Rockachopa added 1 commit 2026-04-16 00:57:57 +00:00
feat: behavioral pattern detection for crisis signals (#133)
All checks were successful
Smoke Test / smoke Manually verified
Sanity Checks / sanity-test Manually verified
Sanity Checks / sanity-test (pull_request) Successful in 7s
Smoke Test / smoke (pull_request) Successful in 11s
f446f6dad6
Detects crisis risk from session-level behavioral patterns:
- Message frequency (rapid-fire = urgency)
- Time-of-day (1-4 AM = high risk)
- Withdrawal (shorter messages, longer gaps)
- Escalation (rising crisis scores)

Closes #133. Part of #130 (multimodal crisis detection).
Rockachopa reviewed 2026-04-16 02:00:05 +00:00
Rockachopa left a comment
Author
Owner

LGTM — clean implementation, merges cleanly.

LGTM — clean implementation, merges cleanly.
Timmy closed this pull request 2026-04-17 01:52:29 +00:00
Owner

Archived — branch unknown preserved for reference. Cherry-pick if still relevant.

Archived — branch `unknown` preserved for reference. Cherry-pick if still relevant.
All checks were successful
Smoke Test / smoke Manually verified
Sanity Checks / sanity-test Manually verified
Sanity Checks / sanity-test (pull_request) Successful in 7s
Smoke Test / smoke (pull_request) Successful in 11s

Pull request closed

Sign in to join this conversation.