o
    i                    @   s
  d dl Z d dlZd dlmZmZmZmZ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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 ddlmZ ddlmZmZ edZ deddfddZ!deddfddZ"deddfddZ#	ddee$e%ef e&f dee$e%ef  de$e%ef fddZ'	ddee$e%ef e&f dee$e%ef  de$e%ef fddZ(	ddee$e%ef e&f dee$e%ef  de$e%ef fd d!Z)	dd"edee$e%ef e&f dee$e%ef  de$e%ef fd#d$Z*	ddee$e%ef e&f dee$e%ef  de$e%ef fd%d&Z+	ddee$e%ef e&f dee$e%ef  de$e%ef fd'd(Z,	ddee$e%ef e&f dee$e%ef  de$e%ef fd)d*Z-	ddee$e%ef e&f dee$e%ef  de$e%ef fd+d,Z.	ddee$e%ef e&f dee$e%ef  de$e%ef fd-d.Z/	ddee$e%ef e&f dee$e%ef  de$e%ef fd/d0Z0	ddee$e%ef e&f dee$e%ef  de$e%ef fd1d2Z1	dd"edee$e%ef e&f dee$e%ef  de$e%ef fd3d4Z2	dd"edee$e%ef e&f dee$e%ef  de$e%ef fd5d6Z3	ddee$e%ef e&f dee$e%ef  de$e%ef fd7d8Z4	ddee$e%ef e&f dee$e%ef  de$e%ef fd9d:Z5	dd"edee$e%ef e&f dee$e%ef  de$e%ef fd;d<Z6	dd"edee$e%ef e&f dee$e%ef  de$e%ef fd=d>Z7	ddee$e%ef e&f dee$e%ef  de$e%ef fd?d@Z8	ddee$e%ef e&f dee$e%ef  de$e%ef fdAdBZ9	ddee$e%ef e&f dee$e%ef  de$e%ef fdCdDZ:	dd"edee$e%ef e&f dee$e%ef  de$e%ef fdEdFZ;	ddee$e%ef e&f dee$e%ef  de$e%ef fdGdHZ<	ddee$e%ef e&f dee$e%ef  de$e%ef fdIdJZ=	ddee$e%ef e&f dee$e%ef  de$e%ef fdKdLZ>	dd"edee$e%ef e&f dee$e%ef  de$e%ef fdMdNZ?	dd"edee$e%ef e&f dee$e%ef  de$e%ef fdOdPZ@	ddee$e%ef e&f dee$e%ef  de$e%ef fdQdRZA	ddee$e%ef e&f dee$e%ef  de$e%ef fdSdTZB	ddee$e%ef e&f dee$e%ef  de$e%ef fdUdVZC	ddee$e%ef e&f dee$e%ef  de$e%ef fdWdXZD	ddee$e%ef e&f dee$e%ef  de$e%ef fdYdZZE	dd"edee$e%ef e&f dee$e%ef  de$e%ef fd[d\ZF	dd"edee$e%ef e&f dee$e%ef  de$e%ef fd]d^ZG	dd"edee$e%ef e&f dee$e%ef  de$e%ef fd_d`ZH	dd"edee$e%ef e&f dee$e%ef  de$e%ef fdadbZI	ddee$e%ef e&f dee$e%ef  de$e%ef fdcddZJ	ddee$e%ef e&f dee$e%ef  de$e%ef fdedfZK	ddee$e%ef e&f dee$e%ef  de$e%ef fdgdhZL	ddee$e%ef e&f dee$e%ef  de$e%ef fdidjZM	dd"edee$e%ef e&f dee$e%ef  de$e%ef fdkdlZN	dd"edee$e%ef e&f dee$e%ef  de$e%ef fdmdnZO	ddee$e%ef e&f dee$e%ef  de$e%ef fdodpZP	ddee$e%ef e&f dee$e%ef  de$e%ef fdqdrZQ	ddee$e%ef e&f dee$e%ef  de$e%ef fdsdtZR	ddee$e%ef e&f dee$e%ef  de$e%ef fdudvZS	ddee$e%ef e&f dee$e%ef  de$e%ef fdwdxZT	ddee$e%ef e&f dee$e%ef  de$e%ef fdydzZU	dd"edee$e%ef e&f dee$e%ef  de$e%ef fd{d|ZV	dd"edee$e%ef e&f dee$e%ef  de$e%ef fd}d~ZW	ddee$e%ef e&f dee$e%ef  de$e%ef fddZX	ddee$e%ef e&f dee$e%ef  de$e%ef fddZY	ddee$e%ef e&f dee$e%ef  de$e%ef fddZZ	ddee$e%ef e&f dee$e%ef  de$e%ef fddZ[	ddee$e%ef e&f dee$e%ef  de$e%ef fddZ\	ddee$e%ef e&f dee$e%ef  de$e%ef fddZ]	ddee$e%ef e&f dee$e%ef  de$e%ef fddZ^	ddee$e%ef e&f dee$e%ef  de$e%ef fddZ_	ddee$e%ef e&f dee$e%ef  de$e%ef fddZ`	ddee$e%ef e&f dee$e%ef  de$e%ef fddZa	dd"edee$e%ef e&f dee$e%ef  de$e%ef fddZb	dd"edee$e%ef e&f dee$e%ef  de$e%ef fddZc	ddee$e%ef e&f dee$e%ef  de$e%ef fddZd	ddee$e%ef e&f dee$e%ef  de$e%ef fddZe	ddee$e%ef e&f dee$e%ef  de$e%ef fddZf	ddee$e%ef e&f dee$e%ef  de$e%ef fddZg	ddee$e%ef e&f dee$e%ef  de$e%ef fddZh	ddee$e%ef e&f dee$e%ef  de$e%ef fddZi	dd"edee$e%ef e&f dee$e%ef  de$e%ef fddZj	dd"edee$e%ef e&f dee$e%ef  de$e%ef fddZk	dd"edee$e%ef e&f dee$e%ef  de$e%ef fddZl	dd"edee$e%ef e&f dee$e%ef  de$e%ef fddZm	ddee$e%ef e&f dee$e%ef  de$e%ef fddZn	ddee$e%ef e&f dee$e%ef  de$e%ef fddZo	ddee$e%ef e&f dee$e%ef  de$e%ef fddZp	ddee$e%ef e&f dee$e%ef  de$e%ef fddZq	ddee$e%ef e&f dee$e%ef  de$e%ef fddZr	ddee$e%ef e&f dee$e%ef  de$e%ef fddZs	ddee$e%ef e&f dee$e%ef  de$e%ef fddZt	ddee$e%ef e&f dee$e%ef  de$e%ef fddZu	dd"edee$e%ef e&f dee$e%ef  de$e%ef fddZv	ddee$e%ef e&f dee$e%ef  de$e%ef fddZw	ddee$e%ef e&f dee$e%ef  de$e%ef fddZx	ddee$e%ef e&f dee$e%ef  de$e%ef fddZy	ddee$e%ef e&f dee$e%ef  de$e%ef fddĄZz	ddee$e%ef e&f dee$e%ef  de$e%ef fddƄZ{	ddee$e%ef e&f dee$e%ef  de$e%ef fddȄZ|	ddee$e%ef e&f dee$e%ef  de$e%ef fddʄZ}	ddee$e%ef e&f dee$e%ef  de$e%ef fdd̄Z~	dd"edee$e%ef e&f dee$e%ef  de$e%ef fdd΄Z	ddee$e%ef e&f dee$e%ef  de$e%ef fddЄZ	ddee$e%ef e&f dee$e%ef  de$e%ef fdd҄Z	ddee$e%ef e&f dee$e%ef  de$e%ef fddԄZ	ddee$e%ef e&f dee$e%ef  de$e%ef fddքZ	ddee$e%ef e&f dee$e%ef  de$e%ef fdd؄Z	ddee$e%ef e&f dee$e%ef  de$e%ef fddڄZ	ddee$e%ef e&f dee$e%ef  de$e%ef fdd܄Z	ddee$e%ef e&f dee$e%ef  de$e%ef fddބZ	dd"edee$e%ef e&f dee$e%ef  de$e%ef fddZ	dd"edee$e%ef e&f dee$e%ef  de$e%ef fddZ	ddee$e%ef e&f dee$e%ef  de$e%ef fddZ	dd"edee$e%ef e&f dee$e%ef  de$e%ef fddZ	ddee$e%ef e&f dee$e%ef  de$e%ef fddZ	ddee$e%ef e&f dee$e%ef  de$e%ef fddZ	ddee$e%ef e&f dee$e%ef  de$e%ef fddZ	ddee$e%ef e&f dee$e%ef  de$e%ef fddZ	ddee$e%ef e&f dee$e%ef  de$e%ef fddZ	ddee$e%ef e&f dee$e%ef  de$e%ef fddZ	ddee$e%ef e&f dee$e%ef  de$e%ef fddZ	ddee$e%ef e&f dee$e%ef  de$e%ef fddZG dd dejZG dd dejZdS )    N)AnyAsyncIterator	AwaitableIteratorOptionalUnion)	urlencode   )_api_module)_base_transformers)_common)_extra_utils)
_mcp_utils)_transformers)errors)types)BaseApiClient)get_value_by_path)set_value_by_path)
AsyncPagerPagerzgoogle_genai.models
enum_valuereturnc                 C       | t dgv rt|  dd S )N	ALLOW_ALL+ enum value is not supported in Gemini API.set
ValueErrorr    r    Y/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/google/genai/models.py(_PersonGeneration_to_mldev_enum_validate(      r"   c                 C   r   )N
BLOCK_NONEr   r   r   r    r    r!   )_SafetyFilterLevel_to_mldev_enum_validate-   r#   r%   c                 C   r   )NSTYLEr   r   r   r    r    r!   4_VideoGenerationReferenceType_to_mldev_enum_validate2   s   r'   from_objectparent_objectc                 C   sl   i }t | dgd urt|dgt | dg t | dgd ur!tdt | dgd ur4t|dgt | dg |S )Ndatadisplay_name6display_name parameter is not supported in Gemini API.	mime_typemimeTypegetvsetvr   r(   r)   	to_objectr    r    r!   _Blob_to_mldev9      r4   c                 C   s  i }t | dgd urt|dgt | dg t | dgd ur+t|dgtt | dg| t | dgd ur>t|dgt | dg t | dgd urQt|dgt | dg t | dgd urdt|d	gt | dg t | d
gd urwt|dgt | d
g t | dgd urt|dgt | dg t | dgd urt|dgt | dg t | dgd urt|dgdd t | dgD  t | dgd urt|dgt | dg |S )NcontentcitationMetadatacitation_metadata
tokenCounttoken_countfinishReasonfinish_reasonavgLogprobsavg_logprobsgroundingMetadatagrounding_metadataindexlogprobsResultlogprobs_resultsafetyRatingssafety_ratingsc                 S      g | ]}|qS r    r    .0itemr    r    r!   
<listcomp>u       z)_Candidate_from_mldev.<locals>.<listcomp>urlContextMetadataurl_context_metadata)r0   r1   _CitationMetadata_from_mldevr2   r    r    r!   _Candidate_from_mldevJ   sP   

rO   c                 C   s8   i }t | dgd urt|dgdd t | dgD  |S )NcitationSources	citationsc                 S   rF   r    r    rG   r    r    r!   rJ      rK   z0_CitationMetadata_from_mldev.<locals>.<listcomp>r0   r1   r2   r    r    r!   rN      s   rN   
api_clientc              	   C   sn   i }t |dgd urt|ddgt| t |dg t |dgd ur5t|dgdd tt |dgD  |S )Nmodel_urlcontentsc                 S   rF   r    r    rG   r    r    r!   rJ      rK   z6_ComputeTokensParameters_to_vertex.<locals>.<listcomp>)r0   r1   tt_model
t_contentsrS   r(   r)   r3   r    r    r!   "_ComputeTokensParameters_to_vertex   s   r[   c                 C   s^   i }t | dgd urt|dgt | dg t | dgd ur-t|dgdd t | dgD  |S )NsdkHttpResponsesdk_http_response
tokensInfotokens_infoc                 S   rF   r    r    rG   r    r    r!   rJ      rK   z6_ComputeTokensResponse_from_vertex.<locals>.<listcomp>rR   r2   r    r    r!   "_ComputeTokensResponse_from_vertex   s   r`   c                 C   sT   i }t | dgd urt|dgt | dg t | dgd ur(t|dgt | dg |S )N	truncatedr:   rR   r2   r    r    r!   '_ContentEmbeddingStatistics_from_vertex   s   rb   c                 C   sZ   i }t | dgd urt|dgt | dg t | dgd ur+t|dgtt | dg| |S )Nvalues
statistics)r0   r1   rb   r2   r    r    r!   _ContentEmbedding_from_vertex   s   re   c                    sb   i  t | dgd urt dg fddt | dgD  t | dgd ur/t dgt | dg  S )Npartsc                       g | ]}t | qS r    )_Part_to_mldevrG   r3   r    r!   rJ          z%_Content_to_mldev.<locals>.<listcomp>rolerR   r(   r)   r    ri   r!   _Content_to_mldev   s   

	rm   c                 C   T   i }t | dgd urt|dgt | dg t | dgd ur(t|dgt | dg |S )Ncontrol_typecontrolType enable_control_image_computationcomputeControlrR   r2   r    r    r!   !_ControlReferenceConfig_to_vertex   s   
rs   c                 C   sP   i }t | dgd urtdt | dgd urtdt | dgd ur&td|S )Nsystem_instructionz<system_instruction parameter is not supported in Gemini API.toolsz/tools parameter is not supported in Gemini API.generation_configz;generation_config parameter is not supported in Gemini API.)r0   r   r2   r    r    r!   _CountTokensConfig_to_mldev  s   rw   c                    s   i  t | dgd urt|dgtt | dg t | dgd ur2t|dg fddt | dgD  t | dgd urHt|dgtt | dg   S )Nrt   systemInstructionru   c                    rg   r    )_Tool_to_vertexrG   ri   r    r!   rJ   ,  rj   z0_CountTokensConfig_to_vertex.<locals>.<listcomp>rv   generationConfig)r0   r1   rW   	t_content_GenerationConfig_to_vertexrl   r    ri   r!   _CountTokensConfig_to_vertex  s0   

	r}   c              	      s   i  t |dgd urt ddgt| t |dg t |dgd ur7t dg fddtt |dgD  t |dgd urHtt |dg   S )NrT   rU   rV   c                    rg   r    rm   rG   ri   r    r!   rJ   O  rj   z3_CountTokensParameters_to_mldev.<locals>.<listcomp>config)r0   r1   rW   rX   rY   rw   rS   r(   r)   r    ri   r!   _CountTokensParameters_to_mldev>  s$   
	r   c              	   C   s   i }t |dgd urt|ddgt| t |dg t |dgd ur5t|dgdd tt |dgD  t |dgd urFtt |dg| |S )NrT   rU   rV   c                 S   rF   r    r    rG   r    r    r!   rJ   l  rK   z4_CountTokensParameters_to_vertex.<locals>.<listcomp>r   )r0   r1   rW   rX   rY   r}   rZ   r    r    r!    _CountTokensParameters_to_vertex[  s    r   c                 C   z   i }t | dgd urt|dgt | dg t | dgd ur(t|dgt | dg t | dgd ur;t|dgt | dg |S )Nr\   r]   totalTokenstotal_tokenscachedContentTokenCountcached_content_token_countrR   r2   r    r    r!   _CountTokensResponse_from_mldevu  s   
r   c                 C   rn   )Nr\   r]   r   r   rR   r2   r    r    r!    _CountTokensResponse_from_vertex  s   r   c              	   C   8   i }t |dgd urt|ddgt| t |dg |S NrT   rU   namer0   r1   rW   rX   rZ   r    r    r!   _DeleteModelParameters_to_mldev     r   c              	   C   r   r   r   rZ   r    r    r!    _DeleteModelParameters_to_vertex  r   r   c                 C   .   i }t | dgd urt|dgt | dg |S Nr\   r]   rR   r2   r    r    r!   _DeleteModelResponse_from_mldev     r   c                 C   r   r   rR   r2   r    r    r!    _DeleteModelResponse_from_vertex  r   r   c                 C   s  i }t | dgd urt|ddgt | dg t | dgd ur*t|ddgt | dg t | dgd ur>t|ddgt | dg t | dgd urRt|dd	gt | dg t | d
gd urft|ddgt | d
g t | dgd urzt|ddgt | dg t | dgd urt|ddgt | dg t | dgd urt|ddgt | dg t | dgd urt|ddgt | dg t | dgd urt|ddgt | dg t | dgd urt|ddgt | dg t | dgd urt|g dt | dg t | dgd urt|g dt | dg t | dgd urt|ddgt | dg t | dgd ur0t|dgt | dg t | dgd urEt|ddgt | dg t | dgd urZt|g d t | dg |S )!Noutput_gcs_uri
parameters
storageUrinegative_promptnegativePromptnumber_of_imagessampleCountaspect_ratioaspectRatioguidance_scaleguidanceScaleseedsafety_filter_levelsafetySettingperson_generationpersonGenerationinclude_safety_attributesincludeSafetyAttributesinclude_rai_reasonincludeRaiReasonlanguageoutput_mime_typer   outputOptionsr.   output_compression_qualityr   r   compressionQualityadd_watermarkaddWatermarklabels	edit_modeeditMode
base_steps)r   
editConfig	baseStepsrR   r2   r    r    r!   _EditImageConfig_to_vertex     














r   c              	      s   i  t |dgd urt ddgt| t |dg t |dgd ur.t ddgt |dg t |dgd urIt ddg fddt |dgD  t |d	gd urZtt |d	g   S )
NrT   rU   promptinstances[0]reference_imagesreferenceImagesc                    rg   r    )_ReferenceImageAPI_to_vertexrG   ri   r    r!   rJ   b  rj   z2_EditImageParameters_to_vertex.<locals>.<listcomp>r   )r0   r1   rW   rX   r   r   r    ri   r!   _EditImageParameters_to_vertexN  s(   

	r   c                    b   i  t | dgd urt dgt | dg t | dgd ur/t dg fddt | dgD   S )Nr\   r]   predictionsgenerated_imagesc                    rg   r    _GeneratedImage_from_vertexrG   ri   r    r!   rJ   |  rj   z2_EditImageResponse_from_vertex.<locals>.<listcomp>rR   rl   r    ri   r!   _EditImageResponse_from_vertexn     

	r   c                 C   s   i }t | dgd urt|ddgt | dg t | dgd ur*t|ddgt | dg t | dgd ur>t|ddgt | dg t | dgd urJtdt | d	gd urVtd
|S )N	task_type
requests[]taskTypetitleoutput_dimensionalityoutputDimensionalityr-   z3mime_type parameter is not supported in Gemini API.auto_truncatez7auto_truncate parameter is not supported in Gemini API.r/   r2   r    r    r!   _EmbedContentConfig_to_mldev  s(   

r   c                 C   s   i }t | dgd urt|ddgt | dg t | dgd ur*t|ddgt | dg t | dgd ur>t|ddgt | dg t | dgd urRt|ddgt | dg t | d	gd urft|dd
gt | d	g |S )Nr   instances[]r   r   r   r   r-   r.   r   autoTruncaterR   r2   r    r    r!   _EmbedContentConfig_to_vertex  s8   



r   c              
   C   s   i }t |dgd urt|ddgt| t |dg t |dgd ur7t|ddgdd t| t |dgD  t |dgd urHtt |dg| t|ddgt| t |dg |S )	NrT   rU   rV   r   r6   c                 S   rF   r    r    rG   r    r    r!   rJ         z4_EmbedContentParameters_to_mldev.<locals>.<listcomp>r   )r0   r1   rW   rX   t_contents_for_embedr   rZ   r    r    r!    _EmbedContentParameters_to_mldev  s2   r   c              
   C   s   i }t |dgd urt|ddgt| t |dg t |dgd ur7t|ddgdd t| t |dgD  t |dgd urHtt |dg| |S )	NrT   rU   rV   r   r6   c                 S   rF   r    r    rG   r    r    r!   rJ     r   z5_EmbedContentParameters_to_vertex.<locals>.<listcomp>r   )r0   r1   rW   rX   r   r   rZ   r    r    r!   !_EmbedContentParameters_to_vertex  s(   r   c                 C   s   i }t | dgd urt|dgt | dg t | dgd ur-t|dgdd t | dgD  t | dgd ur@t|dgt | dg |S )Nr\   r]   
embeddingsc                 S   rF   r    r    rG   r    r    r!   rJ     rK   z4_EmbedContentResponse_from_mldev.<locals>.<listcomp>metadatarR   r2   r    r    r!    _EmbedContentResponse_from_mldev  s   r   c                    s   i  t | dgd urt dgt | dg t | ddgd ur1t dg fddt | ddgD  t | dgd urDt dgt | dg  S )Nr\   r]   zpredictions[]r   c                    rg   r    )re   rG   ri   r    r!   rJ   5  rj   z5_EmbedContentResponse_from_vertex.<locals>.<listcomp>r   rR   rl   r    ri   r!   !_EmbedContentResponse_from_vertex'  s    
	r   c                 C   rn   )Nendpointr   deployedModelIddeployed_model_idrR   r2   r    r    r!   _Endpoint_from_vertexA  s   r   c                 C   sl   i }t | dgd urtdt | dgd ur!t|dgt | dg t | dgd ur4t|dgt | dg |S )Nr+   r,   file_urifileUrir-   r.   r0   r   r1   r2   r    r    r!   _FileData_to_mldevQ  s   r   c                 C   s  i }t | dgd urtdt | dgd ur!t|dgt | dg t | dgd ur4t|dgt | dg t | dgd urGt|dgt | dg t | dgd urZt|dgt | dg t | dgd urmt|dgt | dg t | d	gd urt|d
gt | d	g |S )Nbehaviorz1behavior parameter is not supported in Vertex AI.descriptionr   r   parameters_json_schemaparametersJsonSchemaresponseresponse_json_schemaresponseJsonSchemar   r2   r    r    r!   _FunctionDeclaration_to_vertexb  s0   

r   c              
      s^  i t |dgd urt|dgttt |dg t |dgd ur.tdgt |dg t |dgd urAtdgt |dg t |dgd urTtdgt |dg t |dgd urgtd	gt |dg t |d
gd urztdgt |d
g t |dgd urtdgt |dg t |dgd urtdgt |dg t |dgd urtdgt |dg t |dgd urtdgt |dg t |dgd urtdgt |dg t |dgd urtdgt |dg t |dgd urtdgt |dg t |dgd urtdgt t |dg t |dgd ur+tdgt |dg t |dgd ur8tdt |dgd urEtdt |d gd ur`t|d!gfd"d#t |d gD  t |d$gd urt|d$g fd%d#t t |d$gD  t |d&gd urt|d'gt |d&g t |d(gd urtd)t |d*gd urt|d+gt t |d*g t |d,gd urtd-gt |d,g t |d.gd urtd/gt |d.g t |d0gd urtd1gt	t |d0g t |d2gd urtd3t |d4gd urtd5gt |d4g t |d6gd ur-td7gt |d6g S )8Nrt   rx   temperaturetop_ptopPtop_ktopKcandidate_countcandidateCountmax_output_tokensmaxOutputTokensstop_sequencesstopSequencesresponse_logprobsresponseLogprobslogprobspresence_penaltypresencePenaltyfrequency_penaltyfrequencyPenaltyr   response_mime_typeresponseMimeTyperesponse_schemaresponseSchemar   r   routing_configz8routing_config parameter is not supported in Gemini API.model_selection_configz@model_selection_config parameter is not supported in Gemini API.safety_settingssafetySettingsc                    rg   r    )_SafetySetting_to_mldevrG   ri   r    r!   rJ     rj   z3_GenerateContentConfig_to_mldev.<locals>.<listcomp>ru   c                       g | ]}t t |qS r    )_Tool_to_mldevrW   t_toolrG   rS   r3   r    r!   rJ         tool_config
toolConfigr   0labels parameter is not supported in Gemini API.cached_contentcachedContentresponse_modalitiesresponseModalitiesmedia_resolutionmediaResolutionspeech_configspeechConfigaudio_timestampz9audio_timestamp parameter is not supported in Gemini API.thinking_configthinkingConfigimage_configimageConfig)
r0   r1   rm   rW   r{   t_schemar   t_toolst_cached_content_namet_speech_configr   r    r	  r!   _GenerateContentConfig_to_mldev  s   





		
r  c              
      s  i t |dgd urt|dgtt |dg t |dgd ur+tdgt |dg t |dgd ur>tdgt |dg t |dgd urQtdgt |dg t |dgd urdtd	gt |dg t |d
gd urwtdgt |d
g t |dgd urtdgt |dg t |dgd urtdgt |dg t |dgd urtdgt |dg t |dgd urtdgt |dg t |dgd urtdgt |dg t |dgd urtdgt |dg t |dgd urtdgt |dg t |dgd urtdgt t |dg t |dgd ur(tdgt |dg t |dgd ur<tdgt |dg t |dgd urPtdgt |dg t |d gd urit|d!gd"d# t |d gD  t |d$gd urt|d$g fd%d#t t |d$gD  t |d&gd urt|d'gt |d&g t |d(gd urt|d(gt |d(g t |d)gd urt|d*gt t |d)g t |d+gd urtd,gt |d+g t |d-gd urtd.gt |d-g t |d/gd urtd0gttt |d/g t |d1gd urtd2gt |d1g t |d3gd ur3td4gt |d3g t |d5gd urGtd6gt |d5g S )7Nrt   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  routingConfigr  modelConfigr  r  c                 S   rF   r    r    rG   r    r    r!   rJ     rK   z4_GenerateContentConfig_to_vertex.<locals>.<listcomp>ru   c                    r  r    )ry   rW   r  rG   r	  r    r!   rJ     r
  r  r  r   r  r  r  r  r  r  r  r  r  audioTimestampr  r  r  r  )	r0   r1   rW   r{   r  r  r  _SpeechConfig_to_vertexr  r   r    r	  r!    _GenerateContentConfig_to_vertex%  s   




	
r$  c              	      s   i  t |dgd urt ddgt| t |dg t |dgd ur7t dg fddtt |dgD  t |dgd urNt dgt| t |dg   S )NrT   rU   rV   c                    rg   r    r~   rG   ri   r    r!   rJ     rj   z7_GenerateContentParameters_to_mldev.<locals>.<listcomp>r   rz   )r0   r1   rW   rX   rY   r  r   r    ri   r!   #_GenerateContentParameters_to_mldev  s0   
	r%  c              	   C   s   i }t |dgd urt|ddgt| t |dg t |dgd ur5t|dgdd tt |dgD  t |dgd urLt|dgt| t |dg| |S )NrT   rU   rV   c                 S   rF   r    r    rG   r    r    r!   rJ     rK   z8_GenerateContentParameters_to_vertex.<locals>.<listcomp>r   rz   )r0   r1   rW   rX   rY   r$  rZ   r    r    r!   $_GenerateContentParameters_to_vertex  s,   r&  c                    s   i  t | dgd urt dgt | dg t | dgd ur/t dg fddt | dgD  t | dgd urBt dgt | dg t | dgd urUt d	gt | dg t | d
gd urht dgt | d
g t | dgd ur{t dgt | dg  S )Nr\   r]   
candidatesc                    rg   r    )rO   rG   ri   r    r!   rJ     rj   z7_GenerateContentResponse_from_mldev.<locals>.<listcomp>modelVersionmodel_versionpromptFeedbackprompt_feedback
responseIdresponse_idusageMetadatausage_metadatarR   rl   r    ri   r!   #_GenerateContentResponse_from_mldev  s,   

	r0  c                 C   s  i }t | dgd urt|dgt | dg t | dgd ur-t|dgdd t | dgD  t | dgd ur@t|dgt | dg t | dgd urSt|d	gt | dg t | d
gd urft|dgt | d
g t | dgd uryt|dgt | dg t | dgd urt|dgt | dg |S )Nr\   r]   r'  c                 S   rF   r    r    rG   r    r    r!   rJ   4  rK   z8_GenerateContentResponse_from_vertex.<locals>.<listcomp>
createTimecreate_timer(  r)  r*  r+  r,  r-  r.  r/  rR   r2   r    r    r!   $_GenerateContentResponse_from_vertex&  s,   r3  c                 C   sx  i }t | dgd urtdt | dgd urtdt | dgd ur.t|ddgt | dg t | dgd urBt|dd	gt | dg t | d
gd urVt|ddgt | d
g t | dgd urbtdt | dgd ur~tt | dg t|ddgt | dg t | dgd urtt | dg t|ddgt | dg t | dgd urt|ddgt | dg t | dgd urt|ddgt | dg t | dgd urt|ddgt | dg t | dgd urt|g dt | dg t | dgd urt|g dt | dg t | dgd urtdt | dgd urtdt | dgd ur-t|dd gt | dg t | d!gd ur:td"|S )#Nr   8output_gcs_uri parameter is not supported in Gemini API.r   z9negative_prompt parameter is not supported in Gemini API.r   r   r   r   r   r   r   r   .seed parameter is not supported in Gemini API.r   r   r   r   r   r   r   r   r   r   r   r   r   r   z7add_watermark parameter is not supported in Gemini API.r   r  
image_sizesampleImageSizeenhance_promptz8enhance_prompt parameter is not supported in Gemini API.)r0   r   r1   r%   r"   r2   r    r    r!   _GenerateImagesConfig_to_mldevI  s   












r9  c                 C   s  i }t | dgd urt|ddgt | dg t | dgd ur*t|ddgt | dg t | dgd ur>t|ddgt | dg t | dgd urRt|dd	gt | dg t | d
gd urft|ddgt | d
g t | dgd urzt|ddgt | dg t | dgd urt|ddgt | dg t | dgd urt|ddgt | dg t | dgd urt|ddgt | dg t | dgd urt|ddgt | dg t | dgd urt|ddgt | dg t | dgd urt|g dt | dg t | dgd urt|g dt | dg t | dgd urt|ddgt | dg t | dgd ur0t|dgt | dg t | dgd urEt|ddgt | dg t | dgd urZt|dd gt | dg |S )!Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r6  r7  r8  enhancePromptrR   r2   r    r    r!   _GenerateImagesConfig_to_vertex  r   r;  c              	   C      i }t |dgd urt|ddgt| t |dg t |dgd ur.t|ddgt |dg t |dgd ur?tt |dg| |S NrT   rU   r   r   r   )r0   r1   rW   rX   r9  rZ   r    r    r!   "_GenerateImagesParameters_to_mldev1     r>  c              	   C   r<  r=  )r0   r1   rW   rX   r;  rZ   r    r    r!   #_GenerateImagesParameters_to_vertexG  r?  r@  c                       i  t | dgd urt dgt | dg t | dgd ur/t dg fddt | dgD  t | dgd urEt dgtt | dg   S )	Nr\   r]   r   r   c                    rg   r    )_GeneratedImage_from_mldevrG   ri   r    r!   rJ   k  rj   z6_GenerateImagesResponse_from_mldev.<locals>.<listcomp>positivePromptSafetyAttributes!positive_prompt_safety_attributes)r0   r1   _SafetyAttributes_from_mldevrl   r    ri   r!   "_GenerateImagesResponse_from_mldev]  ,   

	rF  c                    rA  )	Nr\   r]   r   r   c                    rg   r    r   rG   ri   r    r!   rJ     rj   z7_GenerateImagesResponse_from_vertex.<locals>.<listcomp>rC  rD  )r0   r1   _SafetyAttributes_from_vertexrl   r    ri   r!   #_GenerateImagesResponse_from_vertex}  rG  rI  c                    s0  i  t | dgd urt|ddgt | dg t | dgd ur"tdt | dgd ur.tdt | dgd urBt|dd	gt | dg t | d
gd urNtdt | dgd urbt|ddgt | dg t | dgd urvt|ddgt | dg t | dgd urt|ddgt | dg t | dgd urtdt | dgd urt|ddgt | dg t | dgd urt|ddgt | dg t | dgd urtdt | dgd urt|ddgtt | dg  t | dgd urt|ddg fddt | dgD  t | d gd ur	td!t | d"gd urtd# S )$Nnumber_of_videosr   r   r   r4  fpsz-fps parameter is not supported in Gemini API.duration_secondsdurationSecondsr   r5  r   r   
resolutionr   r   pubsub_topicz6pubsub_topic parameter is not supported in Gemini API.r   r   r8  r:  generate_audioz8generate_audio parameter is not supported in Gemini API.
last_framer   	lastFramer   r   c                    rg   r    )'_VideoGenerationReferenceImage_to_mldevrG   ri   r    r!   rJ     rj   z2_GenerateVideosConfig_to_mldev.<locals>.<listcomp>maskz.mask parameter is not supported in Gemini API.compression_qualityz=compression_quality parameter is not supported in Gemini API.)r0   r1   r   _Image_to_mldevrl   r    ri   r!   _GenerateVideosConfig_to_mldev  s   








	rW  c                    s  i  t | dgd urt|ddgt | dg t | dgd ur*t|ddgt | dg t | dgd ur>t|ddgt | dg t | dgd urRt|ddgt | dg t | d	gd urft|dd	gt | d	g t | d
gd urzt|ddgt | d
g t | dgd urt|ddgt | dg t | dgd urt|ddgt | dg t | dgd urt|ddgt | dg t | dgd urt|ddgt | dg t | dgd urt|ddgt | dg t | dgd urt|ddgt | dg t | dgd ur
t|ddgtt | dg  t | dgd ur&t|ddg fddt | dgD  t | dgd ur>t|ddgtt | dg  t | dgd urSt|dd gt | dg  S )!NrJ  r   r   r   r   rK  rL  rM  r   r   r   rN  r   r   rO  pubsubTopicr   r   r8  r:  rP  generateAudiorQ  r   rR  r   r   c                    rg   r    )(_VideoGenerationReferenceImage_to_vertexrG   ri   r    r!   rJ   \  rj   z3_GenerateVideosConfig_to_vertex.<locals>.<listcomp>rT  rU  r   )r0   r1   _Image_to_vertex_VideoGenerationMask_to_vertexrl   r    ri   r!   _GenerateVideosConfig_to_vertex  s   











	
r]  c                 C   s   i }t | dgd urt|dgt | dg t | dgd ur(t|dgt | dg t | dgd ur;t|dgt | dg t | dgd urNt|dgt | dg t | ddgd urft|dgtt | ddg| t | ddgd ur~t|dgtt | ddg| |S )Nr   r   doneerrorr   generateVideoResponseresult)r0   r1   "_GenerateVideosResponse_from_mldevr2   r    r    r!   #_GenerateVideosOperation_from_mldevs  s4   rc  c                 C   s   i }t | dgd urt|dgt | dg t | dgd ur(t|dgt | dg t | dgd ur;t|dgt | dg t | dgd urNt|dgt | dg t | dgd urdt|dgtt | dg| t | dgd urzt|dgtt | dg| |S )Nr   r   r^  r_  r   ra  )r0   r1   #_GenerateVideosResponse_from_vertexr2   r    r    r!   $_GenerateVideosOperation_from_vertex  s4   re  c              	   C      i }t |dgd urt|ddgt| t |dg t |dgd ur.t|ddgt |dg t |dgd urEt|ddgtt |dg| t |dgd ur\t|ddgtt |dg| t |dgd urmtt |dg| t |dgd ur~tt |dg| |S 	NrT   rU   r   r   imagevideosourcer   )r0   r1   rW   rX   rV  _Video_to_mldev_GenerateVideosSource_to_mldevrW  rZ   r    r    r!   "_GenerateVideosParameters_to_mldev  4   rm  c              	   C   rf  rg  )r0   r1   rW   rX   r[  _Video_to_vertex_GenerateVideosSource_to_vertexr]  rZ   r    r    r!   #_GenerateVideosParameters_to_vertex  rn  rq  c                       i  t | dgd urt dg fddt | dgD  t | dgd ur/t dgt | dg t | dgd urBt dgt | dg  S )	NgeneratedSamplesgenerated_videosc                    rg   r    )_GeneratedVideo_from_mldevrG   ri   r    r!   rJ     rj   z6_GenerateVideosResponse_from_mldev.<locals>.<listcomp>raiMediaFilteredCountrai_media_filtered_countraiMediaFilteredReasonsrai_media_filtered_reasonsrR   rl   r    ri   r!   rb    ,   

	

rb  c                    rr  )	Nvideosrt  c                    rg   r    )_GeneratedVideo_from_vertexrG   ri   r    r!   rJ   6  rj   z7_GenerateVideosResponse_from_vertex.<locals>.<listcomp>rv  rw  rx  ry  rR   rl   r    ri   r!   rd  -  rz  rd  c                 C      i }t | dgd urt|ddgt | dg t | dgd ur-t|ddgtt | dg| t | dgd urDt|ddgtt | dg| |S Nr   r   rh  ri  )r0   r1   rV  rk  r2   r    r    r!   rl  M  $   rl  c                 C   r}  r~  )r0   r1   r[  ro  r2   r    r    r!   rp  h  r  rp  c                 C   sd   i }t | dgd urt|dgtt | dg| t | dgd ur0t|dgdd t | dgD  |S )N_selfrT  r   c                 S   rF   r    r    rG   r    r    r!   rJ     rK   z3_GeneratedImageMask_from_vertex.<locals>.<listcomp>)r0   r1   _Image_from_vertexr2   r    r    r!   _GeneratedImageMask_from_vertex  s   r  c                 C   s   i }t | dgd urt|dgtt | dg| t | dgd ur+t|dgt | dg t | dgd urAt|dgtt | dg| |S )Nr  rh  raiFilteredReasonrai_filtered_reasonsafety_attributes)r0   r1   _Image_from_mldevrE  r2   r    r    r!   rB    s(   
rB  c                 C   s   i }t | dgd urt|dgtt | dg| t | dgd ur+t|dgt | dg t | dgd urAt|dgtt | dg| t | dgd urTt|dgt | dg |S )Nr  rh  r  r  r  r   enhanced_prompt)r0   r1   r  rH  r2   r    r    r!   r     s,   
r   c                 C   4   i }t | dgd urt|dgtt | dg| |S )Nri  )r0   r1   _Video_from_mldevr2   r    r    r!   ru       ru  c                 C   4   i }t | dgd urt|dgtt | dg| |S )Nr  ri  )r0   r1   _Video_from_vertexr2   r    r    r!   r|    r  r|  c                 C   s~  i }t | dgd urt|dgt | dg t | dgd ur(t|dgt | dg t | dgd ur;t|dgt | dg t | dgd urNt|dgt | dg t | d	gd urat|d
gt | d	g t | dgd urtt|dgt | dg t | dgd urt|dgt | dg t | dgd urt|dgt | dg t | dgd urt|dgt | dg t | dgd urt|dgt | dg t | dgd urt|dgt | dg t | dgd urt|dgt | dg t | dgd urt|dgt | dg t | dgd urt|dgt | dg t | dgd ur!t|dgt | dg t | dgd ur5t|dgt | dg t | dgd urLt|d gtt | dg| t | d!gd ur`t|d"gt | d!g t | d#gd urtt|d#gt | d#g t | d$gd urt|d%gt | d$g t | d&gd urt|d'gt | d&g t | d(gd urt|d)gt | d(g t | d*gd urtd+|S ),Nr  r!  r   r   r  r"  r   r   enable_affective_dialogenableAffectiveDialogr   r   r   r   r   r  r  r   r   r   r   r   r   r  r  r   r   r  r   r   r  r  r   r   r   r  r  r   r   r   r   enable_enhanced_civic_answerszFenable_enhanced_civic_answers parameter is not supported in Vertex AI.)r0   r1   r#  r   r2   r    r    r!   r|     s   






r|   c              	   C   r   r   r   rZ   r    r    r!   _GetModelParameters_to_mldevi	  r   r  c              	   C   r   r   r   rZ   r    r    r!   _GetModelParameters_to_vertexy	  r   r  c                 C   sF   i }t | dgd urtdt | dgd ur!t|dgt | dg |S )Nauth_configz5auth_config parameter is not supported in Gemini API.enable_widgetenableWidgetr   r2   r    r    r!   _GoogleMaps_to_mldev	  s   r  c                 C   s^   i }t | dgd urtdt | dgd urtdt | dgd ur-t|dgt | dg |S )Nexclude_domainsz9exclude_domains parameter is not supported in Gemini API.blocking_confidencez=blocking_confidence parameter is not supported in Gemini API.time_range_filtertimeRangeFilterr   r2   r    r    r!   _GoogleSearch_to_mldev	  s   r  c                 C   sZ   i }t | dgd urt|dgtt | dg t | dgd ur+t|dgt | dg |S )NbytesBase64Encodedimage_bytesr.   r-   r0   r1   base_tt_bytesr2   r    r    r!   r  	  s   r  c                 C      i }t | dgd urt|dgt | dg t | dgd ur+t|dgtt | dg t | dgd ur>t|dgt | dg |S )NgcsUrigcs_urir  r  r.   r-   r  r2   r    r    r!   r  	     r  c                 C   sr   i }t | dgd urtdt | dgd ur$t|dgtt | dg t | dgd ur7t|dgt | dg |S )Nr  z1gcs_uri parameter is not supported in Gemini API.r  r  r-   r.   )r0   r   r1   r  r  r2   r    r    r!   rV  	  s   rV  c                 C   r  )Nr  r  r  r  r-   r.   r  r2   r    r    r!   r[  	  r  r[  c              	   C      i }t |dgd urt|ddgt |dg t |dgd ur*t|ddgt |dg t |dgd ur>t|ddgt |dg t |dgd urVt|dd	gt| t |dg |S 
N	page_size_querypageSize
page_token	pageTokenfilter
query_baserU   
models_urlr0   r1   rW   t_models_urlrZ   r    r    r!   _ListModelsConfig_to_mldev 
  (   
r  c              	   C   r  r  r  rZ   r    r    r!   _ListModelsConfig_to_vertex 
  r  r  c                 C   ,   i }t |dgd urt| t |dg| |S Nr   )r0   r  rZ   r    r    r!   _ListModelsParameters_to_mldev@
     r  c                 C   r  r  )r0   r  rZ   r    r    r!   _ListModelsParameters_to_vertexN
  r  r  c              	         i  t | dgd urt dgt | dg t | dgd ur(t dgt | dg t | dgd urEt dg fddtt | dgD   S )	Nr\   r]   nextPageTokennext_page_tokenr  modelsc                    rg   r    )_Model_from_mldevrG   ri   r    r!   rJ   m
  rj   z2_ListModelsResponse_from_mldev.<locals>.<listcomp>r0   r1   rW   t_extract_modelsrl   r    ri   r!   _ListModelsResponse_from_mldev\
      
	r  c              	      r  )	Nr\   r]   r  r  r  r  c                    rg   r    )_Model_from_vertexrG   ri   r    r!   rJ   
  rj   z3_ListModelsResponse_from_vertex.<locals>.<listcomp>r  rl   r    ri   r!   _ListModelsResponse_from_vertexv
  r  r  c                 C   r   )N	mask_modemaskModesegmentation_classesmaskClassesmask_dilationdilationrR   r2   r    r    r!   _MaskReferenceConfig_to_vertex
  s   r  c                 C   s  i }t | dgd urt|dgt | dg t | dgd ur(t|dgt | dg t | dgd ur;t|dgt | dg t | dgd urNt|dgt | dg t | dgd urat|dgt | dg t | dgd urtt|d	gt | dg t | d
gd urt|dgt | d
g t | dgd urt|dgt | dg t | dgd urt|dgt | dg t | dgd urt|dgt | dg t | dgd urt|dgt | dg t | dgd urt|dgt | dg t | dgd urt|dgt | dg |S )Nr   displayNamer+   r   versionr  tuned_model_infoinputTokenLimitinput_token_limitoutputTokenLimitoutput_token_limitsupportedGenerationMethodssupported_actionsr   maxTemperaturemax_temperaturer   r   r   r   thinkingrR   r2   r    r    r!   r  
  sL   

r  c                    s|  i  t | dgd urt dgt | dg t | dgd ur(t dgt | dg t | dgd ur;t dgt | dg t | dgd urNt dgt | dg t | dgd urht dg fd	d
t | dgD  t | dgd ur{t dgt | dg t | dgd urt dgtt | dg  t | dgd urt dgt | dg t | dgd urt dgdd
 t | dgD   S )Nr   r  r+   r   	versionIdr  deployedModels	endpointsc                    rg   r    )r   rG   ri   r    r!   rJ   
  rj   z&_Model_from_vertex.<locals>.<listcomp>r   r  r  defaultCheckpointIddefault_checkpoint_idcheckpointsc                 S   rF   r    r    rG   r    r    r!   rJ     rK   )r0   r1   _TunedModelInfo_from_vertexrl   r    ri   r!   r  
  sL   

	
r  c                 C   s  i }t | dgd urt|dgt | dg t | dgd ur(t|dgt | dg t | dgd ur;t|dgt | dg t | dgd urQt|dgtt | dg| t | d	gd urdt|d
gt | d	g t | dgd urzt|dgtt | dg| t | dgd urt|dgt | dg t | dgd urt|dgt | dg t | dgd urt|dgt | dg t | dgd urt|dgt | dg |S )Nfunction_callfunctionCallcode_execution_resultcodeExecutionResultexecutable_codeexecutableCode	file_datafileDatafunction_responsefunctionResponseinline_data
inlineDatatextthoughtthought_signaturethoughtSignaturevideo_metadatavideoMetadata)r0   r1   r   r4   r2   r    r    r!   rh     sT   


rh   c                 C   r  )Nproduct_imagerh  r0   r1   r[  r2   r    r    r!   _ProductImage_to_vertexL  r  r  c                 C   s  i }t | dgd urt|ddgt | dg t | dgd ur*t|ddgt | dg t | dgd ur>t|ddgt | dg t | dgd urRt|ddgt | dg t | d	gd urft|dd
gt | d	g t | dgd urzt|ddgt | dg t | dgd urt|ddgt | dg t | dgd urt|g dt | dg t | dgd urt|g dt | dg t | dgd urt|ddgt | dg t | dgd urt|dgt | dg |S )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8  r:  r   rR   r2   r    r    r!   _RecontextImageConfig_to_vertex[  sx   








r  c              	   C   |   i }t |dgd urt|ddgt| t |dg t |dgd ur+tt |dg| t |dgd ur<tt |dg| |S NrT   rU   rj  r   )r0   r1   rW   rX   _RecontextImageSource_to_vertexr  rZ   r    r    r!   #_RecontextImageParameters_to_vertex     r  c                    <   i  t | dgd urt dg fddt | dgD   S )Nr   r   c                    rg   r    r   rG   ri   r    r!   rJ     rj   z7_RecontextImageResponse_from_vertex.<locals>.<listcomp>rR   rl   r    ri   r!   #_RecontextImageResponse_from_vertex     

	r  c                    s   i  t | dgd urt|ddgt | dg t | dgd ur-t|g dtt | dg  t | dgd urHt|ddg fddt | dgD   S )	Nr   r   person_image)r   personImagerh  product_imagesproductImagesc                    rg   r    )r  rG   ri   r    r!   rJ     rj   z3_RecontextImageSource_to_vertex.<locals>.<listcomp>r  rl   r    ri   r!   r    s(   

	r  c                 C   s$  i }t | dgd urt|dgtt | dg| t | dgd ur+t|dgt | dg t | dgd ur>t|dgt | dg t | dgd urTt|dgtt | dg| t | d	gd urjt|d
gtt | d	g| t | dgd ur}t|dgt | dg t | dgd urt|dgt | dg |S )Nreference_imagereferenceImagereference_idreferenceIdreference_typereferenceTypemask_image_configmaskImageConfigcontrol_image_configcontrolImageConfigstyle_image_configstyleImageConfigsubject_image_configsubjectImageConfig)r0   r1   r[  r  rs   r2   r    r    r!   r     sP   

r   c                 C      i }t | ddgd urt|dgt | ddg t | ddgd ur,t|dgt | ddg t | dgd ur?t|dgt | dg |S NsafetyAttributes
categoriesscorescontentTypecontent_typerR   r2   r    r    r!   rE  $     rE  c                 C   r  r  rR   r2   r    r    r!   rH  ;  r  rH  c                 C   sl   i }t | dgd urt|dgt | dg t | dgd ur!tdt | dgd ur4t|dgt | dg |S )Ncategorymethodz0method parameter is not supported in Gemini API.	thresholdr/   r2   r    r    r!   r  R  r5   r  c                 C   r  )Nrh  r  r2   r    r    r!   _ScribbleImage_to_vertexc  r  r  c                 C   s   i }t | dgd urt|ddgt | dg t | dgd ur*t|ddgt | dg t | dgd ur>t|ddgt | dg t | dgd urRt|ddgt | dg t | d	gd urft|dd
gt | d	g t | dgd uryt|dgt | dg |S )Nmoder   max_predictionsmaxPredictionsconfidence_thresholdconfidenceThresholdr  maskDilationbinary_color_thresholdbinaryColorThresholdr   rR   r2   r    r    r!   _SegmentImageConfig_to_vertexr  s<   



r!  c              	   C   r  r  )r0   r1   rW   rX   _SegmentImageSource_to_vertexr!  rZ   r    r    r!   !_SegmentImageParameters_to_vertex  r  r#  c                    r  )Nr   generated_masksc                    rg   r    )r  rG   ri   r    r!   rJ     rj   z5_SegmentImageResponse_from_vertex.<locals>.<listcomp>rR   rl   r    ri   r!   !_SegmentImageResponse_from_vertex  r  r%  c                 C   s   i }t | dgd urt|ddgt | dg t | dgd ur-t|ddgtt | dg| t | dgd urDt|ddgtt | dg| |S )Nr   r   rh  scribble_imagescribble)r0   r1   r[  r  r2   r    r    r!   r"    s(   r"  c                 C   sl   i }t | dgd urt|dgt | dg t | dgd ur(t|dgt | dg t | dgd ur4td|S )Nlanguage_codelanguageCodevoice_configvoiceConfigmulti_speaker_voice_configzCmulti_speaker_voice_config parameter is not supported in Vertex AI.r/   r2   r    r    r!   r#    s   r#  c                 C   s~  i }t | dgd urt|dgdd t | dgD  t | dgd ur&tdt | dgd ur9t|dgt | dg t | d	gd urLt|d
gt | d	g t | dgd ur_t|dgt | dg t | dgd urrt|dgt | dg t | dgd ur~tdt | dgd urt|dgtt | dg| t | dgd urt|dgtt | dg| t | dgd urt|dgt | dg |S )Nfunction_declarationsfunctionDeclarationsc                 S   rF   r    r    rG   r    r    r!   rJ     rK   z"_Tool_to_mldev.<locals>.<listcomp>	retrievalz3retrieval parameter is not supported in Gemini API.google_search_retrievalgoogleSearchRetrievalcomputer_usecomputerUsefile_search
fileSearchcode_executioncodeExecutionenterprise_web_searchz?enterprise_web_search parameter is not supported in Gemini API.google_maps
googleMapsgoogle_searchgoogleSearchurl_context
urlContext)r0   r1   r   r  r  r2   r    r    r!   r    sP   
r  c                    s  i  t | dgd urt dg fddt | dgD  t | dgd ur/t dgt | dg t | dgd urBt dgt | dg t | dgd urUt d	gt | dg t | d
gd uratdt | dgd urtt dgt | dg t | dgd urt dgt | dg t | dgd urt dgt | dg t | dgd urt dgt | dg t | dgd urt dgt | dg  S )Nr-  r.  c                    rg   r    )r   rG   ri   r    r!   rJ   6  rj   z#_Tool_to_vertex.<locals>.<listcomp>r/  r0  r1  r2  r3  r4  z4file_search parameter is not supported in Vertex AI.r6  r7  r8  enterpriseWebSearchr9  r:  r;  r<  r=  r>  r/   rl   r    ri   r!   ry   -  sH   

	

ry   c                 C   s~   i }t | ddgd urt|dgt | ddg t | dgd ur*t|dgt | dg t | dgd ur=t|dgt | dg |S )Nr   z&google-vertex-llm-tuning-base-model-id
base_modelr1  r2  
updateTimeupdate_timerR   r2   r    r    r!   r  b  s   r  c                 C   z   i }t | dgd urt|dgt | dg t | dgd ur(t|dgt | dg t | dgd ur;t|dgt | dg |S Nr+   r  r   r  r  rR   r2   r    r    r!   _UpdateModelConfig_to_mldevz     
rE  c                 C   rC  rD  rR   r2   r    r    r!   _UpdateModelConfig_to_vertex  rF  rG  c              	   C   sZ   i }t |dgd urt|ddgt| t |dg t |dgd ur+tt |dg| |S )NrT   rU   r   r   )r0   r1   rW   rX   rE  rZ   r    r    r!   _UpdateModelParameters_to_mldev     rH  c              	   C   sZ   i }t |dgd urt|ddgt| t |dg t |dgd ur+tt |dg| |S )NrT   rU   r   )r0   r1   rW   rX   rG  rZ   r    r    r!    _UpdateModelParameters_to_vertex  rI  rJ  c                 C   s  i }t | dgd urt|ddgt | dg t | dgd ur*t|ddgt | dg t | dgd ur>t|ddgt | dg t | dgd urRt|dd	gt | dg t | d
gd urft|g dt | d
g t | dgd urzt|g dt | dg t | dgd urt|g dt | dg t | dgd urt|g dt | dg t | dgd urt|dgt | dg t | dgd urt|ddgt | dg t | dgd urt|ddgt | dg |S )Nr   r   r   r   r   r   r   r   r   r   r   r   r   enhance_input_image)r   upscaleConfigenhanceInputImageimage_preservation_factor)r   rL  imagePreservationFactorr   r   r   r  rR   r2   r    r    r!    _UpscaleImageAPIConfig_to_vertex  sx   








rP  c              	   C   s   i }t |dgd urt|ddgt| t |dg t |dgd ur1t|ddgtt |dg| t |dgd urEt|g dt |dg t |dgd urVtt |dg| |S )NrT   rU   rh  r   upscale_factor)r   rL  upscaleFactorr   )r0   r1   rW   rX   r[  rP  rZ   r    r    r!   $_UpscaleImageAPIParameters_to_vertex  s,   
rS  c                    r   )Nr\   r]   r   r   c                    rg   r    r   rG   ri   r    r!   rJ   I  rj   z5_UpscaleImageResponse_from_vertex.<locals>.<listcomp>rR   rl   r    ri   r!   !_UpscaleImageResponse_from_vertex;  r   rT  c                 C   sZ   i }t | dgd urt|dgtt | dg| t | dgd ur+t|dgt | dg |S )Nrh  r  r  r  r  r2   r    r    r!   r\  R     r\  c                 C   sj   i }t | dgd urt|dgtt | dg| t | dgd ur3tt | dg t|dgt | dg |S Nrh  r  r  )r0   r1   rV  r'   r2   r    r    r!   rS  d  s   
rS  c                 C   sZ   i }t | dgd urt|dgtt | dg| t | dgd ur+t|dgt | dg |S rV  r  r2   r    r    r!   rZ  y  rU  rZ  c                 C      i }t | dgd urt|dgt | dg t | dgd ur+t|dgtt | dg t | dgd ur>t|dgt | dg |S )NuriencodedVideovideo_bytesencodingr-   r  r2   r    r    r!   r    r  r  c                 C   r  )Nr  rX  r  rZ  r.   r-   r  r2   r    r    r!   r    r  r  c                 C   rW  )NrX  rZ  rY  r-   r[  r  r2   r    r    r!   rk    r  rk  c                 C   r  )NrX  r  rZ  r  r-   r.   r  r2   r    r    r!   ro    r  ro  c                   @   s$  e Zd Zdddedeejejf deej	 dej
fddZdddedeejejf deej	 deej
 fd	d
Zdddedeejejf deej dejfddZdddededeej dejfddZdddededeej deej dejf
ddZdddedejdedeej dejf
ddZdddedejdeej dejfddZ dddedej!deej" dej#fddZ$dddedeej% dej&fddZ'dddeej( dej)fddZ*dddedeej+ dej&fd d!Z,dddedeej- dej.fd"d#Z/dddedeejejf deej0 dej1fd$d%Z2dddedeejejf deej3 dej4fd&d'Z5dddddd(dedee deej d)eej6 deej7 deej8 dej9fd*d+Z:dddedejdeej	 dej
fd,d-Z;dddedejdeej	 deej
 fd.d/Z<dddededeej dejfd0d1Z=dddededeej deej dejf
d2d3Z>dddedejdedeej? dejf
d4d5Z@dddddd(dedee deej d)eej6 deej7 deej8 dej9fd6d7ZAdddeej( deBej& fd8d9ZdS ):ModelsNr   rT   rV   r   r   c                C   s|  t j|||d}| jjr"t| j|}|d}|rd|}nd}nt| j|}|d}|r5d|}nd}|d}|rG| dt| }|	dd  d }	|j
d ur^|j
jd ur^|j
j}	t|}t|}| jd|||	}
|d urt|dd rt j|
d	}| j| |S |
jsi nt|
j}| jjrt|}| jjst|}t jj|| d
}t j|
jd|_| j| |S NrT   rV   r   rU   z{model}:generateContentr  ?r   postshould_return_http_response)r]   r   kwargsheaders)r   _GenerateContentParameters_api_clientvertexair&  get
format_mapr%  r   popr   http_optionsr   convert_to_dictencode_unserializable_typesrequestgetattrGenerateContentResponse_verify_responsebodyjsonloadsr3  r0  _from_response
model_dumpHttpResponserf  r]   selfrT   rV   r   parameter_modelrequest_dictrequest_url_dictpathquery_paramsrm  r   return_valueresponse_dictr    r    r!   _generate_content  sh   






zModels._generate_contentc                c   sv   t j|||d}| jjr#t| j|}|d}|r d|}nd}nt| j|}|d}|r6d|}nd}|d}|rH| dt| }|	dd  d }	|j
d ur_|j
jd ur_|j
j}	t|}t|}|d urwt|dd rwtd| jd	|||	D ]8}
|
jsi nt|
j}| jjrt|}| jjst|}t jj|| d
}t j|
jd|_| j| |V  qd S )Nr_  rU   %{model}:streamGenerateContent?alt=sser  r`  r   rb  FAccessing the raw HTTP response is not supported in streaming methods.ra  rc  re  )r   rg  rh  ri  r&  rj  rk  r%  r   rl  r   rm  r   rn  ro  rq  r   request_streamedrt  ru  rv  r3  r0  rr  rw  rx  ry  rf  r]   rs  r{  rT   rV   r   r|  r}  r~  r  r  rm  r   r  r  r    r    r!   _generate_content_stream.  st   






zModels._generate_content_streamc                C   sL  t j|||d}| jjr"t| j|}|d}|rd|}nd}nt| j|}|d}|r5d|}nd}|d}|rG| dt| }|	dd d}	|j
dur^|j
jdur^|j
j}	t|}t|}| jd	|||	}
|
jsvi nt|
j}| jjrt|}| jjst|}t jj|| d
}t j|
jd|_| j| |S )aA  Calculates embeddings for the given contents. Only text is supported.

    Args:
      model (str): The model to use.
      contents (list[Content]): The contents to embed.
      config (EmbedContentConfig): Optional configuration for embeddings.

    Usage:

    .. code-block:: python

      embeddings = client.models.embed_content(
          model= 'text-embedding-004',
          contents=[
              'What is your name?',
              'What is your favorite color?',
          ],
          config={
              'output_dimensionality': 64
          },
      )
    r_  rU   {model}:predict{model}:batchEmbedContentsr  r`  r   Nra  rc  re  )r   _EmbedContentParametersrh  ri  r   rj  rk  r   r   rl  r   rm  r   rn  ro  rp  rt  ru  rv  r   r   EmbedContentResponserw  rx  ry  rf  r]   rs  r  r    r    r!   embed_content  s\   





zModels.embed_contentr   c                C   L  t j|||d}| jjr"t| j|}|d}|rd|}nd}nt| j|}|d}|r5d|}nd}|d}|rG| dt| }|	dd d}	|j
dur^|j
jdur^|j
j}	t|}t|}| jd|||	}
|
jsvi nt|
j}| jjrt|}| jjst|}t jj|| d	}t j|
jd
|_| j| |S )z%Private method for generating images.rT   r   r   rU   r  r  r`  r   Nra  rc  re  )r   _GenerateImagesParametersrh  ri  r@  rj  rk  r>  r   rl  r   rm  r   rn  ro  rp  rt  ru  rv  rI  rF  GenerateImagesResponserw  rx  ry  rf  r]   rs  r{  rT   r   r   r|  r}  r~  r  r  rm  r   r  r  r    r    r!   _generate_images  s\   	





zModels._generate_imagesr   c                C     t j||||d}| jjstdt| j|}|d}|r$d|}nd}|d}	|	r6| dt|	 }|	dd d}
|j
durM|j
jdurM|j
j}
t|}t|}| jd	|||
}|jsei nt|j}| jjrst|}t jj|| d
}t j|jd|_| j| |S )z$Private method for editing an image.rT   r   r   r   6This method is only supported in the Vertex AI client.rU   r  r  r`  r   Nra  rc  re  )r   _EditImageParametersrh  ri  r   r   rj  rk  r   rl  r   rm  r   rn  ro  rp  rt  ru  rv  r   EditImageResponserw  rx  ry  rf  r]   rs  r{  rT   r   r   r   r|  r}  r~  r  r  rm  r   r  r  r    r    r!   _edit_image%  N   





zModels._edit_imagerh  rQ  c                C   r  )z&Private method for upscaling an image.rT   rh  rQ  r   r  rU   r  r  r`  r   Nra  rc  re  )r   _UpscaleImageAPIParametersrh  ri  r   rS  rj  rk  r   rl  r   rm  r   rn  ro  rp  rt  ru  rv  rT  UpscaleImageResponserw  rx  ry  rf  r]   rs  r{  rT   rh  rQ  r   r|  r}  r~  r  r  rm  r   r  r  r    r    r!   _upscale_imagee  r  zModels._upscale_imagerj  c                C     t j|||d}| jjstdt| j|}|d}|r#d|}nd}|d}|r5| dt| }|	dd d}	|j
durL|j
jdurL|j
j}	t|}t|}| jd	|||	}
|
jsdi nt|
j}| jjrrt|}t jj|| d
}| j| |S a  Recontextualizes an image.

    There are two types of recontextualization currently supported:
    1) Imagen Product Recontext - Generate images of products in new scenes
       and contexts.
    2) Virtual Try-On: Generate images of persons modeling fashion products.

    Args:
      model (str): The model to use.
      source (RecontextImageSource): An object containing the source inputs
        (prompt, person_image, product_images) for image recontext. prompt is
        optional for product recontext and disallowed for virtual try-on.
        person_image is required for virtual try-on, disallowed for product
        recontext. product_images is required for both product recontext and
        virtual try-on. Only one product image is supported for virtual try-on,
        and up to 3 product images (different angles of the same product) are
        supported for product recontext.
      config (RecontextImageConfig): Configuration for recontextualization.

    Usage:

      ```
      product_recontext_response = client.models.recontext_image(
          model="imagen-product-recontext-preview-06-30",
          source=types.RecontextImageSource(
              prompt="In a modern kitchen setting.",
              product_images=[types.ProductImage.from_file(IMAGE_FILE_PATH)],
          ),
          config=types.RecontextImageConfig(
              number_of_images=1,
          ),
      )
      image = product_recontext_response.generated_images[0].image

      virtual_try_on_response = client.models.recontext_image(
          model="virtual-try-on-preview-08-04",
          source=types.RecontextImageSource(
              person_image=types.Image.from_file(IMAGE1_FILE_PATH),
              product_images=[types.ProductImage.from_file(IMAGE2_FILE_PATH)],
          ),
          config=types.RecontextImageConfig(
              number_of_images=1,
          ),
      )
      image = virtual_try_on_response.generated_images[0].image
      ```
    rT   rj  r   r  rU   r  r  r`  r   Nra  rc  )r   _RecontextImageParametersrh  ri  r   r  rj  rk  r   rl  r   rm  r   rn  ro  rp  rt  ru  rv  r  RecontextImageResponserw  rx  rs  r{  rT   rj  r   r|  r}  r~  r  r  rm  r   r  r  r    r    r!   recontext_image  sF   7




zModels.recontext_imagec                C   r  )a"  Segments an image, creating a mask of a specified area.

    Args:
      model (str): The model to use.
      source (SegmentImageSource): An object containing the source inputs
        (prompt, image, scribble_image) for image segmentation. The prompt is
        required for prompt mode and semantic mode, disallowed for other modes.
        scribble_image is required for the interactive mode, disallowed for
        other modes.
      config (SegmentImageConfig): Configuration for segmentation.

    Usage:

      ```
      response = client.models.segment_image(
          model="image-segmentation-001",
          source=types.SegmentImageSource(
              image=types.Image.from_file(IMAGE_FILE_PATH),
          ),
      )

      mask_image = response.generated_masks[0].mask
      ```
    r  r  rU   r  r  r`  r   Nra  rc  )r   _SegmentImageParametersrh  ri  r   r#  rj  rk  r   rl  r   rm  r   rn  ro  rp  rt  ru  rv  r%  SegmentImageResponserw  rx  rs  r  r    r    r!   segment_image  sF    




zModels.segment_imagec                C   s:  t j||d}| jjr!t| j|}|d}|rd|}nd}nt| j|}|d}|r4d|}nd}|d}|rF| dt| }|	dd  d }|j
d ur]|j
jd ur]|j
j}t|}t|}| jd|||}	|	jsui nt|	j}
| jjrt|
}
| jjst|
}
t jj|
| d}| j| |S 	NrT   r   rU   {name}r  r`  r   rj  rc  )r   _GetModelParametersrh  ri  r  rj  rk  r  r   rl  r   rm  r   rn  ro  rp  rt  ru  rv  r  r  Modelrw  rx  rs  r{  rT   r   r|  r}  r~  r  r  rm  r   r  r  r    r    r!   rj  b  sP   





z
Models.getc                C   s  t j|d}| jjr t| j|}|d}|rd|}nd}nt| j|}|d}|r3d|}nd}|d}|rY|drY|d}| d| }|rX|dt	| 7 }n|rd| dt	| }|d	d  d }|j
d ur{|j
jd ur{|j
j}t|}t|}| jd
|||}	|	jsi nt|	j}
| jjrt|
}
| jjst|
}
t jj|
| d}t j|	jd|_| j| |S Nr]  rU   z{models_url}r  r  z?filter=&r`  r   rj  rc  re  )r   _ListModelsParametersrh  ri  r  rj  rk  r  rl  r   r   rm  r   rn  ro  rp  rt  ru  rv  r  r  ListModelsResponserw  rx  ry  rf  r]   rs  r{  r   r|  r}  r~  r  r  query_param_filterrm  r   r  r  r    r    r!   _list  s`   






zModels._listc                C   s:  t j||d}| jjr!t| j|}|d}|rd|}nd}nt| j|}|d}|r4d|}nd}|d}|rF| dt| }|	dd  d }|j
d ur]|j
jd ur]|j
j}t|}t|}| jd|||}	|	jsui nt|	j}
| jjrt|
}
| jjst|
}
t jj|
| d	}| j| |S 
Nr  rU   z{model}r  r  r`  r   patchrc  )r   _UpdateModelParametersrh  ri  rJ  rj  rk  rH  r   rl  r   rm  r   rn  ro  rp  rt  ru  rv  r  r  r  rw  rx  rs  r  r    r    r!   update  sT   





zModels.updatec                C   sJ  t j||d}| jjr!t| j|}|d}|rd|}nd}nt| j|}|d}|r4d|}nd}|d}|rF| dt| }|	dd  d }|j
d ur]|j
jd ur]|j
j}t|}t|}| jd|||}	|	jsui nt|	j}
| jjrt|
}
| jjst|
}
t jj|
| d}t j|	jd	|_| j| |S 
Nr  rU   r  r  r`  r   deleterc  re  )r   _DeleteModelParametersrh  ri  r   rj  rk  r   r   rl  r   rm  r   rn  ro  rp  rt  ru  rv  r   r   DeleteModelResponserw  rx  ry  rf  r]   rs  r  r    r    r!   r  $  sZ   





zModels.deletec                C   r  )a8  Counts the number of tokens in the given content.

    Multimodal input is supported for Gemini models.

    Args:
      model (str): The model to use for counting tokens.
      contents (list[types.Content]): The content to count tokens for.
      config (CountTokensConfig): The configuration for counting tokens.

    Usage:

    .. code-block:: python

      response = client.models.count_tokens(
          model='gemini-2.0-flash',
          contents='What is your name?',
      )
      print(response)
      # total_tokens=5 cached_content_token_count=None
    r_  rU   {model}:countTokensr  r`  r   Nra  rc  re  )r   _CountTokensParametersrh  ri  r   rj  rk  r   r   rl  r   rm  r   rn  ro  rp  rt  ru  rv  r   r   CountTokensResponserw  rx  ry  rf  r]   rs  r  r    r    r!   count_tokensh  s\   





zModels.count_tokensc                C   s  t j|||d}| jjstdt| j|}|d}|r#d|}nd}|d}|r5| dt| }|	dd d}	|j
durL|j
jdurL|j
j}	t|}t|}| jd	|||	}
|
jsdi nt|
j}| jjrrt|}t jj|| d
}t j|
jd|_| j| |S )az  Given a list of contents, returns a corresponding TokensInfo containing the

    list of tokens and list of token ids.

    This method is not supported by the Gemini Developer API.

    Args:
      model (str): The model to use.
      contents (list[shared.Content]): The content to compute tokens for.

    Usage:

    .. code-block:: python

      response = client.models.compute_tokens(
          model='gemini-2.0-flash',
          contents='What is your name?',
      )
      print(response)
      # tokens_info=[TokensInfo(role='user', token_ids=['1841', ...],
      # tokens=[b'What', b' is', b' your', b' name', b'?'])]
    r_  r  rU   {model}:computeTokensr  r`  r   Nra  rc  re  )r   _ComputeTokensParametersrh  ri  r   r[   rj  rk  r   rl  r   rm  r   rn  ro  rp  rt  ru  rv  r`   ComputeTokensResponserw  rx  ry  rf  r]   rs  r  r    r    r!   compute_tokens  sL   




zModels.compute_tokensr   rh  ri  rj  r   ri  c                C   sB  t j||||||d}| jjr%t| j|}|d}	|	r"d|	}
nd}
nt| j|}|d}	|	r8d|	}
nd}
|d}|rJ|
 dt| }
|	dd d}|j
dura|j
jdura|j
j}t|}t|}| jd|
||}|jsyi nt|j}| jjrt|}| jjst|}t jj|| d	}| j| |S )
z%Private method for generating videos.rT   r   rh  ri  rj  r   rU   {model}:predictLongRunningr  r`  r   Nra  rc  )r   _GenerateVideosParametersrh  ri  rq  rj  rk  rm  r   rl  r   rm  r   rn  ro  rp  rt  ru  rv  re  rc  GenerateVideosOperationrw  rx  rs  r{  rT   r   rh  ri  rj  r   r|  r}  r~  r  r  rm  r   r  r  r    r    r!   _generate_videos  s\   





zModels._generate_videosc                C   s  t |}t |}|r|jrt|jrtdt |r'| j	|||dS |rgd}t
|tjr:|jr9t|j}nt
|trK|dg }|rKt|}t||kr_dtt|}td| | j	|||dS t |}	td|	 d g }
t }d}|	dkr|d	7 }| j	|||d}t |}|sni|snf|jr|jd jr|jd jjsnUt ||}|snLtd
| d |	d	8 }	|	dkrtd |jd j}tjd|d}t|}|
s|
 | t
|t!r|"| |"| |
"| |
"| |	dkst #|r|dur|
|_$|S )a  Makes an API request to generate content using a model.

    For the `model` parameter, supported formats for Vertex AI API include:
    - The Gemini model ID, for example: 'gemini-2.0-flash'
    - The full resource name starts with 'projects/', for example:
      'projects/my-project-id/locations/us-central1/publishers/google/models/gemini-2.0-flash'
    - The partial resource name with 'publishers/', for example:
      'publishers/google/models/gemini-2.0-flash' or
    - `/` separated publisher and model name, for example:
      'google/gemini-2.0-flash'

    For the `model` parameter, supported formats for Gemini API include:
    - The Gemini model ID, for example: 'gemini-2.0-flash'
    - The model name starts with 'models/', for example:
      'models/gemini-2.0-flash'
    - For tuned models, the model name starts with 'tunedModels/',
      for example:
      'tunedModels/1234567890123456789'

    Some models support multimodal input and output.

    Built-in MCP support is an experimental feature.

    Usage:

    .. code-block:: python

      from google.genai import types
      from google import genai

      client = genai.Client(
          vertexai=True, project='my-project-id', location='us-central1'
      )

      response = client.models.generate_content(
        model='gemini-2.0-flash',
        contents='''What is a good name for a flower shop that specializes in
          selling bouquets of dried flowers?'''
      )
      print(response.text)
      # **Elegant & Classic:**
      # * The Dried Bloom
      # * Everlasting Florals
      # * Timeless Petals

      response = client.models.generate_content(
        model='gemini-2.0-flash',
        contents=[
          types.Part.from_text(text='What is shown in this image?'),
          types.Part.from_uri(file_uri='gs://generativeai-downloads/images/scones.jpg',
          mime_type='image/jpeg')
        ]
      )
      print(response.text)
      # The image shows a flat lay arrangement of freshly baked blueberry
      # scones.
    6MCP sessions are not supported in synchronous methods.r_  r   ru   , 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 in the tool list.&AFC is enabled with max remote calls: .r	   AFC remote call 	 is done.8Reached max remote calls for automatic function calling.userrk   rf   N)%r   "find_afc_incompatible_tool_indexesparse_config_for_mcp_usageru   r   has_mcp_session_usager   UnsupportedFunctionErrorshould_disable_afcr  
isinstancer   GenerateContentConfiglendictrj  joinmapstrloggerwarningget_max_remote_calls_afcinforr  get_function_mapr'  r6   rf   get_function_response_partsContentrW   rY   extendlistappendshould_append_afc_history"automatic_function_calling_history)r{  rT   rV   r   incompatible_tools_indexesparsed_configoriginal_tools_lengthru   indices_strremaining_remote_calls_afcr  r   ifunction_mapfunc_response_partsfunc_call_contentfunc_response_contentr    r    r!   generate_contentb  s   B















)
zModels.generate_contentc                c   s   t |}t |}|r|jrt|jrtdt |r-| j	|||dE dH  dS |rrd}t
|tjr@|jr?t|j}nt
|trQ|dg }|rQt|}t||kredtt|}td| | j	|||dE dH  dS t |}	td|	 d	 g }
d}d}d}|	dkr}|d
7 }| j	|||d}t |}|d
kr|D ]1}|st ||}|V  q|jr|jd jr|jd jjs nt ||}|st ||}|V  qn6|D ]}t |r|
|_t ||}|V  q|du s|jr|jd jr|jd jjsdS t ||}|sdS |sdS td| d |	d
8 }	|	dkr.td |durw|jdurw|jd j}tjd|d}t !|}|
sS|
"| t
|t#rh|durh|$| |$| |durr|
$| |
$| |	dksdS dS )a  Makes an API request to generate content using a model and yields the model's response in chunks.

    For the `model` parameter, supported formats for Vertex AI API include:
    - The Gemini model ID, for example: 'gemini-2.0-flash'
    - The full resource name starts with 'projects/', for example:
      'projects/my-project-id/locations/us-central1/publishers/google/models/gemini-2.0-flash'
    - The partial resource name with 'publishers/', for example:
      'publishers/google/models/gemini-2.0-flash' or
    - `/` separated publisher and model name, for example:
      'google/gemini-2.0-flash'

    For the `model` parameter, supported formats for Gemini API include:
    - The Gemini model ID, for example: 'gemini-2.0-flash'
    - The model name starts with 'models/', for example:
      'models/gemini-2.0-flash'
    - For tuned models, the model name starts with 'tunedModels/',
      for example:
      'tunedModels/1234567890123456789'

    Some models support multimodal input and output.

    Built-in MCP support is an experimental feature.

    Usage:

    .. code-block:: python

      from google.genai import types
      from google import genai

      client = genai.Client(
          vertexai=True, project='my-project-id', location='us-central1'
      )

      for chunk in client.models.generate_content_stream(
        model='gemini-2.0-flash',
        contents='''What is a good name for a flower shop that specializes in
          selling bouquets of dried flowers?'''
      ):
        print(chunk.text)
      # **Elegant & Classic:**
      # * The Dried Bloom
      # * Everlasting Florals
      # * Timeless Petals

      for chunk in client.models.generate_content_stream(
        model='gemini-2.0-flash',
        contents=[
          types.Part.from_text('What is shown in this image?'),
          types.Part.from_uri('gs://generativeai-downloads/images/scones.jpg',
          'image/jpeg')
        ]
      ):
        print(chunk.text)
      # The image shows a flat lay arrangement of freshly baked blueberry
      # scones.
    r  r_  Nr   ru   r  z_Tools at indices [%s] are not compatible with automatic function calling. AFC will be disabled.r  r  r	   r  r  r  r  r  )%r   r  r  ru   r   r  r   r  r  r  r  r   r  r  r  rj  r  r  r  r  r  r  r  r  append_chunk_contentsr'  r6   rf   r  r  r  r  rW   rY   r  r  r  )r{  rT   rV   r   r  r  r  ru   r  r  r  chunkr  r  r   r  r  r  r    r    r!   generate_content_stream  s   B




















zModels.generate_content_streamc          	      C   sh   | j |||d}d}g }|r|js|S |jD ]}|jr%|jjdkr%|j}q|| qtj||d}|S )ap  Generates images based on a text description and configuration.

    Args:
      model (str): The model to use.
      prompt (str): A text description of the images to generate.
      config (GenerateImagesConfig): Configuration for generation.

    Usage:

    .. code-block:: python

      response = client.models.generate_images(
        model='imagen-3.0-generate-002',
        prompt='Man with a dog',
        config=types.GenerateImagesConfig(
            number_of_images= 1,
            include_rai_reason= True,
        )
      )
      response.generated_images[0].image.show()
      # Shows a man with a dog.
    r  NPositive Promptr   rD  r  r   r  r  r  r   r  	r{  rT   r   r   api_responserD  r   generated_imager   r    r    r!   generate_images  s,   

zModels.generate_imagesc                C   s   | j ||||dS )aL  Edits an image based on a text description and configuration.

    Args:
      model (str): The model to use.
      prompt (str): A text description of the edit to apply to the image.
        reference_images (list[Union[RawReferenceImage, MaskReferenceImage,
        ControlReferenceImage, StyleReferenceImage, SubjectReferenceImage]): The
        reference images for editing.
      config (EditImageConfig): Configuration for editing.

    Usage:

    .. code-block:: python

      from google.genai.types import RawReferenceImage, MaskReferenceImage

      raw_ref_image = RawReferenceImage(
        reference_id=1,
        reference_image=types.Image.from_file(IMAGE_FILE_PATH),
      )

      mask_ref_image = MaskReferenceImage(
        reference_id=2,
        config=types.MaskReferenceConfig(
            mask_mode='MASK_MODE_FOREGROUND',
            mask_dilation=0.06,
        ),
      )
      response = client.models.edit_image(
        model='imagen-3.0-capability-001',
        prompt='man with dog',
        reference_images=[raw_ref_image, mask_ref_image],
        config=types.EditImageConfig(
            edit_mode= "EDIT_MODE_INPAINT_INSERTION",
            number_of_images= 1,
            include_rai_reason= True,
        )
      )
      response.generated_images[0].image.show()
      # Shows a man with a dog instead of a cat.
    r  r  r{  rT   r   r   r   r    r    r!   
edit_image  s   1zModels.edit_imagec                C   s   t j||||d |pi }t|t jr| }nt|}t j|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< | j||||dS )a  Makes an API request to upscale a provided image.

    Args:
      model (str): The model to use.
      image (Image): The input image for upscaling.
      upscale_factor (str): The factor to upscale the image (x2 or x4).
      config (UpscaleImageConfig): Configuration for upscaling.

    Usage:

    .. code-block:: python

      from google.genai.types import Image

      IMAGE_FILE_PATH="my-image.png"
      response=client.models.upscale_image(
          model='imagen-3.0-generate-001',
          image=types.Image.from_file(IMAGE_FILE_PATH),
          upscale_factor='x2',
      )
      response.generated_images[0].image.show()
      # Opens my-image.png which is upscaled by a factor of 2.
    r  rm  Nr   r   r   r   r   r   rK  rN  r   
rm  r   r   r   r   r   r   rK  rN  r   upscaler  r	   r   	r   UpscaleImageParametersr  UpscaleImageConfigrx  r  _UpscaleImageAPIConfigDictrj  r  r{  rT   rh  rQ  r   
config_dct
api_configr    r    r!   upscale_image0  sD   !








zModels.upscale_imagec          
      C   s6  |s|s|r|rt di }| jjs;|r;t|tjr| }nt|}|dr:|dr:tj|d|dd}nU| jjs|rt|tj	rR| }|di }nt|}t|dtjrk|dt }	|	 }|r|dr|drtj	|d|dtj|d|ddd	}| j
||||||d
S )  Generates videos based on an input (text, image, or video) and configuration.

    The following use cases are supported:
    1. Text to video generation.
    2a. Image to video generation (additional text prompt is optional).
    2b. Image to video generation with frame interpolation (specify last_frame
    in config).
    3. Video extension (additional text prompt is optional)

    Args:
      model: The model to use.
      prompt: The text prompt for generating the videos. Optional for image to
        video and video extension use cases. This argument is deprecated, please
        use source instead.
      image: The input image for generating the videos. Optional if prompt is
        provided. This argument is deprecated, please use source instead.
      video: The input video for video extension use cases. Optional if prompt
        or image is provided. This argument is deprecated, please use source
        instead.
      source: The input source for generating the videos (prompt, image, and/or
        video)
      config: Configuration for generation.

    Usage:

      ```
      operation = client.models.generate_videos(
          model="veo-2.0-generate-001",
          source=types.GenerateVideosSource(
              prompt="A neon hologram of a cat driving at top speed",
          ),
      )
      while not operation.done:
          time.sleep(10)
          operation = client.operations.get(operation)

      operation.result.generated_videos[0].video.uri
      ```
    MSource and prompt/image/video are mutually exclusive. Please only use source.rX  rZ  r-   rX  r-   ri  r   rh  r   rh  ri  r  r   rh  ri  r  r   Videorx  r  rj  GenerateVideosSourcer  
r{  rT   r   rh  ri  rj  r   	video_dct
source_dct	video_objr    r    r!   generate_videosz  sN   1
zModels.generate_videosc                C   sl   t j|djp
t  }|jdu rd|_| jjr*| }|js*|j}|r'|d nd|_t	d| j
| j
|d|S )a  Makes an API request to list the available models.

    If `query_base` is set to True in the config or not set (default), the
    API will return all available base models. If set to False, it will return
    all tuned models.

    Args:
      config (ListModelsConfigOrDict): Configuration for retrieving models.

    Usage:

    .. code-block:: python

      response=client.models.list(config={'page_size': 5})
      print(response.page)
      # [Model(name='projects/./locations/./models/123', display_name='my_model'

      response=client.models.list(config={'page_size': 5, 'query_base': True})
      print(response.page)
      # [Model(name='publishers/google/models/gemini-2.0-flash-exp' ...
    r]  NT&filter=labels.tune-type:*labels.tune-type:*r  )r   r  r   ListModelsConfigr  rh  ri  copyr  r   r  r{  r   filter_valuer    r    r!   r    s&   


zModels.list)C__name__
__module____qualname__r  r   r   ContentListUnionContentListUnionDictr   GenerateContentConfigOrDictrr  r  r   r  EmbedContentConfigOrDictr  r  GenerateImagesConfigOrDictr  r  r  _ReferenceImageAPIOrDictEditImageConfigOrDictr  r  ImageOrDict_UpscaleImageAPIConfigOrDictr  r  RecontextImageSourceOrDictRecontextImageConfigOrDictr  r  SegmentImageSourceOrDictSegmentImageConfigOrDictr  r  GetModelConfigOrDictr  rj  ListModelsConfigOrDictr  r  UpdateModelConfigOrDictr  DeleteModelConfigOrDictr  r  CountTokensConfigOrDictr  r  ComputeTokensConfigOrDictr  r  VideoOrDictGenerateVideosSourceOrDictGenerateVideosConfigOrDictr  r  r  r  r  r  UpscaleImageConfigOrDictr  r  r   r    r    r    r!   r\    s   
R
W
b
N
F
E
o
T
>
G
F
I
`
W	
Q
 '
 D
=
>
N	
`r\  c                   @   s<  e Zd Zdddedeejejf deej	 dej
fddZdddedeejejf deej	 deeej
  fd	d
Zdddedeejejf deej dejfddZdddededeej dejfddZdddededeej deej dejf
ddZdddedejdedeej dejf
ddZdddedejdeej dej fddZ!dddedej"deej# dej$fddZ%dddedeej& dej'fddZ(dddeej) dej*fddZ+dddedeej, dej'fd d!Z-dddedeej. dej/fd"d#Z0dddedeejejf deej1 dej2fd$d%Z3dddedeejejf deej4 dej5fd&d'Z6dddddd(dedee deej d)eej7 deej8 deej9 dej:fd*d+Z;dddedeejejf deej	 dej
fd,d-Z<dddedeejejf deej	 deej
 fd.d/Z=dddededeej deej dejf
d0d1Z>dddeej) de?ej' fd2d3Zdddededeej dejfd4d5Z@dddedejdedeejA dejf
d6d7ZBdddddd(dedee deej d)eej7 deej8 deej9 dej:fd8d9ZCdS ):AsyncModelsNr]  rT   rV   r   r   c                   s  t j|||d}| jjr#t| j|}|d}|r d|}nd}nt| j|}|d}|r6d|}nd}|d}|rH| dt| }|	dd  d }	|j
d ur_|j
jd ur_|j
j}	t|}t|}| jd|||	I d H }
|d urt|dd rt j|
d	}| j| |S |
jsi nt|
j}| jjrt|}| jjst|}t jj|| d
}t j|
jd|_| j| |S r^  )r   rg  rh  ri  r&  rj  rk  r%  r   rl  r   rm  r   rn  ro  async_requestrq  rr  rs  rt  ru  rv  r3  r0  rw  rx  ry  rf  r]   rz  r    r    r!   r    sj   







zAsyncModels._generate_contentc          
         s  t j|||d jjr#tj }|d}|r d|}nd}ntj }|d}|r6d|}nd}|d}|rH| dt| }|	dd  d } j
d ur_ j
jd ur_ j
j}t|}t|}|d urwt|dd rwtdjd	|||I d H  fd
d}	|	 S )Nr_  rU   r  r  r`  r   rb  r  ra  c                    s   2 z<3 d H W } | j si nt| j }jjrt|}jjs$t|}tjj	| 
 d}tj| jd|_j| |V  q6 d S )Nrc  re  )rt  ru  rv  rh  ri  r3  r0  r   rr  rw  rx  ry  rf  r]   rs  )r   r  r  r|  response_streamr{  r    r!   async_generator  s    z=AsyncModels._generate_content_stream.<locals>.async_generator)r   rg  rh  ri  r&  rj  rk  r%  r   rl  r   rm  r   rn  ro  rq  r   async_request_streamed)
r{  rT   rV   r   r}  r~  r  r  rm  rC  r    rA  r!   r  Y  s\   







z$AsyncModels._generate_content_streamc                   sT  t j|||d}| jjr#t| j|}|d}|r d|}nd}nt| j|}|d}|r6d|}nd}|d}|rH| dt| }|	dd d}	|j
dur_|j
jdur_|j
j}	t|}t|}| jd	|||	I dH }
|
jszi nt|
j}| jjrt|}| jjst|}t jj|| d
}t j|
jd|_| j| |S )aK  Calculates embeddings for the given contents. Only text is supported.

    Args:
      model (str): The model to use.
      contents (list[Content]): The contents to embed.
      config (EmbedContentConfig): Optional configuration for embeddings.

    Usage:

    .. code-block:: python

      embeddings = await client.aio.models.embed_content(
          model= 'text-embedding-004',
          contents=[
              'What is your name?',
              'What is your favorite color?',
          ],
          config={
              'output_dimensionality': 64
          },
      )
    r_  rU   r  r  r  r`  r   Nra  rc  re  )r   r  rh  ri  r   rj  rk  r   r   rl  r   rm  r   rn  ro  r@  rt  ru  rv  r   r   r  rw  rx  ry  rf  r]   rs  r  r    r    r!   r    s^   






zAsyncModels.embed_contentr   c                   T  t j|||d}| jjr#t| j|}|d}|r d|}nd}nt| j|}|d}|r6d|}nd}|d}|rH| dt| }|	dd d}	|j
dur_|j
jdur_|j
j}	t|}t|}| jd|||	I dH }
|
jszi nt|
j}| jjrt|}| jjst|}t jj|| d	}t j|
jd
|_| j| |S )z4Private method for generating images asynchronously.r  rU   r  r  r`  r   Nra  rc  re  )r   r  rh  ri  r@  rj  rk  r>  r   rl  r   rm  r   rn  ro  r@  rt  ru  rv  rI  rF  r  rw  rx  ry  rf  r]   rs  r  r    r    r!   r    s^   	






zAsyncModels._generate_imagesr   c                   "  t j||||d}| jjstdt| j|}|d}|r%d|}nd}|d}	|	r7| dt|	 }|	dd d}
|j
durN|j
jdurN|j
j}
t|}t|}| jd	|||
I dH }|jsii nt|j}| jjrwt|}t jj|| d
}t j|jd|_| j| |S )z3Private method for editing an image asynchronously.r  r  rU   r  r  r`  r   Nra  rc  re  )r   r  rh  ri  r   r   rj  rk  r   rl  r   rm  r   rn  ro  r@  rt  ru  rv  r   r  rw  rx  ry  rf  r]   rs  r  r    r    r!   r  U  P   






zAsyncModels._edit_imagerh  rQ  c                   rF  )z5Private method for upscaling an image asynchronously.r  r  rU   r  r  r`  r   Nra  rc  re  )r   r  rh  ri  r   rS  rj  rk  r   rl  r   rm  r   rn  ro  r@  rt  ru  rv  rT  r  rw  rx  ry  rf  r]   rs  r  r    r    r!   r    rG  zAsyncModels._upscale_imagerj  c                     t j|||d}| jjstdt| j|}|d}|r$d|}nd}|d}|r6| dt| }|	dd d}	|j
durM|j
jdurM|j
j}	t|}t|}| jd	|||	I dH }
|
jshi nt|
j}| jjrvt|}t jj|| d
}| j| |S r  )r   r  rh  ri  r   r  rj  rk  r   rl  r   rm  r   rn  ro  r@  rt  ru  rv  r  r  rw  rx  rs  r  r    r    r!   r    sH   7





zAsyncModels.recontext_imagec                   rH  )a  Segments an image, creating a mask of a specified area.

    Args:
      model (str): The model to use.
      source (SegmentImageSource): An object containing the source inputs
        (prompt, image, scribble_image) for image segmentation. The prompt is
        required for prompt mode and semantic mode, disallowed for other modes.
        scribble_image is required for the interactive mode, disallowed for
        other modes.
      config (SegmentImageConfig): Configuration for segmentation.

    Usage:

      ```
      response = client.models.segment_image(
          model="image-segmentation-001",
          source=types.SegmentImageSource(
              image=types.Image.from_file(IMAGE_FILE_PATH),
          ),
          config=types.SegmentImageConfig(
              mode=types.SegmentMode.foreground,
          ),
      )

      mask_image = response.generated_masks[0].mask
      ```
    r  r  rU   r  r  r`  r   Nra  rc  )r   r  rh  ri  r   r#  rj  rk  r   rl  r   rm  r   rn  ro  r@  rt  ru  rv  r%  r  rw  rx  rs  r  r    r    r!   r  ?  sH   #





zAsyncModels.segment_imagec                   sB  t j||d}| jjr"t| j|}|d}|rd|}nd}nt| j|}|d}|r5d|}nd}|d}|rG| dt| }|	dd  d }|j
d ur^|j
jd ur^|j
j}t|}t|}| jd|||I d H }	|	jsyi nt|	j}
| jjrt|
}
| jjst|
}
t jj|
| d}| j| |S r  )r   r  rh  ri  r  rj  rk  r  r   rl  r   rm  r   rn  ro  r@  rt  ru  rv  r  r  r  rw  rx  rs  r  r    r    r!   rj    sV   






zAsyncModels.getc                   s  t j|d}| jjr!t| j|}|d}|rd|}nd}nt| j|}|d}|r4d|}nd}|d}|rZ|drZ|d}| d| }|rY|dt	| 7 }n|re| dt	| }|d	d  d }|j
d ur||j
jd ur||j
j}t|}t|}| jd
|||I d H }	|	jsi nt|	j}
| jjrt|
}
| jjst|
}
t jj|
| d}t j|	jd|_| j| |S r  )r   r  rh  ri  r  rj  rk  r  rl  r   r   rm  r   rn  ro  r@  rt  ru  rv  r  r  r  rw  rx  ry  rf  r]   rs  r  r    r    r!   r    sf   







zAsyncModels._listc                   sB  t j||d}| jjr"t| j|}|d}|rd|}nd}nt| j|}|d}|r5d|}nd}|d}|rG| dt| }|	dd  d }|j
d ur^|j
jd ur^|j
j}t|}t|}| jd|||I d H }	|	jsyi nt|	j}
| jjrt|
}
| jjst|
}
t jj|
| d	}| j| |S r  )r   r  rh  ri  rJ  rj  rk  rH  r   rl  r   rm  r   rn  ro  r@  rt  ru  rv  r  r  r  rw  rx  rs  r  r    r    r!   r    sV   






zAsyncModels.updatec                   sR  t j||d}| jjr"t| j|}|d}|rd|}nd}nt| j|}|d}|r5d|}nd}|d}|rG| dt| }|	dd  d }|j
d ur^|j
jd ur^|j
j}t|}t|}| jd|||I d H }	|	jsyi nt|	j}
| jjrt|
}
| jjst|
}
t jj|
| d}t j|	jd	|_| j| |S r  )r   r  rh  ri  r   rj  rk  r   r   rl  r   rm  r   rn  ro  r@  rt  ru  rv  r   r   r  rw  rx  ry  rf  r]   rs  r  r    r    r!   r  [  s\   






zAsyncModels.deletec                   rE  )aB  Counts the number of tokens in the given content.

    Multimodal input is supported for Gemini models.

    Args:
      model (str): The model to use for counting tokens.
      contents (list[types.Content]): The content to count tokens for.
      config (CountTokensConfig): The configuration for counting tokens.

    Usage:

    .. code-block:: python

      response = await client.aio.models.count_tokens(
          model='gemini-2.0-flash',
          contents='What is your name?',
      )
      print(response)
      # total_tokens=5 cached_content_token_count=None
    r_  rU   r  r  r`  r   Nra  rc  re  )r   r  rh  ri  r   rj  rk  r   r   rl  r   rm  r   rn  ro  r@  rt  ru  rv  r   r   r  rw  rx  ry  rf  r]   rs  r  r    r    r!   r    s^   






zAsyncModels.count_tokensc                   s   t j|||d}| jjstdt| j|}|d}|r$d|}nd}|d}|r6| dt| }|	dd d}	|j
durM|j
jdurM|j
j}	t|}t|}| jd	|||	I dH }
|
jshi nt|
j}| jjrvt|}t jj|| d
}t j|
jd|_| j| |S )aF  Given a list of contents, returns a corresponding TokensInfo containing the

    list of tokens and list of token ids.


    Args:
      model (str): The model to use.
      contents (list[shared.Content]): The content to compute tokens for.

    Usage:

    .. code-block:: python

      response = await client.aio.models.compute_tokens(
          model='gemini-2.0-flash',
          contents='What is your name?',
      )
      print(response)
      # tokens_info=[TokensInfo(role='user', token_ids=['1841', ...],
      # tokens=[b'What', b' is', b' your', b' name', b'?'])]
    r_  r  rU   r  r  r`  r   Nra  rc  re  )r   r  rh  ri  r   r[   rj  rk  r   rl  r   rm  r   rn  ro  r@  rt  ru  rv  r`   r  rw  rx  ry  rf  r]   rs  r  r    r    r!   r    sN   





zAsyncModels.compute_tokensr  ri  c                   sJ  t j||||||d}| jjr&t| j|}|d}	|	r#d|	}
nd}
nt| j|}|d}	|	r9d|	}
nd}
|d}|rK|
 dt| }
|	dd d}|j
durb|j
jdurb|j
j}t|}t|}| jd|
||I dH }|js}i nt|j}| jjrt|}| jjst|}t jj|| d	}| j| |S )
z4Private method for generating videos asynchronously.r  rU   r  r  r`  r   Nra  rc  )r   r  rh  ri  rq  rj  rk  rm  r   rl  r   rm  r   rn  ro  r@  rt  ru  rv  re  rc  r  rw  rx  rs  r  r    r    r!   r  L  s^   






zAsyncModels._generate_videosc                   s  t |}t |I dH \}}t |r | j|||dI dH S |rcd}t|tjr3|jr2t	|j}nt|t
rD|dg }|rDt	|}t	||krXdtt|}	td|	 | j|||dI dH S t |}
td|
 d g }t }|
dkr| j|||dI dH }|
d	8 }
|
dkrtd
 t j||dd}|snV|snS|jr|jd jr|jd jjsnBt ||I dH }|sn6|jd j}tjd|d}t|}|s|| t|tr|| || || || |
dks{t |r|dur||_ |S )ad  Makes an API request to generate content using a model.

    Some models support multimodal input and output.

    Built-in MCP support is an experimental feature.

    Usage:

    .. code-block:: python

      from google.genai import types
      from google import genai

      client = genai.Client(
          vertexai=True, project='my-project-id', location='us-central1'
      )

      response = await client.aio.models.generate_content(
          model='gemini-2.0-flash',
          contents='User input: I like bagels. Answer:',
          config=types.GenerateContentConfig(
              system_instruction=
                [
                  'You are a helpful language translator.',
                  'Your mission is to translate text in English to French.'
                ]
          ),
      )
      print(response.text)
      # J'aime les bagels.
    Nr_  r   ru   r  r  r  r  r	   r  Tis_caller_method_asyncr  r  )!r   r  parse_config_for_mcp_sessionsr  r  r  r   r  ru   r  r  rj  r  r  r  r  r  r  r  rr  r  r'  r6   rf   !get_function_response_parts_asyncr  rW   rY   r  r  r  r  r  )r{  rT   rV   r   r  r  mcp_to_genai_tool_adaptersr  ru   r  r  r  r   r  r  r  r  r    r    r!   r    s   (












+
zAsyncModels.generate_contentc                   s  t |}t |I dH \} t |r,j|||dI dH fdd}||||S |r{d}t|tjr?|jr>t	|j}nt|t
rP|dg }|rPt	|}t	||krddtt|}	td|	 j|||dI dH fd	d}||||S  fd
d}
|
|||S )a2  Makes an API request to generate content using a model and yields the model's response in chunks.

    For the `model` parameter, supported formats for Vertex AI API include:
    - The Gemini model ID, for example: 'gemini-2.0-flash'
    - The full resource name starts with 'projects/', for example:
      'projects/my-project-id/locations/us-central1/publishers/google/models/gemini-2.0-flash'
    - The partial resource name with 'publishers/', for example:
      'publishers/google/models/gemini-2.0-flash' or
    - `/` separated publisher and model name, for example:
      'google/gemini-2.0-flash'

    For the `model` parameter, supported formats for Gemini API include:
    - The Gemini model ID, for example: 'gemini-2.0-flash'
    - The model name starts with 'models/', for example:
      'models/gemini-2.0-flash'
    - For tuned models, the model name starts with 'tunedModels/',
      for example:
      'tunedModels/1234567890123456789'

    Some models support multimodal input and output.

    Built-in MCP support is an experimental feature.

    Usage:

    .. code-block:: python

      from google.genai import types
      from google import genai

      client = genai.Client(
          vertexai=True, project='my-project-id', location='us-central1'
      )

      async for chunk in await client.aio.models.generate_content_stream(
        model='gemini-2.0-flash',
        contents='''What is a good name for a flower shop that specializes in
          selling bouquets of dried flowers?'''
      ):
        print(chunk.text)
      # **Elegant & Classic:**
      # * The Dried Bloom
      # * Everlasting Florals
      # * Timeless Petals

      async for chunk in await client.aio.models.generate_content_stream(
        model='gemini-2.0-flash',
        contents=[
          types.Part.from_text('What is shown in this image?'),
          types.Part.from_uri('gs://generativeai-downloads/images/scones.jpg',
          'image/jpeg')
        ]
      ):
        print(chunk.text)
      # The image shows a flat lay arrangement of freshly baked blueberry
      # scones.
    Nr_  c                        2 z	3 d H W }|V  q6 d S Nr    rT   rV   r   r  r   r    r!   base_async_generatorg     zAAsyncModels.generate_content_stream.<locals>.base_async_generatorr   ru   r  r  c                   rN  rO  r    rP  rQ  r    r!   rR    rS  c                   s<  t |}td| d g }d }d }d}|dkr|d7 }j| ||dI d H }|dkr8td| d |d8 }|dkrI|dkrItd t j| d	d
}	|dkr|2 z83 d H W }|	sit ||}|V  qW|jry|jd jry|jd jj	s{ nt 
||	I d H }|st ||}|V  qW6 n:|2 z3 d H W }t |r||_t ||}|V  q6 |d u s|jr|jd jr|jd jj	sd S t 
||	I d H }|	sd S |sd S |d u rq|jd j}
tjd|d}t|}|s|| t|tr|
d ur||
 || |
d ur||
 || |dksd S d S )Nr  r  r   r	   r_  r  r  r  TrI  r  r  )r   r  r  r  r  r  r  r'  r6   rf   rL  r  r  r   r  rW   rY   r  r  r  r  )rT   rV   r   r  r  r  r  r  r   r  r  r  )rM  r{  r    r!   rC    s   




	







z<AsyncModels.generate_content_stream.<locals>.async_generator)r   r  rK  r  r  r  r   r  ru   r  r  rj  r  r  r  r  r  )r{  rT   rV   r   r  r  rR  r  ru   r  rC  r    )rM  r   r{  r!   r    sD   C


az#AsyncModels.generate_content_streamc                   s   | j ||||dI dH S )aV  Edits an image based on a text description and configuration.

    Args:
      model (str): The model to use.
      prompt (str): A text description of the edit to apply to the image.
        reference_images (list[Union[RawReferenceImage, MaskReferenceImage,
        ControlReferenceImage, StyleReferenceImage, SubjectReferenceImage]): The
        reference images for editing.
      config (EditImageConfig): Configuration for editing.

    Usage:

    .. code-block:: python

      from google.genai.types import RawReferenceImage, MaskReferenceImage

      raw_ref_image = RawReferenceImage(
        reference_id=1,
        reference_image=types.Image.from_file(IMAGE_FILE_PATH),
      )

      mask_ref_image = MaskReferenceImage(
        reference_id=2,
        config=types.MaskReferenceConfig(
            mask_mode='MASK_MODE_FOREGROUND',
            mask_dilation=0.06,
        ),
      )
      response = await client.aio.models.edit_image(
        model='imagen-3.0-capability-001',
        prompt='man with dog',
        reference_images=[raw_ref_image, mask_ref_image],
        config=types.EditImageConfig(
            edit_mode= "EDIT_MODE_INPAINT_INSERTION",
            number_of_images= 1,
            include_rai_reason= True,
        )
      )
      response.generated_images[0].image.show()
      # Shows a man with a dog instead of a cat.
    r  Nr  r  r    r    r!   r    s   1zAsyncModels.edit_imagec                   st   t j|djpt  }|jdu rd|_| jjr+| }|js+|j}|r(|d nd|_t	d| j
| j
|dI dH |S )a  Makes an API request to list the available models.

    If `query_base` is set to True in the config or not set (default), the
    API will return all available base models. If set to False, it will return
    all tuned models.

    Args:
      config (ListModelsConfigOrDict): Configuration for retrieving models.

    Usage:

    .. code-block:: python

      response = await client.aio.models.list(config={'page_size': 5})
      print(response.page)
      # [Model(name='projects/./locations/./models/123', display_name='my_model'

      response = await client.aio.models.list(
          config={'page_size': 5, 'query_base': True}
        )
      print(response.page)
      # [Model(name='publishers/google/models/gemini-2.0-flash-exp' ...
    r]  NTr  r   r  )r   r  r   r!  r  rh  ri  r"  r  r   r  r#  r    r    r!   r  $  s(   

zAsyncModels.listc          	         sp   | j |||dI dH }d}g }|r|js|S |jD ]}|jr)|jjdkr)|j}q|| qtj||d}|S )az  Generates images based on a text description and configuration.

    Args:
      model (str): The model to use.
      prompt (str): A text description of the images to generate.
      config (GenerateImagesConfig): Configuration for generation.

    Usage:

    .. code-block:: python

      response = await client.aio.models.generate_images(
        model='imagen-3.0-generate-002',
        prompt='Man with a dog',
        config=types.GenerateImagesConfig(
            number_of_images= 1,
            include_rai_reason= True,
        )
      )
      response.generated_images[0].image.show()
      # Shows a man with a dog.
    r  Nr  r   r  r  r    r    r!   r  X  s.   

zAsyncModels.generate_imagesc                   s   t j||||d |pi }t|t jr| }nt|}t j|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< | j||||dI dH S )a  Makes an API request to upscale a provided image.

    Args:
      model (str): The model to use.
      image (Image): The input image for upscaling.
      upscale_factor (str): The factor to upscale the image (x2 or x4).
      config (UpscaleImageConfig): Configuration for upscaling.

    Usage:

    .. code-block:: python

      from google.genai.types import Image

      IMAGE_FILE_PATH="my-image.png"
      response = await client.aio.models.upscale_image(
          model='imagen-3.0-generate-001',
          image=types.Image.from_file(IMAGE_FILE_PATH),
          upscale_factor='x2',
      )
      response.generated_images[0].image.show()
      # Opens my-image.png which is upscaled by a factor of 2.
    r  rm  Nr   r   r   r   r   r   rK  rN  r   r	  r
  r  r	   r   r  r  r    r    r!   r    sF   !








zAsyncModels.upscale_imagec          
         s>  |s|s|r|rt di }| jjs<|r<t|tjr | }nt|}|dr;|dr;tj|d|dd}nU| jjs|rt|tj	rS| }|di }nt|}t|dtjrl|dt }	|	 }|r|dr|drtj	|d|dtj|d|ddd	}| j
||||||d
I dH S )r  r  rX  rZ  r-   r  ri  r   rh  r  r  Nr  r  r    r    r!   r    sP   1
zAsyncModels.generate_videos)Dr%  r&  r'  r  r   r   r(  r)  r   r*  rr  r  r   r   r  r+  r  r  r,  r  r  r  r-  r.  r  r  r/  r0  r  r  r1  r2  r  r  r3  r4  r  r  r5  r  rj  r6  r  r  r7  r  r8  r  r  r9  r  r  r:  r  r  r;  r<  r=  r  r  r  r  r  r   r  r>  r  r  r    r    r    r!   r?  
  s   
R
\
b
N
F
E
o
W
@
I
F
I
`
V	
Q
 
 Z
;
9
=
N	r?  rO  )ru  loggingtypingr   r   r   r   r   r   urllib.parser    r
   r   r  r   r   r   r   rW   r   r   rh  r   r   r0   r   r1   pagersr   r   	getLoggerr  r"   r%   r'   r  r  objectr4   rO   rN   r[   r`   rb   re   rm   rs   rw   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r$  r%  r&  r0  r3  r9  r;  r>  r@  rF  rI  rW  r]  rc  re  rm  rq  rb  rd  rl  rp  r  rB  r   ru  r|  r|   r  r  r  r  r  r  rV  r[  r  r  r  r  r  r  r  r  r  rh   r  r  r  r  r  r   rE  rH  r  r  r!  r#  r%  r"  r#  r  ry   r  rE  rG  rH  rJ  rP  rS  rT  r\  rS  rZ  r  r  rk  ro  
BaseModuler\  r?  r    r    r    r!   <module>   s   

	



:

















&

 















{

"



"

+

'

!









(

 "

 

&

"

%

%

r

{





"

"

d

v

(

)

*

)

"

"









"





z

















#

#











;

8

<



Q





 

7









.









:

7











Q

#















              9