
    h%                         d Z ddlmZmZmZmZmZmZmZm	Z	m
Z
 ddl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mZ erdd	lmZmZmZ neZeZeZ G d
 dee      Zy)zB
Transformation for Calling Google models in their native format.
    )	TYPE_CHECKINGAnyDictListLiteralOptionalTupleUnioncastN)Logging)$BaseGoogleGenAIGenerateContentConfig)	VertexLLM)get_secret_str)GenericLiteLLMParams)GenerateContentConfigDict#GenerateContentContentListUnionDictGenerateContentResponsec                       e Zd ZdZeded   fd       Z fdZdede	e   fdZ
dededeeef   fd	Zd
ee   dee   dedeeeef      def
dZdedee   fdZdedeeee   ee   f   fdZdedee   dee   dee   dededee   dedeeef   fdZdee   dedededeeef   f
dZdee   dedededeeef   f
dZdedededefdZdedej<                  dede fdZ! xZ"S )GoogleGenAIConfigzI
    Configuration for calling Google models in their native format.
    return)gemini	vertex_aic                      y)Nr    )selfs    k/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/llms/gemini/google_genai/transformation.pycustom_llm_providerz%GoogleGenAIConfig.custom_llm_provider!   s        c                 L    t         |           t        j                  |        y )N)super__init__r   )r   	__class__s    r   r!   zGoogleGenAIConfig.__init__%   s    4 r   modelc                 
    g dS )z
        Get the list of supported Google GenAI parameters for the model.

        Args:
            model: The model name

        Returns:
            List of supported parameter names
        )http_optionssystem_instructiontemperaturetop_ptop_kcandidate_countmax_output_tokensstop_sequencesresponse_logprobslogprobspresence_penaltyfrequency_penaltyseedresponse_mime_typeresponse_schemarouting_configmodel_selection_configsafety_settingstoolstool_configlabelscached_contentresponse_modalitiesmedia_resolutionspeech_configaudio_timestampautomatic_function_callingthinking_configr   )r   r#   s     r   .get_supported_generate_content_optional_paramsz@GoogleGenAIConfig.get_supported_generate_content_optional_params)   s    
 	
r   generate_content_config_dictc                     ddl m}  |       }| j                  |      }|j                         D ]  \  }}||v s|||<    t	        |      S )a  
        Map Google GenAI parameters to provider-specific format.

        Args:
            generate_content_optional_params: Optional parameters for generate content
            model: The model name

        Returns:
            Mapped parameters for the provider
        r   )r   )litellm.types.google_genai.mainr   rA   itemsdict)r   rB   r#   r   _generate_content_config_dictsupported_google_genai_paramsparamvalues           r   $map_generate_content_optional_paramsz6GoogleGenAIConfig.map_generate_content_optional_paramsS   s]     	N(A(C%(,([([\a(b%8>>@LE5557<-e4 A 122r   api_keyheaderslitellm_paramsc                 H    ddi}|d| |d<   ||j                  |       |S )NzContent-Typezapplication/jsonzBearer Authorization)update)r   rL   rM   r#   rN   default_headerss         r   validate_environmentz&GoogleGenAIConfig.validate_environmentj   sD     .
 18	/BOO,""7+r   c                     |j                  dd       xs1 |j                  dd       xs t        d      xs t        j                  S )NrL   gemini_api_keyGEMINI_API_KEY)popr   litellmrL   )r   rN   s     r   _get_google_ai_studio_api_keyz/GoogleGenAIConfig._get_google_ai_studio_api_key{   sI    y$/ !!"2D9./ 		
r   c                 r    | j                  |      }| j                  |      }| j                  |      }|||fS )z
        Get common authentication components used by both sync and async methods.
        
        Returns:
            Tuple of (vertex_credentials, vertex_project, vertex_location)
        )get_vertex_ai_credentialsget_vertex_ai_projectget_vertex_ai_location)r   rN   vertex_credentialsvertex_projectvertex_locations        r   _get_common_auth_componentsz-GoogleGenAIConfig._get_common_auth_components   sB     ";;NK33NC55nE!>?BBr   auth_headerr_   r`   r^   streamapi_basec	                     | j                  |      }	| j                  ||	|||||| j                  |d
      \  }}| j                  |d||      }
|
|fS )zG
        Build final headers and API URL from auth components.
        T)
r#   rU   rb   r_   r`   r^   rc   r   rd   should_use_v1beta1_featuresN)rL   rM   r#   rN   )rY   _get_token_and_urlr   rS   )r   r#   rb   r_   r`   r^   rc   rd   rN   rU   rM   s              r   _build_final_headers_and_urlz.GoogleGenAIConfig._build_final_headers_and_url   s     ;;NK $ 7 7)#)+1 $ 8 8(, !8 !
X ++)	 , 
   r   c           
          | j                  |      \  }}}| j                  ||| j                        \  }}| j                  ||||||||      S )z9
        Sync version of get_auth_token_and_url.
        credentials
project_idr   r#   rb   r_   r`   r^   rc   rd   rN   )ra   _ensure_access_tokenr   rh   	r   rd   r#   rN   rc   r^   r_   r`   _auth_headers	            r   sync_get_auth_token_and_urlz-GoogleGenAIConfig.sync_get_auth_token_and_url   sz     ?C>^>^_m>n;NO'+'@'@*% $ 8 8 (A (
$n 00$)+1) 1 	
 		
r   c           
         K   | j                  |      \  }}}| j                  ||| j                         d{   \  }}| j                  ||||||||      S 7  w)z
        Get the complete URL for the request.

        Args:
            api_base: Base API URL
            model: The model name
            litellm_params: LiteLLM parameters

        Returns:
            Tuple of headers and API base
        rj   Nrm   )ra   _ensure_access_token_asyncr   rh   ro   s	            r   get_auth_token_and_urlz(GoogleGenAIConfig.get_auth_token_and_url   s     $ ?C>^>^_m>n;NO-1-L-L*% $ 8 8 .M .
 (
$n 00$)+1) 1 	
 		
(
s   7AA!Acontentsc           	      X    ddl m}m}  ||| |di |      }t        t        |      }|S )Nr   )r   GenerateContentRequestDict)r#   ru   generationConfigr   )rD   r   rw   r   rF   )r   r#   ru   rB   r   rw   typed_generate_content_requestrequest_dicts           r   "transform_generate_content_requestz4GoogleGenAIConfig.transform_generate_content_request   s<    	
 *D6V9UV*
& D"@Ar   raw_responselogging_objc                     ddl m} 	 |j                         }||j                  d<    |di |S # t        $ r0}| j	                  d| |j
                  |j                        d}~ww xY w)z
        Transform the raw response from the generate content API.

        Args:
            model: The model name
            raw_response: Raw HTTP response

        Returns:
            Transformed response data
        r   )r   z.Error transforming generate content response: )error_messagestatus_coderM   Nhttpx_responser   )rD   r   json	Exceptionget_error_classr   rM   model_call_details)r   r#   r|   r}   r   responsees          r   #transform_generate_content_responsez5GoogleGenAIConfig.transform_generate_content_response  s      	L	#((*H <H&&'78&222  	&& NqcR(44$,, '  	s   / 	A(+A##A()#__name__
__module____qualname____doc__propertyr   r   r!   strr   rA   r   r   r   rK   r   rF   r
   r   rS   rY   r	   ra   boolrh   rq   rt   r   r{   httpxResponseLiteLLMLoggingObjr   r   __classcell__)r"   s   @r   r   r      sX    W-B%C  !'
C '
DQTI '
T3&?3 3 
c3h	3.# $ 	
 !';T'A!BC 
"
D 
Xc] 
CC 
sHSM8C=0	1C$!$! c]$! !	$!
 "#$!  $! $! 3-$! $! 
tSy	$!L
3-
 
 	

 
 
tSy	
:#
3-#
 #
 	#

 #
 
tSy	#
L 6 '+	
 
(33 nn3 '	3
 
!3r   r   )r   typingr   r   r   r   r   r   r	   r
   r   r   rX   *litellm.litellm_core_utils.litellm_loggingr   r   1litellm.llms.base_llm.google_genai.transformationr   @litellm.llms.vertex_ai.gemini.vertex_and_google_ai_studio_geminir   litellm.secret_managers.mainr   litellm.types.routerr   rD   r   r   r   r   r   r   r   <module>r      sb    Y X X   S W 7 5  !$*-'!N3<i N3r   