
    /jC                        S SK Jr  S SKrS SKJrJr  S SKJrJrJ	r	J
r
JrJr  S SKJrJrJrJrJr  S SKJr  SSKJrJrJr  SS	KJr  SS
KJrJrJrJrJ r J!r!J"r"J#r#  SSK$J%r%  SSK&J'r'J(r(  SSK)J*r*J+r+  SSK,J-r-J.r.  SSK/J0r0  \(       a  SSK1J2r2  \" S5      r3 " S S\
\3   5      r4\S   r5\S   r6\S   r7 " S S\5      r8 " S S\5      r9 " S S\5      r: " S S\5      r; " S  S!\5      r< " S" S#\5      r= " S$ S%\5      r> " S& S'\5      r? " S( S)\5      r@ " S* S+\5      rA " S, S-\5      rB\ " S. S/\C\5      5       rD " S0 S1\5      rE\\:\8-  \9-  \;-  \<-  \=-  \?-  \@-  \A-  \B-  \E-  \-  \" S2S394   rFg)4    )annotationsN)Enumunique)TYPE_CHECKING	AnnotatedAnyGenericLiteralTypeVar)	BaseModel
ConfigDictFieldPrivateAttrmodel_validator)Self   )AdaptiveInterruptionDetectorInterruptionDetectionErrorOverlappingSpeechEvent)LanguageCode)LLMAgentHandoffChatMessageFunctionCallFunctionCallOutputLLMErrorRealtimeModelRealtimeModelError)logger)AgentMetricsAgentSessionUsage)STTSTTError)TTSTTSError   )SpeechHandle)AgentSession
Userdata_Tc                      \ rS rSr        SS jr\SS j5       r\SS j5       r\SS j5       r\SS j5       r	SS jr
SS jrS	rg
)
RunContext'   c               P    Xl         X l        X0l        UR                  S-
  U l        g )Nr&   )_session_speech_handle_function_call	num_steps_initial_step_idx)selfsessionspeech_handlefunction_calls       L/app/agent/.venv/lib/python3.13/site-packages/livekit/agents/voice/events.py__init__RunContext.__init__)   s(      ++!.!8!81!<    c                    U R                   $ N)r.   r3   s    r7   r4   RunContext.session6   s    }}r:   c                    U R                   $ r<   )r/   r=   s    r7   r5   RunContext.speech_handle:       """r:   c                    U R                   $ r<   )r0   r=   s    r7   r6   RunContext.function_call>   rA   r:   c                .    U R                   R                  $ r<   )r4   userdatar=   s    r7   rE   RunContext.userdataB   s    ||$$$r:   c                &    SU R                   l        g)zDisable interruptions for this FunctionCall.

Delegates to the SpeechHandle.allow_interruptions setter,
which will raise a RuntimeError if the handle is already interrupted.

Raises:
    RuntimeError: If the SpeechHandle is already interrupted.
FN)r5   allow_interruptionsr=   s    r7   disallow_interruptions!RunContext.disallow_interruptionsF   s     27.r:   c                f   #    U R                   R                  U R                  S9I Sh  vN   g N7f)a)  Waits for the speech playout corresponding to this function call step.

Unlike `SpeechHandle.wait_for_playout`, which waits for the full
assistant turn to complete (including all function tools),
this method only waits for the assistant's spoken response prior running
this tool to finish playing.)step_idxN)r5   _wait_for_generationr2   r=   s    r7   wait_for_playoutRunContext.wait_for_playoutQ   s*        55t?U?U5VVVs   '1/1)r0   r2   r.   r/   N)r4   AgentSession[Userdata_T]r5   r'   r6   r   returnNone)rQ   rP   )rQ   r'   )rQ   r   )rQ   r)   rQ   rR   )__name__
__module____qualname____firstlineno__r8   propertyr4   r5   r6   rE   rI   rN   __static_attributes__ r:   r7   r+   r+   '   s    = *= $	=
 $= 
=   # # # # % %	7Wr:   r+   )user_state_changedagent_state_changeduser_input_transcribedconversation_item_addedagent_false_interruptionoverlapping_speechfunction_tools_executedmetrics_collectedsession_usage_updatedspeech_createderrorclose)speaking	listeningaway)initializingidlerh   thinkingrg   c                  b    \ rS rSr% SrS\S'   S\S'   S\S'   \" \R                  S9rS	\S
'   Sr	g)UserStateChangedEventn   r[   zLiteral['user_state_changed']type	UserState	old_state	new_statedefault_factoryfloat
created_atrZ   N
rT   rU   rV   rW   rp   __annotations__r   timerw   rY   rZ   r:   r7   rn   rn   n   s,    *>D
'>dii8J8r:   rn   c                  b    \ rS rSr% SrS\S'   S\S'   S\S'   \" \R                  S9rS	\S
'   Sr	g)AgentStateChangedEventu   r\   zLiteral['agent_state_changed']rp   
AgentStaterr   rs   rt   rv   rw   rZ   Nrx   rZ   r:   r7   r|   r|   u   s,    +@D
(@dii8J8r:   r|   c                  ~    \ rS rSr% SrS\S'   S\S'   S\S'   S	rS
\S'   S	rS\S'   \" \	R                  S9r
S\S'   Srg	)UserInputTranscribedEvent|   r]   z!Literal['user_input_transcribed']rp   str
transcriptboolis_finalN
str | None
speaker_idzLanguageCode | Nonelanguagert   rv   rw   rZ   )rT   rU   rV   rW   rp   ry   r   r   r   rz   rw   rY   rZ   r:   r7   r   r   |   s?    .FD
+FON!J
!$(H!(dii8J8r:   r   c                     ^  \ rS rSr% SrS\S'   S\S'    \" \R                  S9rS\S	'   S
r	S\S'   S
r
S\S'   SU 4S jjrSrU =r$ )AgentFalseInterruptionEvent   r_   z#Literal['agent_false_interruption']rp   r   resumedrt   rv   rw   NzChatMessage | Nonemessager   extra_instructionsc                b   > US;   a  [         R                  " SU S35        [        TU ]  U5      $ )N)r   r   zAgentFalseInterruptionEvent.z1 is deprecated, automatic resume is now supported)r   warningsuper__getattribute__)r3   name	__class__s     r7   r   ,AgentFalseInterruptionEvent.__getattribute__   s7    44NN.tf4ef w'--r:   rZ   )r   r   rQ   r   )rT   rU   rV   rW   rp   ry   r   rz   rw   r   r   r   rY   __classcell__)r   s   @r7   r   r      sK    0JD
-JMCdii8J8 #'G&%)
). .r:   r   c                  \    \ rS rSr% SrSrS\S'   S\S'   \" \R                  S9r	S	\S
'   Sr
g)MetricsCollectedEvent   zxDeprecated: use session_usage_updated for usage tracking.
Per-turn latency metrics are available on ChatMessage.metrics.rb   zLiteral['metrics_collected']rp   r    metricsrt   rv   rw   rZ   N)rT   rU   rV   rW   __doc__rp   ry   r   rz   rw   rY   rZ   r:   r7   r   r      s.    F *=D
&<dii8J8r:   r   c                  X    \ rS rSr% SrS\S'   S\S'   \" \R                  S9rS\S	'   S
r	g)SessionUsageUpdatedEvent   rc   z Literal['session_usage_updated']rp   r!   usagert   rv   rw   rZ   Nrx   rZ   r:   r7   r   r      s&    -DD
*Ddii8J8r:   r   c                  $    \ rS rSr% SrS\S'   Srg)_TypeDiscriminator   unknownzLiteral['unknown']rp   rZ   N)rT   rU   rV   rW   rp   ry   rY   rZ   r:   r7   r   r      s    (D
(r:   r   c                  X    \ rS rSr% SrS\S'   S\S'   \" \R                  S9rS\S	'   S
r	g)ConversationItemAddedEvent   r^   z"Literal['conversation_item_added']rp   z/ChatMessage | AgentHandoff | _TypeDiscriminatoritemrt   rv   rw   rZ   Nrx   rZ   r:   r7   r   r      s&    /HD
,H
99dii8J8r:   r   c                      \ rS rSr% SrS\S'   S\S'   S\S'   \" \R                  S	9rS
\S'   \	" SS9r
S\S'   \	" SS9rS\S'   SS jrSS jrSS jr\SS j5       r\SS j5       r\" SS9SS j5       rSrg)FunctionToolsExecutedEvent   ra   z"Literal['function_tools_executed']rp   zlist[FunctionCall]function_callszlist[FunctionCallOutput | None]function_call_outputsrt   rv   rw   F)defaultr   _reply_required_handoff_requiredc                R    [        [        U R                  U R                  SS95      $ )NF)strict)listzipr   r   r=   s    r7   zipped!FunctionToolsExecutedEvent.zipped   s#    C++T-G-GPUVWWr:   c                    SU l         g NFr   r=   s    r7   cancel_tool_reply,FunctionToolsExecutedEvent.cancel_tool_reply   s
    $r:   c                    SU l         g r   r   r=   s    r7   cancel_agent_handoff/FunctionToolsExecutedEvent.cancel_agent_handoff   s
    !&r:   c                    U R                   $ r<   r   r=   s    r7   has_tool_reply)FunctionToolsExecutedEvent.has_tool_reply   s    ###r:   c                    U R                   $ r<   r   r=   s    r7   has_agent_handoff,FunctionToolsExecutedEvent.has_agent_handoff   s    %%%r:   after)modec                t    [        U R                  5      [        U R                  5      :w  a  [        S5      eU $ )NzBThe number of function_calls and function_call_outputs must match.)lenr   r   
ValueErrorr=   s    r7   verify_lists_length.FunctionToolsExecutedEvent.verify_lists_length   s1    t""#s4+E+E'FFabbr:   )r   r   N)rQ   z4list[tuple[FunctionCall, FunctionCallOutput | None]]rS   )rQ   r   )rQ   r   )rT   rU   rV   rW   rp   ry   r   rz   rw   r   r   r   r   r   r   rX   r   r   r   r   rY   rZ   r:   r7   r   r      s    /HD
,H&&::dii8J8'6OT6)%8t8X%' $ $ & & '" #r:   r   c                      \ rS rSr% \" SS9rSrS\S'   S\S'    S	\S
'    \" SSS9r	S\S'    \" \
R                  S9rS\S'   Srg)SpeechCreatedEvent   Tarbitrary_types_allowedrd   zLiteral['speech_created']rp   r   user_initiatedz Literal['say', 'generate_reply']source.)excluder'   r5   rt   rv   rw   rZ   N)rT   rU   rV   rW   r   model_configrp   ry   r   r5   rz   rw   rY   rZ   r:   r7   r   r      sP    d;L&6D
#6\,,="'T":M<:,dii8J8r:   r   c                  n    \ rS rSr% \" SS9rSrS\S'   S\S'   S\S	'   \" \	R                  S
9r
S\S'   Srg)
ErrorEvent   Tr   re   zLiteral['error']rp   zVLLMError | STTError | TTSError | RealtimeModelError | InterruptionDetectionError | AnyzDLLM | STT | TTS | RealtimeModel | AdaptiveInterruptionDetector | Anyr   rt   rv   rw   rZ   N)rT   rU   rV   rW   r   r   rp   ry   r   rz   rw   rY   rZ   r:   r7   r   r      s6    d;L$D
$aaPPdii8J8r:   r   c                  (    \ rS rSrSrSrSrSrSrSr	g)	CloseReason   re   job_shutdownparticipant_disconnectedr   task_completedrZ   N)
rT   rU   rV   rW   ERRORJOB_SHUTDOWNPARTICIPANT_DISCONNECTEDUSER_INITIATEDTASK_COMPLETEDrY   rZ   r:   r7   r   r      s    E!L9%N%Nr:   r   c                  f    \ rS rSr% SrS\S'   SrS\S'   S\S	'   \" \R                  S
9r	S\S'   Sr
g)
CloseEvent   rf   zLiteral['close']rp   NzWLLMError | STTError | TTSError | RealtimeModelError | InterruptionDetectionError | Nonere   r   reasonrt   rv   rw   rZ   )rT   rU   rV   rW   rp   ry   re   r   rz   rw   rY   rZ   r:   r7   r   r      s:    $D
$ 	 
_ dii8J8r:   r   rp   )discriminator)G
__future__r   rz   enumr   r   typingr   r   r   r	   r
   r   pydanticr   r   r   r   r   typing_extensionsr   inference.interruptionr   r   r   r   r   llmr   r   r   r   r   r   r   r   logr   r   r    r!   sttr"   r#   ttsr$   r%   r5   r'   agent_sessionr(   r)   r+   
EventTypesrq   r~   rn   r|   r   r   r   r   r   r   r   r   r   r   r   r   
AgentEventrZ   r:   r7   <module>r      s   "   K K O O " 
 $	 	 	  5   '+ \"
1W$ 1Wh 
 34	PQ
9I 99Y 99	 9.) .$9I 99y 9) )9 9 B
9 
99 9 &#t & &9 9  "" 	
  !! !!  	 
  
!
r:   