ReliefLensDemo / backend /skills /classify_priority.py
copilot-swe-agent[bot]
feat: build complete ReliefLensAI backend
d0f3cbe unverified
Raw
History Blame Contribute Delete
1.78 kB
from __future__ import annotations
import logging
from typing import Any, Optional
from schemas.incident import Priority
from schemas.signal import NormalizedSignal, SignalType
logger = logging.getLogger(__name__)
_PRIORITY_RULES = {
SignalType.PERSON_TRAPPED: Priority.P0,
SignalType.MEDICAL_EMERGENCY: Priority.P0,
SignalType.FIRE: Priority.P0,
SignalType.STRUCTURAL_DAMAGE: Priority.P1,
SignalType.MISSING_PERSON: Priority.P1,
SignalType.FLOOD: Priority.P1,
SignalType.RESOURCE_REQUEST: Priority.P2,
SignalType.SAFE_STATUS: Priority.P3,
SignalType.UNKNOWN: Priority.P2,
}
_P0_KEYWORDS = ["atrapado", "trapped", "no puede salir", "inconsciente", "unconscious", "no respira", "not breathing", "critical", "crítico", "sangre", "bleeding", "niño solo", "child alone"]
_P1_KEYWORDS = ["urgente", "urgent", "rescate", "rescue", "evacuar", "evacuate", "herido", "injured", "derrumbe", "collapse"]
async def classify_priority(
signal: NormalizedSignal,
vllm_client: Any = None,
) -> Priority:
base = _PRIORITY_RULES.get(signal.signal_type, Priority.P2)
text_lower = signal.raw_text.lower()
if any(kw in text_lower for kw in _P0_KEYWORDS):
if base in (Priority.P1, Priority.P2):
logger.debug("Upgrading signal %s to P0 due to critical keywords", signal.id)
return Priority.P0
if any(kw in text_lower for kw in _P1_KEYWORDS):
if base == Priority.P2:
logger.debug("Upgrading signal %s to P1 due to urgency keywords", signal.id)
return Priority.P1
if signal.affected_people and signal.affected_people > 20:
if base == Priority.P2:
return Priority.P1
if base == Priority.P1:
return Priority.P0
return base