§
    TCÄjlq  ã                   óB  — U d Z ddlZddlZddlZddlZddlZddlZddlZddl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m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 ddlmZ ej        dk    rddlmZ nej         Zej!        rddl"m#Z$ ddl%m&Z' ne	Z$ej        e(d<   e	Z'ej        e(d<    edd¬¦  «        Z)dZ* ej+        d¦  «        Z,dej-        dej.        fd„Z/dee0ej1        f         dee0         fd„Z2dee0ej1        f         dee0         fd„Z3	 dJdee0ej4        f         deej5                 dej5        fd„Z6	 	 dKdeej-                 de7de8e9         fd „Z:deej-                 d!e8e9         ddfd"„Z;	 	 	 dLdeej-                 d#ee<e0ef                  d$e7de<e0ee
d%e	f         ef         f         fd&„Z=d'ej>        dej>        fd(„Z?d'ee<e0e@f         e8e@         e@f         dee<e0e@f         e8e@         e@f         fd)„ZAd*e	de7fd+„ZBd,e	d*e	d-e0d.e0de	f
d/„ZCd'ej>        d0e
d%e	f         dej>        fd1„ZDd'ej>        d2e
d%e	f         de	fd3„ZEd'ej>        d2e
d%e	f         de	fd4„ZFd5ejG        d6e<e0ee
d%e	f         ef         f         de8ejH                 fd7„ZId5ejG        d6e<e0ee
d%e	f         ef         f         de8ejH                 fd8„ZJ	 dJdeej-                 de7fd9„ZK	 dJdeej-                 de9fd:„ZLdeej.                 ddfd;„ZM	 dJdeej-                 de7fd<„ZN	 dJdeej-                 deej.                 fd=„ZO	 	 dKdeej-                 de7dePeej.                 e<e0ef         f         fd>„ZQd?eejR        ejS        f         d@ejG        deejR        ejS        f         fdA„ZT	 	 dMdBee0ejU        e0         ejV        f         dCeejW                 dDee0         dePejX        e9e0f         fdE„ZY	 dJdeej-                 de7fdF„ZZdeee<e0e	f         e)f                  dGee)         dHe0de)fdI„Z[dS )NzNExtra utils depending on types that are shared between sync and async modules.é    N)	ÚAnyÚCallableÚDictÚOptionalÚTypeÚTypeVarÚUnionÚget_argsÚ
get_originé   )Ú_common)Ú
_mcp_utils)Ú_transformers)Úerrors)Útypes)Úversion)ÚMcpToGenAiToolAdapter)é   é
   )Ú	UnionType©ÚClientSession)ÚToolÚMcpClientSessionÚMcpToolÚCz_common.BaseModel)Úboundr   zgoogle_genai.modelsÚconfigÚreturnc                 óR   — t          | t          ¦  «        rt          j        di | ¤ŽS | S )N© )Ú
isinstanceÚdictr   ÚGenerateContentConfig)r   s    ú]C:\Projects\Historical\FacebookAutoPoster\venv\Lib\site-packages\google/genai/_extra_utils.pyÚ%_create_generate_content_config_modelr&   ;   s2   € õ ��ÑÔð ÝÔ&Ð0Ð0¨Ð0Ð0Ð0à€Mó    Úsrcc                 óP  — t          | t          ¦  «        r|                      d¦  «        r| S t          | t          ¦  «        r-|                      d¦  «        r| d         r| d         d         ndS t          | t
          j        ¦  «        r| j        r| j        r| j        d         ndS dS )z9Extracts the first GCS URI from the source, if available.zgs://Úgcs_urir   N)r"   ÚstrÚ
startswithr#   Úgetr   ÚBatchJobSourcer*   ©r(   s    r%   Ú_get_gcs_urir0   D   sª   € õ �•SÑÔð 3˜cŸnšn¨WÑ5Ô5ð 3Ø€JÝ�#•tÑÔð 3 §¢¨Ñ!3Ô!3ð 3Ø # I¤Ð8ˆ3ˆyŒ>˜!ÔÐ°DÐ8Ý�#•uÔ+Ñ,Ô,ð 3°´ð 3Ø œ[Ð2ˆ3Œ;�qŒ>ˆ>¨dÐ2Ø	ˆr'   c                 ó  — t          | t          ¦  «        r|                      d¦  «        r| S t          | t          ¦  «        r|                      d¦  «        r| d         S t          | t
          j        ¦  «        r| j        r| j        S dS )z8Extracts the BigQuery URI from the source, if available.zbq://Úbigquery_uriN)r"   r+   r,   r#   r-   r   r.   r2   r/   s    r%   Ú_get_bigquery_urir3   Q   s‹   € õ �•SÑÔð ˜cŸnšn¨WÑ5Ô5ð Ø€JÝ�#•tÑÔð  §¢¨Ñ!8Ô!8ð Øˆ~ÔÐÝ�#•uÔ+Ñ,Ô,ð °Ô1Að ØÔÐØ	ˆr'   c                 ó`  — |€t          j        ¦   «         }d}|j        st          j        ¦   «         }d|› �|_        |j        skt          | ¦  «        }t          | ¦  «        }|r(|                     d¦  «        r|dd…         › d�|_        n#|r!|pt          j        ¦   «         }|› d|› �|_        |S )zBFormats the destination uri based on the source uri for Vertex AI.NÚgenai_batch_job_z.jsonliúÿÿÿz/destÚ_dest_)	r   ÚCreateBatchJobConfigÚdisplay_namer   Útimestamped_unique_nameÚdestr0   r3   Úendswith)r(   r   Úunique_nameÚgcs_source_uriÚbigquery_source_uris        r%   Úformat_destinationr?   ^   sÛ   € ð
 €^ÝÔ'Ñ)Ô)€Fà€+Ø	Ô	ð ;ÝÔ1Ñ3Ô3€KØ:¨[Ð:Ð:€FÔà	Œð @Ý! #Ñ&Ô&€NÝ+¨CÑ0Ô0Ðàð @˜.×1Ò1°(Ñ;Ô;ð @Ø% c r cÔ*Ð1Ð1Ð1€f„k€kØ	ð @ØÐD¥7Ô#BÑ#DÔ#D€kØ*Ð?Ð?°+Ð?Ð?€f„kà	€-r'   FÚis_agent_platformc                 óL  — | sg S t          | ¦  «        }g }|r|j        s|S t          |j        ¦  «        D ]n\  }}t          |t          j        ¦  «        sŒ t          |dd¦  «        r|                     |¦  «         t          |dd¦  «        r|s|                     |¦  «         Œo|S )z9Checks if the config contains any AFC incompatible tools.Úfunction_declarationsNÚmcp_servers)r&   ÚtoolsÚ	enumerater"   r   r   ÚgetattrÚappend)r   r@   Úconfig_modelÚincompatible_tools_indexesÚindexÚtools         r%   Ú"find_afc_incompatible_tool_indexesrL   x   sÓ   € ð
 
ð Ø€IÝ6°vÑ>Ô>€,Ø*,Ðà	ð &˜\Ô/ð &Ø%Ð%å˜|Ô1Ñ2Ô2ð /ð /�k€eˆTÝ�d�EœJÑ'Ô'ð ØÝˆtÐ,¨dÑ3Ô3ð /Ø ×'Ò'¨Ñ.Ô.Ð.õ ˆt�] DÑ)Ô)ð /Ð2Cð /Ø ×'Ò'¨Ñ.Ô.Ð.øØ	#Ð#r'   rI   c                 ó¦  — |sdS d}t          | t          j        ¦  «        r| j        rt	          | j        ¦  «        }n<t          | t
          ¦  «        r'|                      dg ¦  «        }|rt	          |¦  «        }t	          |¦  «        |k    rEd                     t          t          |¦  «        ¦  «        }t                               d|¦  «         dS dS )zMLogs a warning if any tools are incompatible with automatic function calling.Nr   rD   z, zïTools at indices [%s] are not compatible with automatic function calling (AFC). AFC is disabled. If AFC is intended, please include python callables in the tool list, and do not include function declaration and MCP server in the tool list.)r"   r   r$   rD   Úlenr#   r-   ÚjoinÚmapr+   ÚloggerÚwarning)r   rI   Úoriginal_tools_lengthrD   Úindices_strs        r%   Ú"log_afc_incompatible_tools_warningrU   ‘   sä   € ð
 
$ð Ø
€FØÐÝ��Ô3Ñ4Ô4ð )Ø„|ð 0Ý! &¤,Ñ/Ô/ÐøÝ�&�$ÑÔð )Ø�JŠJ�w Ñ#Ô#€EØð )Ý! %™jœjÐÝÐ	#Ñ$Ô$Ð(=Ò=Ð=Ø—)’)�C¥Ð%?Ñ@Ô@ÑAÔA€KÝ
‡N‚Nð	@ð 	ñô ð ð ð ð >Ð=r'   Úmcp_to_genai_tool_adaptersÚis_caller_method_async.c                 óØ  — i }| s|S t          | ¦  «        }|j        r^|j        D ]V}t          |¦  «        rEt          j        |¦  «        r'|s%t          j        d|j        › d|j        › d�¦  «        ‚|||j        <   ŒW|rm|st          j        d¦  «        ‚|                     ¦   «         D ]-\  }}| 	                    |¦  «        rt          d|› d�¦  «        ‚Œ.|                     |¦  «         |S )z'Returns a function map from the config.z	Function zh is a coroutine function, which is not supported for automatic function calling. Please manually invoke z to get the function response.z3MCP tools are not supported in synchronous methods.úTool ú$ is already defined for the request.)r&   rD   ÚcallableÚinspectÚiscoroutinefunctionr   ÚUnsupportedFunctionErrorÚ__name__Úitemsr-   Ú
ValueErrorÚupdate)r   rV   rW   Úfunction_maprH   rK   Ú	tool_nameÚ_s           r%   Úget_function_maprf   ¬   s^  € ð OQ€,Ø	ð ØÐÝ6°vÑ>Ô>€,ØÔð 	+ØÔ"ð +ð +ˆÝ	�$‰Œð +ÝÔ& tÑ,Ô,ð 	Ð5Kð 	ÝÔ/ðG˜$œ-ð Gð GàœðGð Gð Gñô ð ð
 '+ˆ�T”]Ñ#øØð 
4Ø!ð ÝÔ+Ø
?ñô ð ð 3×8Ò8Ñ:Ô:ð 
ð 
‰ˆ	�1Ø	×	Ò	˜)Ñ	$Ô	$ð 
ÝØC�IÐCÐCÐCñ
ô 
ð 	
ð
ð ×ÒÐ2Ñ3Ô3Ð3Ø	Ðr'   Úargsc                 ó>   — d„ |                       ¦   «         D ¦   «         S )z:Converts float values in dict with no decimal to integers.c                 ó4   — i | ]\  }}|t          |¦  «        “ŒS r!   ©Ú,convert_number_values_for_function_call_args©Ú.0ÚkeyÚvalues      r%   ú
<dictcomp>zEconvert_number_values_for_dict_function_call_args.<locals>.<dictcomp>Ô   s7   € ð 
ð 
ð 
á
ˆ#ˆuð 
Õ7¸Ñ>Ô>ð
ð 
ð 
r'   )r`   ©rg   s    r%   Ú1convert_number_values_for_dict_function_call_argsrr   Ð   s+   € ð
ð 
àŸ
š
™œð
ñ 
ô 
ð r'   c                 ó  — t          | t          ¦  «        r#|                      ¦   «         rt          | ¦  «        S t          | t          ¦  «        rd„ |                      ¦   «         D ¦   «         S t          | t          ¦  «        rd„ | D ¦   «         S | S )z2Converts float values with no decimal to integers.c                 ó4   — i | ]\  }}|t          |¦  «        “ŒS r!   rj   rl   s      r%   rp   z@convert_number_values_for_function_call_args.<locals>.<dictcomp>á   s7   € ð ð ð áˆC�ð 	Õ9¸%Ñ@Ô@ðð ð r'   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r!   rj   )rm   ro   s     r%   ú
<listcomp>z@convert_number_values_for_function_call_args.<locals>.<listcomp>æ   s.   € ð ð ð Ø@EÕ4°UÑ;Ô;ðð ð r'   )r"   ÚfloatÚ
is_integerÚintr#   r`   Úlistrq   s    r%   rk   rk   Ú   sª   € õ �•eÑÔð  §¢Ñ!2Ô!2ð Ýˆt‰9Œ9ÐÝ�•dÑÔð ðð àŸ*š*™,œ,ðñ ô ð õ �•dÑÔð ðð ØIMðñ ô ð ð 
€+r'   Ú
annotationc                 ó‚   — 	 t          j        | ¦  «        ot          | t          j        ¦  «        S # t
          $ r Y dS w xY w©NF)r\   ÚisclassÚ
issubclassÚpydanticÚ	BaseModelÚ	TypeError)r{   s    r%   Úis_annotation_pydantic_modelrƒ   ì   sV   € ðÝŒ?˜:Ñ&Ô&ð ­:Ø•HÔ&ñ,ô ,ð øõ 
ð ð ð Øˆ5ˆ5ðøøøs   ‚-0 °
>½>ro   Ú
param_nameÚ	func_namec                 óŠ  ‡‡‡‡— t          | t          ¦  «        rRt          |¦  «        rC	  |di | ¤ŽS # t          j        $ r(}t          j        d‰› d‰› d| › d|› d|› �
¦  «        ‚d }~ww xY wt          | t          ¦  «        r=t          |¦  «        t          k    r%t          |¦  «        d         Šˆˆˆfd„| D ¦   «         S t          | t          ¦  «        rLt          |¦  «        t          k    r4t          |¦  «        \  }Šˆˆˆfd„|  
                    ¦   «         D ¦   «         S t          |¦  «        t          t          fv r¶t          |¦  «        D ]…}t          |¦  «        rt          |¦  «        t          u s4t          | |¦  «        s$t          | t          ¦  «        r9t          |¦  «        r*	 t          | |‰‰¦  «        c S # t          j        $ r Y Œ�w xY wŒ†t          j        d‰› d‰› d| › d	|› d
�	¦  «        ‚t          | t          ¦  «        r|t          u r| S t          | |¦  «        s!t          j        d‰› d‰› d| › d|› d
�	¦  «        ‚| S )NzFailed to parse parameter z for function z> from function call part because function call argument value z- is not compatible with parameter annotation z, due to error r   c                 ó4   •— g | ]}t          |‰‰‰¦  «        ‘ŒS r!   ©Úconvert_if_exist_pydantic_model)rm   Úitemr…   Ú	item_typer„   s     €€€r%   rv   z3convert_if_exist_pydantic_model.<locals>.<listcomp>  s7   ø€ ð ð ð àõ 	(¨¨i¸ÀYÑOÔOðð ð r'   c           	      ó<   •— i | ]\  }}|t          |‰‰‰¦  «        “ŒS r!   rˆ   )rm   ÚkÚvr…   r„   Ú
value_types      €€€r%   rp   z3convert_if_exist_pydantic_model.<locals>.<dictcomp>  s>   ø€ ð ð ð áˆAˆqð 	
Õ*¨1¨j¸*ÀiÑPÔPðð ð r'   z- cannot be converted to parameter annotation ú.r!   )r"   r#   rƒ   r€   ÚValidationErrorr   Ú UnknownFunctionCallArgumentErrorrz   r   r
   r`   r	   r   r‰   ry   rw   )	ro   r{   r„   r…   Úere   Úargr‹   r�   s	     ``   @@r%   r‰   r‰   ø   sg  øøøø€ õ �•tÑÔð 	Õ!=¸jÑ!IÔ!Ið 	ðØˆZÐ Ð ˜%Ð Ð Ð øÝÔ#ð ð ð ÝÔ3ð- zð -ð -Øð-ð -àð-ð -ð ð-ð -ð *+ð-ð -ñô ð øøøøðøøøõ �•tÑÔð ¥¨JÑ!7Ô!7½4Ò!?Ð!?Ý˜Ñ$Ô$ QÔ'€Iðð ð ð ð ð àðñ ô ð õ �•tÑÔð ¥¨JÑ!7Ô!7½4Ò!?Ð!?Ý˜ZÑ(Ô(�M€A€zðð ð ð ð ð à—K’K‘M”Mðñ ô ð õ �
ÑÔ¥¥yÐ1Ð1Ð1Ý˜
Ñ#Ô#ð ð ˆå�C‰=Œ=ðÝ'¨™_œ_µÐ4Ð4Ý˜˜sÑ#Ô#ð 5å˜¥Ñ%Ô%ð 5å*FÀsÑ*KÔ*Kð 5ð	Ý0Ø�S˜* iñô ð ð ð øõ
 Ô'ð 	ð 	ð 	Ø
ˆ(ð	øøøøõ Ô
1ð	 Zð 	ð 	Øð	ð 	àð	ð 	ð ð	ð 	ð 	ñô ð õ �•sÑÔð  
­eÐ 3Ð 3Ø€LÝ	�E˜:Ñ	&Ô	&ð Ý
Ô
1ð	C Zð 	Cð 	C¸yð 	Cð 	CØDIð	Cð 	Cà5?ð	Cð 	Cð 	Cñô ð ð
 
€,s'   ª2 ²A)Á#A$Á$A)Æ'F;Æ;GÇGÚfunctionc                 óÆ   — t          j        |¦  «        }|j        }i }|j                             ¦   «         D ])\  }}|| v r t          | |         |j        ||¦  «        ||<   Œ*|S ©N)r\   Ú	signaturer_   Ú
parametersr`   r‰   r{   )rg   r•   r˜   r…   Úconverted_argsr„   Úparams          r%   Úconvert_argument_from_functionrœ   6  s€   € õ Ô Ñ)Ô)€)ØÔ€)Ø€.Ø$Ô/×5Ò5Ñ7Ô7ð ð Ñ€j�%Ø�TÐÐÝ#BØ
ˆzÔ
Ø
Ô
Ø
Ø
ñ	$ô $€n�ZÑ øð 
Ðr'   Úfunction_to_invokec                 ó¢   — t          | |¦  «        }	  |di |¤ŽS # t          $ r*}t          j        d|j        › d|› d| › d|› �¦  «        ‚d }~ww xY w©NzFailed to invoke function z with converted arguments z, from model returned function call argument z because of error r!   ©rœ   Ú	Exceptionr   ÚFunctionInvocationErrorr_   ©rg   r�   rš   r“   s       r%   Úinvoke_function_from_dict_argsr¤   G  s    € õ 2°$Ð8JÑKÔK€.ðØÐÐ/Ð/ Ð/Ð/Ð/øÝ	ð ð ð Ý
Ô
(ð	6Ð%7Ô%@ð 	6ð 	6Ø .ð	6ð 	6àð	6ð 	6à23ð	6ð 	6ñô ð øøøøðøøøs   ’ š
A¤%A	Á	Ac              ƒ   ó²   K  — t          | |¦  «        }	  |di |¤Žƒ d {V —†S # t          $ r*}t          j        d|j        › d|› d| › d|› �¦  «        ‚d }~ww xY wrŸ   r    r£   s       r%   Ú$invoke_function_from_dict_args_asyncr¦   U  s¶   è è € õ 2°$Ð8JÑKÔK€.ðØ#Ð#Ð5Ð5 nÐ5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5øÝ	ð ð ð Ý
Ô
(ð	6Ð%7Ô%@ð 	6ð 	6Ø .ð	6ð 	6àð	6ð 	6à23ð	6ð 	6ñô ð øøøøðøøøs   ”" ¢
A¬%AÁAÚresponserc   c                 ód  — g }| j         ��%t          | j         d         j        t          j        ¦  «        rû| j         d         j        j        �ä| j         d         j        j        D ]Ì}|j        sŒ
|j        j        }|�´|j        j        �¨||         }t          |j        j        ¦  «        }	 t          |t          ¦  «        sdt          ||¦  «        i}n(# t          $ r}dt          |¦  «        i}Y d}~nd}~ww xY wt          j                             ||¬¦  «        }	|                     |	¦  «         ŒÍ|S )ú6Returns the function response parts from the response.Nr   ÚresultÚerror©Únamer§   )Ú
candidatesr"   Úcontentr   ÚContentÚpartsÚfunction_callr­   rg   rr   r   r¤   r¡   r+   ÚPartÚfrom_function_responserG   )
r§   rc   Úfunc_response_partsÚpartr…   Úfuncrg   Úfunc_responser“   Úfunc_response_parts
             r%   Úget_function_response_partsrº   c  sZ  € ð
 ÐàÔÑ%Ý
�XÔ(¨Ô+Ô3µU´]Ñ
CÔ
Cð &à
Ô
˜aÔ
 Ô
(Ô
.Ð
:àÔ# AÔ&Ô.Ô4ð 7ð 7ˆØÔð ØØÔ$Ô)€iØ	Ð	 4Ô#5Ô#:Ð#FØ˜IÔ&ˆÝ@ØÔÔ#ñ
ô 
ˆð	,Ý˜DÕ"7Ñ8Ô8ð àÕ8¸¸tÑDÔDðˆMøøõ ð 	,ð 	,ð 	,Ø"¥C¨¡F¤FÐ+ˆ-ˆ-ˆ-ˆ-ˆ-ˆ-øøøøð	,øøøå"œZ×>Ò>Ø ]ð ?ñ 
ô 
Ðð 	×"Ò"Ð#5Ñ6Ô6Ð6øØ	Ðs   Â)'CÃ
C6ÃC1Ã1C6c           
   ƒ   ó¬  K  — g }| j         ��Çt          | j         d         j        t          j        ¦  «        �rœ| j         d         j        j        ��„| j         d         j        j        D �]k}|j        sŒ|j        j        }|��Q||         }|j        j        �|j        j        ni }t          |¦  «        }	 t          |t          ¦  «        r[|                     t          j        ||¬¦  «        ¦  «        ƒ d{V —†}t          |dt          |dd¦  «        ¦  «        }	|	rd|i}
nUd|i}
nPt          j        |¦  «        rdt!          ||¦  «        ƒ d{V —†i}
n#dt#          j        t&          ||¦  «        ƒ d{V —†i}
n(# t(          $ r}dt+          |¦  «        i}
Y d}~nd}~ww xY wt          j                             ||
¬	¦  «        }|                     |¦  «         �Œm|S )
r©   Nr   )r­   rg   Úis_errorÚisErrorFr«   rª   r¬   )r®   r"   r¯   r   r°   r±   r²   r­   rg   rr   r   Ú	call_toolÚFunctionCallrF   r\   r]   r¦   ÚasyncioÚ	to_threadr¤   r¡   r+   r³   r´   rG   )r§   rc   rµ   r¶   r…   r·   Úraw_argsrg   Úmcp_tool_responser¼   r¸   r“   r¹   s                r%   Ú!get_function_response_parts_asyncrÄ   †  sf  è è € ð
 ÐàÔÑ%Ý
�XÔ(¨Ô+Ô3µU´]Ñ
CÔ
Cñ &à
Ô
˜aÔ
 Ô
(Ô
.Ñ
:àÔ# AÔ&Ô.Ô4ð *7ñ *7ˆØÔð ØØÔ$Ô)€iØ	Ñ	Ø˜IÔ&ˆð Ô!Ô&Ð2ð ÔÔ#Ð#àð 	õ
 AÀÑJÔJˆð	,Ý˜Õ3Ñ4Ô4ð Ø&*§n¢nÝÔ"¨	¸Ð=Ñ=Ô=ñ'ô 'ð !ð !ð !ð !ð !ð !Ðõ Ø!ØÝÐ)¨9°eÑ<Ô<ñô ˆHð
 ð <Ø&Ð(9Ð:ˆmˆmà'Ð):Ð;ˆmˆmÝÔ*¨4Ñ0Ô0ð 	àÕ DÀTÈ4Ñ PÔ PÐPÐPÐPÐPÐPÐPðˆMˆMð
 ¥Ô 1Ý2°D¸$ñ!ô !ð ð ð ð ð ð ðˆMøøõ
 ð 	,ð 	,ð 	,Ø"¥C¨¡F¤FÐ+ˆ-ˆ-ˆ-ˆ-ˆ-ˆ-øøøøð	,øøøå"œZ×>Ò>Ø ]ð ?ñ 
ô 
Ðð 	×"Ò"Ð#5Ñ6Ô6Ð6ùØ	Ðs   Â3C E4Å4
FÅ>FÆFc                 óü  — | sdS t          | ¦  «        }|r[|j        rT|j        j        	 �Gt          |j        j        ¦  «        dk    r*t                               d|j        j        › d�¦  «         dS |j        r|j        j        €dS |j        j        r`|j        j        	 �Sd|j        j        v rEt          |j        j        ¦  «        dk    r(t                               d|j        j        › d	�¦  «         |j        j        S )
z6Returns whether automatic function calling is enabled.FNr   z6max_remote_calls in automatic_function_calling_config zu is less than or equal to 0. Disabling automatic function calling. Please set max_remote_calls to a positive integer.TÚmaximum_remote_callsz‚`automatic_function_calling.disable` is set to `True`. And `automatic_function_calling.maximum_remote_calls` is a positive number a9  . Disabling automatic function calling. If you want to enable automatic function calling, please set `automatic_function_calling.disable` to `False` or leave it unset, and set `automatic_function_calling.maximum_remote_calls` to a positive integer or leave `automatic_function_calling.maximum_remote_calls` unset.)r&   Úautomatic_function_callingrÆ   ry   rQ   rR   ÚdisableÚmodel_fields_set©r   rH   s     r%   Úshould_disable_afcrË   ¿  sR  € ð 
ð Øˆ5Ý6°vÑ>Ô>€,ð ðà
Ô
1ðð Ô
1Ô
FØðå
ˆlÔ5ÔJÑ
KÔ
KÈqÒ
PÐ
På
‡N‚Nð	>ØÔ3ÔHð	>ð 	>ð 	>ñô ð ð ˆ4ð Ô
1ðà	Ô	0Ô	8Ð	@àˆ5ð Ô-Ô5ðà
Ô
1Ô
FØðð !Ø	Ô	0Ô	AðBð Bå
ˆlÔ5ÔJÑ
KÔ
KÈaÒ
OÐ
Oå
‡N‚Nð		Dð Ô3ÔHð		Dð 		Dð 		Dñô ð ð 
Ô	0Ô	8Ð8r'   c                 óÖ   — | st           S 	 t          | ¦  «        rt          d¦  «        ‚t          | ¦  «        }|j        r|j        j        €t           S t          |j        j        ¦  «        S )NzUautomatic function calling is not enabled, but SDK is trying to get max remote calls.)Ú_DEFAULT_MAX_REMOTE_CALLS_AFCrË   ra   r&   rÇ   rÆ   ry   rÊ   s     r%   Úget_max_remote_calls_afcrÎ   ö  s|   € ð 
ð )Ý(Ð(ØJÝ˜ÑÔð Ý
ð	ñô ð õ 7°vÑ>Ô>€,à
Ô
1ð)à	Ô	0Ô	EÐ	Må(Ð(Ý	ˆ\Ô4ÔIÑ	JÔ	JÐJr'   c                 ó¤   — | r| j         r| j         j        sdS | j        }|r|j        nd}| j         j        j        }|r|st          d¦  «        ‚dS dS )z9Raises an error if the config is not compatible with AFC.NFav  Running in streaming mode with stream_function_call_arguments enabled, this feature is not compatible with automatic function calling (AFC). Please set config.automatic_function_calling.disable to True to disable AFC or leave config.tool_config. function_calling_config.stream_function_call_arguments to be empty or set to False to disable streaming function call arguments.)Útool_configÚfunction_calling_configrÇ   rÈ   Ústream_function_call_argumentsra   )r   Ú
afc_configÚdisable_afc_configÚstream_function_calls       r%   Ú'raise_error_for_afc_incompatible_configrÖ   
  s˜   € ð ðàÔðð ÔÔ7ðð
 €FØÔ0€*Ø-7ÐB�zÔ)Ð)¸UÐàÔÔ0ÔOð ð ð Ð"4ð Ý
ð	Iñô ð ðð ð ð r'   c                 óT   — | sdS t          | ¦  «        }|j        sdS |j        j         S )NT)r&   rÇ   Úignore_call_historyrÊ   s     r%   Úshould_append_afc_historyrÙ   #  s=   € ð 
ð Øˆ4Ý6°vÑ>Ô>€,Ø	Ô	0ð Øˆ4ØÔ4ÔHÐ	HÐHr'   c                 ób  — | sdS t          | ¦  «        }|                     ddi¬¦  «        }|j        |_        |j        rpt          j        |j        ¦  «        rW|j        €t          j        i ¬¦  «        |_        |j        j        €i |j        _        t          j	        |j        j        ¦  «         |S )zVReturns a parsed config with an appended MCP header if MCP tools or sessions are used.NrD   ©rb   )Úheaders)
r&   Ú
model_copyrD   r   Úhas_mcp_tool_usageÚhttp_optionsr   ÚHttpOptionsrÜ   Úset_mcp_usage_header)r   rH   Úconfig_model_copys      r%   Úparse_config_for_mcp_usagerã   .  s¿   € ð 
ð Øˆ4Ý6°vÑ>Ô>€,ð #×-Ò-°g¸t°_Ð-ÑEÔEÐØ(Ô.ÐÔØÔð L�JÔ9¸,Ô:LÑMÔMð LØÔ%Ð-Ý',Ô'8ÀÐ'DÑ'DÔ'DÐÔ$ØÔ%Ô-Ð5Ø/1ÐÔ$Ô,ÝÔ#Ð$5Ô$BÔ$JÑKÔKÐKà	Ðr'   c              ƒ   óü  K  — i }t          | ¦  «        }|sd|fS |                     ddi¬¦  «        }|j        �r@g |_        t          j        ¦   «         s!|j                             |j        ¦  «         �n	 ddlm} n!# t          $ r t          ddi ¦  «        }Y nw xY w|j        D ]Ô}t          ||¦  «        r¨t          ||                     ¦   «         ƒ d{V —†|¬¦  «        }|j                             |j        ¦  «         |j        D ]V}|j        rM|j        D ]E}	|	j        �<|                     |	j        ¦  «        rt!          d	|	j        › d
�¦  «        ‚|||	j        <   ŒFŒWŒº|j                             |¦  «         ŒÕ||fS )z”Returns a parsed config with MCP sessions converted to GenAI tools.

  Also returns a map of MCP tools to GenAI tool adapters to be used for AFC.
  NrD   rÛ   r   r   ÚDummySessionr!   )r@   rY   rZ   )rã   rÝ   rD   r   Ú_is_mcp_loadedÚextendÚmcpr   ÚImportErrorÚtyper"   r   Ú
list_toolsrB   r­   r-   ra   rG   )
r   r@   rV   Úparsed_configÚparsed_config_copyÚ_McpClientSessionrK   Úmcp_to_genai_tool_adapterÚ
genai_toolÚfunction_declarations
             r%   Úparse_config_for_mcp_sessionsrò   C  s  è è € ð BDÐÝ,¨VÑ4Ô4€-Ø	ð ,ØÐ+Ð+Ð+ð %×/Ò/¸À°Ð/ÑGÔGÐØÔñ  0Ø!ÐÔÝÔ$Ñ&Ô&ð 0àÔ×%Ò% mÔ&9Ñ:Ô:Ð:Ñ:ð9Ø:Ð:Ð:Ð:Ð:Ð:Ð:øÝð 9ð 9ð 9Ý  °°RÑ8Ô8ÐÐÐð9øøøð  Ô%ð 0ð 0ˆ$Ý�dÐ-Ñ.Ô.ð 	0Ý&;Ø˜$Ÿ/š/Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð?Pð'ñ 'ô 'Ð
#ð
 Ô
"×
)Ò
)Ð*CÔ*IÑ
JÔ
JÐ
JØ5Ô;ð ð ˆjØÔ/ð 
Ø*4Ô*Jð 	ð 	Ð&Ø'Ô,Ð8Ø/×3Ò3Ð4HÔ4MÑNÔNð Ý$ð,Ð 4Ô 9ð ,ð ,ð ,ñô ð ð
 0ð -Ð-AÔ-FÑGøøðð Ô
"×
)Ò
)¨$Ñ
/Ô
/Ð
/Ð
/à	Ð7Ð	7Ð7s   Á6A= Á=BÂBÚcontentsÚchunkc                 ó¼   — |�Y|j         �R|j         d         j        }t          j        | ¦  «        } t	          | t
          ¦  «        r|�|                      |¦  «         | S )zFAppends the contents of the chunk to the contents list and returns it.Nr   )r®   r¯   ÚtÚ
t_contentsr"   rz   rG   )ró   rô   Úchunk_contents      r%   Úappend_chunk_contentsrù   z  s_   € ð
 Ð˜5Ô+Ð7ØÔ$ QÔ'Ô/€MÝŒ|˜HÑ%Ô%€HÝ�(�DÑ!Ô!ð % mÐ&?Ø‡o‚o�mÑ$Ô$Ð$Ø	€/r'   ÚfileÚuser_http_optionsÚuser_mime_typec           	      ó  — d}|}t          | t          j        ¦  «        r¥|€t          d¦  «        ‚t	          | d¦  «        rd| j        vrt          d¦  «        ‚|                      ¦   «         }|                      dt          j	        ¦  «         |                      ¦   «         |z
  }|                      |t          j
        ¦  «         n�t          j        | ¦  «        }|rt          j                             |¦  «        st          | › d�¦  «        ‚t          j                             |¦  «        }|€t!          j        |¦  «        \  }}|€t          d¦  «        ‚|r?t          |t$          ¦  «        rt'          j        di |¤Ž}|}d	|_        d
dd|› |› dœ|_        nt'          j        d	d
dd|› |› dœ¬¦  «        }t          | t.          t          j        f¦  «        r5|j        €i |_        t          j                             | ¦  «        |j        d<   |||fS )a-  Prepares the HTTP options, file bytes size and mime type for a resumable upload.

  This function inspects a file (from a path or an in-memory object) to
  determine its size and MIME type. It then constructs the necessary HTTP
  headers and options required to initiate a resumable upload session.
  NzfUnknown mime type: Could not determine the mimetype for your file
 please set the `mime_type` argumentÚmodeÚbz'The file must be opened in binary mode.r   z is not a valid file path.ziUnknown mime type: Could not determine the mimetype for your file
    please set the `mime_type` argumentÚ zapplication/jsonÚ	resumableÚstart)zContent-TypezX-Goog-Upload-ProtocolzX-Goog-Upload-Commandz#X-Goog-Upload-Header-Content-Lengthz!X-Goog-Upload-Header-Content-Type)Úapi_versionrÜ   zX-Goog-Upload-File-Namer!   )r"   ÚioÚIOBasera   Úhasattrrþ   ÚtellÚseekÚosÚSEEK_ENDÚSEEK_SETÚfspathÚpathÚisfileÚFileNotFoundErrorÚgetsizeÚ	mimetypesÚ
guess_typer#   r   rà   r  rÜ   r+   ÚPathLikeÚbasename)	rú   rû   rü   Ú
size_bytesÚ	mime_typeÚoffsetÚfs_pathre   rß   s	            r%   Úprepare_resumable_uploadr  ‡  sD  € ð €*Ø€)Ý�•b”iÑ Ô ð ØÐÝð8ñô ð õ ˆt�VÑÔð DØ	�D”IÐ	Ð	ÝÐBÑCÔCÐCØ�YŠY‰[Œ[€FØ‡I‚Iˆa•”ÑÔÐØ—’‘”˜vÑ%€JØ‡I‚Iˆf•b”kÑ"Ô"Ð"Ð"åŒi˜‰oŒo€GØð C�"œ'Ÿ.š.¨Ñ1Ô1ð CÝ ÐAÐAÐAÑBÔBÐBÝ”—’ Ñ)Ô)€JØÐÝÔ)¨'Ñ2Ô2�l€i�ØÐÝð;ñô ð ð
 ð ÝÐ#¥TÑ*Ô*ð AÝÔ+Ð@Ð@Ð.?Ð@Ð@ÐØ$€LØ!€LÔà*Ø"-Ø!(Ø2<¨Ø09¨^ðð €LÔÐõ Ô$Øà.Ø&1Ø%,Ø6@°?Ø4=°ð
ð 
ð	ñ 	ô 	€Lõ �•s�BœKÐ(Ñ)Ô)ð MØÔÐ#Ø!ˆÔÝ68´g×6FÒ6FÀtÑ6LÔ6L€LÔÐ2Ñ3Ø	�z 9Ð	,Ð,r'   c                 óz   — | sdS t          | ¦  «        }|j        sdS |j        D ]}t          |dd¦  «        r dS ŒdS )zBChecks whether the configuration contains any MCP server requests.FrC   NT)r&   rD   rF   )r   rH   rK   s      r%   Úhas_agent_platform_mcp_serversr  Ð  se   € ð ð ØˆUÝ8¸Ñ@Ô@€LØÔð ØˆUàÔ"ð ð ˆÝ	��} dÑ	+Ô	+ð Øˆtˆtðàˆ5r'   Ú
config_clsÚusagec                 ón  — dt           j        › d|› �}| s |¦   «         }n t          | t          ¦  «        r	 |di | ¤Ž}n| }t	          |d¦  «        s|S t          |dd¦  «        }|€$t          j        ¦   «         }t          |d|¦  «         t          j
        t          j        |¦  «        }|j        pi }dD ]z}||v rod|› �||         vra|||         vrWdt           j        › �||         v r-||                              dt           j        › �|¦  «        ||<   Œa||xx         d|› �z  cc<   Œu|||<   Œ{||_        |S )z(Returns the usage header for the config.zgoogle-genai-sdk/ú+rß   N)z
user-agentzx-goog-api-clientú r!   )Úpublic_versionÚ__version__r"   r#   r  rF   r   rà   ÚsetattrÚtypingÚcastrÜ   Úreplace)r   r  r  Úusage_headerrH   rß   Úexisting_headersÚ
header_keys           r%   Úget_usage_headerr*  à  s±  € ð J¥^Ô%?ÐIÐIÀ%ÐIÐI€,Ø	ð Ø�:‘<”<€L€LÝ�&�$ÑÔð Ø�:Ð'Ð' Ð'Ð'€L€Là€Lõ 
�˜~Ñ	.Ô	.ð ØÐå˜ ~°tÑ<Ô<€,ØÐÝÔ$Ñ&Ô&€LÝˆL˜.¨,Ñ7Ô7Ð7å”�UÔ.°Ñ=Ô=€,Ø!Ô)Ð/¨RÐà7ð 2ð 2€jØÐ%Ð%Ð%à
ˆeˆ+ˆ+Ð-¨jÔ9Ð
9Ð
9ØÐ"2°:Ô">Ð>Ð>ð =¥Ô :Ð<Ð<Ø 
Ô+ð,ð ,ð *:¸*Ô)E×)MÒ)MØ>¥.Ô"<Ð>Ð>Àñ*ô *Ð
˜:Ñ
&Ð
&ð ˜:Ð
&Ð
&Ô
&Ð*<¨lÐ*<Ð*<Ñ
<Ð
&Ð
&Ñ
&øà%1Ð�zÑ"Ð"à)€,ÔØ	Ðr'   r—   r}   )NNF)NN)\Ú__doc__rÀ   r\   r  Úloggingr  r	  Úsysr$  r   r   r   r   r   r   r	   r
   r   r€   r   r   r   r   rö   r   r   r   r!  Ú	_adaptersr   Úversion_infor   Ú_UnionGenericAliasÚTYPE_CHECKINGrè   r   r   Ú	mcp.typesr   r   Ú__annotations__r   rÍ   Ú	getLoggerrQ   ÚGenerateContentConfigOrDictr$   r&   r+   ÚBatchJobSourceOrDictr0   r3   r.   r7   r?   Úboolrz   ry   rL   rU   r#   rf   Ú
StringDictrr   Úobjectrk   rƒ   r‰   rœ   r¤   r¦   ÚGenerateContentResponser³   rº   rÄ   rË   rÎ   rÖ   rÙ   rã   Útuplerò   ÚContentListUnionÚContentListUnionDictrù   r  r  ÚHttpOptionsOrDictrà   r  r  r*  r!   r'   r%   ú<module>r?     sâ  ðð  UÐ TÐ Tà €€€Ø €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \à €€€à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ð Ô�wÒÐØÐÐÐÐÐÐàÔ'€)à	Ôð Ø3Ð3Ð3Ð3Ð3Ð3Ø'Ð'Ð'Ð'Ð'Ð'Ð'à"%Ð�F”KÐ%Ð%Ñ%Ø€'ˆ6Œ;ÐÐÑð €GˆCÐ*Ð+Ñ+Ô+€à "Ð à	ˆÔ	Ð0Ñ	1Ô	1€ðØÔ-ðà
Ô ðð ð ð ð
Ø	ˆs�EÔ.Ð.Ô	/ð
àˆc„]ð
ð 
ð 
ð 
ð
Ø	ˆs�EÔ.Ð.Ô	/ð
àˆc„]ð
ð 
ð 
ð 
ð 48ðð Ø	ˆs�EÔ(Ð(Ô	)ðà�UÔ/Ô0ðð Ôðð ð ð ð6 ;?Ø#ð$ð $Ø�UÔ6Ô7ð$àð$ð 
ˆ#„Yð$ð $ð $ð $ð2Ø�UÔ6Ô7ðà $ S¤	ðð 
ðð ð ð ð8 ;?ð 	Ø#(ð!ð !Ø�UÔ6Ô7ð!à (ØˆSÐ'Ð'Ô(ô!ð!ð
 !ð!ð 
ˆ#ˆu�X˜c 3˜hÔ'Ð)>Ð>Ô?Ð
?Ô@ð!ð !ð !ð !ðHØ
Ô
ðàÔðð ð ð ðØ
��S˜&�[Ô! 4¨¤<°Ð7Ô
8ðà
ˆ4��V�Ô˜d 6œl¨FÐ2Ô3ðð ð ð ð$	¨Sð 	°Tð 	ð 	ð 	ð 	ð;Øð;Øð;Ø-0ð;Ø=@ð;àð;ð ;ð ;ð ;ð|Ø
Ô
ðØ(0°°c°Ô(:ðàÔðð ð ð ð"Ø
Ô
ðØ2:¸3À¸8Ô2Dðàðð ð ð ðØ
Ô
ðØ2:¸3À¸8Ô2Dðàðð ð ð ð ØÔ+ð à�s˜E (¨3°¨8Ô"4Ð6KÐ"KÔLÐLÔMð ð 
ˆ%Œ*Ôð ð  ð  ð  ðF6ØÔ+ð6à�s˜E (¨3°¨8Ô"4Ð6KÐ"KÔLÐLÔMð6ð 
ˆ%Œ*Ôð6ð 6ð 6ð 6ðt ;?ð49ð 49Ø�UÔ6Ô7ð49à	ð49ð 49ð 49ð 49ðp ;?ðKð KØ�UÔ6Ô7ðKàðKð Kð Kð Kð(°H¸UÔ=XÔ4Yð Ø	ðð ð ð ð4 ;?ðIð IØ�UÔ6Ô7ðIà	ðIð Ið Ið Ið ;?ðð Ø�UÔ6Ô7ðàˆeÔ)Ô*ðð ð ð ð, ;?Ø#ð48ð 48Ø�UÔ6Ô7ð48àð48ð ØˆUÔ(Ô)ØˆÐ#Ð	#Ô$ð&ôð48ð 48ð 48ð 48ðn
Ø�EÔ*¨EÔ,FÐFÔGð
àÔ(ð
ð ˆ5Ô! 5Ô#=Ð=Ô>ð
ð 
ð 
ð 
ð <@Ø$(ðF-ð F-Ø
��R”[ Ô% r¤yÐ0Ô
1ðF-à Ô 7Ô8ðF-ð ˜S”MðF-ð Ø	ÔØØð	ôð	F-ð F-ð F-ð F-ðT ;?ðð Ø�UÔ6Ô7ðà	ðð ð ð ð +Ø�U˜4  S œ>¨1Ð,Ô-Ô.ð+Ø<@À¼Gð+ØLOð+àð+ð +ð +ð +ð +ð +r'   