from __future__ import annotations import asyncio from dataclasses import dataclass, field from datetime import datetime from typing import List, Optional @dataclass class MeasureSnapshot: result: List[dict] video_left: str video_right: str updated_at: Optional[datetime] = None error: Optional[str] = None raw_prediction_path: Optional[str] = None @dataclass class HealthSnapshot: behavior_result: str health_result: str updated_at: Optional[datetime] = None error: Optional[str] = None raw_class_en: str = "" @dataclass class AppState: measure_lock: asyncio.Lock = field(default_factory=asyncio.Lock) action_lock: asyncio.Lock = field(default_factory=asyncio.Lock) # job status for optional polling(业务结果见 SQLite) measure_status: str = "idle" action_status: str = "idle" app_state = AppState()