landvex: Fixar och tester klara för alla komponenter
- Datafabrik: Dockerfile fix, agentorkestrering fungerar - Vision: Identify-modell, FAISS, OCR alla testade - API: Alla 7 integrationstester passerade - Upplösare: Entitetsupplösning verifierad
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Reality State Engine
|
||||
Hanterar objektets livscykel
|
||||
"""
|
||||
from enum import Enum
|
||||
from datetime import datetime
|
||||
|
||||
class RealityState(Enum):
|
||||
NORMAL = "normal"
|
||||
WATCH = "watch"
|
||||
WARNING = "warning"
|
||||
CRITICAL = "critical"
|
||||
VERIFICATION = "verification"
|
||||
RESOLVED = "resolved"
|
||||
|
||||
class StateEngine:
|
||||
"""Hanterar state-övergångar"""
|
||||
|
||||
def __init__(self):
|
||||
self.transitions = {
|
||||
RealityState.NORMAL: [RealityState.WATCH, RealityState.WARNING, RealityState.CRITICAL],
|
||||
RealityState.WATCH: [RealityState.NORMAL, RealityState.WARNING, RealityState.CRITICAL],
|
||||
RealityState.WARNING: [RealityState.NORMAL, RealityState.WATCH, RealityState.CRITICAL, RealityState.VERIFICATION],
|
||||
RealityState.CRITICAL: [RealityState.VERIFICATION, RealityState.WARNING],
|
||||
RealityState.VERIFICATION: [RealityState.RESOLVED, RealityState.CRITICAL],
|
||||
RealityState.RESOLVED: [RealityState.NORMAL]
|
||||
}
|
||||
|
||||
def calculate_state(self, risks):
|
||||
"""Beräkna state baserat på risker"""
|
||||
if not risks:
|
||||
return RealityState.NORMAL
|
||||
|
||||
severities = [r["severity"] for r in risks]
|
||||
|
||||
if "critical" in severities:
|
||||
return RealityState.CRITICAL
|
||||
elif "high" in severities:
|
||||
return RealityState.WARNING
|
||||
elif "medium" in severities:
|
||||
return RealityState.WATCH
|
||||
|
||||
return RealityState.NORMAL
|
||||
|
||||
def can_transition(self, current_state, new_state):
|
||||
"""Kontrollera om övergång är tillåten"""
|
||||
return new_state in self.transitions.get(current_state, [])
|
||||
|
||||
def transition(self, road_id, current_state, new_state, reason=""):
|
||||
"""Utför state-övergång"""
|
||||
if not self.can_transition(current_state, new_state):
|
||||
return None
|
||||
|
||||
return {
|
||||
"road_id": road_id,
|
||||
"from_state": current_state.value,
|
||||
"to_state": new_state.value,
|
||||
"timestamp": datetime.now().isoformat(),
|
||||
"reason": reason
|
||||
}
|
||||
|
||||
if __name__ == "__main__":
|
||||
engine = StateEngine()
|
||||
|
||||
# Testa
|
||||
risks = [{"severity": "critical"}]
|
||||
state = engine.calculate_state(risks)
|
||||
print(f"State med critical risk: {state.value}")
|
||||
|
||||
risks = [{"severity": "high"}]
|
||||
state = engine.calculate_state(risks)
|
||||
print(f"State med high risk: {state.value}")
|
||||
|
||||
risks = []
|
||||
state = engine.calculate_state(risks)
|
||||
print(f"State utan risker: {state.value}")
|
||||
Reference in New Issue
Block a user