
    љi                         S SK r S SKJr  SSKJr  SSKJr  SSKJr  SSK	J
r
  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJrJr  SSKJr  \ R@                  " \!5      r" " S S\5      r#g)    N)List   )PoolProvider)STSPipeline)SpeechDetector)SpeechRecognizer)OpenAISpeechRecognizer)
LLMService)ContextManager)SpeechSynthesizer)SessionStateManager)PerformanceRecorder)VoiceRecorder)NoiseLevelDetector   )AIAvatarClientBaseAIAvatarRequest   )AIAvatarLocalServerc            [         ^  \ 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SSSSSS
SSSSSSSSSSSSSS.7S\S\S\S\S\S\S \S!\S"\S#\S$\S%\	S&\
S'\S(\S)\S*\S+\S,\S-\S.\S/\S0\S1\S2\S3\\   S4\S5\S6\S7\S8\S9\S:\S;\S<\S=\S>\S?\S@\SA\SB\SC\SD\SE\SF\4ZU 4SG jjjrSH\4SI jrSJ rSK\SL\SM\4SN jrSQSK\SL\SM\4U 4SO jjjrSPrU =r$ )RAIAvatar   g      Ig      ?i>  Nzgpt-4.1.   zhttp://127.0.0.1:50021g     Vg      N@g        zo$Previous user's request and your response have been canceled. Please respond again to the following request:

z$Current date and time: UTCFzaiavatar.dbTrecorded_voicesg      $@g      4@r   i   i   )7volume_db_thresholdsilence_duration_thresholdinput_sample_rateopenai_api_keyopenai_base_urlopenai_modelsystem_promptvoicevox_speakervoicevox_urlstsvadsttllmttsvad_volume_db_thresholdvad_silence_duration_thresholdvad_sample_ratestt_sample_ratellm_openai_api_keyllm_base_url	llm_modelllm_system_promptllm_context_managertts_voicevox_urltts_voicevox_speaker	wakewordswakeword_timeoutmerge_request_thresholdmerge_request_prefixtimestamp_interval_secondstimestamp_prefixtimestamp_timezonemute_on_barge_indb_pool_providerdb_connection_strsession_state_managerperformance_recordervoice_recordervoice_recorder_enabledvoice_recorder_dirinvoke_queue_idle_timeoutinvoke_timeoutuse_invoke_queueauto_noise_filter_thresholdnoise_marginface_controlleranimation_controllerinput_device_index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'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   c       7         "  > [         T8U ]  U.U/U0UU1U2U3U4U5U6U7S9  [        S%0 SU R                  _SU_SU=(       d    U_SU=(       d    U_SU=(       d    U_SU=(       d    [	        UU=(       d    US9_S	U_S
U=(       d    U_SU=(       d    U_SU=(       d    U_SU=(       d    U_SU_SU_SU=(       d    U	_SU=(       d    U_SU_SU_SU_SU_SU_SU_SU _SU!_SU"_SU#_SU$_SU%_SU&_SU'_S U(_S!U)_S"U*_S#U+_S$U7_6U l        U,U l        U-U l        g )&N)rJ   rK   rL   r   rM   rN   rO   rP   rQ   rR   rS   response_queuer'   r+   r,   r-   r(   )r    sample_rater)   r/   r0   r1   r2   r3   r*   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rS    )super__init__r   rU   r	   local_serverrH   rI   )9selfr   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   	__class__s9                                                           W/home/james-whalen/.local/lib/python3.13/site-packages/aiavatar/adapter/local/client.pyrY   AIAvatar.__init__   s#   H 	+!51/)- 3/'# 	 	
 0 ,
..,
 	,

 %<$R?R,
 ,J+gMg,
 ,@/@,
  --+@/@,
 ,
  2C^,
  &8!,
"  /<#,
$ 0@=%,
& !4',
* +,
, .=-,
. "6!I9I/,
2  3,
4 .5,
6 %<7,
8 "69,
: (B;,
< .=,
>  2?,
@ .A,
B .C,
D 0E,
F #8G,
H "6I,
J *K,
L $:M,
N  2O,
P '@Q,
R *S,
T .U,
V W,
^ ,G((    requestc                 V   #    U R                   R                  U5      I S h  vN   g  N7f)N)rZ   send_request)r[   r`   s     r]   rb   AIAvatar.send_request   s     ,,W555s   )')c                 R   #    U R                   R                  XS9I S h  vN   g  N7f)N)audio_bytes
session_id)rZ   handle_microphone_data)r[   re   rf   s      r]   send_microphone_dataAIAvatar.send_microphone_data   s"     66;6fffs   '%'rf   user_id
context_idc                    #    U(       a  U R                   R                  USUS5        U(       a  U R                   R                  USUS5        g g 7f)Nrj   Trk   )rZ   set_session_data)r[   rf   rj   rk   s       r]   initialize_sessionAIAvatar.initialize_session   sE     ..z9gtT..z<UYZ s   AAc                 R  >#    U R                   R                  UUUS9I S h  vN n[        U R                   R                  R                  S5      (       G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                  R                  R#                  UR$                  U5        OA[        R!                  SU R                   R                  R                  R&                   S35        [(        TU ]U  UR$                  UR,                  UR.                  S9I S h  vN   g  GN N7f)N)rf   rj   rk   set_volume_db_threshold)ratechannelsdevice_indexzSet volume threshold: dB)rZ   start_sessionhasattrr&   r'   rH   r   audio_recorderrV   rs   rQ   input_deviceget_noise_levelintrI   loggerinforq   rf   r   rX   start_listeningrj   rk   )	r[   rf   rj   rk   start_responsenoise_level_detectornoise_levelvolume_threshold_dbr\   s	           r]   r~   AIAvatar.start_listening   so    #00>>!!  ?  
 
 4$$((,,.GHH//'9,,88!0099!%!3!3!@!@($
 3BBD&)+&69J9J&J#45H4ILM!!%%))AA"--/B 4T5F5F5J5J5N5N5b5b4ccefgg%%00"**%00 & 
 	
 	
1
0	
s"   F'F"E9F'F%F'%F')rH   rZ   rI   )local_session
local_userN)__name__
__module____qualname____firstlineno__floatr{   strr   r   r   r
   r   r   r   boolr   r   r   r   rY   r   rb   rh   rn   r~   __static_attributes____classcell__)r\   s   @r]   r   r      s2   
 &+,/!&"#%! "4  " $!% */03$$"& "!%.2 8$&#"&), %X,/ :"'!&)-!.5948(,'+"3+/ $!& -2" #  EB) #	B)
 %*B) B) B) B) B) B) B) B) B)  !B)" #B)$ %B)& 'B), "'-B). )./B)0 1B)2 3B)4  5B)6 7B)8 9B): ;B)< ,=B)> ?B)@ "AB)B 9CB)D  EB)F "'GB)H "IB)J %*KB)L MB)N  OB)P QB)R 'SB)T UB)V  3WB)X 2YB)Z &[B)\ !%]B)^  _B)` $)aB)b cB)d eB)j &*kB)l mB) B)H6/ 6g[3 [ [RU [
 
PS 
ps 
 
r_   r   )$loggingtypingr   databaser   sts.pipeliner   sts.vadr   sts.sttr   sts.stt.openair	   sts.llmr
   sts.llm.context_managerr   sts.ttsr   sts.session_state_managerr   sts.performance_recorderr   sts.voice_recorderr   devicer   clientr   r   serverr   	getLoggerr   r|   r   rW   r_   r]   <module>r      sT      $ ' % ' 4 ! 5 ( < ; / ( 8 '			8	$n
! n
r_   