+
    ~j                      ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHtH	t	H
t
 ^ RIHt ^ RIHt ^ RIHtHtHt ^ RIHtHt ^ RIHt ^ R	IHt ^ R
IHt ^RIHtHtH t H!t!H"t"H#t# ^RI$H%t% ^RI&H't'H(t(H)t) ^RI*H+t+ ^RI,H-t-H.t.H/t/H0t0H1t1H2t2 ^RI3H4t4H5t5H6t6H"t7 ^RI8H9t9 ^RI:H;t;H<t<H=t= ^RI>H?t? ^RI@HAtA ^RIBHCtCHDtDHEtEHFtF ^RIGHHtHHItIHJtJHKtKHLtL ^RIMHNtN ^RIOHPtPHQtQHRtRHStSHTtTHUtUHVtVHWtWHXtXHYtY ^RIZH[t[H\t\H]t]H^t^H_t_H`t`HataHbtbHctcHdtdHeteHftf ^RIgHhthHitiHjtj ^RIkHltlHmtm ]'       d   ^RIHntn ^RIoHptp ]P                  R,          ! R4      tr]P                  R ,          ! R!4      ts] ! R" R#4      4       tt]P                  R#,          ! R$4      tu] ! R% R&4      4       tv] ! R' R(4      4       tw] ! R) R*4      4       tx ! R+ R]I4      tyR# ),    )annotationsN)AsyncIterable	CoroutineSequence)	dataclass)partial)TYPE_CHECKINGAnyLiteral)contexttrace)rtc)MessageGeneration)Metadata)	inferencellmsttttsutilsvad)Instructions)StopResponseToolFlagget_fnc_tool_nameslogger)
EOUMetrics
LLMMetricsRealtimeModelMetrics
STTMetrics
TTSMetrics
VADMetrics)otel_metricstrace_typestracerr   )split_words)	NOT_GIVENFlushSentinel
NotGivenOr)is_given)_set_participant_attributes)AgentModelSettings_get_activity_task_info_set_activity_task_info)AudioRecognitionRecognitionHooks_EndOfTurnInfo_PreemptiveGenerationInfo_STTPipeline)create_endpointing)
AgentFalseInterruptionEvent
AgentStateAgentStateChangedEvent
ErrorEventFunctionToolsExecutedEventMetricsCollectedEventSessionUsageUpdatedEventSpeechCreatedEventUserInputTranscribedEventUserTurnExceededEvent)ToolExecutionOutput_AudioOutput_TextOutput_TTSGenerationDataapply_instructions_modalityperform_audio_forwardingperform_llm_inferenceperform_text_forwardingperform_tool_executionsperform_tts_inferenceremove_instructionsupdate_instructions)DEFAULT_INPUT_DETAILSInputDetailsSpeechHandle)EndpointingOptionsTurnDetectionMode)mcp)AgentSessionAgentActivityagents_activityrN   agents_speech_handlec                  ,    ] tR t^\t$ R]R&   R]R&   RtR# )_OnEnterDatarR   sessionr,   agent N__name__
__module____qualname____firstlineno____annotations____static_attributes__rZ       x/Users/mitch_tango/dev/rabbit-r1-livekit/agent/.venv/lib/python3.14/site-packages/livekit/agents/voice/agent_activity.pyrW   rW   \   s    Lrb   rW   agents_activity_on_enterc                  @    ] tR t^et$ RtR]R&   RtR]R&   R R ltRtR# )	_ReusableResourcesNz_STTPipeline | Nonestt_pipelinellm.RealtimeSession | None
rt_sessionc                   V ^8  d   QhRR/#    returnNonerZ   )formats   "rc   __annotate___ReusableResources.__annotate__j   s     Z Zt Zrb   c                	  "   . pV P                   e1   VP                  V P                   P                  4       4       R V n         V P                  e1   VP                  V P                  P                  4       4       R V n        V'       dZ   \        P
                  ! VRR/ G R j  xL
 pV F3  p\        V\        4      '       g   K  \        P                  ! RVR7       K5  	  R # R #  LA5i)Nreturn_exceptionsTz$error cleaning up reusable resources)exc_info)
rg   appendacloseri   asynciogather
isinstance	Exceptionr   error)selftasksoutputsoutputs   &   rc   cleanup_ReusableResources.cleanupj   s     (LL**1134 $D??&LL//12"DO#NNEJTJJG!fi00LL!GRXY " Js   BC&	C&"C$#C&!C&)ri   rg   )	r\   r]   r^   r_   rg   r`   ri   r   ra   rZ   rb   rc   rf   rf   e   s$    (,L%,-1J*1Z Zrb   rf   c                  ^    ] tR t^zt$ R]R&   R]R&   R]R&   R]R&   R	]R
&   R]R&   R]R&   RtR# )_PreemptiveGenerationrN   speech_handlellm.ChatMessageuser_messager3   infollm.ChatContextchat_ctxlist[llm.Tool | llm.Toolset]toolszllm.ToolChoice | Nonetool_choicefloat
created_atrZ   Nr[   rZ   rb   rc   r   r   z   s,    !!
##''&&rb   r   c                  6    ] tR t^t$ R]R&   R]R&   R]R&   RtR# )	_PausedSpeechInforN   handler7   agent_stater   timeoutrZ   Nr[   rZ   rb   rc   r   r      s    Nrb   r   c                  l   ] tR t^tR R ltR R lt]R R l4       t]R R l4       t]R	 R
 l4       t	]R R l4       t
]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R  l4       tR! R" ltR# R$ ltR%R&/R' R( lltR)]R*]R+]R,]R-]/R. R/ lltR0R1R2R1/R3 R4 lltR5R1/R6 R7 lltR8 R9 ltR5R1/R: R; llt]P>                  ! R<4      R=R1/R> R? ll4       t R@R1/RA RB llt!RC RD lt"R5R1/RE RF llt#RG RH lt$R=R1/RI RJ llt%RK RL lt&RM RN lt'RO RP lt(RQ RR lt)RS]RT]RUR&/RV RW llt*RX]RY]RZ]R)]R[]RT]R\R&R]]+/R^ R_ llt,R` Ra lt-Rb Rc lt.Rd Re lt/RRg Rh llt0RiRf/Rj Rk llt1Rl Rm lt2RnRf/Ro Rp llt3RRq Rr llt4]5Pl                  ! ]7Rs7      Rt Ru l4       t8RvR&RwR&/Rx Ry llt9Rz R{ lt:R| R} lt;R~ R lt<R R lt=R R lt>R R lt?R R lt@R R ltARR1/R R lltBR R ltCR R ltDR R ltER R ltFR R ltGRR1/R R lltHR R ltIR R ltJ]5Pl                  ! ]7Rs7      R R l4       tKR R ltL]5Pl                  ! ]7Rs7      R R l4       tMR R ltNR R ltO]5Pl                  ! ]7Rs7      R R l4       tPR R ltQ]5Pl                  ! ]7Rs7      RR1RZR1RR1RR1/R R ll4       tRRR1RZR1RR1RR1/R R lltS]5Pl                  ! ]7Rs7      R[R1RR1RZR1RRfRR1/R R ll4       tT]5Pl                  ! ]7Rs7      RZR1/R R ll4       tURZR1/R R lltVR R ltWR R ltXR R ltYRRR&/R R llltZR R lt[R R lt\RR R llt]R R lt^]R R l4       t_R R lt`]R R l4       ta]R R l4       tb]R R l4       tcRtdR1# )rS   c               $    V ^8  d   QhRRRRRR/# )rl   rY   r,   sessrR   rm   rn   rZ   )ro   s   "rc   rp   AgentActivity.__annotate__   s+     WN WNe WN< WND WNrb   c                	4   WuV n         V n        R V n        R V n        R V n        \
        P                  ! 4       V n        R V n        RV n	        RV n
        RV n        RV n        R V n        . V n        \
        P                  ! 4       V n        V P                   P#                  4        R V n        R V n        R V n        RV n        \
        P                  ! 4       V n        R V n        R V n        . V n        R V n        ^ V n        \
        P                  ! 4       V n        V P8                  P#                  4        . V n        . V n        R V n        RV n         R V n!        R V n"        \G        V PH                  \H        PJ                  4      '       dD   V PH                  PL                  PN                  '       d   V PP                  '       g   \S        R4      h\U        V P                   PN                  4      '       d   V P                   PN                  MV P                  PN                  pV PW                  V4      V n,        V P[                  4       V n.        V P\                  R JV n/        RV n0        V PX                  R9  V n1        V Pb                  V n2        \#        4       V n3        R V n4        R # )NFTzthe RealtimeModel uses a server-side turn detection, allow_interruptions cannot be False, disable turn_detection in the RealtimeModel and use VAD on the AgentSession insteadmanualrealtime_llm)5_agent_session_rt_session_realtime_spans_audio_recognitionrw   Lock_lock_tool_choice_started_closed_scheduling_paused_new_turns_blocked_current_speech	_speech_qEvent_user_silence_eventset_paused_speech_false_interruption_timer_cancel_speech_pause_task_stt_eos_received
_q_updated_scheduling_atask_user_turn_completed_atask_speech_tasks_preemptive_generation_preemptive_generation_count_authorization_allowed_drain_blocked_tasks
_mcp_tools_user_turn_exceeded_atask_user_turn_exceeded_locked_on_enter_task_on_exit_taskry   r   RealtimeModelcapabilitiesturn_detectionallow_interruptions
ValueErrorr*   _validate_turn_detection_turn_detection_resolve_interruption_detection_interruption_detector_interruption_detection_enabled_interruption_detected'_interruption_by_audio_activity_enabled/_default_interruption_by_audio_activity_enabled_background_speeches_pending_auto_tool_reply_fut)r|   rY   r   r   s   &&& rc   __init__AgentActivity.__init__   sH   %*"T]7;JN;?\\^
37"&"'48@B29--/   $$& 9=EI&DH&', "--/<@EI'68DH#12)&-mmo###'')=?!02DH&05'3726 txx!2!233%%444,,,L  2233 KK&&-- 	
  $<<^L 002 	# 6:5P5PX\5\,,1# >B=Q=Q Z
 >
4
 88 	<
 8;u! JN)rb   c                    V ^8  d   QhRRRR/# )rl   r   zTurnDetectionMode | Nonerm   rZ   )ro   s   "rc   rp   r      s      I I6I	!Irb   c                	^   Ve   \        V\        4      '       g   V# \        V\        4      '       d   TMR pV P                  pV P                  pV P                  pVR8X  d!   V'       g   \
        P                  ! R4       R pVR8X  d!   V'       g   \
        P                  ! R4       R p\        V\        P                  4      '       d   VR8X  d5   VP                  P                  '       g   \
        P                  ! R4       R pVR8X  d   \
        P                  ! R4       R pMGV'       d@   VR8w  d9   VP                  P                  '       d   \
        P                  ! RV R	24       R pVP                  P                  '       g   V'       d   Vf   RpMVR8X  d   \
        P                  ! R
4       R pV'       gq   V'       di   VP                  P                  '       gM   \        V\        P                  4      '       d-   V P                  '       d   Vf   \
        P                  ! R4       V# )Nr   ztturn_detection is set to 'vad', but no VAD model is provided. Pass a VAD instance, e.g. Agent(vad=silero.VAD.load())r   zrturn_detection is set to 'stt', but no STT model is provided. Pass an STT instance, e.g. Agent(stt=deepgram.STT())r   zturn_detection is set to 'realtime_llm', but the LLM is not a RealtimeModel or the server-side turn detection is not supported/enabled, ignoring the turn_detection settingzcturn_detection is set to 'stt', but the LLM is a RealtimeModel, ignoring the turn_detection settingzturn_detection is set to 'zm', but the LLM is a RealtimeModel and server-side turn detection enabled, ignoring the turn_detection settingzKturn_detection is set to 'realtime_llm', but the LLM is not a RealtimeModelz{VAD is not set. Enabling VAD is recommended when using LLM and non-streaming STT for more responsive interruption handling.)ry   strr   r   r   r   warningr   r   r   	streamingLLMr   )r|   r   mode	vad_model	stt_model	llm_models   &&    rc   r   &AgentActivity._validate_turn_detection   s    %j.M.M!!!+NC!@!@~dHH	HH	HH	5=NNI D5=NNG Di!2!233~%i.D.D.S.S.S:
 u}: $.0Y5K5K5Z5Z5Z0 7: :
  ))888Y4<^#NN] D **4449cgg..(((NN=
 rb   c                   V ^8  d   QhRR/# rl   rm   boolrZ   )ro   s   "rc   rp   r   3  s     ' '4 'rb   c                	    V P                   # N)r   r|   s   &rc   scheduling_pausedAgentActivity.scheduling_paused2  s    &&&rb   c                   V ^8  d   QhRR/# )rl   rm   rR   rZ   )ro   s   "rc   rp   r   7  s       rb   c                	    V P                   # r   )r   r   s   &rc   rX   AgentActivity.session6  s    }}rb   c                   V ^8  d   QhRR/# )rl   rm   r,   rZ   )ro   s   "rc   rp   r   ;  s      u rb   c                	    V P                   # r   )r   r   s   &rc   rY   AgentActivity.agent:  s    {{rb   c                   V ^8  d   QhRR/# r   rZ   )ro   s   "rc   rp   r   ?  s     4 4d 4rb   c                	    V P                   # r   )r   r   s   &rc   interruption_enabled"AgentActivity.interruption_enabled>  s    333rb   c                   V ^8  d   QhRR/# )rl   rm   zlist[mcp.MCPServer] | NonerZ   )ro   s   "rc   rp   r   C  s     
 
7 
rb   c                	    \        V P                  P                  4      '       d   V P                  P                  # V P                  P                  # r   )r*   r   mcp_serversr   r   s   &rc   r   AgentActivity.mcp_serversB  sA     //00 KK##	
 **	
rb   c                   V ^8  d   QhRR/# r   rZ   )ro   s   "rc   rp   r   K  s     
 
T 
rb   c                	    \        V P                  P                  4      '       d   V P                  P                  # V P                  P                  P
                  R ,          # )enabled)r*   r   r   r   optionsinterruptionr   s   &rc   r   !AgentActivity.allow_interruptionsJ  sL     7788 KK++	
 &&33I>	
rb   c                   V ^8  d   QhRR/# )rl   rm   rO   rZ   )ro   s   "rc   rp   r   S  s     	
 	
"4 	
rb   c           
     	r   V P                   P                  P                  R / 4      pV P                  P                  P
                  R ,          p\        VP                  RVR,          4      VP                  RVR,          4      VP                  RVR,          4      VP                  RVR,          4      R7      # )endpointingr   	min_delay	max_delayalphar   r   r   r   )r   _turn_handlinggetrX   _optsturn_handlingrO   )r|   agent_endpointingsession_endpointings   &  rc   endpointing_optsAgentActivity.endpointing_optsR  s     !KK66::="M"ll00>>}M!"&&v/B6/JK'++K9L[9YZ'++K9L[9YZ#''1DW1MN	
 	
rb   c                   V ^8  d   QhRR/# rl   rm   r   rZ   )ro   s   "rc   rp   r   _       2 2u 2rb   c                	(    V P                   R ,          # )r   r  r   s   &rc   min_endpointing_delay#AgentActivity.min_endpointing_delay^       $$[11rb   c                   V ^8  d   QhRR/# r  rZ   )ro   s   "rc   rp   r   d  r  rb   c                	(    V P                   R ,          # )r   r	  r   s   &rc   max_endpointing_delay#AgentActivity.max_endpointing_delayc  r  rb   c                   V ^8  d   QhRR/# )rl   rm   rh   rZ   )ro   s   "rc   rp   r   i  s        &@  rb   c                	    V P                   # r   )r   r   s   &rc   realtime_llm_session"AgentActivity.realtime_llm_sessionh  s    rb   c                   V ^8  d   QhRR/# )rl   rm   SpeechHandle | NonerZ   )ro   s   "rc   rp   r   m  s     $ $ 3 $rb   c                	    V P                   # r   )r   r   s   &rc   current_speechAgentActivity.current_speechl  s    ###rb   c                   V ^8  d   QhRR/# )rl   rm   r   rZ   )ro   s   "rc   rp   r   q  s     I I	%Irb   c                	    V P                   P                  V P                  P                  ,           V P                  ,           # r   )r   r   r   r   r   s   &rc   r   AgentActivity.toolsp  s,     }}""T[[%6%66HHrb   c                   V ^8  d   QhRR/# r  rZ   )ro   s   "rc   rp   r   w  s     
 
e 
rb   c                	    \        V P                  P                  4      '       d   V P                  P                  # V P                  P                  P                  # r   )r*   r   min_consecutive_speech_delayr   r   r   s   &rc   r  *AgentActivity.min_consecutive_speech_delayv  sG     @@AA KK44	
 &&CC	
rb   c                   V ^8  d   QhRR/# r   rZ   )ro   s   "rc   rp   r     s     . .D .rb   c                	    \        V P                  P                  4      '       d   V P                  P                  MV P                  P                  P                  pVR J # )T)r*   r   use_tts_aligned_transcriptr   r   )r|   use_aligned_transcripts   & rc   r#  (AgentActivity.use_tts_aligned_transcript~  sM     >>?? KK22&&AA 	 &--rb   c                    V ^8  d   QhRRRR/# )rl   instructionsr   rm   rn   rZ   )ro   s   "rc   rp   r     s      c d rb   c                	  "   WP                   n        \        P                  ! VV P                   P                  R 7      pV P                   P
                  P                  V4       V P                  P
                  P                  V4       V P                  e&   V P                  P                  V4      G Rj  xL
  R# \        V P                   P
                  VRR7       R#  L*5i))r'  agent_idNTr'  add_if_missing)
r   _instructionsr   AgentConfigUpdateid	_chat_ctxinsertr   r   rK   )r|   r'  config_updates   && rc   rK   !AgentActivity.update_instructions  s     $0! --%[[^^
 	$$]3&&}5'""66|DDD%%LQU Es   B3C"5C 6+C"c                    V ^8  d   QhRRRR/# )rl   r   r   rm   rn   rZ   )ro   s   "rc   rp   r     s     P P(D P Prb   c                	v  "   \        \        V P                  P                  4      4      p\        \        V4      4      p\	        W2,
          4      ;'       g    R p\	        W#,
          4      ;'       g    R p\	        V Uu/ uF  qfP
                  VbK  	  upP                  4       4      pWP                  n        V'       g	   V'       d   \        P                  ! VVV P                  P
                  R7      p\        P                  ! V4      P                  4       Vn        V P                  P                  P                  V4       V P                  P                  P                  V4       V P                  eP   V P                  P                  \        P                  ! V P                   4      P                  4       4      G R j  xL
  \#        V P                  \        P$                  4      '       d@   V P'                  V P                  P                  P)                  VR7      4      G R j  xL
  R # R # u upi  Lt L5i)N)tools_addedtools_removedr)  r   )r   r   r   _toolslistr.  valuesr   r-  ToolContextflattenr/  r0  r   r   update_toolsr   ry   r   update_chat_ctxcopy)r|   r   old_tool_namesnew_tool_namesr5  r6  toolr1  s   &&      rc   r=  AgentActivity.update_tools  s    /0B0BCD/67>:;CCt^<=EE6ggtm6==?@" -11'+M
 $'??5#9#A#A#CM KK!!((7MM##**=9'""//

0K0S0S0UVVVdhh((&&t{{'<'<'A'A'A'NOOO )# 7 W Ps>   A/H92H9>H04H9C8H9 H5A&H9'H7(H97H9exclude_invalid_function_callsTc               $    V ^8  d   QhRRRRRR/# )rl   r   r   rD  r   rm   rn   rZ   )ro   s   "rc   rp   r     s$      'LP	rb   c               	D  "   TP                  V'       d   V P                  M\        R 7      pWP                  n        V P
                  e1   \        V4       V P
                  P                  V4      G Rj  xL
  R# \        WP                  P                  RR7       R#  L)5i)r7  NTr*  )
r?  r   r'   r   r/  r   rJ   r>  rK   r'  )r|   r   rD  s   &&$rc   r>  AgentActivity.update_chat_ctx  sv      ==5StzzYb=c (')""228<<<{{'?'?PT =s   A2B 4B5*B r   r  r   r
  r  c               0    V ^8  d   QhRRRRRRRRR	RR
R/# )rl   r   z!NotGivenOr[llm.ToolChoice | None]r  zNotGivenOr[EndpointingOptions]r   z$NotGivenOr[TurnDetectionMode | None]r
  zNotGivenOr[float]r  rm   rn   rZ   )ro   s   "rc   rp   r     sH     4 4 74 9	4
 =4  14  14 
4rb   c               	   \        V4      '       g   \        V4      '       d   \        P                  ! R 4       \        V P                  R,          \        V4      '       d   TMV P                  R,          \        V4      '       d   TMV P                  R,          V P                  R,          R7      p\
        P                   ! V4      '       d   Wn        V P                  e'   V P                  P                  V P                  R7       \
        P                   ! V4      '       ds   V P                  V4      pV P                  R8X  g   VR8X  d0   V P                  e"   V P                  P                  4        RV n        W0n
        V P                  R
9  V n        V P                  '       d@   V P                  P                  \        V4      '       d   \        V4      M\         VR	7       R# R# )zWmin_endpointing_delay and max_endpointing_delay are deprecated, use endpointing insteadr   r   r   r   r   Nr   r   )r   r   r   )r*   r   r   rO   r  r   r   r   update_optionsr   r   r   cancelr   r   r5   r'   )r|   r   r  r   r
  r  s   &$$$$$rc   rK  AgentActivity.update_options  s    )**h7L.M.MNNi  2**62122 0**;7122 0**;7++G4	  >>+&& +'++8I8I+J>>.))!::>JN $$0Nh4N00<..55715.#1 CGCWCW ` DD@
 """##22,-- //?@-	 3  #rb   r   Nnamec               (    V ^8  d   QhRRRRRRRR/# )	rl   corozCoroutine[Any, Any, Any]r   r  rN  
str | Nonerm   zasyncio.Task[Any]rZ   )ro   s   "rc   rp   r     s2     3 3&3 +	3
 3 
3rb   c               d  a aaaa	 \         P                  S 4      pRpSe   \        P                  S4      p\        P                  ! 4       oR VV3R llp\
        P                  ! V! 4       VR7      o	S P                  P                  S	4       S	P                  V V	3R l4       \        S	SR7       Se6   SP                  P                  S	4       R V3R llpS	P                  V4       S	P                  V 3R	 l4       \         P                  V4       V'       d   \        P                  V4       S	# )
z
This method must only be used for tasks that "could" create a new SpeechHandle.
When draining, every task created with this method will be awaited.
Nc                   V ^8  d   QhRR/# )rl   rm   r
   rZ   )ro   s   "rc   rp   7AgentActivity._create_speech_task.<locals>.__annotate__  s     	+ 	+3 	+rb   c                    <"   \         P                  ! S4      p  SG R j  xL
 \         P                  ! V 4       #  L  \         P                  ! T 4       i ; i5ir   )otel_contextattachdetach)tokenrP  current_contexts    rc   _context_aware_coro>AgentActivity._create_speech_task.<locals>._context_aware_coro  sB      ''8E+!z##E* "##E*s%   A= ;= A= AArN  c                :   < SP                   P                  S4      # r   )r   remove)_r|   tasks   &rc   <lambda>3AgentActivity._create_speech_task.<locals>.<lambda>  s    ););)B)B4)Hrb   )r   c                    V ^8  d   QhRRRR/# )rl   r`  zasyncio.Taskrm   rn   rZ   )ro   s   "rc   rp   rT  !  s     / / / /rb   c                   < \         ;QJ d&    R  SP                   4       F  '       d   K   RM	  RM! R  SP                   4       4      '       d   SP                  4        R# R# )c              3  @   "   T F  qP                  4       x  K  	  R # 5ir   done).0ra  s   & rc   	<genexpr>RAgentActivity._create_speech_task.<locals>._mark_done_if_needed.<locals>.<genexpr>"  s     D/Ctyy{{/C   FTN)all_tasks
_mark_done)r`  r   s   &rc   _mark_done_if_needed?AgentActivity._create_speech_task.<locals>._mark_done_if_needed!  sB    3D}/C/CD333D}/C/CDDD!,,. Erb   c                $   < SP                  4       # r   )_wake_up_scheduling_taskr`  r|   s   &rc   rb  rc  '  s    )F)F)Hrb   )_AgentActivityContextVarr   _SpeechHandleContextVarrV  get_currentrw   create_taskr   ru   add_done_callbackr/   rn  reset)
r|   rP  r   rN  tktk1r[  rp  rZ  ra  s
   ffd$    @@rc   _create_speech_task!AgentActivity._create_speech_task  s     &))$/$)--m<C '224	+ 	+ ""#6#8tD!!$'HIMB$  ''-/ / ""#78HI &&r*#))#.rb   reuse_resourcesc                    V ^8  d   QhRRRR/# rl   r  _ReusableResources | Nonerm   rn   rZ   )ro   s   "rc   rp   r   /  s     /! /!.G /!SW /!rb   c          	     	  a "   S P                   ;_uu_4       GR j  xL
  S P                  '       d    R R R 4      GR j  xL
  R # \        P                  ! R\        P
                  S P                  P                  /R7      p S S P                  n	        \        P                  ! VRR7      ;_uu_ 4        \        S P                  \        P                  4      '       d   S P                  P                  4        \        S P                   \         P"                  4      '       d   S P                   P                  4        \        S P$                  \$        P&                  4      '       d   S P$                  P                  4        R R R 4       S P)                  VR7      G R j  xL
  RS n        \        P*                  ! R\        P,                  ! V4      \        P
                  S P                  P                  /R7      \.        P0                  ! \2        R	7      R
 V 3R ll4       4       pS P5                  V! 4       RR7      ;S n        p\9        VRR7       VP;                  4        R R R 4      GR j  xL
  R #  ELW EL7  + '       g   i     EL; i L  TP;                  4        i ; i L7  + GR j  xL 
 '       g   i     R # ; i5i)Nstart_agent_activity
attributesF)end_on_exitr  Ton_enter)r   r  r   c                   V ^8  d   QhRR/# rk   rZ   )ro   s   "rc   rp   )AgentActivity.start.<locals>.__annotate__Q  s     5 54 5rb   c                 $  <"   \        SP                  SP                  R 7      p  \        P	                  V 4      pSP                  P                  4       G Rj  xL
  \        P                  V4       R#  L  \        P                  X4       i ; i5i))rX   rY   N)rW   r   r   _OnEnterContextVarr   r  rz  )datar{  r|   s     rc   _traceable_on_enter0AgentActivity.start.<locals>._traceable_on_enterK  si      (T[[QD5/33D9"kk22444*004 5*004s.   "B2A6 A4A6 B4A6 6BBAgentTask_on_enterr]  inline_task)r   r   r%   
start_spanr$   ATTR_AGENT_LABELrY   labelr   	_activityr   use_spanry   r   r   prewarmr   STTr   TTS_start_sessionstart_as_current_spanset_span_in_contextr   log_exceptionsr   r}  r   r/   end)r|   r  r  r  ra  s   f$   rc   startAgentActivity.start/  s     ::::}}} ::  **&'88$**:J:JKJ$!(,%^^JEBB!$((CGG44((*!$((CGG44((*!$((CGG44((* C ))/)JJJ $--!55jA + < <dkk>O>OP
 %%V45 55 .2-E-E')0D .F . #d ($? Y :: CBB K,  Y :::s   KI3KJ&KI6 K<J&1J4CI9	JJB2JJ&!K,J$-K6K9J

JJ!!J&$K&K 	,J/-
K 	8K 	:	Kc                    V ^8  d   QhRRRR/# )rl   new_activityrS   rm   rf   rZ   )ro   s   "rc   rp   r   `  s     ? ?] ?Oa ?rb   c                l  "   \        4       p V P                  '       d   V P                  e   \        V P                  4      P
                  \        VP                  4      P
                  J dB   V P                  VP                  J d(   V P                  P                  4       G Rj  xL
 Vn        V P                  Ee   \        V P                  \        P                  4      '       Ed   V P                  VP                  J Ed   V P                  P                  P                  ;'       g^    V P                  P                  P                  RRRR7      P!                  VP                  P                  P                  RRRR7      4      pT;'       dV    V P                  P                  P"                  ;'       g.    V P                  P$                  VP                  P$                  8H  pT;'       dj    V P                  P                  P&                  ;'       gB    \        P(                  ! V P*                  4      \        P(                  ! VP*                  4      8H  pV'       Ed#   V P                  P-                  RV P.                  4       V P                  P-                  RV P0                  4       V P                  P-                  RV P2                  4       V P                  P-                  RV P4                  4       V P                  P-                  RV P6                  4       V P                  P-                  R	V P8                  4       V P                  P-                  R
V P:                  4       V P                  Vn        RV n        V#  EL  \>         d    TPA                  4       G Rj  xL 
  h i ; i5i)z8Detach reusable resources for handoff to *new_activity*.NT)exclude_instructionsexclude_handoffexclude_config_updategeneration_createdinput_speech_startedinput_speech_stopped#input_audio_transcription_completedmetrics_collectedremote_item_addedr{   )!rf   r   r   typerY   stt_node
detach_sttrg   r   ry   r   r   r   mutable_chat_contextr   r?  is_equivalentmutable_instructionsr'  mutable_toolsr;  r   off_on_generation_created_on_input_speech_started_on_input_speech_stopped'_on_input_audio_transcription_completed_on_metrics_collected_on_remote_item_added	_on_errorri   rz   r   )r|   r  	resourcesreusables   &&  rc   _detach_reusable_resources(AgentActivity._detach_reusable_resources`  s    &(	9	 '''HH($--l6H6H1I1R1RRHH 0 00/3/F/F/Q/Q/S)S	&   ,txx):):;;HH 0 00  8800EE 
 
$$--22-14_c 3 #m$**338815,026 9   $  HH))>> R Rzz..,2D2D2Q2QQ 
 $  HH))77 Z Ztzz2coolFXFX6YY 
 8$$(()=t?Z?Z[$$(()?A^A^_$$(()?A^A^_$$((=DD $$(()<d>X>XY$$(()<d>X>XY$$(($..A+/+;+;I('+D$ g *T\  	##%%%	sc   N4BN %N&BN +A&N 'N :6N 1'N A
N $D"N N4N N1)N,*N11N4c                    V ^8  d   QhRRRR/# r  rZ   )ro   s   "rc   rp   r     s      D, D,7P D,\` D,rb   c               	  a"   V P                   P                  4       '       g   Q R 4       h\        V P                  \        P                  4      '       dM   V P                  P                  RV P                  4       V P                  P                  RV P                  4       \        V P                  \        P                  4      '       dM   V P                  P                  RV P                  4       V P                  P                  RV P                  4       \        V P                  \        P                  4      '       dM   V P                  P                  RV P                  4       V P                  P                  RV P                  4       \        V P                  \        P                  4      '       d'   V P                  P                  RV P                  4       \        V P                  \        P                   4      '       ds   V P                  P                  RV P                  4       V P                  P                  RV P                  4       V P                  P                  RV P"                  4       V P$                  '       dD   ^RIHp V P$                   Uu. uF!  pV! \*        P,                  ! R4      VR7      NK#  	  upV n        V P0                   Uu. uF'  p\        V\        P2                  4      '       g   K%  VNK)  	  ppV'       dM   \*        P4                  ! \6        R7      R R	 l4       o\8        P:                  ! V3R
 lV 4       RR/ G Rj  xL
  \        V P                  \        P<                  4      '       Edi   VRJ;'       d    VP>                  RJpV'       d|   V'       d   VP>                  f   Q h\6        P@                  ! R4       VP>                  V n!        RVn        V PB                  PE                  4        V PB                  PG                  4        MV P                  PI                  4       V n!        V PB                  P                  RV PJ                  4       V PB                  P                  RV PL                  4       V PB                  P                  RV PN                  4       V PB                  P                  RV PP                  4       V PB                  P                  RV P                  4       V PB                  P                  RV PR                  4       V PB                  P                  RV P                  4       \U        V PV                  PX                  4       V P                  PZ                  pR;p;rV'       d%   VP\                  pVP^                  p	VP`                  p
V PB                  Pc                  V'       d   V PV                  Pd                  M\f        V	'       d   V PV                  Ph                  M\f        V
'       d/   \        Pj                  ! V P0                  4      Pm                  4       M\f        R7      G Rj  xL
  \*        Pn                  \p        \r        Pt                  3,          ! ^dR7      V n;        VPx                  '       gO   V P                  '       g=   V Pz                  P|                  P~                  '       d   \6        P                  ! R4       Ma\        V P                  \        P                  4      '       d8    \        V PV                  PX                  V PV                  Pd                  RR7       \        V P0                  4      ;'       g    RpV PV                  Pd                  '       g	   V'       d   \        P                  ! V PV                  Pd                  VV PV                  P                  R7      p\        Pj                  ! V P0                  4      Pm                  4       VnG        V PV                  PX                  P                  V4       V Pz                  PX                  P                  V4       V P                  4       G Rj  xL
  \        V Pz                  T V P                  '       d   V PV                  P                  MRV P                  V P                  \        V P                  4      V P                  V P                  '       d   V P                  P                  MRV P                  '       d   V P                  P                  MRR7	      V nQ        V'       dT   VP                  eF   \6        P@                  ! R4       V P                  P                  VP                  R7       RVnR        R# V P                  P                  4        R# u upi u upi  EL_ ELg  \         d    \6        P                  ! R4        ELi ; i EL5i)z/_start_session should only be used when locked.r  r{   overlapping_speech)
MCPToolsetmcp_toolset_)r.  
mcp_serverr   c                    V ^8  d   QhRRRR/# )rl   toolsetzllm.Toolsetrm   rn   rZ   )ro   s   "rc   rp   2AgentActivity._start_session.<locals>.__annotate__  s     & &k &d &rb   c                B   "   V P                  4       G R j  xL
  R #  L5ir   )setup)r  s   &rc   _setup_toolset4AgentActivity._start_session.<locals>._setup_toolset  s     mmo%%s   c              3  4   <"   T F  pS! V4      x  K  	  R # 5ir   rZ   )ri  r  r  s   & rc   rj  /AgentActivity._start_session.<locals>.<genexpr>  s     Bg.))s   rs   TNz/reusing realtime session from previous activityr  r  r  r  r  )r'  r   r   )maxsizezaudio output is enabled but RealtimeModel has no audio modality and no TTS is set. Either enable audio modality in the RealtimeModel or set a TTS model.r*  z!failed to update the instructions)r'  r5  r)  )hooksr   r   interruption_detectionr   r   r   stt_providerz+reusing STT pipeline from previous activity)rg   )Tr   lockedry   r   r   onr  r  r   r  r   r  r   VADr   r   AdaptiveInterruptionDetector_on_overlap_speech_endedr   llm.mcpr  r   	shortuuidr   r   Toolsetr  r   rw   rx   r   ri   debugr   	interruptclear_audiorX   r  r  r  r  r  rJ   r   r/  r   r  r  r  _update_sessionr'  r'   r   r;  r<  BoundedDictr   r   Spanr   audio_outputr   r   audior{   rK   r   	exceptionr   r-  r.  r8  r0  _resume_scheduling_taskr0   r  r5   r  r   modelproviderr   rg   r  )r|   r  r  serverrB  toolsets	rt_reusedr   reset_instructionsreset_chat_ctxreset_toolsinitial_toolsinitial_configr  s   &$           @rc   r  AgentActivity._start_session  s    zz  ""U$UU"dhh((HHKK+T-G-GHHHKK0dhh((HHKK+T-G-GHHHKK0dhh((HHKK+T-G-GHHHKK0dhh((HHKK+T-G-GHd1193Y3YZZ''**+>@Z@Z[''**7DNNC''**+?A^A^_, #...F eoon=&Q.DO
 &*ZZQZT:dCKK3PDDZQ!!0& 1& ..BB"&  
 dhh 1 122't3^^8R8RZ^8^I&?+E+E+QQQNO#2#=#= -1*   **,  ,,.#'88#3#3#5  4d6Q6QR 68U8UV 68U8UV5<<  3T5O5OP 3T5O5OP8 5 568800L@DDD &2%F%F"!-!B!B*88""229KT[[55QZ1?--Y?Jcoodjj199;PY 3    $)#4#4S%**_#Ec#RD ,,,TXXX$--BVBVB\B\B\* #''**F#KK))!%!9!9#' +4::6>>$;;###} 22![[55)N
 %(OODJJ$?$G$G$IN!KK!!((8MM##**>:**,,,"2MM(,$$d#'#>#>*4+@+@A//(,dhhnnd.2hhh**D
#
 ;;GLLFG##))7S7S)T+/O(##))+U
 RR*  F  !DEF 	-s   Jg*g*'f/g*"f4f4	Ag*f99g*g*,g*4Hg*"g*6"g*<g*f<Ag*#g*5%g*Ag*6f? g*/g*g*Cg*'g'(B-g*)g* A:g*<g*?!g$ g*#g$$g*drain_agent_activityr  c                    V ^8  d   QhRRRR/# )rl   r  AgentActivity | Nonerm   r  rZ   )ro   s   "rc   rp   r   (  s     & &3&	"&rb   c               	  a "   \         P                  ! 4       pVP                  \        P                  S P
                  P                  4       \        P                  ! R \        P                  S P
                  P                  /R7      \        P                  ! \        R7      R V 3R ll4       4       pS P                  ;_uu_4       GRj  xL
  S P                  f-   S P                  V! 4       RR7      ;S n        p\        VRR	7       S P!                  4         S P                  G Rj  xL
  S P%                  4       G Rj  xL
  Ve-    S P'                  V4      G Rj  xL
 uuRRR4      GRj  xL
  #  RRR4      GRj  xL
  R#  L La  \"         d     Lli ; i L\ L@ L1  \(         d    \        P*                  ! R
4        LQi ; i LH  + GRj  xL 
 '       g   i     R# ; i5i)on_exitr  r   c                   V ^8  d   QhRR/# rk   rZ   )ro   s   "rc   rp   )AgentActivity.drain.<locals>.__annotate__4  s     	( 	($ 	(rb   c                 X   <"   S P                   P                  4       G R j  xL
  R #  L5ir   )r   r  r   s   rc   _traceable_on_exit/AgentActivity.drain.<locals>._traceable_on_exit0  s     
 ++%%'''s   *(*NAgentTask_on_exitr]  Tr  z#failed to detach reusable resources)r   get_current_spanset_attributer$   r  r   r  r%   r  r   r  r   r   r   r}  r/   _cancel_preemptive_generationrz   _pause_scheduling_taskr  BaseExceptionr  )r|   r  current_spanr  ra  s   f$   rc   drainAgentActivity.drain'  s     --/"";#?#?ARARS		%	%;#?#?ARAR"S

 
		V	,	( 
-

	( ::::!!),0,D,D&(/B -E - "T ($?..0(((( --/// 'L!%!@!@!NN' ::. / :: )  0
 O' ( % L$$%JKL) :::s   CG+F
G+AGF*F+F/GFGF% F!!F%$G+1F#2G+7G8G+GG+FFGFG!F%#G+%!G	GG		GG+G(	G
G(	 G(	"	G+blocked_tasksc                    V ^8  d   QhRRRR/# )rl   r  zlist[asyncio.Task] | Nonerm   rn   rZ   )ro   s   "rc   rp   r   P  s     9 9 99	9rb   c               	H  "   V P                   P                  4       '       g   Q R 4       hV P                  '       d   R# RV n        T;'       g    . V n        V P	                  4        V P
                  e+   \        P                  ! V P
                  4      G Rj  xL
  R# R#  L5i)4_finalize_main_task should only be used when locked.NT)r   r  r   r   rs  r   rw   shield)r|   r  s   &$rc   r   $AgentActivity._pause_scheduling_taskP  s      zz  ""Z$ZZ"""""&$1$7$7R!%%'!!- ..!7!7888	 . 9s   9B"B"A	B"B 	B"c                   V ^8  d   QhRR/# rk   rZ   )ro   s   "rc   rp   r   b  s     

 

t 

rb   c                	   "   V P                   P                  4       '       g   Q R 4       hV P                  '       g   R# RV n        RV n        \        P
                  ! V P                  4       RR7      V n        R# 5i)r  NF_scheduling_taskr]  )r   r  r   r   rw   rx  r  r   r   s   &rc   r  %AgentActivity._resume_scheduling_taskb  se     zz  ""Z$ZZ"&&&"'"'!(!4!4!!#*<"
s
   9A9=A9c                    V ^8  d   QhRRRR/# r  rZ   )ro   s   "rc   rp   r   n  s      /H TX rb   c               	  "   V P                   ;_uu_4       GR j  xL
  \        P                  ! R\        P                  V P
                  P                  /R7      p V P                  VR7      G R j  xL
  VP                  4        R R R 4      GR j  xL
  R #  L} L(  TP                  4        i ; i L  + GR j  xL 
 '       g   i     R # ; i5i)Nresume_agent_activityr  r  )	r   r%   r  r$   r  rY   r  r  r  )r|   r  spans   &$ rc   resumeAgentActivity.resumen  s      ::::$$''88$**:J:JKD))/)JJJ
 :: K
 :::st   CBC=B4B2B3B7B4CB2CBB//B42C4C	:B=;
C	C		Cc                   V ^8  d   QhRR/# rk   rZ   )ro   s   "rc   rp   r   {  s      $ rb   c                	:    V P                   P                  4        R # r   )r   r   r   s   &rc   rs  &AgentActivity._wake_up_scheduling_task{  s    rb   c               $    V ^8  d   QhRRRRRR/# )rl   r  zlist[asyncio.Task]r  r  rm   r  rZ   )ro   s   "rc   rp   r   ~  s*     # # *# +	#
 
##rb   c               	|  "   V P                   ;_uu_4       GR j  xL
  \        P                  ! R\        P                  V P
                  P                  /R7      pR p V P                  VR7      G R j  xL
  Ve   V P                  V4      G R j  xL
 pV P                  4       G R j  xL
   TP                  4        TuuR R R 4      GR j  xL
  #  L L` LE L/  \         d     Te   TP                  4       G R j  xL 
  h i ; i  TP                  4        i ; i LO  + GR j  xL 
 '       g   i     R # ; i5i)Npause_agent_activityr  )r  )r   r%   r  r$   r  r   r  r   r  _close_sessionr  r   r  )r|   r  r  r  r  s   &$$  rc   pauseAgentActivity.pause~  s      ::::$$&'88$++:K:KLD
 48I111NNN  +&*&E&El&S SI))+++ 
- :: O !T+  (#++---
 
) :::s   D<CD<?DC4C5CCC)C*C/D D<DD<CCC"D=D 
>DDDDD<D9	%D(&
D9	1D9	3	D<c                   V ^8  d   QhRR/# rk   rZ   )ro   s   "rc   rp   r     s     :. :.d :.rb   c                	
  "   V P                   P                  4       '       g   Q R 4       h\        V P                  \        P                  4      '       dM   V P                  P                  RV P                  4       V P                  P                  RV P                  4       \        V P                  \        P                  4      '       Ed   V P                  Ee   V P                  P                  RV P                  4       V P                  P                  RV P                  4       V P                  P                  RV P                  4       V P                  P                  RV P                  4       V P                  P                  RV P                  4       V P                  P                  RV P                  4       V P                  P                  RV P                  4       \        V P                  \        P                   4      '       dM   V P                  P                  RV P                  4       V P                  P                  RV P                  4       \        V P"                  \"        P$                  4      '       dM   V P"                  P                  RV P                  4       V P"                  P                  RV P                  4       \        V P&                  \&        P(                  4      '       d'   V P&                  P                  RV P                  4       \        V P*                  \,        P.                  4      '       ds   V P*                  P                  RV P                  4       V P*                  P                  RV P                  4       V P*                  P                  R	V P0                  4       V P                  e#   V P                  P3                  4       G Rj  xL
  V P4                  e   V P4                  P7                  4        V P8                  e#   V P8                  P3                  4       G Rj  xL
  V P:                  V P<                  P>                   Uu. uF'  p\        V\        P@                  4      '       g   K%  VNK)  	  up,           pV'       d&   \B        PD                  ! R
 V 4       RR/ G Rj  xL
  V PG                  V PH                  RR7      G Rj  xL
  RV n$        R#  EL Lu upi  L< L5i)z/_close_session should only be used when locked.r  r{   Nr  r  r  r  r  r  c              3  @   "   T F  qP                  4       x  K  	  R # 5ir   )rv   )ri  r  s   & rc   rj  /AgentActivity._close_session.<locals>.<genexpr>  s     ;(w..""(rl  rs   TF)old_taskr  )%r   r  ry   r   r   r  r  r  r   r   r  r  r  r  r  r   r  r   r  r   r  r   r   r  r  rv   r   clearr   r   r   r   r  rw   rx   _cancel_speech_pauser   )r|   rB  r  s   &  rc   r  AgentActivity._close_session  s    zz  ""U$UU"dhh((HHLL,d.H.HIHHLL$..1dhh 1 122t7G7G7S  !5t7R7RS  !79V9VW  !79V9VW  5<<   !4d6P6PQ  !4d6P6PQ  $..9dhh((HHLL,d.H.HIHHLL$..1dhh((HHLL,d.H.HIHHLL$..1dhh((HHLL,d.H.HId1193Y3YZZ''++,?A[A[\''++GT^^D''++,@$B_B_`'""))++++  &&("".))00222 ??![[..&
.T*T3;;2ODD.&
 
 ..;(;OS   ''33 ( 
 	
 	
 *.&- , 3&
	
sa   O%T'S8(AT?S; 'T'"S=S=T% TT$T*T+T;T=TTc                   V ^8  d   QhRR/# rk   rZ   )ro   s   "rc   rp   r     s     ) )d )rb   c                	h  "   V P                   ;_uu_4       GR j  xL
  V P                  '       d    R R R 4      GR j  xL
  R # RV n        V P                  4        R V n        V P	                  4       G R j  xL
  \
        P                  ! V P                  RR7      !  G R j  xL
  V P                  e2   \        P                  P                  V P                  4      G R j  xL
  R V P                  n        R R R 4      GR j  xL
  R #  L L L Ll L/ L  + GR j  xL 
 '       g   i     R # ; i5i)NTFforce)r   r   r  r   r  rw   rx   _interrupt_background_speechesr   r   aiocancel_and_waitr   r  r   s   &rc   rv   AgentActivity.aclose  s      ::::||| ::  DL..0 "&D%%'''..$"E"EE"E"RSSS%%1ii//0F0FGGG$(DKK!! :: (S H :::s   D2D	D2DD2DD21D6D7+D"D#>D!D"D7D2DD2D2DDDD2D/	D
D/	'D/	)	D2c                    V ^8  d   QhRRRR/# )rl   framezrtc.AudioFramerm   rn   rZ   )ro   s   "rc   rp   r     s     O O O4 Orb   c                	   V P                   '       g   R # V P                  P                  R8H  ;'       d:    V P                  P                  ^ 8  ;'       d    V P                  P                  R JpV P
                  R J;'       d    V P
                  P                  4       '       * ;'       dn    V P
                  P                  '       * ;'       dK    V P
                  P                  '       * ;'       d(    V P                  P                  P                  R,          pT;'       g    TpV'       g*   V P                  e   V P                  P                  V4       V P                  e   V P                  P                  WR7       R # R # )Nspeaking discard_audio_if_uninterruptible)skip_stt)r   r   r   _aec_warmup_remaining_aec_warmup_timerr   rh  interruptedr   r   r   r   
push_audior   )r|   r/  aec_warmup_activeuninterruptible_speech_activeshould_discards   &&   rc   r7  AgentActivity.push_audio  sW   }}} MM%%3 < <33a7< <//t; 	   , W W((--//W W((444W W ((<<<W W %%223UV 	&  1QQ4Q+  ++E2 "".##..u.N /rb   c                    V ^8  d   QhRRRR/# )rl   r/  zrtc.VideoFramerm   rn   rZ   )ro   s   "rc   rp   r     s     / / /4 /rb   c                	    V P                   '       g   R # V P                  e   V P                  P                  V4       R # R # r   )r   r   
push_video)r|   r/  s   &&rc   r>  AgentActivity.push_video  s3    }}}'''. (rb   r  r   add_to_chat_ctxc          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )rl   textstr | AsyncIterable[str]r  z)NotGivenOr[AsyncIterable[rtc.AudioFrame]]r   NotGivenOr[bool]r@  r   rm   rN   rZ   )ro   s   "rc   rp   r     sC     L L&L 9	L
 .L L 
Lrb   c          
     	   \        V4      '       g   V P                  '       g   \        V P                  \        P                  4      '       d'   V P                  P
                  P                  '       gX   V P                  P                  P                  '       d2   V P                  P                  P                  '       d   \        R 4      h\        V P                  \        P                  4      '       dI   V P                  P
                  P                  '       d#   VRJ d   \        P                  ! R4       \        p\         P"                  ! \        V4      '       d   TMV P$                  R7      pV P                  P'                  R\)        VRRR7      4       V P*                  e   \        V4      '       g   V P                  '       g   \        V P                  \        P                  4      '       dt   V P                  P
                  P                  '       dN   V'       g   \        P                  ! R	4       V P-                  V P/                  VV\1        4       R
7      VRR7       MUT P-                  T P3                  TTT;'       g    RV\1        4       R7      VRR7      pVP5                  V P6                  4       V P9                  V\         P:                  4       V# )ztrying to generate speech from text without a TTS model or a RealtimeSession that supports say(); add a TTS model to AgentSession to enable say()Fzthe RealtimeModel uses a server-side turn detection, allow_interruptions cannot be False when using VoiceAgent.say(), disable turn_detection in the RealtimeModel and use VAD on the AgentTask/VoiceAgent instead)r   speech_createdTsayr   user_initiatedsourceNz{add_to_chat_ctx=False is not supported when say() uses a RealtimeModel; the message will still be added to the chat context)r   rB  model_settingszAgentActivity.realtime_sayr   rN  r   rB  r  r@  rK  zAgentActivity.tts_say)r*   r   ry   r   r   r   supports_sayr   r   r  audio_enabledRuntimeErrorr   r   r   r'   rN   creater   emitr=   r   r}  _realtime_reply_taskr-   	_tts_taskry  _on_pipeline_reply_done_schedule_speechSPEECH_PRIORITY_NORMAL)r|   rB  r  r   r@  r   ra  s   &&$$$  rc   rG  AgentActivity.say  s5    HHH#*;*;<<AVAVAcAcAc$$***$$222B  txx!2!233%%444#u,NNn #,$$+,, !4))

 	VDQVW	
 (UOOHHH488S%6%677%%222"J $$))"(#0? * 
 %1 %  ++"(--4$3#0?   %, , 
D ""4#?#?@fl&I&IJrb   r   r   r'  r   schedule_speechinput_detailsc               <    V ^8  d   QhRRRRRRRRR	R
RRRRRRRR/	# )rl   r   z"NotGivenOr[llm.ChatMessage | None]r   z"NotGivenOr[llm.ChatContext | None]r'  zNotGivenOr[str | Instructions]r   zNotGivenOr[llm.ToolChoice]r   zNotGivenOr[list[str]]r   rD  rY  r   rZ  rM   rm   rN   rZ   )ro   s   "rc   rp   r   f  sq     r r 9r 5	r
 5r 0r %r .r r $r 
rrb   c               	f
   \        V P                  \        P                  4      '       dI   V P                  P                  P                  '       d#   VR J d   \
        P                  ! R4       \        pV P                  f   \        R4      h\        P                  ! 4       p	\        V4      '       g(   V	e$   \        V	4      ;p
'       d   V
P                  e   RpV P                  P                  4       p\        p\        V4      '       Ed   \        P                   ! V4      pVP"                   Uu/ uF  qP$                  VbK  	  ppVP'                  4        Uu/ uF  qP$                  VbK  	  pp\(        \        P*                  \        P,                  ,          ,          ! 4       p\/        V4       Ft  pVP1                  V4      ;'       g    VP1                  V4      pVf3   \3        RV R\)        VP4                  P7                  4       4       24      hVP9                  V4       Kv  	  \:        P1                  R4      ;p'       d   VP<                  V P>                  8X  d   VP@                  V PB                  8X  d   . p\        V4      '       d   TMTpV F|  p\        V\        PD                  \        PF                  ,          4      '       d4   VPH                  PJ                  \L        PN                  ,          '       d   Kk  VP9                  V4       K~  	  VVR&   \P        PR                  ! \        V4      '       d   TMV PT                  VR7      pV PB                  PW                  R	\Y        VR
RR7      4       \        V P                  \        P                  4      '       de   T P[                  T P]                  TV'       d   VP^                  MRT;'       g    R\        V4      '       d   TMR\a        VR7      R7      VRR7       M\        V P                  \        Pb                  4      '       d   T P[                  T Pe                  TT;'       g    V P>                  Pf                  \        V4      '       d   TMT\        V4      '       d   TMRT;'       g    R\a        \h        P                  ! V4      '       g   V Pj                  f   TMV Pj                  R7      R7      VRR7      p	V	Pm                  V Pn                  4       V'       d!   V Pq                  V\P        Pr                  4       V# u upi u upi )Fzthe RealtimeModel uses a server-side turn detection, allow_interruptions cannot be False when using VoiceAgent.generate_reply(), disable turn_detection in the RealtimeModel and use VAD on the AgentTask/VoiceAgent insteadNz-trying to generate reply without an LLM modelnoneztool 'z:' not found in agent's registered tools. Available tools: :NNNr   rZ  rF  Tgenerate_replyrH  rJ  )r   
user_inputr'  r   rK  AgentActivity.realtime_replyrL  )r   r   r   new_messager'  rK  AgentActivity.pipeline_reply):ry   r   r   r   r   r   r   r'   rP  rw   current_taskr*   r.   function_callr   r?  r;  r  r.  r<  r9  Toolr  r   r   r   function_toolskeysru   r  rY   r   rX   r   RawFunctionToolFunctionToolr   flagsr   IGNORE_ON_ENTERrN   rQ  r   rR  r=   r}  rS  text_contentr-   r   _pipeline_reply_taskr/  r   r   ry  rU  rV  rW  )r|   r   r   r'  r   r   r   rY  rZ  ra  	task_info	all_toolsresolved_toolstool_ctxttoolset_dict	tool_dictrN  rB  on_enter_datafiltered_tools	to_filterr   s   &$$$$$$$$              rc   _generate_replyAgentActivity._generate_replyf  s&    txx!2!233%%444#u,NNn #,88NOO##%$$)93D99y9**6"(KJJOO%	 DME??y1H-5->->?->DD!G->L?*2*:*:*<=*<Qq*<I=!#((S[["89;NE
#''-DDt1D<$  ',,01H1H1M1M1O,P+QS  %%d+ # /22488=8""dkk1m6K6Kt}}6\?A.6~.F.FNI	%D"4)<)<s?O?O)OPP IIOOh.F.FFF  #))$/ &  .	!$$+,, !4))'	
 	VDQab	

 dhh 1 122$$))"(<H|88d!-!5!5,4^,D,D.$#0[#I *  %3 %  #''**++))"(%>>)>)>,4^,D,D.)080F0FD!-!5!5#0 >>+66$:K:K:S %0!..$ *  %3 , D  ""4#?#?@!!&,*M*MNW @=s   /T)T.c                   V ^8  d   QhRR/# rk   rZ   )ro   s   "rc   rp   r     s     / /t /rb   c                	|    V P                   e.   V P                   P                  P                  4        R V n         R # R # r   )r   r   _cancelr   s   &rc   r  +AgentActivity._cancel_preemptive_generation  s3    &&2''55==?*.D' 3rb   c                   V ^8  d   QhRR/# rk   rZ   )ro   s   "rc   rp   r     s     , ,d ,rb   c                	:    V P                   P                  4        R # r   )r   r#  r   s   &rc   _pause_authorization"AgentActivity._pause_authorization  s    ##))+rb   c                   V ^8  d   QhRR/# rk   rZ   )ro   s   "rc   rp   r     s     * *t *rb   c                	:    V P                   P                  4        R # r   )r   r   r   s   &rc   _resume_authorization#AgentActivity._resume_authorization  s    ##'')rb   Fc                    V ^8  d   QhRRRR/# )rl   r)  r   rm   zlist[SpeechHandle]rZ   )ro   s   "rc   rp   r     s     $ $D $EW $rb   c                	    . pV P                    F@  pV'       g   VP                  '       g   K  VP                  VP                  VR 7      4       KB  	  V# )r(  )r   r   ru   r  )r|   r)  interrupted_speechesspeechs   &&  rc   r*  ,AgentActivity._interrupt_background_speeches  sJ    35//F222$++F,<,<5,<,IJ 0 $#rb   r)  c                    V ^8  d   QhRRRR/# )rl   r)  r   rm   zasyncio.Future[None]rZ   )ro   s   "rc   rp   r     s     # #$ #3G #rb   c               P  aa V P                  4        \        P                  R,          ! 4       oV P                  VR7      oV P                  e8   V P                  P                  VR7       SP                  V P                  4       V P                   F)  w   r#VP                  VR7       SP                  V4       K+  	  V P                  e   V P                  P                  4        S'       g   SP                  R4       S# R VV3R llpS F  pVP                  V4       K  	  S# )zInterrupt the current speech generation and any queued speeches.

Returns:
    An asyncio.Future that completes when the interruption is fully processed
    and chat context has been updated
Nr(  c                    V ^8  d   QhRRRR/# )rl   r`  rN   rm   rn   rZ   )ro   s   "rc   rp   -AgentActivity.interrupt.<locals>.__annotate__	  s     , ,< ,D ,rb   c                   < SP                  4       '       gP   \        ;QJ d    R  S 4       F  '       d   K   RM	  RM! R  S 4       4      '       d   SP                  R4       R# R# R# )c              3  @   "   T F  qP                  4       x  K  	  R # 5ir   rg  )ri  r  s   & rc   rj  CAgentActivity.interrupt.<locals>.on_playout_done.<locals>.<genexpr>
  s     ,^I]v[[]]I]rl  FTN)rh  rm  
set_result)r`  futurer  s   &rc   on_playout_done0AgentActivity.interrupt.<locals>.on_playout_done	  sF    {{}},^I],^,^I],^)^)^%%d+ *_}rb   )r  rw   Futurer*  r   r  ru   r   r   r  ry  )r|   r)  r`  r  r  r  r  s   &$   @@rc   r  AgentActivity.interrupt  s    	**,%'#BBBO+  ***7 ''(<(<= NNLAq5) ''/ + '&&(#d# , , /((9 / rb   c                   V ^8  d   QhRR/# rk   rZ   )ro   s   "rc   rp   r     s     + + +rb   c                	    V P                   '       d   V P                   P                  4        V P                  e   V P                  P                  4        R # R # r   )r   clear_user_turnr   r  r   s   &rc   r  AgentActivity.clear_user_turn  sC    """##335'((* (rb   
skip_replyc               (    V ^8  d   QhRRRRRRRR/# )rl   transcript_timeoutr   stt_flush_durationr  r   rm   zasyncio.Future[str]rZ   )ro   s   "rc   rp   r     s,     
 
%*
@E
SW
	
rb   c               	>   V P                   e?   V P                   P                  4        V'       g   V P                  P                  4        RpV P                  f   Q hV P                  P                  V P                  P                  P                  '       * VVVR7      # )NT)audio_detachedr  r  r  )r   commit_audior   r_  r   commit_user_turninputrO  )r|   r  r  r  s   &$$$rc   r  AgentActivity.commit_user_turn  s     '))+,,. J&&222&&77#}}22@@@11!	 8 
 	
rb   c               (    V ^8  d   QhRRRRRRRR/# )	rl   r  rN   priorityintr)  r   rm   rn   rZ   )ro   s   "rc   rp   r   -  s)     ( (| (s (4 (\` (rb   c                	   V P                   '       d&   V'       g   VP                  R R7       \        R4      hV P                  '       dK   V P                  P	                  4       '       d+   \
        P                  ! R4       VP                  R R7       R#   \        P                  ! V P                  V) \        P                  ! 4       V34        TP                  4        T P                  4        R#   \         d     Kk  i ; i)Tr(  zccannot schedule new speech, the speech scheduling is draining/pausing, the speech will be cancelledzoattempting to schedule a new SpeechHandle, but the scheduling_task is not running, the speech will be cancelledN)r   r  rP  r   rh  r   r   heapqheappushr   timeperf_counter_ns	TypeError_mark_scheduledrs  )r|   r  r  r)  s   &&&&rc   rV  AgentActivity._schedule_speech-  s    
 """54(u  !!!d&<&<&A&A&C&CNN B 4(t~~	4;O;O;QSY/Z[ 	 %%'   s   8C1 1D ?D r   c                   V ^8  d   QhRR/# rk   rZ   )ro   s   "rc   rp   r   M  s     ? ? ?rb   c                	<  "   R p V P                   P                  4       G Rj  xL
  V P                   P                  4        V P                  '       Ed   \        P
                  ! V P                  4      w   r#VP                  4       '       d
   RV n        KU  W0n        V P                  R 8  dr   V P                  \        P                  ! 4       V,
          ,
          pV^ 8  d   \        P                  ! V4      G Rj  xL
  VP                  4       '       d
   RV n        K  VP                  4        VP                  4       G Rj  xL
  V P                  '       d   V P                  P                  V P                  J d   RV n        V P                   e"   V P                   P#                  4        RV n        V P$                  P&                  P(                  ;p'       d#   VP*                  '       d   VP-                  4        RV n        \        P                  ! 4       pEK  . pV P.                   F]  p\1        V4      pV'       g   \2        P4                  ! R4       K.  VP6                  '       g   KB  VP9                  VP6                  4       K_  	  . p	V P:                   FL  pWpP.                  9   d   K  \1        V4      pV'       d   VP6                  V9   d   K;  V	P9                  V4       KN  	  V P<                  '       g   EK  \?        V	4      ^ 8X  g   EK  R#  EL EL EL5i)        Nz-blocked task without activity info; skipping.) r   waitr#  r   r  heappoprh  r   r  r  rw   sleep_authorize_generation_wait_for_generationr   r   r   rL  r   r   r  	can_pauser  r   r.   r   r{   r   ru   r   r   len)
r|   last_playout_tsr`  r  delayr  blocked_handlesra  r   to_waits
   &         rc   r  AgentActivity._scheduling_taskL  sN    //&&(((OO!!#...$}}T^^<1;;==+/D('-$44s: ==A^_Eqy%mmE222{{}}/3, ,,.11333&&&4+>+>+E+EI]I]+]*.D'55A66==?9=6(,(<(<(B(BBBH^H^H^$++-'+$"&))+
 35O11.t4LL!PQ)))&&t'9'9: 2 +-G**444.t4D../At$ + &&&3w<1+<y ) 3 4sg   !LL0LB&L;L<L,LLLBLL-A<L*BL>LLLLwait_for_agentwait_for_userc               $    V ^8  d   QhRRRRRR/# )rl   r  r   r  rm   rn   rZ   )ro   s   "rc   rp   r     s$     : :!%:=A:	:rb   c               	  "   R pR pV'       d	   V'       g   V'       Ed<   V'       Ed1   V'       d   V P                   '       d?   V P                   P                  ;p'       d!   VP                  4       '       g   VG Rj  xL
  V P                  f   V P                  '       g   RpM^R pV P                  ;p'       d+   VP
                  '       d   VP                  4       G Rj  xL
  \        P                  ! ^ 4      G Rj  xL
  V'       g   EK  V P                  P                  4       '       d   RpEK+  R pV P                  P                  4       G Rj  xL
  EKR  R# R#  L L Lc L5i)TNF)r   _end_of_turn_taskrh  r   r   _generationsr  rw   r  r   is_setr  )r|   r  r  agent_activeuser_activeeou_taskr  s   &$$    rc   _wait_for_inactive AgentActivity._wait_for_inactive  s     ,MMkk+++%)%<%<%N%NNN$MMOO"NN''/#(L#'L"&"6"666F<O<O<O$99;;;!--***}++2244"'K"&K2277999- GRM # <* :s   E%E%E%E%E%E%E%!E%7E%<E=#E%!E%:E%E%E E%=E!>	E%E%-$E%E#E%E%!E%#E%c                    V ^8  d   QhRRRR/# )rl   evzHSTTMetrics | TTSMetrics | VADMetrics | LLMMetrics | RealtimeModelMetricsrm   rn   rZ   )ro   s   "rc   rp   r     s     
 
T
 

rb   c                	   \         P                  R 4      ;p'       d>   \        V\        4      '       g   \        V\        4      '       d   VP
                  Vn        \        V\        4      '       dS   V P                  eE   V P                  P                  VP                  R 4      ;p'       d   \        P                  ! W14       V P                  P                  P                  V4       \         P"                  ! V4       V P                  P%                  R\'        VR7      4       V P                  P%                  R\)        V P                  P*                  R7      4       R # )Nr  metricssession_usage_updated)usage)rv  r   ry   r   r!   r.  	speech_idr   r   pop
request_idtrace_utilsrecord_realtime_metricsr   _usage_collectorcollectr#   collect_usagerR  r;   r<   r  )r|   r  r   realtime_spans   &&  rc   r  #AgentActivity._on_metrics_collected  s     588>>M>r:&&*R*D*D(++BLr/00$$0"&"6"6":":2==$"OOO//B&&..r2""2&.0Eb0QR#$4==+>+>?	
rb   c                    V ^8  d   QhRRRR/# )rl   r  zllm.RemoteItemAddedEventrm   rn   rZ   )ro   s   "rc   rp   r     s     > >(@ >T >rb   c                	   V P                   P                  pVP                  VP                  P                  4      e   R # VP
                  '       d   VP
                  R,          P                  MR pVP                  e   VP                  V8X  d6   VP
                  P                  VP                  P                  4       4       R # R # )N)	r   r/  	get_by_iditemr.  itemsprevious_item_idru   
model_copy)r|   r  local_chat_ctxlast_item_ids   &&  rc   r  #AgentActivity._on_remote_item_added  s    ..##BGGJJ/; 7E6J6J6J~++B/22PT&"*=*=*M  ''(:(:(<= +Nrb   c                    V ^8  d   QhRRRR/# )rl   r{   zjllm.LLMError | stt.STTError | tts.TTSError | llm.RealtimeModelError | inference.InterruptionDetectionErrorrm   rn   rZ   )ro   s   "rc   rp   r     s      ' '/' 
'rb   c                	`   \        V\        P                  4      '       d5   \        WP                  R 7      pV P                  P                  RV4       EM>\        V\        P                  4      '       d4   \        WP                  R 7      pV P                  P                  RV4       M\        V\        P                  4      '       d4   \        WP                  R 7      pV P                  P                  RV4       M\        V\        P                  4      '       d4   \        WP                  R 7      pV P                  P                  RV4       ME\        V\        P                  4      '       d&   VP                  '       g   V P                  V4       R# V P                  P                  V4       R# ))r{   rJ  r{   N)ry   r   LLMErrorr9   r   rR  RealtimeModelErrorr   STTErrorr   TTSErrorr   InterruptionDetectionErrorrecoverable_fallback_to_vad_interruptionr  )r|   r{   error_events   && rc   r  AgentActivity._on_error  s    eS\\**$5BKMMw4s5566$5BKMMw4s||,,$5BKMMw4s||,,$5BKMMw4yCCDD$$$2259&rb   c                    V ^8  d   QhRRRR/# rl   r  z inference.OverlappingSpeechEventrm   rn   rZ   )ro   s   "rc   rp   r     s     5 5+K 5PT 5rb   c                	    VP                   '       d	   R V n        MRV n        V P                  P                  RV4       R# )TFr  N)is_interruptionr   r   rR  r|   r  s   &&rc   r  &AgentActivity._on_overlap_speech_ended  s3    *.D'*/D'/4rb   c                    V ^8  d   QhRRRR/# )rl   r`  zllm.InputSpeechStartedEventrm   rn   rZ   )ro   s   "rc   rp   r     s      *E $ rb   c                	v   V P                   fr   V P                  P                  R4       V P                  '       dE   V P                  P	                  \
        P
                  ! 4       V P                  P                  R7        V P                  4        R #   \         d    \        P                  ! R4        R # i ; i)Nr1  )
started_atuser_speaking_spanzdRealtimeAPI input_speech_started, but current speech is not interruptable, this should never happen!)r   r   _update_user_stater   on_start_of_speechr  _user_speaking_spanr  rP  r   r  r|   r`  s   &&rc   r  &AgentActivity._on_input_speech_started  s    88MM,,Z8&&&''::#yy{'+}}'H'H ; 	NN 	v	s   B !B87B8c                    V ^8  d   QhRRRR/# )rl   r  zllm.InputSpeechStoppedEventrm   rn   rZ   )ro   s   "rc   rp   r     s      +F 4 rb   c                	x   V P                   fr   V P                  '       dE   V P                  P                  \        P                  ! 4       V P                  P
                  R7       V P                  P                  R4       VP                  '       d)   V P                  P                  \        RRR7      4       R # R # )N)ended_atr  	listening F
transcriptis_final)
r   r   on_end_of_speechr  r   r   r  user_transcription_enabled_user_input_transcribedr>   r  s   &&rc   r  &AgentActivity._on_input_speech_stopped  s    88&&&''88!YY['+}}'H'H 9 
 MM,,[9(((MM11)R%H )rb   c                    V ^8  d   QhRRRR/# )rl   r  zllm.InputTranscriptionCompletedrm   rn   rZ   )ro   s   "rc   rp   r     s     
8 
8:Y 
8^b 
8rb   c                	~   V P                   P                  \        VP                  VP                  R 7      4       VP                  '       dq   \
        P                  ! RVP                  .VP                  R7      pV P                  P                  P                  V4       V P                   P                  V4       R# R# )r  user)rolecontentr.  N)r   r  r>   r	  r
  r   ChatMessageitem_idr   r/  _upsert_item_conversation_item_added)r|   r  msgs   && rc   r  5AgentActivity._on_input_audio_transcription_completed  s~    --%U	
 ;;; //v2::VCKK!!..s3MM2237 rb   c                    V ^8  d   QhRRRR/# )rl   r  llm.GenerationCreatedEventrm   rn   rZ   )ro   s   "rc   rp   r      s     #K #K)C #K #Krb   c           	     	   VP                   '       d   R # V P                  '       g   V P                  '       d   \        P                  ! R4       R # \
        P                  ! V P                  \        RR7      R7      pV P                  P                  R\        VRRR7      4       V P                  V P                  VV\        4       R	7      VR
R7       V P                  ;p'       dp   VP!                  4       '       gZ   V P                  P"                  ;pe(   VP!                  4       '       g   VP%                  V4       R V n        VP'                  R 4       V P)                  V\
        P*                  4       R # )NzFskipping new realtime generation, the speech scheduling is not runningr  modalityr^  rF  Fr_  rH  r   generation_evrK  z!AgentActivity.realtime_generationrL  )rI  r   r   r   r   rN   rQ  r   rM   r   rR  r=   r}  _realtime_generation_taskr-   r   rh  _global_run_state_watch_handler  rV  rW  )r|   r  r   fut	run_states   &&   rc   r  $AgentActivity._on_generation_created   s1   """d&=&=&=NNcd$$ $ 8 8&8
 	VERbc	

 	  **$ , + 
 !4 	! 	
 444C4chhjj!]]<<<	IR[R`R`RbRb''/04D-NN4 fl&I&IJrb   ignore_user_transcript_untilc                    V ^8  d   QhRRRR/# )rl   r'  zfloat | Nonerm   rn   rZ   )ro   s   "rc   rp   r   E  s      I1 I1/;I1	I1rb   c               &   V P                   '       g   R# V P                  P                  ^ 8  d   V P                  P                  e   R# \	        V P
                  \
        P                  4      '       d)   V P
                  P                  P                  '       d   R# V P                  P                  P                  pV P                  eW   VR,          ^ 8  dI   V P                  e;   V P                  P                  p\        \        VRR7      4      VR,          8  d   R# V P                   e   V P                   P#                  4        V P$                  Ee;   V P$                  P&                  '       Eg   V P$                  P(                  '       Ed   V P*                  '       d"   V P*                  P-                  4        RV n        V P                  '       dq   V P                  P.                  P0                  '       gK   V P                  P2                  R8X  d0   V P                  P5                  \6        P6                  ! 4       R7       V P9                  4       '       d   VR,          ;pf   Q hV P                  P:                  P<                  ;pf   Q hV P?                  V P$                  V4       VPA                  4        V P                  PC                  R4       V P                  '       d:   V P                  PE                  T;'       g    \6        P6                  ! 4       R	7       V PF                  '       d   V PI                  4        R# R# V P                   e   V P                   PK                  4        V P$                  PK                  4        R# R# R# R# )
a)  
Interrupt the current speech or generation, and optionally ignore the user transcript until the given timestamp.

Args:
    ignore_user_transcript_until: The timestamp until which the user transcript should be ignored.
        If None, the user transcript will be ignored until the current time.
N	min_wordsTsplit_characterr1  r  false_interruption_timeoutr  r'  )&r   r   r4  r5  ry   r   r   r   r   r   r   r   r   current_transcriptr  r&   r   start_user_activityr   r6  r   r   rL  _endpointingoverlappingr   r  r  _pause_enabledr   r  _update_paused_speechr  _update_agent_stateon_end_of_agent_speechr   '_restore_interruption_by_audio_activityr  )r|   r'  interruption_optionsrB  r   r  s   &$    rc   _interrupt_by_audio_activity*AgentActivity._interrupt_by_audio_activityE  s    ;;;==..2t}}7V7V7bdhh 1 122txx7L7L7[7[7[#}}44AAHH $[1A5''3**==D ;tT:;>RS^>__'002   ,((444$$888 ---..55715. '''//<<HHHMM--;''::#yy{ ;  ""$$#78T#UUbbb(,(<(<(B(BBOOO**4+?+?I""$11+>***++BB5Q5`5`UYU^U^U` C  ,,,@@B - ##/$$..0$$..0E 9 5 -rb   c               $    V ^8  d   QhRRRRRR/# )rl   r  vad.VADEvent | Nonespeech_start_timer   rm   rn   rZ   )ro   s   "rc   rp   r     s(     "! "!"! !"! 
	"!rb   c                	j   V P                   P                  R VR7       V P                  '       dG   V P                  P                  TV'       d   VP                  MRV P                   P
                  R7       V P                  P                  4        RV n        RV n	        V P                  '       d"   V P                  P                  4        RV n
        V P                   P                  R 8w  d   V P                  4       '       d   V P                  ;pe   VP                  '       g   VP                   '       dv   V P"                  e   V P"                  P$                  VJdL   V P                   P&                  P(                  ;pf   Q hV P+                  V^ R7       VP-                  4        R# R# R# R# R# R# R# )r1  last_speaking_timer  )r  speech_durationr  FN)r   )r   r  r   r  rB  r   r   r#  r   r   r   rL  r   r4  r   r6  r   r   r   r   r  r5  r  )r|   r  r>  r  r  s   &&&  rc   r   AgentActivity.on_start_of_speech  sv   
 	((HY(Z"""##66,68 2 2c#'==#D#D 7 
 	  &&(!&&+#)))**113-1D* MM%%3##%%#'#7#77D"...222$$,0C0C0J0JR`0` %)MM$8$8$>$>>LKKK&&~q&A  1a 3 / E & 4rb   c                    V ^8  d   QhRRRR/# )rl   r  r=  rm   rn   rZ   )ro   s   "rc   rp   r     s     N N#6 N4 Nrb   c                	B   \         P                   ! 4       pV'       d%   W!P                  ,
          VP                  ,
          pMR V n        V P                  '       dU   V P                  P                  TV P                  P                  V P                  '       d   V P                  M\        R7       V P                  P                  RVR7       V P                  P                  4        V P                  '       d(   V P                  V P                  P                   4       R# R# )T)r  r  r   r  r@  N)r  silence_durationinference_durationr   r   r  r   r   r   r   r'   r  r   r   r   _start_false_interruption_timerr   )r|   r  speech_end_times   && rc   r  AgentActivity.on_end_of_speech  s    ))+-0C0CCbF[F[[O%)D""""##44(#'==#D#D777 "88 5  	((. 	) 	
 	  $$&001D1D1L1LM rb   c                    V ^8  d   QhRRRR/# )rl   r  zvad.VADEventrm   rn   rZ   )ro   s   "rc   rp   r     s     + + + +rb   c                	6   V P                   R9   d   R# VP                  V P                  P                  P                  R,          8  pV'       dE   V P                   R8w  g$   V P
                  '       d   VP                  ^ 8X  d   V P                  4        VP                  '       dZ   VP                  V P                  P                  P                  R,          ^,          8:  d   V P                  P                  4        R# V P                  P                  4        R# )r   Nmin_durationr   r   r   )r   rB  r   r   r   r   raw_accumulated_silencer:  r1  r   r   r#  r   )r|   r  active_speechs   && rc   on_vad_inference_done#AgentActivity.on_vad_inference_done  s    #==**dmm.C.C.P.PQ_.``  E))))))Q. --/ KKK**dmm.C.C.O.OP[.\_`.``$$**,$$((*rb   c                    V ^8  d   QhRRRR/# r  rZ   )ro   s   "rc   rp   r     s     
 
"B 
t 
rb   c                	"   V P                  4        T P                  VP                  ;'       g    VP                  R 7       V P                  '       d=   V P                  P                  VP                  ;'       g    VP                  R 7       R# R# )r/  N)r8  r:  overlap_started_atdetected_atr   r7  r  s   &&rc   on_interruptionAgentActivity.on_interruption  sw    446)))+)>)>)P)P".. 	* 	
 """##::-/-B-B-T-Tbnn ;  #rb   c               $    V ^8  d   QhRRRRRR/# rl   r  zstt.SpeechEventr1  zbool | Nonerm   rn   rZ   )ro   s   "rc   rp   r     s"     > > >k >VZ >rb   c          	     	   \        V P                  \        P                  4      '       d)   V P                  P                  P                  '       d   R # V P
                  P                  \        VP                  ^ ,          P                  VP                  ^ ,          P                  RVP                  ^ ,          P                  R7      4       VP                  ^ ,          P                  '       d   V P                  R9  dn   V P                  4        VRJ dV   V P                  '       dB   V P
                  P                  P                   R,          ;p e   V P#                  V4       R # R # R # R # R # R # )NFlanguager	  r
  
speaker_idr.  r   )ry   r   r   r   user_transcriptionr   r  r>   alternativesr\  rB  r]  r   r:  r   r   r   rH  r|   r  r1  r   s   &&$ rc   on_interim_transcript#AgentActivity.on_interim_transcript  s   dhh 1 122txx7L7L7_7_7_--%+44??1-22??1-88		
 ??1"""t';'; D
 (
 --/ E!''' $ 5 5 B BC_ ``W 44W=	 ( "(
"rb   r1  c               $    V ^8  d   QhRRRRRR/# rY  rZ   )ro   s   "rc   rp   r     s"     "
 "
o "
K "
[_ "
rb   c          	     	   \        V P                  \        P                  4      '       d)   V P                  P                  P                  '       d   R # V P
                  P                  \        VP                  ^ ,          P                  VP                  ^ ,          P                  RVP                  ^ ,          P                  R7      4       V P                  '       dw   V P                  R9  df   V P                  4        VRJ dP   V P                  '       d>   V P
                  P                   P"                  R,          ;p e   V P%                  V4       \&        P(                  ! V P+                  V P,                  R7      4      V n        R # )NTr[  Fr.  )r"  r   )ry   r   r   r   r^  r   r  r>   r_  r\  rB  r]  r   r   r:  r   r   r   rH  rw   rx  r$  r   r`  s   &&$ rc   on_final_transcript!AgentActivity.on_final_transcript  s)   dhh 1 122txx7L7L7_7_7_--%+44??1-22??1-88		
 """t';'; D
 (
 --/ E!''' $ 5 5 B BC_ ``W 44W=)0)<)<%%t/M/M%N*
&rb   c                    V ^8  d   QhRRRR/# )rl   r   r3   rm   rn   rZ   )ro   s   "rc   rp   r   6  s     /
 /
-F /
4 /
rb   c           
     	   V P                   P                  P                  pVR ,          '       dy   V P                  '       gg   V P                  '       gU   V P
                  e   V P
                  P                  '       d+   \        V P                  \        P                  4      '       g   R# V P                  4        VP                  e5   \        P                  ! 4       VP                  ,
          VR,          8  d   R# V P                  VR,          8  d   R# V ;P                  ^,          un        \        P                  ! RVP                  .VP                   R7      pV P"                  P$                  P'                  4       pV P)                  VVR\+        RR7      R	7      p\-        VVVVP'                  4       V P.                  P'                  4       V P0                  \        P                  ! 4       R
7      V n        R# )r   Nmax_speech_durationmax_retriesr  r  r  transcript_confidenceFr  r  )r   r   rY  rZ  )r   r   r   r   r   r   r   )r   r   preemptive_generationr   r   r   r6  ry   r   r   r  started_speaking_atr  r   r  new_transcriptrl  r   r   r?  ry  rM   r   r   r   r   )r|   r   preemptive_optsr   r   r   s   &&    rc   on_preemptive_generation&AgentActivity.on_preemptive_generation6  sy   --//EE	**&&&&&&$$09M9M9Y9Y9Ydhh00**, $$0		d666I^9__,,0NN))Q.)(()"&"<"<
 ;;'',,.,,%!&8 - 
 '<'%]]_**//#))yy{'
#rb   c                    V ^8  d   QhRRRR/# )rl   r   r2   rm   r   rZ   )ro   s   "rc   rp   r   g  s     , ,> ,d ,rb   c                	N   V P                   '       g   V P                  '       d   V P                  4        \        P                  ! R RVP
                  /R7       V P                  P                  '       d   \        P                  ! RVP
                  .VP                  R7      pV P                  V4      Vn        V P                  P                  P                  P!                  V4       V P                  P#                  V4       R# V P$                  e   V P&                  R8w  d   V P(                  e   V P(                  P*                  '       d   V P(                  P,                  '       g   V P                  P.                  P0                  R,          ^ 8  d]   \3        \5        VP
                  RR7      4      V P                  P.                  P0                  R,          8  d   V P                  4        R	# V P6                  pV P9                  V P;                  W14      R
R7      V n        R# )z0skipping user input, speech scheduling is pausedr`  extrar  rk  Tr   r*  r+  Fz'AgentActivity._user_turn_completed_taskr]  )r   r   r  r   r   ro  r   _closingr   r  rl  _init_metrics_from_end_of_turnr  r   r/  r  ru   r  r   r   r   r   r6  r   r   r  r&   r   r}  _user_turn_completed_task)r|   r   r   r"  s   &&  rc   on_end_of_turnAgentActivity.on_end_of_turng  s    """d&=&=&=..0NNB#T%8%89
 }}%%%"!001*.*D*D 
 (,'J'J4'P$%%++22<@66|D  HH $$0$$0$$888((444%%22;?!CK 3 3TJKmm##00=> ..022*.*B*B**8:: +C +
' rb   c               $    V ^8  d   QhRRRRRR/# )rl   r"  asyncio.Task[None] | Noner   r2   rm   rn   rZ   )ro   s   "rc   rp   r     s.     j\ j\1j\9Gj\	j\rb   c           	     	6  "   Ve   VG R j  xL
  ^ V n         \        P                  ! V P                  RR7      !  G R j  xL
  \        P
                  ! RVP                  .VP                  R7      pV P                  V4      pVe   WCn	        \        V P                  \        P                  4      '       d   V P                  P                  P                  '       d   R # V P                  e   VP                  '       d^   VP                  R8w  dK   V P                   P"                  P$                  P'                  V4       V P(                  P+                  V4       R # V P                  P-                  4        VP                  '       d^   VP                  R8w  dK   V P                   P"                  P$                  P'                  V4       V P(                  P+                  V4       R # V P.                  ;pe   VP0                  '       g'   \2        P4                  ! RRVP                  /R7       R # V P7                  V P8                  4      G R j  xL
  VP;                  4       G R j  xL
  V P                  e   V P                  P;                  4        V P<                  '       g   V P>                  '       d   \2        P4                  ! R	RVP                  /R7       V P(                  P@                  '       dK   V P                   P"                  P$                  P'                  V4       V P(                  P+                  V4       R # V P                   PB                  PE                  4       p\F        PH                  ! 4       p V P                   PK                  WcR
7      G R j  xL
  \F        PH                  ! 4       T,
          pYR&   \        T P                  \        P                  4      '       d   R pMT P                  f   R # T P<                  '       g   T P>                  '       d   \2        P4                  ! RRTP                  /R7       T'       dg   T P(                  P@                  '       dK   T P                   P"                  P$                  P'                  T4       T P(                  P+                  T4       R # R p	T PR                  ;p
'       Ed0   T
PT                  P                  TPV                  8X  d   T
PB                  PY                  T4      '       d   T
PZ                  T PZ                  8X  d   T
P\                  T P^                  8X  d}   T
P`                  p	YJPb                  n	        T Pe                  T	\f        Ph                  R7       \2        Pj                  ! RR\F        PF                  ! 4       T
Pl                  ,
          /R7       M0\2        P4                  ! R4       T
P`                  Po                  4        R T n)        T	f   T Pq                  TT\s        RR7      R7      p	T Pt                  \        Pv                  ! 4       8w  d   T	P;                  4       G R j  xL
  R p\        T Px                  \z        4      '       d   \}        RT Px                  R7      pMCT Px                  e6   \}        T Px                  P~                  T Px                  P                  R7      p\        \F        PF                  ! 4       TP                  ;'       g    RTP                  ;'       g    RTT	P                  TR7      pT P(                  P                  R\        TR7      4       R #  ELF EL EL EL EL  \L         d     R # \N         d    \2        PP                  ! R4        R # i ; i ELD5i)NFr(  r  rk  r  zMskipping reply to user input, current speech generation cannot be interruptedr`  ru  z<skipping on_user_turn_completed, speech scheduling is paused)rb  z,error occurred during on_user_turn_completedon_user_turn_completed_delayz9skipping reply to user input, speech scheduling is paused)r  zusing preemptive generationpreemptive_lead_timezcpreemptive generation enabled but chat context or tools have changed after `on_user_turn_completed`r  r  )r   r   rZ  unknown)
model_namemodel_providerr  )	timestampend_of_utterance_delaytranscription_delayr  r  metadatar  r  )Gr   rw   rx   r*  r   r  ro  rl  rx  r  ry   r   r   r   r   r  r   r/  r  ru   r   r  r  r   r   r   r   r$  r   r  r   r   rw  r   r?  r  perf_counteron_user_turn_completedr   rz   r  r   r   rm  r  r   r   r   r   r   rV  rN   rW  r  r   r}  ry  rM   r   rd  r   r   r   r  r  r   end_of_turn_delayr  r.  rR  r;   )r|   r"  r   r   metrics_reportr  temp_mutable_chat_ctx
start_timer  r   
preemptiver  eou_metricss   &&&          rc   ry  'AgentActivity._user_turn_completed_task  s     
 NN,-) nndAAANOOO(()"&"<"<
 -1,O,OPT,U##1 dhh 1 122xx$$333+???**b0--33::<H>>|L  --/???""b(%%++22<@66|D"222N?!555c')<)<= ++D,J,JKKK **,,,+  **,"""d&=&=&=NNN#T%8%89 }}%%%%%++22<@66|D
 !% 4 4 9 9 ;&&(
	++44% 5    (,'8'8':Z'G$9U56dhh 1 122LXX"""d&=&=&=NNK#T%8%89  6 6 6%%++22<@66|D-1444:4 ..,2K2KK''556KLL$$

2**d.?.?? * 8 8 3A''/%%ml>a>a%b11499;AVAV3VW
 y ((002*.D'  !00).*G< 1 M **g.B.B.DD
  ))+++$(d**C009TEYEYZH!!-//55dFZFZFcFcH !iik#'#9#9#@#@S $ 8 8 ? ?C)E#&&
 	.0Ek0Z[E  	PN L,*  	 	KL	B ,s   
^]2^] B^!^?B^A>^A^]^#]$=^"^4?^4B^:]! ]]! A.^^+^^'A"^
A^E^^B,^ ^>^^^^]! !^,^/^8^^^^c                    V ^8  d   QhRRRR/# rl   r  r?   rm   rn   rZ   )ro   s   "rc   rp   r   B  s     
 
(= 
$ 
rb   c                	    V P                   '       d   R # V P                  e   V P                  P                  4        V P                  V P	                  V4      RR7      V n        R # )Nz&AgentActivity._user_turn_exceeded_taskr]  )r   r   rL  r}  _user_turn_exceeded_taskr  s   &&rc   on_user_turn_exceeded#AgentActivity.on_user_turn_exceededB  s[    *** ))5**113)-)A)A))"-9 *B *
&rb   c                    V ^8  d   QhRRRR/# r  rZ   )ro   s   "rc   rp   r   P  s     (2 (21F (24 (2rb   c                	  a"   \         P                  R ,          ! 4       oR V3R llpV P                  P                  R8X  d   SP	                  R 4       MV P                  P                  RV4       \         P                  ! V P                  RRR7      4      p \         P                  ! SV3\         P                  R7      G R j  xL
 w  rESV9   dH    V P                  P                  RV4       VP                  4       '       g   VP                  4        R # R #  V P                  P                  RV4       VP                  4       '       g   VP                  4        \        P                  ! R	R
TP                  RTP                   /R7       RT n         T P$                  P'                  T4      G R j  xL
  RT n        R T n        R #  EL  T P                  P                  RT4       TP                  4       '       g   TP                  4        i i ; i L_  \(         d    \        P*                  ! R4        Li ; i  RT n        R T n        i ; i5i)Nc                    V ^8  d   QhRRRR/# )rl   state_evr8   rm   rn   rZ   )ro   s   "rc   rp   <AgentActivity._user_turn_exceeded_task.<locals>.__annotate__S  s     	4 	4.D 	4 	4rb   c                   < V P                   R 8X  d,   SP                  4       '       g   SP                  R4       R# R# R# )r1  N)	new_staterh  r  )r  agent_speaking_futs   &rc   _on_agent_state_changedGAgentActivity._user_turn_exceeded_task.<locals>._on_agent_state_changedS  s7    !!Z/8J8O8O8Q8Q"--d3 9R/rb   r1  agent_state_changedTF)r  r  )return_whenzuser turn limit exceeded	num_wordsdurationru  z'error in on_user_turn_exceeded callback)rw   r  r   r   r  r  ensure_futurer  r  FIRST_COMPLETEDr  rh  rL  r   r  accumulated_word_countr  r   r   r  rz   r  r   )r|   r  r  wait_inactiverh  r`  r  s   &&    @rc   r  &AgentActivity._user_turn_exceeded_taskO  s    $^^D13	4 	4 ==$$
2))$/MM24KL  --##4u#M

	'#LL#]3AXAX GD "T)MM35LM %%''$$& ( * MM35LM %%''$$& 	& 9 9:r{{S	
 +/'	2++33B777 /4D+-1D*/ MM35LM %%''$$& ( 8 	HFG	H /4D+-1D*s   BI+G GG AI1IAIH 3H4H 8IG AHIH !H96H< 8H99H< <IIc                   V ^8  d   QhRR/# )rl   rm   r   rZ   )ro   s   "rc   rp   r   {  s     $ $? $rb   c                	.    V P                   P                  # r   )r   r   r   s   &rc   retrieve_chat_ctxAgentActivity.retrieve_chat_ctx{  s    {{###rb   c                    V ^8  d   QhRRRR/# )rl   r`  zasyncio.Task[None]rm   rn   rZ   )ro   s   "rc   rp   r     s     ? ?); ? ?rb   c                	   V P                   '       g   V P                  '       d!   V P                  P                  4       '       d   V P                  P	                  R 4       V P
                  '       d0   V P
                  P                  \        P                  ! 4       R7       V P                  '       d   V P                  4        R# R# R# R# )r  r/  N)
r   r   rh  r   r6  r   r7  r  r   r8  r  s   &&rc   rU  %AgentActivity._on_pipeline_reply_done  s    ~~~t';';';t?S?S?X?X?Z?ZMM--k:&&&''>>15 ?  (((<<> ) @[~rb   c               0    V ^8  d   QhRRRRRRRRR	R
RR/# rl   r   rN   rB  rC  r  z$AsyncIterable[rtc.AudioFrame] | Noner@  r   rK  r-   rm   rn   rZ   )ro   s   "rc   rp   r     sF      # ' 4	
  & 
rb   c           
     	  "   \         P                  ! R V P                  P                  R7      ;_uu_ 4       pVP	                  \
        P                  VP                  4       VP                  ;p'       d!   VP	                  \
        P                  V4       \        P                  ! 4       Vn        V P                  VVVVVR7      G Rj  xL
  RRR4       R#  L  + '       g   i     R# ; i5i)
agent_turnr   rM  N)r%   r  r   _root_span_contextr  r$   ATTR_AGENT_TURN_ID_generation_id_parent_generation_idATTR_AGENT_PARENT_TURN_IDrV  rw  _agent_turn_context_tts_task_impl)r|   r   rB  r  r@  rK  r  	parent_ids   &&&&&&  rc   rT  AgentActivity._tts_task  s      ))$--"B"B
 
&&{'E'E}GcGcd)???y?**;+P+PR[\0<0H0H0JM-%%+ /- &   
 

 
 
s/   5C.BC	C
C
C.CC+	%	C.c               0    V ^8  d   QhRRRRRRRRR	R
RR/# r  rZ   )ro   s   "rc   rp   r     sN     M/ M/#M/ 'M/ 4	M/
 M/ &M/ 
M/rb   c           	     	  a aaa!a"a#"   \         P                  ! SP                  R 7      pVP                  \        P
                  SP                  4       S P                  P                  P                  '       d!   S P                  P                  P                  MRpS P                  P                  P                  '       d!   S P                  P                  P                  MRp\        P                  ! SP                  4       4      \        P                  ! S P                   P#                  4       4      .p	SP$                  '       d>   V	P'                  \        P                  ! S P(                  P#                  4       4      4       SP+                  V	4      G Rj  xL
  SP-                  4        SP.                  '       dI   VP                  \        P0                  R4       \2        P4                  P6                  ! V	!  G Rj  xL
  R# Rp
RpRp\9        S\:        4      '       d0   \2        P4                  P<                  P?                  S^4      pVw  rM-\9        S\@        4      '       d   R V3R llpV! 4       p
V! 4       pRpRpRpRo#RpRo"R V!V VV"V#3R llpRo!RpVEe]   VEf.   \C        S PD                  PF                  TTS P                  PH                  PJ                  S PL                  '       d   S PL                  PN                  MRS PL                  '       d   S PL                  PP                  MRR7      w  ppS PR                  '       dk   S PL                  ;p'       dW   VPT                  PV                  '       g   VPT                  PX                  '       g   VPZ                  G Rj  xL
 ;p'       d   Tp
\]        VVP^                  R7      w  po!M\]        WR7      w  po!S!P`                  Pc                  V4       S PD                  Pe                  W4      p\        Pf                  ! V4      '       d   VG Rj  xL
 MTpRpVe0   \i        VVR	7      w  ppVf   VPj                  Pc                  V4       WV3 Uu. uF  pVf   K	  VNK  	  ppSP+                  V4      G Rj  xL
  WV3 FS  pVf   K	  VPm                  4       '       g   K!  VPo                  4       '       d   K9  VPq                  4       ;p'       g   KS  Vh	  Ve=   SP+                  \        P                  ! VPs                  4       4      .4      G Rj  xL
  \t        Pt                  ! 4       pVP                  \        P0                  SP.                  4       SP.                  '       dS   \2        P4                  P6                  ! V!  G Rj  xL
  Ve)   VPw                  4        VPs                  4       G Rj  xL
  Ve   VPy                  4       G Rj  xL
  V'       d   VPz                  MR
pSP.                  '       d~   Vez   VPs                  4       G Rj  xL
 pS!e\   S!P`                  Pm                  4       '       d<   S!P`                  Po                  4       '       g   VP|                  e   VP|                  pMR
pVP                  \        P~                  V4       V'       d   V'       d   / pV'       d   VP                  e   VP                  VR&   V'       d#   S#'       d   S#VR&   VVR&   S"e   S#S",
          VR&   S PD                  P                  P                  RVSP.                  VR7      p SP                  V .4       S P                  P                  V 4       S P                  P                  R8X  d   S P                  P                  R4       S P                  '       d0   S P                  P                  \t        Pt                  ! 4       R7       S P                  '       d   S P                  4        S!e?   S!P`                  Pm                  4       '       g   S!P`                  P                  4        R# R# R#  EL ELg EL EL4u upi  EL EL; EL EL EL ELD5i)r  NTc                   V ^8  d   QhRR/# )rl   rm   AsyncIterable[str]rZ   )ro   s   "rc   rp   2AgentActivity._tts_task_impl.<locals>.__annotate__  s      &8 rb   c                   <"   S 5x  R # 5ir   rZ   )rB  s   rc   
_read_text0AgentActivity._tts_task_impl.<locals>._read_text  s     
s   c                    V ^8  d   QhRRRR/# rl   r$  ,asyncio.Future[float] | asyncio.Future[None]rm   rn   rZ   )ro   s   "rc   rp   r    s     	6 	6!M 	6RV 	6rb   c                  <  V P                  4       ;'       g    \        P                  ! 4       oS'       d   SP                  e   SP                  MSoSP                  P                  RSSP                  R7       SP                  '       d   SP                  P                  SR7       SP                  '       d   SP                  4        R# R#   \         d     R# i ; i
Callback to update the agent state when the first frame is captured:
1. _AudioOutput.first_frame_fut (float)
2. _TextOutput.first_text_fut (None)
Nr1  r  rV  r-  resultr  started_forwarding_atr  r   r6  r  r   on_start_of_agent_speechr   _disable_vad_interruption_soonr$  	audio_outr|   r   r  rn  s   &rc   _on_first_frame5AgentActivity._tts_task_impl.<locals>._on_first_frame  s    &)jjl&A&Adiik# !Y%D%D%P 33, & MM--.*>> . 
 &&&''@@L_@`(((335 ) ! s   C C C CCnoder  rK  text_transformsr  r  r  
tts_outputtext_outputrJ  r  tts_node_ttfbrn  stopped_speaking_atplayback_latency	assistant)r  r  r6  r  r1  r  r/  )Lr   r  r  r  r$   ATTR_SPEECH_IDr.  r   r   transcription_enabledtranscriptionrO  r  rw   r  _wait_for_authorizationr   r  r   ru   r   wait_if_not_interrupted_clear_authorizationr6  ATTR_SPEECH_INTERRUPTEDr   r+  r,  ry   r   	itertoolsteer   rI   r   tts_noder   tts_text_transformsr   r  r  r#  r   aligned_transcriptr   timed_texts_futrE   audio_chfirst_frame_futry  transcription_nodeiscoroutinerG   first_text_futrh  	cancelledr  wait_for_playoutr  clear_bufferrv   rB  synchronized_transcriptATTR_RESPONSE_TEXTttfbr/  add_message_item_addedr  r   r6  r   r7  r   r8  rL  )$r|   r   rB  r  r@  rK  r  	tr_outputr  authorization_taskstext_sourceaudio_sourcer  r  tts_taskforward_audio_taskforward_text_taskr  r  tts_gen_datar   timed_textstr_nodetr_node_resulttext_outrs  	all_tasksra  excforwarded_textplayback_evassistant_metricsr  r  r  rn  s$   fff&&&                           @@@rc   r  AgentActivity._tts_task_impl  s      --m6W6WX"";#=#=}?O?OP }}##999 MM  .. 	
 6:]]5I5I5W5W5Wt}}++11]a !!-"G"G"IJ!!$"="="B"B"DE:
 ,,,&&w'<'<T=U=U=Z=Z=\']^334GHHH**,$$$&&{'J'JDQ))++-@AAA152637dM**))%%))$2C(+%Kc""  %,K%<L-17;6:,0,0.2	6 	66 *.	26#})>--&#1$(MM$9$9$M$M,0HHH$((..$26(((TXX..*&, 333 $))<<<CDTDTD^D^D^.:.J.J(JJJ"-K0H!-,:O:O1-"I
 1I!-1-"I %%77H ++00M*1*=*=g*F*FwG'+%*A%%+'x #''99/J !6GH0
H!AAAH 	 0
 33I>>> 3DEDDIIKK8H8H..**3**I F
 #77&&|'D'D'FGH   #iik"";#F#FHaHab$$$))++Y777'))+"33555?**, +3$$$)A , = = ??K %--2244!11;;==66B%0%H%HN!#"";#A#A>Ro35 1 1 =5A5F5F!/2"':;N!"78;N!"78(4+.CC &&89 ++''33 &)55)	 4 C %%se,MM2237==$$
2MM--k:&&&''>>15 ?  (((<<> )B)B)G)G)I)I%%,,. *J g 	I
 BJ )K" '0
 	? 8 6 
 @sl  B9bBbAba%%b Aba(Db1bb#b?bb*a++b7Bb:a.;Ab<a1a1b#a6$b5bb%b??b>a9?Ab!b5a<6+b!a?"b=b>b
b*bb'b*b
Abb	b!$bbCbA b3b!b(b+b.b1b9b<b?bbbrb  _previous_user_metrics_previous_tools_messagesc               <    V ^8  d   QhRRRRRRRRR	R
RRRRRRRR/	# rl   r   rN   r   r   r   r   rK  r-   rb  zllm.ChatMessage | Noner'  zstr | Instructions | Noner  zllm.MetricsReport | Noner  z:Sequence[llm.FunctionCall | llm.FunctionCallOutput] | Nonerm   rn   rZ   )ro   s   "rc   rp   r   s	  sg       $ "	
 , & , 0 !9 #] 
rb   c               	  "   \         P                  ! R V P                  P                  R7      ;_uu_ 4       p	V	P	                  \
        P                  VP                  4       VP                  ;p
'       d!   V	P	                  \
        P                  V
4       \        P                  ! 4       Vn        V P                  VVVVVVVVR7      G Rj  xL
  RRR4       R#  L  + '       g   i     R# ; i5i)r  r  )r   r   r   rK  rb  r'  r  r  N)r%   r  r   r  r  r$   r  r  r  r  rV  rw  r  _pipeline_reply_task_impl)r|   r   r   r   rK  rb  r'  r  r  r  r  s   &$$$$$$$$  rc   rn  "AgentActivity._pipeline_reply_taskr	  s      ))$--"B"B
 
&&{'E'E}GcGcd)???y?**;+P+PR[\0<0H0H0JM-00+!-')'=)A 1 	 	 	
 
	
 
 
s/   5C1BCCC
C1CC.	(	C1c               <    V ^8  d   QhRRRRRRRRR	R
RRRRRRRR/	# r  rZ   )ro   s   "rc   rp   r   	  sr     }? }? $}? "	}?
 ,}? &}? ,}? 0}? !9}? #]}? 
}?rb   c               	"  a aaa8a9a:a;a<a=a>"   ^RI Hp	 \        P                  ! SP                  R7      p
V
P                  \        P                  SP                  4       Ve!   V
P                  \        P                  V4       V'       d5   T
P                  \        P                  VP                  ;'       g    R4       S P                  P                  ;p'       d@   VP                  P                  4       '       d    \!        WP                  P"                  4       S P                  P$                  P&                  '       d!   S P                  P$                  P(                  MRpS P                  P$                  P*                  '       d!   S P                  P$                  P,                  MRpVP/                  4       p\0        P2                  ! V4      pVe   VP5                  V4       Ve   VP7                  RV.R7       \9        VSP:                  P<                  R7       . p\?        S P@                  PB                  TTSS P0                  '       d   S P0                  PD                  MRS P0                  '       d   S P0                  PF                  MRR7      w  po9VPI                  V4       \J        PL                  PN                  PQ                  S9PR                  ^4      pVw  o=pRpRo<R	 V9VV V=3R
 llpS P                  PT                  PV                  pVeB   VR,          '       d3   VR,          '       d$   V! 4       G Rj  xL
 w  po<VPI                  V4       \X        PZ                  ! SP]                  4       4      pSP_                  V.4      G Rj  xL
  Vo>Ve_   SP`                  '       dM   S P@                  Pb                  P5                  V4       S P                  Pe                  V4       VPf                  o>SPh                  '       df   V
P                  \        Pj                  R4       \J        PL                  Pl                  ! . VOVN5!  G Rj  xL
  VPo                  4       G Rj  xL
  R# Ve(   Vf$   V! 4       G Rj  xL
 w  po<VPI                  V4       RpS<e   S Pp                  '       dm   S Pr                  ;p'       dY   VPt                  Pv                  '       g   VPt                  Px                  '       g!   S<Pz                  G Rj  xL
 ;p'       d   TpRpS P                  P}                  R4       \X        PZ                  ! SP                  4       4      \X        PZ                  ! S P                  P                  4       4      .pSP                  '       d>   VPI                  \X        PZ                  ! S P                  P                  4       4      4       SP_                  V4      G Rj  xL
  SP                  4        SPh                  '       df   V
P                  \        Pj                  R4       \J        PL                  Pl                  ! . VOVO5!  G Rj  xL
  VPo                  4       G Rj  xL
  R# \        P                  ! 4       pR R lpS P@                  P                  V! V4      S4      p\X        P                  ! V4      '       d   VG Rj  xL
 MTpRpRp Ve"   \        VVR7      w  p pVPI                  V 4       Ro;Rp!Ro:R V8V9V VV:V;V<V>3R llp"Ro8VeN   S<f   Q h\        VS<P                  R7      w  p#o8VPI                  V#4       S8P                  P                  V"4       MVe   VP                  P                  V"4       R V3R llp$R V3R llp%\        S P                  SVSP                  S9P                  V$V%R7      w  p&p'SP_                  . VO4      G Rj  xL
  Ve=   SP_                  \X        PZ                  ! VP                  4       4      .4      G Rj  xL
  \        P                  ! 4       p!/ p(S P0                  '       d2   RS P0                  PD                  RS P0                  PF                  /V(R&   S Pr                  '       d2   RS Pr                  PD                  RS Pr                  PF                  /V(R&   S9P                  e   S9P                  V(R&   S<'       d   S<P                  e   S<P                  V(R &   V!'       dg   S;'       d_   S;V(R!&   V!V(R"&   S:e   S;S:,
          V(R#&   S>'       d=   R"S>9   d6   S;S>R",          ,
          p)V)V(R$&   V
P                  \        P                  V)4       V
P                  \        Pj                  SPh                  4       V'       dA   S P@                  Pb                  P5                  V4       S P                  P                  V4       V'       d   VP                  MRp*SPh                  '       d   \J        PL                  Pl                  ! V!  G Rj  xL
  Ve   VP                  4        VP                  4       G Rj  xL
 p+S8e\   S8P                  P                  4       '       d<   S8P                  P                  4       '       g   V+P                  e   V+P                  p*M;Rp*M8V'       d1   V'       d)   VP                  '       g   \        P                  ! R%4       V*'       d   / p,S9P                  '       d   S9P                  V,R&&   VP6                  ! R?R'R(R)V*R*S9P                  R+SPh                  R,VR-V(/V,B p-S P@                  Pb                  P5                  V-4       S P                  Pe                  V-4       SP                  V-.4       V
P                  \        P                  V*4       SPh                  '       g7   \        V'P$                  4      ^ 8  d   S P                  P}                  R4       MS P                  P                  R.8X  d   S P                  P}                  R/4       S P                  '       d0   S P                  P                  \        P                  ! 4       R07       S P                  '       d   S P                  4        S8e;   S8P                  P                  4       '       g   S8P                  P                  4        VPo                  4       G Rj  xL
  SP                  4        SPh                  '       d*   \J        PL                  Pm                  V&4      G Rj  xL
  R# S P                  P                  S4        V&G Rj  xL
  S P                  P                  S4       \        V'P$                  4      ^ 8  EdJ   SP                  S P                  PT                  P                  ^,           8  p.V.'       d%   \        P                  ! R1R2SP                  /R37       S;P                  ^,          unm        . p/. p0Rp1Rp2\        . . R47      p3V'P$                   F  p4V4P                  eP   V/PI                  V4P                  4       V0PI                  V4P                  4       V4P                  '       d   RV3nr        V3P                  PI                  V4P                  4       V3P                  PI                  V4P                  4       V1e'   V4P                  e   \        P                  ! R54       Rp2V4P                  p1K  	  V1'       d   V2'       g   RV3nw        S P                  P                  R6V34       S P                  p5V3P                  '       d.   V1'       d&   V2'       g   S P                  P                  V14       Rp5V/V0,           p6V3P                  '       d   VP                  P                  V64       \        VS P@                  P                  RR77       S P                  S EP                  STTT	! V.'       g   V5'       g   SP                  R88X  d   R8MR9R:7      V*'       g   S>MRV6R;7      SR<R=7      p7V7P                  S EP                  4       S EP                  SE\        EP                  RR>7       R# \        V04      ^ 8  dC   S P@                  Pb                  P5                  V64       S P                  P                  V64       R# R# R#  EL ELo EL EL EL EL EL E
L E
L E
L> E	L. EL EL EL EL! EL EL  S P                  P                  S4       i ; i5i)@   )r-   r  Nr  systemr  r  r  )r  r   rr  rK  r  r  c                   V ^8  d   QhRR/# )rl   rm   z-tuple[asyncio.Task[bool], _TTSGenerationData]rZ   )ro   s   "rc   rp   =AgentActivity._pipeline_reply_task_impl.<locals>.__annotate__	  s     
	* 
	*,Y 
	*rb   c            	     h  <"   SP                   G R j  xL
  \        SP                  P                  SSSP                  P
                  P                  SP                  '       d   SP                  P                  MR SP                  '       d   SP                  P                  MR R7      w  rW3#  L5i)Nr  )
started_futrI   r   r  r   r   r  r   r  r  )r   r  llm_gen_datarK  r|   tts_text_inputs     rc   _start_tts_inferenceEAgentActivity._pipeline_reply_task_impl.<locals>._start_tts_inference	  s     ****%:[[))$- $ 5 5 I I(,dhhnnd.2hhh**D&"H )) +s   B2B0A9B2#B2r   preemptive_ttsTFthinkingc                    V ^8  d   QhRRRR/# )rl   
llm_outputz"AsyncIterable[str | FlushSentinel]rm   r  rZ   )ro   s   "rc   rp   r  
  s     	 	:		rb   c               j   "   V   R j  xL
  p\        V\        4      '       d   K"  V5x  K)   L$D%R # 5ir   )ry   r(   )r%  chunks   & rc   r  ;AgentActivity._pipeline_reply_task_impl.<locals>._read_text
  s2       *  ee]33zs   30.0!303r  c                    V ^8  d   QhRRRR/# r  rZ   )ro   s   "rc   rp   r  0
  s     (	6 (	6!M (	6RV (	6rb   c                  <  V P                  4       ;'       g    \        P                  ! 4       oS'       d   SP                  e   SP                  MSo/ pSP                  e   SP                  TR&   S'       d   SP
                  e   SP
                  TR&   SS,
          TR&   S	'       d   RS	9   d   SS	R,          ,
          TR&   TSP                  n        SP                  P                  RSSP                  R7       SP                  '       d   SP                  P                  SR	7       SP                  '       d   SP                  4        R# R#   \         d     R# i ; i)
r  Nllm_node_ttftr  r  r  e2e_latencyr1  r  r-  )r  r  r  r  ttftr  r   _early_assistant_metricsr6  r  r   r  r   r  )
r$  early_metricsr  r  r|   r   r  rn  r  user_metricss
   & rc   r  @AgentActivity._pipeline_reply_task_impl.<locals>._on_first_frame0
  sF   &)jjl&A&Adiik# !Y%D%D%P 33, & 02M  ,1=1B1Bo. 1 1 =1=1B1Bo.0CF[0[M,- 5 E',7L*MM m, 6CDMM2MM--.*>> .  &&&''@@L_@`(((335 )3 ! s   E E E E"!E"r  c                    V ^8  d   QhRRRR/# rl   fnc_callzllm.FunctionCallrm   rn   rZ   )ro   s   "rc   rp   r  h
  s     	2 	21A 	2d 	2rb   c                `   < \         P                   ! 4       V n        SP                  V .4       R # r   )r  r   r  )r4  r   s   &rc   _tool_execution_started_cbKAgentActivity._pipeline_reply_task_impl.<locals>._tool_execution_started_cbh
  s#     #'))+H%%xj1rb   c                    V ^8  d   QhRRRR/# rl   outr@   rm   rn   rZ   )ro   s   "rc   rp   r  n
       	> 	>.A 	>d 	>rb   c                h   < V P                   '       d   SP                  V P                   .4       R # R # r   fnc_call_outr  r:  r   s   &rc   _tool_execution_completed_cbMAgentActivity._pipeline_reply_task_impl.<locals>._tool_execution_completed_cbn
  +    ))3+;+;*<=  rb   rX   r   rr  r   function_streamtool_execution_started_cbtool_execution_completed_cbr  r  llm_metadatatts_metadatar+  r  rn  r  r  r,  U`use_tts_aligned_transcript` is enabled but no agent transcript was returned from ttsrv  r  r  r  r.  r6  r   r  r1  r  r/  zamaximum number of function calls steps reached, generating final response with tool_choice='none'r  ru  function_callsfunction_call_outputsz?expected to receive only one AgentTask from the tool executionsfunction_tools_executedr*  r]  autorJ  )r   r   r   rK  r  r  rc  rL  r(  rZ   )rY   r-   r   r  r  r  r$   r  r.  ATTR_INSTRUCTIONSATTR_USER_INPUTrm  r   _room_ioroomisconnectedr+   local_participantr   rO  r  r  r  r?  r   r;  r0  r  rD   rZ  r  rF   r   llm_noder  r  ru   r   r+  r  r  text_chr   rm  rw   r  _wait_for_scheduledr  	scheduledr/  r  r  r6  r  r,  rv   r#  r   r   r  r   r  r6  r  r   r  r   r   r  r  r  r  rG   rE   r  r  ry  r  rH   r   function_chr  r-  r  ATTR_E2E_LATENCY_tool_items_addedrB  r  rh  r  r  r   r   generated_extrar  r  r  r   r   r7  r   r8  rL  _mark_generation_doner   adddiscard	num_stepsmax_tool_steps
_num_stepsr:   r>  r4  reply_required_reply_requiredrK  rL  
agent_taskr{   _handoff_requiredrR  r   update_agentr  extendrK   r,  r}  rn  rU  rV  rN   rW  )?r|   r   r   r   rK  rb  r'  r  r  r-   r  room_ior  r  rr  r}   llm_tasktext_teetr_inputr   r   rp  wait_for_scheduledread_transcript_from_ttsr   r  r  reply_started_atr  r  r  r  text_forward_taskr  r  forward_taskr6  r@  exe_tasktool_outputr  r,  r
  r  extra_kwargsr  max_steps_reached	new_callsnew_fnc_outputsnew_agent_taskignore_task_switchfnc_executed_evsanitized_outdrainingtool_messagestool_response_taskr  r  r  rn  r  r  r0  s?   fd$$d$$$$                                               @@@@@@@rc   r  'AgentActivity._pipeline_reply_task_impl	  s     	)--m6W6WX"";#=#=}?O?OP#&&{'D'DlS&&{'B'BKD\D\DbDb`bc}}---G-7<<3K3K3M3M'll6T6TU59]]5I5I5W5W5Wt}}++11]a }}##999 MM  .. 	
 ==???5)"OOK(#  h G 	$H}7R7R7[7[\
 *,!6%%)$(HHH$((..$*.(((TXX&&"
, 	X99&&**<+?+?C#+ .226
	* 
	* --//EE$	** 011+?+A%A"HlLL"$22=3T3T3VW335G4HIII 2H"}'>'>'>KK!!((5MM22;?&..L$$$&&{'J'JDQ))++GUG4FGGG//### #(8+?+A%A"HlLL"#( $///!!444C<L<L<V<V<V&2&B&B BBB"H'+$))*5 !!-"G"G"IJ!!$"="="B"B"DE:
 ,,,&&w'<'<T=U=U=Z=Z=\']^334GHHH**,$$$&&{'J'JDQ))++IUI5HIII//###99;	 ++00H1E~V*1*=*=g*F*FwG'+15%*A'+'x LL*+,0,0.2(	6 (	6T *.	#+++&>)l6K6K'#L) LL&%%77H!##55oF	2 	2	> 	>
 !8MM'&22(44&@(D!
+ 33HeH=== #77&&|'D'D'FGH   #iik/1888dhhnn $(("3"31n- 888dhhnn $(("3"31n-
 (1=1B1Bo.L--91=1B1Bo.#67J347J34$08KNc8c!"45 5 E1LAV4WW3>!-0**;+G+GU"";#F#FHaHab $KK!!(()ABMM++,DE*2$$$))++U333 '))+$0$A$A$CC)!116688%55??AA #::F)4)L)L%'N%(8===NNg !#L+++(4(D(DW%&&  &  ?? *55	
 , * C KK!!((-MM2237%%se,&&{'E'E~V(((S1C1C-Dq-HMM--j9]]&&*4MM--k:&&&''>>15 ?  (((<<> )B)B)G)G)I)I%%,,.oo++-$$$))++H555 	!!%%m4	=NN%%--m< {!!"Q& - 7 74==;P;P;_;_bc;c c H&(8(89 $$)$02I<>O+/N!&8!O "-!3!3 --9$$]%;%;<#**=+E+EF$333:>7  ..55m6L6LM55<<]=W=WX!--2J2J2VLL!bc)-& "/!9!9! "4$ &8481MM8/J--H000^L^**>:%7M...%%m4
 $!%!:!:#( &*%=%=--&3!)#'4  1H@Z@Z^d@d )/!'( DR|W[1>! . $ #07) &> &", #44T5Q5QR%%!<#F#Fd &  _%)%%,,];//> *m 'g &B 	J H#
 &B !C 	I
 J# 't 	>Z 4 Db 	 
 6 %%--m<s  A=AE
,AE7$AEAE<AAEAAE	C/AE9B,AE&AE5
AE?AC= AAEAD AE.AAEAAEADAE*AD+AEAD	/AE4AEAE$AE AEADAEBAEAAE0AD1%AEAAEADAE5AD6AAEAEADDAE-AD.?AE-AD.,AEAAEAAE4$AEAE!!AEA-AE1AAE9AE!AE:AD!;+AE&AD$''AEAE/%AEAEAE/AEAE!CAE&A=AE$A AE%3AE-AEAD'%AE-"AEAD*!AE2AD0 7AD-8AD0 <A1AE.B6AE%BAE8AE A AEAE	AE7AE	A(AE@2 AEAB+AED AEDAEDAED	AEDAEDAEDAEDAEDAEDAEDAED!AED$AED'AED*AED-AD0 D0AEEAEr`  
tool_replyrB  c               8    V ^8  d   QhRRRRRRRRR	RR
RRRRR/# )rl   r   rN   rK  r-   r   z#list[llm.Tool | llm.Toolset] | Noner`  rQ  r'  r  r   rB  zstr | AsyncIterable[str] | Nonerm   rn   rZ   )ro   s   "rc   rp   r   R  sf     n> n> $n> &	n>
 3n> n> !n> n> .n> 
n>rb   c               	H  "   V P                   f   Q R4       h\        P                  ! VP                  4       4      \        P                  ! V P                  P                  4       4      .pVP                  '       d>   VP                  \        P                  ! V P                  P                  4       4      4       VP                  V4      G R j  xL
  VP                  '       d)   \        P                  P                  ! V!  G R j  xL
  R # VeC    V P                   P                  V4      G R j  xL
 p	T P)                  TT	TR7      G R j  xL
  R # Ve   V P                   P*                  P-                  4       pVP/                  RVR7      pV P                   P1                  V4      G R j  xL
  V P2                  P4                  P7                  V4       V P8                  P;                  V4       \<        p\<        p V P                   P>                  P@                  PB                  ;p'       g   \E        VPF                  4      '       dN   VPF                  V PH                  8w  d3   V PH                  pV P                   PK                  VPF                  R7       Vej   V P                   PL                  PO                  4       pV P                   PQ                  \        PR                  ! V4      PO                  4       4      G R j  xL
  V P                   PU                  T;'       g    \<        V'       d   VPF                  M\<        V'       d)   Ve%   \        PR                  ! V4      PO                  4       M\<        R7      pVP                  V.4      G R j  xL
  VP                  '       d   VPW                  4       '       g   VPY                  4         \E        V4      '       d    V P                   PK                  VR7       \E        V4      '       d'    V P                   PQ                  V4      G R j  xL
  R # R #  VG R j  xL
 p	T P)                  TT	TTR7      G R j  xL
  \E        T4      '       d    T P                   PK                  TR7       \E        T4      '       d'    T P                   PQ                  T4      G R j  xL
  R # R #  EL EL EL  \        P                    d,   p
\"        P$                  ! R\'        T
4      4        R p
?
R # R p
?
ii ; i EL ELi EL EL  \Z         d    \"        P\                  ! R4        ELDi ; i EL  \Z         d    \"        P\                  ! R	4        R # i ; i EL4  \        P                    Ed   p
\"        P$                  ! R
T'       d   RMR\'        T
4      4       T P8                  P_                  R4        R p
?
\E        T4      '       dF    T P                   PK                  TR7       M'  \Z         d    \"        P\                  ! R4        Mi ; i\E        T4      '       dP    T P                   PQ                  T4      G R j  xL 
  R #   \Z         d    \"        P\                  ! R	4        R # i ; iR # R p
?
ii ; i EL:  \Z         d    \"        P\                  ! R4        EL.i ; i EL  \Z         d    \"        P\                  ! R	4        R # i ; i  \E        T4      '       dF    T P                   PK                  TR7       M'  \Z         d    \"        P\                  ! R4        Mi ; i\E        T4      '       dN    T P                   PQ                  T4      G R j  xL 
  i   \Z         d    \"        P\                  ! R	4        i i ; ii ; i5i)Nrt_session is not availablezfailed to say text: %sr  r  r  rJ  )r'  r   r   zfailed to reset tool_choicezfailed to reset toolsz failed to generate a reply%s: %sz after tool executionr  r  r   r   rK  r'  )0r   rw   r  r  r   r  r   ru   r   r  r6  r   r+  r,  rG  r   RealtimeErrorr   r{   r   r!  r   r?  r  r>  r   r/  r  r   r  r'   realtime_modelr   per_response_tool_choicer*   r   r   rK  r   r<  r=  r;  r_  rh  rL  rz   r  r6  )r|   r   rK  r   r`  r'  r  rB  r  r   er   r  ori_tool_choice	ori_toolsr  generate_reply_futs   &$$$$$$$         rc   rS  "AgentActivity._realtime_reply_taskQ  sa     +J-JJ+ !!-"G"G"IJ!!$"="="B"B"DE:
 ,,,&&w'<'<T=U=U=Z=Z=\']^334GHHH$$$))++-@AAA&*&6&6&:&:4&@ @
 00++- 1   
 !''00557H&&FJ&GC""228<<<KK!!..s3MM2237=F09	?	> ##22??XXY( Y
 ^7788&22d6G6GG&*&7&7O$$33@Z@Z3[$ $ 0 0 6 6 > > @I**778N8V8V8XYYY!%!1!1!@!@)66Y;S^77Yb 0E4E OOE*224" "A "  779K8LMMM((()..00&--/, ((D$$333P 	"">**77	BBB #5	&8 8 00++-)	 1    ((D$$333P 	"">**77	BBB #o 	IA
 !A$$ 5s1v> =* Z N< ! D$$%BCD
 C  >$$%<=>9 !9$$ 6/9+rF
 11+> ((D$$333P  D$$%BCD 	"">**77	BBB  >$$%<=> #1 ! D$$%BCD
 C  >$$%<=> ((D$$333P  D$$%BCD 	"">**77	BBB  >$$%<=> #s  A9^"<A^"S^"$!^"S
^"S /S0S 4^"TA^"+T,A^"=1[) /C[) ?T ![) "[) 0[) 	A[) T[) ([) >[) ^"!T =^"U -U.U 2^"7U3 <U0=U3 [) Z[) ^"0Z ^"[ <Z>=[ ^"^"S T# T	^"	T^"^"[) [) !U>^"U^"U !U-)^",U--^"0U3 3Z	AZ[) ^"%X ^"!X&#^"%X&&^";Y! YY! ^"!!Z^"Z^"Z[) !Z;7^":Z;;^">[ ![&"^"%[&&^")^<\^!\=:^<\==^]70]31]76^7!^^^^^"c          
     ,    V ^8  d   QhRRRRRRRRR	R
/# rl   r   rN   r   r  rK  r-   r'  rQ  rm   rn   rZ   )ro   s   "rc   rp   r     s>       $ 2	
 & ! 
rb   c          	     	  "   \         P                  ! R V P                  P                  R7      ;_uu_ 4       pVP	                  \
        P                  VP                  4       VP                  ;p'       d!   VP	                  \
        P                  V4       \        P                  ! 4       Vn        V P                  VVVVR7      G Rj  xL
  RRR4       R#  L  + '       g   i     R# ; i5i)r  r  r  N)r%   r  r   r  r  r$   r  r  r  r  rV  rw  r  _realtime_generation_task_impl)r|   r   r   rK  r'  r  r  s   &$$$$  rc   r!  'AgentActivity._realtime_generation_task  s      ))$--"B"B
 
&&{'E'E}GcGcd)???y?**;+P+PR[\0<0H0H0JM-55++-)	 6   
 

 
 
s/   5C-BCC	C
C-CC*	$	C-c          
     ,    V ^8  d   QhRRRRRRRRR	R
/# r  rZ   )ro   s   "rc   rp   r     sE     p p $p 2	p
 &p !p 
prb   c               	!  a aaaa(a)a*a+a,a-a.a/a0a1a2a3a4a5a6a7"   \         P                  ! SP                  R 7      pVP                  \        P
                  SP                  4       S P                  P                  pV'       d@   VP                  P                  4       '       d    \        WVP                  P                  4       S P                  f   Q R4       h\        S P                  \        P                   4      '       g   Q R4       hVP#                  \        P$                  R\        P&                  S P                  P(                  \        P*                  S P                  P,                  /4       S P.                  e,   SP0                  '       d   VS P.                  SP0                  &   S P                  P2                  P4                  '       d!   S P                  P2                  P6                  MRo+S P                  P2                  P8                  '       d!   S P                  P2                  P:                  MRo7\        P<                  ! S P>                  4      p\@        PB                  ! SPE                  4       4      \@        PB                  ! S PF                  PI                  4       4      .pSPJ                  '       d>   VPM                  \@        PB                  ! S PN                  PI                  4       4      4       SPQ                  V4      G Rj  xL
  SPS                  4        SPT                  '       dI   \V        PX                  PZ                  ! V!  G Rj  xL
  VP                  \        P\                  R4       R# Ro3Ro4Ro2R=R V VV2V33R lllo). o5. o6Ro1\^         ! R	 R
4      4       o(. o0R V(V)V+VV1V VV5V6V73
R llo*\V        P`                  ! \b        R7      R V*VV0V3R ll4       p	\@        Pd                  ! V	! 4       RR7      p
S5PM                  V
4       \V        PX                  Pf                  Pi                  SPj                  ^4      pVw  po-S6PM                  V4       . o.R V-V.3R llpS5PM                  \@        Pd                  ! V! 4       RR7      4       R V V3R llpR V3R llp\m        S P                  SVSPn                  VVVR7      w  ppSPQ                  . S5O4      G Rj  xL
  VP                  \        P\                  SPT                  4       TP                  \        Pp                  \r        Pt                  ! S. Uu. uF  pVPw                  RR0R7      NK  	  up4      4       V
G Rj  xL
  S+e   S P                  Py                  R4       S Pz                  '       d0   S Pz                  P}                  \~        P~                  ! 4       R7       S P                  '       d   S P                  4        VP                  \        P\                  SPT                  4       \~        P~                  ! 4       o4R V2V3V43R  llpSPT                  '       gY   S1'       dQ   \        ;QJ d    R! S0 4       F  '       g   K   RM	  RM! R! S0 4       4      '       d   \b        P                  ! R"4       . pRpS0 EF  pVP                  R#8X  d   RpK  VP                  R$8H  pVP                  '       d   VP                  P                  MR%pV'       d   VP                  e   VP                  pV'       d   S P                  P                  P                  '       dl   VP                  P                  G Rj  xL
 pS P                  P                  VP                  P                  V\        VP                  R&,          4      VR'7       V'       g   EK  VPM                  V4       V! VP                  P                  VVR(7      pS P                  P                  P                  V4       SP                  V.4       S P                  P                  V4       EK  	  V'       d0   VP                  \        P                  R)P                  V4      4       SPT                  '       dg   V'       d_   S P                  P                  P                  '       d9    S P                  P                  S P                  P                  4      G Rj  xL
  S0 Fc  pVP                  f   K  VP                  P                  P                  4       '       d   K?  VP                  P                  P                  4        Ke  	  S6 F  pVP                  4       G Rj  xL
  K  	  SP                  4        SPT                  '       d*   \V        PX                  P[                  V4      G Rj  xL
  R# VP                  P                  V 3R- l4       S P                  P                  S4        VG Rj  xL
  S P                  P                  S4       \        VP2                  4      ^ 8  Ed   S;P                  ^,          ung        . pRp\        . . R.7      pRp Rp!VP2                   EF  p"VP                  PM                  V"P                  4       VP                  PM                  V"P                  4       V"P                  e   VPM                  V"P                  4       V"P                  '       d
   RpRVnn        S P                  P                  P                  V"P                  4       S P                  P                  V"P                  .4       V e'   V"P                  e   \b        P                  ! R/4       Rp!V"P                  p EK   	  V '       d   V!'       g   RVnr        S P                  P                  R0V4       S P                  p#VP                  '       d.   V '       d&   V!'       g   S P                  P                  V 4       Rp#\        V4      ^ 8  Ed   S P                  '       g   S P                  '       dy   S P                  '       dG   S P                  P                  4       '       g'   S P                  SJd   S P                  G Rj  xL
  K|  \@        P                  ! ^ 4      G Rj  xL
  K  Ro,S P                  P                  P                  '       d   VP                  '       d   S P                  f   S P                  P                  ;p$e   V$P                  4       '       gx   \@        P                  ! 4       P                  4       o,S,S nz        S P                  P                  o/R1 V,V/V 3R2 llp%\@        Pd                  ! V%! 4       4      p&V$P                  V&4       S P                  EP                   EP                  4       p'V'EP                  EP                  V4        S P                  P                  V'4      G Rj  xL
  VP                  '       d   S P                  P                  P                  '       g   S P                  EP                  4        S EP                  S EP                  SE\        V#'       g   SPn                  R48X  d   R4MR5R67      RR77      SR8R97       S EP                  SE\        EP                  RR:7       R# S P                  P                  P                  '       dO   VP                  '       g;   V'       d1   \b        P                  ! R;S P                  P                   R<24       R# R# R# R# R#  ELb EL E
Lu upi  E
L
 EL EL  \        P                   d/   p\b        P                  ! R*R+\        T4      /R,7        Rp?ELRp?ii ; i ELI EL EL  S P                  P                  S4       i ; i ELC EL& EL  \        P                   dr   p\b        P                  ! R3R+\        T4      /R,7       S,e@   S,P                  4       '       g*   S P                  S,J d   RS nz        S,EP	                  R4        Rp?ELPRp?ii ; i5i)>r  Nr  zllm is not a realtime modelchatTc               $    V ^8  d   QhRRRRRR/# )rl   r$  r  r  _AudioOutput | Nonerm   rn   rZ   )ro   s   "rc   rp   BAgentActivity._realtime_generation_task_impl.<locals>.__annotate__  s$     	6 	6=	6J]	6	6rb   c                  < Se   R#  V P                  4       ;'       g    \        P                  ! 4       oV'       d   VP                  e   VP                  MSoSP                  P                  RSSP                  R7       SP                  '       d   SP                  P                  SR7       SP                  '       d   SP                  4        R# R#   \         d     R# i ; ir  r  r  s   &&rc   r  EAgentActivity._realtime_generation_task_impl.<locals>._on_first_frame  s     #.&)jjl&A&Adiik# !Y%D%D%P 33, & MM--.*>> . 
 &&&''@@L_@`(((335 ) ! s   C C C C%$C%Fc                  h    ] tR tRt$ R]R&   RtR]R&   RtR]R&   R	tR
]R&   RtR]R&   Rt	R]R&   Rt
R# )@AgentActivity._realtime_generation_task_impl.<locals>._MsgOutputi8  r   r  Nz_TextOutput | Noner  r  r  skippedz%Literal['full', 'partial', 'skipped']playedr  r   playback_positionrQ  r  rZ   )r\   r]   r^   r_   r`   r  r  r  r  r  ra   rZ   rb   rc   
_MsgOutputr  8  s?    ""+/H(/-1I*1<EF9E'*u*26#Z6rb   r  c                    V ^8  d   QhRRRR/# )rl   r  r   rm   r  rZ   )ro   s   "rc   rp   r  C  s#     D	@ D	@,= D	@* D	@rb   c           	     v  <
"   \        SP                  \        P                  4      '       g   Q hS! V R7      pV P                  G Rj  xL
 pRpRV9  d   SP                  '       d   SP                  P
                  P                  '       d   \        P                  ! R4       \        P                  P                  P                  V P                  ^4      pVw  r5SP                  V4       MV P                  P                  4       p. pRp SEe2   RpVEe2   \!        SP"                  P$                  TSSP&                  P(                  P*                  SP                  '       d   SP                  P,                  MRSP                  '       d   SP                  P.                  MRR7      w  rSP0                  '       dm   SP                  ;p'       dY   VP
                  P2                  '       g   VP
                  P4                  '       g!   V
P6                  G Rj  xL
 ;p'       d   TpRoSP                  V	4       V
P8                  pMRV9   dP   SP"                  P;                  V P<                  S4      p\>        P@                  ! V4      '       d   VG Rj  xL
 MTpMSSP                  P
                  P                  '       d   \        PB                  ! R4       M\        P                  ! R4       VeM   \E        SVR	7      w  rVP                  V4       VPF                  PI                  \K        SVR
7      4       Wqn&        SP"                  PO                  VS4      p\>        P@                  ! V4      '       d   VG Rj  xL
 MTpRpVe)   \Q        SVR7      w  ppVP                  V4       VVn)        Vf    Ve   VPT                  PI                  S4       RpSPW                  \Y        V4      4      G Rj  xL
  SPZ                  '       gC   Se?   \>        P\                  ! SP_                  4       4      pSPW                  V.4      G Rj  xL
  SPZ                  '       Ed   \        P                  P`                  ! V!  G Rj  xL
  Se   SPc                  4        SP_                  4       G Rj  xL
 pVej   VPF                  Pe                  4       '       dJ   VPF                  Pg                  4       '       g*   RVn4        VPj                  Vn5        VPl                  Vn6        MVe   VPn                  '       d   RVn4        T\        P                  P`                  ! V!  G Rj  xL
  # SeA   Vf   Q hVPq                  4       pRVn4        VPj                  Vn5        VPl                  Vn6        MVe   VPn                  '       d   RVn4        T\        P                  P`                  ! V!  G Rj  xL
  #  EL EL EL_ ELz EL EL EL ELV L L  \        P                  P`                  ! T!  G Rj  xL 
  i ; i5i)zForward audio/text for one message, then wait for its playout.

Returns when the message has fully played, been interrupted, or
never started (e.g. interrupted before the first frame).
)r  Nr  zJtext response received from realtime API, falling back to use a TTS model.r  TzText message received from Realtime API with audio modality. This usually happens when text chat context is synced to the API. Try to add a TTS model as fallback or use text modality with TTS instead.zGaudio output is enabled but neither tts nor realtime audio is availabler  )r  r  r   full)9ry   r   r   
modalitiesr   r   r  r   r   r   r+  r  r  text_streamru   	__aiter__rI   r   r  r   r   r  r  r  r#  r  r   r  r  realtime_audio_output_nodeaudio_streamrw   r  r{   rE   r  ry  r   r  r  rG   r  r  r  r9  r6  r  r  r,  r  rh  r  r  r  r  rB  r  )r  entrymsg_modalitiesr  r  tr_text_inputforward_tasksr  realtime_audio_resultr   r  r   r  realtime_audiorq  r  r  r  	text_taskplayout_futr  r  r  r  rK  rn  r|   r   r}   teesr  s   &                    rc   _process_one_messageJAgentActivity._realtime_generation_task_impl.<locals>._process_one_messageC  s     dhh(9(9::::3'E#&>>1N8<Nn,88((555NNd ii))--cooqA03-C  # 9 9 ;57M-1Ij@+RV)%11F!%!5!5"0+9,0MM,A,A,U,U48HHH$((..$:>(((TXX%6%62. !;;;(, # 0 0 C C C'*'7'7'A'A'A6B6R6R0R!R!R,7M7;4X.0<0E0E- N2)-)O)O,,n*
  '22>BB #100!/ .
 ..;;;h e -82J)5'<3/ &,,\:!11CC#OyI +4++88W292E2Eg2N2NwT[/3!-*A$/-+'Ix "((3%-EN$)=++==oN:>#;;D<OPPP$000\5M")"7"78U8U8W"XK'??NNN ,,,))33]CCC#/$113,8,I,I,K&K%1 ) 9 9 > > @ @$-$=$=$G$G$I$I+4EL6A6S6SE3<G<_<_E9!-(---'0  ii//???  +&222"-"4"4"6K#)EL.9.K.KE+4?4W4WE1)hmmm#)ELii//???s 2F 1S 16 "/ Q O D 'L0 @eii//???sK  AX9W1	X9(%X9A>X9BX AX X 0X X W4X (A*X X W7,X B4X ;X  W:A6X 7W=8X =X X X #!X X+X 0X1'X X 9?X 9X !X9"X	#X9(AX X 
!X9+X,X94X 7X :X =X  X X X 	X9X9"X6/X20X66X9r   c                   V ^8  d   QhRR/# rk   rZ   )ro   s   "rc   rp   r    s     		 		 		rb   c                    <"   SP                     R j  xL
  p SP                  '       d    R # S! V 4      G R j  xL
 pSP                  V4       VP                  R8X  g   KS   R #  LQ L-DTR # 5i)Nr   )message_streamr6  ru   r  )r  r  r  r   message_outputsr   s     rc   _process_messagesGAgentActivity._realtime_generation_task_impl.<locals>._process_messages  se     *99  c ,,, 2377&&u-<<9,
 8 :s;   A-A*A&A*"A-A(#A-#A-&A*(A-*A-z2AgentActivity.realtime_generation.process_messagesr]  c                   V ^8  d   QhRR/# rk   rZ   )ro   s   "rc   rp   r    s     	+ 	+ 	+rb   c                 T   <"   S  R j  xL
  p SP                  V 4       K   LDR # 5ir   )ru   )fncfnc_stream_for_tracingrK  s    rc   _read_fnc_streamFAgentActivity._realtime_generation_task_impl.<locals>._read_fnc_stream  s+     3 + +c%%c*+3s   (%#%(%(z1AgentActivity.realtime_generation.read_fnc_streamc                    V ^8  d   QhRRRR/# r3  rZ   )ro   s   "rc   rp   r    s     	8 	81A 	8d 	8rb   c                   < SP                  V .4       SP                  P                  P                  V 4       SP                  P                  V .4       R # r   )r  r   r/  r  r   r[  )r4  r|   r   s   &rc   r6  PAgentActivity._realtime_generation_task_impl.<locals>._tool_execution_started_cb  s?    %%xj1KK!!..x8MM++XJ7rb   c                    V ^8  d   QhRRRR/# r9  rZ   )ro   s   "rc   rp   r    r;  rb   c                h   < V P                   '       d   SP                  V P                   .4       R # R # r   r=  r?  s   &rc   r@  RAgentActivity._realtime_generation_task_impl.<locals>._tool_execution_completed_cb  rB  rb   rC  r  r   )excluder  r/  c               (    V ^8  d   QhRRRRRRRR/# )rl   
message_idr   r
  r6  r   rm   r   rZ   )ro   s   "rc   rp   r    s,     	 		-0	?C		rb   c                   < / pS'       d#   S'       d   SVR &   SVR&   Se   SS,
          VR&   \         P                  ! RV.V VR7      pSe   SVn        W4n        V# )rn  r  r  r  )r  r  r.  r6  )r   r  r   r  )r  r
  r6  r  r  r  rn  r  s   &&&  rc   _create_assistant_messageOAgentActivity._realtime_generation_task_impl.<locals>._create_assistant_message  s{     46"':;N!"78;N!"78(4+.CC &&89 // '('	C #.!4+KJrb   c              3     "   T FM  pVP                   R 8g  ;'       d2    VP                  RJ;'       d    VP                  P                  '       * x  KO  	  R# 5i)r  N)r  r  rB  )ri  r  s   & rc   rj  ?AgentActivity._realtime_generation_task_impl.<locals>.<genexpr>3  sG      (A I%XX!**D*@XXEXX(s   AA$ArI  r  r   r  i  )r  r  audio_end_msaudio_transcript)r  r
  r6  
z;failed to sync chat context to remove never-played messagesr{   ru  c                :   < SP                   P                  R 4      # )r#  )r   r6  rt  s   &rc   rb  >AgentActivity._realtime_generation_task_impl.<locals>.<lambda>|  s    dmm77
Crb   rJ  z;expected to receive only one Agent from the tool executionsrM  c                   V ^8  d   QhRR/# rk   rZ   )ro   s   "rc   rp   r    s     
I 
IT 
Irb   c                 L  <"    \         P                  ! \         P                  ! S 4      R 4      G Rj  xL
  SP                  S J d
   RSn        R# R#  L  \         P                   d    \        P
                  ! RS4        LKi ; i  SP                  S J d	   RSn        i i ; i5i)g      @Nz6timed out waiting for realtime auto tool reply from %s)rw   wait_forr	  TimeoutErrorr   r   r   )auto_reply_fut	llm_labelr|   s   rc   _wait_for_auto_tool_replyOAgentActivity._realtime_generation_task_impl.<locals>._wait_for_auto_tool_reply  s     	I")"2"27>>.3QSV"WWW  $@@NRDH A  S X&33 "NN X )  $@@NRDH A  SsC   B$.A AA B$A ,BB BB B!!B$zJfailed to update chat context before generating the function calls resultsr]  rN  rJ  )r   rK  r  ra  rL  r(  z*Tool reply cannot be prevented when using z#, it generates reply automatically.r   )r   r  r  r  r$   r  r.  r   rQ  rR  rS  r+   rT  r   ry   r   r   set_attributesATTR_GEN_AI_OPERATION_NAMEATTR_GEN_AI_PROVIDER_NAMEr  ATTR_GEN_AI_REQUEST_MODELr  r   response_idr   rO  r  r  r  r;  r   rw   r  r  r   r  r   ru   r   r  r  r6  r   r+  r,  r  r   r  r   rx  r  r  rD  rH   r   ATTR_RESPONSE_FUNCTION_CALLSjsondumps
model_dumpr6  r   r7  r  r   r8  anyr   r  r  rB  r  r   message_truncationr  r  truncater  r  r  r   r/  r  r  r  r  joinr  r>  r  r   r  r  rh  rL  rv   r]  first_tool_started_futry  r   r^  r_  r  rb  r:   rK  r4  rL  r>  rc  rd  r[  re  r{   rf  rR  r   rg  r   r   r  auto_tool_reply_generationr   r"  get_event_loopcreate_future_labelr#  r   r?  r  rh  r  r  r}  rS  r-   rV  rN   rW  )8r|   r   r   rK  r'  r  ri  rr  r  r  process_msg_taskfnc_tee
fnc_streamr  r6  r@  rr  rs  r  r  trace_text_partsany_skippedr  msg_interruptedr
  r  chat_msgr  r  rw  generate_tool_replyrz  rx  ry  r{  r|  r%  r  ra  r   r  r  r  r  r  r  rK  r  r  rn  r  rn  r  r}   r  r  s8   fddd$                                   @@@@@@@@@@@@@@@@rc   r  ,AgentActivity._realtime_generation_task_impl  s     --m6W6WX"";#=#=}?O?OP--((w||//11'll6T6TU+J-JJ+$((C$5$566U8UU6##6655txx7H7H55txx~~	
 +0I0I0I>JD  !:!:;59]]5I5I5W5W5Wt}}++11]a }}##999 MM  .. 	
 ??4::. !!-"G"G"IJ!!$"="="B"B"DE:
 ,,,&&w'<'<T=U=U=Z=Z=\']^334GHHH**,$$$))++-@AAA&&{'J'JDQ,0,0.2	6 	6@ *,35#( 
 
	7 	7 
	7 -/D	@ D	@ D	@L 
		V	,		 		 
-		 #..&Z
 	%& ))%%))-*G*GK-4*
*G13	+ 	+ 	 "H	
	8 	8
	> 	> !8MM'&22&&@(D!
+ 33HeH==="";#F#FHaHab""44JJR`aR`3/EFR`ab	
 #MM--k:&&&''>>15 ?  (((<<>&&33]5N5N #iik	 	4 )))( ( (  
 NNg
 ')$E||y("#lli7O49NNNU^^00N5#@#@#L!&!>!>488#8#8#K#K#K',yy';';!;  ))$yy33-!$U%<%<t%C!D%3	 *  "##N30 99//-+H
 KK!!..x8%%xj1MM228<= %@ &&{'E'EtyyQaGbc
 $$$9N9N9c9c9c&&66t{{7L7LMMM %E*5??3R3R3W3W3Y3Y//668 % C**, ++-$$$))++H555 	**<<C	
 	!!%%m4	=NN%%--m< {!!"Q&$$)$<>O(-8!O ,0N!&!,!3!3..55m6L6LM55<<]=W=WX --9#**=+E+EF$333.2+:>7 KK))66}7Q7QRMM33]5O5O4PQ!--2J2J2VLLU *.&!.!9!9+ "4. &8481MM8/J--H000^L^**>:?#a' ***dnnn,,, $ 4 4 9 9 ; ; 00E"2222%mmA... ?CHH))DDD'77799A&*mm&E&EER%NN,,%,%;%;%=%K%K%MN8FD5 $I
I 
I #../H/JKD++D1++4499;%%o6
8**::8DDD  ///--HHH  **,((--&3'4  (>+E+E+O )/!'( $( . 
 #07 )  %%!<#F#Fd &  %%@@@'777'@@QQtu ( 8 A{ 'G 	I Bl 	>
 b 	F "<: N$$ Q"CF+   6 %%--m<r 3.D E(( 8NNd&A/ &1.:M:M:O:O<<N@DD=&11$78s  B	AB C-AB>ABAABB%AB;AAB}.%AB3!AB}1FAB(}4)AAB}7"AB2}<34AB(A AB)A+ABAB
AB(AB<ABAAB-AB!AB/%ABAB.}?/AABBABA ABAB#%AB
2~ <~=~ AB'ABA AB)AB-"ABA AB  C8ABB AB5AB=A AB>ABAB?ABAB AB2ABAB142AB7-AB AB=ABB:AB= ):*= .AB %AB&B5ABAB.AB69AB1AB4AB7AB?AB~ #=ABABAB 11AB7AB:= =AB@<AA>A)AA>A8ABA>ABBABc               $    V ^8  d   QhRRRRRR/# )rl   r   rN   r   r   rm   rn   rZ   )ro   s   "rc   rp   r     s"      < % TX rb   c                    V P                   '       d-   V P                   P                  VJ d   W P                   n        R# \        VV P                  P
                  VR7      V n         R# )u   Record that ``speech_handle`` is paused.

If already paused for this handle, only ``timeout`` is updated — the
``agent_state`` captured at first pause is preserved, so the resume
path restores the correct state even across multiple calls.
)r   r   r   N)r   r   r   r   r   r   )r|   r   r   s   &&&rc   r5  #AgentActivity._update_paused_speech  sO     4#6#6#=#=#N*1'"3$ MM55#Drb   c                   V ^8  d   QhRR/# r   rZ   )ro   s   "rc   rp   r     s     
 
 
rb   c                	@   V P                   P                  P                  p\        VR ,          ;'       df    VR,          RJ;'       dS    V P                   P                  P
                  ;'       d+    V P                   P                  P
                  P                  4      # )resume_false_interruptionr.  N)r   r   r   r   r   r  r  )r|   r9  s   & rc   r4  AgentActivity._pause_enabled  s    #}}44AA !<= 5 5$%AB$N5 5$$**5 5 $$**44	
 	
rb   c                    V ^8  d   QhRRRR/# )rl   r   r   rm   rn   rZ   )ro   s   "rc   rp   r   %  s     (
 (
u (
 (
rb   c                	   a a S P                   e   S P                   P                  4        R V V3R llpS P                  P                  P	                  SV4      S n         R # )Nc                   V ^8  d   QhRR/# rk   rZ   )ro   s   "rc   rp   CAgentActivity._start_false_interruption_timer.<locals>.__annotate__)  s      	2  	2  	2rb   c                 (  < SP                   e7   SP                  '       d.   SP                  SP                   P                  Jd
   R Sn         R # Rp SP                  P                  P
                  R,          '       Ed`   SP                  P                  P                  ;p'       Ed7   VP                  '       Ed$   SP                   P                  P                  4       '       g   SP                  P                  SP                   P                  SP                   P                  P                  R7       SP                  '       dK   SP                   P                  R8X  d0   SP                  P                  \        P                  ! 4       R7       SP                   '       d   SP#                  4        VP%                  4        Rp \&        P(                  ! RRS/R	7       SP                  P+                  R
\-        V R7      4       R Sn         R Sn        R # )NFr  )rV  r1  r-  Tz resumed false interrupted speechr   ru  agent_false_interruption)resumed)r   r   r   r   r   r   r   r  r  rh  r6  r   r  r   r  r  r   r  r  r   r  rR  r6   r   )r  r  r|   r   s     rc   _on_false_interruptionMAgentActivity._start_false_interruption_timer.<locals>._on_false_interruption)  s   ""*$$$)=)=TEXEXE_E_)_ '+#G%%223NOO%)]]%9%9%?%??\? ***++22779911''33!%!4!4!;!;!O!O 2  ***t/B/B/N/NR\/\++DDPTPYPYP[D\,,,779##%?	SZG[\MM*,GPW,X #'D-1D*rb   )r   rL  r   _loop
call_later)r|   r   r  s   ff rc   rH  -AgentActivity._start_false_interruption_timer%  sQ    ))5**113 	2  	2D *.)<)<)G)G+*
&rb   r  c               $    V ^8  d   QhRRRRRR/# )rl   r"  r}  r  r   rm   rn   rZ   )ro   s   "rc   rp   r   O  s$     $0 $01$0HL$0	$0rb   c               	  "   Ve    VG R j  xL
  V P                  e"   V P                  P	                  4        R V n        V P
                  '       g   R # V'       d   V P
                  P                  P                  '       g   V P
                  P                  P                  '       dw   V P
                  P                  P                  4        V P
                  P                  P                  '       d-   V P
                  P                  P                  4       G R j  xL
  R V n        V P                  P                  P                  R,          '       dY   V P                  P                  P                   '       d1   V P                  P                  P                   P#                  4        R # R # R #  EL  \          d    \        P                  ! R4        ELi ; i L5i)Nz3previous _cancel_speech_pause task failed, ignoringr  )rz   r   r  r   rL  r   r   r6  r   r  r  r  r   r   r   r   r  r  )r|   r"  r  s   &&$rc   r$  "AgentActivity._cancel_speech_pauseO  sd     T ))5**113-1D*""" ''..:::##**>>>&&002 ""))666))00EEGGG" MM!!../JKK$$***MM  &&--/ + L9  T RS	T. Hso   GF0 F-F0 A G	G%G%G)A	G3'GG7G%G94G-F0 0!GGGGc                   V ^8  d   QhRR/# rk   rZ   )ro   s   "rc   rp   r   u  s     A A Arb   c                   a  S P                   '       d9   S P                   P                  '       d   R V 3R llpVS P                   n        R# RS n        R# )z@Disable VAD interruption after the backchannel boundary expires.c                   V ^8  d   QhRR/# rk   rZ   )ro   s   "rc   rp   BAgentActivity._disable_vad_interruption_soon.<locals>.__annotate__y  s     I It Irb   c                    < S P                   P                  R 8X  d4   S P                  '       d    \        P                  ! R4       RS n        R# R# R# )r1  zbackchannel boundary expiredFN)r   r   r   r   r   r   s   rc   _disable_vad_interruptionOAgentActivity._disable_vad_interruption_soon.<locals>._disable_vad_interruptiony  sC     MM--;DDDLL!?@CHD@ E <rb   FN)r   backchannel_boundary_activebackchannel_boundary_callbackr   )r|   r  s   f rc   r  ,AgentActivity._disable_vad_interruption_soonu  sF    """t'>'>'Z'Z'ZI I E^D##A;@D8rb   c                   V ^8  d   QhRR/# rk   rZ   )ro   s   "rc   rp   r     s     
 
 
rb   c                	    V P                   '       d   V P                   P                  4        V P                  V n        R # r   )r   _cancel_backchannel_boundaryr   r   r   s   &rc   r8  5AgentActivity._restore_interruption_by_audio_activity  s3    """##@@B @@ 	4rb   c                    V ^8  d   QhRRRR/# )rl   r{   z+inference.InterruptionDetectionError | Nonerm   rn   rZ   )ro   s   "rc   rp   r     s     
 
@
	
rb   c                x   V P                   '       g   R# RV n         V P                  4        \        V P                  \        P
                  4      '       ds   V P                  P                  RV P                  4       V P                  P                  RV P                  4       V P                  P                  RV P                  4       V P                  '       d   V P                  P                  R4       \        P                  ! RRVe   \        VP                  4      MRRVe   VP                   MR/R7       R# )	a0  Degrade gracefully from adaptive interruption to VAD-based interruption.

Called when the adaptive interruption detector encounters an unrecoverable error.
Re-enables audio-activity interruption so VAD events can trigger interruptions,
and flushes any held transcripts that were waiting on the detector.
NFr  r{   r  zaadaptive interruption disabled due to unrecoverable error, falling back to VAD-based interruptionr  ru  )r   r8  ry   r   r   r  r  r  r  r  r   update_interruption_detectionr   r   r   r{   r  )r|   r{   s   &&rc   r  +AgentActivity._fallback_to_vad_interruption  s     333/4,446d1193Y3YZZ''++,?A[A[\''++GT^^D''++,@$B_B_`"""##AA$G5 U->U[[)D(9t	
rb   c                    V ^8  d   QhRRRR/# )rl   r   r2   rm   zllm.MetricsReportrZ   )ro   s   "rc   rp   r     s      > FW rb   c                	x   / pV P                   '       d2   R V P                   P                  RV P                   P                  /VR&   VP                  e   VP                  VR&   VP                  e   VP                  VR&   VP
                  e   VP
                  VR&   VP                  e   VP                  VR&   V# )r  r  stt_metadatarn  r  r  r  )r   r  r  rn  r  r  r  )r|   r   r  s   && rc   rx  ,AgentActivity._init_metrics_from_end_of_turn  s    ,.888dhhnn $(("3"3.N>* ##/484L4LN01##/484L4LN01##/484L4LN01!!-262H2HN./rb   c                   V ^8  d   QhRR/# )rl   rm   zvad.VAD | NonerZ   )ro   s   "rc   rp   r          S S^ Srb   c                	    \        V P                  P                  4      '       d   V P                  P                  # V P                  P                  # r   )r*   r   r   r   r   s   &rc   r   AgentActivity.vad  1    "*4;;??";";t{{RARARRrb   c                   V ^8  d   QhRR/# )rl   rm   z-inference.AdaptiveInterruptionDetector | NonerZ   )ro   s   "rc   rp   r     s     2 21^ 2rb   c                	   V P                   e   V P                   P                  P                  '       dp   V P                   P                  P                  '       dJ   V P                  e<   V P
                  R9  d+   \        V P                  \        P                  4      '       d   \        V P                  P                  4      '       d   V P                  P                  R8X  gA   \        V P                  P                  4      '       d2   V P                  P                  R8X  d   \        P                  ! R4       R # V P                  '       g   R # \        V P                  P                  4      '       d   V P                  P                  R8X  d   R # \        V P                  P                  4      '       d   V P                  P                  R8X  d   R # \        V P                  P                  4      '       gt   \        V P                  P                  4      '       gO   \         P"                  ! 4       '       g4   \         P$                  ! 4       '       g   \        P&                  ! R4       R #  \(        P*                  ! 4       pV#   \,         d/   p\        P                  ! RR\/        T4      /R7        R p?R # R p?ii ; i)	Nadaptivezointerruption_detection is provided, but it's not compatible with the current configuration and will be disabledr   z?adaptive interruption is disabled by default in production modez-failed to create AdaptiveInterruptionDetectorr{   ru  r   )r   r   r  r   r   r   ry   r   r   r*   r   r  r   r   r   r   r   	is_hostedis_dev_moder   r   r  r   r   )r|   detectorr  s   &  rc   r   -AgentActivity._resolve_interruption_detection  s   HH %%888%%///$$$,FFtxx):):;; ;;<<KK66*D==>>MM88JF F ''' T[[778822e;T]]99::44= ;;<<T]]AABBOO%%%%''KKYZ	 ==?H
 	  	NNJSZ\_`a\bRcd	s   -J J=#J88J=c                   V ^8  d   QhRR/# )rl   rm   zstt.STT | NonerZ   )ro   s   "rc   rp   r     r"  rb   c                	    \        V P                  P                  4      '       d   V P                  P                  # V P                  P                  # r   )r*   r   r   r   r   s   &rc   r   AgentActivity.stt  r%  rb   c                   V ^8  d   QhRR/# )rl   rm   z"llm.LLM | llm.RealtimeModel | NonerZ   )ro   s   "rc   rp   r     s     S S7 Srb   c                	    \        V P                  P                  4      '       d   V P                  P                  # V P                  P                  # r   )r*   r   r   r   r   s   &rc   r   AgentActivity.llm  r%  rb   c                   V ^8  d   QhRR/# )rl   rm   ztts.TTS | NonerZ   )ro   s   "rc   rp   r     r"  rb   c                	    \        V P                  P                  4      '       d   V P                  P                  # V P                  P                  # r   )r*   r   r   r   r   s   &rc   r   AgentActivity.tts  r%  rb   )'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   r   r   r   r   r   r   r   r   r   r   r   r   r   )Fr   )er\   r]   r^   r_   r   r   propertyr   rX   rY   r   r   r   r  r
  r  r  r  r   r  r#  rK   r=  r>  r'   rK  r}  r  r  r  r%   r  r  r   r  r  rs  r  r  rv   r7  r>  rG  rL   ry  r  r  r  r*  r  r  r  rV  r   r  r   r  r  r  r  r  r  r  r  r  r  r:  r  r  rP  rV  ra  re  rq  rz  ry  r  r  r  rU  rT  r  rn  r  rS  r!  r  r5  r4  rH  r$  r  r8  r  rx  r   r   r   r   r   ra   rZ   rb   rc   rS   rS      s   WNrIV ' '     4 4 
 
 
 
 	
 	
 2 2 2 2     $ $ I I
 
 
 . .$P8SW4 :C4 <E	4
 @I4 4=4 4=4l3 .2	3
  3j/!$ /!b?BD,SW D,L !!"89&6:& :&P9<@9$

4 # .2	#J:.x)*O:/L <E	L
 1:L !%L\r <Er 8A	r
 8Ar 3<r (1r 1:r !%r '<rh/
,*$# #J+
Z_
((> (? )?B:(,:DH:>
,>'65$
8#KJI1>BI1Z"!HN2+4
>:"
RV "
H/
b,\ (j\ )j\X
 ((2 )(2V$
? ( )0M/^ ( /3 37 <@ `d )>}? /3}? 37}? <@}? `d}?~ (n>
 6:n> "&n> $(n> !n> 15n> )n>` ( $( ).p $(pd 
(
T$0OS$0 $0LA"

B, S S2h S S S S S Srb   )z
__future__r   rw   contextvarsr  r  r  collections.abcr   r   r   dataclassesr   	functoolsr   typingr	   r
   r   opentelemetryr   rV  r   livekitr   livekit.agents.llm.realtimer   livekit.agents.metrics.baser   r  r   r   r   r   r   r   llm.chat_contextr   llm.tool_contextr   r   r   logr   r  r   r   r   r    r!   r"   	telemetryr#   r$   r%   r  tokenize.basicr&   typesr'   r(   r)   
utils.miscr*   _utilsr+   rY   r,   r-   r.   r/   audio_recognitionr0   r1   r2   r3   r4   r   r5   eventsr6   r7   r8   r9   r:   r;   r<   r=   r>   r?   
generationr@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   r   rL   rM   rN   turnrO   rP   rQ   agent_sessionrR   
ContextVarru  rv  rW   r  rf   r   r   rS   rZ   rb   rc   <module>rO     s   "      > > !  . . 8  9 0 3 3 + 
   P O ( 8 8 ! /   ,      M L 7+ '11/BCTU %00@AWX    
 !++N;<VW  Z Z Z(      z9S$ z9Srb   