BEHAVIOR-001: learn and predict actuator actions
This commit is contained in:
@@ -25,6 +25,18 @@ class LifecycleStatus(StrEnum):
|
||||
ARCHIVED = "archived"
|
||||
|
||||
|
||||
class BehaviorMode(StrEnum):
|
||||
SHADOW = "shadow"
|
||||
ACTIVE = "active"
|
||||
PAUSED = "paused"
|
||||
|
||||
|
||||
class BehaviorStatus(StrEnum):
|
||||
COLLECTING = "collecting"
|
||||
TRAINED = "trained"
|
||||
BLOCKED = "blocked"
|
||||
|
||||
|
||||
class AssignmentCandidate(BaseModel):
|
||||
entity_id: str
|
||||
domain: str
|
||||
@@ -71,10 +83,49 @@ class ModelLifecycleState(BaseModel):
|
||||
last_history_signature: str | None = None
|
||||
last_history_point_count: int = Field(default=0, ge=0)
|
||||
reason: str = "Noch keine Trainingsdaten ausgewertet."
|
||||
next_action: str = "Aktuator auswählen und Zuordnung prüfen."
|
||||
next_action: str = "Aktor auswählen; Kontext und Historie werden automatisch geprüft."
|
||||
audit: list[LifecycleAuditEntry] = Field(default_factory=list)
|
||||
|
||||
|
||||
class BehaviorPattern(BaseModel):
|
||||
target_state: str = Field(min_length=1, max_length=100)
|
||||
minute_of_day: int = Field(ge=0, le=1439)
|
||||
weekday: int = Field(ge=0, le=6)
|
||||
context_states: dict[str, str] = Field(default_factory=dict)
|
||||
source: str = Field(default="observed", max_length=40)
|
||||
weight: float = Field(default=1.0, ge=0.1, le=1.0)
|
||||
observed_at: datetime
|
||||
|
||||
|
||||
class BehaviorPrediction(BaseModel):
|
||||
target_state: str
|
||||
confidence: float = Field(ge=0.0, le=1.0)
|
||||
generated_at: datetime
|
||||
reason: str
|
||||
matching_patterns: int = Field(default=0, ge=0)
|
||||
executed: bool = False
|
||||
|
||||
|
||||
class ExecutionEvent(BaseModel):
|
||||
target_state: str
|
||||
executed_at: datetime
|
||||
|
||||
|
||||
class BehaviorState(BaseModel):
|
||||
mode: BehaviorMode = BehaviorMode.SHADOW
|
||||
status: BehaviorStatus = BehaviorStatus.COLLECTING
|
||||
approved_at: datetime | None = None
|
||||
sample_count: int = Field(default=0, ge=0)
|
||||
high_confidence_sample_count: int = Field(default=0, ge=0)
|
||||
patterns: list[BehaviorPattern] = Field(default_factory=list)
|
||||
prediction: BehaviorPrediction | None = None
|
||||
last_trained_at: datetime | None = None
|
||||
last_evaluated_at: datetime | None = None
|
||||
last_executed_at: datetime | None = None
|
||||
execution_events: list[ExecutionEvent] = Field(default_factory=list)
|
||||
reason: str = "Historische Aktorhandlungen werden analysiert."
|
||||
|
||||
|
||||
class ActuatorRecord(BaseModel):
|
||||
actuator_entity_id: str = Field(pattern=r"^[a-z0-9_]+\.[a-z0-9_]+$")
|
||||
enabled: bool = True
|
||||
@@ -85,6 +136,7 @@ class ActuatorRecord(BaseModel):
|
||||
numeric_candidates: list[AssignmentCandidate] = Field(default_factory=list)
|
||||
context_candidates: list[AssignmentCandidate] = Field(default_factory=list)
|
||||
lifecycle: ModelLifecycleState
|
||||
behavior: BehaviorState = Field(default_factory=BehaviorState)
|
||||
|
||||
|
||||
class ReconciliationState(BaseModel):
|
||||
|
||||
Reference in New Issue
Block a user