smart_emergency / models.py
rishi38's picture
Upload folder using huggingface_hub
4b98131 verified
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
"""
Data models for the Dispatch911 Environment.
Action: the agent's structured dispatch decision per incoming 911 call.
Observation: the text-based observation the agent receives each step.
"""
from typing import Dict, List, Literal, Optional
from openenv.core.env_server.types import Action, Observation
from pydantic import Field
# Reroute sub-action
class RerouteAction(Action):
"""Optional reroute block inside a dispatch action."""
vehicle_to_reroute: str = Field(..., description="Unit ID of vehicle to redirect")
from_event_id: str = Field(..., description="EVT-NNNN the vehicle is pulled from")
replacement_vehicle_id: Optional[str] = Field(
None, description="Free unit to cover the abandoned event"
)
# Agent action
class SmartEmergencyAction(Action):
"""
The agent's response to an incoming 911 call.
Three modes:
- action_type='dispatch': handle a new emergency
- action_type='duplicate': flag as repeat of an existing event
- action_type='hold': queue event for a busy vehicle to handle after it frees
"""
action_type: Literal["dispatch", "duplicate", "hold"] = Field(
..., description="'dispatch', 'duplicate', or 'hold'"
)
severity_pred: int = Field(
..., ge=1, le=5, description="Predicted severity 1-5"
)
is_duplicate: bool = Field(
False, description="Whether the agent believes this is a repeat call"
)
duplicate_of_event_id: Optional[str] = Field(
None, description="EVT-NNNN of the event this duplicates (required if is_duplicate)"
)
vehicle_type: Optional[str] = Field(
None, description="'police', 'ambulance', or 'fire' (required if dispatch or hold)"
)
vehicle_id: Optional[str] = Field(
None, description="Unit to dispatch now (dispatch) or busy unit to queue for (hold)"
)
reroute: Optional[RerouteAction] = Field(
None, description="Optional reroute instruction"
)
# Observation
class SmartEmergencyObservation(Observation):
"""
Observation returned to the agent each step.
Contains the full text prompt (transcript + active events + unit status +
city reference + dispatcher notes) and structured metadata for logging.
"""
prompt: str = Field(default="", description="Full text observation for the LLM")
step: int = Field(default=0, description="Current step number")
call_id: str = Field(default="", description="ID of the incoming call")
reward_breakdown: Dict[str, float] = Field(
default_factory=dict, description="Per-component reward breakdown"
)
active_event_ids: List[str] = Field(
default_factory=list, description="Currently active event IDs"
)
fleet_utilisation: float = Field(
default=0.0, description="Fraction of fleet currently busy"
)
ground_truth: Dict = Field(
default_factory=dict,
description="Hidden ground truth for the current call (populated after step)",
)