45 lines
1.1 KiB
Python
45 lines
1.1 KiB
Python
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
|