From 160167758bd0515a7ca1f67c547aad53e03fea26 Mon Sep 17 00:00:00 2001 From: Mark Backman Date: Sat, 8 Feb 2025 09:19:35 -0500 Subject: [PATCH] Add docstrings to daily.py --- src/pipecat/transports/services/daily.py | 124 +++++++++++++++++++++++ 1 file changed, 124 insertions(+) diff --git a/src/pipecat/transports/services/daily.py b/src/pipecat/transports/services/daily.py index 6ae091731..b67bede4a 100644 --- a/src/pipecat/transports/services/daily.py +++ b/src/pipecat/transports/services/daily.py @@ -62,15 +62,36 @@ VAD_RESET_PERIOD_MS = 2000 @dataclass class DailyTransportMessageFrame(TransportMessageFrame): + """Frame for transport messages in Daily calls. + + Attributes: + participant_id: Optional ID of the participant this message is for/from. + """ + participant_id: Optional[str] = None @dataclass class DailyTransportMessageUrgentFrame(TransportMessageUrgentFrame): + """Frame for urgent transport messages in Daily calls. + + Attributes: + participant_id: Optional ID of the participant this message is for/from. + """ + participant_id: Optional[str] = None class WebRTCVADAnalyzer(VADAnalyzer): + """Voice Activity Detection analyzer using WebRTC. + + Implements voice activity detection using Daily's native WebRTC VAD. + + Args: + sample_rate: Audio sample rate in Hz. + params: VAD configuration parameters (VADParams). + """ + def __init__(self, *, sample_rate: Optional[int] = None, params: VADParams = VADParams()): super().__init__(sample_rate=sample_rate, params=params) @@ -90,11 +111,32 @@ class WebRTCVADAnalyzer(VADAnalyzer): class DailyDialinSettings(BaseModel): + """Settings for Daily's dial-in functionality. + + Attributes: + call_id: CallId is represented by UUID and represents the sessionId in the SIP Network. + call_domain: Call Domain is represented by UUID and represents your Daily Domain on the SIP Network. + """ + call_id: str = "" call_domain: str = "" class DailyTranscriptionSettings(BaseModel): + """Configuration settings for Daily's transcription service. + + Attributes: + language: ISO language code for transcription (e.g. "en"). + tier: Deprecated. Use model instead. + model: Transcription model to use (e.g. "nova-2-general"). + profanity_filter: Whether to filter profanity from transcripts. + redact: Whether to redact sensitive information. + endpointing: Whether to use endpointing to determine speech segments. + punctuate: Whether to add punctuation to transcripts. + includeRawResponse: Whether to include raw response data. + extra: Additional parameters passed to the Deepgram transcription service. + """ + language: str = "en" tier: Optional[str] = None model: str = "nova-2-general" @@ -117,6 +159,16 @@ class DailyTranscriptionSettings(BaseModel): class DailyParams(TransportParams): + """Configuration parameters for Daily transport. + + Args: + api_url: Daily API base URL + api_key: Daily API authentication key + dialin_settings: Optional settings for dial-in functionality + transcription_enabled: Whether to enable speech transcription + transcription_settings: Configuration for transcription service + """ + api_url: str = "https://api.daily.co/v1" api_key: str = "" dialin_settings: Optional[DailyDialinSettings] = None @@ -125,6 +177,33 @@ class DailyParams(TransportParams): class DailyCallbacks(BaseModel): + """Callback handlers for Daily events. + + Attributes: + on_joined: Called when bot successfully joined a room. + on_left: Called when bot left a room. + on_error: Called when an error occurs. + on_app_message: Called when receiving an app message. + on_call_state_updated: Called when call state changes. + on_dialin_connected: Called when dial-in is connected. + on_dialin_ready: Called when dial-in is ready. + on_dialin_stopped: Called when dial-in is stopped. + on_dialin_error: Called when dial-in encounters an error. + on_dialin_warning: Called when dial-in has a warning. + on_dialout_answered: Called when dial-out is answered. + on_dialout_connected: Called when dial-out is connected. + on_dialout_stopped: Called when dial-out is stopped. + on_dialout_error: Called when dial-out encounters an error. + on_dialout_warning: Called when dial-out has a warning. + on_participant_joined: Called when a participant joins. + on_participant_left: Called when a participant leaves. + on_participant_updated: Called when participant info is updated. + on_transcription_message: Called when receiving transcription. + on_recording_started: Called when recording starts. + on_recording_stopped: Called when recording stops. + on_recording_error: Called when recording encounters an error. + """ + on_joined: Callable[[Mapping[str, Any]], Awaitable[None]] on_left: Callable[[], Awaitable[None]] on_error: Callable[[str], Awaitable[None]] @@ -166,6 +245,19 @@ def completion_callback(future): class DailyTransportClient(EventHandler): + """Core client for interacting with Daily's API. + + Manages the connection to Daily rooms and handles all low-level API interactions. + + Args: + room_url: URL of the Daily room to connect to. + token: Optional authentication token for the room. + bot_name: Display name for the bot in the call. + params: Configuration parameters (DailyParams). + callbacks: Event callback handlers (DailyCallbacks). + transport_name: Name identifier for the transport. + """ + _daily_initialized: bool = False # This is necessary to override EventHandler's __new__ method. @@ -711,6 +803,15 @@ class DailyTransportClient(EventHandler): class DailyInputTransport(BaseInputTransport): + """Handles incoming media streams and events from Daily calls. + + Processes incoming audio, video, transcriptions and other events from Daily. + + Args: + client: DailyTransportClient instance. + params: Configuration parameters. + """ + def __init__(self, client: DailyTransportClient, params: DailyParams, **kwargs): super().__init__(params, **kwargs) @@ -848,6 +949,15 @@ class DailyInputTransport(BaseInputTransport): class DailyOutputTransport(BaseOutputTransport): + """Handles outgoing media streams and events to Daily calls. + + Manages sending audio, video and other data to Daily calls. + + Args: + client: DailyTransportClient instance. + params: Configuration parameters. + """ + def __init__(self, client: DailyTransportClient, params: DailyParams, **kwargs): super().__init__(params, **kwargs) @@ -888,6 +998,20 @@ class DailyOutputTransport(BaseOutputTransport): class DailyTransport(BaseTransport): + """Transport implementation for Daily audio and video calls. + + Handles audio/video streaming, transcription, recordings, dial-in, + dial-out, and call management through Daily's API. + + Args: + room_url: URL of the Daily room to connect to. + token: Optional authentication token for the room. + bot_name: Display name for the bot in the call. + params: Configuration parameters (DailyParams) for the transport. + input_name: Optional name for the input transport. + output_name: Optional name for the output transport. + """ + def __init__( self, room_url: str,