import pydantic class AiResponse(pydantic.BaseModel): ai_note: str = '' class RunResponse(AiResponse): min_safe: int | None = None class JumpResponse(RunResponse): must_auto_jump: bool = False run_if_auto_jump: bool = False class TagResponse(RunResponse): pass class UncappedRunResponse(RunResponse): send_trail: bool = False trail_min_safe: int = 10 trail_min_safe_delta: int = 0 class ThrowResponse(AiResponse): cutoff: bool = False # Stops on True at_lead_runner: bool = True at_trail_runner: bool = False # Stops on False trail_max_safe: int = 10 trail_max_safe_delta: int = -6 class DefenseResponse(AiResponse): hold_first: bool = False hold_second: bool = False hold_third: bool = False outfield_in: bool = False infield_in: bool = False corners_in: bool = False def defender_in(self, position: str): if self.infield_in and (position in ['C', '1B', '2B', '3B', 'SS', 'P']): return True elif self.corners_in and (position in ['C', '1B', '3B', 'P']): return True elif self.outfield_in and (position in ['LF', 'CF', 'RF']): return True return False