Ë
    uPêj—6  ã                   óÒ   — d Z ddlmZ ddl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mZ ddlmZ dd	lmZ erdd
lmZmZmZmZ neZeZeZeZddlmZ  G d„ dee«      Zy)zB
Transformation for Calling Google models in their native format.
é    )Údeepcopy)ÚTYPE_CHECKINGÚAnyÚFinalÚLiteralÚcastN)ÚLogging)Ú$BaseGoogleGenAIGenerateContentConfig)Ú_build_vertex_schemaÚsupports_response_json_schema)Ú	VertexLLM)ÚGenericLiteLLMParams)ÚGenerateContentConfigDictÚ#GenerateContentContentListUnionDictÚGenerateContentResponseÚToolConfigDicté   )Úget_api_key_from_envc                   ó  ‡ — e Zd 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	dz  dedz  de	deez  dz  def
d„Zdede	dz  fd„Zdedeee	dz  e	dz  f   fd„Zde	de	dz  de	dz  de	dz  dedede	dz  dedeee	f   fd„Zde	dz  de	dededeee	f   f
d„Zde	dz  de	dededeee	f   f
d„Zed	ede	ddfd„«       Z	 d%de	dededz  d	ededz  defd„Zde	d ej>                  d!e de!fd"„Z"d#edefd$„Z#ˆ xZ$S )&ÚGoogleGenAIConfigzI
    Configuration for calling Google models in their native format.
    zx-goog-api-keyÚreturn)ÚgeminiÚ	vertex_aic                  ó   — y)Nr   © )Úselfs    út/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/gemini/google_genai/transformation.pyÚcustom_llm_providerz%GoogleGenAIConfig.custom_llm_provider1   s   € àó    c                 óL   •— t         ‰| �  «        t        j                  | «       y ©N)ÚsuperÚ__init__r   )r   Ú	__class__s    €r   r#   zGoogleGenAIConfig.__init__5   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Úresponse_json_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_configÚimage_configr   )r   r%   s     r   Ú.get_supported_generate_content_optional_paramsz@GoogleGenAIConfig.get_supported_generate_content_optional_params9   s   € ò
ð 	
r   Úgenerate_content_config_dictc                 óP  ‡‡— ddl mŠmŠ i }| j                  |«      }t	        |«      }|j                  ˆfd„|D «       «       |j                  ˆfd„|D «       «       |j                  «       D ]6  \  }} ‰|«      } ‰|«      }	||v xs
 ||v xs |	|v }
|
sŒ)||	k7  r|	n|}|||<   Œ8 |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   )Ú_camel_to_snakeÚ_snake_to_camelc              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wr!   r   )Ú.0ÚprI   s     €r   ú	<genexpr>zIGoogleGenAIConfig.map_generate_content_optional_params.<locals>.<genexpr>|   s   øè ø€ Ò#^¸1¡O°A×$6Ñ#^ùs   ƒc              3   ó8   •K  — | ]  }d |vsŒ ‰|«      –— Œ y­w)Ú_Nr   )rK   rL   rH   s     €r   rM   zIGoogleGenAIConfig.map_generate_content_optional_params.<locals>.<genexpr>}   s   øè ø€ Ò#n¸1ÐadÐlmÒam¡O°A×$6Ñ#nùs   ƒ	�)Ú,litellm.llms.vertex_ai.gemini.transformationrH   rI   rE   ÚsetÚupdateÚitems)r   rF   r%   Ú_generate_content_config_dictÚsupported_google_genai_paramsÚsupported_params_setÚparamÚvalueÚparam_snakeÚparam_camelÚis_supportedÚ
output_keyrH   rI   s               @@r   Ú$map_generate_content_optional_paramsz6GoogleGenAIConfig.map_generate_content_optional_paramsd   sâ   ù€ ÷	
ð
 @BÐ%Ø/3×/bÑ/bÐchÓ/iÐ%ä&)Ð*GÓ&HÐØ×#Ñ#Ó#^Ð@]Ô#^Ô^Ø×#Ñ#Ó#nÐ@]Ô#nÔnà8×>Ñ>Ó@ò 	B‰LˆE�5ñ *¨%Ó0ˆKÙ)¨%Ó0ˆKð Ð6Ð6ò @ØÐ"?Ð?ò@àÐ"?Ð?ð ò à,1°[Ò,@™[Àe�
Ø<AÐ-¨jÒ9ð!	Bð" -Ð,r   Úapi_keyNÚheadersÚlitellm_paramsc                 óÞ   — ddi}|xs | j                  t        |xs i «      «      }t        |t        «      r|j                  |«       n|�||| j                  <   |�|j                  |«       |S )NzContent-Typezapplication/json)Ú_get_google_ai_studio_api_keyÚdictÚ
isinstancerR   ÚXGOOGLE_API_KEY)r   r^   r_   r%   r`   Údefault_headersÚgemini_api_keys          r   Úvalidate_environmentz&GoogleGenAIConfig.validate_environment’   s|   € ð Ð.ð"
ˆð !(Ò i¨4×+MÑ+MÌdÐSaÒSgÐegÓNhÓ+iˆÜ�n¤dÔ+Ø×"Ñ" >Õ2ØÐ'Ø4BˆO˜D×0Ñ0Ñ1ØÐØ×"Ñ" 7Ô+àÐr   c                 óŠ   — |j                  dd «      xs0 |j                  dd «      xs t        «       xs t        j                  S )Nr^   rg   )Úpopr   Úlitellmr^   )r   r`   s     r   rb   z/GoogleGenAIConfig._get_google_ai_studio_api_key§   sF   € à×Ñ˜y¨$Ó/ò Ø×!Ñ!Ð"2°DÓ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   r`   Úvertex_credentialsÚvertex_projectÚvertex_locations        r   Ú_get_common_auth_componentsz-GoogleGenAIConfig._get_common_auth_components¯   sB   € ð %)×$BÑ$BÀ>Ó$RÐØ $× :Ñ :¸>Ó JˆØ!%×!<Ñ!<¸^Ó!LˆØ! >°?ÐBÐBr   Úauth_headerrq   rr   rp   ÚstreamÚapi_basec	                 ó¦   — | j                  |«      }	| j                  ||	|||||| j                  |d¬«
      \  }}| j                  |d||¬«      }
|
|fS )zG
        Build final headers and API URL from auth components.
        T)
r%   rg   rt   rq   rr   rp   ru   r   rv   Úshould_use_v1beta1_featuresN)r^   r_   r%   r`   )rb   Ú_get_token_and_urlr   rh   )r   r%   rt   rq   rr   rp   ru   rv   r`   rg   r_   s              r   Ú_build_final_headers_and_urlz.GoogleGenAIConfig._build_final_headers_and_url¾   s‚   € ð !%× BÑ BÀ>Ó Rˆà $× 7Ñ 7ØØ)Ø#Ø)Ø+Ø1ØØ $× 8Ñ 8ØØ(,ð !8ó !
Ñˆ�Xð ×2Ñ2ØØØØ)ð	 3ó 
ˆð ˜Ð Ð r   c           
      ó    — | j                  |«      \  }}}| j                  ||| j                  ¬«      \  }}| j                  ||||||||¬«      S )z9
        Sync version of get_auth_token_and_url.
        ©ÚcredentialsÚ
project_idr   ©r%   rt   rq   rr   rp   ru   rv   r`   )rs   Ú_ensure_access_tokenr   rz   ©	r   rv   r%   r`   ru   rp   rq   rr   Ú_auth_headers	            r   Úsync_get_auth_token_and_urlz-GoogleGenAIConfig.sync_get_auth_token_and_urlä   s~   € ð ×,Ñ,¨^Ó<ñ		
ØØØð (,×'@Ñ'@Ø*Ø%Ø $× 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
        r|   Nr   )rs   Ú_ensure_access_token_asyncr   rz   r�   s	            r   Úget_auth_token_and_urlz(GoogleGenAIConfig.get_auth_token_and_url  sŒ   è ø€ ð, ×,Ñ,¨^Ó<ñ		
ØØØð .2×-LÑ-LØ*Ø%Ø $× 8Ñ 8ð .Mó .
÷ (
Ñ$ˆ�nð ×0Ñ0ØØ$Ø)Ø+Ø1ØØØ)ð 1ó 	
ð 		
ð(
ús   ‚7A¹Aº!Ac                 ób  ‡ — t        ˆ fd„dD «       d «      }t        ˆ fd„dD «       d «      }|€y ‰ |   }t        |t        «      sy t        |«      r4|�‰ j	                  |«       y ‰ j	                  |«       |dk(  rdnd}|‰ |<   y |�‰ j	                  |«       t        t        |«      d¬	«      ‰ |<   y )
Nc              3   ó,   •K  — | ]  }|‰v sŒ|–— Œ y ­wr!   r   ©rK   ÚkrF   s     €r   rM   z?GoogleGenAIConfig._normalize_response_schema.<locals>.<genexpr>1  s   øè ø€ Òc�1ÀÐFbÒAbŒQÑcùó   ƒ	�)ÚresponseSchemar5   c              3   ó,   •K  — | ]  }|‰v sŒ|–— Œ y ­wr!   r   r‰   s     €r   rM   z?GoogleGenAIConfig._normalize_response_schema.<locals>.<genexpr>5  s   øè ø€ Òl�1È!ÐOkÒJkŒQÑlùr‹   )ÚresponseJsonSchemar6   r5   r6   rŽ   T)Ú
parametersÚadd_property_ordering)Únextrd   rc   r   rj   r   r   )rF   r%   Ú
schema_keyÚjson_schema_keyrX   Únew_json_schema_keys   `     r   Ú_normalize_response_schemaz,GoogleGenAIConfig._normalize_response_schema.  sË   ø€ ä ÛcÐ=ÔcØó
ˆ
ô "&ÛlÐFÔlØó"
ˆð
 ÐØà3°JÑ?ˆÜ˜%¤Ô&Øä(¨Ô/ØÐ*Ø,×0Ñ0°Ô<ØØ(×,Ñ,¨ZÔ8Ø<FÐJ[Ò<[Ñ"8ÐauÐØ@EÐ(Ð)<Ò=àÐ*Ø,×0Ñ0°ÔAÜ7KÜ# E›?À$ô8Ð(¨Ò4r   Úcontentsr:   r(   c           
      óŒ   — ddl m}m} | j                  ||«        |||| |di |¤Ž¬«      }t	        t
        |«      }	|�||	d<   |	S )Nr   )r   ÚGenerateContentRequestDict)r%   r–   r:   ÚgenerationConfigÚsystemInstructionr   )Úlitellm.types.google_genai.mainr   r˜   r•   r   rc   )
r   r%   r–   r:   rF   r(   r   r˜   Útyped_generate_content_requestÚrequest_dicts
             r   Ú"transform_generate_content_requestz4GoogleGenAIConfig.transform_generate_content_requestN  s`   € ÷	
ð
 	×'Ñ'Ð(DÀeÔLá0JØØØÙ6ÑVÐ9UÑVô	1
Ð&ô #¤4Ð)GÓHˆàÐ)Ø0BˆLÐ,Ñ-ØÐr   Úraw_responseÚlogging_objc                 óø   — ddl m} 	 |j                  «       }||j                  d<   | j                  |«      } |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_coder_   NÚhttpx_responser   )	r›   r   ÚjsonÚ	ExceptionÚget_error_classr£   r_   Úmodel_call_detailsÚ%convert_citation_sources_to_citations)r   r%   rŸ   r    r   ÚresponseÚes          r   Ú#transform_generate_content_responsez5GoogleGenAIConfig.transform_generate_content_responsej  s“   € õ  	Lð	Ø#×(Ñ(Ó*ˆHð <Hˆ×&Ñ&Ð'7Ñ8Ø×=Ñ=¸hÓGˆá&Ñ2¨Ñ2Ð2øô ò 	Ø×&Ñ&Ø NÈqÈcÐRØ(×4Ñ4Ø$×,Ñ,ð 'ó ð ûð	ús   ˆA  Á 	A9Á	+A4Á4A9rª   c                 ó�   — d|v rA|d   D ]9  }d|v sŒt        |d   t        «      sŒ|d   }d|v sŒ&|j                  d«      |d<   Œ; |S )z‡
        Convert citation sources to citations.
        API's camelCase citationSources becomes the SDK's snake_case citations
        Ú
candidatesÚcitationMetadataÚcitationSourcesÚ	citations)rd   rc   rj   )r   rª   Ú	candidateÚcitation_metadatas       r   r©   z7GoogleGenAIConfig.convert_citation_sources_to_citationsŠ  sm   € ð
 ˜8Ñ#Ø% lÑ3ò b�	Ø%¨Ò2´zÀ)ÐL^ÑB_ÔaeÕ7fØ(1Ð2DÑ(EÐ%à(Ð,=Ò=Ø9J×9NÑ9NÐO`Ó9aÐ)¨+Ò6ðbð ˆr   r!   )%Ú__name__Ú
__module__Ú__qualname__Ú__doc__re   Úpropertyr   r   r#   ÚstrÚlistrE   r   rc   r   r]   r   rh   rb   Útuplers   Úboolrz   rƒ   r†   Ústaticmethodr•   r   r   rž   ÚhttpxÚResponseÚLiteLLMLoggingObjr   r¬   r©   Ú__classcell__)r$   s   @r   r   r   &   s¼  ø„ ñð '€Oð ð WÐ-BÑ%Cò ó ðô!ð)
ÀCð )
ÈDÐQTÉIó )
ðV,-à&?ð,-ð ð,-ð 
ˆc�3ˆh‰ó	,-ð\à�t‘ðð ˜‘ðð ð	ð
 -¨tÑ3°dÑ:ðð 
óð*
¸Dð 
ÀSÈ4ÁZó 
ðCàðCð 
ˆs�C˜$‘J  d¡
Ð*Ñ	+óCð$!àð$!ð ˜4‘Zð$!ð ˜d™
ð	$!ð
 ˜t™ð$!ð  ð$!ð ð$!ð ˜‘*ð$!ð ð$!ð 
ˆt�SˆyÑ	ó$!ðL
à˜‘*ð
ð ð
ð ð	
ð
 ð
ð 
ˆt�SˆyÑ	ó
ðB'
à˜‘*ð'
ð ð'
ð ð	'
ð
 ð'
ð 
ˆt�SˆyÑ	ó'
ðR ðÀð Ècð ÐVZò ó ððJ *.ñàðð 6ðð  Ñ$ð	ð
 '+ðð   $™Jðð 
óð83àð3ð —n‘nð3ð 'ð	3ð
 
!ó3ð@¸dð Àt÷ r   r   )r·   Úcopyr   Útypingr   r   r   r   r   r¾   rk   Ú*litellm.litellm_core_utils.litellm_loggingr	   rÀ   Ú1litellm.llms.base_llm.google_genai.transformationr
   Ú#litellm.llms.vertex_ai.common_utilsr   r   Ú@litellm.llms.vertex_ai.gemini.vertex_and_google_ai_studio_geminir   Úlitellm.types.routerr   r›   r   r   r   r   Úcommon_utilsr   r   r   r   r   ú<module>rÊ      sk   ðñõ ß ;Õ ;ã ã Ý Sõ÷õ WÝ 5á÷ô ð !$ÐØ*-Ð'Ø!ÐØ€Nå /ôpÐ<¸iõ pr   