File size: 2,359 Bytes
4554903 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | """BDI runtime models using pure dataclasses."""
from dataclasses import dataclass, field
from datetime import datetime
from enum import Enum
from typing import List, Optional
class BeliefStatus(Enum):
ACTIVE = "active"
ARCHIVED = "archived"
CHALLENGED = "challenged"
STALE = "stale"
class DesireStatus(Enum):
ACTIVE = "active"
ACHIEVED = "achieved"
SUSPENDED = "suspended"
ABANDONED = "abandoned"
class IntentionStatus(Enum):
ACTIVE = "active"
COMPLETED = "completed"
SUSPENDED = "suspended"
FAILED = "failed"
@dataclass
class BDIBelief:
id: str
content: str
confidence: float
status: BeliefStatus
source: str
tags: List[str]
created_at: datetime
last_reviewed: Optional[datetime] = None
version: int = 1
evidence: List[str] = field(default_factory=list)
def __post_init__(self) -> None:
if not (0.0 <= self.confidence <= 1.0):
raise ValueError(f"confidence must be 0-1, got {self.confidence}")
if self.version < 1:
raise ValueError(f"version must be >= 1, got {self.version}")
@dataclass
class BDIDesire:
id: str
content: str
priority: float
status: DesireStatus
related_tags: List[str]
measurable: bool
metric: Optional[str]
created_at: datetime
last_reviewed: Optional[datetime] = None
version: int = 1
def __post_init__(self) -> None:
if not (0.0 <= self.priority <= 1.0):
raise ValueError(f"priority must be 0-1, got {self.priority}")
if self.version < 1:
raise ValueError(f"version must be >= 1, got {self.version}")
@dataclass
class BDIIntention:
id: str
goal: str
status: IntentionStatus
belief_ids: List[str]
desire_ids: List[str]
created_at: datetime
last_reviewed: Optional[datetime] = None
version: int = 1
progress: float = 0.0
def __post_init__(self) -> None:
if not (0.0 <= self.progress <= 1.0):
raise ValueError(f"progress must be 0-1, got {self.progress}")
if self.version < 1:
raise ValueError(f"version must be >= 1, got {self.version}")
@dataclass
class BDISnapshot:
org_id: str
beliefs: List[BDIBelief]
desires: List[BDIDesire]
intentions: List[BDIIntention]
snapshot_at: datetime
version: int = 1
|