openclaw-meta-bridge / app /services /risk_rules.py
Ordo
Initial public release
0e84a1f
from ..models import PageContext, Channel, RiskLevel
SEVERITY = {RiskLevel.low: 1, RiskLevel.medium: 2, RiskLevel.high: 3, RiskLevel.blocked: 4}
BLOCKED_TERMS = ["kill yourself", "dox"]
HEALTH_ESCALATION_TERMS = ["chest pain", "suicidal", "overdose", "can't breathe", "cant breathe", "stroke", "911", "emergency", "urgent medical"]
CIVIC_HIGH_RISK_TERMS = ["where do i vote", "am i registered", "absentee ballot", "mail ballot", "polling place", "opponent committed", "fraud", "illegal", "deepfake"]
def max_risk(*levels: RiskLevel) -> RiskLevel:
return max(levels, key=lambda r: SEVERITY[r])
def classify_risk(page_context: PageContext, channel: Channel, text: str | None, is_public: bool) -> RiskLevel:
body = (text or "").lower()
if any(term in body for term in BLOCKED_TERMS):
return RiskLevel.blocked
if page_context == PageContext.healthcare:
if any(term in body for term in HEALTH_ESCALATION_TERMS):
return RiskLevel.high
if any(term in body for term in ["medication", "diagnosis", "patient", "symptoms"]):
return RiskLevel.high
if page_context == PageContext.civic:
if any(term in body for term in CIVIC_HIGH_RISK_TERMS):
return RiskLevel.high
if is_public and channel == Channel.comment:
return RiskLevel.medium
if is_public and channel in {Channel.comment, Channel.page_post}:
return RiskLevel.medium
return RiskLevel.low
def requires_human_approval(page_context: PageContext, channel: Channel, risk_level: RiskLevel, is_public: bool) -> bool:
if risk_level in {RiskLevel.medium, RiskLevel.high, RiskLevel.blocked}:
return True
if page_context == PageContext.civic and is_public:
return True
if channel in {Channel.comment, Channel.page_post}:
return True
return False