from __future__ import annotations from typing import Dict, List, Optional from .models import StateModel, TaskSpec def initial_tracking(task: TaskSpec) -> StateModel: return StateModel( task_id=task.task_id, step_count=0, done=False, discovered_keys={ticket.ticket_id: [] for ticket in task.tickets}, priorities={ticket.ticket_id: None for ticket in task.tickets}, routes={ticket.ticket_id: None for ticket in task.tickets}, resolutions={ticket.ticket_id: None for ticket in task.tickets}, escalations={ticket.ticket_id: None for ticket in task.tickets}, queue_order=[], cumulative_reward=0.0, latest_score={}, ) def update_mapping( current: Dict[str, Optional[str]], ticket_id: str, value: Optional[str], ) -> Dict[str, Optional[str]]: current[ticket_id] = value return current def discovered_for_ticket(discovered_keys: Dict[str, List[str]], ticket_id: str) -> List[str]: return discovered_keys.setdefault(ticket_id, [])