
    /jdC                    x   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
  S SKJr  S SKJr  S SKJr  SS	KJrJr  SS
KJr  SSKJrJr  SSKJr  \
\\R6                     \/\\R8                  \-     S-  \	\\R8                  \-     S-     -  4   r\
\R>                  \ \RB                     \/\\RD                  \-  \-     \-  \RD                  -  S-  \	\\RD                  \-  \-     \-  \RD                  -  S-     -  4   r#\
\\   \/\\R6                     S-  \	\\R6                     S-     -  4   r$ " S S5      r% " S S5      r&\ " S S5      5       r'\ " S S5      5       r(\ " S S5      5       r) " S S\\RT                  \S      5      r+ " S S\5      r, " S S\5      r- " S S 5      r. " S! S"5      r/g)#    )annotationsN)ABCabstractmethod)AsyncIterableAsyncIterator	AwaitableCallable)	dataclass)Literal)rtc   )llmstt)logger)FlushSentinelTimedString   )ModelSettingsc                      \ rS rSrSS.SS jjrSS jr\SS j5       r\SS j5       rSS jr	SS	 jr
SS
 jrSS jrSrg)
AudioInput)   Nsourcec                   Xl         X l        g N)_AudioInput__label_AudioInput__sourceselflabelr   s      H/app/agent/.venv/lib/python3.13/site-packages/livekit/agents/voice/io.py__init__AudioInput.__init__*   s        c                    U $ r    r   s    r!   	__aiter__AudioInput.__aiter__.       r$   c                    U R                   $ r   )r   r'   s    r!   r    AudioInput.label1       ||r$   c                    U R                   $ r   )r   r'   s    r!   r   AudioInput.source5       }}r$   c                   #    U R                   (       a"  U R                   R                  5       I S h  vN $ [        e N
7fr   r   	__anext__NotImplementedErrorr'   s    r!   r3   AudioInput.__anext__9   -     ;;..000!! 1   /><>c                \    U R                   (       a  U R                   R                  5         g g r   r   on_attachedr'   s    r!   r:   AudioInput.on_attached?       ;;KK##% r$   c                \    U R                   (       a  U R                   R                  5         g g r   r   on_detachedr'   s    r!   r?   AudioInput.on_detachedC   r<   r$   c                l    U R                   R                   SU R                  < SU R                  < S3$ N(label=z	, source=)	__class____name__r    r   r'   s    r!   __repr__AudioInput.__repr__G   /    ..))*'$**yWXYYr$   __label__source)r    strr   AudioInput | NonereturnNone)rP   zAsyncIterator[rtc.AudioFrame]rP   rN   rP   rO   )rP   rtc.AudioFramerP   rQ   rG   
__module____qualname____firstlineno__r"   r(   propertyr    r   r3   r:   r?   rH   __static_attributes__r&   r$   r!   r   r   )   sL    BF     "&&Zr$   r   c                      \ rS rSrSS.SS jjrSS jr\SS j5       r\SS j5       rSS jr	SS	 jr
SS
 jrSS jrSrg)
VideoInputK   Nr   c                   X l         Xl        g r   )_VideoInput__source_VideoInput__labelr   s      r!   r"   VideoInput.__init__L   s    r$   c                    U $ r   r&   r'   s    r!   r(   VideoInput.__aiter__P   r*   r$   c                    U R                   $ r   )ra   r'   s    r!   r    VideoInput.labelS   r-   r$   c                    U R                   $ r   )r`   r'   s    r!   r   VideoInput.sourceW   r0   r$   c                   #    U R                   (       a"  U R                   R                  5       I S h  vN $ [        e N
7fr   r2   r'   s    r!   r3   VideoInput.__anext__[   r6   r7   c                \    U R                   (       a  U R                   R                  5         g g r   r9   r'   s    r!   r:   VideoInput.on_attacheda   r<   r$   c                \    U R                   (       a  U R                   R                  5         g g r   r>   r'   s    r!   r?   VideoInput.on_detachede   r<   r$   c                l    U R                   R                   SU R                  < SU R                  < S3$ rB   rE   r'   s    r!   rH   VideoInput.__repr__i   rJ   r$   rK   )r    rN   r   VideoInput | NonerP   rQ   )rP   zAsyncIterator[rtc.VideoFrame]rR   rP   rq   )rP   rtc.VideoFramerU   rV   r&   r$   r!   r]   r]   K   sL    BF     "&&Zr$   r]   c                  <    \ rS rSr% S\S'    S\S'    SrS\S'   S	rg)
PlaybackFinishedEventm   floatplayback_positionboolinterruptedN
str | Nonesynchronized_transcriptr&   )rG   rW   rX   rY   __annotations__r|   r[   r&   r$   r!   ru   ru   m   s%    /U*.Z.Gr$   ru   c                       \ rS rSr% S\S'   Srg)PlaybackStartedEventx   rw   
created_atr&   NrG   rW   rX   rY   r}   r[   r&   r$   r!   r   r   x   s    >r$   r   c                       \ rS rSr% S\S'   Srg)AudioOutputCapabilities~   ry   pauser&   Nr   r&   r$   r!   r   r   ~   s    Kr$   r   c                  D  ^  \ rS rSrSSS.         SU 4S jjjr\SS j5       r\SS j5       rSS jrSS.       SS	 jjr	SS
 j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rSS jrSS jrSS jrSS jrSrU =r$ )!AudioOutput   N)next_in_chainsample_ratec               |  >^  [         TT ]  5         UT l        UT l        UT l        ST l        [        R                  " 5       T l        UT l	        ST l
        ST l        [        SSS9T l        T R                  (       aA  T R                  R                  SU 4S j5        T R                  R                  SU 4S j5        gg)	zi
Args:
    sample_rate: The sample rate required by the audio sink, if None, any sample rate is accepted
Fr   )rx   rz   playback_finishedc                b   > TR                  U R                  U R                  U R                  S9$ )N)rz   rx   r|   )on_playback_finishedrz   rx   r|   evr   s    r!   <lambda>&AudioOutput.__init__.<locals>.<lambda>   s.    444 "&(&:&:,.,F,F 5 r$   playback_startedc                6   > TR                  U R                  S9$ )Nr   )on_playback_startedr   r   s    r!   r   r      s    t/G/GSUS`S`/G/ar$   N)superr"   _AudioOutput__next_in_chain_sample_rate_AudioOutput__label_AudioOutput__capturingasyncioEvent%_AudioOutput__playback_finished_event_capabilities%_AudioOutput__playback_segments_count%_AudioOutput__playback_finished_countru   _AudioOutput__last_playback_evr   on)r   r    capabilitiesr   r   rF   s   `    r!   r"   AudioOutput.__init__   s     	,' )0&))*&)*&9NU:
 !!# !!"$a r$   c                    U R                   $ r   )r   r'   s    r!   r    AudioOutput.label   r-   r$   c                    U R                   $ r   )r   r'   s    r!   r   AudioOutput.next_in_chain       ###r$   c               6    U R                  S[        US95        g )Nr   r   )emitr   )r   r   s     r!   r   AudioOutput.on_playback_started   s    		$&:j&QRr$   )r|   c               
   U R                   U R                  :  a  [        R                  " S5        gU =R                   S-  sl         U R                  R                  5         [        UUUS9nX@l        U R                  SU5        g)z
Developers building audio sinks must call this method when a playback/segment is finished.
Segments are segmented by calls to flush() or clear_buffer()
zHplayback_finished called more times than playback segments were capturedNr   )rx   rz   r|   r   )	r   r   r   warningr   setru   r   r   )r   rx   rz   r|   r   s        r!   r    AudioOutput.on_playback_finished   sy     ))T-K-KKNNZ &&!+&&&**,"/#$;

 #%		%r*r$   c                   #    U R                   nU R                  U:  aN  U R                  R                  5       I Sh  vN   U R                  R	                  5         U R                  U:  a  MN  U R
                  $  N<7f)z
Wait for the past audio segments to finish playing out.

Returns:
    PlaybackFinishedEvent: The event that was emitted when the audio finished playing out
    (only the last segment information)
N)r   r   r   waitclearr   )r   targets     r!   wait_for_playoutAudioOutput.wait_for_playout   sm      //,,v50055777**002 ,,v5 &&& 8s   :A;A9.A;-A;c                     SU l         SU l        g )Nr   )r   r   r'   s    r!   _reset_playback_count!AudioOutput._reset_playback_count   s    )*&)*&r$   c                    U R                   $ )zPThe sample rate required by the audio sink, if None, any sample rate is accepted)r   r'   s    r!   r   AudioOutput.sample_rate   s        r$   c                    U R                   R                  =(       a.    U R                  (       + =(       d    U R                  R                  $ r   )r   r   r   	can_pauser'   s    r!   r   AudioOutput.can_pause   s3    !!''d1C1C-C-ctGYGYGcGcdr$   c                h   #    U R                   (       d  SU l         U =R                  S-  sl        gg7f)zOCapture an audio frame for playback, frames can be pushed faster than real-timeTr   N)r   r   )r   frames     r!   capture_frameAudioOutput.capture_frame   s.      #D**a/*  s   02c                    SU l         g)zJFlush any buffered audio, marking the current playback/segment as completeFN)r   r'   s    r!   flushAudioOutput.flush   s     !r$   c                    g)z/Clear the buffer, stopping playback immediatelyNr&   r'   s    r!   clear_bufferAudioOutput.clear_buffer       r$   c                \    U R                   (       a  U R                   R                  5         g g r   r   r:   r'   s    r!   r:   AudioOutput.on_attached   "    **, r$   c                \    U R                   (       a  U R                   R                  5         g g r   r   r?   r'   s    r!   r?   AudioOutput.on_detached  r   r$   c                \    U R                   (       a  U R                   R                  5         gg)zPause the audio playbackN)r   r   r'   s    r!   r   AudioOutput.pause  s"    $$& r$   c                \    U R                   (       a  U R                   R                  5         gg)zResume the audio playbackN)r   resumer'   s    r!   r   AudioOutput.resume  s"    %%' r$   c                l    U R                   R                   SU R                  < SU R                  < S3$ NrC   z, next=rD   rF   rG   r    r   r'   s    r!   rH   AudioOutput.__repr__  2    ..))*'$**wtGYGYF\\]^^r$   )	__capturingrL   __last_playback_ev__next_in_chain__playback_finished_count__playback_finished_event__playback_segments_countr   r   )
r    rN   r   r   r   AudioOutput | Noner   
int | NonerP   rQ   rR   rP   r   )r   rw   rP   rQ   )rx   rw   rz   ry   r|   r{   rP   rQ   )rP   ru   rU   )rP   r   rP   ry   )r   rT   rP   rQ   )rG   rW   rX   rY   r"   rZ   r    r   r   r   r   r   r   r   r   r   r   r   r:   r?   r   r   rH   r[   __classcell__)rF   s   @r!   r   r      s8    -1"&% % .	%
 *%  % 
% %N   $ $S /3+ !+ 	+
 ",+ 
+:' + ! ! e e 0 0 ! ! > >--'
(
_ _r$   r   )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rSS jrSS	 jrS
rg)
TextOutputi  c                   Xl         X l        g r   )_TextOutput__label_TextOutput__next_in_chainr   r    r   s      r!   r"   TextOutput.__init__      ,r$   c                    U R                   $ r   )r   r'   s    r!   r    TextOutput.label  r-   r$   c                    U R                   $ r   )r   r'   s    r!   r   TextOutput.next_in_chain  r   r$   c                   #    g7f)z8Capture a text segment (Used by the output of LLM nodes)Nr&   r   texts     r!   capture_textTextOutput.capture_text#  s        c                    g)zJMark the current text segment as complete (e.g LLM generation is complete)Nr&   r'   s    r!   r   TextOutput.flush'  r   r$   c                \    U R                   (       a  U R                   R                  5         g g r   r   r'   s    r!   r:   TextOutput.on_attached+  r   r$   c                \    U R                   (       a  U R                   R                  5         g g r   r   r'   s    r!   r?   TextOutput.on_detached/  r   r$   c                l    U R                   R                   SU R                  < SU R                  < S3$ r   r   r'   s    r!   rH   TextOutput.__repr__3  r   r$   rL   r   N)r    rN   r   TextOutput | NonerP   rQ   rR   rP   r  )r   rN   rP   rQ   rU   )rG   rW   rX   rY   r"   rZ   r    r   r   r   r   r:   r?   rH   r[   r&   r$   r!   r   r     sk    -   $ $ G G Y Y--_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rSS jrSS	 jrS
rg)VideoOutputi8  c                   Xl         X l        g r   )_VideoOutput__label_VideoOutput__next_in_chainr   s      r!   r"   VideoOutput.__init__9  r   r$   c                    U R                   $ r   )r  r'   s    r!   r    VideoOutput.label=  r-   r$   c                    U R                   $ r   )r	  r'   s    r!   r   VideoOutput.next_in_chainA  r   r$   c                   #    g 7fr   r&   r   s     r!   r   VideoOutput.capture_frameE  s     ADr   c                    g r   r&   r'   s    r!   r   VideoOutput.flushH  s     r$   c                \    U R                   (       a  U R                   R                  5         g g r   r   r'   s    r!   r:   VideoOutput.on_attachedK  r   r$   c                \    U R                   (       a  U R                   R                  5         g g r   r   r'   s    r!   r?   VideoOutput.on_detachedO  r   r$   c                l    U R                   R                   SU R                  < SU R                  < S3$ r   r   r'   s    r!   rH   VideoOutput.__repr__S  r   r$   r  N)r    rN   r   VideoOutput | NonerP   rQ   rR   rP   r  )r   rs   rP   rQ   rU   )rG   rW   rX   rY   r"   rZ   r    r   r   r   r   r:   r?   rH   r[   r&   r$   r!   r  r  8  s]    -   $ $ D D   --_r$   r  c                      \ rS rSr S       SS jjrSS jrSS jr\SS j5       r\SS j5       r	\SS j5       r
\
R                  SS	 j5       r
\SS
 j5       r\R                  SS j5       rSrg)
AgentInputiW  Nc                `    S U l         S U l        Xl        X l        X0l        SU l        SU l        g NT)_video_stream_audio_stream_video_changed_audio_changed_audio_enabled_cb_audio_enabled_video_enabled)r   video_changedaudio_changedaudio_enabled_cbs       r!   r"   AgentInput.__init__X  s8     1504++!1 #"r$   c                d   U(       a'  U R                   (       d  [        R                  " S5        XR                  :X  a  g Xl        U R                  b  U R	                  U5        U R                   (       d  g U(       a  U R                   R                  5         g U R                   R                  5         g )Nz+Cannot enable audio input when it's not set)r   r   r   r$  r#  r:   r?   r   enables     r!   set_audio_enabledAgentInput.set_audio_enabledh  s|    $,,NNHI((($!!-""6*!!**,**,r$   c                (   U(       a'  U R                   (       d  [        R                  " S5        XR                  :X  a  g Xl        U R                   (       d  g U(       a  U R                   R	                  5         g U R                   R                  5         g )Nz+Cannot enable video input when it's not set)r  r   r   r%  r:   r?   r+  s     r!   set_video_enabledAgentInput.set_video_enabled|  sb    $,,NNHI((($!!**,**,r$   c                    U R                   $ r   r$  r'   s    r!   audio_enabledAgentInput.audio_enabled      """r$   c                    U R                   $ r   r%  r'   s    r!   video_enabledAgentInput.video_enabled  r6  r$   c                    U R                   $ r   )r  r'   s    r!   videoAgentInput.video      !!!r$   c                T   XR                   L a  g U R                   (       a  U R                   R                  5         Xl         U R                  5         U R                   (       aG  U R                  (       a  U R                   R	                  5         g U R                   R                  5         g g r   )r  r?   r!  r%  r:   r   streams     r!   r<  r=    y    '''**,#""""..0""..0	 r$   c                    U R                   $ r   )r   r'   s    r!   audioAgentInput.audio  r>  r$   c                T   XR                   L a  g U R                   (       a  U R                   R                  5         Xl         U R                  5         U R                   (       aG  U R                  (       a  U R                   R	                  5         g U R                   R                  5         g g r   )r   r?   r"  r$  r:   r@  s     r!   rD  rE    rB  r$   )r"  r$  r#  r   r!  r%  r  r   )r&  Callable[[], None]r'  rG  r(  zCallable[[bool], None] | NonerP   rQ   )r,  ry   rP   rQ   r   rr   )rA  rq   rP   rQ   rS   )rA  rO   rP   rQ   )rG   rW   rX   rY   r"   r-  r0  rZ   r4  r9  r<  setterrD  r[   r&   r$   r!   r  r  W  s    
 ;?	#)# *# 8	#
 
# -(-" # # # # " " \\1 1  " " \\1 1r$   r  c                  <   \ rS rSr        SS jrSS jrSS j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\R                  SS
 j5       r\SS j5       r\R                  SS j5       r\SS j5       r\R                  SS j5       rSrg)AgentOutputi  c                |    S U l         S U l        S U l        Xl        X l        X0l        SU l        SU l        SU l        g r  )	_video_sink_audio_sink_transcription_sinkr!  r"  _transcription_changedr$  r%  _transcription_enabled)r   r&  r'  transcription_changeds       r!   r"   AgentOutput.__init__  sF     04/36: ++&;#""&*#r$   c                (   U(       a'  U R                   (       d  [        R                  " S5        XR                  :X  a  g Xl        U R                   (       d  g U(       a  U R                   R	                  5         g U R                   R                  5         g )Nz,Cannot enable video output when it's not set)rL  r   r   r%  r:   r?   r   enableds     r!   r0  AgentOutput.set_video_enabled  b    4++NNIJ)))%((*((*r$   c                (   U(       a'  U R                   (       d  [        R                  " S5        XR                  :X  a  g Xl        U R                   (       d  g U(       a  U R                   R	                  5         g U R                   R                  5         g )Nz,Cannot enable audio output when it's not set)rM  r   r   r$  r:   r?   rT  s     r!   r-  AgentOutput.set_audio_enabled  rW  r$   c                (   U(       a'  U R                   (       d  [        R                  " S5        XR                  :X  a  g Xl        U R                   (       d  g U(       a  U R                   R	                  5         g U R                   R                  5         g )Nz4Cannot enable transcription output when it's not set)rN  r   r   rP  r:   r?   rT  s     r!   set_transcription_enabled%AgentOutput.set_transcription_enabled  sb    433NNQR111&-#''$$002$$002r$   c                    U R                   $ r   r3  r'   s    r!   r4  AgentOutput.audio_enabled  r6  r$   c                    U R                   $ r   r8  r'   s    r!   r9  AgentOutput.video_enabled	  r6  r$   c                    U R                   $ r   )rP  r'   s    r!   transcription_enabled!AgentOutput.transcription_enabled  s    ***r$   c                    U R                   $ r   )rL  r'   s    r!   r<  AgentOutput.video      r$   c                T   XR                   L a  g U R                   (       a  U R                   R                  5         Xl         U R                  5         U R                   (       aG  U R                  (       a  U R                   R	                  5         g U R                   R                  5         g g r   )rL  r?   r!  r%  r:   r   sinks     r!   r<  re    y    ###((*""  ,,.  ,,.	 r$   c                    U R                   $ r   )rM  r'   s    r!   rD  AgentOutput.audio&  rf  r$   c                T   XR                   L a  g U R                   (       a  U R                   R                  5         Xl         U R                  5         U R                   (       aG  U R                  (       a  U R                   R	                  5         g U R                   R                  5         g g r   )rM  r?   r"  r$  r:   rh  s     r!   rD  rl  *  rj  r$   c                    U R                   $ r   )rN  r'   s    r!   transcriptionAgentOutput.transcription;  s    '''r$   c                T   XR                   L a  g U R                   (       a  U R                   R                  5         Xl         U R                  5         U R                   (       aG  U R                  (       a  U R                   R	                  5         g U R                   R                  5         g g r   )rN  r?   rO  rP  r:   rh  s     r!   ro  rp  ?  sy    +++##$$002#' ##%##**((446((446	 $r$   )	r"  r$  rM  rO  rP  rN  r!  r%  rL  N)r&  rG  r'  rG  rQ  rG  rP   rQ   )rU  ry   rP   rQ   r   r  )ri  r  rP   rQ   r   )ri  r   rP   rQ   r  )ri  r  rP   rQ   )rG   rW   rX   rY   r"   r0  r-  r[  rZ   r4  r9  rb  r<  rH  rD  ro  r[   r&   r$   r!   rJ  rJ    s    +)+ *+  2	+
 
+"+"+"3" # # # # + +     \\/ /      \\/ /  ( ( 7 7r$   rJ  )0
__future__r   r   abcr   r   collections.abcr   r   r   r	   dataclassesr
   typingr   livekitr    r   r   logr   typesr   r   agentr   
AudioFrameSpeechEventrN   STTNodeChatContextlistTool	ChatChunkLLMNodeTTSNoder   r]   ru   r   r   EventEmitterr   r   r  r  rJ  r&   r$   r!   <module>r     s(   "  # M M !     =   3>>"M2#//C'(
coo34t;<=> SXX
 #--#%56	
	mm  cmmc1MABSH3==X[__`	a	b 3'#..!D(9]3>>5RUY5Y+ZZ\Z ZDZ ZD G G G ? ? ?
   P_#s''0W(XY P_f_ _D_# _>f1 f1RN7 N7r$   