"""엔진이 UI로 올려보내는 이벤트 타입.""" from __future__ import annotations import time from dataclasses import dataclass, field from enum import Enum class EngineState(str, Enum): IDLE = "idle" LOADING = "loading" RUNNING = "running" STOPPING = "stopping" ERROR = "error" @dataclass class TranslationLine: """화면에 뿌릴 자막 한 줄.""" source_text: str translated_text: str source_lang: str target_lang: str is_final: bool = True created_at: float = field(default_factory=time.time) #: 발화가 끝난 시점부터 번역이 나오기까지 걸린 시간(초) latency_s: float = 0.0 asr_ms: int = 0 mt_ms: int = 0 @property def display(self) -> str: return self.translated_text or self.source_text @dataclass class EngineStatus: state: EngineState = EngineState.IDLE message: str = "" progress: float = 0.0 #: 최근 입력 오디오 레벨 (0.0 ~ 1.0), VU 미터용 level: float = 0.0 queue_depth: int = 0