Spaces:
Sleeping
Sleeping
| from __future__ import annotations | |
| from dataclasses import asdict, dataclass, field, replace | |
| from typing import Dict, List | |
| def clamp01(value: float) -> float: | |
| return max(0.0, min(1.0, float(value))) | |
| class RelationshipState: | |
| david_chen: float = 0.75 | |
| sundar: float = 0.80 | |
| priya: float = 0.90 | |
| rahul: float = 0.88 | |
| arjun: float = 0.82 | |
| def clamped(self) -> "RelationshipState": | |
| return RelationshipState( | |
| david_chen=clamp01(self.david_chen), | |
| sundar=clamp01(self.sundar), | |
| priya=clamp01(self.priya), | |
| rahul=clamp01(self.rahul), | |
| arjun=clamp01(self.arjun), | |
| ) | |
| class EpisodeState: | |
| day: int = 0 | |
| energy: float = 0.87 | |
| sprint_health: float = 0.80 | |
| staging_fixed: bool = False | |
| leave_status: str = "pending" | |
| appraisal_done: bool = False | |
| oncall_accepted: bool = False | |
| relationships: RelationshipState = field(default_factory=RelationshipState) | |
| decisions: List[dict] = field(default_factory=list) | |
| history: List[str] = field(default_factory=list) | |
| def normalized(self) -> "EpisodeState": | |
| return replace( | |
| self, | |
| energy=clamp01(self.energy), | |
| sprint_health=clamp01(self.sprint_health), | |
| relationships=self.relationships.clamped(), | |
| ) | |
| def to_observation(self) -> Dict: | |
| days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] | |
| return { | |
| "day": days[self.day], | |
| "energy_pct": round(self.energy * 100), | |
| "sprint_health_pct": round(self.sprint_health * 100), | |
| "staging_fixed": self.staging_fixed, | |
| "leave_status": self.leave_status, | |
| "appraisal_done": self.appraisal_done, | |
| "relationships": asdict(self.relationships), | |
| "history": list(self.history), | |
| } | |