
    g(                        d dl mZmZmZmZmZmZ d dlZd dlm	Z	m
Z
mZ d dlmZ d dlmZ  G d de      Zded	ed
   defdZded	ed
   defdZd dl mZmZ ed   Zdededee   dee   dee   ded   deeef   fdZdededee   dee   deeef   f
dZdee   defdZdefdZd Zd Zd Zd efd!Zd"edefd#Z y)$    )DictListLiteralOptionalTupleUnionN)supports_response_schemasupports_system_messagesverbose_logger)BaseLLMException)PartTypec            
       T     e Zd Z	 ddededeeeej                  f      f fdZ
 xZS )VertexAIErrorstatus_codemessageheadersc                 *    t         |   |||       y )N)r   r   r   )super__init__)selfr   r   r   	__class__s       X/var/www/openai/venv/lib/python3.12/site-packages/litellm/llms/vertex_ai/common_utils.pyr   zVertexAIError.__init__   s     	k7S    )N)__name__
__module____qualname__intstrr   r   r   httpxHeadersr   __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                     	 |}|dk(  rd}t        | |      }|S # t        $ r:}t        j                  dj	                  t        |                   d}Y d }~|S d }~ww xY w)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_messager0      s    (2"22#. ":-A#
 #"  ( R  Y  YA	

 #(""(s    	A/AAc                 2    |}|dk(  rd}t        | |      }|S )Nr%   r$   r)   )r	   )r"   r#   r-   _supports_response_schemas       r   get_supports_response_schemar3   )   s2     /..* 8)=! %$r   )r   r   )chat	embeddingbatch_embeddingmodestreamvertex_projectvertex_locationvertex_api_version)v1v1beta1c                 x   d }d }| dk(  r`d}|du rd}d| d| d| d| d	| d
| d}nd| d| d| d| d	| d
| }|j                         rZd| d| d| d| d| d
| }|du rB|dz  }n<| dk(  r7d}d| d| d| d	| d
| 
}|j                         rd| d| d| d| d| d
| }|r|st        d|        ||fS )Nr4   generateContentTstreamGenerateContentzhttps://z-aiplatform.googleapis.com/z
/projects/z/locations/z/publishers/google/models/:z?alt=ssez/endpoints/r5   predictz'-aiplatform.googleapis.com/v1/projects/z,Unable to get vertex url/endpoint for mode: )isdigit
ValueError)r7   r"   r8   r9   r:   r;   urlendpoints           r   _get_vertex_urlrG   <   sQ    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                    dj                  |      }| dk(  r6d}|du rd}dj                  |||      }||fS dj                  |||      }||fS | dk(  rd	}dj                  |||      }||fS | d
k(  rd}dj                  |||      }fS )Nz	models/{}r4   r?   Tr@   zEhttps://generativelanguage.googleapis.com/v1beta/{}:{}?key={}&alt=ssez=https://generativelanguage.googleapis.com/v1beta/{}:{}?key={}r5   embedContentr6   batchEmbedContents)r,   )r7   r"   r8   rH   _gemini_model_namerF   rE   s          r   _get_gemini_urlrM   c   s     %++E2v~$T>.HY``"HnC( = PVV&.   = 
	!MTT.
 = 
"	"'MTT.
 =r   partsc                 J    d}| D ]  }d|v s|j                  d      sd} |S )a	  
    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)rN   has_text_paramparts      r   _check_text_in_contentrT      s2     NT>dhhv.!N  r   
parametersc                     | j                  di       }|j                         D ]  \  }}t        ||        t        | |       t        |        t	        |        t        | d       t        | d       | S )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)rU   defsnamevalues       r   _build_vertex_schemarb      so     >>'2&Dzz|eE4  $
D! 
#J
 
w/y r   c                 F   | j                  dd       }|y |j                         D ]  \  }}|j                  dd       }|)||j                  d      d      }t        ||       |||<   C|j                  dd       }|Qt	        |      D ]B  \  }}	|	j                  dd       }|||j                  d      d      }t        ||       |||<   D |j                  dd       }
|
|
j                  dd       }|||j                  d      d      }t        ||       ||d<    y )N
propertiesz$refzdefs/anyOfrZ   )rQ   rZ   splitr[   	enumerate)schemar_   rd   r`   ra   ref_keyrefanyofiatyperZ   s              r   r[   r[      s@   L$/J!'')e))FD)w}}W-b12CT""Jt		'4(%e,5))FD1&w}}W5b9:CT*"E!H - 		'4(ii-G"7==1"56C&!$g3 *r   c                    | j                  dd       }|`t        |      dk7  rt        d      |\  }}|ddik(  r| j                  |       n$|ddik(  r| j                  |       nt        d      d| d<   | j	                  dd       }|#|j                         D ]  \  }}t        |        | j	                  d	d       }|t        |       y y )
Nrf      zInvalid input: Type Unions are not supported, except for `Optional` types. Please provide an `Optional` type or a non-Union type.typenullTnullablerd   rZ   )rY   lenrD   updaterQ   rZ   r\   )ri   rl   abrd   r`   ra   rZ   s           r   r\   r\      s    JJw%Eu:?I  1  MM!66""MM!I  "zL$/J%++-KD%& . JJw%EE" r   c                     | j                  dd       }|Cd| v r| d   | j                  dd        d| d<   |j                         D ]  \  }}t        |        | j                  dd       }|t        |       y y )Nrd   requiredobjectrq   rZ   )rQ   rY   rZ   r]   )ri   rd   r`   ra   rZ   s        r   r]   r]      s    L$/JF:$6$>JJz4(!v%++-KD%E" . JJw%E r   rX   c                     | j                  |d        | j                  dd       }|$|j                         D ]  \  }}t        ||        | j                  dd       }|t        ||       y y )Nrd   rZ   )rY   rQ   rZ   r^   )ri   rX   rd   r`   ra   rZ   s         r   r^   r^      sn    
JJz4 L$/J%++-KD%z* . JJw%EE:& r   vertex_datetimec                 d    ddl m } |j                  | d      }t        |j                               S )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   boolr0   r3   all_gemini_url_modesrG   rM   rT   dictrb   r[   r\   r]   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   