
    /j<                     f   S SK Jr  S SKrS SKrS SKJrJr  S SKJrJ	r	  S SK
Jr  S SKJr  S SKJrJrJr  S SKJrJrJr  S S	KJr  S
SKJr  S
SKJrJr  S
SKJr  SSKJrJ r J!r!  SSK"J#r#J$r$J%r%  \ " S S5      5       r&\ " S S5      5       r'\ " S S5      5       r(\ " S S5      5       r) " S S\5      r*\ " S S5      5       r+ " S S\,5      r- " S S 5      r.\S!   r/\" S"5      r0\ " S# S$5      5       r1\ " S% S&5      5       r2\ " S' S(5      5       r3 " S) S*\\Rh                  \/\0-     \\0   5      r5g)+    )annotationsN)ABCabstractmethod)AsyncIterable	Awaitable)	dataclass)TracebackType)GenericLiteralTypeVar)	BaseModel
ConfigDictField)rtc   )logger)	NOT_GIVEN
NotGivenOr)is_given   )ChatContextChatItemFunctionCall)Tool
ToolChoiceToolContextc                      \ rS rSrSrg)InputSpeechStartedEvent    N__name__
__module____qualname____firstlineno____static_attributes__r        L/app/agent/.venv/lib/python3.13/site-packages/livekit/agents/llm/realtime.pyr   r          r'   r   c                       \ rS rSr% S\S'   Srg)InputSpeechStoppedEvent   booluser_transcription_enabledr    Nr"   r#   r$   r%   __annotations__r&   r    r'   r(   r+   r+      s     $$r'   r+   c                  >    \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S
rg)MessageGeneration    str
message_idzAsyncIterable[str]text_streamzAsyncIterable[rtc.AudioFrame]audio_streamz)Awaitable[list[Literal['text', 'audio']]]
modalitiesr    Nr/   r    r'   r(   r2   r2       s    O##//99r'   r2   c                  D    \ rS rSr% S\S'   S\S'   S\S'    SrS	\S
'   Srg)GenerationCreatedEvent(   z AsyncIterable[MessageGeneration]message_streamzAsyncIterable[FunctionCall]function_streamr-   user_initiatedN
str | Noneresponse_idr    )r"   r#   r$   r%   r0   r@   r&   r    r'   r(   r:   r:   (   s$    4400N"K"Wr'   r:   c                  f    \ rS rSr% \" SS9rSrS\S'   S\S'   S	\S
'   \" SSS9r	S\S'   S\S'   Sr
g)RealtimeModelError2   T)arbitrary_types_allowedrealtime_model_errorzLiteral['realtime_model_error']typefloat	timestampr4   label.)exclude	Exceptionerrorr-   recoverabler    N)r"   r#   r$   r%   r   model_configrF   r0   r   rL   r&   r    r'   r(   rB   rB   2   s9    d;L,BD
)BJS$/E9/r'   rB   c                      \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S	rS\S
'    S	rS\S'    S	rS\S'    S	rS\S'    S	r	S\S'   Sr
g)RealtimeCapabilities;   r-   message_truncationturn_detectionuser_transcriptionauto_tool_reply_generationaudio_outputmanual_function_callsFmutable_chat_contextmutable_instructionsmutable_toolsper_response_tool_choicesupports_sayr    N)r"   r#   r$   r%   r0   rX   rY   rZ   r[   r\   r&   r    r'   r(   rP   rP   ;   sj     $$!&$&=!&$&=M46%*d*HL$2r'   rP   c                  ,   ^  \ rS rSrSU 4S jjrSrU =r$ )RealtimeErrorO   c                $   > [         TU ]  U5        g N)super__init__)selfmessage	__class__s     r(   rc   RealtimeError.__init__P   s    !r'   r    )re   r4   returnNone)r"   r#   r$   r%   rc   r&   __classcell__rf   s   @r(   r^   r^   O   s    " "r'   r^   c                      \ 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5       r\
SS j5       rSS	 jr        SS
 jrSrg)RealtimeModelT   c               t    Xl         [        U 5      R                   S[        U 5      R                   3U l        g )N.)_capabilitiesrF   r#   r"   _label)rd   capabilitiess     r(   rc   RealtimeModel.__init__U   s0    )d../qd1D1D0EFr'   c                    gNunknownr    rd   s    r(   modelRealtimeModel.modelY       r'   c                    grv   r    rx   s    r(   providerRealtimeModel.provider]   r{   r'   c                    U R                   $ ra   )rq   rx   s    r(   rs   RealtimeModel.capabilitiesa   s    !!!r'   c                    U R                   $ ra   )rr   rx   s    r(   rI   RealtimeModel.labele   s    {{r'   c                    g ra   r    rx   s    r(   sessionRealtimeModel.sessioni   s    *-r'   c                   #    g 7fra   r    rx   s    r(   acloseRealtimeModel.aclosel        $'   c                   #    U $ 7fra   r    rx   s    r(   
__aenter__RealtimeModel.__aenter__o   s
     s   c                @   #    U R                  5       I S h  vN   g  N7fra   )r   )rd   exc_typeexcexc_tbs       r(   	__aexit__RealtimeModel.__aexit__r   s      kkms   )rq   rr   N)rs   rP   rh   ri   )rh   r4   )rh   rP   )rh   RealtimeSessionrh   ri   rh   rm   )r   ztype[BaseException] | Noner   zBaseException | Noner   zTracebackType | Nonerh   ri   )r"   r#   r$   r%   rc   propertyry   r}   rs   rI   r   r   r   r   r   r&   r    r'   r(   rm   rm   T   s    G     " "   - -' ', " %	
 
r'   rm   )input_speech_startedinput_speech_stopped#input_audio_transcription_completedgeneration_createdsession_reconnectedmetrics_collectedremote_item_addedrL   TEventc                  F    \ rS rSr% S\S'    S\S'    S\S'   SrS\S	'   S
rg)InputTranscriptionCompleted   r4   item_id
transcriptr-   is_finalNzfloat | None
confidencer    )r"   r#   r$   r%   r0   r   r&   r    r'   r(   r   r      s$    LO'N#J#Vr'   r   c                      \ rS rSrSrg)RealtimeSessionReconnectedEvent   r    Nr!   r    r'   r(   r   r      r)   r'   r   c                  *    \ rS rSr% S\S'   S\S'   Srg)RemoteItemAddedEvent   r?   previous_item_idr   itemr    Nr/   r    r'   r(   r   r      s      
Nr'   r   c                    ^  \ rS rSrSU 4S jjrSS jr\SS j5       r\\SS j5       5       r	\\SS j5       5       r
\S S j5       r\    S!S j5       r\S"S	 j5       r\\S
.S#S jj5       r\S$S j5       r\S%S j5       r\\\\S.       S&S jj5       r\S'S j5       r\S'S j5       r\S'S j5       r\\S.         S(S jj5       r\S'S j5       r\\\S.       S)S jjrS'S jr    S*S jrSrU =r$ )+r      c                .   > [         TU ]  5         Xl        g ra   )rb   rc   _realtime_model)rd   realtime_modelrf   s     r(   rc   RealtimeSession.__init__   s    -r'   c                   SSK JnJn  U R                  SU" S[        R                  " 5       USUR                  5       UR                  5       U" U R                  R                  U R                  R                  S9S95        g)	zIReport connection timing as a RealtimeModelMetrics event with zero usage.r   )MetadataRealtimeModelMetricsr    F)
model_namemodel_provider)
request_idrH   acquire_timeconnection_reusedinput_token_detailsoutput_token_detailsmetadataN)
metrics.baser   r   emittimeInputTokenDetailsOutputTokenDetailsr   ry   r}   )rd   r   r   r   s       r(   _report_connection_acquired+RealtimeSession._report_connection_acquired   sl    A		 ))+)"'$8$J$J$L%9%L%L%N!#3399#'#7#7#@#@	
r'   c                    U R                   $ ra   r   rx   s    r(   r   RealtimeSession.realtime_model   s    ###r'   c                    g ra   r    rx   s    r(   chat_ctxRealtimeSession.chat_ctx   s    '*r'   c                    g ra   r    rx   s    r(   toolsRealtimeSession.tools   s    $'r'   c                   #    g 7fra   r    )rd   instructionss     r(   update_instructions#RealtimeSession.update_instructions   s     DGr   c                   #    g 7fra   r    )rd   r   s     r(   update_chat_ctxRealtimeSession.update_chat_ctx   s
      r   c                   #    g 7fra   r    )rd   r   s     r(   update_toolsRealtimeSession.update_tools   s     =@r   )tool_choicec                   g ra   r    )rd   r   s     r(   update_optionsRealtimeSession.update_options   s    adr'   c                    g ra   r    rd   frames     r(   
push_audioRealtimeSession.push_audio       9<r'   c                    g ra   r    r   s     r(   
push_videoRealtimeSession.push_video   r   r'   )r   r   r   c                   g ra   r    )rd   r   r   r   s       r(   generate_replyRealtimeSession.generate_reply   s     25r'   c                    g ra   r    rx   s    r(   commit_audioRealtimeSession.commit_audio   s    $'r'   c                    g ra   r    rx   s    r(   clear_audioRealtimeSession.clear_audio   s    #&r'   c                    g ra   r    rx   s    r(   	interruptRealtimeSession.interrupt   s    !$r'   )audio_transcriptc                   g ra   r    )rd   r5   r8   audio_end_msr   s        r(   truncateRealtimeSession.truncate   s     r'   c                   #    g 7fra   r    rx   s    r(   r   RealtimeSession.aclose   r   r   )r   r   r   c                 #    [        U5      (       a   U R                  U5      I S h  vN   [        U5      (       a   U R                  U5      I S h  vN   [        U5      (       a   U R                  U5      I S h  vN   g g  NZ! [         a    [        R                  " S5         Nzf = f NX! [         a    [        R                  " S5         Nxf = f NV! [         a    [        R                  " S5         g f = f7f)Nz!failed to update the instructionszfailed to update the chat_ctxzfailed to update the tools)r   r   r^   r   	exceptionr   r   )rd   r   r   r   s       r(   _update_sessionRealtimeSession._update_session   s      L!!F..|<<< HB**8444 E???''...  =  F  !DEF
 5  B  !@AB
 /  ?  !=>?s   C;B BB C;B- B+B- C;(C <C=C C;B  B(%C;'B((C;+B- - CC;CC;C  C85C;7C88C;c                    g)z1notifies the model that user activity has startedNr    rx   s    r(   start_user_activity#RealtimeSession.start_user_activity  s    r'   c                D    [        [        U 5      R                   S35      e)Nz2 does not implement say(). use a TTS model instead)NotImplementedErrorrF   r"   )rd   texts     r(   sayRealtimeSession.say  s'     "Dz""##UV
 	
r'   r   )r   rm   rh   ri   )r   rG   rh   ri   r   )rh   r   )rh   r   )r   r4   rh   ri   )r   r   rh   ri   )r   z
list[Tool]rh   ri   )r   zNotGivenOr[ToolChoice | None]rh   ri   )r   zrtc.AudioFramerh   ri   )r   zrtc.VideoFramerh   ri   )r   NotGivenOr[str]r   zNotGivenOr[ToolChoice]r   NotGivenOr[list[Tool]]rh   &asyncio.Future[GenerationCreatedEvent]r   )
r5   r4   r8   zlist[Literal['text', 'audio']]r   intr   r  rh   ri   )r   r  r   zNotGivenOr[ChatContext]r   r  rh   ri   )r  zstr | AsyncIterable[str]rh   r	  )r"   r#   r$   r%   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r&   rj   rk   s   @r(   r   r      s   .
( $ $ *  *'  'G G#	  @ @MVd d< << < )2.7(15 &5 ,	5
 &5 
05 5 ' ' & & $ $  -6  3	
  * 
  ' '
 )2,5(1? &? *	?
 &? 
?2
&
 
0
 
r'   r   )6
__future__r   asyncior   abcr   r   collections.abcr   r   dataclassesr   typesr	   typingr
   r   r   pydanticr   r   r   livekitr   logr   r   r   utilsr   chat_contextr   r   r   tool_contextr   r   r   r   r+   r2   r:   rB   rP   rK   r^   rm   
EventTypesr   r   r   r   EventEmitterr   r    r'   r(   <module>r     sr   "   # 4 !  , , 1 1   )  = = 7 7 	 	 	 % % % : : : X X X  3 3 3&"I "
$ $N 	
 
	 W W W 	 	 	   

c3++J,?@'&/ 
r'   