o
    êi
                     @   s   d Z ddlmZmZmZmZmZ ddlZddlm	Z	 ddl
mZ deeef defd	d
Zdeeef dee fddZdee fddZdee fddZdS )z&Real-time WebSocket streaming helpers.    )AnyAsyncIteratorDictIteratorOptionalN)WebSocketDisconnect   )WebSocketErrordatareturnc                 C   s   |  ddko|  ddkS )z
    Check if WebSocket event signals stream should stop.

    Args:
        data: Unpacked WebSocket message data

    Returns:
        True if stream should stop, False otherwise
    eventfinishreasonstop)getr
    r   P/home/ubuntu/.local/lib/python3.10/site-packages/fishaudio/resources/realtime.py_should_stop   s   
r   c                 C   s@   |  ddkr|  dS |  ddkr|  ddkrtddS )z
    Process a WebSocket audio event.

    Args:
        data: Unpacked WebSocket message data

    Returns:
        Audio bytes if audio event, None for unknown events

    Raises:
        WebSocketError: If finish event has error reason
    r   audior   r   errorz!WebSocket stream ended with errorN)r   r	   r   r   r   r   _process_audio_event   s
   
r   c                 c   sX    	 z|   }t|}t|rW dS t|}|dur|V  W n ty*   tdw q)ae  
    Process WebSocket audio messages (sync).

    Receives messages from WebSocket, yields audio chunks, handles errors.
    Unknown events are ignored and iteration continues.

    Args:
        ws: WebSocket connection from httpx_ws.connect_ws

    Yields:
        Audio bytes

    Raises:
        WebSocketError: On disconnect or error finish event
    TN#WebSocket disconnected unexpectedlyreceive_bytes	ormsgpackunpackbr   r   r   r	   wsmessager
   r   r   r   r   iter_websocket_audio,   s   
r    c                 C  s^   	 z |   I dH }t|}t|rW dS t|}|dur!|V  W n ty-   tdw q)ag  
    Process WebSocket audio messages (async).

    Receives messages from WebSocket, yields audio chunks, handles errors.
    Unknown events are ignored and iteration continues.

    Args:
        ws: WebSocket connection from httpx_ws.aconnect_ws

    Yields:
        Audio bytes

    Raises:
        WebSocketError: On disconnect or error finish event
    TNr   r   r   r   r   r   aiter_websocket_audioL   s   
r!   )__doc__typingr   r   r   r   r   r   httpx_wsr   
exceptionsr	   strboolr   bytesr   r    r!   r   r   r   r   <module>   s     