
    љi#                         S SK Jr  S SKrS SKrS SKJr  SSKJrJrJrJ	r	  SSK
JrJr  SSKJrJr  SS	KJrJr  \R&                  " \5      r " S
 S5      rg)    )abstractmethodN)List   )AudioDeviceAudioPlayerr   AudioRecorder)AnimationControllerAnimationControllerDummy)FaceControllerFaceControllerDummy   )AIAvatarRequestAIAvatarResponsec                   8   \ rS rSrSSSSSSSSSSS	S
.S\S\S\S\S\S\S\S\S\S\S\4S jjr	S r
S\S\4S jrS\4S jr\S\4S j5       r\S\S \4S! j5       rS \4S" jrS# rS$\4S% jrS \S&\4S' jr\S \S(\S&\4S) j5       rS \S(\S&\4S* jrS \4S+ jrS,rg)-AIAvatarClientBase   Ni>  r   i   i   TF)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   r   r   r   r   r   r   r   r   r   r   c                
   U	(       a  Xl         O[        X75      U l         [        R                  SU R                   R                   SU R                   R
                  S    35        [        R                  SU R                   R                   SU R                   R                  S    35        [        UU R                   R                  UUS9U l	        [        U R                   R                  US9U l        U=(       d
    [        5       U l        U=(       d
    [        5       U l        Xl        U R"                  U l        S U l        S U l        [*        R,                  " 5       U l        0 U l        S U l        S U l        Xl        / U l        g )NzInput device: [z] namezOutput device: [)sample_ratedevice_indexchannels
chunk_size)r"   r$   )r   r   loggerinfoinput_deviceinput_device_infooutput_deviceoutput_device_infor   audio_recorderr   audio_playerr   r   r
   r   r   get_image_url_default_get_image_urlsend_microphone_taskreceive_response_taskasyncioQueueresponse_queue_on_responsesusernamecharacternamer   last_responses)selfr   r   r   r   r   r   r   r   r   r   r   s               Q/home/james-whalen/.local/lib/python3.13/site-packages/aiavatar/adapter/client.py__init__AIAvatarClientBase.__init__   sZ   & !.!,-?!UDod&8&8&E&E%FbI[I[ImImntIuHvwx&t'9'9'G'G&H4K]K]KpKpqwKxJyz{ ,)++88#'	
 (++99(
  /G2E2G$8$V<T<V! ' #88 %)!%)"?F}} ! 
68    c                     Xl         U$ N)r.   )r8   funcs     r9   get_image_url AIAvatarClientBase.get_image_urlN   s    "r<   image_sourcereturnc                    #    g 7fr>    )r8   rB   s     r9   r-   (AIAvatarClientBase.get_image_url_defaultR   s        response_typec                    ^ ^ UU 4S jnU$ )Nc                 &   > U TR                   T'   U $ r>   )r4   )r?   rH   r8   s    r9   	decorator1AIAvatarClientBase.on_response.<locals>.decoratorV   s    04D}-Kr<   rE   )r8   rH   rK   s   `` r9   on_responseAIAvatarClientBase.on_responseU   s    	 r<   requestc                    #    g 7fr>   rE   )r8   rO   s     r9   send_requestAIAvatarClientBase.send_request[        rG   audio_bytes
session_idc                    #    g 7fr>   rE   )r8   rT   rU   s      r9   send_microphone_data'AIAvatarClientBase.send_microphone_data_   rS   rG   c                    #    U R                   R                  5         S h  vN nU R                  (       a  U R                  R                  (       a  M7  U R                  X!5      I S h  vN   MR   NM N
 g 7fr>   )r+   start_streamr   r,   
is_playingrW   )r8   rU   datas      r9   send_microphone_worker)AIAvatarClientBase.send_microphone_workerd   s[     --::< 	B$##4+<+<+G+G+G//AAA	BA =s=   A5A3A/A3+A5A5(A1)A5/A31A53A5c                   #      U R                   R                  5       I S h  vN nU R                  (       aE  UR                  S:X  a  U R                  R                  5         U R                  R                  U5        U R                  R                  UR                  5      =n(       a  U" U5      I S h  vN   UR                  S:X  d  UR                  S:X  aa  UR                  (       aP  UR                  R                  S5      =n(       a  X0l	        UR                  R                  S5      =n(       a  X@l
        UR                  S:X  aH  UR                  R                  S5      =n(       a$  [        SU R                  =(       d    S S	U 35        GOuUR                  S:X  a$  [        R                  S
UR                   35        GOAUR                  S:X  a  U R                  U5      I S h  vN   GOUR                  S:X  a  U R!                  UR                  R                  S5      5      I S h  vN nU(       aF  U R#                  [%        SUR                  UR&                  UR(                  SUS./S95      I S h  vN   OUR                  S:X  a8  UR*                  =n(       a$  [        SU R                  =(       d    S S	U 35        O>UR                  S:X  a.  U R-                  UR                  UR(                  5      I S h  vN   GM   GN GNY GN& N N N! [.         a"  n[        R1                  SU 35         S nAN9S nAff = f7f)Nstart	connected	tool_callr5   r6   request_textz[1;32mUserz:[0m zConnected: chunkvisionsourceimage)typeurl)ri   rU   user_id
context_idfilesfinalz[1;35mAIstopz"Error at receive_response_worker: )r3   getr   ri   r7   clearappendr4   metadatar5   r6   printr%   r&   rU   perform_responser.   rQ   r   rk   rl   
voice_textstop_response	Exceptionwarning)	r8   responseon_response_funcr5   r6   rc   	image_urlresponse_textexs	            r9   receive_response_worker*AIAvatarClientBase.receive_response_workerj   s    .J!%!4!4!8!8!::::}}/++113''..x8'+'9'9'='=hmm'LL#L*8444MM[0HMM[4PV^VgVg#+#4#4#8#8#DDxD(0(0(9(9(=(=o(NN}N-:*==G+'/'8'8'<'<^'LL|L
4==+BF*C9\N[\]]k1KK+h.A.A-B CD]]g-//999]]h.&*&9&9(:K:K:O:OPX:Y&Z ZI "//!('/':':$,$4$4'/':':,3I#F"G1    ]]g-(0(;(;;};
4+=+=+E*FiP]_`]]f,,,X-@-@(BUBUVVVY : 5  : ![ W J!CB4HIIJs   ML L
BL 4L5CL M2L M$L *L+L /M1=L .L/AL ;L<L  MAL M	9L LL M
L L L L L L 
M#M ;M MMr{   c                   #     UR                   nU(       a  UR                  (       aD  [        R                  " U R                  R                  UR                  UR                  5      5        UR                  (       aD  [        R                  " U R                  R                  UR                  UR                  5      5        UR                  S:X  a  UR                  R                  S5      =n(       az  UR                  (       dC  U R                  R                   (       d'  U R                  R#                  US   US   US   5        g g U R                  R%                  UR                  5        g UR                  (       aO  [        R&                  " 5       nUR)                  S U R                  R*                  UR                  5      I S h  vN   g g g  N! [,         a!  n[.        R1                  SU 3SS9   S nAg S nAff = f7f)	Nre   
pcm_formatr!   r#   sample_widthzError processing response: T)exc_info)avatar_control_request	face_namer1   create_taskr   set_faceface_durationanimation_namer   animateanimation_durationri   rt   rq   
audio_datar,   play_streaminitilize_streamaddget_running_looprun_in_executorplayry   r%   error)r8   r{   avreqr   loopr   s         r9   rv   #AIAvatarClientBase.perform_response   s    	L33E??''(<(<(E(EeooW\WjWj(kl''''(A(A(I(I%J^J^`e`x`x(yz}}'!)!2!2!6!6|!DD:D#..#00<< -->> *= 9:j;QS]^lSm  = ))--h.A.AB(("335D..tT5F5F5K5KXM`M`aaa ) ( b 	LLL6rd;dLK	LsZ   G?EG G?%G ,G?-AG GG G?G 
G<G72G?7G<<G?rl   c                   #    / nSnU R                   R                  5       (       d   U R                   R                  5       nUR                  S:X  a  SnU(       a  UR	                  U5        OU R                   R                  5          U R                   R                  5       (       d  M  U H&  nU R                   R                  U5      I S h  vN   M(     U R                  R                  5         g !    ML  = f N+7f)NFr`   T)	r3   empty
get_nowaitri   rs   	task_doneputr,   rp   )r8   rU   rl   preserved_itemsfound_startrespitems          r9   rx    AIAvatarClientBase.stop_response   s     %%++--	**55799'"&K#**40''113 %%++-- $D%%))$/// $ 	  0s;   $C9AC/ +C9,C/  C9(#C9C7#C9/C41C9rk   c                    #    g 7fr>   rE   r8   rU   rk   rl   s       r9   initialize_session%AIAvatarClientBase.initialize_session   rS   rG   c                   #    [         R                  " U R                  5       5      U l        [         R                  " U R	                  U5      5      U l        U R                  XU5      I S h  vN    [         R                  " U R                  U R
                  5      I S h  vN   g  N9 N!   U R                  U5      I S h  vN     g = f7fr>   )	r1   r   r   r0   r]   r/   r   gatherstop_listeningr   s       r9   start_listening"AIAvatarClientBase.start_listening   s     %,%8%89U9U9W%X"$+$7$78S8ST^8_$`!%%j:FFF	2..!;!;T=V=VWWW 	G X	2%%j111sH   A)C
+B%,C
1.B) B' B) $C
'B) )C?C CC
c                 z  #     U R                   (       a  U R                   R                  5          U R
                  (       a  U R
                  R                  5         g g ! [         a"  n[        R	                  SU 35         S nANUS nAff = f! [         a"  n[        R	                  SU 35         S nAg S nAff = f7f)Nz)Error at canceling send_microphone_task: z*Error at canceling receive_response_task: )r/   cancelry   r%   rz   r0   )r8   rU   r   s      r9   r   !AIAvatarClientBase.stop_listening   s     	M(())002	N))**113 *	  	MNNFrdKLL	M  	NNNGtLMM	NsQ   B;+A +B B;
B	'B?B;B		B;
B8B3.B;3B88B;)r.   r4   r   r   r,   r+   r   r6   r   r   r7   r0   r3   r/   r5   )__name__
__module____qualname____firstlineno__r   r	   intr   boolr:   r@   strr-   rM   r   r   rQ   bytesrW   r]   r   r   rv   rx   r   r   r   __static_attributes__rE   r<   r9   r   r      s   
 +/48"$!& ##%!%%) !>9 (	>9
 2>9  >9 >9 >9 >9 !>9 >9 #>9 >9  !>9@    /   e   Bs B0JfL/? L<!c !s !, 3  RU  	2 	2c 	2s 	2Ns Nr<   r   )abcr   r1   loggingtypingr   devicer   r   r   	animationr	   r
   facer   r    r   r   	getLoggerr   r%   r   rE   r<   r9   <module>r      s>        I I E 6 /			8	$^N ^Nr<   