
    љiT                         S SK r S SKrS SKrS SKrS SKrSSKJrJrJr  SSK	J
r
  \R                  " \5      r " S S\
5      rg)    N   )AIAvatarRequestAIAvatarResponseAIAvatarException)AIAvatarClientBasec                      ^  \ rS rSrSSSSSSSSSSS	S
S.S\4U 4S jjjrS rS rS rS\S\S\4S jr	SS\S\S\4S jjr
U 4S jrSrU =r$ )AIAvatarWebSocketClient   zws://localhost:8000/wsNi>     i   i   TF)urlface_controlleranimation_controllerinput_device_indexinput_sample_rateinput_channelsinput_chunk_sizeoutput_device_indexoutput_chunk_sizeaudio_devicescancel_echodebugr   c                \   > [         TU ]  UUUUUUUU	U
UUS9  Xl        S U l        S U l        g )N)r   r   r   r   r   r   r   r   r   r   r   )super__init__r   websocket_connectionwebsocket_task)selfr   r   r   r   r   r   r   r   r   r   r   r   	__class__s                [/home/james-whalen/.local/lib/python3.13/site-packages/aiavatar/adapter/websocket/client.pyr    AIAvatarWebSocketClient.__init__   sO    $ 	+!51/)- 3/'# 	 	
 $(!"    c                   #    U R                   R                  [        SUR                  UR                  UR
                  UR                  UR                  UR                  UR                  S9R                  5       5      I S h  vN   g  N7f)Ninvoke)type
session_iduser_id
context_idtext
audio_datafilessystem_prompt_params)r   sendr   r&   r'   r(   r)   r*   r+   r,   model_dump_json)r   requests     r    send_request$AIAvatarWebSocketClient.send_request1   sq     '',,"--"--\\"--mm%,%A%A	 o
 	
 	
s   BBB	Bc                 *  #    [         R                  " U5      R                  S5      nU R                  (       a  U R                  R
                  (       d<  U R                  R                  [        R                  " SUUS.5      5      I S h  vN   g g  N7f)Nzutf-8data)r%   r&   r*   )
base64	b64encodedecoder   audio_player
is_playingr   r-   jsondumps)r   audio_bytesr&   b64_datas       r    send_microphone_data,AIAvatarWebSocketClient.send_microphone_data?   sy     ##K077@t'8'8'C'C++00(&= 2    (Ds   BB
BBc                   #     U R                   R                  5       I S h  vN n[        R                  " U5      nUR                  S:X  a6  UR
                  (       a%  [        R                  " UR
                  5      Ul        UR                  S:X  a$  [        UR                  R                  SS5      US9eU R                  R                  U5      I S h  vN   M   N N7f)NchunkerrorzError in processing pipeline)messageresponse)r   recvr   model_validate_jsonr%   r*   r4   	b64decoder   metadatagetresponse_queueput)r   message_strrC   s      r    receive_websocket_worker0AIAvatarWebSocketClient.receive_websocket_workerJ   s      $ 9 9 > > @@K';;KHH}}'H,?,?&,&6&6x7J7J&K#}}''$--11';YZ% 
 %%))(333 @ 4s"   CCB2CCCCr&   r'   r(   c                    #    SUUUS.nU R                   R                  [        R                  " U5      5      I S h  vN   g  N7f)Nstart)r%   r&   r'   r(   )r   r-   r9   r:   )r   r&   r'   r(   start_messages        r    initialize_session*AIAvatarWebSocketClient.initialize_sessionZ   s=     $$	
 '',,TZZ-FGGGs   :AAAc                   #    [         R                  " U R                  5       IS h  vN nX@l        [        R
                  " U R                  5       5      U l        [        R
                  " U R                  U5      5      U l	        [        R
                  " U R                  5       5      U l        U R                  XU5      I S h  vN    [        R                  " U R                  U R                  U R                  5      I S h  vN   S S S 5      IS h  vN   g  N NV N!   U R                  U5      I S h  vN     N5= f N,! , IS h  vN  (       d  f       g = f7f)N)
websocketsconnectr   r   asynciocreate_taskreceive_response_workerreceive_response_tasksend_microphone_workersend_microphone_taskrL   r   rQ   gatherstop_listening)r   r&   r'   r(   wss        r    start_listening'AIAvatarWebSocketClient.start_listeningc   s     %%dhh//2(*%)0)<)<T=Y=Y=[)\D&(/(;(;D<W<WXb<c(dD%")"5"5d6S6S6U"VD))*zJJJ6nnT%8%8$:T:TVZVoVoppp 0// K q6))*555 0///s   %EDEBEDE	9DDDED?EEDD<4D75D<:E?EEE
EEc                   >#    [         TU ]  U5      I S h  vN    U R                  (       a  U R                  R                  5          U R                  R                  [        R                  " SUS.5      5      I S h  vN   g  Nl! [         a"  n[
        R                  SU 35         S nANeS nAff = f N6! [         a"  n[
        R                  SU 35         S nAg S nAff = f7f)Nz#Error at canceling websocket_task: stop)r%   r&   z)Error at canceling sending stop message: )r   r]   r   cancel	Exceptionloggerwarningr   r-   r9   r:   )r   r&   exr   s      r    r]   &AIAvatarWebSocketClient.stop_listeningr   s     g$Z000	G""##**,	M++00(= 2    	1
  	GNN@EFF	G
  	MNNFrdKLL	Msn   C%BC%+B 5B6 =B4>B6 C%
B1B,'C%,B11C%4B6 6
C" CC%C""C%)rY   r[   r   r   r   )
ws_sessionws_userN)__name__
__module____qualname____firstlineno__strr   r0   r=   rL   rQ   r_   r]   __static_attributes____classcell__)r   s   @r    r	   r	      s    
 ,#!  !"# 	"# "#H
4 H3 H HRU H6 6S 6jm 6M Mr"   r	   )rV   r4   r9   loggingrT    r   r   r   clientr   	getLoggerrk   re   r	    r"   r    <module>rw      s>         C C '			8	$vM0 vMr"   