
    )#h              
          d dl Z d dlZd dlZd dlmZmZmZ d dlmZm	Z	m
Z
mZmZmZ d dlmZ d dlmZ d dlZd dlmZ d dlmZ d dlmZ d d	lmZ d d
l d dlmZmZ erd dlm Z  ne	Z  G d d      Z!de"de"dee   de	de"f
dZ#d Z$de"fdZ%y)    N)MutableMappingMutableSequence
MutableSet)TYPE_CHECKINGAnyDictListOptionalcast)Version)	BaseModel)verbose_logger)redact_user_api_key_info)_get_httpx_client)str_to_bool)*)StandardLoggingPayload'StandardLoggingPromptManagementMetadata)DynamicLoggingCachec                       e Zd Z	 	 	 	 ddZedededefd       Z	 	 ddefdZd Zd	 Z	d
 Z
dedefdZdee   defdZdefdZedee   dee   fd       Zd Zy)LangFuseLoggerNc                    	 dd l }ddl m} |xs t        j                  d      | _        |xs t        j                  d      | _        |xs t        j                  dd	      | _	        | j                  j                  d
      s/| j                  j                  d      sd
| j                  z   | _	        t        j                  d      | _        t        j                  d      | _        t        j                  d      xs || _        t               }|j                  | _        | j                  | j                  | j                  | j                  | j                  | j                  | j                   d}	t#        |j$                  j&                        t#        d      k\  rd|	d<    |di |	| _        	 | j                  j                  j(                  j+                         j,                  d   j.                  }
|
t
        j0                  d<   t        j                  d      | j2                  t5        | j2                        nd }t        j                  d      | _        t        j                  d      | _        t        j                  d      | _        t        j                  d      | _        t        j                  d      | _         || j8                  | j6                  | j:                  | j<                  ||nd      | _        y d | _        y # t        $ r)}t        d| dt        j                          d      d }~ww xY w# t        $ r d }
Y Dw xY w)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_secretr8   r'   r2   r   ehttp_client
parameters
project_idrF   s               c/var/www/html/sandstorm/venv/lib/python3.12/site-packages/litellm/integrations/langfuse/langfuse.py__init__zLangFuseLogger.__init__   s   	) *MRYY7L-M-Q;P1Q* 
bii9/
 )))4!!,,Z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*   
L ,AL: 	L7$L22L7:M	M	litellm_paramsmetadatareturnc                 v   | |S | j                  d      |S |i }| j                  di       j                  di       xs i }|D ]r  }|j                  d      s|j                  ddd      }||v rt        j                  d| d       nt        j
                  d| d	       |j                  |      ||<   t |S )
at  
        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)rB   r9   replacer   warningr&   )rU   rV   proxy_headersmetadata_param_keytrace_param_keys        rS   add_metadata_from_headerz'LangFuseLogger.add_metadata_from_headeru   s     !O45=OH 5r:>>y"MSQS 	 #0 	R!,,[9"4"<"<["a"P"h."**00AAVW #((*?*;;NO -:,=,=>P,Q)	R     c	                    	 t        j                  d|        d }	d }
|j                  di       }|j                  dd       }|j                  di       xs i }| j                  ||      }t	        j
                  |j                  di             }d|j                  d      i}|j                  dd       }|j                  dd       }|||d<   |||d<   |j                         D ]5  \  }}t        |t        t        t        t        f      r'	 t        |      ||<   7 |d	k(  r|t        |t              r|}	|}
n|5|j                  d
d       dk(  st        |t        j                        r|}	d }
n|7t        |t        j                         r|}	|d   d   d   j#                         }
nd| t        |t        j$                        r|}	d}
nB|7t        |t        j&                        r|}	|j(                  d   j*                  }
n	|"t        |t        j,                        r|}	|d   }
n|"t        |t        j.                        r|}	|d   }
n|)t        |t        j0                        r|}	|j2                  }
n|j                  d
      :|j                  d
      dk(  r&|$t        |t4              r|j                  d      }	|}
nK|j                  d
      :|j                  d
      dk(  r&|$t        |t6              r|}	|j                  dd      }
t        j                  d|
 d|        d }d }| j9                         r!| j;                  ||||
|||||	||||      \  }}n|| j=                  |||
|||||	|	       t        j                  d|        t        j>                  d       ||dS # t        $ r Y w xY w# t        $ r<}t        j@                  djC                  t        |                   d d dcY d }~S d }~ww xY w)Nz5Langfuse Logging - Enters logging function for model rU   litellm_call_idrV   optional_paramsmessages	functionstoolsERROR	call_type	embeddingchoicesr   messagezspeech-outputrC   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   r&   rB   rc   copydeepcopypopitems
isinstancestrintboolfloatr3   r)   EmbeddingResponseModelResponsejsonHttpxBinaryResponseContentTextCompletionResponsern   rp   ImageResponseTranscriptionResponseRerankResponseresultslistdict_is_langfuse_v2_log_langfuse_v2_log_langfuse_v1info	exceptionformat)rL   kwargsresponse_obj
start_timeend_timeuser_idprint_verboselevelstatus_messagerr   outputrU   rf   rV   rg   promptri   rj   paramvalueru   rv   rO   s                          rS   _old_log_eventzLangFuseLogger._old_log_event   sP   J	=  GxP
 EF#ZZ(8"=N$jj):DAO"":r28b  44^XNH"mmFJJ7H",MNO &**Z"89F'++K>I#''6E$&/{# "'w !0 5 5 7 u!%#sD%)@A14U.  ".~s3')

;-<lG,E,E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

7+%

;'3JJ{+/FF ,|T2%))*b9  &vhl<.I H M##%*.*?*?"# !#+'- )%%# 
   B<.Q  JK (=IIM % N  	=$$@GGAO !%t<<		=sC   DN: N*JN: *	N73N: 6N77N: :	O?1O:4O?:O?c                    K   yw)zH
        TODO: support async calls when langfuse is truly async
        Nr1   )rL   r   r   r   r   r   r   s          rS   _async_log_eventzLangFuseLogger._async_log_event3  s     s   c                 `    dd l }t        |j                  j                        t        d      k\  S )Nr   z2.0.0)r2   r   r?   r@   )rL   r2   s     rS   r   zLangFuseLogger._is_langfuse_v2:  s&    x''3348HHHrd   c
                 d   ddl m}
m} t        j                  d       | j
                  j                   ||j                  dd      |||            }|j                   |
|j                  dd      |||d   ||||	j                  j                  |	j                  j                  d|		             y )
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usagerV   )langfuse.modelr   r   r   r_   r   tracerB   
generationr   r   r   )rL   r   rV   r   r   r   r   rg   rr   r   r   r   r   s                rS   r   zLangFuseLogger._log_langfuse_v1?  s     	Az	
 ##\\"35IJ	
 	\\"35IJ$ Wo /!%1%7%7%E%E)5););)M)M "	
rd   r   c                 d    t         t        t        t        t        t
        t        f}t        ||      S N)r}   r   r|   r~   r   r   tupler{   )rL   r   
base_typess      rS   is_base_typezLangFuseLogger.is_base_typek  s#    5#tT4?
%,,rd   c                     	 |y |j                         D ci c]  \  }}t        |      r|| }}}t        j                  |      S c c}}w # t        $ r%}t        j                  d| d|        Y d }~nd }~ww xY wi }t        |t              st        j                  d       |S |j                         D ]N  \  }}	 t        |t              r# j                  t        t        |            ||<   nt        |t              rt         fd|D              ||<   nt        |t              rt         fd|D              ||<   n`t        |t               r|j#                         ||<   n< j%                  |      r|||<   n%t        j                  dt'        |       d|        # t(        t        j*                  f$ rI t        j                  d| d	t'        |       d
t'        |       dt-        j.                                 Y Mw xY w |S )NLangfuse Layer Error - z, metadata: zOLangfuse Layer Logging - metadata is not a MutableMapping, returning empty dictc              3      K   | ]H  }t        |t              rj                  t        t        |            nt        j                  |       J y wr   r{   r   _prepare_metadatar   r   rw   rx   .0vrL   s     rS   	<genexpr>z3LangFuseLogger._prepare_metadata.<locals>.<genexpr>  sI      -   *!^< !224a=A!%q!12-   AAc              3      K   | ]H  }t        |t              rj                  t        t        |            nt        j                  |       J y wr   r   r   s     rS   r   z3LangFuseLogger._prepare_metadata.<locals>.<genexpr>  sI      ,   *!^< !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   r3   r   r&   r{   r   r   r   r   r   r   r   setr   
model_dumpr   type	TypeErrorErrorr4   r5   )	rL   rV   kr   sanitized_metadatarO   new_metadatakeyr   s	   `        rS   r   z LangFuseLogger._prepare_metadatap  s<   		V 4<>>3C!W41a8TU;!Q$!W!W==!344 "X  	V  #:1#\(!TUU	V (* (N3  a  "..* %	JC$e^4(,(>(>tD%?P(QL%7(, - "'- )L%  z2(+ , "', )L%  y1(-(8(8(:L%&&u-(-L%"((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 sE   A A A
A
A 
A 	A>A99A>C"F&&AHHc                 @   dd l }t        j                  d       	 | j                  |      }t	        |j
                  j                        }|t	        d      k\  }|t	        d      k\  }|t	        d      k\  }|t	        d      k\  }t        t        t           |j                  dd             }|r| j                  |      ng }|d }d }n?|d   j                  dd       }t        t        t           |d   j                  d	d             }i }|||d	<   t        |t              rx|j                         D ]e  \  }}t         j"                  Ft        t         j"                  t$              r(|t         j"                  v r|j'                  | d
|        |dv ra|||<   g | j)                  |||      }|j+                  dd       }t        t        t,           |j+                  dd             }|j+                  d|      }|j+                  dd       }t        t$        |j+                  dg             }|j+                  dd       } |j+                  dd      }!|j+                  dd      }"t/        |      }||d|j                  dd       }|d|i}#|D ]3  }$|$j1                  dd      }%|%|#vs|j+                  |$d       }&|&/|&|#|%<   5 t%        t3        d |j5                                     D ]  }|j+                  |d         d|v r	|!s|	nd|#d<   d |v r|"s|nd|#d <   n||||!s|	nd|j+                  d!|j                  d"d             |d#}#t%        t3        d$ |j5                                     D ]'  }|j+                  |d       |#|j1                  dd      <   ) |d%k(  r||#d&<   n	|"s|nd|#d <   | d'u s#t        | t,              r'| j7                         d(k(  rd|#v r	||#d   d)<   nd)|i|#d<   |j                  d*d       }'t        j                  d+|'        |'|d,<   ||d-   |d-<   t         j"                  ft        t         j"                  t$              rHd.t         j"                  v r6t8        j:                  j                  d/d       }(|(|j'                  d0|(        |j                  d1d       })|)r|)|d1<   |j                  d2d       }*|*r|*|d2<   |j                  d3d       }+|+r|+|d3<   |r+d4|v r|d4   d|d4<   |d4   |d4<   ||#j=                  d5|i       |j                  d6d       },|,rj|,j                  d7d        |,j                  d8d        |,j                  d9d       }-i }.|-r0|-j                         D ]  \  }}|j7                         d:vs||.|<     | j>                  j@                  dIi |#}/tC        |/|       d }0d }1|
ktE        |
d      r2|
j                  dd        t         jF                  jI                  ||
      }0tK        |
d;d       }2|2r|2jL                  |2jN                  |r|'nd d<}1|j+                  d=d       }3|3Qt        t        t,           |j                  d>d             }4dt        t,        |j                  dd             }3|4d?|4 }3|
tK        |
d@d       }5nd }5|5|5|d@<   |3|j+                  dA|0      |||dB   ||!s|	nd|"s|nd|1tQ        |      ||j+                  d"d       dC}6|j                  dDd       }7|7|7|6dD<   |rtS        |6||| j>                  E      }6|t        |t,              r
|d%k(  r||6d&<   |r|j                  dFd       |6dF<    |/jT                  dIi |6}8|8jV                  |0fS # tX        $ r- t        jZ                  dGt]        j^                                 Y yHw xY w)JNr   z/Langfuse Layer Logging - logging to langfuse v2z2.6.3z2.7.3standard_logging_objectr   rV   user_api_key_end_user_idprompt_management_metadata:)rZ   endpointcaching_groupsprevious_models)tagsr   rV   
session_id
trace_nameru   existing_trace_idupdate_trace_keysdebug_langfuse
mask_inputFmask_output)rV   zlitellm-rl   r   rD   trace_r\   c                 $    | j                  d      S Nr   r9   r   s    rS   <lambda>z1LangFuseLogger._log_langfuse_v2.<locals>.<lambda>(      s~~h'? rd   rr   zredacted-by-litellmr   trace_versionr?   )rD   r   r   rr   r?   r   c                 $    | j                  d      S r   r   r   s    rS   r   z1LangFuseLogger._log_langfuse_v2.<locals>.<lambda>A  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_hitr   rY   methodurlrZ   )authorizationcookierefererr   )r   r   
total_costr   user_api_key_aliaszlitellm:system_fingerprintrv   r   )r   rD   r   r   r   model_parametersrr   r   r   rV   r   r?   parent_observation_id)generation_paramsclean_metadatar   r>   completion_start_timer   )NNr1   )0r2   r   r&   r   r   r?   r@   r   r
   r   rB   _get_langfuse_tagsr   r{   r   rz   r)   langfuse_default_tagsr   appendadd_default_langfuse_tagsry   r|   r   r^   filterkeyslowerr6   rE   updater   r   )log_provider_specific_information_as_spanhasattrutilsget_logging_idgetattrr   r   log_requester_metadata _add_prompt_to_generation_paramsr   ru   r3   errorr4   r5   )9rL   r   rV   rU   r   r   r   r   rg   rr   r   r   r   rf   r2   langfuse_versionsupports_tagssupports_promptsupports_costssupports_completion_start_timer   r   end_user_idr   r   r   r   r   r   ru   r   r   r&   r   r   trace_paramsra   rb   updated_trace_valuecostr   r   r   r   rY   rZ   clean_headersr   rv   r   
_usage_objr   _user_api_key_aliasr   r   r   generation_clients9                                                            rS   r   zLangFuseLogger._log_langfuse_v2  s     	NO^	--h7H&x'7'7'C'CD,0@@M.''2BBO-1AAN-=AQ-Q*HL/0

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

;(M'NO
 ,046G/H +< P&&8&@&@2&NO&l:.<.@.@./+ /:<OL9P  ?ATATAVW 2C #&&sD12 //%/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!7EKKMV<S-MUL,-IJ0Lh/WL,::ot4D  74&!126:N23&22I#3/
 --9w<<d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 7
U99;.TT16M#.7 (DMM''7,7E 6e^L ME'L$/$((t4@$+MM$@$@"L%M %\7DA
)3)A)A-7-I-I.<d$E
 -001BDIO& '+SM>#5#56JD#Q'# tCK)NOPQ   '2(01D0E&FO'%,\;OQU%V"%)"!-8J 45 ($((-H($$3&06K(3&9N2>B)--i>! %-LL1H$$O!$0=R!"9:$D&7#1/I$(MM	%! !j&=%7BR6<!"23-=CZZ+T>!"9: !1 0 0 E3D E$--}<< 	  #:9;O;O;Q:R!ST	s&   J	]' %]' :K]' ?G']' '3^^r   c                 6    | g S | j                  dg       xs g S )Nrequest_tags)rB   r   s    rS   r   z!LangFuseLogger._get_langfuse_tags  s'     #*I&**>2>D"Drd   c                    t         j                  t        t         j                  t              rdt         j                  v r&|j	                  dd      }|j                  d|        dt         j                  v ro|j	                  di       xs i }|j	                  dd      }|1t         j                  !t        j                  j                  di |}|}|j                  d|        |S )	z
        Helper function to add litellm default langfuse tags

        - Special LiteLLM tags:
            - cache_hit
            - cache_key

        Nr   Fz
cache_hit:	cache_keyr   z
cache_key:r1   )r)   r   r{   r   rB   r   cache!_get_preset_cache_key_from_kwargs)rL   r   r   rV   _cache_hit_value_hidden_params
_cache_key_preset_cache_keys           rS   r  z(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   )NNNr]   )DEFAULTN)__name__
__module____qualname__rT   staticmethodr   rc   r   r   r   r   r   r~   r   r
   r   r   r   r   r	   r|   r   r  r1   rd   rS   r   r      s     !T*l " " "$ " "X W= 
W=rI
*
X-# -$ -
<(4. <S <|r 
rh	 E!)*@!AE	cE Erd   r   r   r   r   r>   rW   c                    ddl m} ddlm}m}m}m} t        ||      }|j                  dd       }	|	|	 | S t        |	t              r|	j                  dd      dk(  r |di |	}
 ||
      | d<   | S |	j                  dd      d	k(  r |di |	} ||      | d<   | S d
|	v rPd|	v rKt        |	d   t              rt        |d|j                        }|	d   |	d   |	d
   |	j                  dd       d}d|v r6d|v r2|	j                  dg       xs g |d<   |	j                  dg       xs g |d<    |di |} ||      | d<   | S t        |	d   t              rt        |d|j                        }|	d   |	d   |	d
   |	j                  dd       d}d|v r6d|v r2|	j                  dg       xs g |d<   |	j                  dg       xs g |d<    |di |} ||      | d<   | S t!        j"                  d       | S t!        j"                  d       | S |"|d   dk(  r	 |j%                  |d         | d<   | S |	| d<   | S # t&        $ r#}t!        j(                  d|        Y d }~| S d }~ww xY w)Nr   r   )ChatPromptClientPrompt_ChatPrompt_TextTextPromptClientr   r   r\   chat)r   rp   r?   model_fieldsr   config)r   r   r?   r1  labelsr   z5[Non-blocking] Langfuse Logger: Invalid prompt formatzS[Non-blocking] Langfuse Logger: Invalid prompt format. No prompt logged to Langfuseprompt_integrationr2   	prompt_idzI[Non-blocking] Langfuse Logger: Error getting prompt client for logging: r1   )r2   r   r   r+  r,  r-  r.  r   ry   r{   r   rB   r|   r
  
__fields__r   r   r  
get_promptr3   r&   )r   r   r   r>   r   r+  r,  r-  r.  user_prompt_prompt_chat_prompt_textprompt_text_params_data_prompt_objprompt_chat_paramsrO   s                    rS   r  r    s$    "  8_5O $$Xt4K9AH G 
K	&??62&&0&55L*:,*Oh'@  __VR(F2&55L*:,*Oh'z y +%(k*A+h/5%,1G1G&" (/)(3*95)ooh=	 11f@R6R&1ooh&C&IrE(O$/OOFB$?$E2E&M)2E2.>k.R!(+X U K148%,1G1G&" (/)(3*95)ooh=	 11f@R6R&1ooh&C&IrE(O$/OOFB$?$E2E&M)2E2.>k.R!(+4 1 $$K0 )   e( ! 	#.&';<
J	*9*D*D*;7+h'  '2(#  	  [\][^_ 
 	s   H6 6	I"?II"c                 L   |j                  dd      }|y|j                  dd      }|{t        |t              rW|D ]Q  }t        |t              r,|j	                         D ]  \  }}| j                  ||        ?| j                  d|       S y| j                  d|       yy)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   )rB   r{   r   r   rz   span)r   r   r"  r?  elemr   r   s          rS   r  r  _  s     $''>N#1#5#5&$  $/2D94 dD)&*jjl 
U

!$"' #  JJ;"   JJ32   0rd   c                     i }| j                  d      xs i }| j                         D ]  \  }}||vs|||<    |j                  d|i       |S )Nrequester_metadata)rB   rz   r  )r   returned_metadatarC  r   r   s        rS   r  r    sl    '++,@AGR$$& %1&&#$a % 24FGHrd   )&rw   r6   r4   collections.abcr   r   r   typingr   r   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   r   *litellm.litellm_core_utils.litellm_loggingr   r   r   r  r  r  r1   rd   rS   <module>rP     s     	  G G A A %   + O D 4 1
 Nf fRVVV !))P QV 	V
 
Vr)X	4 	rd   