
    љi                         S SK r S SKrS SKrSSKJr  SSKJr  SSKJrJ	r	J
r
  SSKJr  SSKJr  \R                  " \5      r " S	 S
\5      rg)    N   )SpeechDetector)SileroSpeechDetector   )AIAvatarRequestAIAvatarResponseAIAvatarException)AIAvatarClientBase)NoiseLevelDetectorc                      ^  \ 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S.S\S\S\S\S\S\S\S\S\S\S\S\4U 4S jjjr	S\
4S  jrS! rS"\S#\S$\4S% jrS(S"\S#\S$\4U 4S& jjjrS'rU =r$ ))AIAvatarHttpClient   zhttp://localhost:8000/chatNd      g      $@Fg     Vg      ?i>     i   i   Tg      4@)urlapi_keymax_connectionsmax_keepalive_connectionstimeoutmute_on_barge_invadvad_volume_db_thresholdvad_silence_duration_thresholdvad_sample_rate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auto_noise_filter_thresholdnoise_margindebugr   r   r   r   r   r   r   r   r   r   r'   r(   c                  >^  [         TT ]  UUUUUUUUUUUS9  U=(       d    [        UU	U
US9T l        T R                  R                  S[
        S[        S[        S[        S[        4
U 4S jj5       n[        R                  " S	[        R                  " U5      [        R                  " UUS
9S9T l        UT l        UT l        U(       a1  T R                   R                  R"                  S[        4U 4S jj5       nUT l        UT l        g )N)r   r   r   r    r!   r"   r#   r$   r%   r&   r)   )volume_db_thresholdsilence_duration_thresholdsample_rater)   datatextmetadatarecorded_duration
session_idc                    >#    TR                  [        SUTR                  R                  US5      TR                  R                  US5      S U / 0 0 S9	5      I S h  vN   g  N7f)Nstartuser_id
context_id)	typer2   r5   r6   r/   
audio_datafilessystem_prompt_paramsr0   )send_requestr   r   get_session_data)r.   r/   r0   r1   r2   selfs        V/home/james-whalen/.local/lib/python3.13/site-packages/aiavatar/adapter/http/client.pyon_speech_detected7AIAvatarHttpClient.__init__.<locals>.on_speech_detectedB   sb     ##O%11*iH8844ZN%'
% 
 
 
s   AA#A!A#F)r   r   )follow_redirectsr   limitsc                 F   >#    TR                  U S5      I S h  vN   g  N7f)N )stop_response)r2   r=   s    r>   r   5AIAvatarHttpClient.__init__.<locals>.mute_on_barge_in`   s     ((R888s   !!)super__init__r   r   r?   bytesstrdictfloathttpxAsyncClientTimeoutLimitshttp_clientr'   r(   stson_recording_startedr   r   )r=   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r?   	__class__s   `                        r>   rH   AIAvatarHttpClient.__init__   s"   < 	+!51/)- 3/'# 	 	
  
. 7'E'	
 
	$	$	5 	 	t 	`e 	sv 	 
%	 !,,"MM'*<< /*C
 ,G(( XX\\..93 9 /9     requestc           	        #    UR                   (       aS  [        UR                   [        5      (       a4  [        R                  " UR                   5      R                  S5      Ul         U R                  R                  SU R                  U R                  (       a  SSU R                   30OS UR                  5       S9 IS h  vN nUR                  S:w  aK  [        R                  SUR                   SUR                  5       I S h  vN  35        UR                  5         UR!                  5         S h  vN nUR#                  S	5      (       d  M!  [$        R&                  " US
S  R)                  5       5      nUR*                  S:X  ac  [        R-                  SUR.                  R1                  S5       35        U R2                  R5                  UR6                  SUR8                  5        OUR*                  S:X  aj  UR                   (       aY  UR:                  (       a"  [        R-                  SUR:                   35        [        R<                  " UR                   5      Ul         O4UR*                  S:X  a$  [?        UR.                  R1                  SS5      US9eU R@                  RC                  U5      I S h  vN   GM   GN GN GN N
 S S S 5      IS h  vN    g ! , IS h  vN  (       d  f       g = f7f)Nzutf-8postAuthorizationzBearer )methodr   headersjson   zHTTP error z: zdata:   r4   zUser: request_textr6   chunkzAI: errorzError in processing pipeline)messageresponse)"r8   
isinstancerI   base64	b64encodedecoderQ   streamr   r   
model_dumpstatus_codeloggerrb   areadraise_for_statusaiter_lines
startswithr   model_validate_jsonstripr7   infor0   getr   set_session_datar2   r6   
voice_text	b64decoder	   response_queueput)r=   rW   rd   ra   s       r>   r;   AIAvatarHttpClient.send_requestg   sK    *W-?-?"G"G!'!1!1'2D2D!E!L!LW!UG##**CG<<_~&>?UY##%	 + 
 

 ##s*{8+?+?*@IYCYBZ[\))+'335 <e##G,,/CCE!"IOODUVH}}/fX->->-B-B>-R,S$TU11'2D2DlT\TgTgh!'1h6I6I#.."KK$x/B/B.C(DE.4.>.>x?R?R.S+!'1/$,$5$5$9$9'Ca$b%- 
 --11(;;;;
 DZ<& <'  6
 
 
 
 
 
s   B?K8K K8AKK*K1K5K6K9KE&K8K	9K K8KK	KKK8KK8K5$K'%K51K8c                 R   #    U R                   R                  XS9I S h  vN   g  N7f)N)samplesr2   )r   process_samples)r=   audio_bytesr2   s      r>   send_microphone_data'AIAvatarHttpClient.send_microphone_data   s      hh&&{&RRRs   '%'r2   r5   r6   c                    #    U(       a  U R                   R                  USUS5        U(       a  U R                   R                  USUS5        g g 7f)Nr5   Tr6   )r   ru   )r=   r2   r5   r6   s       r>   initialize_session%AIAvatarHttpClient.initialize_session   s@     HH%%j)WdKHH%%j,
DQ s   AAc                 <  >#    [        U R                  S5      (       a  U R                  (       a  [        U R                  R
                  U R                  R                  U R                  R                  S9nUR                  5       n[        U5      U R                  -   n[        R                  SU S35        U R                  R                  X5        O-[        R                  SU R                  R                   S35        [         TU ]E  XU5      I S h  vN   g  N7f)Nset_volume_db_threshold)ratechannelsdevice_indexzSet volume threshold: dB)hasattrr   r'   r   audio_recorderr-   r   r%   input_deviceget_noise_levelintr(   rl   rs   r   r+   rG   start_listening)r=   r2   r5   r6   noise_level_detectornoise_levelvolume_threshold_dbrT   s          r>   r   "AIAvatarHttpClient.start_listening   s     488677//'9,,88!0099!%!3!3!@!@($
 3BBD&)+&69J9J&J#45H4ILM00Q4TXX5Q5Q4RRTUVg%j:FFFs   DDDD)r   r'   rQ   r(   r   r   )http_session	http_userN)__name__
__module____qualname____firstlineno__rJ   r   rL   boolr   rH   r   r;   r   r   r   __static_attributes____classcell__)rT   s   @r>   r   r      s2   
 0")+!&").03$#!  ,1"9W 	W
 W W $'W W W W "'W ).W W4 &*5W6 7W Wr!</ !<FSR3 R RRU RG Gs Gnq G GrV   r   )rf   loggingrM   sts.vadr   sts.vad.sileror   rD   r   r   r	   clientr
   devicer   	getLoggerr   rl   r    rV   r>   <module>r      sA       % 2 C C ' (			8	$WG+ WGrV   