
    ^h0                        S SK r S SKrS SKrS SKJr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rS SKJr  S SKJr  S SKJr  S S	KJr  S S
K7  S SKJr  \(       a  S SKJr  O\	r " S S5      rS\ S\ S\ 4S jr!S r"S\ 4S jr#g)    N)MutableMappingMutableSequence
MutableSet)TYPE_CHECKINGAnyDictOptionalcast)Version)	BaseModel)verbose_logger)redact_user_api_key_info)_get_httpx_client)str_to_bool)*)StandardLoggingPayload)DynamicLoggingCachec                       \ rS rSr    SS jr\S\S\S\4S j5       r  SS\4S jjrS	 r	S
 r
S rS\S\4S jrS\\   S\4S jrS\4S jrS rSrg)LangFuseLogger   Nc                     SS K nSSK Jn  U=(       d    [
        R                  " S5      U l        U=(       d    [
        R                  " S5      U l        U=(       d    [
        R                  " SS	5      U l	        U R                  R                  S
5      (       d4  U R                  R                  S5      (       d  S
U R                  -   U l	        [
        R                  " S5      U l        [
        R                  " S5      U l        [
        R                  " S5      =(       d    UU l        [        5       nUR                  U l        U R                  U R                  U R                  U R                  U R                  U R                  U R                   S.n	[#        UR$                  R&                  5      [#        S5      :  a  SU	S'   U" S0 U	D6U l         U R                  R                  R(                  R+                  5       R,                  S   R.                  n
U
[
        R0                  S'   [
        R                  " S5      b  U R2                  b  [5        U R2                  5      OS n[
        R                  " S5      U l        [
        R                  " S5      U l        [
        R                  " S5      U l        [
        R                  " S5      U l        [
        R                  " S5      U l        U" U R8                  U R6                  U R:                  U R<                  Ub  UOSS9U l        g S U l        g ! [         a*  n[        SU S[        R                  " 5        S35      eS nAff = f! [         a    S n
 GNMf = f)Nr   )LangfusezS[91mLangfuse not installed, try running 'pip install langfuse' to fix this error: 
z[0mLANGFUSE_SECRET_KEYLANGFUSE_PUBLIC_KEYLANGFUSE_HOSTzhttps://cloud.langfuse.comzhttp://zhttps://LANGFUSE_RELEASELANGFUSE_DEBUGLANGFUSE_FLUSH_INTERVAL)
public_key
secret_keyhostreleasedebugflush_intervalhttpx_clientz2.6.0litellmsdk_integrationLANGFUSE_PROJECT_IDUPSTREAM_LANGFUSE_SECRET_KEYUPSTREAM_LANGFUSE_PUBLIC_KEYUPSTREAM_LANGFUSE_HOSTUPSTREAM_LANGFUSE_RELEASEUPSTREAM_LANGFUSE_DEBUGF)r    r!   r"   r#   r$    ) langfuser   	Exception	traceback
format_excosgetenvr!   r    langfuse_host
startswithlangfuse_releaselangfuse_debuglangfuse_flush_intervalr   clientlangfuse_clientr   version__version__projectsgetdataidenvironupstream_langfuse_debugr   upstream_langfuse_secret_keyupstream_langfuse_public_keyupstream_langfuse_hostupstream_langfuse_releaseupstream_langfuse)selflangfuse_public_keylangfuse_secretr6   r%   r0   r   ehttp_client
parameters
project_idrD   s               `/home/james-whalen/.local/lib/python3.13/site-packages/litellm/integrations/langfuse/langfuse.py__init__LangFuseLogger.__init__   s
   	) *MRYY7L-M-Q;P1Q* 
bii9/
 )))44!!,,Z88 "+T-?-?!?D "		*< = ii(89II/0BN 	$ ()*11 ////&&,,((":: 00

 8##//0GG4DD,5J() .:.	--66::<AA!DGGJ0:BJJ,- 9934@ //; D889 $
 13		.1D- 13		.1D- +-))4L*MD'-/YY7R-SD*+-995N+OD(%-<<<<0066 /: ,
&D" &*D"U  	hijhkkmnw  oC  oC  oE  nF  FM  N 	X  	J	s*   
L0 AM' 0
M$:%MM$'M76M7litellm_paramsmetadatareturnc                    U c  U$ U R                  S5      c  U$ Uc  0 nU R                  S0 5      R                  S0 5      =(       d    0 nU H{  nUR                  S5      (       d  M  UR                  SSS5      nXA;   a  [        R                  " SU S35        O[        R
                  " SU S	35        UR                  U5      X'   M}     U$ )
aL  
Adds metadata from proxy request headers to Langfuse logging if keys start with "langfuse_"
and overwrites litellm_params.metadata if already included.

For example if you want to append your trace to an existing `trace_id` via header, send
`headers: { ..., langfuse_existing_trace_id: your-existing-trace-id }` via proxy request.
proxy_server_requestheaders	langfuse_    zOverwriting Langfuse `z` from request headerzFound Langfuse `z` in request header)r@   r7   replacer   warningr$   )rT   rU   proxy_headersmetadata_param_keytrace_param_keys        rQ   add_metadata_from_header'LangFuseLogger.add_metadata_from_headerr   s     !O45=OH 5r:>>y"MSQS 	 #0!,,[99"4"<"<["a"P"."**00AAVW #((*?*;;NO -:,=,=>P,Q) #0     c	                 p    U" SU 35        S n	S n
UR                  S0 5      nUR                  SS 5      nUR                  S0 5      =(       d    0 nU R                  X5      n[        R                  " UR                  S0 5      5      nSUR                  S5      0nUR	                  SS 5      nUR	                  SS 5      nUb  UUS'   Ub  UUS'   UR                  5        H<  u  nn[        U[        [        [        [        45      (       a  M-   [        U5      UU'   M>     US	:X  a  Ub  [        U[        5      (       a  Un	Un
GOUb;  UR                  S
S 5      S:X  d  [        U[        R                  5      (       a  Un	S n
GOUb<  [        U[        R                  5      (       a  Un	US   S   S   R                  5       n
GOUb%  [        U[        R                   5      (       a  Un	Sn
GOkUb<  [        U[        R"                  5      (       a  Un	UR$                  S   R&                  n
GO,Ub(  [        U[        R(                  5      (       a	  Un	US   n
GOUb'  [        U[        R*                  5      (       a  Un	US   n
OUb.  [        U[        R,                  5      (       a  Un	UR.                  n
OUR                  S
5      bA  UR                  S
5      S:X  a,  Ub)  [        U[0        5      (       a  UR                  S5      n	Un
OSUR                  S
5      bA  UR                  S
5      S:X  a,  Ub)  [        U[2        5      (       a  Un	UR                  SS5      n
U" SU
 SU 35        S nS nU R5                  5       (       a!  U R7                  UUUU
UUUUU	UUUU5      u  nnOUb  U R9                  UUU
UUUUU	U5	        U" SU 35        [:        R<                  " S5        UUS.$ ! [         a     GM  f = f! [         a=  n[:        R>                  " SRA                  [        U5      5      5        S S S.s S nA$ S nAff = f)Nz5Langfuse Logging - Enters logging function for model rT   litellm_call_idrU   optional_paramsmessages	functionstoolsERROR	call_type	embeddingchoicesr   messagezspeech-outputrA   text
_arealtimeinputpass_through_endpointresponser[   zOUTPUT IN LANGFUSE: z; original: z0Langfuse Layer Logging - final response object: z(Langfuse Layer Logging - logging success)trace_idgeneration_idz.Langfuse Layer Error(): Exception occured - {})!r@   rb   copydeepcopypopitems
isinstancestrintboolfloatr1   r'   EmbeddingResponseModelResponsejsonHttpxBinaryResponseContentTextCompletionResponsern   rp   ImageResponseTranscriptionResponseRerankResponseresultslistdict_is_langfuse_v2_log_langfuse_v2_log_langfuse_v1r   info	exceptionformat)rJ   kwargsresponse_obj
start_timeend_timeuser_idprint_verboselevelstatus_messagerr   outputrT   rf   rU   rg   promptri   rj   paramvalueru   rv   rM   s                          rQ   	log_eventLangFuseLogger.log_event   sc   G	=GxP
 EF#ZZ(8"=N$jj):DAO"":r28b  44^NH"mmFJJ7H",MNO &**Z"89F'++K>I#''6E$&/{# "'w !0 5 5 7u!%#sD%)@AA14U. !8  ".~s33')

;-<lG,E,EFF)jg33/ / %i03I>CCE)jg@@/ / ()jg<</ / %--a055)jg33/ / %f-)jg;;/ / %f-)jg44/ / %--

;'3JJ{+|; ,|T22

7+%

;'3JJ{+/FF ,|T22%))*b90\NSTH M##%%*.*?*?"# !#+'- )%%# 
 B<.Q  JK (=III % J  	=$$@GGAO !%t<<		=sC   DO. OKO. 
O+&O. *O++O. .
P582P0*P50P5c                    #    g7f)z8
TODO: support async calls when langfuse is truly async
Nr/   )rJ   r   r   r   r   r   r   s          rQ   _async_log_eventLangFuseLogger._async_log_event2  s     s   c                 `    SS K n[        UR                  R                  5      [        S5      :  $ )Nr   z2.0.0)r0   r   r=   r>   )rJ   r0   s     rQ   r   LangFuseLogger._is_langfuse_v29  s&    x''3348HHHrd   c
                 Z   SSK Jn
Jn  [        R                  " S5        U R
                  R                  U" UR                  SS5      UUUS95      nUR                  U
" UR                  SS5      UUUS   UUUU	R                  R                  U	R                  R                  S.US	9	5        g )
Nr   )CreateGenerationCreateTracezlPlease upgrade langfuse to v2.0.0 or higher: https://github.com/langfuse/langfuse-python/releases/tag/v2.0.1generation_namezlitellm-completion)namerr   r   userIdmodel)prompt_tokenscompletion_tokens)	r   	startTimeendTimer   modelParametersr   
completionusagerU   )langfuse.modelr   r   r   r^   r   tracer@   
generationr   r   r   )rJ   r   rU   r   r   r   r   rg   rr   r   r   r   r   s                rQ   r   LangFuseLogger._log_langfuse_v1>  s     	Az	
 ##\\"35IJ	
 	\\"35IJ$ Wo /!%1%7%7%E%E)5););)M)M "	
rd   r   c                 b    [         [        [        [        [        [
        [        4n[        X5      $ N)r}   r   r|   r~   r   r   tupler{   )rJ   r   
base_typess      rQ   is_base_typeLangFuseLogger.is_base_typej  s!    5#tT4?
%,,rd   c                   ^   Uc  g UR                  5        VVs0 s H  u  p#[        U5      (       a  M  X#_M     nnn[        R                  " U5      $ s  snnf ! [         a&  n[
        R                  " SU SU 35         S nAOS nAff = f0 n[        U[        5      (       d  [
        R                  " S5        U$ UR                  5        GHn  u  px [        U[        5      (       a#  T R                  [        [        U5      5      Xg'   M?  [        U[        5      (       a  [        U 4S jU 5       5      Xg'   Mm  [        U[        5      (       a  [        U 4S jU 5       5      Xg'   M  [        U[         5      (       a  UR#                  5       Xg'   M  T R%                  U5      (       a  XU'   M  [
        R                  " S['        U5       SU 35        GM  ! [(        [        R*                  4 aL    [
        R                  " SU S	['        U5       S
['        U5       S[,        R.                  " 5        35         GMm  f = f   U$ )NLangfuse Layer Error - z, metadata: zOLangfuse Layer Logging - metadata is not a MutableMapping, returning empty dictc              3      >#    U  HO  n[        U[        5      (       a  TR                  [        [        U5      5      O[
        R                  " U5      v   MQ     g 7fr   r{   r   _prepare_metadatar
   r   rw   rx   .0vrJ   s     rQ   	<genexpr>3LangFuseLogger._prepare_metadata.<locals>.<genexpr>  sM      - "'A  *!^<< !224a=A!%q!12 "'   AAc              3      >#    U  HO  n[        U[        5      (       a  TR                  [        [        U5      5      O[
        R                  " U5      v   MQ     g 7fr   r   r   s     rQ   r   r     sM      , "'A  *!^<< !224a=A!%q!12 "'r   z2Langfuse Layer Error - Unsupported metadata type: z
 for key: z3Langfuse Layer Error - Couldn't copy metadata key: z, type of key: z, type of value: z - )rz   callablerw   rx   r1   r   r$   r{   r   r   r
   r   r   r   r   setr   
model_dumpr   type	TypeErrorErrorr2   r3   )	rJ   rU   kr   sanitized_metadatarM   new_metadatakeyr   s	   `        rQ   r    LangFuseLogger._prepare_metadatao  sC   		V 4<>>3C!W3C418TU;$!$3C!W==!344 "X  	V  #:1#\(!TUU	V (* (N33  a  "..*JC$e^44(,(>(>tD%?P(QL%77(, - "'- )L%  z22(+ , "', )L%  y11(-(8(8(:L%&&u--(-%"((LTRW[MYcdgchi tzz* $$I#o^bcf^g]hhyz~  @E  {F  zG  GJ  KT  K_  K_  Ka  Jb  c E +N sb   A A AAA A 
B	#BB	6G
,G8,G&'GG+%GA!H98H9c                 F   SS K nU" S5         U R                  U5      n[        UR                  R                  5      nU[        S5      :  nU[        S5      :  nU[        S5      :  nU[        S5      :  nU(       a  UR                  S/ 5      O/ n[        [        [           UR                  SS 5      5      nUc  S nOUS   R                  SS 5      n0 n[        U[        5      (       a  UR                  5        Hq  u  nn[        R                  bM  [        [        R                  [        5      (       a*  U[        R                  ;   a  UR!                  U S	U 35        US
;   a  Ml  UUU'   Ms     U R#                  UXrS9nUR                  SS 5      nUR                  SS 5      nUR                  SU5      nUR                  SS 5      nUR                  S/ 5      nUR                  SS 5      nUR                  SS5      n UR                  SS5      n![%        US9nUc  Uc  SUR                  SS5       3nUb  SU0n"U H9  n#U#R'                  SS5      n$U$U";  d  M  UR                  U#S 5      n%U%c  M4  U%U"U$'   M;     [        [)        S UR+                  5       5      5       H  nUR                  US 5        M     SU;   a  U (       d  U	OSU"S'   SU;   a  U!(       d  UOSU"S'   OUUUU (       d  U	OSUR                  S UR                  S!S 5      5      US".n"[        [)        S# UR+                  5       5      5       H(  nUR                  US 5      U"UR'                  SS5      '   M*     US$:X  a  UU"S%'   OU!(       d  UOSU"S'   US&L d)  [        U[,        5      (       a*  UR/                  5       S':X  a  SU";   a	  UU"S   S('   OS(U0U"S'   UR                  S)S 5      n&U" S*U& 35        U&US+'   Ub  US,   US,'   [        R                  bn  [        [        R                  [        5      (       aK  S-[        R                  ;   a7  [0        R2                  R                  S.S 5      n'U'b  UR!                  S/U' 35        UR                  S0S 5      n(U((       a  U(US0'   UR                  S1S 5      n)U)(       a  U)US1'   UR                  S2S 5      n*U*(       a  U*US2'   U(       a/  S3U;   a  US3   c  SUS3'   US3   US3'   Uc  U"R5                  SU05        UR                  S4S 5      n+U+(       at  U+R                  S5S 5        U+R                  S6S 5        U+R                  S7S 5      n,0 n-U,(       a5  U,R                  5        H!  u  nnUR/                  5       S8;  d  M  UU-U'   M#     U R6                  R8                  " SG0 U"D6n.[;        U.U5        S n/S n0U
bz  [=        U
S5      (       a2  U
R                  SS 5      b  [        R>                  RA                  XZ5      n/[C        U
S9S 5      n1U1(       a#  U1RD                  U1RF                  U(       a  U&OS S:.n0UR                  S;S 5      n2U2c/  UR                  S<S 5      n3SUR                  SS5       3n2U3b  S=U3 3n2U
b  [C        U
S>S 5      n4OS n4U4b  U4US>'   U2UR                  S?U/5      UUUS@   UU (       d  U	OSU!(       d  UOSU0[I        U5      UUR                  S!S 5      SA.n5UR                  SBS 5      n6U6b  U6U5SB'   U(       a
  [K        U5USC9n5Ub   [        U[,        5      (       a  US$:X  a  UU5S%'   U(       a  UR                  SDS 5      U5SD'   U.RL                  " SG0 U5D6n7U7RN                  U/4$ ! [P         a/    [R        RT                  " SE[V        RX                  " 5        35         gFf = f)HNr   z/Langfuse Layer Logging - logging to langfuse v2z2.6.3z2.7.3tagsstandard_logging_objectrU   user_api_key_end_user_id:)rY   endpointcaching_groupsprevious_models)r   r   rU   
session_id
trace_nameru   existing_trace_idupdate_trace_keysdebug_langfuse
mask_inputFmask_output)rU   zlitellm-rl   r   rB   trace_r[   c                 $    U R                  S5      $ Nr   r7   r   s    rQ   <lambda>1LangFuseLogger._log_langfuse_v2.<locals>.<lambda>      s~~h'?rd   rr   zredacted-by-litellmr   trace_versionr=   )rB   r   r   rr   r=   r   c                 $    U R                  S5      $ r   r   r   s    rQ   r   r   /  r   rd   rk   r   Ttruemetadata_passed_to_litellmresponse_costztrace: litellm_response_costhidden_paramsproxy_base_urlPROXY_BASE_URLzproxy_base_url:api_basevertex_locationaws_region_name	cache_hitrX   methodurlrY   )authorizationcookierefererr   )r   r   
total_costr   user_api_key_aliaszlitellm:system_fingerprintrv   r   )r   rB   r   r   r   model_parametersrr   r   r   rU   r   r=   parent_observation_id)generation_paramsclean_metadatacompletion_start_timer   )NNr/   )-r0   r   r   r=   r>   ry   r
   r	   r   r@   r{   r   rz   r'   langfuse_default_tagsr   appendadd_default_langfuse_tagsr   r]   filterkeysr|   lowerr4   rC   updater   r   )log_provider_specific_information_as_spanhasattrutilsget_logging_idgetattrr   r   log_requester_metadata _add_prompt_to_generation_paramsr   ru   r1   r   errorr2   r3   )8rJ   r   rU   rT   r   r   r   r   rg   rr   r   r   r   rf   r0   langfuse_versionsupports_tagssupports_promptsupports_costssupports_completion_start_timer   r   end_user_idr  r   r   r   r   ru   r   r   r$   r   r   trace_paramsr`   ra   updated_trace_valuecostr   r   r   r   rX   rY   clean_headersr   rv   r   
_usage_objr   _user_api_key_aliasr   r  r   generation_clients8                                                           rQ   r   LangFuseLogger._log_langfuse_v2  s7     	GHF	--h7H&x'7'7'C'CD,0@@M.''2BBO-1AAN-=AQ-Q*/<8<<+"DHL/0

4d;I#
 '."5jAEE.  N(D))"*.."2JC  55A&w'D'DdKK7#@#@@se1UG$45    !.3s+% #3* 11& 2 D (++L$?J'++L$?J%))*oFH . 2 23F M . 2 23F K"&&'7>E'++L%@J(,,]EBK5~NN!&7&?  (

;(M'NO
 , $&78 +<&&8&@&@2&NO&l:.<.@.@./+ /:<OL9 +<  ?ATATAVWC #&&sD1 //%/5J !) 00&17L !*
 #&",*4U:O-11'););It)L   +	   ?ATATAVWC ?M>P>PT?LXr!:; G#5;L!12 '27L !* }E3!7!7EKKMV<S-MUL,-IJ0Lh/WL,::ot4DGD6*+6:N23&22I#3/
 --9w<<dCC$(E(EE!#0@$!G!-KK/.1A BC%))*d;H-5z*$jj):DAO4C01$jj):DAO4C01&(k*2.3{+282EN;/$, ''7#1#5#56Ld#S #$((48$((5.229dC "&-mmo
U99;.TT16M#. '6 MM''7,7E 6e^L ME'L$//$((t4@$+MM$@$@"%M %\7DA
)3)A)A-7-I-I.<d$E
 -001BDIO& '5&8&89Mt&T#$,VZZ\-R,S"T&2(01D0E&FO'%,\;OQU%V"%)"!-8J 45 ($((-H($$3&06K(3&9N2>B)--i>! %-LL1H$$O!$0=R!"9:$D&7%! !j&=&=%7BR6<!"23-=CZZ+T>!"9: !& 0 0 E3D E$--}<< 	  #:9;O;O;Q:R!ST	s&   I]' ]' 0L]' ?G']' '6^ ^ c                    [         R                  b  [        [         R                  [        5      (       a  S[         R                  ;   a&  UR	                  SS5      nUR                  SU 35        S[         R                  ;   aw  UR	                  S0 5      =(       d    0 nUR	                  SS5      nUc3  [         R                  b"  [         R                  R                  " S0 UD6nUnUR                  SU 35        U$ )	zp
Helper function to add litellm default langfuse tags

- Special LiteLLM tags:
    - cache_hit
    - cache_key

Nr   Fz
cache_hit:	cache_keyr   z
cache_key:r/   )r'   r  r{   r   r@   r  cache!_get_preset_cache_key_from_kwargs)rJ   r   r   rU   _cache_hit_value_hidden_params
_cache_key_preset_cache_keys           rQ   r  (LangFuseLogger.add_default_langfuse_tags  s     ((4))4:
 :
 g;;;#)::k5#A j)9(:;<g;;;!)or!B!Hb+//TB
%'--*C(/(W(W ) )% "3Jj56rd   )r   r<   r9   r:   r6   r8   r    r!   rI   rD   rG   rF   rH   rE   )NNNr\   )DEFAULTN)__name__
__module____qualname____firstlineno__rR   staticmethodr   rb   r   r   r   r   r   r~   r   r	   r   r   r   r  __static_attributes__r/   rd   rQ   r   r      s     !T*l " " "$ " "b T= 
T=lI
*
X-# -$ -
<(4. <S <|Z 
Zxrd   r   r  r  rV   c                 N   SSK JnJnJnJn  UR                  SS 5      nUc   U $ [        U[        5      (       Ga  UR                  SS5      S:X  a  U" S0 UD6nU" US9U S'   U $ UR                  SS5      S:X  a  U" S0 UD6nU" US9U S'   U $ S	U;   Gat  SU;   Gam  [        US   [        5      (       a  [        US
UR                  5      n	US   US   US	   UR                  SS 5      S.n
SU	;   aB  SU	;   a<  UR                  S/ 5      =(       d    / U
S'   UR                  S/ 5      =(       d    / U
S'   U" S0 U
D6nU" US9U S'   U $ [        US   [        5      (       a  [        US
UR                  5      nUS   US   US	   UR                  SS 5      S.n
SU;   aB  SU;   a<  UR                  S/ 5      =(       d    / U
S'   UR                  S/ 5      =(       d    / U
S'   U" S0 U
D6nU" US9U S'   U $ [        R                  " S5         U $ [        R                  " S5         U $ X`S'   U $ )Nr   )ChatPromptClientPrompt_ChatPrompt_TextTextPromptClientr   r   r[   chat)r   rp   r=   model_fieldsr   config)r   r   r=   r8  labelsr   z5[Non-blocking] Langfuse Logger: Invalid prompt formatzS[Non-blocking] Langfuse Logger: Invalid prompt format. No prompt logged to Langfuser/   )r   r2  r3  r4  r5  ry   r{   r   r@   r|   r  
__fields__r   r   r  )r  r  r2  r3  r4  r5  user_prompt_prompt_chat_prompt_textprompt_text_params_data_prompt_objprompt_chat_paramss                rQ   r  r    s     !$$Xt4Kl k 
K	&	&??62&&0&55L*:,*Oh'd c __VR(F2&55L*:,*Oh'^ ] +%(k*A+h/55%,1G1G&" (/)(3*95)ooh=	 11f@R6R&1ooh&C&IrE(O$/OOFB$?$E2E&M)2E2.>k.R!(+< 9 K1488%,1G1G&" (/)(3*95)ooh=	 11f@R6R&1ooh&C&IrE(O$/OOFB$?$E2E&M)2E2.>k.R!(+  $$K    e  '2(#rd   c                 Z   UR                  SS5      nUc  gUR                  SS5      nUb  [        U[        5      (       aZ  U HS  n[        U[        5      (       a+  UR	                  5        H  u  pVU R                  UUS9  M     MC  U R                  SUS9  MU     gU R                  SUS9  gg)z
Logs provider-specific information as spans.

Parameters:
    trace: The tracing object used to log spans.
    clean_metadata: A dictionary containing metadata to be logged.

Returns:
    None
r   Nvertex_ai_grounding_metadata)r   rr   )r@   r{   r   r   rz   span)r   r  r&  rC  elemr   r   s          rQ   r  r  *  s     $''>N#1#5#5&$  $/2D994dD))&*jjl


!$"' #  '3 JJ;"   5 JJ32   0rd   c                     0 nU R                  S5      =(       d    0 nU R                  5        H  u  p4X2;  d  M  XAU'   M     UR                  SU05        U$ )Nrequester_metadata)r@   rz   r
  )r  returned_metadatarG  r   r   s        rQ   r  r  V  s_    '++,@AGR$$&&#$a  ' 24FGHrd   )$rw   r4   r2   collections.abcr   r   r   typingr   r   r   r	   r
   packaging.versionr   pydanticr   r'   litellm._loggingr   *litellm.litellm_core_utils.redact_messagesr   &litellm.llms.custom_httpx.http_handlerr   litellm.secret_managers.mainr   #litellm.types.integrations.langfuselitellm.types.utilsr   *litellm.litellm_core_utils.litellm_loggingr   r   r   r  r  r  r/   rd   rQ   <module>rT     s     	  G G ; ; %   + O D 4 1 6NH HVBB-1B	BJ)X	4 	rd   