o
    êi                     @   s   d dl Z d dlmZ d dlmZmZmZmZ d dlZd dl	Z	d dl
mZmZmZ ddlmZ ddlmZmZmZmZmZ G dd	 d	ZG d
d dZdS )    N)ThreadPoolExecutor)AsyncGeneratorAsyncIterable	GeneratorIterable)WebSocketDisconnect
connect_wsaconnect_ws   )WebSocketErr)Backends
CloseEvent
StartEvent
TTSRequest	TextEventc                   @   sn   e Zd ZddddededefddZd	d
 Zdd Zdd Z	dde	de
e dedeeddf fddZdS )WebSocketSessionhttps://api.fish.audio
   )base_urlmax_workersapikeyr   r   c                C   s<   || _ || _t|d| _tj| jd| j  ddd| _d S )N)r   Bearer fish-audio/python/legacyAuthorizationz
User-Agentr   headers)_apikey	_base_urlr   	_executorhttpxClient_client)selfr   r   r    r$   L/home/ubuntu/.local/lib/python3.10/site-packages/fish_audio_sdk/websocket.py__init__   s   
zWebSocketSession.__init__c                 C   s   | S Nr$   r#   r$   r$   r%   	__enter__!   s   zWebSocketSession.__enter__c                 C   s   |    d S r'   closer#   exc_type	exc_value	tracebackr$   r$   r%   __exit__$   s   zWebSocketSession.__exit__c                 C   s   | j   d S r'   )r"   r+   r(   r$   r$   r%   r+   '   s   zWebSocketSession.close
speech-1.5requesttext_streambackendreturnNc           	   	   #   s    t d| jd|idT fdd}| j|}	 z- }t|}|d }|dkr3|d V  n|d	krG|d
 dkr?t|d
 dkrGW nW n	 tyQ   tw q|	  W d    d S 1 sbw   Y  d S )N/v1/tts/livemodelclientr   c                     sX    tt d  D ]}  tt| d  q tt   d S N)r2   text
send_bytes	ormsgpackpackbr   
model_dumpr   r   r;   r2   r3   wsr$   r%   sender6   s    z$WebSocketSession.tts.<locals>.senderTeventaudiofinishreasonerrorstop)
r   r"   r   submitreceive_bytesr?   unpackbr   r   result	r#   r2   r3   r4   rD   sender_futuremessagedatarE   r$   rB   r%   tts*   s8   

"zWebSocketSession.ttsr1   )__name__
__module____qualname__strintr&   r)   r0   r+   r   r   r   r   bytesrS   r$   r$   r$   r%   r      s.    
r   c                   @   sf   e Zd ZdddedefddZdd Zd	d
 Zdd Z	ddede	e de
deedf fddZdS )AsyncWebSocketSessionr   )r   r   r   c                C   s0   || _ || _tj| jd| j  ddd| _d S )Nr   r   r   r   )r   r   r    AsyncClientr"   )r#   r   r   r$   r$   r%   r&   ]   s   
zAsyncWebSocketSession.__init__c                    s   | S r'   r$   r(   r$   r$   r%   
__aenter__m   s   z AsyncWebSocketSession.__aenter__c                    s   |   I d H  d S r'   r*   r,   r$   r$   r%   	__aexit__p   s   zAsyncWebSocketSession.__aexit__c                    s   | j  I d H  d S r'   )r"   acloser(   r$   r$   r%   r+   s   s   zAsyncWebSocketSession.closer1   r2   r3   r4   r5   Nc           	   	     s   t d| jd|id4 I d H ] fdd}t | }	 z0 I d H }t|}|d }|dkr<|d V  n|d	krP|d
 dkrHt|d
 dkrPW nW n	 t	yZ   tw q!|I d H  W d   I d H  d S 1 I d H srw   Y  d S )Nr6   r7   r8   c                     sv    tt d I d H  2 z3 d H W }  tt| d I d H  q6  tt  I d H  d S r:   r=   r;   rB   r$   r%   rD      s$   
z)AsyncWebSocketSession.tts.<locals>.senderTrE   rF   rG   rH   rI   rJ   )
r	   r"   asyncioget_running_loopcreate_taskrL   r?   rM   r   r   rO   r$   rB   r%   rS   v   s8   
.zAsyncWebSocketSession.ttsrT   )rU   rV   rW   rX   r&   r]   r^   r+   r   r   r   r   rZ   rS   r$   r$   r$   r%   r[   \   s(    

r[   )r`   concurrent.futuresr   typingr   r   r   r   r    r?   httpx_wsr   r   r	   
exceptionsr   schemasr   r   r   r   r   r   r[   r$   r$   r$   r%   <module>   s    N