test / app /models /state.py
paramjitbaral's picture
Upload folder using huggingface_hub
ab69aa8 verified
Raw
History Blame Contribute Delete
2.94 kB
from typing import Literal
from pydantic import BaseModel, Field
class LearningEntry(BaseModel):
success: int = Field(default=0, ge=0)
fail: int = Field(default=0, ge=0)
avg: float = Field(default=0.0, ge=0.0, le=1.0)
accepted: int = Field(default=0, ge=0)
rejected: int = Field(default=0, ge=0)
class HospitalValidationDetails(BaseModel):
"""Hidden validation checks performed after ambulance arrives at hospital"""
icu_available: bool
doctor_available: bool
equipment_functional: bool
overload_status: Literal["clear", "moderate", "severe"]
patient_suitability: float = Field(ge=0.0, le=1.0) # 0=unsuitable, 1=ideal
class ArrivalOutcome(BaseModel):
"""Result of hospital arrival attempt"""
status: Literal["accepted", "partial", "rejected"]
reason: str
validation_details: HospitalValidationDetails | None = None
reward_modifier: float = Field(default=1.0, ge=0.0, le=1.5)
terminal: bool = False
class HospitalState(BaseModel):
hospital_id: str
distance_km: float = Field(ge=0)
icu_display: Literal["unknown", "available"]
icu_actual: bool
specialization: Literal["cardiac", "trauma", "general"]
traffic: Literal["low", "medium", "high"]
class EnvState(BaseModel):
episode_id: int
seed: int
task_id: Literal["acde_easy", "acde_medium", "acde_hard"]
task_objective: str
scenario_type: Literal["medical", "accident", "fire"]
scenario_name: str
scenario_difficulty: Literal["easy", "medium", "hard"]
patient_condition: str
required_specialization: Literal["cardiac", "trauma", "general"]
initial_critical_time_limit_minutes: float = Field(gt=0)
critical_time_limit_minutes: float = Field(gt=0)
step: int = Field(ge=1)
max_steps: int = 3
hospitals: list[HospitalState]
selected_hospital_id: str | None = None
done: bool = False
final_outcome: Literal["SUCCESS", "FAILURE"] | None = None
final_score: float = Field(default=0.001, ge=0.001, le=0.999)
reward: float = Field(default=0.001, ge=0.001, le=0.999)
ambulance_status: Literal["en_route", "in_transit", "arrived", "admitted", "rerouting"] = "en_route"
current_location_context: str = "incident_site"
visited_hospitals: list[str] = Field(default_factory=list)
failed_hospitals: list[str] = Field(default_factory=list)
recent_failed_hospitals: list[str] = Field(default_factory=list)
failed_reasons: dict[str, str] = Field(default_factory=dict)
total_time_spent_minutes: float = Field(default=0.0, ge=0.0)
rerouting_reason: str | None = None
# New fields for arrival tracking
last_arrival_outcome: ArrivalOutcome | None = None
accepted_hospital_id: str | None = None
explanation: list[str] = Field(default_factory=list)
memory: dict[str, LearningEntry] = Field(default_factory=dict)