o
    i                     @   s   d dl Z d dlZd dlmZmZ d dlm  mZ	 ddl
mZ ddlmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZmZ zd dlmZ W n e yf   d dl!mZ Y nw G dd dZ"G dd dZ#dS )    N)asynccontextmanagercontextmanager   )ApiError)AsyncClientWrapperSyncClientWrapper)jsonable_encoder)encode_query)remove_none_from_dict)RequestOptions)InvalidWebSocketStatusget_status_code   )AsyncV1SocketClientV1SocketClient)connectc                	   @   N   e Zd ZdefddZeddddeje deje	 dej
e fd	d
ZdS )RawV1Clientclient_wrapperc                C   
   || _ d S N_client_wrapperselfr    r   P/home/ubuntu/.local/lib/python3.10/site-packages/deepgram/agent/v1/raw_client.py__init__      
zRawV1Client.__init__Nauthorizationrequest_optionsr    r!   returnc          	   
   c   s    | j  jd }ttti |dur|di pi ni }|r+|d tj	| }| j 
 }|dur:t||d< |rGd|v rG||d  z"tj||d}t|dV  W d   W dS 1 sbw   Y  W dS  ty } zt|}|d	krt|t|d
dt|t|ddd}~ww )a]  
        Build a conversational voice agent using Deepgram's Voice Agent WebSocket

        Parameters
        ----------
        authorization : typing.Optional[str]
            Use your API key for authentication, or alternatively generate a [temporary token](/guides/fundamentals/token-based-authentication) and pass it via the `token` query parameter.

            **Example:** `token %DEEPGRAM_API_KEY%` or `bearer %DEEPGRAM_TOKEN%`

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        V1SocketClient
        /v1/agent/converseNadditional_query_parameters?Authorizationadditional_headers)r'   	websocket  /Websocket initialized with invalid credentials.status_codeheadersbody8Unexpected error when initializing websocket connection.)r   get_environmentagentr	   r   r
   geturllibparse	urlencodeget_headersstrupdatewebsockets_sync_clientr   r   r   r   r   dict	r   r    r!   ws_url_encoded_query_paramsr.   protocolexcr-   r   r   r   r      sP   
&zRawV1Client.connect)__name__
__module____qualname__r   r   r   typingOptionalr8   r   Iteratorr   r   r   r   r   r   r          r   c                	   @   r   )AsyncRawV1Clientr   c                C   r   r   r   r   r   r   r   r   X   r   zAsyncRawV1Client.__init__Nr   r    r!   r"   c          	   
   C  s2  | j  jd }ttti |dur|di pi ni }|r+|d tj	| }| j 
 }|dur:t||d< |rGd|v rG||d  z+t||d4 I dH }t|dV  W d  I dH  W dS 1 I dH skw   Y  W dS  ty } zt|}|d	krt|t|d
dt|t|ddd}~ww )ab  
        Build a conversational voice agent using Deepgram's Voice Agent WebSocket

        Parameters
        ----------
        authorization : typing.Optional[str]
            Use your API key for authentication, or alternatively generate a [temporary token](/guides/fundamentals/token-based-authentication) and pass it via the `token` query parameter.

            **Example:** `token %DEEPGRAM_API_KEY%` or `bearer %DEEPGRAM_TOKEN%`

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        AsyncV1SocketClient
        r#   Nr$   r%   r&   r'   )extra_headersr(   r*   r+   r,   r0   )r   r1   r2   r	   r   r
   r3   r4   r5   r6   r7   r8   r9   websockets_client_connectr   r   r   r   r;   r<   r   r   r   r   [   sP   
2zAsyncRawV1Client.connect)rA   rB   rC   r   r   r   rD   rE   r8   r   AsyncIteratorr   r   r   r   r   r   rH   W   rG   rH   )$rD   urllib.parser4   
contextlibr   r   websockets.sync.clientsyncclientr:   core.api_errorr   core.client_wrapperr   r   core.jsonable_encoderr   core.query_encoderr	   core.remove_none_from_dictr
   core.request_optionsr   core.websocket_compatr   r   socket_clientr   r   websockets.legacy.clientr   rJ   ImportError
websocketsr   rH   r   r   r   r   <module>   s&   @