+
    ~j{Y                       ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIH	t	 ^ RI
HtHtHtHtHtHtHtHt ^ RIt^ RIHtHtHt ^ RIHtHt ^ RIHtHt ^ R	IHt ^ R
IH t  ^RI!H"t" ^RI#H$t$ ^RI%H&t& ^RI'H(t(H)t) ^RI*H+t+H,t,H-t- ]'       d   ^RI.H/t/ ^RI'H0t0H1t1 ^RI2H3t3 ^RI*H4t4 Rt5Rt6R R lt7]	 ! R R4      4       t8R R lt9RR/R R llt:]	 ! R  R!4      4       t;R"R#/R$ R% llt<R&R/R' R( llt=R) R* lt>]! R+RR,7      t?R- R. lt@R/ R0 ltAR1 R2 ltBR3 R4 ltCR5R/R6 R7 lltDR8 R9 ltER:R/R; R< lltFR= R> ltGR? R@ ltH]	 ! RA RB4      4       tIRC RD ltJR5R/RE RF lltKR# )G    )annotationsN)Callable)	dataclass)TYPE_CHECKING	AnnotatedAnyUnioncastget_args
get_originget_type_hints)	BaseModelTypeAdaptercreate_model)Field	FieldInfo)PydanticUndefined	from_json)TypeVar)rtc)logger)images)_strict)ChatContextImageContent)FunctionToolRawFunctionTool	ToolError
RunContextFunctionCallFunctionCallOutput)FunctionToolCall)ToolContextz<think>z</think>c               $    V ^8  d   QhRRRRRR/# )   old_ids	list[str]new_idsreturn )formats   "m/Users/mitch_tango/dev/rabbit-r1-livekit/agent/.venv/lib/python3.14/site-packages/livekit/agents/llm/utils.py__annotate__r/   ,   s!     # #) #i #I #    c                   \        V 4      \        V4      r2\        V^,           4       Uu. uF  p^ .V^,           ,          NK  	  pp\        ^V^,           4       F  p\        ^V^,           4       F  pW^,
          ,          W^,
          ,          8X  d0   WV^,
          ,          V^,
          ,          ^,           WV,          V&   KS  \        WV^,
          ,          V,          WV,          V^,
          ,          4      WV,          V&   K  	  K  	  . pY#rvV^ 8  d   V^ 8  d   W^,
          ,          W^,
          ,          8X  d3   VP                  W^,
          ,          4       V^,          pV^,          pKa  WV^,
          ,          V,          WV,          V^,
          ,          8  d   V^,          pK  V^,          pK  \	        \        V4      4      # u upi )z{
Standard dynamic-programming LCS to get the common subsequence
of IDs (in order) that appear in both old_ids and new_ids.
)lenrangemaxappendlistreversed)	r(   r*   nm_dpijlcs_idss	   &&       r.   _compute_lcsr?   ,   sR   
 w<Wq!&q1u	.A1#Q--B	. 1a!e_q!a%A1u~Q/!e9QU+a/ara%y|RU1q5\:a	 !  Gq
a%AEq5>WU^+NN7q5>*FAFAAYq\BE!a%L(FAFA!""/ 
/s   Gc                  6    ] tR t^Lt$ R]R&   R]R&   R]R&   RtR# )DiffOpsr)   	to_removezlist[tuple[str | None, str]]	to_create	to_updater,   N__name__
__module____qualname____firstlineno____annotations____static_attributes__r,   r0   r.   rA   rA   L   s      r0   rA   c               $    V ^8  d   QhRRRRRR/# )r'   old_ctxr   new_ctxr+   rA   r,   )r-   s   "r.   r/   r/   W   s&     R R; R R Rr0   c                0   V P                    Uu. uF  q"P                  NK  	  ppVP                    Uu. uF  q"P                  NK  	  pp\        \        W44      4      pV P                    Uu/ uF  qfP                  VbK  	  ppV P                    Uu. uF!  qP                  V9  g   K  VP                  NK#  	  p	p. p
. pRpVP                    F  pVP                  V9  d   V
P	                  WP                  34       MkW}P                  ,          pVP
                  R8X  dI   VP
                  R8X  d8   VP                  VP                  8w  d   VP	                  WP                  34       VP                  pK  	  \        WVR7      # u upi u upi u upi u upi )zXComputes the minimal list of create/remove operations to transform old_ctx into new_ctx.Nmessage)rB   rC   rD   )itemsidsetr?   r5   typetext_contentrA   )rM   rN   r9   r(   r*   r>   itemold_ctx_by_idmsgrB   rC   rD   prev_idnew_msgold_msgs   &&             r.   compute_chat_ctx_diffr\   W   sB    %]]+]tt]G+$]]+]tt]G+,w01G/6}}=}tWWd]}M=#*==J=CFF'4I=IJ.0I.0IG==::W$gzz23 $JJ/G||y(W\\Y-F''7+?+??$$gzz%:; ** ! YyQQ1 ,+ >Js   FF	+FF'Fallow_subclassesFc               $    V ^8  d   QhRRRRRR/# )r'   tyrT   r]   boolr+   r,   )r-   s   "r.   r/   r/   v   s!       4 D r0   c                   ^RI Hp \        V 4      pV'       g   WJ ;'       g    W2J # Ve    \        W24      #  \        W4      #   \         d     R# i ; i  \         d     R# i ; i)r'   r   F)voice.eventsr    r   
issubclass	TypeError)r_   r]   r    origins   &$  r.   is_context_typerf   v   sr    )^F776#77	f11"))	  		
  s"   
A 
A AAA%$A%c                  H    ] tR t^t$ R]R&   R]R&   RtR]R&   RtR]R&   R	tR# )
SerializedImagestrinference_detail
str | None	mime_typeNzbytes | None
data_bytesexternal_urlr,   )rF   rG   rH   rI   rJ   rm   rn   rK   r,   r0   r.   rh   rh      s"    #J##L*#r0   rh   	use_cacheTc               $    V ^8  d   QhRRRRRR/# )r'   imager   ro   r`   r+   rh   r,   )r-   s   "r.   r/   r/      s!     9 9< 9t 9 9r0   c                  R pV'       d2   W P                   9   d"   \        \        V P                   V,          4      # \        V P                  \
        4      '       Ed=   V P                  P                  R4      '       d   V P                  P                  R^4      w  r4\        P                  ! V4      pVP                  R4      ^ ,          P                  R4      ^,          pV P                  '       dF   V P                  V8w  d5   \        P                  ! RV P                   RV R24       V P                  pMTp0 RmpWx9  d   \        R	V R
24      h\        VVV P                  R7      p	EM\        V P                  V P                  V P                  R7      p	M\        V P                  \        P                   4      '       d   \"        P$                  ! 4       p
V P&                  '       dE   V P(                  '       d3   \"        P*                  ! V P&                  V P(                  RR7      V
n        \"        P.                  ! V P                  V
4      p\        VRV P                  R7      p	M\        R4      hV'       d   WP                   V&   V	# )serialized_imagezdata:,;:zProvided mime_type 'z9' does not match data URL mime type
                    'z'. Using provided mime_type.
image/jpegzUnsupported mime_type z!. Must be jpeg, png, webp, or gif)rm   rl   rj   )rl   rj   rn   scale_aspect_fit)widthheightstrategyzUnsupported image type>   	image/gif	image/pngrw   
image/webp)_cacher
   rh   
isinstancerq   ri   
startswithsplitbase64	b64decoderl   r   warning
ValueErrorrj   r   
VideoFramer   EncodeOptionsinference_widthinference_heightResizeOptionsresize_optionsencode)rq   ro   	cache_keyheaderb64_dataencoded_dataheader_mimerl   supported_typesrs   optss   &$         r.   serialize_imager      s   "IY,,.OU\\)%<== %++s##;;!!'**${{00a8F!++H5L ,,s+A.44S9!<K5??k#A,U__,= >!]">B "OO	'	TO/ ,YK7XY   /'#!&!7!7   ///!&!7!7"[[  
EKK	0	0##%   U%;%;%;"("6"6++--+#D
 }}U[[$7*#""33
 122"2Yr0   internally_taggedc               $    V ^8  d   QhRRRRRR/# )r'   function_toolr   r   r`   r+   dict[str, Any]r,   )r-   s   "r.   r/   r/      s$     
 

7;

r0   c          	        \        V 4      pV P                  pVP                  4       pV'       d)   RVP                  RVP                  ;'       g    RRVRR/# RRRRVP                  RVP                  ;'       g    RRV//# )zxnon-strict mode tool description
see https://serde.rs/enum-representations.html for the internally tagged representationnamedescription 
parametersrT   function)$function_arguments_to_pydantic_modelinfomodel_json_schemar   r   )r   r   modelr   schemas   &$   r.   build_legacy_openai_schemar      s    
 1?ED$$&FDII4++11r&J	
 	
 J		t//552f
 	
r0   c                    V ^8  d   QhRRRR/# )r'   r   r   r+   r   r,   )r-   s   "r.   r/   r/      s      r0   c                    \        V 4      pV P                  p\        P                  ! V4      pRRRRVP                  RRRVP
                  ;'       g    RRV//# )	zstrict mode tool descriptionrT   r   r   strictTr   r   r   )r   r   r   to_strict_json_schemar   r   )r   r   r   r   s   &   r.   build_strict_openai_schemar      sh     1?ED**51F 	
DIId4++11r&	
 r0   ResponseFormatT)defaultc                    V ^8  d   QhRRRR/# )r'   clsz
type | Anyr+   r`   r,   )r-   s   "r.   r/   r/      s     _ _z _d _r0   c                z    \        V \        4      ;'       d%    \        V \        4      ;'       d    \	        V R 4      # )rJ   )r   rT   rc   dicthasattr)r   s   &r.   is_typed_dictr      s.    c4 ^^ZT%:^^wsL]?^^r0   c                    V ^8  d   QhRRRR/# )r'   response_formattype | dict[str, Any]r+   z.tuple[str, type[BaseModel] | TypeAdapter[Any]]r,   )r-   s   "r.   r/   r/     s     " "*"3"r0   c                t   \        V \        4      '       d.   V P                  R R4      R9  d   \        R4      h\        R4      h\	        V 4      '       dE   \        V P                  3/ V P                  P                  4        UUu/ uF	  w  rWR3bK  	  uppB p Rp\        P                  ! V 4      '       d(   \        V \        4      '       d   V P                  pT pWC3# \        P                  ! V 4      '       d-   \        V R4      '       d   V P                  p\        V 4      pWC3# \        RV  24      hu uppi )rT   r   z Unsupported response_format type.N__pydantic_config__z#Unsupported response_format type - )textjson_schemajson_object)r   r   getrd   r   r   rF   rJ   rQ   inspectisclassrc   r   r   r   )r   kvjson_schema_typer   s   &    r.   to_response_format_paramr     s4    /4((vr*2XX>?? :;; _%%&$$
'6'F'F'L'L'NO'Ntqqc({'NO
 CG''J	,R,R''* !! 
	)	)g./ / ''&7 !! =o=NOPP Ps   D4c                    V ^8  d   QhRRRR/# )r'   r   r   r+   r   r,   )r-   s   "r.   r/   r/   (  s      /D  r0   c           	     `    \        V 4      w  r\        P                  ! V4      pR RRRVRVRR//# )rT   r   r   r   r   T)r   r   r   )r   r   r   r   s   &   r.   to_openai_response_formatr   (  sF    5oFD**+;<FfDd
 r0   c                    V ^8  d   QhRRRR/# )r'   funczCallable[..., Any]r+   ztype[BaseModel]r,   )r-   s   "r.   r/   r/   6  s     <. <./A <.o <.r0   c                   ^ RI Hp V P                  P                  R4      pRP	                  R V 4       4      pVR,           pV! V 4      pVP
                   Uu/ uF  qfP                  VP                  bK  	  pp\        P                  ! V 4      p\        V RR7      p	/ p
VP                  P                  4        EF{  w  rW,          p\        VRR7      '       d   K#  VP                  VP                  Jd   VP                  MR	pR
p/ p\!        V4      \"        J d   \%        V4      pV^ ,          p\'        R VR,           4       R
4      pV'       d+   \)        VR4      '       d   VP+                  4       R,          pM(V'       d!   VP                  VR&   VP                  VR&   TpVR	Jd$   VP-                  R\.        4      \.        J d   VVR&   VP-                  R4      f   VP-                  VR
4      VR&   V'       g   \1        R/ VB pM'VP                  4        F  w  pp\3        VVV4       K  	  W3W&   EK~  	  \5        V3/ V
B # u upi )zNCreate a Pydantic model from a function's signature. (excluding context types))parse_from_objectr:   r   c              3  @   "   T F  qP                  4       x  K  	  R # 5iN)
capitalize.0xs   & r.   	<genexpr>7function_arguments_to_pydantic_model.<locals>.<genexpr><  s     9y!||~~ys   ArgsTinclude_extrasr]   .Nc              3  V   "   T F  p\        V\        4      '       g   K  Vx  K!  	  R # 5ir   )r   r   r   s   & r.   r   r   W  s     K.q*Q	2J.s   )
):   NNasdict
attributesr   r   r,   )docstring_parserr   rF   r   joinparamsarg_namer   r   	signaturer   r   rQ   rf   r   emptyr   r   r   nextr   r   r   r   r   setattrr   )r   r   	fnc_namesfnc_name
model_name	docstringp
param_docsr   
type_hintsfields
param_nameparam	type_hintdefault_value
field_infofield_attrsannotated_argsannotated_fieldr   r   s   &                    r.   r   r   6  s    3##C(Iww9y99HF"J!$'I5>5E5EF5E**amm+5EJF!!$'IT:J  F&11779
*	9t<<).ekk)Is'+
&( i I-%i0N&q)I"KN2.KTO 7?H#E#E-446|D )8)@)@I&-<-H-HM*,
 $	+<=ARR%2K	"??=)1)3
D)IK&--J#))+1
Aq) , (4Q :T 
-f--e Gs   Icall_ctxc               (    V ^8  d   QhRRRRRRRR/# )	r'   fnczFunctionTool | RawFunctionTooljson_argumentszstr | dict[str, Any]r   RunContext[Any] | Noner+   z&tuple[tuple[Any, ...], dict[str, Any]]r,   )r-   s   "r.   r/   r/   u  s8     U$ U$	'U$ )U$ %	U$
 ,U$r0   c                   \         P                  ! V 4      p\        V RR7      p\        V\        4      '       dy   \        V4      p\        V\        4      '       d    \        V4      pK$  Vf   / pMD\        V\        4      '       g,   \        R\        V4      P                   RVR,           24      hMTp\        V \        4      '       d   \        V 4      pVP                  P                  4        Fy  w  rxWG,          p	Wu9   g   K  WW,          e   K!  \        V	4      '       d   K4  VP                   \         P"                  P$                  Jd   VP                   WW&   Kl  \        RV R	24      h	  VP'                  V4      p
\)        V
4      pM2\        V \*        4      '       d   R
V/pM\        R\        V 4       24      h/ pVP                  P                  4        F  w  r}WG,          p	\-        V	RR7      '       d   Vf   K&  \/        V	4      ;'       g    T	p\        W.4      '       d   W,V&   KR  \0        P2                  ! RV RVP                   R\        V4      P                   24       K  	  VP4                  ! R/ / VCVCB pVP7                  4        VP8                  VP:                  3#   \         d    \        RTR,           24      Rhi ; i)zp
Create the positional and keyword arguments to call a function tool from
the raw function output from the LLM.
Tr   z1function arguments decoded to a non-JSON string: :N   NNz+expected dict from function arguments, got z: z*Received no value for required parameter 'z<': this argument cannot be None and no default is available.raw_argumentsz Unsupported function tool type: r   z%context type mismatch for parameter 'z': expected z, got r,   )r   r   r   r   ri   r   	Exceptionr   r   rT   rF   r   r   r   rQ   _is_optional_typer   	Parameterr   model_validate_shallow_model_dumpr   rf   r   r   errorbindapply_defaultsargskwargs)r   r   r   r   r   	args_dict
model_typer   r   r   r   
raw_fieldscontext_dictr:   expected_typebounds   $$$             r.   prepare_function_argumentsr	  u  s    !!#&ID9J.#&&n-	 C((%i0	 IIt,,I//0>$3G2HJ  - #	#|$$9#>
 "+!5!5!;!;!=J".I&9+@+H(33}}G,=,=,C,CC05	-(H UX X  "> )))4(/
	C	)	) Y

 ;DI;GHH L"--335
*	y4@@HDT"9-::h..'/$LL7
| D)2236$x.:Q:Q9RT 6 NN<;
;l;<E	::u||##A   G	RVGXYs   J' '"K	c                    V ^8  d   QhRRRR/# )r'   hintr   r+   r`   r,   )r-   s   "r.   r/   r/     s     	5 	5C 	5D 	5r0   c                    \        V 4      \        J d   \        V 4      ^ ,          p \        V 4      pV\        J pT;'       g    V\        P
                  J pT;'       d    \        R4      \        V 4      9   # )r   N)r   r   r   r	   types	UnionTyperT   )r  re   is_unions   &  r.   r   r     sa    $9$~a FH446U__4H44T
htn44r0   by_aliasc               $    V ^8  d   QhRRRRRR/# )r'   r   r   r  r`   r+   r   r,   )r-   s   "r.   r/   r/     s!      y t  r0   c                   / pV P                   P                  P                  4        F:  w  r4V'       d   VP                  '       d   VP                  MTp\	        W4      W%&   K<  	  V# r   )	__class__model_fieldsrQ   aliasgetattr)r   r  resultr   fieldkeys   &$    r.   r   r     sN    F3399;%%+++ekk4e* < Mr0   c               $    V ^8  d   QhRRRRRR/# )r'   contentrk   thinkingzasyncio.Eventr+   r,   )r-   s   "r.   r/   r/     s!      :  : r0   c                \   V f   R # VP                  4       '       dL   V P                  \        4      pV^ 8  d+   VP                  4        W\	        \        4      ,           R  p V # R p  V # V P                  \
        4      pV^ 8  d)   VP                  4        W\	        \
        4      ,           R  p V # r   )is_setfindTHINK_TAG_ENDclearr2   THINK_TAG_STARTrS   )r  r  idxs   && r.   strip_thinking_tokensr$    s    ll=)!8NNC$6689G N G N ll?+!8LLNC$88:;GNr0   c                    V ^8  d   QhRRRR/# )r'   valuer   r+   r`   r,   )r-   s   "r.   r/   r/     s      S T r0   c                j  a \         \        \        \        \        \        R 4      3o\        V S4      '       d   R# \        V \        4      '       gC   \        V \        4      '       g-   \        V \        4      '       g   \        V \        4      '       d5   \        ;QJ d    R V  4       F  '       d   K   R# 	  R# ! R V  4       4      # \        V \        4      '       dW   \        ;QJ d-    V3R lV P                  4        4       F  '       d   K   R# 	  R# ! V3R lV P                  4        4       4      # R# )NTc              3  8   "   T F  p\        V4      x  K  	  R # 5ir   )_is_valid_function_output)r   rV   s   & r.   r   ,_is_valid_function_output.<locals>.<genexpr>   s     Eut,T22us   Fc              3  f   <"   T F&  w  r\        VS4      ;'       d    \        V4      x  K(  	  R # 5ir   )r   r)  )r   r  valVALID_TYPESs   &  r.   r   r*    s2      
) sK(KK-Fs-KK)s   11)ri   intfloatr`   complexrT   r   r6   rS   	frozensettupleallr   rQ   )r&  r-  s   &@r.   r)  r)    s    UD'4:>K%%%5$eS!!eY''eU##sEuEssEsEsEuEEE	E4	 	 s 
!KKM
ss 	
s 	
s 
!KKM
 
 	
 r0   c                  @    ] tR tRt$ R]R&   R]R&   R]R&   R]R	&   R
tR# )FunctionCallResulti	  r"   fnc_callzFunctionCallOutput | Nonefnc_call_outr   
raw_outputBaseException | Noneraw_exceptionr,   NrE   r,   r0   r.   r5  r5  	  s    ++O''r0   r5  c               (    V ^8  d   QhRRRRRRRR/# )	r'   r6  r"   outputr   	exceptionr9  r+   r5  r,   )r-   s   "r.   r/   r/     s8     F FF F $	F
 Fr0   c                   ^RI Hp ^RIHpHp \        V\        4      '       d   TpRp\        W%4      '       d8   \        V V! V P                  V P                  VP                  RR7      VVR7      # \        W$4      '       d   \        V RVVR7      # Ve.   \        V V! V P                  V P                  RRR7      VVR7      # \        V4      '       gD   \        P                  ! RV P                   R	2R
V P                  RV/R7       \        V RVRR7      # \        T T! V P                  V P                  \        T;'       g    R4      RR7      VRR7      # )zNCreate a FunctionCallResult, handling ToolError, StopResponse, and validation.)r#   )StopResponser   NTr   call_idr<  is_errorr6  r7  r8  r:  zAn internal error occurredzAI function `z` returned an invalid outputrA  r<  extrar   F)chat_contextr#   tool_contextr?  r   r   BaseExceptionr5  r   rA  rP   r)  r   r   ri   )r6  r<  r=  r#   r?  r   s   $$$   r.   make_function_call_outputrI    sf    15&-((	)''!+]] (( ((	 #

 
	
 )**!#	
 	
 !+]] ((3	 #

 
	
 %V,,HMM?*FGh..&A	
 "	
 	
 '$$v||$	
 
 
r0   c               (    V ^8  d   QhRRRRRRRR/# )	r'   	tool_callr$   tool_ctxr%   r   r   r+   r5  r,   )r-   s   "r.   r/   r/   Z  s<     BV BVBVBV %	BV
 BVr0   c          
     T  "   ^RI HpHp T! V P                  V P                  V P
                  ;'       g    RV P                  ;'       g    / R7      pVP                  P                  V P                  4      pVfu   \        P                  ! RV P                   R24       \        VV! V P                  V P                  RV P                   2RR	7      R\        RV P                   24      R
7      #  \        TV P
                  ;'       g    RVR7      w  rx T! T/ TB p\(        P*                  ! T4      '       d   TG Rj  xL
 p\#        Y[RR7      #   \        P                  \        3 dt   p	\        P                  ! RT P                   RT	 2RT P                  RT P
                  /R7       \!        RT P                   RT	 24      p
\#        TRT
R7      u Rp	?	# Rp	?	i\$         dW   p	\        P&                  ! RT P                   R2RT P                  RT P
                  /R7       \#        TRT	R7      u Rp	?	# Rp	?	ii ; i EL  \$         dW   p	\        P&                  ! RT P                   R2RT P                  RT P
                  /R7       \#        TRT	R7      u Rp	?	# Rp	?	ii ; i5i)z3Execute a function tool call and return the result.r!   z{})rA  r   	argumentsrE  Nzunknown AI function ``zUnknown function: Tr@  rC  )r   r   r   z#invalid arguments for AI function `z`: rA  rN  rD  zError parsing arguments for `)r6  r<  r=  z/exception preparing arguments for AI function `z!exception executing AI function `)rF  r"   r#   rA  r   rN  rE  function_toolsr   r   r   r5  r   r	  pydanticValidationErrorr   rI  r   r=  asyncioiscoroutine)rK  rL  r   r"   r#   r6  r   fnc_args
fnc_kwargse
tool_errorr  s   &&$         r.   execute_function_callrY  Z  sy     ?!!^^%%--oo##	H ++//	?M.y~~.>a@A!+^^!))+INN+;<	 $'9)..9I%JK

 
	
V9$..66$ 
,V7J7v&&!\F((UYZZ- $$j1 	_ 	1)..1AQCHi//i>Q>QR	
 !>y~~>NcRSQTUV
((4S]^^ V=inn=MQOi//i>Q>QR	
 )(4STUUV "  V/	/?qAi//i>Q>QR	
 )(4STUUVs   AJ(B%J(1E 
E #I :I ?I I J(H>,A(GH>J(H>'H>(AH93H>4J(9H>>J(I J%AJ J%J( J%%J()L
__future__r   rS  r   r   r  collections.abcr   dataclassesr   typingr   r   r   r	   r
   r   r   r   rQ  r   r   r   pydantic.fieldsr   r   pydantic_corer   r   typing_extensionsr   livekitr   logr   utilsr   r   r   rF  r   r   rG  r   r   r   rb   r    r"   r#   llmr$   r%   r"  r   r?   rA   r\   rf   rh   r   r   r   r   r   r   r   r   r	  r   r   r$  r)  r5  rI  rY  r,   r0   r.   <module>re     sa   "     $ !	 	 	  9 9 , 6 %     3 B B)>%)#@   R>% ( $ $ $9d 9x
>C
6& +T:_"B<.~U$ (,	U$p	5e (( ( ( (FRBV (,	BV BVr0   