import base64 from enum import Enum from typing import Optional from .model import TypedModel from .transcriber import TranscriberConfig from .agent import AgentConfig from .synthesizer import SynthesizerConfig class WebSocketMessageType(str, Enum): BASE = "websocket_base" START = "websocket_start" AUDIO = "websocket_audio" READY = "websocket_ready" STOP = "websocket_stop" class WebSocketMessage(TypedModel, type=WebSocketMessageType.BASE): pass class AudioMessage(WebSocketMessage, type=WebSocketMessageType.AUDIO): data: str @classmethod def from_bytes(cls, chunk: bytes): return cls(data=base64.b64encode(chunk).decode("utf-8")) def get_bytes(self) -> bytes: return base64.b64decode(self.data) class StartMessage(WebSocketMessage, type=WebSocketMessageType.START): transcriber_config: TranscriberConfig agent_config: AgentConfig synthesizer_config: SynthesizerConfig conversation_id: Optional[str] = None class ReadyMessage(WebSocketMessage, type=WebSocketMessageType.READY): pass class StopMessage(WebSocketMessage, type=WebSocketMessageType.STOP): pass