
    љiN&                        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	  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 J!r!J"r"  SSK#J$r$  \RJ                  " \&5      r' " S S\$5      r(g)    N)List   )PoolProvider)
STSRequestSTSResponse)STSPipeline)SpeechDetector)SpeechRecognizer)OpenAISpeechRecognizer)
LLMService)ContextManager)SpeechSynthesizer)SessionStateManager)PerformanceRecorder)VoiceRecorder   )AvatarControlRequestAIAvatarRequestAIAvatarResponseAIAvatarException)Adapterc            [         ^  \ 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\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/\S0\S1\	S2\S3\	S4\	S5\S6\S7\	S8\S9\S:\S;\S<\	S=\S>\S?\S@\4ZU 4SA jjjrSB\4SC jrSD\	SE\	SF\	SB\4SG jrSUSD\	SH\	SI\SJ\4SK jjrSL\4SM jrSN rSO\	SB\4SP jr SQ\!4SR jr"SD\	SF\	4SS jr#STr$U =r%$ )VAIAvatarLocalServer   g      Ig      ?i>  Nzgpt-4.1.   zhttp://127.0.0.1:50021g      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      $@),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debugresponse_queuer   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       ,   
        >^  U=(       d    [        S$0 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-_6T l        [        T.T ]  T R                  5        UT l        U"(       a1  T R                  R                  R                  S"[        4U 4S# jj5       n"U-T l	        S T l
        g )%Nr(   r,   r-   r.   r)   )r!   sample_rater*   r0   r1   r2   r3   r4   r+   r5   r6   r7   r8   r9   r:   r;   r<   r=   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   
session_idc                 F   >#    TR                  U S5      I S h  vN   g  N7f)N )stop_response)rM   selfs    W/home/james-whalen/.local/lib/python3.13/site-packages/aiavatar/adapter/local/server.pyr>   6AIAvatarLocalServer.__init__.<locals>.mute_on_barge_in   s     ((R888s   !! )r   r   r'   super__init__rJ   r(   on_recording_startedstrrI   last_response)/rQ   rJ   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   	__class__s/   `                                             rR   rV   AIAvatarLocalServer.__init__   s   r  )
+ )
)
 %<$R?R)
 ,J+gMg	)

 ,@/@)
  --+@/@)
 )
  2C^)
 &8)
  /<)
  0@=!)
" !4#)
& ')
( .=))
* "6!I9I+)
.  /)
0 .1)
2 %<3)
4 "65)
6 (B7)
8 .9)
:  2;)
< .=)
> 0?)
@ #8A)
B "6C)
D *E)
F $:G)
H  2I)
J '@K)
L *M)
N .O)
P Q)
X 	" - XX\\..93 9 /9 
!    returnc                     SU R                   0$ )NrI   )rI   )rQ   s    rR   
get_configAIAvatarLocalServer.get_config   s    TZZ
 	
r\   rM   user_id
context_idc           	      H  #    [        SUUUS9nU R                   H  nU" US 5      I S h  vN   M     U R                  [        SUR                  UR
                  UR                  S95      I S h  vN   [        SUR                  UR
                  UR                  S9$  Ns N07f)Nstart)typerM   ra   rb   	connected)r   _on_session_start_handlershandle_responser   rM   ra   rb   r   )rQ   rM   ra   rb   requeston_session_starts         rR   start_session!AIAvatarLocalServer.start_session   s     !!!	
 !% ? ?"7D111 !@ "";))OO))	$
  	 	  ))OO))	
 	
 2	s"   (B"BAB"/B 0/B" B"keyvaluecreate_sessionc                 P    U R                   R                  R                  XX45        g )N)r'   r(   set_session_data)rQ   rM   rm   rn   ro   s        rR   rq   $AIAvatarLocalServer.set_session_data   s    %%juMr\   ri   c                 |  #    U R                   R                  [        UR                  UR                  UR
                  UR                  UR                  UR                  UR                  UR                  UR                  UR                  S9
5        S h  vN nU R                  U5      I S h  vN   M$   N N
 g 7f)N)
re   rM   ra   rb   text
audio_datafilessystem_prompt_paramsallow_mergewait_in_queue)r'   invoker   re   rM   ra   rb   rt   ru   rv   rw   rx   ry   rh   )rQ   ri   rs      rR   send_request AIAvatarLocalServer.send_request   s     xxz))OO))))--!(!=!=++!//(
  	*! &&q)))	* *s<   BB<B:B6B:B</B80B<6B:8B<:B<c                 f   #    U R                   R                  R                  XS9I S h  vN   g  N7f)N)samplesrM   )r'   r(   process_samples)rQ   audio_bytesrM   s      rR   handle_microphone_data*AIAvatarLocalServer.handle_microphone_data   s$     hhll**;*VVVs   '1/1rt   c                     [        5       nU(       d  U$ Sn[        R                  " X15      nU(       a  US   Ul        SUl        Sn[        R                  " XQ5      nU(       a  US   Ul        SUl        U$ )Nz\[face:(\w+)\]r   g      @z\[animation:(\w+)\])r   refindall	face_nameface_durationanimation_nameanimation_duration)rQ   rt   avreqface_pattarnfacesanimation_pattarn
animationss          rR   parse_avatar_control_request0AIAvatarLocalServer.parse_avatar_control_request   sp    $&L )

<.#AhEO"%E 3ZZ 18
#-a=E '*E$r\   responsec                   #    [        UR                  UR                  UR                  UR                  UR
                  UR                  UR                  UR                  =(       d    0 S9nU R                   H  nU" X!5      I S h  vN   M     UR                  S:X  ao  UR                  R                  S5      (       a.  U R                  UR                  UR                  5      I S h  vN   U R                  UR
                  5      Ul        OUR                  S:X  aY  UR
                  (       aG  [        R                  " SUR
                  5      =n(       a  SUl        SUR!                  S5      0Ul        O4UR                  S	:X  a$  [#        UR                  R                  S	S
5      US9eU R$                  R'                  U5      I S h  vN   g  GNI N N
7f)N)re   rM   ra   rb   rt   
voice_textru   metadatachunkis_guardrail_triggeredfinalz\[vision:(\w+)\]visionsource   errorzError in processing pipeline)messager   )r   re   rM   ra   rb   rt   r   ru   r   _on_response_handlersgetrP   r   avatar_control_requestr   searchgroupr   rJ   put)rQ   r   aiavatar_responseon_respimage_source_matchs        rR   rh   #AIAvatarLocalServer.handle_response   s    ,**$$******&&,"	
 11G+666 2 ==G#  $$%=>>(()<)<h>Q>QRRR7;7X7XYaYfYf7g4]]g%}})+3F)VV%V-5%*08:L:R:RST:U/V%.]]g%# ))--g7UV! 
 !!%%&7888+ 7
 S  	9s8   BGGA!G(G)C G	G
GGGc                 h   #    U R                   R                  [        SUUS95      I S h  vN   g  N7f)Nstop)re   rM   rb   )rJ   r   r   )rQ   rM   rb   s      rR   rP   !AIAvatarLocalServer.stop_response   s4     !!%%&6!!'
  	 	s   (202)rI   rY   rJ   r'   )F)&__name__
__module____qualname____firstlineno__asyncioQueuer   floatintrX   r   r	   r
   r   r   r   r   boolr   r   r   r   rV   dictr_   rk   anyrq   r   r|   r   r   r   r   rh   rP   __static_attributes____classcell__)rZ   s   @rR   r   r      se    &+,/!&"#%! "4  " $!% */03$$"& "!%.2 8$&#"&), %X,/ :"'!&)-!.5948(,'+"3+/ $!& mr"&67r"
 #r" %*r" r" r" r" r" r" r" r"  !r"" #r"$ %r"& 'r"( )r". "'/r"0 ).1r"2 3r"4 5r"6  7r"8 9r": ;r"< =r"> ,?r"@ Ar"B "Cr"D 9Er"F  Gr"H "'Ir"J "Kr"L %*Mr"N Or"P  Qr"R Sr"T 'Ur"V Wr"X  3Yr"Z 2[r"\ &]r"^ !%_r"`  ar"b $)cr"d er"f gr"l mr" r"h
D 


c 
C 
S 
Ue 
2N3 NS N NVZ N*/ *W 9M ,#9k #9Jc s  r\   r   ))r   loggingr   typingr   databaser   
sts.modelsr   r   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   modelsr   r   r   r   baser   	getLoggerr   loggerr   rT   r\   rR   <module>r      s\      	  $ 1 ' % ' 4 ! 5 ( < ; / _ _ 			8	$i' ir\   