From 1723757cb5e866aeef9523ab344d28c988b160ba Mon Sep 17 00:00:00 2001 From: Ayush Agrawal Date: Tue, 11 Nov 2025 10:07:30 -0800 Subject: [PATCH] feat: Support multimodal embedding for Gemini Embedding 2.0 and MaaS models in Models.embed_content() (Vertex AI API) PiperOrigin-RevId: 830964972 --- google/genai/_transformers.py | 9 + google/genai/models.py | 1024 +++++++++++++---- .../genai/tests/models/test_embed_content.py | 134 ++- .../genai/tests/shared/models/test_embed.py | 2 +- google/genai/tunings.py | 72 +- google/genai/types.py | 80 +- 6 files changed, 1032 insertions(+), 289 deletions(-) diff --git a/google/genai/_transformers.py b/google/genai/_transformers.py index 7c295cc5a..bb1d1521e 100644 --- a/google/genai/_transformers.py +++ b/google/genai/_transformers.py @@ -1368,3 +1368,12 @@ def t_metrics( ) metrics_payload.append(metric_payload_item) return metrics_payload + + +def t_is_vertex_embed_content_model(model: str) -> bool: + return ( + # Gemini Embeddings except gemini-embedding-001. + 'gemini' in model and model != 'gemini-embedding-001' + # Open-source MaaS embedding models. + or 'maas' in model + ) diff --git a/google/genai/models.py b/google/genai/models.py index cf14266d2..83d386dc4 100644 --- a/google/genai/models.py +++ b/google/genai/models.py @@ -57,6 +57,7 @@ def _VideoGenerationReferenceType_to_mldev_enum_validate( def _Blob_to_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['data']) is not None: @@ -74,6 +75,7 @@ def _Blob_to_mldev( def _Candidate_from_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['content']) is not None: @@ -84,7 +86,7 @@ def _Candidate_from_mldev( to_object, ['citation_metadata'], _CitationMetadata_from_mldev( - getv(from_object, ['citationMetadata']), to_object + getv(from_object, ['citationMetadata']), to_object, root_object ), ) @@ -130,6 +132,7 @@ def _Candidate_from_mldev( def _CitationMetadata_from_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['citationSources']) is not None: @@ -146,6 +149,7 @@ def _ComputeTokensParameters_to_vertex( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['model']) is not None: @@ -168,6 +172,7 @@ def _ComputeTokensParameters_to_vertex( def _ComputeTokensResponse_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['sdkHttpResponse']) is not None: @@ -188,6 +193,7 @@ def _ComputeTokensResponse_from_vertex( def _ContentEmbeddingStatistics_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['truncated']) is not None: @@ -202,6 +208,7 @@ def _ContentEmbeddingStatistics_from_vertex( def _ContentEmbedding_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['values']) is not None: @@ -212,7 +219,7 @@ def _ContentEmbedding_from_vertex( to_object, ['statistics'], _ContentEmbeddingStatistics_from_vertex( - getv(from_object, ['statistics']), to_object + getv(from_object, ['statistics']), to_object, root_object ), ) @@ -222,6 +229,7 @@ def _ContentEmbedding_from_vertex( def _Content_to_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['parts']) is not None: @@ -229,7 +237,7 @@ def _Content_to_mldev( to_object, ['parts'], [ - _Part_to_mldev(item, to_object) + _Part_to_mldev(item, to_object, root_object) for item in getv(from_object, ['parts']) ], ) @@ -243,6 +251,7 @@ def _Content_to_mldev( def _ControlReferenceConfig_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['control_type']) is not None: @@ -261,6 +270,7 @@ def _ControlReferenceConfig_to_vertex( def _CountTokensConfig_to_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} @@ -283,6 +293,7 @@ def _CountTokensConfig_to_mldev( def _CountTokensConfig_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} @@ -298,7 +309,7 @@ def _CountTokensConfig_to_vertex( parent_object, ['tools'], [ - _Tool_to_vertex(item, to_object) + _Tool_to_vertex(item, to_object, root_object) for item in getv(from_object, ['tools']) ], ) @@ -308,7 +319,7 @@ def _CountTokensConfig_to_vertex( parent_object, ['generationConfig'], _GenerationConfig_to_vertex( - getv(from_object, ['generation_config']), to_object + getv(from_object, ['generation_config']), to_object, root_object ), ) @@ -319,6 +330,7 @@ def _CountTokensParameters_to_mldev( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['model']) is not None: @@ -333,13 +345,15 @@ def _CountTokensParameters_to_mldev( to_object, ['contents'], [ - _Content_to_mldev(item, to_object) + _Content_to_mldev(item, to_object, root_object) for item in t.t_contents(getv(from_object, ['contents'])) ], ) if getv(from_object, ['config']) is not None: - _CountTokensConfig_to_mldev(getv(from_object, ['config']), to_object) + _CountTokensConfig_to_mldev( + getv(from_object, ['config']), to_object, root_object + ) return to_object @@ -348,6 +362,7 @@ def _CountTokensParameters_to_vertex( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['model']) is not None: @@ -365,7 +380,9 @@ def _CountTokensParameters_to_vertex( ) if getv(from_object, ['config']) is not None: - _CountTokensConfig_to_vertex(getv(from_object, ['config']), to_object) + _CountTokensConfig_to_vertex( + getv(from_object, ['config']), to_object, root_object + ) return to_object @@ -373,6 +390,7 @@ def _CountTokensParameters_to_vertex( def _CountTokensResponse_from_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['sdkHttpResponse']) is not None: @@ -396,6 +414,7 @@ def _CountTokensResponse_from_mldev( def _CountTokensResponse_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['sdkHttpResponse']) is not None: @@ -413,6 +432,7 @@ def _DeleteModelParameters_to_mldev( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['model']) is not None: @@ -429,6 +449,7 @@ def _DeleteModelParameters_to_vertex( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['model']) is not None: @@ -444,6 +465,7 @@ def _DeleteModelParameters_to_vertex( def _DeleteModelResponse_from_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['sdkHttpResponse']) is not None: @@ -457,6 +479,7 @@ def _DeleteModelResponse_from_mldev( def _DeleteModelResponse_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['sdkHttpResponse']) is not None: @@ -470,6 +493,7 @@ def _DeleteModelResponse_from_vertex( def _EditImageConfig_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} @@ -591,6 +615,7 @@ def _EditImageParameters_to_vertex( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['model']) is not None: @@ -608,13 +633,15 @@ def _EditImageParameters_to_vertex( to_object, ['instances[0]', 'referenceImages'], [ - _ReferenceImageAPI_to_vertex(item, to_object) + _ReferenceImageAPI_to_vertex(item, to_object, root_object) for item in getv(from_object, ['reference_images']) ], ) if getv(from_object, ['config']) is not None: - _EditImageConfig_to_vertex(getv(from_object, ['config']), to_object) + _EditImageConfig_to_vertex( + getv(from_object, ['config']), to_object, root_object + ) return to_object @@ -622,6 +649,7 @@ def _EditImageParameters_to_vertex( def _EditImageResponse_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['sdkHttpResponse']) is not None: @@ -634,7 +662,7 @@ def _EditImageResponse_from_vertex( to_object, ['generated_images'], [ - _GeneratedImage_from_vertex(item, to_object) + _GeneratedImage_from_vertex(item, to_object, root_object) for item in getv(from_object, ['predictions']) ], ) @@ -645,6 +673,7 @@ def _EditImageResponse_from_vertex( def _EmbedContentConfig_to_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} @@ -677,47 +706,89 @@ def _EmbedContentConfig_to_mldev( def _EmbedContentConfig_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} - if getv(from_object, ['task_type']) is not None: - setv( - parent_object, - ['instances[]', 'task_type'], - getv(from_object, ['task_type']), - ) - - if getv(from_object, ['title']) is not None: - setv(parent_object, ['instances[]', 'title'], getv(from_object, ['title'])) - - if getv(from_object, ['output_dimensionality']) is not None: - setv( - parent_object, - ['parameters', 'outputDimensionality'], - getv(from_object, ['output_dimensionality']), - ) + discriminator = getv(root_object, ['embedding_api_type']) + if discriminator is None: + discriminator = 'PREDICT' + if discriminator == 'PREDICT': + if getv(from_object, ['task_type']) is not None: + setv( + parent_object, + ['instances[]', 'task_type'], + getv(from_object, ['task_type']), + ) + elif discriminator == 'EMBED_CONTENT': + if getv(from_object, ['task_type']) is not None: + setv(parent_object, ['taskType'], getv(from_object, ['task_type'])) + + discriminator = getv(root_object, ['embedding_api_type']) + if discriminator is None: + discriminator = 'PREDICT' + if discriminator == 'PREDICT': + if getv(from_object, ['title']) is not None: + setv( + parent_object, ['instances[]', 'title'], getv(from_object, ['title']) + ) + elif discriminator == 'EMBED_CONTENT': + if getv(from_object, ['title']) is not None: + setv(parent_object, ['title'], getv(from_object, ['title'])) + + discriminator = getv(root_object, ['embedding_api_type']) + if discriminator is None: + discriminator = 'PREDICT' + if discriminator == 'PREDICT': + if getv(from_object, ['output_dimensionality']) is not None: + setv( + parent_object, + ['parameters', 'outputDimensionality'], + getv(from_object, ['output_dimensionality']), + ) + elif discriminator == 'EMBED_CONTENT': + if getv(from_object, ['output_dimensionality']) is not None: + setv( + parent_object, + ['outputDimensionality'], + getv(from_object, ['output_dimensionality']), + ) - if getv(from_object, ['mime_type']) is not None: - setv( - parent_object, - ['instances[]', 'mimeType'], - getv(from_object, ['mime_type']), - ) + discriminator = getv(root_object, ['embedding_api_type']) + if discriminator is None: + discriminator = 'PREDICT' + if discriminator == 'PREDICT': + if getv(from_object, ['mime_type']) is not None: + setv( + parent_object, + ['instances[]', 'mimeType'], + getv(from_object, ['mime_type']), + ) - if getv(from_object, ['auto_truncate']) is not None: - setv( - parent_object, - ['parameters', 'autoTruncate'], - getv(from_object, ['auto_truncate']), - ) + discriminator = getv(root_object, ['embedding_api_type']) + if discriminator is None: + discriminator = 'PREDICT' + if discriminator == 'PREDICT': + if getv(from_object, ['auto_truncate']) is not None: + setv( + parent_object, + ['parameters', 'autoTruncate'], + getv(from_object, ['auto_truncate']), + ) + elif discriminator == 'EMBED_CONTENT': + if getv(from_object, ['auto_truncate']) is not None: + setv( + parent_object, ['autoTruncate'], getv(from_object, ['auto_truncate']) + ) return to_object -def _EmbedContentParameters_to_mldev( +def _EmbedContentParametersPrivate_to_mldev( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['model']) is not None: @@ -739,8 +810,15 @@ def _EmbedContentParameters_to_mldev( ], ) + if getv(from_object, ['content']) is not None: + _Content_to_mldev( + t.t_content(getv(from_object, ['content'])), to_object, root_object + ) + if getv(from_object, ['config']) is not None: - _EmbedContentConfig_to_mldev(getv(from_object, ['config']), to_object) + _EmbedContentConfig_to_mldev( + getv(from_object, ['config']), to_object, root_object + ) setv( to_object, @@ -750,10 +828,11 @@ def _EmbedContentParameters_to_mldev( return to_object -def _EmbedContentParameters_to_vertex( +def _EmbedContentParametersPrivate_to_vertex( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['model']) is not None: @@ -763,20 +842,33 @@ def _EmbedContentParameters_to_vertex( t.t_model(api_client, getv(from_object, ['model'])), ) - if getv(from_object, ['contents']) is not None: - setv( - to_object, - ['instances[]', 'content'], - [ - item - for item in t.t_contents_for_embed( - api_client, getv(from_object, ['contents']) - ) - ], - ) + discriminator = getv(root_object, ['embedding_api_type']) + if discriminator is None: + discriminator = 'PREDICT' + if discriminator == 'PREDICT': + if getv(from_object, ['contents']) is not None: + setv( + to_object, + ['instances[]', 'content'], + [ + item + for item in t.t_contents_for_embed( + api_client, getv(from_object, ['contents']) + ) + ], + ) + + discriminator = getv(root_object, ['embedding_api_type']) + if discriminator is None: + discriminator = 'PREDICT' + if discriminator == 'EMBED_CONTENT': + if getv(from_object, ['content']) is not None: + setv(to_object, ['content'], t.t_content(getv(from_object, ['content']))) if getv(from_object, ['config']) is not None: - _EmbedContentConfig_to_vertex(getv(from_object, ['config']), to_object) + _EmbedContentConfig_to_vertex( + getv(from_object, ['config']), to_object, root_object + ) return to_object @@ -784,6 +876,7 @@ def _EmbedContentParameters_to_vertex( def _EmbedContentResponse_from_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['sdkHttpResponse']) is not None: @@ -807,6 +900,7 @@ def _EmbedContentResponse_from_mldev( def _EmbedContentResponse_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['sdkHttpResponse']) is not None: @@ -819,7 +913,7 @@ def _EmbedContentResponse_from_vertex( to_object, ['embeddings'], [ - _ContentEmbedding_from_vertex(item, to_object) + _ContentEmbedding_from_vertex(item, to_object, root_object) for item in getv(from_object, ['predictions[]', 'embeddings']) ], ) @@ -827,12 +921,25 @@ def _EmbedContentResponse_from_vertex( if getv(from_object, ['metadata']) is not None: setv(to_object, ['metadata'], getv(from_object, ['metadata'])) + if getv(root_object, ['embedding_api_type']) == 'EMBED_CONTENT': + embedding = getv(from_object, ['embedding']) + usage_metadata = getv(from_object, ['usageMetadata']) + truncated = getv(from_object, ['truncated']) + if embedding: + stats = {} + if usage_metadata and usage_metadata.get('promptTokenCount'): + stats['token_count'] = usage_metadata['promptTokenCount'] + if truncated: + stats['truncated'] = truncated + embedding['statistics'] = stats + setv(to_object, ['embeddings'], [embedding]) return to_object def _Endpoint_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['endpoint']) is not None: @@ -849,6 +956,7 @@ def _Endpoint_from_vertex( def _FileData_to_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['display_name']) is not None: @@ -866,6 +974,7 @@ def _FileData_to_mldev( def _FunctionCall_to_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['id']) is not None: @@ -889,6 +998,7 @@ def _FunctionCall_to_mldev( def _FunctionCallingConfig_to_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['mode']) is not None: @@ -913,6 +1023,7 @@ def _FunctionCallingConfig_to_mldev( def _FunctionDeclaration_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['behavior']) is not None: @@ -951,6 +1062,7 @@ def _GenerateContentConfig_to_mldev( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} @@ -959,7 +1071,9 @@ def _GenerateContentConfig_to_mldev( parent_object, ['systemInstruction'], _Content_to_mldev( - t.t_content(getv(from_object, ['system_instruction'])), to_object + t.t_content(getv(from_object, ['system_instruction'])), + to_object, + root_object, ), ) @@ -1042,7 +1156,7 @@ def _GenerateContentConfig_to_mldev( parent_object, ['safetySettings'], [ - _SafetySetting_to_mldev(item, to_object) + _SafetySetting_to_mldev(item, to_object, root_object) for item in getv(from_object, ['safety_settings']) ], ) @@ -1052,7 +1166,7 @@ def _GenerateContentConfig_to_mldev( parent_object, ['tools'], [ - _Tool_to_mldev(t.t_tool(api_client, item), to_object) + _Tool_to_mldev(t.t_tool(api_client, item), to_object, root_object) for item in t.t_tools(api_client, getv(from_object, ['tools'])) ], ) @@ -1061,7 +1175,9 @@ def _GenerateContentConfig_to_mldev( setv( parent_object, ['toolConfig'], - _ToolConfig_to_mldev(getv(from_object, ['tool_config']), to_object), + _ToolConfig_to_mldev( + getv(from_object, ['tool_config']), to_object, root_object + ), ) if getv(from_object, ['labels']) is not None: @@ -1107,7 +1223,9 @@ def _GenerateContentConfig_to_mldev( setv( to_object, ['imageConfig'], - _ImageConfig_to_mldev(getv(from_object, ['image_config']), to_object), + _ImageConfig_to_mldev( + getv(from_object, ['image_config']), to_object, root_object + ), ) if getv(from_object, ['enable_enhanced_civic_answers']) is not None: @@ -1124,6 +1242,7 @@ def _GenerateContentConfig_to_vertex( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} @@ -1222,7 +1341,7 @@ def _GenerateContentConfig_to_vertex( parent_object, ['tools'], [ - _Tool_to_vertex(t.t_tool(api_client, item), to_object) + _Tool_to_vertex(t.t_tool(api_client, item), to_object, root_object) for item in t.t_tools(api_client, getv(from_object, ['tools'])) ], ) @@ -1259,7 +1378,9 @@ def _GenerateContentConfig_to_vertex( to_object, ['speechConfig'], _SpeechConfig_to_vertex( - t.t_speech_config(getv(from_object, ['speech_config'])), to_object + t.t_speech_config(getv(from_object, ['speech_config'])), + to_object, + root_object, ), ) @@ -1273,7 +1394,9 @@ def _GenerateContentConfig_to_vertex( setv( to_object, ['imageConfig'], - _ImageConfig_to_vertex(getv(from_object, ['image_config']), to_object), + _ImageConfig_to_vertex( + getv(from_object, ['image_config']), to_object, root_object + ), ) if getv(from_object, ['enable_enhanced_civic_answers']) is not None: @@ -1288,6 +1411,7 @@ def _GenerateContentParameters_to_mldev( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['model']) is not None: @@ -1302,7 +1426,7 @@ def _GenerateContentParameters_to_mldev( to_object, ['contents'], [ - _Content_to_mldev(item, to_object) + _Content_to_mldev(item, to_object, root_object) for item in t.t_contents(getv(from_object, ['contents'])) ], ) @@ -1312,7 +1436,7 @@ def _GenerateContentParameters_to_mldev( to_object, ['generationConfig'], _GenerateContentConfig_to_mldev( - api_client, getv(from_object, ['config']), to_object + api_client, getv(from_object, ['config']), to_object, root_object ), ) @@ -1323,6 +1447,7 @@ def _GenerateContentParameters_to_vertex( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['model']) is not None: @@ -1344,7 +1469,7 @@ def _GenerateContentParameters_to_vertex( to_object, ['generationConfig'], _GenerateContentConfig_to_vertex( - api_client, getv(from_object, ['config']), to_object + api_client, getv(from_object, ['config']), to_object, root_object ), ) @@ -1354,6 +1479,7 @@ def _GenerateContentParameters_to_vertex( def _GenerateContentResponse_from_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['sdkHttpResponse']) is not None: @@ -1366,7 +1492,7 @@ def _GenerateContentResponse_from_mldev( to_object, ['candidates'], [ - _Candidate_from_mldev(item, to_object) + _Candidate_from_mldev(item, to_object, root_object) for item in getv(from_object, ['candidates']) ], ) @@ -1389,6 +1515,7 @@ def _GenerateContentResponse_from_mldev( def _GenerateContentResponse_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['sdkHttpResponse']) is not None: @@ -1424,6 +1551,7 @@ def _GenerateContentResponse_from_vertex( def _GenerateImagesConfig_to_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} @@ -1536,6 +1664,7 @@ def _GenerateImagesConfig_to_mldev( def _GenerateImagesConfig_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} @@ -1657,6 +1786,7 @@ def _GenerateImagesParameters_to_mldev( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['model']) is not None: @@ -1670,7 +1800,9 @@ def _GenerateImagesParameters_to_mldev( setv(to_object, ['instances[0]', 'prompt'], getv(from_object, ['prompt'])) if getv(from_object, ['config']) is not None: - _GenerateImagesConfig_to_mldev(getv(from_object, ['config']), to_object) + _GenerateImagesConfig_to_mldev( + getv(from_object, ['config']), to_object, root_object + ) return to_object @@ -1679,6 +1811,7 @@ def _GenerateImagesParameters_to_vertex( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['model']) is not None: @@ -1692,7 +1825,9 @@ def _GenerateImagesParameters_to_vertex( setv(to_object, ['instances[0]', 'prompt'], getv(from_object, ['prompt'])) if getv(from_object, ['config']) is not None: - _GenerateImagesConfig_to_vertex(getv(from_object, ['config']), to_object) + _GenerateImagesConfig_to_vertex( + getv(from_object, ['config']), to_object, root_object + ) return to_object @@ -1700,6 +1835,7 @@ def _GenerateImagesParameters_to_vertex( def _GenerateImagesResponse_from_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['sdkHttpResponse']) is not None: @@ -1712,7 +1848,7 @@ def _GenerateImagesResponse_from_mldev( to_object, ['generated_images'], [ - _GeneratedImage_from_mldev(item, to_object) + _GeneratedImage_from_mldev(item, to_object, root_object) for item in getv(from_object, ['predictions']) ], ) @@ -1722,7 +1858,9 @@ def _GenerateImagesResponse_from_mldev( to_object, ['positive_prompt_safety_attributes'], _SafetyAttributes_from_mldev( - getv(from_object, ['positivePromptSafetyAttributes']), to_object + getv(from_object, ['positivePromptSafetyAttributes']), + to_object, + root_object, ), ) @@ -1732,6 +1870,7 @@ def _GenerateImagesResponse_from_mldev( def _GenerateImagesResponse_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['sdkHttpResponse']) is not None: @@ -1744,7 +1883,7 @@ def _GenerateImagesResponse_from_vertex( to_object, ['generated_images'], [ - _GeneratedImage_from_vertex(item, to_object) + _GeneratedImage_from_vertex(item, to_object, root_object) for item in getv(from_object, ['predictions']) ], ) @@ -1754,7 +1893,9 @@ def _GenerateImagesResponse_from_vertex( to_object, ['positive_prompt_safety_attributes'], _SafetyAttributes_from_vertex( - getv(from_object, ['positivePromptSafetyAttributes']), to_object + getv(from_object, ['positivePromptSafetyAttributes']), + to_object, + root_object, ), ) @@ -1764,6 +1905,7 @@ def _GenerateImagesResponse_from_vertex( def _GenerateVideosConfig_to_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} @@ -1835,7 +1977,9 @@ def _GenerateVideosConfig_to_mldev( setv( parent_object, ['instances[0]', 'lastFrame'], - _Image_to_mldev(getv(from_object, ['last_frame']), to_object), + _Image_to_mldev( + getv(from_object, ['last_frame']), to_object, root_object + ), ) if getv(from_object, ['reference_images']) is not None: @@ -1843,7 +1987,9 @@ def _GenerateVideosConfig_to_mldev( parent_object, ['instances[0]', 'referenceImages'], [ - _VideoGenerationReferenceImage_to_mldev(item, to_object) + _VideoGenerationReferenceImage_to_mldev( + item, to_object, root_object + ) for item in getv(from_object, ['reference_images']) ], ) @@ -1862,6 +2008,7 @@ def _GenerateVideosConfig_to_mldev( def _GenerateVideosConfig_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} @@ -1945,7 +2092,9 @@ def _GenerateVideosConfig_to_vertex( setv( parent_object, ['instances[0]', 'lastFrame'], - _Image_to_vertex(getv(from_object, ['last_frame']), to_object), + _Image_to_vertex( + getv(from_object, ['last_frame']), to_object, root_object + ), ) if getv(from_object, ['reference_images']) is not None: @@ -1953,7 +2102,9 @@ def _GenerateVideosConfig_to_vertex( parent_object, ['instances[0]', 'referenceImages'], [ - _VideoGenerationReferenceImage_to_vertex(item, to_object) + _VideoGenerationReferenceImage_to_vertex( + item, to_object, root_object + ) for item in getv(from_object, ['reference_images']) ], ) @@ -1962,7 +2113,9 @@ def _GenerateVideosConfig_to_vertex( setv( parent_object, ['instances[0]', 'mask'], - _VideoGenerationMask_to_vertex(getv(from_object, ['mask']), to_object), + _VideoGenerationMask_to_vertex( + getv(from_object, ['mask']), to_object, root_object + ), ) if getv(from_object, ['compression_quality']) is not None: @@ -1978,6 +2131,7 @@ def _GenerateVideosConfig_to_vertex( def _GenerateVideosOperation_from_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['name']) is not None: @@ -1997,7 +2151,9 @@ def _GenerateVideosOperation_from_mldev( to_object, ['response'], _GenerateVideosResponse_from_mldev( - getv(from_object, ['response', 'generateVideoResponse']), to_object + getv(from_object, ['response', 'generateVideoResponse']), + to_object, + root_object, ), ) @@ -2006,7 +2162,9 @@ def _GenerateVideosOperation_from_mldev( to_object, ['result'], _GenerateVideosResponse_from_mldev( - getv(from_object, ['response', 'generateVideoResponse']), to_object + getv(from_object, ['response', 'generateVideoResponse']), + to_object, + root_object, ), ) @@ -2016,6 +2174,7 @@ def _GenerateVideosOperation_from_mldev( def _GenerateVideosOperation_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['name']) is not None: @@ -2035,7 +2194,7 @@ def _GenerateVideosOperation_from_vertex( to_object, ['response'], _GenerateVideosResponse_from_vertex( - getv(from_object, ['response']), to_object + getv(from_object, ['response']), to_object, root_object ), ) @@ -2044,7 +2203,7 @@ def _GenerateVideosOperation_from_vertex( to_object, ['result'], _GenerateVideosResponse_from_vertex( - getv(from_object, ['response']), to_object + getv(from_object, ['response']), to_object, root_object ), ) @@ -2055,6 +2214,7 @@ def _GenerateVideosParameters_to_mldev( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['model']) is not None: @@ -2071,21 +2231,25 @@ def _GenerateVideosParameters_to_mldev( setv( to_object, ['instances[0]', 'image'], - _Image_to_mldev(getv(from_object, ['image']), to_object), + _Image_to_mldev(getv(from_object, ['image']), to_object, root_object), ) if getv(from_object, ['video']) is not None: setv( to_object, ['instances[0]', 'video'], - _Video_to_mldev(getv(from_object, ['video']), to_object), + _Video_to_mldev(getv(from_object, ['video']), to_object, root_object), ) if getv(from_object, ['source']) is not None: - _GenerateVideosSource_to_mldev(getv(from_object, ['source']), to_object) + _GenerateVideosSource_to_mldev( + getv(from_object, ['source']), to_object, root_object + ) if getv(from_object, ['config']) is not None: - _GenerateVideosConfig_to_mldev(getv(from_object, ['config']), to_object) + _GenerateVideosConfig_to_mldev( + getv(from_object, ['config']), to_object, root_object + ) return to_object @@ -2094,6 +2258,7 @@ def _GenerateVideosParameters_to_vertex( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['model']) is not None: @@ -2110,21 +2275,25 @@ def _GenerateVideosParameters_to_vertex( setv( to_object, ['instances[0]', 'image'], - _Image_to_vertex(getv(from_object, ['image']), to_object), + _Image_to_vertex(getv(from_object, ['image']), to_object, root_object), ) if getv(from_object, ['video']) is not None: setv( to_object, ['instances[0]', 'video'], - _Video_to_vertex(getv(from_object, ['video']), to_object), + _Video_to_vertex(getv(from_object, ['video']), to_object, root_object), ) if getv(from_object, ['source']) is not None: - _GenerateVideosSource_to_vertex(getv(from_object, ['source']), to_object) + _GenerateVideosSource_to_vertex( + getv(from_object, ['source']), to_object, root_object + ) if getv(from_object, ['config']) is not None: - _GenerateVideosConfig_to_vertex(getv(from_object, ['config']), to_object) + _GenerateVideosConfig_to_vertex( + getv(from_object, ['config']), to_object, root_object + ) return to_object @@ -2132,6 +2301,7 @@ def _GenerateVideosParameters_to_vertex( def _GenerateVideosResponse_from_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['generatedSamples']) is not None: @@ -2139,7 +2309,7 @@ def _GenerateVideosResponse_from_mldev( to_object, ['generated_videos'], [ - _GeneratedVideo_from_mldev(item, to_object) + _GeneratedVideo_from_mldev(item, to_object, root_object) for item in getv(from_object, ['generatedSamples']) ], ) @@ -2164,6 +2334,7 @@ def _GenerateVideosResponse_from_mldev( def _GenerateVideosResponse_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['videos']) is not None: @@ -2171,7 +2342,7 @@ def _GenerateVideosResponse_from_vertex( to_object, ['generated_videos'], [ - _GeneratedVideo_from_vertex(item, to_object) + _GeneratedVideo_from_vertex(item, to_object, root_object) for item in getv(from_object, ['videos']) ], ) @@ -2196,6 +2367,7 @@ def _GenerateVideosResponse_from_vertex( def _GenerateVideosSource_to_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['prompt']) is not None: @@ -2207,14 +2379,14 @@ def _GenerateVideosSource_to_mldev( setv( parent_object, ['instances[0]', 'image'], - _Image_to_mldev(getv(from_object, ['image']), to_object), + _Image_to_mldev(getv(from_object, ['image']), to_object, root_object), ) if getv(from_object, ['video']) is not None: setv( parent_object, ['instances[0]', 'video'], - _Video_to_mldev(getv(from_object, ['video']), to_object), + _Video_to_mldev(getv(from_object, ['video']), to_object, root_object), ) return to_object @@ -2223,6 +2395,7 @@ def _GenerateVideosSource_to_mldev( def _GenerateVideosSource_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['prompt']) is not None: @@ -2234,14 +2407,14 @@ def _GenerateVideosSource_to_vertex( setv( parent_object, ['instances[0]', 'image'], - _Image_to_vertex(getv(from_object, ['image']), to_object), + _Image_to_vertex(getv(from_object, ['image']), to_object, root_object), ) if getv(from_object, ['video']) is not None: setv( parent_object, ['instances[0]', 'video'], - _Video_to_vertex(getv(from_object, ['video']), to_object), + _Video_to_vertex(getv(from_object, ['video']), to_object, root_object), ) return to_object @@ -2250,13 +2423,16 @@ def _GenerateVideosSource_to_vertex( def _GeneratedImageMask_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['_self']) is not None: setv( to_object, ['mask'], - _Image_from_vertex(getv(from_object, ['_self']), to_object), + _Image_from_vertex( + getv(from_object, ['_self']), to_object, root_object + ), ) if getv(from_object, ['labels']) is not None: @@ -2270,13 +2446,14 @@ def _GeneratedImageMask_from_vertex( def _GeneratedImage_from_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['_self']) is not None: setv( to_object, ['image'], - _Image_from_mldev(getv(from_object, ['_self']), to_object), + _Image_from_mldev(getv(from_object, ['_self']), to_object, root_object), ) if getv(from_object, ['raiFilteredReason']) is not None: @@ -2290,7 +2467,9 @@ def _GeneratedImage_from_mldev( setv( to_object, ['safety_attributes'], - _SafetyAttributes_from_mldev(getv(from_object, ['_self']), to_object), + _SafetyAttributes_from_mldev( + getv(from_object, ['_self']), to_object, root_object + ), ) return to_object @@ -2299,13 +2478,16 @@ def _GeneratedImage_from_mldev( def _GeneratedImage_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['_self']) is not None: setv( to_object, ['image'], - _Image_from_vertex(getv(from_object, ['_self']), to_object), + _Image_from_vertex( + getv(from_object, ['_self']), to_object, root_object + ), ) if getv(from_object, ['raiFilteredReason']) is not None: @@ -2319,7 +2501,9 @@ def _GeneratedImage_from_vertex( setv( to_object, ['safety_attributes'], - _SafetyAttributes_from_vertex(getv(from_object, ['_self']), to_object), + _SafetyAttributes_from_vertex( + getv(from_object, ['_self']), to_object, root_object + ), ) if getv(from_object, ['prompt']) is not None: @@ -2331,13 +2515,14 @@ def _GeneratedImage_from_vertex( def _GeneratedVideo_from_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['video']) is not None: setv( to_object, ['video'], - _Video_from_mldev(getv(from_object, ['video']), to_object), + _Video_from_mldev(getv(from_object, ['video']), to_object, root_object), ) return to_object @@ -2346,13 +2531,16 @@ def _GeneratedVideo_from_mldev( def _GeneratedVideo_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['_self']) is not None: setv( to_object, ['video'], - _Video_from_vertex(getv(from_object, ['_self']), to_object), + _Video_from_vertex( + getv(from_object, ['_self']), to_object, root_object + ), ) return to_object @@ -2361,6 +2549,7 @@ def _GeneratedVideo_from_vertex( def _GenerationConfig_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['model_selection_config']) is not None: @@ -2450,7 +2639,7 @@ def _GenerationConfig_to_vertex( to_object, ['speechConfig'], _SpeechConfig_to_vertex( - getv(from_object, ['speech_config']), to_object + getv(from_object, ['speech_config']), to_object, root_object ), ) @@ -2481,6 +2670,7 @@ def _GetModelParameters_to_mldev( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['model']) is not None: @@ -2497,6 +2687,7 @@ def _GetModelParameters_to_vertex( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['model']) is not None: @@ -2512,6 +2703,7 @@ def _GetModelParameters_to_vertex( def _GoogleMaps_to_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['auth_config']) is not None: @@ -2526,6 +2718,7 @@ def _GoogleMaps_to_mldev( def _GoogleSearch_to_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['exclude_domains']) is not None: @@ -2549,6 +2742,7 @@ def _GoogleSearch_to_mldev( def _ImageConfig_to_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['aspect_ratio']) is not None: @@ -2573,6 +2767,7 @@ def _ImageConfig_to_mldev( def _ImageConfig_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['aspect_ratio']) is not None: @@ -2601,6 +2796,7 @@ def _ImageConfig_to_vertex( def _Image_from_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} @@ -2620,6 +2816,7 @@ def _Image_from_mldev( def _Image_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['gcsUri']) is not None: @@ -2641,6 +2838,7 @@ def _Image_from_vertex( def _Image_to_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['gcs_uri']) is not None: @@ -2662,6 +2860,7 @@ def _Image_to_mldev( def _Image_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['gcs_uri']) is not None: @@ -2684,6 +2883,7 @@ def _ListModelsConfig_to_mldev( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} @@ -2716,6 +2916,7 @@ def _ListModelsConfig_to_vertex( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} @@ -2748,11 +2949,12 @@ def _ListModelsParameters_to_mldev( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['config']) is not None: _ListModelsConfig_to_mldev( - api_client, getv(from_object, ['config']), to_object + api_client, getv(from_object, ['config']), to_object, root_object ) return to_object @@ -2762,11 +2964,12 @@ def _ListModelsParameters_to_vertex( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['config']) is not None: _ListModelsConfig_to_vertex( - api_client, getv(from_object, ['config']), to_object + api_client, getv(from_object, ['config']), to_object, root_object ) return to_object @@ -2775,6 +2978,7 @@ def _ListModelsParameters_to_vertex( def _ListModelsResponse_from_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['sdkHttpResponse']) is not None: @@ -2790,7 +2994,7 @@ def _ListModelsResponse_from_mldev( to_object, ['models'], [ - _Model_from_mldev(item, to_object) + _Model_from_mldev(item, to_object, root_object) for item in t.t_extract_models(getv(from_object, ['_self'])) ], ) @@ -2801,6 +3005,7 @@ def _ListModelsResponse_from_mldev( def _ListModelsResponse_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['sdkHttpResponse']) is not None: @@ -2816,7 +3021,7 @@ def _ListModelsResponse_from_vertex( to_object, ['models'], [ - _Model_from_vertex(item, to_object) + _Model_from_vertex(item, to_object, root_object) for item in t.t_extract_models(getv(from_object, ['_self'])) ], ) @@ -2827,6 +3032,7 @@ def _ListModelsResponse_from_vertex( def _MaskReferenceConfig_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['mask_mode']) is not None: @@ -2846,6 +3052,7 @@ def _MaskReferenceConfig_to_vertex( def _Model_from_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['name']) is not None: @@ -2903,6 +3110,7 @@ def _Model_from_mldev( def _Model_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['name']) is not None: @@ -2922,7 +3130,7 @@ def _Model_from_vertex( to_object, ['endpoints'], [ - _Endpoint_from_vertex(item, to_object) + _Endpoint_from_vertex(item, to_object, root_object) for item in getv(from_object, ['deployedModels']) ], ) @@ -2934,7 +3142,9 @@ def _Model_from_vertex( setv( to_object, ['tuned_model_info'], - _TunedModelInfo_from_vertex(getv(from_object, ['_self']), to_object), + _TunedModelInfo_from_vertex( + getv(from_object, ['_self']), to_object, root_object + ), ) if getv(from_object, ['defaultCheckpointId']) is not None: @@ -2957,6 +3167,7 @@ def _Model_from_vertex( def _Part_to_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['media_resolution']) is not None: @@ -2978,14 +3189,18 @@ def _Part_to_mldev( setv( to_object, ['fileData'], - _FileData_to_mldev(getv(from_object, ['file_data']), to_object), + _FileData_to_mldev( + getv(from_object, ['file_data']), to_object, root_object + ), ) if getv(from_object, ['function_call']) is not None: setv( to_object, ['functionCall'], - _FunctionCall_to_mldev(getv(from_object, ['function_call']), to_object), + _FunctionCall_to_mldev( + getv(from_object, ['function_call']), to_object, root_object + ), ) if getv(from_object, ['function_response']) is not None: @@ -2999,7 +3214,9 @@ def _Part_to_mldev( setv( to_object, ['inlineData'], - _Blob_to_mldev(getv(from_object, ['inline_data']), to_object), + _Blob_to_mldev( + getv(from_object, ['inline_data']), to_object, root_object + ), ) if getv(from_object, ['text']) is not None: @@ -3024,13 +3241,16 @@ def _Part_to_mldev( def _ProductImage_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['product_image']) is not None: setv( to_object, ['image'], - _Image_to_vertex(getv(from_object, ['product_image']), to_object), + _Image_to_vertex( + getv(from_object, ['product_image']), to_object, root_object + ), ) return to_object @@ -3039,6 +3259,7 @@ def _ProductImage_to_vertex( def _RecontextImageConfig_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} @@ -3118,6 +3339,7 @@ def _RecontextImageParameters_to_vertex( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['model']) is not None: @@ -3128,10 +3350,14 @@ def _RecontextImageParameters_to_vertex( ) if getv(from_object, ['source']) is not None: - _RecontextImageSource_to_vertex(getv(from_object, ['source']), to_object) + _RecontextImageSource_to_vertex( + getv(from_object, ['source']), to_object, root_object + ) if getv(from_object, ['config']) is not None: - _RecontextImageConfig_to_vertex(getv(from_object, ['config']), to_object) + _RecontextImageConfig_to_vertex( + getv(from_object, ['config']), to_object, root_object + ) return to_object @@ -3139,6 +3365,7 @@ def _RecontextImageParameters_to_vertex( def _RecontextImageResponse_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['predictions']) is not None: @@ -3146,7 +3373,7 @@ def _RecontextImageResponse_from_vertex( to_object, ['generated_images'], [ - _GeneratedImage_from_vertex(item, to_object) + _GeneratedImage_from_vertex(item, to_object, root_object) for item in getv(from_object, ['predictions']) ], ) @@ -3157,6 +3384,7 @@ def _RecontextImageResponse_from_vertex( def _RecontextImageSource_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['prompt']) is not None: @@ -3168,7 +3396,9 @@ def _RecontextImageSource_to_vertex( setv( parent_object, ['instances[0]', 'personImage', 'image'], - _Image_to_vertex(getv(from_object, ['person_image']), to_object), + _Image_to_vertex( + getv(from_object, ['person_image']), to_object, root_object + ), ) if getv(from_object, ['product_images']) is not None: @@ -3176,7 +3406,7 @@ def _RecontextImageSource_to_vertex( parent_object, ['instances[0]', 'productImages'], [ - _ProductImage_to_vertex(item, to_object) + _ProductImage_to_vertex(item, to_object, root_object) for item in getv(from_object, ['product_images']) ], ) @@ -3187,13 +3417,16 @@ def _RecontextImageSource_to_vertex( def _ReferenceImageAPI_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['reference_image']) is not None: setv( to_object, ['referenceImage'], - _Image_to_vertex(getv(from_object, ['reference_image']), to_object), + _Image_to_vertex( + getv(from_object, ['reference_image']), to_object, root_object + ), ) if getv(from_object, ['reference_id']) is not None: @@ -3207,7 +3440,7 @@ def _ReferenceImageAPI_to_vertex( to_object, ['maskImageConfig'], _MaskReferenceConfig_to_vertex( - getv(from_object, ['mask_image_config']), to_object + getv(from_object, ['mask_image_config']), to_object, root_object ), ) @@ -3216,7 +3449,7 @@ def _ReferenceImageAPI_to_vertex( to_object, ['controlImageConfig'], _ControlReferenceConfig_to_vertex( - getv(from_object, ['control_image_config']), to_object + getv(from_object, ['control_image_config']), to_object, root_object ), ) @@ -3240,6 +3473,7 @@ def _ReferenceImageAPI_to_vertex( def _SafetyAttributes_from_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['safetyAttributes', 'categories']) is not None: @@ -3263,6 +3497,7 @@ def _SafetyAttributes_from_mldev( def _SafetyAttributes_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['safetyAttributes', 'categories']) is not None: @@ -3286,6 +3521,7 @@ def _SafetyAttributes_from_vertex( def _SafetySetting_to_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['category']) is not None: @@ -3303,13 +3539,14 @@ def _SafetySetting_to_mldev( def _ScribbleImage_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['image']) is not None: setv( to_object, ['image'], - _Image_to_vertex(getv(from_object, ['image']), to_object), + _Image_to_vertex(getv(from_object, ['image']), to_object, root_object), ) return to_object @@ -3318,6 +3555,7 @@ def _ScribbleImage_to_vertex( def _SegmentImageConfig_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} @@ -3362,6 +3600,7 @@ def _SegmentImageParameters_to_vertex( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['model']) is not None: @@ -3372,10 +3611,14 @@ def _SegmentImageParameters_to_vertex( ) if getv(from_object, ['source']) is not None: - _SegmentImageSource_to_vertex(getv(from_object, ['source']), to_object) + _SegmentImageSource_to_vertex( + getv(from_object, ['source']), to_object, root_object + ) if getv(from_object, ['config']) is not None: - _SegmentImageConfig_to_vertex(getv(from_object, ['config']), to_object) + _SegmentImageConfig_to_vertex( + getv(from_object, ['config']), to_object, root_object + ) return to_object @@ -3383,6 +3626,7 @@ def _SegmentImageParameters_to_vertex( def _SegmentImageResponse_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['predictions']) is not None: @@ -3390,7 +3634,7 @@ def _SegmentImageResponse_from_vertex( to_object, ['generated_masks'], [ - _GeneratedImageMask_from_vertex(item, to_object) + _GeneratedImageMask_from_vertex(item, to_object, root_object) for item in getv(from_object, ['predictions']) ], ) @@ -3401,6 +3645,7 @@ def _SegmentImageResponse_from_vertex( def _SegmentImageSource_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['prompt']) is not None: @@ -3412,7 +3657,7 @@ def _SegmentImageSource_to_vertex( setv( parent_object, ['instances[0]', 'image'], - _Image_to_vertex(getv(from_object, ['image']), to_object), + _Image_to_vertex(getv(from_object, ['image']), to_object, root_object), ) if getv(from_object, ['scribble_image']) is not None: @@ -3420,7 +3665,7 @@ def _SegmentImageSource_to_vertex( parent_object, ['instances[0]', 'scribble'], _ScribbleImage_to_vertex( - getv(from_object, ['scribble_image']), to_object + getv(from_object, ['scribble_image']), to_object, root_object ), ) @@ -3430,6 +3675,7 @@ def _SegmentImageSource_to_vertex( def _SpeechConfig_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['voice_config']) is not None: @@ -3449,6 +3695,7 @@ def _SpeechConfig_to_vertex( def _ToolConfig_to_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['function_calling_config']) is not None: @@ -3456,7 +3703,9 @@ def _ToolConfig_to_mldev( to_object, ['functionCallingConfig'], _FunctionCallingConfig_to_mldev( - getv(from_object, ['function_calling_config']), to_object + getv(from_object, ['function_calling_config']), + to_object, + root_object, ), ) @@ -3471,6 +3720,7 @@ def _ToolConfig_to_mldev( def _Tool_to_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['function_declarations']) is not None: @@ -3508,14 +3758,18 @@ def _Tool_to_mldev( setv( to_object, ['googleMaps'], - _GoogleMaps_to_mldev(getv(from_object, ['google_maps']), to_object), + _GoogleMaps_to_mldev( + getv(from_object, ['google_maps']), to_object, root_object + ), ) if getv(from_object, ['google_search']) is not None: setv( to_object, ['googleSearch'], - _GoogleSearch_to_mldev(getv(from_object, ['google_search']), to_object), + _GoogleSearch_to_mldev( + getv(from_object, ['google_search']), to_object, root_object + ), ) if getv(from_object, ['url_context']) is not None: @@ -3527,6 +3781,7 @@ def _Tool_to_mldev( def _Tool_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['function_declarations']) is not None: @@ -3534,7 +3789,7 @@ def _Tool_to_vertex( to_object, ['functionDeclarations'], [ - _FunctionDeclaration_to_vertex(item, to_object) + _FunctionDeclaration_to_vertex(item, to_object, root_object) for item in getv(from_object, ['function_declarations']) ], ) @@ -3580,6 +3835,7 @@ def _Tool_to_vertex( def _TunedModelInfo_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if ( @@ -3604,6 +3860,7 @@ def _TunedModelInfo_from_vertex( def _UpdateModelConfig_to_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} @@ -3626,6 +3883,7 @@ def _UpdateModelConfig_to_mldev( def _UpdateModelConfig_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} @@ -3649,6 +3907,7 @@ def _UpdateModelParameters_to_mldev( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['model']) is not None: @@ -3659,7 +3918,9 @@ def _UpdateModelParameters_to_mldev( ) if getv(from_object, ['config']) is not None: - _UpdateModelConfig_to_mldev(getv(from_object, ['config']), to_object) + _UpdateModelConfig_to_mldev( + getv(from_object, ['config']), to_object, root_object + ) return to_object @@ -3668,6 +3929,7 @@ def _UpdateModelParameters_to_vertex( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['model']) is not None: @@ -3678,7 +3940,9 @@ def _UpdateModelParameters_to_vertex( ) if getv(from_object, ['config']) is not None: - _UpdateModelConfig_to_vertex(getv(from_object, ['config']), to_object) + _UpdateModelConfig_to_vertex( + getv(from_object, ['config']), to_object, root_object + ) return to_object @@ -3686,6 +3950,7 @@ def _UpdateModelParameters_to_vertex( def _UpscaleImageAPIConfig_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} @@ -3765,6 +4030,7 @@ def _UpscaleImageAPIParameters_to_vertex( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['model']) is not None: @@ -3778,7 +4044,7 @@ def _UpscaleImageAPIParameters_to_vertex( setv( to_object, ['instances[0]', 'image'], - _Image_to_vertex(getv(from_object, ['image']), to_object), + _Image_to_vertex(getv(from_object, ['image']), to_object, root_object), ) if getv(from_object, ['upscale_factor']) is not None: @@ -3789,7 +4055,9 @@ def _UpscaleImageAPIParameters_to_vertex( ) if getv(from_object, ['config']) is not None: - _UpscaleImageAPIConfig_to_vertex(getv(from_object, ['config']), to_object) + _UpscaleImageAPIConfig_to_vertex( + getv(from_object, ['config']), to_object, root_object + ) return to_object @@ -3797,6 +4065,7 @@ def _UpscaleImageAPIParameters_to_vertex( def _UpscaleImageResponse_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['sdkHttpResponse']) is not None: @@ -3809,7 +4078,7 @@ def _UpscaleImageResponse_from_vertex( to_object, ['generated_images'], [ - _GeneratedImage_from_vertex(item, to_object) + _GeneratedImage_from_vertex(item, to_object, root_object) for item in getv(from_object, ['predictions']) ], ) @@ -3820,13 +4089,14 @@ def _UpscaleImageResponse_from_vertex( def _VideoGenerationMask_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['image']) is not None: setv( to_object, ['_self'], - _Image_to_vertex(getv(from_object, ['image']), to_object), + _Image_to_vertex(getv(from_object, ['image']), to_object, root_object), ) if getv(from_object, ['mask_mode']) is not None: @@ -3838,13 +4108,14 @@ def _VideoGenerationMask_to_vertex( def _VideoGenerationReferenceImage_to_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['image']) is not None: setv( to_object, ['image'], - _Image_to_mldev(getv(from_object, ['image']), to_object), + _Image_to_mldev(getv(from_object, ['image']), to_object, root_object), ) if getv(from_object, ['reference_type']) is not None: @@ -3859,13 +4130,14 @@ def _VideoGenerationReferenceImage_to_mldev( def _VideoGenerationReferenceImage_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['image']) is not None: setv( to_object, ['image'], - _Image_to_vertex(getv(from_object, ['image']), to_object), + _Image_to_vertex(getv(from_object, ['image']), to_object, root_object), ) if getv(from_object, ['reference_type']) is not None: @@ -3877,6 +4149,7 @@ def _VideoGenerationReferenceImage_to_vertex( def _Video_from_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['uri']) is not None: @@ -3898,6 +4171,7 @@ def _Video_from_mldev( def _Video_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['gcsUri']) is not None: @@ -3919,6 +4193,7 @@ def _Video_from_vertex( def _Video_to_mldev( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['uri']) is not None: @@ -3940,6 +4215,7 @@ def _Video_to_mldev( def _Video_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, + root_object: Optional[Union[dict[str, Any], object]] = None, ) -> dict[str, Any]: to_object: dict[str, Any] = {} if getv(from_object, ['uri']) is not None: @@ -3977,7 +4253,7 @@ def _generate_content( if self._api_client.vertexai: request_dict = _GenerateContentParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -3986,7 +4262,7 @@ def _generate_content( path = '{model}:generateContent' else: request_dict = _GenerateContentParameters_to_mldev( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -4023,10 +4299,14 @@ def _generate_content( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _GenerateContentResponse_from_vertex(response_dict) + response_dict = _GenerateContentResponse_from_vertex( + response_dict, None, parameter_model + ) if not self._api_client.vertexai: - response_dict = _GenerateContentResponse_from_mldev(response_dict) + response_dict = _GenerateContentResponse_from_mldev( + response_dict, None, parameter_model + ) return_value = types.GenerateContentResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -4054,7 +4334,7 @@ def _generate_content_stream( if self._api_client.vertexai: request_dict = _GenerateContentParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -4065,7 +4345,7 @@ def _generate_content_stream( path = '{model}:streamGenerateContent?alt=sse' else: request_dict = _GenerateContentParameters_to_mldev( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -4105,10 +4385,14 @@ def _generate_content_stream( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _GenerateContentResponse_from_vertex(response_dict) + response_dict = _GenerateContentResponse_from_vertex( + response_dict, None, parameter_model + ) if not self._api_client.vertexai: - response_dict = _GenerateContentResponse_from_mldev(response_dict) + response_dict = _GenerateContentResponse_from_mldev( + response_dict, None, parameter_model + ) return_value = types.GenerateContentResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -4119,11 +4403,17 @@ def _generate_content_stream( self._api_client._verify_response(return_value) yield return_value - def embed_content( + def _embed_content( self, *, model: str, - contents: Union[types.ContentListUnion, types.ContentListUnionDict], + contents: Optional[ + Union[types.ContentListUnion, types.ContentListUnionDict] + ] = None, + content: Optional[ + Union[types.ContentUnion, types.ContentUnionDict] + ] = None, + embedding_api_type: Optional[types.EmbeddingApiType] = None, config: Optional[types.EmbedContentConfigOrDict] = None, ) -> types.EmbedContentResponse: """Calculates embeddings for the given contents. Only text is supported. @@ -4149,26 +4439,29 @@ def embed_content( ) """ - parameter_model = types._EmbedContentParameters( + parameter_model = types._EmbedContentParametersPrivate( model=model, contents=contents, + content=content, + embedding_api_type=embedding_api_type, config=config, ) request_url_dict: Optional[dict[str, str]] if self._api_client.vertexai: - request_dict = _EmbedContentParameters_to_vertex( - self._api_client, parameter_model + request_dict = _EmbedContentParametersPrivate_to_vertex( + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') + endpoint_url = '{model}:embedContent' if t.t_is_vertex_embed_content_model(parameter_model.model) else '{model}:predict' # type: ignore[arg-type] if request_url_dict: - path = '{model}:predict'.format_map(request_url_dict) + path = endpoint_url.format_map(request_url_dict) else: - path = '{model}:predict' + path = endpoint_url else: - request_dict = _EmbedContentParameters_to_mldev( - self._api_client, parameter_model + request_dict = _EmbedContentParametersPrivate_to_mldev( + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -4198,10 +4491,14 @@ def embed_content( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _EmbedContentResponse_from_vertex(response_dict) + response_dict = _EmbedContentResponse_from_vertex( + response_dict, None, parameter_model + ) if not self._api_client.vertexai: - response_dict = _EmbedContentResponse_from_mldev(response_dict) + response_dict = _EmbedContentResponse_from_mldev( + response_dict, None, parameter_model + ) return_value = types.EmbedContentResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -4231,7 +4528,7 @@ def _generate_images( if self._api_client.vertexai: request_dict = _GenerateImagesParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -4240,7 +4537,7 @@ def _generate_images( path = '{model}:predict' else: request_dict = _GenerateImagesParameters_to_mldev( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -4270,10 +4567,14 @@ def _generate_images( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _GenerateImagesResponse_from_vertex(response_dict) + response_dict = _GenerateImagesResponse_from_vertex( + response_dict, None, parameter_model + ) if not self._api_client.vertexai: - response_dict = _GenerateImagesResponse_from_mldev(response_dict) + response_dict = _GenerateImagesResponse_from_mldev( + response_dict, None, parameter_model + ) return_value = types.GenerateImagesResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -4306,7 +4607,7 @@ def _edit_image( raise ValueError('This method is only supported in the Vertex AI client.') else: request_dict = _EditImageParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -4337,7 +4638,9 @@ def _edit_image( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _EditImageResponse_from_vertex(response_dict) + response_dict = _EditImageResponse_from_vertex( + response_dict, None, parameter_model + ) return_value = types.EditImageResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -4370,7 +4673,7 @@ def _upscale_image( raise ValueError('This method is only supported in the Vertex AI client.') else: request_dict = _UpscaleImageAPIParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -4401,7 +4704,9 @@ def _upscale_image( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _UpscaleImageResponse_from_vertex(response_dict) + response_dict = _UpscaleImageResponse_from_vertex( + response_dict, None, parameter_model + ) return_value = types.UpscaleImageResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -4478,7 +4783,7 @@ def recontext_image( raise ValueError('This method is only supported in the Vertex AI client.') else: request_dict = _RecontextImageParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -4509,7 +4814,9 @@ def recontext_image( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _RecontextImageResponse_from_vertex(response_dict) + response_dict = _RecontextImageResponse_from_vertex( + response_dict, None, parameter_model + ) return_value = types.RecontextImageResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -4561,7 +4868,7 @@ def segment_image( raise ValueError('This method is only supported in the Vertex AI client.') else: request_dict = _SegmentImageParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -4592,7 +4899,9 @@ def segment_image( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _SegmentImageResponse_from_vertex(response_dict) + response_dict = _SegmentImageResponse_from_vertex( + response_dict, None, parameter_model + ) return_value = types.SegmentImageResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -4613,7 +4922,7 @@ def get( if self._api_client.vertexai: request_dict = _GetModelParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -4622,7 +4931,7 @@ def get( path = '{name}' else: request_dict = _GetModelParameters_to_mldev( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -4650,10 +4959,10 @@ def get( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _Model_from_vertex(response_dict) + response_dict = _Model_from_vertex(response_dict, None, parameter_model) if not self._api_client.vertexai: - response_dict = _Model_from_mldev(response_dict) + response_dict = _Model_from_mldev(response_dict, None, parameter_model) return_value = types.Model._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -4673,7 +4982,7 @@ def _list( if self._api_client.vertexai: request_dict = _ListModelsParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -4682,7 +4991,7 @@ def _list( path = '{models_url}' else: request_dict = _ListModelsParameters_to_mldev( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -4715,10 +5024,14 @@ def _list( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _ListModelsResponse_from_vertex(response_dict) + response_dict = _ListModelsResponse_from_vertex( + response_dict, None, parameter_model + ) if not self._api_client.vertexai: - response_dict = _ListModelsResponse_from_mldev(response_dict) + response_dict = _ListModelsResponse_from_mldev( + response_dict, None, parameter_model + ) return_value = types.ListModelsResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -4744,7 +5057,7 @@ def update( if self._api_client.vertexai: request_dict = _UpdateModelParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -4753,7 +5066,7 @@ def update( path = '{model}' else: request_dict = _UpdateModelParameters_to_mldev( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -4783,10 +5096,10 @@ def update( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _Model_from_vertex(response_dict) + response_dict = _Model_from_vertex(response_dict, None, parameter_model) if not self._api_client.vertexai: - response_dict = _Model_from_mldev(response_dict) + response_dict = _Model_from_mldev(response_dict, None, parameter_model) return_value = types.Model._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -4810,7 +5123,7 @@ def delete( if self._api_client.vertexai: request_dict = _DeleteModelParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -4819,7 +5132,7 @@ def delete( path = '{name}' else: request_dict = _DeleteModelParameters_to_mldev( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -4849,10 +5162,14 @@ def delete( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _DeleteModelResponse_from_vertex(response_dict) + response_dict = _DeleteModelResponse_from_vertex( + response_dict, None, parameter_model + ) if not self._api_client.vertexai: - response_dict = _DeleteModelResponse_from_mldev(response_dict) + response_dict = _DeleteModelResponse_from_mldev( + response_dict, None, parameter_model + ) return_value = types.DeleteModelResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -4901,7 +5218,7 @@ def count_tokens( if self._api_client.vertexai: request_dict = _CountTokensParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -4910,7 +5227,7 @@ def count_tokens( path = '{model}:countTokens' else: request_dict = _CountTokensParameters_to_mldev( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -4940,10 +5257,14 @@ def count_tokens( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _CountTokensResponse_from_vertex(response_dict) + response_dict = _CountTokensResponse_from_vertex( + response_dict, None, parameter_model + ) if not self._api_client.vertexai: - response_dict = _CountTokensResponse_from_mldev(response_dict) + response_dict = _CountTokensResponse_from_mldev( + response_dict, None, parameter_model + ) return_value = types.CountTokensResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -4995,7 +5316,7 @@ def compute_tokens( raise ValueError('This method is only supported in the Vertex AI client.') else: request_dict = _ComputeTokensParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -5026,7 +5347,9 @@ def compute_tokens( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _ComputeTokensResponse_from_vertex(response_dict) + response_dict = _ComputeTokensResponse_from_vertex( + response_dict, None, parameter_model + ) return_value = types.ComputeTokensResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -5062,7 +5385,7 @@ def _generate_videos( if self._api_client.vertexai: request_dict = _GenerateVideosParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -5071,7 +5394,7 @@ def _generate_videos( path = '{model}:predictLongRunning' else: request_dict = _GenerateVideosParameters_to_mldev( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -5101,10 +5424,14 @@ def _generate_videos( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _GenerateVideosOperation_from_vertex(response_dict) + response_dict = _GenerateVideosOperation_from_vertex( + response_dict, None, parameter_model + ) if not self._api_client.vertexai: - response_dict = _GenerateVideosOperation_from_mldev(response_dict) + response_dict = _GenerateVideosOperation_from_mldev( + response_dict, None, parameter_model + ) return_value = types.GenerateVideosOperation._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -5113,6 +5440,75 @@ def _generate_videos( self._api_client._verify_response(return_value) return return_value + def embed_content( + self, + *, + model: str, + contents: Union[types.ContentListUnion, types.ContentListUnionDict], + config: Optional[types.EmbedContentConfigOrDict] = None, + ) -> types.EmbedContentResponse: + """Calculates embeddings for the given contents. + + 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 + }, + ) + + # Multimodal embeddings are only supported for the Vertex AI API. + multimodal_embeddings = client.models.embed_content( + model='gemini-embedding-2-exp-11-2025', + contents=[ + types.Part.from_uri( + file_uri='gs://generativeai-downloads/images/scones.jpg', + mime_type='image/jpeg', + ), + ], + config={ + 'output_dimensionality': 64 + }, + ) + """ + if not self._api_client.vertexai: + return self._embed_content(model=model, contents=contents, config=config) + + if t.t_is_vertex_embed_content_model(model): + normalized_contents = t.t_contents(contents) + if len(normalized_contents) > 1: + raise ValueError( + 'The embedContent API for this model only supports one content at a' + ' time.' + ) + return self._embed_content( + model=model, + contents=None, + content=normalized_contents[0], + embedding_api_type=types.EmbeddingApiType.EMBED_CONTENT, + config=config, + ) + else: + return self._embed_content( + model=model, + content=None, + contents=contents, + embedding_api_type=types.EmbeddingApiType.PREDICT, + config=config, + ) + def generate_content( self, *, @@ -5816,7 +6212,7 @@ async def _generate_content( if self._api_client.vertexai: request_dict = _GenerateContentParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -5825,7 +6221,7 @@ async def _generate_content( path = '{model}:generateContent' else: request_dict = _GenerateContentParameters_to_mldev( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -5862,10 +6258,14 @@ async def _generate_content( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _GenerateContentResponse_from_vertex(response_dict) + response_dict = _GenerateContentResponse_from_vertex( + response_dict, None, parameter_model + ) if not self._api_client.vertexai: - response_dict = _GenerateContentResponse_from_mldev(response_dict) + response_dict = _GenerateContentResponse_from_mldev( + response_dict, None, parameter_model + ) return_value = types.GenerateContentResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -5893,7 +6293,7 @@ async def _generate_content_stream( if self._api_client.vertexai: request_dict = _GenerateContentParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -5904,7 +6304,7 @@ async def _generate_content_stream( path = '{model}:streamGenerateContent?alt=sse' else: request_dict = _GenerateContentParameters_to_mldev( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -5947,10 +6347,14 @@ async def async_generator(): # type: ignore[no-untyped-def] response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _GenerateContentResponse_from_vertex(response_dict) + response_dict = _GenerateContentResponse_from_vertex( + response_dict, None, parameter_model + ) if not self._api_client.vertexai: - response_dict = _GenerateContentResponse_from_mldev(response_dict) + response_dict = _GenerateContentResponse_from_mldev( + response_dict, None, parameter_model + ) return_value = types.GenerateContentResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -5963,11 +6367,17 @@ async def async_generator(): # type: ignore[no-untyped-def] return async_generator() # type: ignore[no-untyped-call, no-any-return] - async def embed_content( + async def _embed_content( self, *, model: str, - contents: Union[types.ContentListUnion, types.ContentListUnionDict], + contents: Optional[ + Union[types.ContentListUnion, types.ContentListUnionDict] + ] = None, + content: Optional[ + Union[types.ContentUnion, types.ContentUnionDict] + ] = None, + embedding_api_type: Optional[types.EmbeddingApiType] = None, config: Optional[types.EmbedContentConfigOrDict] = None, ) -> types.EmbedContentResponse: """Calculates embeddings for the given contents. Only text is supported. @@ -5993,26 +6403,29 @@ async def embed_content( ) """ - parameter_model = types._EmbedContentParameters( + parameter_model = types._EmbedContentParametersPrivate( model=model, contents=contents, + content=content, + embedding_api_type=embedding_api_type, config=config, ) request_url_dict: Optional[dict[str, str]] if self._api_client.vertexai: - request_dict = _EmbedContentParameters_to_vertex( - self._api_client, parameter_model + request_dict = _EmbedContentParametersPrivate_to_vertex( + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') + endpoint_url = '{model}:embedContent' if t.t_is_vertex_embed_content_model(parameter_model.model) else '{model}:predict' # type: ignore[arg-type] if request_url_dict: - path = '{model}:predict'.format_map(request_url_dict) + path = endpoint_url.format_map(request_url_dict) else: - path = '{model}:predict' + path = endpoint_url else: - request_dict = _EmbedContentParameters_to_mldev( - self._api_client, parameter_model + request_dict = _EmbedContentParametersPrivate_to_mldev( + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -6042,10 +6455,14 @@ async def embed_content( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _EmbedContentResponse_from_vertex(response_dict) + response_dict = _EmbedContentResponse_from_vertex( + response_dict, None, parameter_model + ) if not self._api_client.vertexai: - response_dict = _EmbedContentResponse_from_mldev(response_dict) + response_dict = _EmbedContentResponse_from_mldev( + response_dict, None, parameter_model + ) return_value = types.EmbedContentResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -6075,7 +6492,7 @@ async def _generate_images( if self._api_client.vertexai: request_dict = _GenerateImagesParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -6084,7 +6501,7 @@ async def _generate_images( path = '{model}:predict' else: request_dict = _GenerateImagesParameters_to_mldev( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -6114,10 +6531,14 @@ async def _generate_images( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _GenerateImagesResponse_from_vertex(response_dict) + response_dict = _GenerateImagesResponse_from_vertex( + response_dict, None, parameter_model + ) if not self._api_client.vertexai: - response_dict = _GenerateImagesResponse_from_mldev(response_dict) + response_dict = _GenerateImagesResponse_from_mldev( + response_dict, None, parameter_model + ) return_value = types.GenerateImagesResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -6150,7 +6571,7 @@ async def _edit_image( raise ValueError('This method is only supported in the Vertex AI client.') else: request_dict = _EditImageParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -6181,7 +6602,9 @@ async def _edit_image( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _EditImageResponse_from_vertex(response_dict) + response_dict = _EditImageResponse_from_vertex( + response_dict, None, parameter_model + ) return_value = types.EditImageResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -6214,7 +6637,7 @@ async def _upscale_image( raise ValueError('This method is only supported in the Vertex AI client.') else: request_dict = _UpscaleImageAPIParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -6245,7 +6668,9 @@ async def _upscale_image( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _UpscaleImageResponse_from_vertex(response_dict) + response_dict = _UpscaleImageResponse_from_vertex( + response_dict, None, parameter_model + ) return_value = types.UpscaleImageResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -6322,7 +6747,7 @@ async def recontext_image( raise ValueError('This method is only supported in the Vertex AI client.') else: request_dict = _RecontextImageParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -6353,7 +6778,9 @@ async def recontext_image( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _RecontextImageResponse_from_vertex(response_dict) + response_dict = _RecontextImageResponse_from_vertex( + response_dict, None, parameter_model + ) return_value = types.RecontextImageResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -6408,7 +6835,7 @@ async def segment_image( raise ValueError('This method is only supported in the Vertex AI client.') else: request_dict = _SegmentImageParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -6439,7 +6866,9 @@ async def segment_image( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _SegmentImageResponse_from_vertex(response_dict) + response_dict = _SegmentImageResponse_from_vertex( + response_dict, None, parameter_model + ) return_value = types.SegmentImageResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -6460,7 +6889,7 @@ async def get( if self._api_client.vertexai: request_dict = _GetModelParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -6469,7 +6898,7 @@ async def get( path = '{name}' else: request_dict = _GetModelParameters_to_mldev( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -6499,10 +6928,10 @@ async def get( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _Model_from_vertex(response_dict) + response_dict = _Model_from_vertex(response_dict, None, parameter_model) if not self._api_client.vertexai: - response_dict = _Model_from_mldev(response_dict) + response_dict = _Model_from_mldev(response_dict, None, parameter_model) return_value = types.Model._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -6522,7 +6951,7 @@ async def _list( if self._api_client.vertexai: request_dict = _ListModelsParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -6531,7 +6960,7 @@ async def _list( path = '{models_url}' else: request_dict = _ListModelsParameters_to_mldev( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -6566,10 +6995,14 @@ async def _list( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _ListModelsResponse_from_vertex(response_dict) + response_dict = _ListModelsResponse_from_vertex( + response_dict, None, parameter_model + ) if not self._api_client.vertexai: - response_dict = _ListModelsResponse_from_mldev(response_dict) + response_dict = _ListModelsResponse_from_mldev( + response_dict, None, parameter_model + ) return_value = types.ListModelsResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -6595,7 +7028,7 @@ async def update( if self._api_client.vertexai: request_dict = _UpdateModelParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -6604,7 +7037,7 @@ async def update( path = '{model}' else: request_dict = _UpdateModelParameters_to_mldev( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -6634,10 +7067,10 @@ async def update( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _Model_from_vertex(response_dict) + response_dict = _Model_from_vertex(response_dict, None, parameter_model) if not self._api_client.vertexai: - response_dict = _Model_from_mldev(response_dict) + response_dict = _Model_from_mldev(response_dict, None, parameter_model) return_value = types.Model._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -6661,7 +7094,7 @@ async def delete( if self._api_client.vertexai: request_dict = _DeleteModelParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -6670,7 +7103,7 @@ async def delete( path = '{name}' else: request_dict = _DeleteModelParameters_to_mldev( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -6700,10 +7133,14 @@ async def delete( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _DeleteModelResponse_from_vertex(response_dict) + response_dict = _DeleteModelResponse_from_vertex( + response_dict, None, parameter_model + ) if not self._api_client.vertexai: - response_dict = _DeleteModelResponse_from_mldev(response_dict) + response_dict = _DeleteModelResponse_from_mldev( + response_dict, None, parameter_model + ) return_value = types.DeleteModelResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -6752,7 +7189,7 @@ async def count_tokens( if self._api_client.vertexai: request_dict = _CountTokensParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -6761,7 +7198,7 @@ async def count_tokens( path = '{model}:countTokens' else: request_dict = _CountTokensParameters_to_mldev( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -6791,10 +7228,14 @@ async def count_tokens( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _CountTokensResponse_from_vertex(response_dict) + response_dict = _CountTokensResponse_from_vertex( + response_dict, None, parameter_model + ) if not self._api_client.vertexai: - response_dict = _CountTokensResponse_from_mldev(response_dict) + response_dict = _CountTokensResponse_from_mldev( + response_dict, None, parameter_model + ) return_value = types.CountTokensResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -6845,7 +7286,7 @@ async def compute_tokens( raise ValueError('This method is only supported in the Vertex AI client.') else: request_dict = _ComputeTokensParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -6876,7 +7317,9 @@ async def compute_tokens( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _ComputeTokensResponse_from_vertex(response_dict) + response_dict = _ComputeTokensResponse_from_vertex( + response_dict, None, parameter_model + ) return_value = types.ComputeTokensResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -6912,7 +7355,7 @@ async def _generate_videos( if self._api_client.vertexai: request_dict = _GenerateVideosParameters_to_vertex( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -6921,7 +7364,7 @@ async def _generate_videos( path = '{model}:predictLongRunning' else: request_dict = _GenerateVideosParameters_to_mldev( - self._api_client, parameter_model + self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') if request_url_dict: @@ -6951,10 +7394,14 @@ async def _generate_videos( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _GenerateVideosOperation_from_vertex(response_dict) + response_dict = _GenerateVideosOperation_from_vertex( + response_dict, None, parameter_model + ) if not self._api_client.vertexai: - response_dict = _GenerateVideosOperation_from_mldev(response_dict) + response_dict = _GenerateVideosOperation_from_mldev( + response_dict, None, parameter_model + ) return_value = types.GenerateVideosOperation._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -7636,3 +8083,72 @@ async def generate_videos( source=source, config=config, ) + + async def embed_content( + self, + *, + model: str, + contents: Union[types.ContentListUnion, types.ContentListUnionDict], + config: Optional[types.EmbedContentConfigOrDict] = None, + ) -> types.EmbedContentResponse: + """Calculates embeddings for the given contents. + + 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 + }, + ) + + # Multimodal embeddings are only supported for the Vertex AI API. + multimodal_embeddings = await client.aio.models.embed_content( + model='gemini-embedding-2-exp-11-2025', + contents=[ + types.Part.from_uri( + file_uri='gs://generativeai-downloads/images/scones.jpg', + mime_type='image/jpeg', + ), + ], + config={ + 'output_dimensionality': 64 + }, + ) + """ + if not self._api_client.vertexai: + return await self._embed_content( + model=model, contents=contents, config=config + ) + if t.t_is_vertex_embed_content_model(model): + normalized_contents = t.t_contents(contents) + if len(normalized_contents) > 1: + raise ValueError( + 'The embedContent API for this model only supports one content at a' + ' time.' + ) + return await self._embed_content( + model=model, + contents=contents, + content=normalized_contents[0], + embedding_api_type=types.EmbeddingApiType.EMBED_CONTENT, + config=config, + ) + else: + return await self._embed_content( + model=model, + contents=contents, + embedding_api_type=types.EmbeddingApiType.PREDICT, + config=config, + ) diff --git a/google/genai/tests/models/test_embed_content.py b/google/genai/tests/models/test_embed_content.py index be3ea0162..ed853a22f 100644 --- a/google/genai/tests/models/test_embed_content.py +++ b/google/genai/tests/models/test_embed_content.py @@ -17,6 +17,7 @@ """Tests for models.embedContent().""" +import os import pytest from ... import _transformers as t @@ -24,17 +25,24 @@ from .. import pytest_helper +def _get_bytes_from_file(relative_path: str) -> bytes: + abs_file_path = os.path.abspath( + os.path.join(os.path.dirname(__file__), relative_path) + ) + with open(abs_file_path, 'rb') as file: + return file.read() + test_table: list[pytest_helper.TestTableItem] = [ pytest_helper.TestTableItem( name='test_single_text', - parameters=types._EmbedContentParameters( + parameters=types.EmbedContentParameters( model='text-embedding-004', contents=t.t_contents('What is your name?'), ), ), pytest_helper.TestTableItem( name='test_multi_texts_with_config', - parameters=types._EmbedContentParameters( + parameters=types.EmbedContentParameters( model='text-embedding-004', contents=[ t.t_content('What is your name?'), @@ -52,7 +60,7 @@ ), pytest_helper.TestTableItem( name='test_single_text_with_mime_type_not_supported_in_mldev', - parameters=types._EmbedContentParameters( + parameters=types.EmbedContentParameters( model='text-embedding-004', contents=t.t_contents('What is your name?'), config={ @@ -64,7 +72,7 @@ ), pytest_helper.TestTableItem( name='test_single_text_with_auto_truncate_not_supported_in_mldev', - parameters=types._EmbedContentParameters( + parameters=types.EmbedContentParameters( model='text-embedding-004', contents=t.t_contents('What is your name?'), config={ @@ -74,6 +82,112 @@ ), exception_if_mldev='parameter is not supported', ), + pytest_helper.TestTableItem( + name='test_vertex_new_api_text_only_with_config', + parameters=types.EmbedContentParameters( + model='gemini-embedding-2-exp-11-2025', + contents=t.t_contents('What is your name?'), + config={ + 'output_dimensionality': 10, + 'title': 'test_title', + 'task_type': 'RETRIEVAL_DOCUMENT', + 'http_options': { + 'headers': {'test': 'headers'}, + }, + 'auto_truncate': True, + }, + ), + # auto_truncate not supported on MLDev. + exception_if_mldev='parameter is not supported', + ), + pytest_helper.TestTableItem( + name='test_vertex_new_api_text_only', + parameters=types.EmbedContentParameters( + model='gemini-embedding-2-exp-11-2025', + contents=t.t_contents('What is your name?'), + config={ + 'output_dimensionality': 100, + }, + ), + # Model not exposed on MLDev. + exception_if_mldev='404', + ), + pytest_helper.TestTableItem( + name='test_vertex_new_api_maas', + parameters=types.EmbedContentParameters( + model=( + 'publishers/intfloat/models/multilingual-e5-large-instruct-maas' + ), + contents=t.t_contents('What is your name?'), + config={ + 'output_dimensionality': 100, + }, + ), + # Model not exposed on MLDev. + exception_if_mldev='404', + ), + pytest_helper.TestTableItem( + name='test_vertex_new_api_gcs_image_and_config', + parameters=types.EmbedContentParameters( + model='gemini-embedding-2-exp-11-2025', + contents=[ + types.Content( + parts=[ + types.Part.from_text( + text='Similar things to the following image:' + ), + types.Part.from_uri( + file_uri='gs://cloud-samples-data/generative-ai/image/a-man-and-a-dog.png', + mime_type='image/png', + ), + ], + ) + ], + config={ + 'output_dimensionality': 10, + 'title': 'test_title', + 'task_type': 'RETRIEVAL_DOCUMENT', + 'http_options': { + 'headers': {'test': 'headers'}, + }, + }, + ), + # Model not exposed on MLDev. + exception_if_mldev='404', + ), + pytest_helper.TestTableItem( + name='test_vertex_new_api_inline_pdf', + parameters=types.EmbedContentParameters( + model='gemini-embedding-2-exp-11-2025', + contents=[ + types.Content( + parts=[ + types.Part.from_bytes( + data=_get_bytes_from_file('../data/story.pdf'), + mime_type='application/pdf', + ), + ], + ) + ], + config={ + 'output_dimensionality': 100, + }, + ), + # Model not exposed on MLDev. + exception_if_mldev='404', + ), + pytest_helper.TestTableItem( + name='test_vertex_new_api_list_of_contents_error', + parameters=types.EmbedContentParameters( + model='gemini-embedding-2-exp-11-2025', + contents=[ + types.Content(parts=[types.Part.from_text(text='hello')]), + types.Content(parts=[types.Part.from_text(text='world')]), + ], + ), + exception_if_vertex='supports', + exception_if_mldev='404', + ), ] pytestmark = pytest_helper.setup( @@ -92,3 +206,15 @@ async def test_async(client): config={'output_dimensionality': 10}, ) assert response + + +@pytest.mark.asyncio +async def test_async_new_api(client): + if not client.vertexai: + return + response = await client.aio.models.embed_content( + model='gemini-embedding-2-exp-11-2025', + contents=t.t_contents('What is your name?'), + config={'output_dimensionality': 10}, + ) + assert response diff --git a/google/genai/tests/shared/models/test_embed.py b/google/genai/tests/shared/models/test_embed.py index 3b0ce27aa..3e1a7e018 100644 --- a/google/genai/tests/shared/models/test_embed.py +++ b/google/genai/tests/shared/models/test_embed.py @@ -23,7 +23,7 @@ test_table: list[pytest_helper.TestTableItem] = [ pytest_helper.TestTableItem( name='test_embed', - parameters=genai_types._EmbedContentParameters( + parameters=genai_types.EmbedContentParameters( model='text-embedding-004', contents='Hello world!', ), diff --git a/google/genai/tunings.py b/google/genai/tunings.py index 1b42f032e..de1df8710 100644 --- a/google/genai/tunings.py +++ b/google/genai/tunings.py @@ -235,7 +235,6 @@ def _CreateTuningJobConfig_to_vertex( getv(from_object, ['validation_dataset']), to_object, root_object ), ) - elif discriminator == 'PREFERENCE_TUNING': if getv(from_object, ['validation_dataset']) is not None: setv( @@ -266,7 +265,6 @@ def _CreateTuningJobConfig_to_vertex( ['supervisedTuningSpec', 'hyperParameters', 'epochCount'], getv(from_object, ['epoch_count']), ) - elif discriminator == 'PREFERENCE_TUNING': if getv(from_object, ['epoch_count']) is not None: setv( @@ -285,7 +283,6 @@ def _CreateTuningJobConfig_to_vertex( ['supervisedTuningSpec', 'hyperParameters', 'learningRateMultiplier'], getv(from_object, ['learning_rate_multiplier']), ) - elif discriminator == 'PREFERENCE_TUNING': if getv(from_object, ['learning_rate_multiplier']) is not None: setv( @@ -308,7 +305,6 @@ def _CreateTuningJobConfig_to_vertex( ['supervisedTuningSpec', 'exportLastCheckpointOnly'], getv(from_object, ['export_last_checkpoint_only']), ) - elif discriminator == 'PREFERENCE_TUNING': if getv(from_object, ['export_last_checkpoint_only']) is not None: setv( @@ -327,7 +323,6 @@ def _CreateTuningJobConfig_to_vertex( ['supervisedTuningSpec', 'hyperParameters', 'adapterSize'], getv(from_object, ['adapter_size']), ) - elif discriminator == 'PREFERENCE_TUNING': if getv(from_object, ['adapter_size']) is not None: setv( @@ -354,7 +349,6 @@ def _CreateTuningJobConfig_to_vertex( getv(from_object, ['evaluation_config']), to_object, root_object ), ) - elif discriminator == 'PREFERENCE_TUNING': if getv(from_object, ['evaluation_config']) is not None: setv( @@ -937,7 +931,6 @@ def _TuningDataset_to_vertex( ['supervisedTuningSpec', 'trainingDatasetUri'], getv(from_object, ['gcs_uri']), ) - elif discriminator == 'PREFERENCE_TUNING': if getv(from_object, ['gcs_uri']) is not None: setv( @@ -956,7 +949,6 @@ def _TuningDataset_to_vertex( ['supervisedTuningSpec', 'trainingDatasetUri'], getv(from_object, ['vertex_dataset_resource']), ) - elif discriminator == 'PREFERENCE_TUNING': if getv(from_object, ['vertex_dataset_resource']) is not None: setv( @@ -1257,10 +1249,14 @@ def _get( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _TuningJob_from_vertex(response_dict) + response_dict = _TuningJob_from_vertex( + response_dict, None, parameter_model + ) if not self._api_client.vertexai: - response_dict = _TuningJob_from_mldev(response_dict) + response_dict = _TuningJob_from_mldev( + response_dict, None, parameter_model + ) return_value = types.TuningJob._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -1319,10 +1315,14 @@ def _list( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _ListTuningJobsResponse_from_vertex(response_dict) + response_dict = _ListTuningJobsResponse_from_vertex( + response_dict, None, parameter_model + ) if not self._api_client.vertexai: - response_dict = _ListTuningJobsResponse_from_mldev(response_dict) + response_dict = _ListTuningJobsResponse_from_mldev( + response_dict, None, parameter_model + ) return_value = types.ListTuningJobsResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -1393,10 +1393,14 @@ def cancel( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _CancelTuningJobResponse_from_vertex(response_dict) + response_dict = _CancelTuningJobResponse_from_vertex( + response_dict, None, parameter_model + ) if not self._api_client.vertexai: - response_dict = _CancelTuningJobResponse_from_mldev(response_dict) + response_dict = _CancelTuningJobResponse_from_mldev( + response_dict, None, parameter_model + ) return_value = types.CancelTuningJobResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -1469,7 +1473,9 @@ def _tune( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _TuningJob_from_vertex(response_dict) + response_dict = _TuningJob_from_vertex( + response_dict, None, parameter_model + ) return_value = types.TuningJob._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -1544,7 +1550,9 @@ def _tune_mldev( response_dict = {} if not response.body else json.loads(response.body) if not self._api_client.vertexai: - response_dict = _TuningOperation_from_mldev(response_dict) + response_dict = _TuningOperation_from_mldev( + response_dict, None, parameter_model + ) return_value = types.TuningOperation._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -1749,10 +1757,14 @@ async def _get( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _TuningJob_from_vertex(response_dict) + response_dict = _TuningJob_from_vertex( + response_dict, None, parameter_model + ) if not self._api_client.vertexai: - response_dict = _TuningJob_from_mldev(response_dict) + response_dict = _TuningJob_from_mldev( + response_dict, None, parameter_model + ) return_value = types.TuningJob._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -1813,10 +1825,14 @@ async def _list( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _ListTuningJobsResponse_from_vertex(response_dict) + response_dict = _ListTuningJobsResponse_from_vertex( + response_dict, None, parameter_model + ) if not self._api_client.vertexai: - response_dict = _ListTuningJobsResponse_from_mldev(response_dict) + response_dict = _ListTuningJobsResponse_from_mldev( + response_dict, None, parameter_model + ) return_value = types.ListTuningJobsResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -1887,10 +1903,14 @@ async def cancel( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _CancelTuningJobResponse_from_vertex(response_dict) + response_dict = _CancelTuningJobResponse_from_vertex( + response_dict, None, parameter_model + ) if not self._api_client.vertexai: - response_dict = _CancelTuningJobResponse_from_mldev(response_dict) + response_dict = _CancelTuningJobResponse_from_mldev( + response_dict, None, parameter_model + ) return_value = types.CancelTuningJobResponse._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -1963,7 +1983,9 @@ async def _tune( response_dict = {} if not response.body else json.loads(response.body) if self._api_client.vertexai: - response_dict = _TuningJob_from_vertex(response_dict) + response_dict = _TuningJob_from_vertex( + response_dict, None, parameter_model + ) return_value = types.TuningJob._from_response( response=response_dict, kwargs=parameter_model.model_dump() @@ -2038,7 +2060,9 @@ async def _tune_mldev( response_dict = {} if not response.body else json.loads(response.body) if not self._api_client.vertexai: - response_dict = _TuningOperation_from_mldev(response_dict) + response_dict = _TuningOperation_from_mldev( + response_dict, None, parameter_model + ) return_value = types.TuningOperation._from_response( response=response_dict, kwargs=parameter_model.model_dump() diff --git a/google/genai/types.py b/google/genai/types.py index 5e5f04435..444714602 100644 --- a/google/genai/types.py +++ b/google/genai/types.py @@ -657,6 +657,15 @@ class FunctionCallingConfigMode(_common.CaseInSensitiveEnum): """Model decides to predict either a function call or a natural language response, but will validate function calls with constrained decoding. If "allowed_function_names" are set, the predicted function call will be limited to any one of "allowed_function_names", else the predicted function call will be any one of the provided "function_declarations".""" +class EmbeddingApiType(_common.CaseInSensitiveEnum): + """Enum representing the Vertex embedding API to use.""" + + PREDICT = 'PREDICT' + """predict API endpoint (default)""" + EMBED_CONTENT = 'EMBED_CONTENT' + """embedContent API Endpoint""" + + class SafetyFilterLevel(_common.CaseInSensitiveEnum): """Enum that controls the safety filter level for objectionable content.""" @@ -7079,8 +7088,8 @@ class EmbedContentConfigDict(TypedDict, total=False): EmbedContentConfigOrDict = Union[EmbedContentConfig, EmbedContentConfigDict] -class _EmbedContentParameters(_common.BaseModel): - """Parameters for the embed_content method.""" +class _EmbedContentParametersPrivate(_common.BaseModel): + """Parameters for the _embed_content method.""" model: Optional[str] = Field( default=None, @@ -7092,6 +7101,16 @@ class _EmbedContentParameters(_common.BaseModel): description="""The content to embed. Only the `parts.text` fields will be counted. """, ) + content: Optional[ContentUnion] = Field( + default=None, + description="""The single content to embed. Only the `parts.text` fields will be counted. + """, + ) + embedding_api_type: Optional[EmbeddingApiType] = Field( + default=None, + description="""The Vertex embedding API to use. + """, + ) config: Optional[EmbedContentConfig] = Field( default=None, description="""Configuration that contains optional parameters. @@ -7099,8 +7118,8 @@ class _EmbedContentParameters(_common.BaseModel): ) -class _EmbedContentParametersDict(TypedDict, total=False): - """Parameters for the embed_content method.""" +class _EmbedContentParametersPrivateDict(TypedDict, total=False): + """Parameters for the _embed_content method.""" model: Optional[str] """ID of the model to use. For a list of models, see `Google models @@ -7110,13 +7129,21 @@ class _EmbedContentParametersDict(TypedDict, total=False): """The content to embed. Only the `parts.text` fields will be counted. """ + content: Optional[ContentUnionDict] + """The single content to embed. Only the `parts.text` fields will be counted. + """ + + embedding_api_type: Optional[EmbeddingApiType] + """The Vertex embedding API to use. + """ + config: Optional[EmbedContentConfigDict] """Configuration that contains optional parameters. """ -_EmbedContentParametersOrDict = Union[ - _EmbedContentParameters, _EmbedContentParametersDict +_EmbedContentParametersPrivateOrDict = Union[ + _EmbedContentParametersPrivate, _EmbedContentParametersPrivateDict ] @@ -18045,6 +18072,47 @@ class CreateTuningJobParametersDict(TypedDict, total=False): ] +class EmbedContentParameters(_common.BaseModel): + """Parameters for the embed_content method.""" + + model: Optional[str] = Field( + default=None, + description="""ID of the model to use. For a list of models, see `Google models + `_.""", + ) + contents: Optional[ContentListUnion] = Field( + default=None, + description="""The content to embed. Only the `parts.text` fields will be counted. + """, + ) + config: Optional[EmbedContentConfig] = Field( + default=None, + description="""Configuration that contains optional parameters. + """, + ) + + +class EmbedContentParametersDict(TypedDict, total=False): + """Parameters for the embed_content method.""" + + model: Optional[str] + """ID of the model to use. For a list of models, see `Google models + `_.""" + + contents: Optional[ContentListUnionDict] + """The content to embed. Only the `parts.text` fields will be counted. + """ + + config: Optional[EmbedContentConfigDict] + """Configuration that contains optional parameters. + """ + + +EmbedContentParametersOrDict = Union[ + EmbedContentParameters, EmbedContentParametersDict +] + + class UserContent(Content): """UserContent facilitates the creation of a Content object with a user role.