
    /j>}                       S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKJrJ	r	J
r
Jr  S SK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  S SKJr  S	S
KJrJr  S	SKJrJrJ r J!r!J"r"Jr#  S	SK$J%r%  S	SK&J'r'  S	SK(J)r)J*r*  S	SK+J,r,J-r-J.r.  S	SKJ/r/J0r0  S	SK1J2r2  SSKJ3r3  SSK4J5r5  SSK6J7r7  \(       a  SSK8J9r9J:r:  SSK;J<r<  SSK6J=r=  \ " S S\5      5       r>\ " S S5      5       r?SSS.             S8S jjr@\R                  " \'S9\*R                  " S5        S9               S:S  jj5       5       rC\ " S! S"5      5       rDSSS.             S;S# jjrE\R                  " \'S9  S9               S<S$ jj5       rF\ " S% S&5      5       rG      S=S' jrH\R                  " \'S9        S>S( j5       rI\ " S) S*5      5       rJ      S?S+ jrK\R                  " \'S9        S@S, j5       rL\ " S- S.5      5       rM                SAS/ jrN\R                  " \'S9                  SBS0 j5       rO\ " S1 S25      5       rP        SCS3 jrQS4rR         SDS5 jrS      SES6 jrTSFS7 jrUg)G    )annotationsN)AsyncGeneratorAsyncIterableCallableSequence)	dataclassfield)TYPE_CHECKINGAnyLiteralProtocolruntime_checkable)trace)ValidationError)rtc   )llmutils)	ChatChunkChatContextStopResponseToolContext	ToolErrorr   )Instructions)logger)trace_typestracer)USERDATA_TIMED_TRANSCRIPTFlushSentinel
NotGivenOr)aiois_given)	itertools   )io)SpeechHandle)_apply_text_transforms)AgentModelSettings)AgentSession)TextTransformsc                      \ rS rSrSS jrSrg)_ACloseable*   c                   #    g 7fN )selfs    P/app/agent/.venv/lib/python3.13/site-packages/livekit/agents/voice/generation.pyaclose_ACloseable.aclose,   s     3s   r1   N)returnr   )__name__
__module____qualname____firstlineno__r4   __static_attributes__r1       r3   r-   r-   *   s    &r<   r-   c                      \ rS rSr% S\S'   S\S'   SrS\S'   \" \S	9rS
\S'   \" \	S	9r
S\S'   \" S S	9rS\S'   \" \R                  S	9rS\S'   SrS\S'   Srg)_LLMGenerationData/   zaio.Chan[str | FlushSentinel]text_chzaio.Chan[llm.FunctionCall]function_ch strgenerated_text)default_factoryzlist[llm.FunctionCall]generated_functionszdict[str, Any]generated_extrac                 .    [         R                  " S5      $ )Nitem_)r   	shortuuidr1   r<   r3   <lambda>_LLMGenerationData.<lambda>6   s    EOOG,Dr<   idasyncio.Future[None]started_futNfloat | Nonettftr1   )r7   r8   r9   r:   __annotations__rD   r	   listrF   dictrG   rM   asyncioFuturerO   rQ   r;   r1   r<   r3   r>   r>   /   sf    **++NC272M/M&+D&AO^A$DEBE(-gnn(MK%MD,r<   r>   )modelproviderc                  ^^	^
 [         R                  [        [        -     " 5       m
[         R                  [        R
                     " 5       m	[        T
T	S9m[        R                  " [        XX#TXE5      5      nUR                  U
4S j5        UR                  U	4S j5        SU4S jjnUR                  U5        UT4$ )N)r@   rA   c                $   > TR                  5       $ r0   close)_r@   s    r3   rK   'perform_llm_inference.<locals>.<lambda>J   s    r<   c                $   > TR                  5       $ r0   r[   )r]   rA   s    r3   rK   r^   K   s    ):):)<r<   c                |   > TR                   R                  5       (       d  TR                   R                  S 5        g g r0   )rO   done
set_result)r]   datas    r3   _cleanup'perform_llm_inference.<locals>._cleanupM   s1    $$&&''- 'r<   r]   zasyncio.Task[bool]r6   None)r!   ChanrC   r   r   FunctionCallr>   rU   create_task_llm_inference_taskadd_done_callback)nodechat_ctxtool_ctxmodel_settingsrW   rX   llm_taskrd   rc   rA   r@   s           @@@r3   perform_llm_inferencerr   ;   s     hhs]*+-G((3++,.Kg;GD""DHdE\H 89<=. x(T>r<   llm_nodec                  #    [         R                  " 5       n[        R                  " 5       nUR                  R                  S 5        UR                  UR                  pUR                  5       n[        R                  [        R                  " UR                  SSSSS95      [        R                  [        UR                   R#                  5       5      [        R$                  UR&                   Vs/ s H  n[)        U5      R*                  PM     sn[        R,                  UR.                   Vs/ s H  n[)        U5      R*                  PM     sn0nU(       a  X^[        R0                  '   U(       a  Xn[        R2                  '   UR5                  U5        U " XU5      n[6        R8                  " U5      (       a
  UI S h  vN nUR;                  U5        UR=                  5       n[?        U[@        5      (       aB  Xl!        U	RE                  U5        URG                  [        RH                  URB                  5        g[?        U[J        5      (       d  g U  S h  vN nURL                  c  [         R                  " 5       U-
  Ul&        [?        U[@        5      (       a(  U=RB                  U-  sl!        U	RE                  U5        Mp  [?        U[N        5      (       Ga  URP                  (       d  M  URP                  RR                  (       Ga	  URP                  RR                   H  nUR(                  S:w  a  M  URU                  URV                  5      c'  UU:w  a!  UR;                  U5        UR=                  5       n[X        RZ                  " UR\                   S[_        UR`                  5       3URb                  URV                  URd                  URf                  =(       d    0 S9nUR`                  Ri                  U5        U
RE                  U5        M     URP                  Rf                  (       a/  URj                  Rm                  URP                  Rf                  5        URP                  Rn                  (       aQ  U=RB                  URP                  Rn                  -  sl!        U	RE                  URP                  Rn                  5        GMt  GMw  [?        U[p        5      (       a  U	RE                  U5        GM  [r        Rt                  " S[)        U5       35        GM  s  snf s  snf  GNe GN
 [?        U[v        5      (       a  URy                  5       I S h  vN    O4! [?        U[v        5      (       a  URy                  5       I S h  vN    f f = fURG                  [        RH                  URB                  5        URG                  [        Rz                  [        R                  " UR`                   Vs/ s H  nUR}                  SS	1S
9PM     Os  snf sn5      5        URL                  b*  URG                  [        R~                  URL                  5        g7f)NT)exclude_audioexclude_imageexclude_timestampexclude_metricsFfunctionz/fnc_)rM   call_idname	argumentsextraz&LLM node returned an unexpected type: type
created_at)exclude)@timeperf_counterr   get_current_spanrO   rb   r@   rA   flattenr   ATTR_CHAT_CTXjsondumpsto_dictATTR_FUNCTION_TOOLSrS   function_toolskeysATTR_PROVIDER_TOOLSprovider_toolsr~   r7   ATTR_TOOL_SETStoolsetsATTR_GEN_AI_REQUEST_MODELATTR_GEN_AI_PROVIDER_NAMEset_attributesrU   iscoroutineupdate_toolscopy
isinstancerC   rD   send_nowaitset_attributeATTR_RESPONSE_TEXTr   rQ   r   delta
tool_callsget_function_toolr{   r   ri   rM   lenrF   rz   r|   r}   appendrG   updatecontentr   r   warningr-   r4   ATTR_RESPONSE_FUNCTION_CALLS
model_dumpATTR_RESPONSE_TTFT)rm   rn   ro   rp   rc   rW   rX   
start_timecurrent_spanr@   rA   toolstooltool_setattrsrs   tools_snapshotchunkfnc_callfncs                       r3   rk   rk   V   s     ""$J))+L%<<)9)9[E 	!!4::"""& $	  $
 	''h.E.E.J.J.L)M''(JaJa)bJa$$t**=*=Ja)b""XM^M^$_M^T(^%<%<M^$_E 7<k3347?k334&H^4H8$$!>
 % ZZ\N(C  &H%"";#A#A4CVCVWh..4$# 0	%yy  --/*<	 %%%##u,###E*E9--{{;;))) % 6 699
2$ %66tyyAI % 7$11%8-2ZZ\N#&#3#3"&''%D4L4L0M/NO$(LL!%&*nn"&**"2$ 0077A#//9) !7, ;;$$((//0A0AB;;&&''5;;+>+>>'''(;(;< ' E=11##E*<T%[MJY *c$_ "&0	8d h,,//### h,,//### - {==t?R?RS00

GKG_G_`G_S^^V\$:^;G_`	
 yy"";#A#A499Ms   C/Y1TY/TA0Y>T#?BYU T)T&T)J=U Y&T))U *(YUY)V
VV

A%Y/X
A	Yc                  8    \ rS rSr% S\S'   S\S'   SrS\S'   S	rg)
_TTSGenerationData   zaio.Chan[rtc.AudioFrame]audio_chz/asyncio.Future[aio.Chan[io.TimedString] | None]timed_texts_futNrP   ttfbr1   )r7   r8   r9   r:   rR   r   r;   r1   r<   r3   r   r      s    &&DDD,r<   r   c                X  ^	^
 [         R                  [        R                     " 5       m	[        R
                  [         R                  [        R                     S -     " 5       m
[        T	T
S9n[        R                  " [        XX&X4U5      5      nSU	U
4S jjnUR                  U5        Xv4$ )N)r   r   c                   > TR                  5       (       a'  TR                  5       =n(       a  UR                  5         TR                  5         g r0   )ra   resultr\   )r]   timed_text_chr   r   s     r3   _inference_done.perform_tts_inference.<locals>._inference_done   s;    !!8N8N8P'P}'P!r<   rf   )r!   rh   r   
AudioFramerU   rV   r%   TimedStringr   rj   _tts_inference_taskrl   )rm   inputrp   text_transformsrW   rX   rc   tts_taskr   r   r   s            @@r3   perform_tts_inferencer      s     xx')HnnSXXbnn%=%DEGOxQD""DW_`H  />r<   c                  ^ ^^^^^^^^^^#    S mTR                   TR                  smm[        R                  " S5      S	UUUUU UUUU4	S jj5       n[        R
                  " US5      mSmS
UU4S jjnSUU4S jjn	[        R                  " U" 5       5      n
SnS n T(       d"  U	" 5       nX" X5      I S h  vN -  nT(       d  M"  [        R                  " U
5      I S h  vN   Ub  UR                  5       I S h  vN   TR                  5       I S h  vN   US:  $  Ne N> N% N! [        R                  " U
5      I S h  vN    Ub  UR                  5       I S h  vN    TR                  5       I S h  vN    f = f7f)Ntts_nodec                D  >	#    [         R                  " 5       nT
(       a   UR                  [        R                  T
5        T(       a   UR                  [        R
                  T5        T(       a  [        U T5      n T" U T5      n[        R                  " U5      (       a
  UI S h  vN nSn[        U[        5      (       d(  TR                  5       (       d  TR                  S 5        U$ TR                  5       (       a  TR                  5       nO7[        R                  [         R"                     " 5       nTR                  U5        U  S h  vN nTbi  T	R$                  c\  [&        R(                  " 5       T-
  T	l        [         R                  " 5       nUR                  [        R*                  T	R$                  5        Ub  UR,                  R/                  [0        / 5       H  n[        U[         R"                  5      (       d  M$  [3        UR4                  5      (       a  U=R4                  U-  sl        [3        UR6                  5      (       a  U=R6                  U-  sl        UR9                  U5        M     TR9                  U5        XFR:                  -  nGMQ   GN GNP
 U$ 7f)N        )r   r   r   r   r   r   r'   rU   r   r   r   ra   rb   r   r!   rh   r%   r   r   r   r   ATTR_RESPONSE_TTFBuserdatagetr   r"   r   end_timer   duration)r   pushed_durationr   r   audio_durationr   audio_frametextr   rc   rW   rp   rm   rX   r   r   r   s           r3   _tts_node_inference0_tts_inference_task.<locals>._tts_node_inference  s     --/&&{'L'LeT&&{'L'LhW*5/BE~.x((%~H #(M22"''))**40!!!!+224MHHR^^46M&&}5!) 	3+%$))*; --/*<	$557**;+I+I499U('00445NPRSD!$77#DOO44 OO>O#DMM22 MM_<M%11$7 T   -222N= &	3" s?   B J #J$B"J J
JJB0J BJ JJ r   Fc                    >#    TS     S h  vN n [        U [        5      (       a  M   [        R                  " 5       m  g  N2
 g 7f)Nr   )r   r   r   r   )r   	input_teer   s    r3   _get_start_time,_tts_inference_task.<locals>._get_start_time2  s9     $Q< 	%e]33!..0
	<s*   AAA AAA AAc                p   >#    TS     S h  vN n [        U [        5      (       a    g U 7v   M'   N"
 Smg 7f)Nr$   T)r   r   )r   finishedr   s    r3   _input_segment+_tts_inference_task.<locals>._input_segment9  s7     $Q< 	%%//K	< s   6202626r   r   )r   AsyncIterable[str]r   floatr6   r   )r6   rg   )r6   zAsyncGenerator[str, None])r   r   r   start_as_current_spanr#   teerU   rj   r!   gracefully_cancelr4   )rm   r   rp   rc   r   rW   rX   r   r   r   _start_time_taskr   input_segmentr   r   r   r   r   s   ` `````      @@@@@r3   r   r      sY      $J $t/C/CHo!!*-+ + .+Z eQ'IH   **?+<= O6:M!*,M%8%XXXO ( ##$4555$&&(((   Q  Y5(  ##$4555$&&(((   s   BE=D$ 6D7D$ E=D E=:D ;E=D"	E=D$ E= E="E=$E:>E?E:EE:3E64E::E=c                  *    \ rS rSr% S\S'   S\S'   Srg)_TextOutputiR  rC   r   rN   first_text_futr1   Nr7   r8   r9   r:   rR   r;   r1   r<   r3   r   r   R  s    
I((r<   r   c                    [        S[        R                  " 5       S9n[        R                  " [	        XU5      5      nX24$ )NrB   )r   r   )r   rU   rV   rj   _text_forwarding_task)text_outputsourceouttasks       r3   perform_text_forwardingr   X  s7     2gnn.>
?C4[#NOD9r<   c                  #     U  S h  vN nU=R                   U-  sl         U b  U R                  U5      I S h  vN   UR                  R                  5       (       a  M[  UR                  R	                  S 5        Mx   Ns ND
 [        U[        5      (       a  UR                  5       I S h  vN    U b  U R                  5         g g ! [        U[        5      (       a  UR                  5       I S h  vN    U b  U R                  5         f f = f7fr0   )	r   capture_textr   ra   rb   r   r-   r4   flush)r   r   r   r   s       r3   r   r   `  s      ! 	4%HHH&!..u555%%**,,""--d3	4 6 " fk**--/!!" # fk**--/!!" #sj   DC BA>B-C B !C !C >B C C (D+B.,D)D
/C20D

Dc                  6    \ rS rSr% S\S'   S\S'    S	S jrSrg)
_AudioOutputiv  zlist[rtc.AudioFrame]audiozasyncio.Future[float]first_frame_futc                    U R                   R                  5       (       d&  U R                   R                  UR                  5        g g r0   )r   ra   rb   r   )r2   evs     r3   _resolve_first_frame_fut%_AudioOutput._resolve_first_frame_fut|  s4    ##((**  ++BMM: +r<   r1   N)r   zio.PlaybackStartedEventr6   rg   )r7   r8   r9   r:   rR   r   r;   r1   r<   r3   r   r   v  s    **Q;r<   r   c                  ^ ^ [        / [        R                  " 5       S9mT R                  STR                  5        TR
                  R                  U U4S j5        [        R                  " [        T UT5      5      nUT4$ )N)r   r   playback_startedc                <   > TR                  STR                  5      $ )Nr   )offr   )r]   audio_outputr   s    r3   rK   *perform_audio_forwarding.<locals>.<lambda>  s    ,""#5s7S7STr<   )	r   rU   rV   onr   r   rl   rj   _audio_forwarding_task)r   
tts_outputr   r   s   `  @r3   perform_audio_forwardingr     sk    
 R1A
BCOO&(D(DE))T 5lJPSTUD9r<   c                Z  #    S n U R                  5         U  S h  vN nUR                  R                  U5        UR                  R	                  5       (       d^  U R
                  bQ  UR
                  U R
                  :w  a7  Uc4  [        R                  " UR
                  U R
                  UR                  S9nU(       a3  UR                  U5       H  nU R                  U5      I S h  vN   M     M  U R                  U5      I S h  vN   M   N N' N

 U(       a1  UR                  5        H  nU R                  U5      I S h  vN    M     [        U[        5      (       aG   UR                  5       I S h  vN    O,! [         a  n[         R"                  " SUS9   S nAOS nAff = fU R                  5         g ! [        U[        5      (       aG   UR                  5       I S h  vN    O,! [         a  n[         R"                  " SUS9   S nAOS nAff = fU R                  5         f = f7f)N)
input_rateoutput_ratenum_channelszerror while closing tts output)exc_info)resumer   r   r   ra   sample_rater   AudioResamplerr  pushcapture_framer   r   r-   r4   	Exceptionr   error)r   r   r   	resamplerframefes          r3   r   r     s     ,0I#% 	8%IIU# '',,.. ,,8%%)A)AA%..$00 , 8 8!&!3!3	 ".A&44Q777 / #00777'	8" 87' &* "*"00777 + j+..K ''))) K=JK 	 j+..K ''))) K=JK 	s   H+F: DDDCF: (D)F: DF: DF: F: /F: E	F: H+#E= 6E97E= <H+=
F&F!H+!F&&H+:H(G+$G'%G+*H(+
H5H
H(HH((H+c                  *    \ rS rSr% S\S'   S\S'   Srg)_ToolOutputi  zlist[ToolExecutionOutput]outputrN   first_tool_started_futr1   Nr   r1   r<   r3   r  r    s    %%00r<   r  c                    [        / [        R                  " 5       S9n[        R                  " [	        U UUUUUUUS9SS9nX4$ )N)r  r  )sessionspeech_handlero   tool_choicefunction_streamtool_outputtool_execution_started_cbtool_execution_completed_cbexecute_tools_taskr{   )r  rU   rV   rj   _execute_tools_task)	r  r  ro   r  r  r  r  r  r   s	            r3   perform_tool_executionsr    sW     R@PQK'#+#&?(C		
 "D r<   c                  ^^^^^#    SSK Jn  SSKJn	  S(UU4S jjm/ m U  Sh  vN n
US:X  a.  [        R
                  " SU
R                  TR                  S.S	9  M=  UR                  R                  U
R                  5      =ncc  [        R                  " S
U
R                   S3U
R                  TR                  S.S	9  T" [        U
S[        SU
R                   35      S95        M  [        U[        R                  [        R                   -  5      (       db  [        R
                  " S[#        U5       3U
R                  TR                  S.S	9  T" [        U
S[        SU
R                   35      S95        GMZ   U
R$                  =(       d    Sn[&        R(                  " UUU	" U TU
S9S9u  pTR0                  R3                  5       (       d  TR0                  R5                  S5        U" U
5         SSKJn  UR                  0 5      R                  [#        U R:                  5      0 5      nUR                  U
R                  5      =n(       aX  [        R<                  " SU
R                  U
R$                  TR                  S.S	9  S)S jn[>        R@                  " UU/UQ70 UD6nOQ[        R<                  " SU
R                  U
R$                  TR                  S.S	9  [>        R@                  " U/UQ70 UD6n[B        RD                  " S5            S*UU4S jj5       n[F        RH                  " U" UU
5      SU
R                   3S9nU" UTU
SS9  TRK                  U5        URM                  U4S  j5        GMY   GNU! [*        [,        4 ab  n[        R.                  " SU
R                   S3U
R                  U
R$                  TR                  S.S	9  T" [        U
SUS95         SnAGM  SnAff = f! [N         aI  n[        R.                  " S!U
R                  TR                  S.S	9  T" [        U
SUS95         SnAGM  SnAff = f
 [F        RP                  " [F        RR                  " TS"S065      I Sh  vN    O! [F        RT                   av    [W        T5      S#:  ad  T Vs/ s H  nURY                  5       PM     Os  snf nn[        R<                  " S$UTR                  S%.S	9  [F        RR                  " T6 I Sh  vN     Of = f[Z        R\                  R^                  " T6 I Sh  vN    [W        TR`                  5      S#:  a"  [        R<                  " S&S'TR                  0S	9  gg! [Z        R\                  R^                  " T6 I Sh  vN    [W        TR`                  5      S#:  a"  [        R<                  " S&S'TR                  0S	9  f f = f7f)+zUexecute tools, when cancelled, stop executing new tools but wait for the pending onesr$   )_set_activity_task_info)
RunContextc                L   > T" U 5        TR                   R                  U 5        g r0   )r  r   )r   r  r  s    r3   _tool_completed,_execute_tools_task.<locals>._tool_completed  s    #C(!!#&r<   Nnonez=received a tool call with tool_choice set to 'none', ignoringry   	speech_idr}   zunknown AI function ``zUnknown function: r   r  	exceptionzunknown tool type: z Unknown tool type for function: z{})r  r  function_call)r   json_argumentscall_ctxztried to call AI function `z` with invalid arguments)ry   r|   r(  )_MockToolsContextVarzexecuting mock toolc                  #    [         R                  " U 5      nUR                  R                  5        VVs/ s HK  u  pEUR                  [         R
                  R                  [         R
                  R                  4;   d  MI  UPMM     nnn[        U5      nUS U nUR                  R                  5        VVs/ s HK  u  pEUR                  [         R
                  R                  [         R
                  R                  4;   d  MI  UPMM     n	nnUR                  5        V
Vs0 s H  u  pX;   d  M  X_M     nn
nUR                  " U0 UD6nUR                  5         [         R                  " U 5      (       a$  U " UR                  0 UR                  D6I S h  vN $ U " UR                  0 UR                  D6$ s  snnf s  snnf s  snn
f  N27fr0   )inspect	signature
parametersitemskind	ParameterPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORDr   KEYWORD_ONLYbind_partialapply_defaultsiscoroutinefunctionargskwargs)mockfnc_args
fnc_kwargssigr{   parampos_param_namesmax_positionaltrimmed_argskw_param_nameskvtrimmed_kwargsbounds                 r3   	_run_mock&_execute_tools_task.<locals>._run_mockR  s    %//5 03~~/C/C/E+/E$zz ' 1 1 A A ' 1 1 G G   !/E ( + *-_)='/'@ 03~~/C/C/E*/E$zz ' 1 1 > > ' 1 1 G G   !/E ' * .8-=-=-?*-?TQ1CVDAD-? ' * !$ 0 0, Q. Q,,."66t<<)-uzz)JU\\)J#JJ#'#Du||#DD=+** $KsI   4G	AF5F50G	8AF;F;
G	 G/G5AG	G3G	zexecuting toolfunction_toolc                n  >#    [         R                  " 5       nUR                  [        R                  UR
                  [        R                  UR                  [        R                  UR                  05         U " 5       I S h  vN n[        XS S9nUR(                  =n(       aT  UR+                  [        R,                  UR.                  5        UR+                  [        R0                  UR2                  5        T" U5        g  N~! [         a  n[        U[        5      (       a8  [        R                  " SUR                   UR                  TR"                  S.S9  OA[        U[$        5      (       d,  [        R&                  " SUR                  TR"                  S.S9  [        US US9n S nAGNS nAff = f7f)Nr+  z"ToolError while executing tool: %sr'  r)  'exception occurred while executing tool)r   r   r   r   ATTR_FUNCTION_TOOL_IDrz   ATTR_FUNCTION_TOOL_NAMEr{   ATTR_FUNCTION_TOOL_ARGSr|   make_tool_outputBaseExceptionr   r   r   r   messagerM   r   r,  fnc_call_outr   ATTR_FUNCTION_TOOL_OUTPUTr  ATTR_FUNCTION_TOOL_IS_ERRORis_error)	function_callabler   r   valr  r  rX  r$  r  s	          r3   _traceable_fnc_tool0_execute_tools_task.<locals>._traceable_fnc_tool  sf     $)#9#9#;L //'==x?O?O'??'??ASAS_$5$77!18[_!`& (.':'::|:$22'AA<CVCV %22'CC\EZEZ
 $F+; 8( _%a33"NN D !		081>1A1A'" ",A|!<!<",, I3;==}O_O_&`
 "28D\]!^!_sD   A5F59
D DD A0F5D 
F2BF-'F5-F22F5
func_exec_r  T)r  r-  inline_taskc                &   > TR                  U 5      $ r0   )remove)r   taskss    r3   rK   %_execute_tools_task.<locals>.<lambda>  s    ELL4Fr<   rQ  return_exceptionsr   z;waiting for function call to finish before fully cancelling)	functionsr(  ztools execution completedr(  )r   ToolExecutionOutputr6   rg   )r@  r   rA  r   rB  r   r6   r   )r\  r   r   llm.FunctionCallr6   rg   )1agentr!  eventsr"  r   r  r{   rM   r   r   r   rU  r   r   r   FunctionToolRawFunctionToolr~   r|   	llm_utilsprepare_function_argumentsr   
ValueErrorr,  r  ra   rb   
run_resultr0  current_agentdebug	functoolspartialr   r   rU   rj   r   rl   r
  shieldgatherCancelledErrorr   get_namer   r!   cancel_and_waitr  )r  r  ro   r  r  r  r  r  r!  r"  r   rO  	json_argsrA  rB  r  r0  
mock_toolsr@  rM  r\  r^  r   namesr$  rd  s    `    ``                @@r3   r  r    sV     /"' ' &(Ed- M	(f$S$,MM%2%5%5  "*!8!8!<!<X]]!KKT+HMM?!<$,MM%2%5%5  $!)#"+.@,P"Q mS-=-=@S@S-STT)$}*=)>?$,MM%2%5%5  $!)#"+.Nx}}o,^"_ $..6$	'0'K'K%#,' '&3&.($, 55::<<22==dC%h/B<2F2J2J22N2R2R../3
 &>>(--8848LL-(0)1););)6)9)9!EF )2(9(9)T(cH(cXb(c%LL((0)1););)6)9)9 )2(9(9-(a((aV`(a%--o>*,'/*,;K*,*, ?*,X **'(98D%hmm_5 (X[_ T"&&'FGAM	v $Z0 
  1(--@XY$,MM%-%7%7%2%5%5   0(4[\ ]^
L     =$,MM%2%5%5   0(4[\ ]^C .^ nnW^^UKdKLLL!! 
)u:>167T]]_7E7LLM!&!.!1!1 ..%(((
) ii''///{!!"Q&LL+"M$4$45 ' ii''///{!!"Q&LL+"M$4$45 's   WQ> Q	M;Q	EQ> =3M>0AQ> 3FO38Q> ;Q	>O0AO+$Q> +O00Q> 3
Q==Q:Q> Q1Q> 7Q:8Q> =U- >'T%S ?A T?T TU- TU-  W+T.,AW-!WVAWWc                  ^    \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S
\S'   \" SS9rS\S'   Srg)rh  i  ri  r   zllm.FunctionCallOutput | NonerX  zAgent | None
agent_taskr   
raw_outputBaseException | Noneraw_exceptionT)defaultboolreply_requiredr1   N)r7   r8   r9   r:   rR   r	   r  r;   r1   r<   r3   rh  rh    s.    //O'' .ND.r<   rh  c           	        SSK Jn  [        U[        5      (       a  UnS nUb;  [        R
                  " U S US9n[        U R                  5       UR                  S UUS9$ S nUn[        U[        5      (       d?  [        U[        5      (       d*  [        U[        5      (       d  [        U[        5      (       a  U Vs/ s H  n[        Xs5      (       d  M  UPM     nnU Vs/ s H  n[        Xs5      (       a  M  UPM     n	n[        U5      S:  aK  [        R                  " SU R                    S3U R"                  US.S9  [        U R                  5       S S UUS9$ [%        ['        U5      S 5      nUc  U	OU	(       d  S O[        U	5      S:X  a  U	S	   OU	nO[        Xc5      (       a  UnS n[        R
                  " XS S9n[        U R                  5       UR                  US LUUUS
9$ s  snf s  snf )Nr$   )r(   r+  )r   rX  r  r  r  zAI function `z<` returned multiple AgentTask instances, ignoring the output)rz   r  r)  r   )r   rX  r  r  r  r  )rj  r(   r   rV  rn  make_function_call_outputrh  
model_copyrX  rS   set	frozensettupler   r   r  r{   rz   nextiter)
r   r  r,  r(   base_resultr   fnc_outitemagent_tasksother_outputss
             r3   rU  rU    s    &-((	99di
 #((*$11#
 	
 DG64  fc""fi((fe$$(.J*T2ItJ*0P&$
48O&P{aLL.jk"*"2"2fE '!,,.!!'  D%t, "\M*%(%71%<q!	 	 
G	#	#55TK $$& --d* E KPs   :G#G#G(6G(zlk.agent_task.instructionsc          	        U R                  [        5      nUbi  U R                  U   R                  S:X  aA  [        R
                  " [        SU/U R                  U   R                  S9U R                  U'   g[        S5      eU(       a6  U R                  R                  S[        R
                  " [        SU/S95        gg)a'  
Update the instruction message in the chat context or insert a new one if missing.

This function looks for an existing instruction message in the chat context using the identifier
'INSTRUCTIONS_MESSAGE_ID'.

Raises:
    ValueError: If an existing instruction message is not of type "message".
NrW  system)rM   roler   r   zEexpected the instructions inside the chat_ctx to be of type 'message'r   )rM   r  r   )	index_by_idINSTRUCTIONS_MESSAGE_IDr5  r~   r   ChatMessager   rp  insert)rn   instructionsadd_if_missingidxs       r3   update_instructionsr  5  s     

6
7C
>>###y0"%//*%#>>#.99	#HNN3 W  
OO6XP\~^	
 
r<   c                  U R                  [        5      nUb  U R                  U   =nR                  S:X  a  [	        S UR
                   5       5      nU(       d  g UR                  5       nUR
                   Vs/ s H+  n[        U[        5      (       a  UR                  U5      OUPM-     snUl        XPR                  U'   g g g s  snf )NrW  c              3  B   #    U  H  n[        U[        5      v   M     g 7fr0   )r   r   ).0cs     r3   	<genexpr>.apply_instructions_modality.<locals>.<genexpr>\  s     #VAJq,$?$?s   )
r  r  r5  r~   anyr   r  r   r   as_modality)rn   modalityr  r  has_modality_specificnew_itemr  s          r3   apply_instructions_modalityr  W  s     

6
7C
HNN3$77D==J ##V#V V$ ??$S[ScSc
Scaz!\'B'BAMM(#ISc
 's K
s   :2Cc                z     U R                  [        5      =n(       a  U R                  R                  U5        Og M;  r0   )	get_by_idr  r5  rc  )rn   msgs     r3   remove_instructionsr  h  s6    
$$%<==3=NN!!#&	 r<   )rm   
io.LLMNodern   r   ro   r   rp   r)   rW   
str | NonerX   r  r6   z-tuple[asyncio.Task[bool], _LLMGenerationData])NN)rm   r  rn   r   ro   r   rp   r)   rc   r>   rW   r  rX   r  r6   r  )rm   
io.TTSNoder   "AsyncIterable[str | FlushSentinel]rp   r)   r   Sequence[TextTransforms] | NonerW   r  rX   r  r6   z-tuple[asyncio.Task[bool], _TTSGenerationData])rm   r  r   r  rp   r)   rc   r   r   r  rW   r  rX   r  r6   r  )r   io.TextOutput | Noner   r   r6   z&tuple[asyncio.Task[None], _TextOutput])r   r  r   r   r   r   r6   rg   )r   io.AudioOutputr   AsyncIterable[rtc.AudioFrame]r6   z'tuple[asyncio.Task[None], _AudioOutput])r   r  r   r  r   r   r6   rg   )r  r*   r  r&   ro   r   r  NotGivenOr[llm.ToolChoice]r  AsyncIterable[llm.FunctionCall]r  !Callable[[llm.FunctionCall], Any]r  $Callable[[ToolExecutionOutput], Any]r6   z&tuple[asyncio.Task[None], _ToolOutput])r  r*   r  r&   ro   r   r  r  r  r  r  r  r  r  r  r  r6   rg   )r   ri  r  r   r,  r  r6   rh  )rn   r   r  zstr | Instructionsr  r  r6   rg   )rn   r   r  zLiteral['audio', 'text']r6   rg   )rn   r   r6   rg   )V
__future__r   rU   rt  r2  r   r   collections.abcr   r   r   r   dataclassesr   r	   typingr
   r   r   r   r   opentelemetryr   pydanticr   livekitr   rB   r   r   r   r   r   r   r   rn  llm.chat_contextr   logr   	telemetryr   r   typesr   r   r    r!   r"   	utils.aior#   r%   r  r&   transcription.text_transformsr'   rj  r(   r)   agent_sessionr*   r+   r-   r>   rr   log_exceptionsr   rk   r   r   r   r   r   r   r   r   r   r  r  r  rh  rU  r  r  r  r  r1   r<   r3   <module>r     s   "      M M ( K K  $    ,  + H H ! !  ' A++= '( ' '   " 
  	
 "   36 V$j) v
vv v "	v
 v v v 
v * %vr    
 . "	
 5   38 V$ Z
Z-Z "Z 	Z
 5Z Z Z 
Z %Zz ) ) )
(2D+ V$ %   
  
	  % * ; ; ;  . -	 V$* *-* 
* 
	* %*Z 1 1 1
   	
 , 5  A "F ,6 V$yy  y 	y
 ,y 5y  Ay "Fy y 
y %yx / / /F!F+.F;OFFR 7 


,>
PT
	
D''(@'	'"r<   