+
    ~j?                    j   ^ RI Ht ^ RIt^ RIt^ RIt^ RIHtHt ^ RIH	t	H
t
 ^ RIHtHt ^ RIHt ^ RIHtHt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 ^ RIH t  ^RI!H"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.H"t/ ^RIH0t0H1t1H2t2H3t3 ^RI"H4t4 ^RI5H6t6H7t7 ^RI8H9t9H:t:  ! R R]4      t; ! R R]4      t< ! R R]4      t= ! R R]4      t> ! R R]4      t? ! R  R!]4      t@]! R"4      tA ! R# R$]]P                  ]R',          ]A,          ,          ]]A,          4      tC ! R% R&]4      tDR# )(    )annotationsN)ABCabstractmethod)AsyncIterableAsyncIterator)datetimetimezone)TracebackType)AnyClassVarGenericLiteralTypeVar)trace)AttributeValue)	BaseModel
ConfigDictField)rtc)Metadata)utils)APIConnectionErrorAPIErrorAPIStatusErrorlogger)
LLMMetrics)_chat_ctx_to_otel_eventstrace_typestracerr   )DEFAULT_API_CONNECT_OPTIONS	NOT_GIVENAPIConnectOptions
NotGivenOr)aio)ChatContextChatRole)Tool
ToolChoicec                  z    ] tR t^#t$ R]R&    R]R&    ^ tR]R&    ^ tR]R&    ^ tR]R&    R]R&    RtR	]R
&   Rt	R# )CompletionUsageintcompletion_tokensprompt_tokensprompt_cached_tokenscache_creation_tokenscache_read_tokenstotal_tokensN
str | Noneservice_tier )
__name__
__module____qualname____firstlineno____annotations__r/   r0   r1   r4   __static_attributes__r5       k/Users/mitch_tango/dev/rabbit-r1-livekit/agent/.venv/lib/python3.14/site-packages/livekit/agents/llm/llm.pyr+   r+   #   sW    1C !#!1!"3"8s3G#L*#Kr<   r+   c                  R    ] tR t^5t$ RtR]R&   R]R&   R]R&   R]R&   RtR	]R
&   RtR# )FunctionToolCallfunctionzLiteral['function']typestrname	argumentscall_idNdict[str, Any] | Noneextrar5   )r6   r7   r8   r9   rA   r:   rG   r;   r5   r<   r=   r?   r?   5   s*     *D
*
INL#'E 'Ir<   r?   c                  l    ] tR t^>t$ RtR]R&   ]! ]R7      tR]R&   Rt	R]R	&   ]! ]
R7      tR
]R&   RtR# )CollectedResponse rB   textdefault_factorylist[FunctionToolCall]
tool_callsNCompletionUsage | Noneusagezdict[str, Any]rG   r5   )r6   r7   r8   r9   rK   r:   r   listrO   rQ   dictrG   r;   r5   r<   r=   rI   rI   >   s;    D#N).t)DJ&D$(E!(!$7E>7Cr<   rI   c                  ^    ] tR t^Gt$ RtR]R&   RtR]R&   ]! ]R7      t	R]R&   Rt
R	]R
&   RtR# )ChoiceDeltaNzChatRole | Noneroler3   contentrL   rN   rO   rF   rG   r5   )r6   r7   r8   r9   rV   r:   rW   r   rR   rO   rG   r;   r5   r<   r=   rU   rU   G   s4     D/ GZ).t)DJ&D#'E 'Ir<   rU   c                  >    ] tR t^Ot$ R]R&   RtR]R&   RtR]R&   RtR# )		ChatChunkrB   idNzChoiceDelta | NonedeltarP   rQ   r5   )r6   r7   r8   r9   r:   r[   rQ   r;   r5   r<   r=   rY   rY   O   s    G $E$$(E!(r<   rY   c                  t    ] tR t^Ut$ ]! RR7      tRtR]R&   R]R&   R]R	&   ]! R
RR7      t	R]R&   R]R&   Rt
R# )LLMErrorT)arbitrary_types_allowed	llm_errorzLiteral['llm_error']rA   float	timestamprB   label.)exclude	Exceptionerrorboolrecoverabler5   N)r6   r7   r8   r9   r   model_configrA   r:   r   re   r;   r5   r<   r=   r]   r]   U   s9    d;L!,D
,JS$/E9/r<   r]   TEventc                     a  ] tR t^atR V 3R llt]R R l4       t]R R l4       t]R R l4       t]	R	R
R]
R]R]R]/R R ll4       tR R ltR R ltR R ltR R ltRtV ;t# )LLMc                   V ^8  d   QhRR/#    returnNoner5   )formats   "r=   __annotate__LLM.__annotate__f   s     G G$ Gr<   c                	   < \         SV `  4        \        V 4      P                   R \        V 4      P                   2V n        R# ).N)super__init__rA   r7   r6   _label)self	__class__s   &r=   rw   LLM.__init__f   s6    d../qd1D1D0EFr<   c                   V ^8  d   QhRR/# rn   ro   rB   r5   )rq   s   "r=   rr   rs   k   s      s r<   c                	    V P                   # Nrx   ry   s   &r=   rb   	LLM.labelj       {{r<   c                   V ^8  d   QhRR/# r}   r5   )rq   s   "r=   rr   rs   o   s     	 	s 	r<   c                    R# )zGet the model name/identifier for this LLM instance.

Returns:
    The model name if available, "unknown" otherwise.

Note:
    Plugins should override this property to provide their model information.
unknownr5   r   s   &r=   model	LLM.modeln        r<   c                   V ^8  d   QhRR/# r}   r5   )rq   s   "r=   rr   rs   {   s     	 	# 	r<   c                    R# )zGet the provider name/identifier for this LLM instance.

Returns:
    The provider name if available, "unknown" otherwise.

Note:
    Plugins should override this property to provide their provider information.
r   r5   r   s   &r=   providerLLM.providerz   r   r<   toolsNconn_optionsparallel_tool_callstool_choiceextra_kwargsc               4    V ^8  d   QhRRRRRRRRR	R
RRRR/# )rn   chat_ctxr&   r   zlist[Tool] | Noner   r#   r   zNotGivenOr[bool]r   zNotGivenOr[ToolChoice]r   zNotGivenOr[dict[str, Any]]ro   	LLMStreamr5   )rq   s   "r=   rr   rs      sR     	 	 	 !		
 (	 .	 ,	 1	 
	r<   c               	    R # r   r5   )ry   r   r   r   r   r   r   s   &$$$$$$r=   chatLLM.chat   s     r<   c                   V ^8  d   QhRR/# rm   r5   )rq   s   "r=   rr   rs      s       r<   c                    R# )z&Pre-warm connection to the LLM serviceNr5   r   s   &r=   prewarmLLM.prewarm   s    r<   c                   V ^8  d   QhRR/# rm   r5   )rq   s   "r=   rr   rs      s    ''d'r<   c                	   "   R # 5ir   r5   r   s   &r=   aclose
LLM.aclose   s     C   c                   V ^8  d   QhRR/# )rn   ro   rk   r5   )rq   s   "r=   rr   rs      s      # r<   c                	   "   V # 5ir   r5   r   s   &r=   
__aenter__LLM.__aenter__   
     r   c               (    V ^8  d   QhRRRRRRRR/# 	rn   exc_typeztype[BaseException] | NoneexczBaseException | Noneexc_tbzTracebackType | Nonero   rp   r5   )rq   s   "r=   rr   rs      2      , " %	
 
r<   c                	B   "   V P                  4       G R j  xL
  R #  L5ir   r   ry   r   r   r   s   &&&&r=   	__aexit__LLM.__aexit__         kkm   r   )r6   r7   r8   r9   rw   propertyrb   r   r   r   r!   r"   r   r   r   r   r   r;   __classcell__)rz   s   @r=   rk   rk   a   s    
G G   	 	 	 	 	 $(		
 +F	 1:	 /8	 4=	 	 ( r<   rk   c                     ] tR t^t$ RtR]R&   R R lt]R R l4       tR R	 lt	R
 R lt
]P                  ! ]R7      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 ltR R ltR R ltR R ltR R  ltR!tR"# )#r   llm_requestzClassVar[str]_llm_request_span_namec          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )rn   llmrk   r   r&   r   
list[Tool]r   r#   ro   rp   r5   )rq   s   "r=   rr   LLMStream.__annotate__   s<     !9 !9!9 	!9
 !9 (!9 
!9r<   c               	&  a  VS n         VS n        VS n        VS n        \        P
                  \        ,          ! 4       S n        \        P                  P                  S P                  ^4      S n
        S P                  w  S n        pRS n        . S n        \        P                  ! S P!                  V4      RR7      S n        R V 3R llp\        P                  ! V! 4       RR7      S n        S P$                  P'                  V 3R l4       RS n        R# )	rn   FzLLM._metrics_task)rC   c                   V ^8  d   QhRR/# rm   r5   )rq   s   "r=   rr   (LLMStream.__init__.<locals>.__annotate__   s     	( 	(D 	(r<   c                 0  <"   \         P                  ! SP                  R R7      ;_uu_ 4       p \        SP                  4       F  w  rV P                  W4       K  	  SP                  4       G Rj  xL
  RRR4       R#  L  + '       g   i     R# ; i5i)F)end_on_exitN)r    start_as_current_spanr   r   	_chat_ctx	add_event
_main_task)spanrC   
attributesry   s      r=   _traceable_main_task0LLMStream.__init__.<locals>._traceable_main_task   sx     --++ (@(P$DNN44 )Qoo''' 
 (  s/   +BAB1B 2B6
B BB		BzLLM._main_taskc                8   < SP                   P                  4       # r   )	_event_chclose)_ry   s   &r=   <lambda>$LLMStream.__init__.<locals>.<lambda>   s    t~~/C/C/Er<   N)_llmr   _tools_conn_optionsr%   ChanrY   r   	itertoolstee
_tee_aiter_event_aiter_current_attempt_has_error_provider_request_idsasynciocreate_task_metrics_monitor_task_metrics_task_taskadd_done_callback_llm_request_span)ry   r   r   r   r   monitor_aiterr   s   f&$$$  r=   rw   LLMStream.__init__   s     	!)),.--++DNNA>+/??(=*/'02"$00&&}5<O
	( 	( (()=)?FVW


$$%EF48r<   c                   V ^8  d   QhRR/# rm   r5   )rq   s   "r=   rr   r      s    %%D%r<   c                	   "   R # 5ir   r5   r   s   &r=   _runLLMStream._run   s     "%r   c                   V ^8  d   QhRR/# rm   r5   )rq   s   "r=   rr   r      s     > >$ >r<   c           
     	  "   \         P                  ! 4       V n        V P                  P                  \        P
                  R \        P                  V P                  P                  \        P                  V P                  P                  /4       \        V P                  P                  ^,           4       F  p \        P                  ! R4      ;_uu_ 4       pVP!                  \        P"                  V4       . V n         V P'                  4       G Rj  xL
   T P$                  '       d+   TP!                  \        P.                  T P$                  4        RRR4        R# 	  R#  LQ  \(         d   p\*        P,                  ! Y#4       h Rp?ii ; i  T P$                  '       d,   TP!                  \        P.                  T P$                  4       i i ; i  + '       g   i     EK0  ; i  \0         Edm   p\3        T\4        4      '       d   TP6                  R8X  d    Rp? R# T P                  P9                  T4      pT P                  P                  ^ 8X  g   TP:                  '       g   T P=                  TRR7       h YP                  P                  8X  d?   T P=                  TRR7       \?        RT P                  P                  ^,            R24      ThT P=                  TRR7       \@        PB                  ! R	T R
T R2RT P                  PD                  RT^,           /R7       T^ 8  d    \F        PH                  ! T4      G Rj  xL 
  RT n%         Rp?EK  Rp?i\(         d   pT P=                  TRR7       h Rp?ii ; i5i)r   llm_request_runNi  F)rg   z(failed to generate LLM completion after z	 attemptsTz#failed to generate LLM completion: z, retrying in sr   attempt)rG   )&r   get_current_spanr   set_attributesr   ATTR_GEN_AI_OPERATION_NAMEATTR_GEN_AI_PROVIDER_NAMEr   r   ATTR_GEN_AI_REQUEST_MODELr   ranger   	max_retryr    r   set_attributeATTR_RETRY_COUNTr   r   rd   telemetry_utilsrecord_exceptionATTR_PROVIDER_REQUEST_IDSr   
isinstancer   status_code_interval_for_retry	retryable_emit_errorr   r   warningrx   r   sleepr   )ry   iattempt_spaneretry_intervals   &    r=   r   LLMStream._main_task   s    !&!7!7!9--6655tyy7I7I55tyy	
 t))33a78A3112CDD ..{/K/KQO 24D.	"iik))
  555(66 + E EtGaGa  ED 9 *$ '88I  555(66 + E EtGaGa 6 EDD   8a00Q]]c5I!%!3!3!G!G!J%%//14AKKK$$QE$:,,666$$QE$:,B4CUCUC_C_bcCcBddmn
 $$QD$9NN=aS~N^^_`!499#3#3%q1u "A%!--777 38//    6s   B7N:G)(GE(E&
E(G,+GG)N&E((F	3F
	
F	F?G	GG&G)#N&G))N5'MN#AM+CMM	MNN)N*M>>NNc               $    V ^8  d   QhRRRRRR/# )rn   	api_errorrd   rg   rf   ro   rp   r5   )rq   s   "r=   rr   r     s!     

 

Y 

T 

d 

r<   c           
     	    R V n         V P                  P                  R\        \        P                  ! 4       V P                  P
                  VVR7      4       R# )Tre   )ra   rb   re   rg   N)r   r   emitr]   timerx   )ry   r  rg   s   &&&r=   r   LLMStream._emit_error  sA    *.'		))+ii&&'		
r<   r   c                    V ^8  d   QhRRRR/# )rn   event_aiterzAsyncIterable[ChatChunk]ro   rp   r5   )rq   s   "r=   rr   r     s      W5 W57O W5TX W5r<   c                	 	  "   \         P                  ! 4       pRpRpRpRp. pRpV  Rj  xL
  p	V	P                  pV'       d,   W@P                  9  d   V P                  P	                  V4       VR8X  dO   \         P                  ! 4       V,
          p\
        P                  ! \        P                  4      P                  4       pV	P                  '       dz   V	P                  P                  '       d   WiP                  P                  ,          pV	P                  P                  '       d&   VP                  V	P                  P                  4       V	P                  f   EK:  V	P                  pEKI   ELEEDG\         P                  ! 4       T,
          p
T P                  '       g   T^ 8  d   R# \!        \         P                   ! 4       TTT
T P"                  P%                  4       T P&                  P(                  T'       d   TP*                  M^ T'       d   TP,                  M^ T'       d   TP.                  M^ T'       d   TP0                  M^ T'       d   TP*                  T
,          MR\3        T P&                  P4                  T P&                  P6                  R7      R7      pT P8                  '       Ed   T P8                  P;                  \<        P>                  TPA                  4       4       T P8                  PC                  \<        PD                  R\<        PF                  T P&                  P4                  \<        PH                  T P&                  P6                  \<        PJ                  TP,                  \<        PL                  TP*                  /4       T'       d/   T P8                  P;                  \<        PN                  RT R24       RR	/pT'       d   YlR
&   T'       dX   T Uu. uFA  p\P        PR                  ! RRTPT                  RTPV                  /RTPX                  RR/4      NKC  	  Mu upi upTR&   T P8                  P[                  \<        P\                  T4       T P&                  P_                  RT4       R# 5i)g      ?rJ   Ng        )
model_namemodel_provider)ra   
request_idttftduration	cancelledrb   r-   r.   r/   r2   tokens_per_secondmetadatar   "rV   	assistantrW   r@   rC   rD   rZ   rA   rO   metrics_collectedg      )0r  perf_counterrZ   r   appendr   nowr	   utc	isoformatr[   rW   rO   extendrQ   r   r   r   r  r   rx   r-   r.   r/   r2   r   r   r   r   r   r   ATTR_LLM_METRICSmodel_dump_jsonr   r   r   r   ATTR_GEN_AI_USAGE_INPUT_TOKENSATTR_GEN_AI_USAGE_OUTPUT_TOKENS#ATTR_LANGFUSE_COMPLETION_START_TIMEjsondumpsrC   rD   rE   r   EVENT_GEN_AI_CHOICEr  )ry   r  
start_timer  r  rQ   response_contentrO   completion_start_timeevr  metricscompletion_event_body	tool_calls   &&            r=   r   LLMStream._metrics_monitor_task  s`    &&(

(,-/
,0# 	! 	!"Jj0J0JJ**11*=t|((*Z7(0X\\(B(L(L(N%xxx88###$(8(88$88&&&%%bhh&9&9:xx#	!" $$&3 ***dQhiik!jj**,))""9>e55A16%--A?D!;!;!/4++!DIe55@s99??#yy11
" !!!""00,,g.E.E.G
 ""11::F99499??99499;M;M>>@U@U??AZAZ %&&44CCqI^H__`Ea AG?T!3Ci0 &0	7 &0	 JJ&iNaNa(b )"3"3"J &0	7%l3 "",,[-L-LNcd		*G4s~   $Q>E2E/E2B'Q>Q>27Q>*0Q> Q>/E22/Q>"A/Q>Q>'Q><Q>EQ>9Q>Q>Q>#AP+*AQ>c                   V ^8  d   QhRR/# )rn   ro   r&   r5   )rq   s   "r=   rr   r   t  s      + r<   c                	    V P                   # r   )r   r   s   &r=   r   LLMStream.chat_ctxs  s    ~~r<   c                   V ^8  d   QhRR/# )rn   ro   r   r5   )rq   s   "r=   rr   r   x  s      z r<   c                	    V P                   # r   )r   r   s   &r=   r   LLMStream.toolsw  r   r<   c                   V ^8  d   QhRR/# rm   r5   )rq   s   "r=   rr   r   {  s     ' 'd 'r<   c                	<  "   \         P                  ! V P                  4      G R j  xL
  V P                  G R j  xL
  V P                  '       d"   V P                  P                  4        R V n        V P                  P                  4       G R j  xL
  R #  Lo L] L
5ir   )r%   cancel_and_waitr   r   r   endr   r   r   s   &r=   r   LLMStream.aclose{  su     !!$**---    !!!""&&(%)D"oo$$&&& 	. 
 	's7   $BBBBB>BBBBBc                   V ^8  d   QhRR/# )rn   ro   rY   r5   )rq   s   "r=   rr   r     s     	 	 	r<   c                	  "    V P                   P                  4       G R j  xL
 pV#  L  \         dM    T P                  P	                  4       '       g%   T P                  P                  4       ;p'       d   Th\        R hi ; i5ir   )r   	__anext__StopAsyncIterationr   r  	exception)ry   valr   s   &  r=   r;  LLMStream.__anext__  sr     	/))3355C 
 6! 	/::''))djj6J6J6L/Ls/L	$$.		/s1   B* (* B* *B!B7
BBc                   V ^8  d   QhRR/# )rn   ro   zAsyncIterator[ChatChunk]r5   )rq   s   "r=   rr   r     s      3 r<   c                	    V # r   r5   r   s   &r=   	__aiter__LLMStream.__aiter__  s    r<   c                   V ^8  d   QhRR/# )rn   ro   r   r5   )rq   s   "r=   rr   r     s      ) r<   c                	   "   V # 5ir   r5   r   s   &r=   r   LLMStream.__aenter__  r   r   c               (    V ^8  d   QhRRRRRRRR/# r   r5   )rq   s   "r=   rr   r     r   r<   c                	B   "   V P                  4       G R j  xL
  R #  L5ir   r   r   s   &&&&r=   r   LLMStream.__aexit__  r   r   c                   V ^8  d   QhRR/# rn   ro   zAsyncIterable[str]r5   )rq   s   "r=   rr   r     s      !3 r<   c                $   a  R V 3R llpV! 4       # )zi
Convert the LLMStream to an async iterable of strings.
This assumes the stream will not call any tools.
c                   V ^8  d   QhRR/# rK  r5   )rq   s   "r=   rr   /LLMStream.to_str_iterable.<locals>.__annotate__  s     	2 	2!3 	2r<   c                N  <"   S;_uu_4       GR j  xL
  S  R j  xL
  p V P                   '       g   K  V P                   P                  '       g   K<  V P                   P                  5x  KW   L] LTDUR R R 4      GR j  xL 
  R #   + GR j  xL 
 '       g   i     R # ; i5ir   )r[   rW   )chunkry   s    r=   	_iterable,LLMStream.to_str_iterable.<locals>._iterable  s_     tt#' 2 2%{{{u{{':':':#kk111 24 tttttsu   B%A0B%BA4A2
A4BBB0B%2A44B5B% BB%B"	B
B"	B"		B%r5   )ry   rQ  s   f r=   to_str_iterableLLMStream.to_str_iterable  s    	2 	2 {r<   c                   V ^8  d   QhRR/# )rn   ro   rI   r5   )rq   s   "r=   rr   r     s     &
 &
0 &
r<   c                  "   . p. pRp/ pT ;_uu_4       GRj  xL
  V   Rj  xL
  pVP                   '       d   VP                   P                  '       d&   VP                  VP                   P                  4       VP                   P                  '       d&   VP	                  VP                   P                  4       VP                   P
                  '       d&   VP                  VP                   P
                  4       VP                  f   K  VP                  pK   EL LDRRR4      GRj  xL 
  M  + GRj  xL 
 '       g   i     M; i\        RP                  T4      P                  4       TTTR7      # 5i)a  Collect the entire stream into a single response.

Example:
    ```python
    from livekit.agents import llm

    response = await my_llm.chat(chat_ctx=ctx, tools=tools).collect()

    for tc in response.tool_calls:
        result = await llm.execute_function_call(tc, tool_ctx)
        ctx.insert(result.fnc_call)
        if result.fnc_call_out:
            ctx.insert(result.fnc_call_out)
    ```
NrJ   )rK   rO   rQ   rG   )r[   rW   r  rO   r  rG   updaterQ   rI   joinstrip)ry   
text_partsrO   rQ   rG   rP  s   &     r=   collectLLMStream.collect  s      !#
-/
(, "44# 	( 	(e;;;{{***"))%++*=*=>{{---"))%++*@*@A{{(((U[[%6%67;;*!KKE 	(t 44444 !$**,!	
 	
s   E=DE=D5D"D 
D"/D5A D5A D50D5D5E= D""D5#E=.D1/E=5E	;D><
E	E		4E=)r   r   r   r   r   r   r   r   r   r   r   r   N)r6   r7   r8   r9   r   r:   rw   r   r   r   r   r   log_exceptionsr   r   r   r   r   r   r;  rB  r   r   rS  r[  r;   r5   r<   r=   r   r      s    ,9M9!9F % %>@

 (W5 )W5r    '	&
 &
r<   r   )r  re   )E
__future__r   r   r#  r  abcr   r   collections.abcr   r   r   r	   typesr
   typingr   r   r   r   r   opentelemetryr   opentelemetry.util.typesr   pydanticr   r   r   livekitr   livekit.agents.metrics.baser   rJ   r   _exceptionsr   r   r   logr   r*  r   	telemetryr   r   r    r   r!   r"   r#   r$   r%   chat_contextr&   r'   tool_contextr(   r)   r+   r?   rI   rU   rY   r]   ri   EventEmitterrk   r   r5   r<   r=   <module>rn     s    "    # 8 '  ; ;  3 1 1  0  F F    _ _   / *Ki K$Jy JC	 CJ) J)	 )y  
	@W9:VCDFO@Fm
 m
r<   