
    ^h(                        S SK JrJrJrJrJrJr  S SKrS SKJ	r	J
r
Jr  S SKJr  S SKJr   " S S\5      rS\S	\S
   S\4S jrS\S	\S
   S\4S jrS SK JrJr  \S   rS\S\S\\   S\\   S\\   S\S   S\\\4   4S jrS\S\S\\   S\\   S\\\4   4
S jrS\\   S\4S jrS\4S jrS rS rS rS \4S! jrS"\S\4S# jr g)$    )DictListLiteralOptionalTupleUnionN)supports_response_schemasupports_system_messagesverbose_logger)BaseLLMException)PartTypec            
       b   ^  \ rS rSr SS\S\S\\\\	R                  4      4U 4S jjjrSrU =r$ )VertexAIError
   status_codemessageheadersc                 "   > [         TU ]  X!US9  g )N)r   r   r   )super__init__)selfr   r   r   	__class__s       ]/home/james-whalen/.local/lib/python3.13/site-packages/litellm/llms/vertex_ai/common_utils.pyr   VertexAIError.__init__   s     	7S     )N)__name__
__module____qualname____firstlineno__intstrr   r   r   httpxHeadersr   __static_attributes____classcell__)r   s   @r   r   r   
   sF    
 9=	TT T %emm 345	T Tr   r   modelcustom_llm_provider)	vertex_aivertex_ai_betageminireturnc                      UnUS:X  a  Sn[        XS9nU$ ! [         a;  n[        R                  " SR	                  [        U5      5      5        Sn S nAU$ S nAff = f)Nr*   r)   r'   r(   zUnable to identify if system message supported. Defaulting to 'False'. Received error message - {}
Add it here - https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.jsonF)r
   	Exceptionr   warningformatr"   )r'   r(   _custom_llm_providersupports_system_messagees        r   get_supports_system_messager5      s~    (2"22#. ":#
 #"  ( R  Y  YA	

 #(""(s    
A0AAc                 ,    UnUS:X  a  Sn[        XS9nU$ )Nr*   r)   r.   )r	   )r'   r(   r2   _supports_response_schemas       r   get_supports_response_schemar8   )   s/     /..* 8! %$r   )r   r   )chat	embeddingbatch_embeddingmodestreamvertex_projectvertex_locationvertex_api_version)v1v1beta1c                    S nS nU S:X  ag  SnUSL a  SnSU SU SU SU S	U S
U S3nOSU SU SU SU S	U S
U 3nUR                  5       (       a  SU SU SU SU SU S
U 3nUSL a  US-  nOBU S:X  a<  SnSU SU SU S	U S
U 3
nUR                  5       (       a  SU SU SU SU SU S
U 3nU(       a  U(       d  [        SU  35      eXg4$ )Nr9   generateContentTstreamGenerateContentzhttps://z-aiplatform.googleapis.com/z
/projects/z/locations/z/publishers/google/models/:z?alt=ssez/endpoints/r:   predictz'-aiplatform.googleapis.com/v1/projects/z,Unable to get vertex url/endpoint for mode: )isdigit
ValueError)r<   r'   r=   r>   r?   r@   urlendpoints           r   _get_vertex_urlrL   <   sT    C"Hv~$T>.H_--HI[H\\fgufv  wB  CR  BS  Sm  ns  mt  tu  v~  u  G  HC_--HI[H\\fgufv  wB  CR  BS  Sm  ns  mt  tu  v~  u  @C
 ==??_--HI[H\\fgufv  wB  CR  BS  S^  _d  ^e  ef  go  fp  qC~z!		))PQ_P``kl{k|  }W  X]  W^  ^_  `h  _i  j==??_--HI[H\\fgufv  wB  CR  BS  S^  _d  ^e  ef  go  fp  qChGvNOO=r   gemini_api_keyc                    SR                  U5      nU S:X  a4  SnUSL a  SnSR                  XEU5      nXe4$ SR                  XEU5      n Xe4$ U S:X  a  S	nSR                  XEU5      nXe4$ U S
:X  a  SnSR                  XEU5      nWW4$ )Nz	models/{}r9   rD   TrE   zEhttps://generativelanguage.googleapis.com/v1beta/{}:{}?key={}&alt=ssez=https://generativelanguage.googleapis.com/v1beta/{}:{}?key={}r:   embedContentr;   batchEmbedContents)r1   )r<   r'   r=   rM   _gemini_model_namerK   rJ   s          r   _get_gemini_urlrR   c   s     %++E2v~$T>.HY``"nC( = PVV&.   = 
	!MTT.
 = 
"	"'MTT.
 =r   partsc                 `    SnU  H%  nSU;   d  M  UR                  S5      (       d  M#  SnM'     U$ )z
check that user_content has 'text' parameter.
    - Known Vertex Error: Unable to submit request because it must have a text parameter.
    - 'text' param needs to be len > 0
    - Relevant Issue: https://github.com/BerriAI/litellm/issues/5515
FtextT)get)rS   has_text_paramparts      r   _check_text_in_contentrY      s5     NT>dhhv..!N  r   
parametersc                     U R                  S0 5      nUR                  5        H  u  p#[        X15        M     [        X5        [        U 5        [	        U 5        [        U SS9  [        U SS9  U $ )z
This is a modified version of https://github.com/google-gemini/generative-ai-python/blob/8f77cc6ac99937cd3a81299ecf79608b91b06bbb/google/generativeai/types/content_types.py#L419
z$defstitle)
field_namez$schema)popitemsunpack_defsconvert_to_nullableadd_object_typestrip_field)rZ   defsnamevalues       r   _build_vertex_schemarg      si     >>'2&Dzz|E  $
! 
#J
 
w/y r   c                 N   U R                  SS 5      nUc  g UR                  5        H  u  p4UR                  SS 5      nUb'  XR                  S5      S      n[        Xa5        XbU'   MA  UR                  SS 5      nUbR  [	        U5       HA  u  pU	R                  SS 5      nUc  M  XR                  S5      S      n[        Xa5        XgU'   MC     M  UR                  SS 5      n
U
c  M  U
R                  SS 5      nUc  M  XR                  S5      S      n[        Xa5        XdS'   M     g )N
propertiesz$refzdefs/anyOfr_   )rV   r_   splitr`   	enumerate)schemard   ri   re   rf   ref_keyrefanyofiatyper_   s              r   r`   r`      s*   L$/J!'')))FD)}}W-b12C""t		'4(%e,))FD1&}}W5b9:C*"!H - 		'4(ii-G"==1"56C&!$g3 *r   c                    U R                  SS 5      nUbb  [        U5      S:w  a  [        S5      eUu  p#USS0:X  a  U R                  U5        O%USS0:X  a  U R                  U5        O[        S5      eSU S'   U R	                  SS 5      nUb$  UR                  5        H  u  pV[        U5        M     U R	                  S	S 5      nUb  [        U5        g g )
Nrk      zInvalid input: Type Unions are not supported, except for `Optional` types. Please provide an `Optional` type or a non-Union type.typenullTnullableri   r_   )r^   lenrI   updaterV   r_   ra   )rn   rq   abri   re   rf   r_   s           r   ra   ra      s    JJw%Eu:?I    MM!66""MM!I  "zL$/J%++-KD& . JJw%EE" r   c                     U R                  SS 5      nUbG  SU ;   a  U S   c  U R                  SS 5        SU S'   UR                  5        H  u  p#[        U5        M     U R                  SS 5      nUb  [        U5        g g )Nri   requiredobjectrv   r_   )rV   r^   r_   rb   )rn   ri   re   rf   r_   s        r   rb   rb      s    L$/JF:$6$>JJz4(!v%++-KDE" . JJw%E r   r]   c                     U R                  US 5        U R                  SS 5      nUb$  UR                  5        H  u  p4[        XA5        M     U R                  SS 5      nUb  [        XQ5        g g )Nri   r_   )r^   rV   r_   rc   )rn   r]   ri   re   rf   r_   s         r   rc   rc      sh    
JJz4 L$/J%++-KD* . JJw%EE& r   vertex_datetimec                 d    SSK J n  UR                  U S5      n[        UR                  5       5      $ )z
Converts a Vertex AI datetime string to an OpenAI datetime integer

vertex_datetime: str = "2024-12-04T21:53:12.120184Z"
returns: int = 1722729192
r   )datetimez%Y-%m-%dT%H:%M:%S.%fZ)r   strptimer!   	timestamp)r   r   dts      r   +_convert_vertex_datetime_to_openai_datetimer     s-     " 
		?,C	DBr||~r   )!typingr   r   r   r   r   r   r#   litellmr	   r
   r   )litellm.llms.base_llm.chat.transformationr   litellm.types.llms.vertex_air   r   r"   boolr5   r8   all_gemini_url_modesrL   rR   rY   dictrg   r`   ra   rb   rc   r!   r   r   r   r   <module>r      sw   > >  V V F 1T$ T##%,-T%U#	#*%%%,-T%U%	% %EF $
$$ TN$ SM	$
 c]$  0$ 38_$N
 TN SM	
 38_D$x. T T :B#<
'C 
'  r   