
    /jv                       % S SK Jr  S SKrS SKrS SKrS SKJrJr  S SKJ	r	J
r
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Jr  S	SKJrJrJrJrJrJrJrJ r   S	SK!J"r"  S	SK#J$r$J%r%J&r&J'r'J(r(  S	SK)J*r*  SSK+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4  SSK5J6r6  \(       a  S	SK7J8r8J9r9  S	SK:J;r;  SSKJ<r<J=r=  SSK>J?r?  Sr@ " S S\5      rA " S S\A5      rBSrCSrD " S S\A5      rE\R                  \R                  \R                  \R                  \R                  S.rKS \LS!'   \R                  \R                  \R                  S".rPS#\LS$'   S%rQS-S& jrRS.S' jrSS/S( jrTS0S) jrU " S* S+5      rVS1S, jrWg)2    )annotationsN)ABCabstractmethod)AsyncIteratorMappingSequence)TYPE_CHECKINGAny)	Timestamp)rtc)agent_session   )llmutils)AgentConfigUpdateAgentHandoffChatMessageFunctionCallFunctionCallOutputFunctionToolRawFunctionToolToolset)logger)AgentSessionUsageInterruptionModelUsageLLMModelUsageSTTModelUsageTTSModelUsage)__version__   )	
AgentStateAgentStateChangedEventConversationItemAddedEvent
ErrorEventFunctionToolsExecutedEventSessionUsageUpdatedEventUserInputTranscribedEvent	UserStateUserStateChangedEvent)	RunResult)TcpAudioInputTcpAudioOutput)OverlappingSpeechEvent)AgentSessionAgentSessionOptions)TextInputCallbackzlk.agent.sessionc                  x    \ rS rSr\S	S j5       r\S
S j5       r\S	S j5       r\SS j5       r\SS j5       r	Sr
g)SessionTransport:   c                   #    g 7fN selfs    T/app/agent/.venv/lib/python3.13/site-packages/livekit/agents/voice/remote_session.pystartSessionTransport.start;        #&   c                   #    g 7fr5   r6   )r8   msgs     r9   send_messageSessionTransport.send_message=   s     MPr=   c                   #    g 7fr5   r6   r7   s    r9   closeSessionTransport.close?   r<   r=   c                    g r5   r6   r7   s    r9   	__aiter__SessionTransport.__aiter__A   s    HK    c                   #    g 7fr5   r6   r7   s    r9   	__anext__SessionTransport.__anext__C   s     ?Br=   r6   NreturnNoner?   agent_pb.AgentSessionMessagerM   rN   rM   z+AsyncIterator[agent_pb.AgentSessionMessage]rM   rP   )__name__
__module____qualname____firstlineno__r   r:   r@   rC   rF   rJ   __static_attributes__r6   rH   r9   r2   r2   :   sH    & &P P& &K KB BrH   r2   c                      \ rS rSrSSS jjr\SS j5       r\R                  SS j5       rSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSS jrSrg)RoomSessionTransportG   Nc                    Xl         X l        [        R                  R	                  5       U l        SU l        [        5       U l        g NF)	_room_remote_identityr   aioChan_recv_ch_handler_registeredset_tasks)r8   roomremote_identitys      r9   __init__RoomSessionTransport.__init__H   s0    
 /FKiinnFV#( /2urH   c                    U R                   $ r5   r^   r7   s    r9   rf   $RoomSessionTransport.remote_identityO   s    $$$rH   c                    Xl         g r5   rj   )r8   values     r9   rf   rk   S   s     %rH   c                   #    U R                   (       a  g U R                  R                  [        U R                  5        SU l         g 7fNT)rb   r]   register_byte_stream_handlerTOPIC_SESSION_MESSAGES_on_byte_streamr7   s    r9   r:   RoomSessionTransport.startW   s4     ##

//0FH\H\]#' s   AAc                   U R                   (       a  X R                   :w  a  g [        R                  " U R                  U5      5      nU R                  R                  U5        UR                  U R                  R                  5        g r5   )r^   asynciocreate_task_read_streamrd   addadd_done_callbackdiscard)r8   readerparticipant_identitytasks       r9   rr   $RoomSessionTransport._on_byte_stream]   s]      %9=R=R%R""4#4#4V#<=t{{223rH   c                  #     / nU  S h  vN nUR                  U5        M   N
 SR                  U5      n[        R                  " 5       nUR	                  U5        U R
                  R                  U5        g ! [        R                  R                   a     g [         a  n[        R                  " SUS9   S nAg S nAff = f7f)NrH   z$failed to read binary stream messageexc_info)appendjoinagent_pbAgentSessionMessageParseFromStringra   send_nowaitr   r_   
ChanClosed	Exceptionr   warning)r8   r{   chunkschunkdatar?   es          r9   rw   !RoomSessionTransport._read_streamd   s     	O"$F% %ee$%v88F#D..0C%MM%%c*yy## 	 	ONNAAN	OsU   CA: &$&A: &AA: 9C:CC	C#B=8C=CCc                &  #    U R                   R                  (       d  U R                  R                  5       (       d  g  UR	                  5       nU R
                  (       a  U R
                  /OS nU R                  R                  R                  [        R                  " S5      [        US9I S h  vN nUR                  U5      I S h  vN   UR                  5       I S h  vN   g  N6 N N	! [         a    [        R                  " SSS9   g f = f7f)NAS_)nametopicdestination_identitiesz$failed to send binary stream messageTr   )ra   closedr]   isconnectedSerializeToStringr^   local_participantstream_bytesr   	shortuuidrq   writeacloser   r   r   )r8   r?   r   destwriters        r9   r@   !RoomSessionTransport.send_messager   s     ==tzz'='='?'?	R((*D.2.C.CD))*D::77DD__U+,'+ E  F
 ,,t$$$--/!!
 %! 	RNNADQ	Rs_   <DA0C, /C&0C, C(	C,  C*!C, %D&C, (C, *C, ,DDDDc                  #    U R                   R                  (       a  g U R                   R                  5         [        R                  R
                  " U R                  6 I S h  vN   U R                  R                  5         U R                  (       a(   U R                  R                  [        5        SU l        g g  NX! [        [        4 a     Nf = f7fr\   )ra   r   rC   r   r_   cancel_and_waitrd   clearrb   r]   unregister_byte_stream_handlerrq   
ValueErrorAttributeErrorr7   s    r9   rC   RoomSessionTransport.close   s     ==ii''555##

99:PQ (-D$ $ 	6
 / s6   A!C#B<$/CB> 3
C>CCCCc                6    U R                   R                  5       $ r5   )ra   rF   r7   s    r9   rF   RoomSessionTransport.__aiter__   s    }}&&((rH   c                R   #    U R                   R                  5       I S h  vN $  N7fr5   )ra   rJ   r7   s    r9   rJ   RoomSessionTransport.__anext__   s     ]],,....s   '%')rb   ra   r^   r]   rd   r5   )re   zrtc.Roomrf   
str | NonerM   rN   )rM   r   )rm   r   rM   rN   rL   )r{   rtc.ByteStreamReaderr|   strrM   rN   )r{   r   rM   rN   rO   rQ   rR   )rS   rT   rU   rV   rg   propertyrf   setterr:   rr   rw   r@   rC   rF   rJ   rW   r6   rH   r9   rY   rY   G   sZ    5 % % & &(4OR -)/rH   rY      i   c                  Z    \ rS rSrSS jrSS jrSS jrSS jrSS jrSS jr	SS jr
S	rg
)TcpSessionTransport   c                T    Xl         X l        S U l        S U l        SU l        S U l        g r\   )_host_port_reader_writer_closed_loop)r8   hostports      r9   rg   TcpSessionTransport.__init__   s(    

48487;
rH   c                X  #    [         R                  " U R                  U R                  5      I S h  vN u  pUR                  R                  S5      nUb+  SS KnUR                  UR                  UR                  S5        Xl
        X l        [         R                  " 5       U l        g  Nv7f)Nsocketr   r    )ru   open_connectionr   r   	transportget_extra_infor   
setsockoptIPPROTO_TCPTCP_NODELAYr   r   get_running_loopr   )r8   r{   r   sockr   s        r9   r:   TcpSessionTransport.start   s     &66tzz4::NN..x8OOF..0B0BAF--/
 Os   /B*B(A7B*c                ~  #    U R                   (       d  U R                  c  g UR                  5       n[        R                  " S[        U5      5      nU R                  R                  X2-   5        U R                  R                  R                  5       S:  a#  U R                  R                  5       I S h  vN   g g  N7f)N>Ii   )
r   r   r   structpacklenr   r   get_write_buffer_sizedrain)r8   r?   r   headers       r9   r@    TcpSessionTransport.send_message   s     <<4<</$$&T3t9-6=)<<!!779IE,,$$&&& F&s   B2B=4B;5B=c                "   U R                   (       d  U R                  b  U R                  c  g UR                  5       n[        R
                  " S[        U5      5      U-   nU R                  R                  U R                  R                  U5        g )Nr   )	r   r   r   r   r   r   r   call_soon_threadsafer   )r8   r?   r   payloads       r9   send_message_threadsafe+TcpSessionTransport.send_message_threadsafe   sc    <<4<</4::3E$$&++dCI.5

''(:(:GDrH   c                  #    U R                   (       a  g SU l         U R                  b>   U R                  R                  5         U R                  R                  5       I S h  vN   g g  N! [        [
        4 a     g f = f7fro   )r   r   rC   wait_closedConnectionErrorOSErrorr7   s    r9   rC   TcpSessionTransport.close   sk     <<<<#""$ll..000 $ 1#W- s:   'B 7A* !A("A* &B (A* *A=:B <A==B c                    U $ r5   r6   r7   s    r9   rF   TcpSessionTransport.__aiter__   s    rH   c                l  #    U R                   (       d  U R                  c  [        e U R                  R                  [        5      I S h  vN n[        R                  " SU5      S   nU[        :  a  [        R                  " SU5        [        e U R                  R                  U5      I S h  vN n[        R                  " 5       nUR!                  U5        U$  N! [
        R                  [        [        4 a    [        S ef = f NX! [
        R                  [        [        4 a    [        S ef = f7f)Nr   r   zTCP message too large: %d bytes)r   r   StopAsyncIterationreadexactly_TCP_HEADER_SIZEru   IncompleteReadErrorr   r   r   unpack_TCP_MAX_MESSAGE_SIZEr   errorr   r   r   )r8   r   lengthr   r?   s        r9   rJ   TcpSessionTransport.__anext__   s     <<4<</$$	/<<334DEEF tV,Q/))LL:FC$$	/11&99D **,D!
! F++_gF 	/$$.	/ :++_gF 	/$$.	/sY   %D4"C 
CC AD4D
 /D0D
 4(D4C 'DD4D
 
'D11D4)r   r   r   r   r   r   N)r   r   r   intrM   rN   rL   rO   rQ   rR   )rS   rT   rU   rV   rg   r:   r@   r   rC   rF   rJ   rW   r6   rH   r9   r   r      s&    <	0'E	rH   r   )initializingidle	listeningthinkingspeakingz%dict[AgentState, agent_pb.AgentState]_AGENT_STATE_MAP)r   r   awayz#dict[UserState, agent_pb.UserState]_USER_STATE_MAP)transcription_delayend_of_turn_delayon_user_turn_completed_delayllm_node_ttfttts_node_ttfbe2e_latencyc                   / nU  H  n[        U[        [        -  5      (       a'  UR                  UR                  R
                  5        MF  [        U[        5      (       d  M]  UR                  [        UR                  5      5        M     U$ r5   )

isinstancer   r   r   infor   r   extend_tool_namestools)r   resulttools      r9   r   r      s`    FdL?:;;MM$))..)g&&MM+djj12	 
 MrH   c                    U (       d  [         R                  " 5       $ [         Vs0 s H  oU ;   d  M
  XU   _M     nn[         R                  " S0 UD6$ s  snf )Nr6   )r   MetricsReport_METRICS_FIELDS)metricskkwargss      r9   _metrics_to_protor    sN    %%''%4E_Wmam_FE!!+F++ Fs
   	A	Ac           	        [        U [        5      (       Ga  [        R                  [        R                  [        R
                  [        R                  S.nUR                  U R                  [        R                  5      n/ nU R                  (       a6  UR                  [        R                  R                  U R                  S95        [        R                  " U R                  UU[        U R                  5      S9n[        R                  R!                  US9$ [        U ["        5      (       aZ  [        R                  R!                  [        R"                  " U R                  U R$                  U R&                  U R(                  S9S9$ [        U [*        5      (       aO  [        R                  R!                  [        R*                  " U R$                  U R,                  U R.                  S9S9$ [        U [0        5      (       aO  [        R                  R!                  [        R0                  " U R                  U R2                  U R4                  S	9S
9$ [        U [6        5      (       al  [        R                  R!                  [        R6                  " U R                  U R8                  U R:                  =(       d    / U R<                  =(       d    / S9S9$ [        R                  R!                  5       $ )N)	developersystemuser	assistant)text)idrolecontentr  message)r  call_idr   	arguments)function_callr  outputis_error)function_call_output)r  old_agent_idnew_agent_id)agent_handoff)r  instructionstools_addedtools_removed)agent_config_update)r   r   r   	DEVELOPERSYSTEMUSER	ASSISTANTgetr  text_contentr   ChatContentr  r  r  ChatContextChatItemr   r  r   r  r   r  r  r   r  r  r   r  r  r  )itemrole_mappb_roler  pb_msgs        r9   _chat_item_to_protor,    sD   $$$!++ooMM!++	
 ,,tyy(*<*<=NN8//;;ARAR;ST%%ww%dll3	
 ##,,V,<<	D,	'	'##,,"//77YY..	 - 
 	
 
D,	-	-##,,!)!<!<{{" - 
 	
 
D,	'	'##,,"//77!..!.. - 
 	
 
D+	,	,##,, ( : :77!.. ,,2"006B	! - 
 	
 ((**rH   c           
     ~   [        [        U R                  5      5      [        [        U R                  5      5      [        U R                  5      [        U R
                  5      [        [        U R                  5      5      [        U R                  5      [        U R                  5      [        U R                  5      S.$ )N)endpointinginterruptionmax_tool_stepsuser_away_timeoutpreemptive_generationmin_consecutive_speech_delayuse_tts_aligned_transcriptivr_detection)
r   dictr.  r/  r0  r1  r2  r3  r4  r5  )optss    r9   _serialize_optionsr8  E  s    4 0 012D!2!234d112 !7!78!$T$*D*D%E!F(+D,M,M(N&)$*I*I&JT//0	 	rH   c                      \ rS rSr  S       SS jjrSS jrSS jrSS jrSS jrSS jr	SS	 jr
 S     SS
 jjrSS jrSS jrS S jrS!S jrS"S jrS#S jrS$S jrS%S jrS&S jrS&S jrSrg)'SessionHostiR  Nc                    Xl         X l        X0l        SU l        S U l        [
        R                  R                  5       U l        S U l	        SU l
        S U l        g r\   )
_transport_audio_input_audio_output_started
_recv_taskr   r_   TaskSetrd   _session_events_registered_text_input_cb)r8   r   audio_inputaudio_outputs       r9   rg   SessionHost.__init__S  sN     $')59ii'')-1"'8<rH   c                   Xl         U R                  (       d  SU l        UR                  SU R                  5        UR                  SU R                  5        UR                  SU R
                  5        UR                  SU R                  5        UR                  SU R                  5        UR                  SU R                  5        UR                  SU R                  5        UR                  S	U R                  5        g g )
NTagent_state_changeduser_state_changedconversation_item_addeduser_input_transcribedfunction_tools_executedsession_usage_updatedoverlapping_speechr   )rB  rC  on_on_agent_state_changed_on_user_state_changed_on_conversation_item_added_on_user_input_transcribed_on_function_tools_executed_on_session_usage_updated_on_overlapping_speech	_on_error)r8   sessions     r9   register_sessionSessionHost.register_sessionc  s    &&&*D#JJ,d.J.JKJJ+T-H-HIJJ0$2R2RSJJ/1P1PQJJ0$2R2RSJJ.0N0NOJJ+T-H-HIJJw/ 'rH   c                    Xl         g r5   )rD  )r8   text_input_cbs     r9   register_text_inputSessionHost.register_text_inputp  s    +rH   c                   #    U R                   (       a  g SU l         U R                  R                  5       I S h  vN   [        R                  " U R                  5       5      U l        g  N.7fro   )r?  r<  r:   ru   rv   
_recv_loopr@  r7   s    r9   r:   SessionHost.starts  sJ     ==oo##%%%!--doo.?@ 	&s   7A*A(/A*c                :  #    U R                   (       d  g SU l         U R                  (       GaI  U R                  (       Ga7  SU l        U R                  R                  SU R                  5        U R                  R                  SU R
                  5        U R                  R                  SU R                  5        U R                  R                  SU R                  5        U R                  R                  SU R                  5        U R                  R                  SU R                  5        U R                  R                  SU R                  5        U R                  R                  S	U R                  5        U R                  (       a1  [        R                  R                  U R                  5      I S h  vN   [        R                  R                  " U R                   R"                  6 I S h  vN   U R$                  R'                  5       I S h  vN   g  N` N) N	7f)
NFrI  rJ  rK  rL  rM  rN  rO  r   )r?  rB  rC  offrQ  rR  rS  rT  rU  rV  rW  rX  r@  r   r_   r   rd   tasksr<  rC   r7   s    r9   r   SessionHost.aclosez  sm    }}===T444&+D#MM3T5Q5QRMM2D4O4OPMM79Y9YZMM68W8WXMM79Y9YZMM5t7U7UVMM2D4O4OPMMgt~~6??))++DOO<<<ii''):):;;;oo##%%% =;%s6   F2H4H58H-H.!HHHHHc                  #     U R                     S h  vN nUR                  S5      (       aE  U R                  b6  U R                  R	                  U R                  UR                  5      5        Mb  Md  UR                  S5      nU(       d  M~  U R                  X!5        M   N
 g ! [        R                   a     g [         a    [        R                  " SSS9   g f = f7f)Nrequestr  z error processing session messageTr   )r<  HasFieldrB  rd   rv   _handle_request_saferh  
WhichOneof_dispatch_transport_messageru   CancelledErrorr   r   r   )r8   r?   msg_types      r9   ra  SessionHost._recv_loop  s     	N!__ Hc<<	**}}0//0I0I#++0VW 1  #~~i8Hx88GH_ %% 	 	NNN=M	Ns[   CB% B#B!B#A2B% B% !B##B% $C%C9C;CCCCc                    US:X  a3  U R                   b&  U R                   R                  UR                  5        g US:X  a)  U R                  b  U R                  R	                  5         g g g )NrE  audio_playback_finished)r=  
push_framerE  r>  notify_playout_finished)r8   rn  r?   s      r9   rl  'SessionHost._dispatch_transport_message  s\    }$):):)F((922t7I7I7U668 8V2rH   c                H   [        5       nUR                  [        Ub  UO[        R                  " 5       S-  5      5        UR                  R                  U5        [        R                  " US9nU R                  R                  U R                  R                  U5      5        g )N    eA)event)r   FromNanosecondsr   time
created_atCopyFromr   r   rd   rv   r<  r@   )r8   rw  rz  tsr?   s        r9   _send_eventSessionHost._send_event  sv     [
3j.D
$))+Y\\]^!!"%**7 < <S ABrH   c           	     :   [         R                  UR                  [        R                  5      n[         R                  UR
                  [        R                  5      nU R                  [        R                  " [        R                  R                  UUS9S95        g )N	old_state	new_state)rI  )	r   r#  r  r   AS_IDLEr  r}  AgentSessionEventAgentStateChangedr8   rw  old_pbnew_pbs       r9   rQ  #SessionHost._on_agent_state_changed  sv    !%%eoox7G7GH!%%eoox7G7GH&&$,$>$>$P$P$$ %Q %	
rH   c           	     L   [         R                  UR                  [        R                  5      n[         R                  UR
                  [        R                  5      nU R                  [        R                  " [        R                  R                  UUS9S9UR                  S9  g )Nr  )rJ  )rz  )
r   r#  r  r   US_LISTENINGr  r}  r  UserStateChangedrz  r  s       r9   rR  "SessionHost._on_user_state_changed  s     $$U__h6K6KL $$U__h6K6KL&&#+#=#=#N#N$$ $O $ '' 	 	
rH   c           	         U R                  [        R                  " [        R                  R                  UR                  UR
                  S9S95        g )N)
transcriptis_final)rL  )r}  r   r  UserInputTranscribedr  r  r8   rw  s     r9   rT  &SessionHost._on_user_input_transcribed  sH    &&'/'A'A'V'V$//"^^ (W (	
rH   c                "   [        UR                  [        [        -  [        -  [
        -  [        -  5      (       d  g [        UR                  5      nU R                  [        R                  " [        R                  R                  US9S95        g )N)r(  )rK  )r   r(  r   r   r   r   r   r,  r}  r   r  ConversationItemAdded)r8   rw  	chat_items      r9   rS  'SessionHost._on_conversation_item_added  s{    JJ,&);;lJM^^
 
 '

3	&&(0(B(B(X(X" )Y )	
rH   c           	        UR                    Vs/ s H7  n[        R                  " UR                  UR                  UR
                  S9PM9     nnUR                   Vs/ s H<  nUc  M  [        R                  " UR
                  UR                  UR                  S9PM>     nnU R                  [        R                  " [        R                  R                  UUS9S95        g s  snf s  snf )N)r   r  r  r  )function_callsfunction_call_outputs)rM  )r  r   r   r   r  r  r  r   r  r  r}  r  FunctionToolsExecuted)r8   rw  fcpb_callsfco
pb_outputss         r9   rU  'SessionHost._on_function_tools_executed  s     **
 + !!WW,,


 + 	 
 22
 3H''zz
 3 	 
 	&&(0(B(B(X(X#+*4 )Y )	
#

s   >C"C'(8C'c                   [        5       nUR                  [        UR                  S-  5      5        S nUR                  b1  [        5       nUR                  [        UR                  S-  5      5        [
        R                  R                  UR                  UR                  US9nUb  UR                  R                  U5        U R                  [
        R                  " US95        g )Nrv  )is_interruptiondetection_delaydetected_at)rO  )r   rx  r   r  overlap_started_atr   r  OverlappingSpeechr  r  r{  r}  )r8   rw  r  r  pbs        r9   rW  "SessionHost._on_overlapping_speech  s    k##C(9(9C(?$@A/3##/!*..s53K3Kc3Q/RS''99!11!11# : 

 )!!**+=>33rJKrH   c           	         U R                  [        R                  " [        R                  R                  [	        UR
                  5      S9S95        g )N)usage)rN  )r}  r   r  SessionUsageUpdated_session_usage_to_protor  r  s     r9   rV  %SessionHost._on_session_usage_updated  sD    &&&.&@&@&T&T1%++> 'U '	
rH   c           	         U R                  [        R                  " [        R                  R                  UR                  (       a  [        UR                  5      OSS9S95        g )NzUnknown errorr  )r   )r}  r   r  Errorr   r   r  s     r9   rX  SessionHost._on_error  sK    &&006605C, 7 	
rH   c                v  #     U R                  U5      I S h  vN   g  N! [         a    [        R                  " SSSUR                  0S9   [
        R                  " [
        R                  " UR                  SS9S9nU R                  R                  U5      I S h  vN     g ! [         a      g f = ff = f7f)Nzerror handling session requestT
request_id)r   extrazinternal error)r  r   response)
_handle_requestr   r   r   r  r   r   SessionResponser<  r@   )r8   reqresps      r9   rj   SessionHost._handle_request_safe!  s     	&&s+++ 	NN0#S^^4
	33%55#&>>. oo224888 	s\   B9    B9  ,B6AB$BB$"B9$
B2.B6/B91B22B66B9c                4  #    U R                   c   eUR                  S5      (       aq  [        R                  " [        R                  " UR
                  [        R                  R                  5       S9S9nU R                  R                  U5      I S h  vN   g UR                  S5      (       a  U R                   R                  R                   Vs/ s H  n[        U5      PM     nn[        R                  " [        R                  " UR
                  [        R                  R                  US9S9S9nU R                  R                  U5      I S h  vN   g UR                  S5      (       a  U R                   R                  nUR                  R                   Vs/ s H  n[        U5      PM     nn[        R                  " [        R                  " UR
                  [        R                  R                  UR                   UR"                  [%        UR&                  5      US9S	9S9nU R                  R                  U5      I S h  vN   g UR                  S
5      (       Gab  / nS nUR(                  R*                  nU(       a  U R,                  bN  SSKJn	  U R-                  U R                   U	" US S S95      n
[2        R4                  " U
5      (       a
  U
I S h  vN   Ou U R                   R7                  SS9I S h  vN    U R                   R;                  US9nUI S h  vN   UR<                   Vs/ s H  n[        UR>                  5      PM     nn[        R                  " [        R                  " UR
                  U[        R                  RE                  US9S9S9nU R                  R                  U5      I S h  vN   g UR                  S5      (       Gav  U R                   R                  n[G        5       nU R                   RH                  =(       d    [J        RJ                  " 5       nURM                  [O        US-  5      5        [        R                  " [        R                  " UR
                  [        R                  RQ                  [R        RU                  U R                   RV                  [        RX                  5      [Z        RU                  U R                   R\                  [        R^                  5      UR                   [a        U R                   Rb                  5      US9S9S9nU R                  R                  U5      I S h  vN   g UR                  S5      (       Ga_  SSK2J3n  U R                   Rh                  b6  U R                   Rh                  Rj                  Rm                  5       I S h  vN OS n/ n/ nU(       a  SSK7J8n  URr                   H4  nU" U5      nU" 5       nURu                  U5        URw                  U5        M6     URx                   H4  nU" U5      nU" 5       nURu                  U5        URw                  U5        M6     [        R                  " [        R                  " UR
                  [        R                  R{                  UUS9S9S9nU R                  R                  U5      I S h  vN   g UR                  S5      (       a  [G        5       nURM                  [O        [J        RJ                  " 5       S-  5      5        [        R                  " [        R                  " UR
                  [        R                  R}                  [        U R                   R                  5      US9S9S9nU R                  R                  U5      I S h  vN   g UR                  S5      (       au  [        R                  " [        R                  " UR
                  [        R                  R                  S [        S!9S"9S9nU R                  R                  U5      I S h  vN   g g  GNs  snf  GNs  snf  GN GNl GNL! [8         a     GNWf = f GN<s  snf ! [@         a  n[C        U5      n S nAGN+S nAff = f GN GN> GN GN N Ni7f)#Nping)r  pongr  get_chat_history)items)r  r  get_agent_info)r  r  r   chat_ctx)r  r  	run_inputr    )TextInputEvent)r  r   participantT)force)
user_input)r  r   r  get_session_staterv  )agent_state
user_stateagent_idoptionsrz  )r  r  get_rtc_statsr   )Struct)MessageToDict)publisher_statssubscriber_stats)r  r  get_session_usage)r  rz  )r  r  get_framework_infopython)sdksdk_version)r  r  )CrB  ri  r   r   r  r  Pongr<  r@   historyr  r,  GetChatHistoryResponsecurrent_agentr  GetAgentInfoResponser  r  r   r   r  r  rD  room_io.typesr  ru   iscoroutine	interruptRuntimeErrorruneventsr(  r   r   RunInputResponser   _started_atry  rx  r   GetSessionStateResponser   r#  r  r  r   r  r  r8  r  google.protobuf.struct_pb2r  _room_iore   r  google.protobuf.json_formatr  r  updater   r  GetRTCStatsResponseGetSessionUsageResponser  r  GetFrameworkInfoResponser   )r8   r  r  r(  r  agent
items_listr   r  r  	cb_resultr   evr   rz  
started_atr  	rtc_statsr  r  r  sdsts                           r9   r  SessionHost._handle_request5  s    }}(((<<//!11"~~!11668D //..t444\\,--;?==;P;P;V;VW;V4(.;VEW//!11"~~%-%=%=%T%T# &U &D //..t444\\*++MM//E;@>>;O;OP;O4(.;OEP//!11"~~#+#;#;#P#P 88%*%7%7)%++6!&	 $Q $
D //..t444\\+&&>@J $E==%%D&&2= $ 3 3&DtN!I **955'"mm55D5AAA'26--2C2Ct2C2T$MS]]%[]r&9"''&B]
%[ //!11"~~&66GG( H D //..t444\\-..MM//E"J22AdiikJ&&s:+;'<=//!11"~~&.&>&>&V&V$4$8$8 MM55$,,% $3#6#6 MM44$11$ "' 24==3H3H I#- 'W 'D$ //..t444\\/**9 ==))5 mm,,11??AAA 
 -/O-/E"22A%a(ABIIaL#**2.	 3
 #33A%a(ABIIaL$++B/	 4 //!11"~~"*":":"N"N(7)9 #O #D //..t444\\-.."J&&s499;+<'=>//!11"~~&.&>&>&V&V5dmm6I6IJ#- 'W 'D //..t444\\.////!11"~~'/'?'?'X'X$$/ (Y (D //..t444 0a 5 X 5 Q 5 ( B' 
 %%[$ ' #A' 54 5 B: 5 5 5sN  Bb`3=b`6&A,b`;A	b`>1BbaBbab!a =a	>a a% !a"a% 4a a% A+b bFbbA*b8b9D
bbCb!b"B
b,b-b6b>bb	a 
ababa%  a% %
b/b :b bbbbbbb)	r=  r>  rC  r@  rB  r?  rd   rD  r<  )NN)r   r2   rE  zTcpAudioInput | NonerF  zTcpAudioOutput | NonerM   rN   )rY  r.   rM   rN   )r]  r0   rM   rN   rL   )rn  r   r?   rP   rM   rN   r5   )rw  zagent_pb.AgentSessionEventrz  zfloat | NonerM   rN   )rw  r"   rM   rN   )rw  r)   rM   rN   )rw  r'   rM   rN   )rw  r#   rM   rN   )rw  r%   rM   rN   )rw  r-   rM   rN   )rw  r&   rM   rN   )rw  r$   rM   rN   )r  zagent_pb.SessionRequestrM   rN   )rS   rT   rU   rV   rg   rZ  r^  r:   r   ra  rl  r}  rQ  rR  rT  rS  rU  rW  rV  rX  rj  r  rW   r6   rH   r9   r:  r:  R  s     -1.2	=#= *= ,	=
 
= 0,A&,N9 MQC/C=IC	C





6L&

(d5rH   r:  c                   / nU R                    GHg  n[        U[        5      (       a  UR                  [        R
                  " [        R                  " UR                  UR                  UR                  UR                  UR                  UR                  UR                  UR                  UR                  UR                  UR                   UR"                  UR$                  UR&                  S9S95        M  [        U[(        5      (       ay  UR                  [        R
                  " [        R(                  " UR                  UR                  UR                  UR                   UR*                  UR,                  S9S95        GMw  [        U[.        5      (       an  UR                  [        R
                  " [        R.                  " UR                  UR                  UR                  UR                   UR,                  S9S95        GM  [        U[0        5      (       d  GM  UR                  [        R
                  " [        R0                  " UR                  UR                  UR2                  S9S95        GMj     [        R4                  " US	9$ )
N)providermodelinput_tokensinput_cached_tokensinput_audio_tokensinput_cached_audio_tokensinput_text_tokensinput_cached_text_tokensinput_image_tokensinput_cached_image_tokensoutput_tokensoutput_audio_tokensoutput_text_tokenssession_duration)r   )r  r  r  r   characters_countaudio_duration)tts)r  r  r  r   r  )stt)r  r  total_requests)r/  )model_usage)r	  r   r   r   r   
ModelUsager  r  r  r  r  r  r  r  r  r  r   r  r  r  r   r  r  r   r   r  r   )r  model_usagesmus      r9   r  r    s   .0Lb-((## ..!# hh%'__,.,B,B+-+@+@242N2N*,*>*>131L1L+-+@+@242N2N&(&6&6,.,B,B+-+@+@)+)<)<( M**## ..!# hh%'__&(&6&6)+)<)<')'8'8	 M**## ..!# hh%'__&(&6&6')'8'8
 233##!)!@!@!# hh')'8'8"a  r %%,??rH   )r   zSequence[llm.Tool | Toolset]rM   z	list[str])r  zMapping[str, Any] | NonerM   zagent_pb.MetricsReport)r(  zllm.ChatItemrM   zagent_pb.ChatContext.ChatItem)r7  r/   rM   zdict[str, str])r  r   rM   zagent_pb.AgentSessionUsage)X
__future__r   ru   r   ry  abcr   r   collections.abcr   r   r   typingr	   r
   google.protobuf.timestamp_pb2r   livekitr   livekit.protocol.agent_pbr   r    r   r   r   r   r   r   r   r   r   r   logr   r  r   r   r   r   r   versionr   r  r!   r"   r#   r$   r%   r&   r'   r(   r)   
run_resultr*   cli.tcp_consoler+   r,   inference.interruptionr-   r.   r/   r  r0   rq   r2   rY   r   r   r   AS_INITIALIZINGr  AS_LISTENINGAS_THINKINGAS_SPEAKINGr   __annotations__US_SPEAKINGr  US_AWAYr   r  r   r  r,  r8  r:  r  r6   rH   r9   <module>r!     sM   "    # < < % 3  ? 	 	 	   "
 
 
 "??@0 , 
Cs 
CL/+ L/^   G* GV ,,&&$$$$; 7  $$&&84 ,5+p
G5 G5T;@rH   