Ë
    uPêj1D  ã                   ój  — U d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZ d dl	Z	d dl
Z
d dlmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d
ddddddddddddddœZeeeef      ed<   i dd“dd“dd“dd“dd “d!d “d"d “d#d “d$d%“d&d%“d'd%“d(d%“d)d*“d+d*“d,d*“d-d*“d.d/“i d0d/“d1d/“d2d/“d3d4“d5d4“d6d4“d7d4“d8d9“d:d9“d;d9“d<d9“d=d>“d?d>“d@d>“dAd>“dBdC“dDdC“¥i dEdC“dFdC“dGdH“dIdH“dJdH“dKdH“dLdM“dNdM“dOdM“dPdM“dQdR“dSdR“dTdR“dUdR“dVdW“dXdW“dYdW“¥dWdZdZdZdZd>d4d[œ¥Zeeeeef   ef      ed\<   d]ed^ed_eeef   dz  fd`„Z d^ed_e!fda„Z"d^ed_e!fdb„Z#	 	 d€dceeef   d^eddee   deeeef   dz  dfe!d_eeef   fdg„Z$dhe%eeef      d_e%eeef      fdi„Z&dhe%e   d_e!fdj„Z'dkeeef   dleeef   d_eeef   fdm„Z(dneeef   d_edz  fdo„Z)d^edeeeef   d_eeef   fdp„Z*d]ed_eeef   dz  fdq„Z+dredsed_efdt„Z,dredsed_efdu„Z- G dv„ dwe«      Z. G dx„ dye«      Z/d�dzeee0f   d{ed_eee0f   fd|„Z1d_edz  fd}„Z2 G d~„ de«      Z3y)‚é    N)ÚSequence)ÚAnyÚFinal)ÚDEFAULT_MAX_RECURSE_DEPTH)ÚBaseLLMModelInfoÚBaseTokenCounter)ÚBaseLLMException©Úget_secret_str)ÚAllMessageValues)ÚTokenCountResponseg      ð?g      Ð?g      À?gUUUUUUå?g      ø?g      è?g      @gUUUUUUõ?gš™™™™™é?g      ô?g       @g      â?gÇqÇqü?g«ªªªªª@)ú1:1ú1:4ú1:8ú2:3ú3:2ú3:4ú4:1ú4:3ú4:5ú5:4ú8:1ú9:16ú16:9ú21:9ÚGEMINI_IMAGE_ASPECT_RATIOS)é   r   r   )é   r   )é   r   )é   r    )é   r   r   )r   r   )r   r    )r   é    )éÀ   é   r   )é€  é   )é   é   )r$   é 0  )é¨  éx  r   )éP  éð  )é   éà	  )é@  éÀ  )r+   r*   r   )r-   r,   )r/   r.   )r1   r0   )éÀ  éX  r   )é€  é°  )é   é`	  )é   éÀ  )r   r!   r   )r   r   )r    r   )r"   r   )r3   r2   r   )r5   r4   )r7   r6   )r9   r8   )éÐ  é@  r   )é   é€  )é@  é 	  )é€  é   )r;   r:   r   )r=   r<   )r?   r>   )rA   r@   )r$   r#   r   )r&   r%   )r(   r'   )r)   r$   )r%   é°  r   )r'   é`  )r$   éÀ
  )r&   é€  )rB   r%   r   )rC   r'   )rD   r$   r   ))rE   r&   )i  iP  )i0  i   )i`  i@  )iÀ  i€
  )é   r4   )r4   rF   Ú!GEMINI_IMAGE_SIZE_TO_ASPECT_RATIOÚsizeÚmodelÚreturnc                 ó¤   — t        | «      }|€y |\  }}dt        ||«      i}t        ||«      }t        |«      rt	        |«      r||d<   |S ||d<   |S )NÚaspectRatioÚ	imageSize)Ú_parse_openai_image_sizeÚ&_map_dimensions_to_gemini_aspect_ratioÚ$_map_dimensions_to_gemini_image_sizeÚis_gemini_image_modelÚsupports_gemini_image_size)rH   rI   Ú
dimensionsÚwidthÚheightÚimage_configÚ
image_sizes          úe/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/gemini/common_utils.pyÚ&map_openai_size_to_gemini_image_configrY   c   sr   € Ü0°Ó6€JØÐØà�M€Eˆ6Ø(Ô*PÐQVÐX^Ó*_Ð`€LÜ<¸UÀFÓK€JÜ˜UÔ#Ü% eÔ,Ø(2ˆL˜Ñ%ð Ðð %/ˆ�[Ñ!ØÐó    c                 óš   — 	 t        j                  | ¬«      }|j                  d«      }|�t        |«      S 	 d| vS # t        $ r Y d| vS w xY w)N©rI   Úsupports_image_sizez	2.5-flash)ÚlitellmÚget_model_infoÚgetÚboolÚ	Exception)rI   Ú
model_infoÚvalues      rX   rR   rR   s   sg   € ðÜ#×2Ñ2¸Ô?ˆ
Ø!—~‘~Ð&;Ó<ˆØÐÜ˜“;Ðð ð ˜eÐ#Ð#øô ò ØØ˜eÐ#Ð#ðús   ‚3; »	A
Á	A
c                 ó4   — | j                  dd«      d   }d|v S )Nú/é   éÿÿÿÿÚgemini)Úsplit)rI   Ú
base_models     rX   rQ   rQ   ~   s"   € ØŸ™ C¨Ó+¨BÑ/€JØ�zÐ!Ð!rZ   ÚparamsÚsupported_paramsÚoptional_paramsÚparse_image_config_stringc                 ó^  — |xs i }| j                  «       D ��ci c]  \  }}||v sŒ||“Œ }}}i }d|v rd|vr|d   |d<   d|v r:d|vr6t        |d   |«      }	|	�%t        |«      r|	|d<   n|	d   |d<   d|	v r|	d   |d<   |j                  d«      }
t	        |
t
        «      r|r	 t        j                  |
«      }
t	        |
t        «      r|
|d<   |j                  «       D ]  \  }}|d	vsŒ||vsŒ|||<   Œ |S c c}}w # t        j                  $ r}t        j                  |d¬«      |‚d }~ww xY w)
NÚnÚsampleCountrH   ÚimageConfigrL   rM   z;`imageConfig` must be valid JSON when provided as a string.)rI   Úmessage)rq   rH   rs   ÚtoolsÚweb_search_options)ÚitemsrY   rQ   r`   Ú
isinstanceÚstrÚjsonÚloadsÚJSONDecodeErrorr^   ÚUnsupportedParamsErrorÚdict)rl   rI   rm   rn   ro   Úkeyrd   Úfiltered_paramsÚmapped_paramsrV   Úimage_config_paramÚexcs               rX   Ú!map_openai_image_params_to_geminir„   ƒ   s†  € ð &Ò+¨€OØ;A¿<¹<»>×e©Z¨S°%ÈSÐTdÒMd˜c 5™jÐe€OÑeà+-€Mà
ˆoÑ #¨_Ñ"<Ø'6°sÑ';ˆ�mÑ$à�Ñ  V°?Ñ%BÜDØ˜FÑ#Øó
ˆð Ð#Ü$ UÔ+Ø/;�˜mÒ,à/;¸MÑ/J�˜mÑ,Ø ,Ñ.Ø1=¸kÑ1J�M +Ñ.à(×,Ñ,¨]Ó;ÐÜÐ$¤cÔ*Ñ/Hð	Ü!%§¡Ð,>Ó!?Ðô Ð$¤dÔ+Ø'9ˆ�mÑ$à%×+Ñ+Ó-ò '‰
ˆˆUØÐQÒQÐVYÐapÒVpØ!&ˆM˜#Òð'ð ÐùóI føô0 ×#Ñ#ò 	Ü×0Ñ0ØØUôð ðûð	ús"   šC6§C6Â#C< Ã<D,ÄD'Ä'D,ru   c                 ó>  ‡— ddl m} |j                  «       }t        «       }g }| D ]t  Št	        ‰t
        «      s|j                  ‰«       Œ%t        ˆfd„|D «       d «      }|€|j                  ‰«       ŒN||v rŒS|j                  |«       |j                  ‰«       Œv |S )Nr   ©ÚVertexGeminiConfigc              3   ó,   •K  — | ]  }|‰v sŒ|–— Œ y ­w©N© ©Ú.0r   Útools     €rX   ú	<genexpr>z._dedupe_gemini_search_tools.<locals>.<genexpr>À   s   øè ø€ ÒJ 3¸cÀTºkœ3ÑJùs   ƒ	�)	Ú@litellm.llms.vertex_ai.gemini.vertex_and_google_ai_studio_geminir‡   Ú_search_tool_keysÚsetrx   r~   ÚappendÚnextÚadd)ru   r‡   Úsearch_tool_keysÚseen_search_keysÚdeduped_toolsÚ
search_keyr�   s         @rX   Ú_dedupe_gemini_search_toolsr™   ²   sª   ø€ õð 1×BÑBÓDÐÜ(+«ÐØ13€Màò #ˆÜ˜$¤Ô%Ø× Ñ  Ô&ØäÓJÐ*:ÔJÈDÓQˆ
ØÐØ× Ñ  Ô&ØàÐ)Ñ)Øà×Ñ˜ZÔ(Ø×Ñ˜TÕ"ð#ð  ÐrZ   c                 óX   ‡— ddl m} |j                  «       Št        ˆfd„| D «       «      S )Nr   r†   c              3   ól   •‡K  — | ]*  Št        ‰t        «      xr t        ˆfd „‰D «       «      –— Œ, y­w)c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr‰   rŠ   r‹   s     €rX   rŽ   z4_has_gemini_search_tool.<locals>.<genexpr>.<genexpr>Ô   s   øè ø€ Ò-V¸c¨c°T¬kÑ-Vùs   ƒN)rx   r~   Úany)rŒ   r�   r•   s    @€rX   rŽ   z*_has_gemini_search_tool.<locals>.<genexpr>Ô   s-   ùè ø€ ÒiÐ[_Œz˜$¤Ó%ÒV¬#Ó-VÐEUÔ-VÓ*VÓVÑiùs   „04)r�   r‡   r�   r�   )ru   r‡   r•   s     @rX   Ú_has_gemini_search_toolrž   Î   s+   ø€ õð 1×BÑBÓDÐÜÓiÐchÔiÓiÐirZ   Únon_default_paramsr�   c                 óN  — ddl m}  |«       }t        |«      }|j                  dd «       | j	                  d«      }t        |t        «      r'|r%|j                  ||¬«      }|j                  ||«      }| j	                  d«      }|j	                  d«      }t        |t        «      r?t        |t        «      rt        |«      s$|j                  |«      }	|j                  ||	g«      }|j                  |«       t        |j	                  d«      t        «      rt        |d   «      |d<   |S )Nr   r†   rv   ru   )rd   rn   )r�   r‡   r~   Úpopr`   rx   ÚlistÚ_map_functionÚ_add_tools_to_optional_paramsrž   Ú_map_web_search_optionsÚ'_drop_search_tools_mixed_with_functionsr™   )
rŸ   r�   r‡   Úgemini_configÚresultÚtools_valueÚmapped_toolsrv   Úexisting_toolsÚsearch_tools
             rX   Úmap_gemini_image_tools_paramsr­   ×   s  € õñ .Ó/€MÜ�-Ó €FØ
‡J�JÐ# TÔ*à+×/Ñ/°Ó8€KÜ�+œtÔ$©Ø+×9Ñ9ÀÐ]cÐ9ÓdˆØ×<Ñ<¸VÀ\ÓRˆà 2× 6Ñ 6Ð7KÓ LÐØ"ŸJ™J wÓ/€NÜÐ$¤dÔ+Ü�>¤4Ô(Ô-DÀ^Ô-Tà*×BÑBÐCUÓVˆØ×<Ñ<¸VÀkÀ]ÓSˆà×9Ñ9¸&ÔAä�&—*‘*˜WÓ%¤tÔ,Ü5°f¸W±oÓFˆˆw‰à€MrZ   Úresponse_datac                 ó.  — ddl m} g }| j                  dg «      D ]h  }t        |t        «      sŒ|j                  d«      }t        |t
        «      r|j                  |«       ŒGt        |t        «      sŒX|j                  |«       Œj |j                  |«      S )Nr   r†   Ú
candidatesÚgroundingMetadata)	r�   r‡   r`   rx   r~   r¢   Úextendr’   Ú_calculate_web_search_requests)r®   r‡   Úgrounding_metadataÚ	candidateÚcandidate_groundings        rX   Ú$get_gemini_image_web_search_requestsr·   ø   s�   € õð 79ÐØ"×&Ñ& |°RÓ8ò ;ˆ	Ü˜)¤TÔ*ØØ'Ÿm™mÐ,?Ó@ÐÜÐ)¬4Ô0Ø×%Ñ%Ð&9Õ:ÜÐ+¬TÕ2Ø×%Ñ%Ð&9Õ:ð;ð ×<Ñ<Ð=OÓPÐPrZ   c                 óþ   ‡— dddgi}i }t        ‰j                  d«      t        «      r|j                  ‰d   «       t	        | «      s|j                  dd «       |r||d<   t        ˆfd„dD «       d «      }|�||d<   |S )	NÚresponse_modalitiesÚIMAGEÚTEXTrs   rM   c              3   óJ   •K  — | ]  }‰j                  |«      �‰|   –— Œ y ­wr‰   )r`   )rŒ   r   rn   s     €rX   rŽ   z5get_gemini_image_generation_config.<locals>.<genexpr>  s/   øè ø€ ò 	
àØ×"Ñ" 3Ó'Ð3ð ˜CÕ ñ	
ùs   ƒ #)ÚcandidateCountÚcandidate_countrr   rq   r½   )rx   r`   r~   ÚupdaterR   r¡   r“   )rI   rn   Úgeneration_configrV   r¾   s    `   rX   Ú"get_gemini_image_generation_configrÁ     s    ø€ ð 1FÈÐQWÐGXÐ/YÐà*,€LÜ�/×%Ñ% mÓ4´dÔ;Ø×Ñ˜O¨MÑ:Ô;ä% eÔ,Ø×Ñ˜ dÔ+áØ+7Ð˜-Ñ(ä!ó	
àPô	
ð
 	ó€Oð Ð"Ø.=ÐÐ*Ñ+àÐrZ   c                 óÄ   — | dk(  ry | j                  «       j                  d«      \  }}}|sy 	 t        |«      }t        |«      }|dk  s|dk  ry ||fS # t        $ r Y y w xY w)NÚautoÚxr   )ÚlowerÚ	partitionÚintÚ
ValueError)rH   Ú	width_strÚ	separatorÚ
height_strrT   rU   s         rX   rN   rN   *  sv   € Øˆv‚~Øà'+§z¡z£|×'=Ñ'=¸cÓ'BÑ$€Iˆy˜*ÙØðÜ˜9“~ˆÜ˜J›ˆð �‚z�V˜q’[Øà�&ˆ=Ðøô ò Ùðús   ®A Á	AÁArT   rU   c                 ó`   ‡— | |ft         v rt         | |f   S | |z  Št        t        ˆfd„¬«      S )Nc                 óT   •— t        t        j                  t        |    ‰z  «      «      S r‰   )ÚabsÚmathÚlogr   )Úaspect_ratioÚrequested_ratios    €rX   ú<lambda>z8_map_dimensions_to_gemini_aspect_ratio.<locals>.<lambda>E  s!   ø€ ¤¤T§X¡XÔ.HÈÑ.VÐYhÑ.hÓ%iÓ!j€ rZ   )r   )rG   Úminr   )rT   rU   rÒ   s     @rX   rO   rO   >  s;   ø€ Øˆv€Ô;Ñ;Ü0°%¸°ÑAÐAà" V™^€OÜÜ"Ûjôð rZ   c                 óX   — t        j                  | |z  «      }|dk  ry|dk  ry|dk  ryy)Nr'   Ú512r$   Ú1Kr&   Ú2KÚ4K)rÏ   Úsqrt)rT   rU   Úeffective_square_sides      rX   rP   rP   I  s9   € Ü#'§9¡9¨U°V©^Ó#<ÐØ˜sÒ"ØØ˜tÒ#ØØ˜tÒ#ØØrZ   c                   ó   — e Zd Zy)ÚGeminiErrorN)Ú__name__Ú
__module__Ú__qualname__rŠ   rZ   rX   rÝ   rÝ   T  s   „ ØrZ   rÝ   c                   ód  — e Zd Z	 	 ddededee   dedededz  dedz  d	efd
„Zed	efd„«       Z	e
ddedz  d	edz  fd„«       Ze
ddedz  d	edz  fd„«       Ze
ded	edz  fd„«       Zdeeeef      d	ee   fd„Zddedz  dedz  d	ee   fd„Zdededeej$                  z  d	efd„Zd	edz  fd„Zy)ÚGeminiModelInfoNÚheadersrI   Úmessagesrn   Úlitellm_paramsÚapi_keyÚapi_baserJ   c                 ó   — |S )z8Google AI Studio sends api key via x-goog-api-key headerrŠ   )Úselfrã   rI   rä   rn   rå   ræ   rç   s           rX   Úvalidate_environmentz$GeminiModelInfo.validate_environmentY  s	   € ð ˆrZ   c                  ó   — y)NÚv1betarŠ   ©ré   s    rX   Úapi_versionzGeminiModelInfo.api_versionf  s   € àrZ   c                 ó(   — | xs t        d«      xs dS )NÚGEMINI_API_BASEz)https://generativelanguage.googleapis.comr
   )rç   s    rX   Úget_api_basezGeminiModelInfo.get_api_basej  s   € àÒkœ>Ð*;Ó<ÒkÐ@kÐkrZ   c                 ó:   — | xs t        d«      xs t        d«      S ©NÚGOOGLE_API_KEYÚGEMINI_API_KEYr
   )ræ   s    rX   Úget_api_keyzGeminiModelInfo.get_api_keyn  s   € àÒbœ>Ð*:Ó;ÒbÄÐP`ÓAaÐbrZ   c                 ó&   — | j                  dd«      S )Núgemini/Ú )Úreplacer\   s    rX   Úget_base_modelzGeminiModelInfo.get_base_modelr  s   € à�}‰}˜Y¨Ó+Ð+rZ   Úmodelsc                 ón   — g }|D ]-  }|d   j                  dd«      }d|z   }|j                  |«       Œ/ |S )NÚnamezmodels/rù   rø   )rú   r’   )ré   rü   Úlitellm_model_namesrI   Ústripped_model_nameÚlitellm_model_names         rX   Úprocess_model_namez"GeminiModelInfo.process_model_namev  sQ   € Ø%'ÐØò 	;ˆEØ"'¨¡-×"7Ñ"7¸	À2Ó"FÐØ!*Ð-@Ñ!@ÐØ×&Ñ&Ð'9Õ:ð	;ð #Ð"rZ   c                 óž  — t         j                  |«      }t         j                  |«      }d| j                  › d�}|�|€t	        d«      ‚t
        j                  j                  |› |› �d|i¬«      }|j                  dk7  r)t	        d|j                  › d|j                  «       › �«      ‚|j                  «       d	   }| j                  |«      }|S )
Nrf   z/modelsz‡GEMINI_API_BASE or GEMINI_API_KEY/GOOGLE_API_KEY is not set. Please set the environment variable, to query Gemini's `/models` endpoint.zx-goog-api-key)Úurlrã   éÈ   z1Failed to fetch models from Gemini. Status code: z, Response: rü   )râ   rñ   rö   rî   rÈ   r^   Úmodule_level_clientr`   Ústatus_coderz   r  )ré   ræ   rç   ÚendpointÚresponserü   rÿ   s          rX   Ú
get_modelszGeminiModelInfo.get_models~  sî   € Ü"×/Ñ/°Ó9ˆÜ!×-Ñ-¨gÓ6ˆØ˜d×.Ñ.Ð/¨wÐ7ˆØÐ˜w˜Üð Zóð ô "×5Ñ5×9Ñ9Ø�*˜X˜JÐ'Ø% wÐ/ð :ó 
ˆð
 ×Ñ 3Ò&ÜØCÀH×DXÑDXÐCYÐYeÐfn×fsÑfsÓfuÐevÐwóð ð !Ÿ™›¨Ñ1ˆà%)×%<Ñ%<¸VÓ%DÐØ"Ð"rZ   Úerror_messager  c                 ó   — t        |||¬«      S )N)r  rt   rã   )rÝ   )ré   r  r  rã   s       rX   Úget_error_classzGeminiModelInfo.get_error_class–  s   € Ü {¸MÐSZÔ[Ð[rZ   c                 ó   — t        «       S )zä
        Factory method to create a token counter for this provider.

        Returns:
            Optional TokenCounterInterface implementation for this provider,
            or None if token counting is not supported.
        ©ÚGoogleAIStudioTokenCounterrí   s    rX   Úget_token_counterz!GeminiModelInfo.get_token_counter™  s   € ô *Ó+Ð+rZ   )NNr‰   )rÞ   rß   rà   r~   ry   r¢   r   rê   Úpropertyrî   Ústaticmethodrñ   rö   rû   r  r
  rÇ   ÚhttpxÚHeadersr	   r  r   r  rŠ   rZ   rX   râ   râ   X  sš  „ ð #Ø#ñàðð ðð Ð'Ñ(ð	ð
 ðð ðð �t‘ðð ˜‘*ðð 
óð ð˜Sò ó ðð ñl˜s T™zð l°S¸4±Zò ló ðlð ñc˜S 4™Zð c°3¸±:ò có ðcð ð,˜cð , c¨D¡jò ,ó ð,ð#¨¨d°3¸°8©nÑ)=ð #À$ÀsÁ)ó #ñ# #¨¡*ð #¸sÀT¹zð #ÐUYÐZ]ÑU^ó #ð0\¨Sð \¸sð \ÈTÐTY×TaÑTaÑMað \Ðfvó \ð,Ð#3°dÑ#:ô ,rZ   râ   ÚdataÚdepthc           	      ó  — |t         kD  r| S i }t        | t        «      s| S | j                  «       D �]B  \  }}t        |t        «      r(t        j                  |«      j                  d«      ||<   Œ?t        |t        j                  «      r|j                  «       ||<   Œmt        |t        «      rt        ||dz   «      ||<   Œ�t        |t        «      ržt        d„ |D «       «      r5|D �cg c]&  }t        j                  |«      j                  d«      ‘Œ( c}||<   t        d„ |D «       «      r#|D �cg c]  }|j                  «       ‘Œ c}||<   �Œ|D �cg c]  }t        ||dz   «      ‘Œ c}||<   �Œ>|||<   �ŒE |S c c}w c c}w c c}w )aÄ  Converts unserializable types in dict to json.dumps() compatible types.

    This function is called in models.py after calling convert_to_dict(). The
    convert_to_dict() can convert pydantic object to dict. However, the input to
    convert_to_dict() is dict mixed of pydantic object and nested dict(the output
    of converters). So they may be bytes in the dict and they are out of
    `ser_json_bytes` control in model_dump(mode='json') called in
    `convert_to_dict`, as well as datetime deserialization in Pydantic json mode.

    Returns:
      A dictionary with json.dumps() incompatible type (e.g. bytes datetime)
      to compatible type (e.g. base64 encoded string, isoformat date string).
    Úasciirg   c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr‰   )rx   Úbytes©rŒ   Úvs     rX   rŽ   z.encode_unserializable_types.<locals>.<genexpr>¿  s   è ø€ Ò7¨A”:˜a¤×'Ñ7ùs   ‚c              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wr‰   )rx   Údatetimer  s     rX   rŽ   z.encode_unserializable_types.<locals>.<genexpr>Á  s   è ø€ ÒC¸”:˜a¤×!2Ñ!2×3ÑCùs   ‚$&)r   rx   r~   rw   r  Úbase64Úurlsafe_b64encodeÚdecoder  Ú	isoformatÚencode_unserializable_typesr¢   Úall)r  r  Úprocessed_datar   rd   r  s         rX   r$  r$  ¤  sV  € ð Ô(Ò(ØˆØ/1€NÜ�dœDÔ!ØˆØ—j‘j“ló (‰
ˆˆUÜ�eœUÔ#Ü"(×":Ñ":¸5Ó"A×"HÑ"HÈÓ"QˆN˜3ÒÜ˜œx×0Ñ0Ô1Ø"'§/¡/Ó"3ˆN˜3ÒÜ˜œtÔ$Ü"=¸eÀUÈQÁYÓ"OˆN˜3ÒÜ˜œtÔ$ÜÑ7°Ô7Ô7Ø\aÖ&bÐWX¤v×'?Ñ'?ÀÓ'B×'IÑ'IÈ'Õ'RÒ&b�˜sÑ#ÜÑC¸UÔCÔCØ>CÖ&D¸ q§{¡{¥}Ò&D�˜sÓ#àZ_Ö&`ÐUVÔ'BÀ1ÀeÈaÁiÕ'PÒ&`�˜sÓ#à"'ˆN˜3Óð(ð  Ðùò 'cùâ&Dùâ&`s   Ã&+E8Ä-E=ÅFc                  ó2   — t        d«      xs t        d«      S ró   r
   rŠ   rZ   rX   Úget_api_key_from_envr(  Ê  s   € ÜÐ*Ó+ÒO¬~Ð>NÓ/OÐOrZ   c                   óº   — e Zd ZdZ	 ddedz  defd„Z	 	 	 	 ddedeeee	f      dz  deeee	f      dz  d	eee	f   dz  d
edeeee	f      dz  de	dz  de
dz  fd„Zy)r  z;Token counter implementation for Google AI Studio provider.NÚcustom_llm_providerrJ   c                 ó@   — ddl m} ||j                  j                  k(  S )Nr   )ÚLlmProviders)Úlitellm.types.utilsr,  ÚGEMINIrd   )ré   r*  r,  s      rX   Úshould_use_token_counting_apiz8GoogleAIStudioTokenCounter.should_use_token_counting_apiÑ  s   € õ 	5à" l×&9Ñ&9×&?Ñ&?Ñ?Ð?rZ   Úmodel_to_userä   ÚcontentsÚ
deploymentÚrequest_modelru   Úsystemc           	   ƒ   ó@  K  — dd l }ddlm}	 |xs i }|j                  |j	                  di «      «      }
||dœ}|
j                  |«         |	«       j                  d	i |
¤Žƒ d {  –—† }|�0t        |j	                  dd«      |||j	                  dd«      |¬«      S y 7 Œ7­w)
Nr   r  rå   )rI   r1  ÚtotalTokensÚtokenizer_usedrù   )Útotal_tokensr3  Ú
model_usedÚtokenizer_typeÚoriginal_responserŠ   )ÚcopyÚ(litellm.llms.gemini.count_tokens.handlerr  Údeepcopyr`   r¿   Úacount_tokensr   )ré   r0  rä   r1  r2  r3  ru   r4  r<  r  Úcount_tokens_params_requestÚcount_tokens_paramsr¨   s                rX   Úcount_tokensz'GoogleAIStudioTokenCounter.count_tokensÙ  s»   è ø€ ó 	åWàÒ% 2ˆ
Ø-1¯]©]¸:¿>¹>ÐJZÐ\^Ó;_Ó-`Ð#à!Ø ñ&
Ðð 	$×*Ñ*Ð+>Ô?ØHÑ8Ó:×HÑHñ 
Ø)ñ
÷ 
ˆð ÐÜ%Ø#ŸZ™Z¨°qÓ9Ø+Ø'Ø%Ÿz™zÐ*:¸BÓ?Ø"(ôð ð ð
ús   ‚A"BÁ$BÁ%8Br‰   )Nrù   NN)rÞ   rß   rà   Ú__doc__ry   ra   r/  r¢   r~   r   r   rB  rŠ   rZ   rX   r  r  Î  sÕ   „ ÙEð +/ñ@à  4™Zð@ð 
ó@ð -1ØØ-1Ø!ñ"àð"ð �t˜C ˜H‘~Ñ&¨Ñ-ð"ð �t˜C ˜H‘~Ñ&¨Ñ-ð	"ð
 ˜˜c˜‘N TÑ)ð"ð ð"ð �D˜˜c˜‘NÑ# dÑ*ð"ð �d‘
ð"ð 
˜dÑ	"ô"rZ   r  )NF)r   )4r   r  rz   rÏ   Úcollections.abcr   Útypingr   r   r  r^   Úlitellm.constantsr   Ú litellm.llms.base_llm.base_utilsr   r   Ú)litellm.llms.base_llm.chat.transformationr	   Úlitellm.secret_managers.mainr   Úlitellm.types.llms.openair   r-  r   r   r~   ry   ÚfloatÚ__annotations__rG   ÚtuplerÇ   rY   ra   rR   rQ   r„   r¢   r™   rž   r­   r·   rÁ   rN   rO   rP   rÝ   râ   Úobjectr$  r(  r  rŠ   rZ   rX   ú<module>rO     sÁ  ðÜ Û Û Û Ý $ß ã ã Ý 7ß OÝ FÝ 7Ý 6Ý 2ð ØØØØØØØØØØØØØñ7Ð ˜E $ s¨E zÑ"2Ñ3ó ð&;HØ�ð;Hà�%ð;Hð �%ð;Hð �%ð	;Hð
 �ð;Hð �ð;Hð �%ð;Hð �%ð;Hð �ð;Hð �ð;Hð �ð;Hð �5ð;Hð �ð;Hð �ð;Hð �%ð;Hð  �%ð!;Hð" �ñ#;Hð$ �ð%;Hð& �%ð';Hð( �%ð);Hð* �ð+;Hð, �ð-;Hð. �%ð/;Hð0 �%ð1;Hð2 �ð3;Hð4 �ð5;Hð6 �%ð7;Hð8 �%ð9;Hð: �ð;;Hð< �ð=;Hð> �%ð?;Hð@ �%ðA;HðB �ðC;HðD �òE;HðF �%ðG;HðH �%ðI;HðJ �ðK;HðL �ðM;HðN �%ðO;HðP �%ðQ;HðR �ðS;HðT �ðU;HðV �ðW;HðX �5ðY;HðZ �ð[;Hð\ �ð];Hð^ �&ð_;Hð` �&ða;Hðb �ðc;Hðd �ðe;Hðf �&ñg;Hðh ØØØØØØòu;HÐ ! 5¨¨e°C¸°H©o¸sÐ.BÑ)CÑ#Dó ;ð|°ð ¸Sð ÀTÈ#ÈsÈ(Á^ÐVZÑEZó ð $ cð $¨dó $ð" ð "¨ó "ð .2Ø&+ñ,Ø��c�‰Nð,àð,ð ˜s‘mð,ð ˜#˜s˜(‘^ dÑ*ð	,ð
  $ð,ð 
ˆ#ˆsˆ(�^ó,ð^ t¨D°°c°©NÑ';ð ÀÀTÈ#ÈsÈ(Á^Ñ@Tó ð8j 4¨¡9ð j°ó jðØ˜S #˜X™ðà˜˜S˜‘>ðð 
ˆ#ˆsˆ(�^óðBQØ˜˜S˜‘>ðQàˆ4�ZóQð(Øðà˜#˜s˜(‘^ðð 
ˆ#ˆsˆ(�^óð< 3ð ¨5°°c°©?¸TÑ+Aó ð(°#ð ¸sð Àsó ð°ð ¸Sð ÀSó ô	Ð"ô 	ôI,Ð&ô I,ñX# d¨3°¨;Ñ&7ð #Àð #ÈDÐQTÐV\ÐQ\ÑL]ó #ðLP˜c D™jó Pô-Ð!1õ -rZ   