| from __future__ import annotations | |
| from typing import Any, Dict | |
| from ca.clarity.compass import Compass | |
| from ca.runtime.safety import SafetyAnalyzer | |
| from ca.runtime.state import SafetyLevel, UserState | |
| from ca.safety.risk import RiskSignals | |
| class Router: | |
| """Route user input to skills/models based on intent and safety level.""" | |
| def __init__(self) -> None: | |
| self.compass = Compass() | |
| self.safety = SafetyAnalyzer() | |
| self.last_signal = None | |
| def route(self, text: str, context: Dict[str, Any] | None = None) -> tuple[UserState, SafetyLevel]: | |
| state = self.compass.classify(text) | |
| risk = RiskSignals.detect(text) | |
| signal = self.safety.detect(text) | |
| self.last_signal = signal | |
| if risk.high_risk or signal.high_risk: | |
| return (UserState.CRISIS, SafetyLevel.HIGH) | |
| if state == UserState.MANIPULATOR or risk.medium_risk or signal.medium_risk: | |
| return (state, SafetyLevel.MEDIUM) | |
| return (state, SafetyLevel.LOW) | |