From f86054fce8eb36172c9a7e0f023e2c1607535497 Mon Sep 17 00:00:00 2001 From: Matthew Tang Date: Wed, 19 Aug 2026 13:05:56 -0700 Subject: [PATCH] chore: Disable GenerateImages for Gemini API PiperOrigin-RevId: 967366817 --- google/genai/models.py | 323 +----------------- .../tests/models/test_generate_images.py | 56 +-- .../shared/models/test_generate_images.py | 1 + 3 files changed, 44 insertions(+), 336 deletions(-) diff --git a/google/genai/models.py b/google/genai/models.py index 45b20c724..c01a5ae5c 100644 --- a/google/genai/models.py +++ b/google/genai/models.py @@ -39,22 +39,6 @@ logger = logging.getLogger('google_genai.models') -def _PersonGeneration_to_mldev_enum_validate(enum_value: Any) -> None: - if enum_value in set(['ALLOW_ALL']): - raise ValueError( - f'{enum_value} enum value is only supported in Gemini Enterprise Agent' - ' Platform mode, not in Gemini Developer API mode.' - ) - - -def _SafetyFilterLevel_to_mldev_enum_validate(enum_value: Any) -> None: - if enum_value in set(['BLOCK_NONE']): - raise ValueError( - f'{enum_value} enum value is only supported in Gemini Enterprise Agent' - ' Platform mode, not in Gemini Developer API mode.' - ) - - def _VideoGenerationReferenceType_to_mldev_enum_validate( enum_value: Any, ) -> None: @@ -1775,135 +1759,6 @@ def _GenerateContentResponse_from_vertex( return to_object -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] = {} - - if getv(from_object, ['output_gcs_uri']) is not None: - raise ValueError( - 'output_gcs_uri parameter is only supported in Gemini Enterprise Agent' - ' Platform mode, not in Gemini Developer API mode.' - ) - - if getv(from_object, ['negative_prompt']) is not None: - raise ValueError( - 'negative_prompt parameter is only supported in Gemini Enterprise Agent' - ' Platform mode, not in Gemini Developer API mode.' - ) - - if getv(from_object, ['number_of_images']) is not None: - setv( - parent_object, - ['parameters', 'sampleCount'], - getv(from_object, ['number_of_images']), - ) - - if getv(from_object, ['aspect_ratio']) is not None: - setv( - parent_object, - ['parameters', 'aspectRatio'], - getv(from_object, ['aspect_ratio']), - ) - - if getv(from_object, ['guidance_scale']) is not None: - setv( - parent_object, - ['parameters', 'guidanceScale'], - getv(from_object, ['guidance_scale']), - ) - - if getv(from_object, ['seed']) is not None: - raise ValueError( - 'seed parameter is only supported in Gemini Enterprise Agent Platform' - ' mode, not in Gemini Developer API mode.' - ) - - if getv(from_object, ['safety_filter_level']) is not None: - _SafetyFilterLevel_to_mldev_enum_validate( - getv(from_object, ['safety_filter_level']) - ) - setv( - parent_object, - ['parameters', 'safetySetting'], - getv(from_object, ['safety_filter_level']), - ) - - if getv(from_object, ['person_generation']) is not None: - _PersonGeneration_to_mldev_enum_validate( - getv(from_object, ['person_generation']) - ) - setv( - parent_object, - ['parameters', 'personGeneration'], - getv(from_object, ['person_generation']), - ) - - if getv(from_object, ['include_safety_attributes']) is not None: - setv( - parent_object, - ['parameters', 'includeSafetyAttributes'], - getv(from_object, ['include_safety_attributes']), - ) - - if getv(from_object, ['include_rai_reason']) is not None: - setv( - parent_object, - ['parameters', 'includeRaiReason'], - getv(from_object, ['include_rai_reason']), - ) - - if getv(from_object, ['language']) is not None: - setv( - parent_object, - ['parameters', 'language'], - getv(from_object, ['language']), - ) - - if getv(from_object, ['output_mime_type']) is not None: - setv( - parent_object, - ['parameters', 'outputOptions', 'mimeType'], - getv(from_object, ['output_mime_type']), - ) - - if getv(from_object, ['output_compression_quality']) is not None: - setv( - parent_object, - ['parameters', 'outputOptions', 'compressionQuality'], - getv(from_object, ['output_compression_quality']), - ) - - if getv(from_object, ['add_watermark']) is not None: - raise ValueError( - 'add_watermark parameter is only supported in Gemini Enterprise Agent' - ' Platform mode, not in Gemini Developer API mode.' - ) - - if getv(from_object, ['labels']) is not None: - raise ValueError( - 'labels parameter is only supported in Gemini Enterprise Agent Platform' - ' mode, not in Gemini Developer API mode.' - ) - - if getv(from_object, ['image_size']) is not None: - setv( - parent_object, - ['parameters', 'sampleImageSize'], - getv(from_object, ['image_size']), - ) - - if getv(from_object, ['enhance_prompt']) is not None: - raise ValueError( - 'enhance_prompt parameter is only supported in Gemini Enterprise Agent' - ' Platform mode, not in Gemini Developer API mode.' - ) - - return to_object - - def _GenerateImagesConfig_to_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, @@ -2025,31 +1880,6 @@ def _GenerateImagesConfig_to_vertex( return to_object -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: - setv( - to_object, - ['_url', 'model'], - t.t_model(api_client, getv(from_object, ['model'])), - ) - - if getv(from_object, ['prompt']) is not None: - 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, root_object - ) - - return to_object - - def _GenerateImagesParameters_to_vertex( api_client: BaseApiClient, from_object: Union[dict[str, Any], object], @@ -2075,41 +1905,6 @@ def _GenerateImagesParameters_to_vertex( return to_object -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: - setv( - to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse']) - ) - - if getv(from_object, ['predictions']) is not None: - setv( - to_object, - ['generated_images'], - [ - _GeneratedImage_from_mldev(item, to_object, root_object) - for item in getv(from_object, ['predictions']) - ], - ) - - if getv(from_object, ['positivePromptSafetyAttributes']) is not None: - setv( - to_object, - ['positive_prompt_safety_attributes'], - _SafetyAttributes_from_mldev( - getv(from_object, ['positivePromptSafetyAttributes']), - to_object, - root_object, - ), - ) - - return to_object - - def _GenerateImagesResponse_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, @@ -2738,38 +2533,6 @@ def _GeneratedImageMask_from_vertex( return to_object -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, root_object), - ) - - if getv(from_object, ['raiFilteredReason']) is not None: - setv( - to_object, - ['rai_filtered_reason'], - getv(from_object, ['raiFilteredReason']), - ) - - if getv(from_object, ['_self']) is not None: - setv( - to_object, - ['safety_attributes'], - _SafetyAttributes_from_mldev( - getv(from_object, ['_self']), to_object, root_object - ), - ) - - return to_object - - def _GeneratedImage_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, @@ -3165,26 +2928,6 @@ def _ImageConfig_to_vertex( return to_object -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] = {} - - if getv(from_object, ['bytesBase64Encoded']) is not None: - setv( - to_object, - ['image_bytes'], - base_t.t_bytes(getv(from_object, ['bytesBase64Encoded'])), - ) - - if getv(from_object, ['mimeType']) is not None: - setv(to_object, ['mime_type'], getv(from_object, ['mimeType'])) - - return to_object - - def _Image_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, @@ -4013,30 +3756,6 @@ def _ReplicatedVoiceConfig_to_vertex( return to_object -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: - setv( - to_object, - ['categories'], - getv(from_object, ['safetyAttributes', 'categories']), - ) - - if getv(from_object, ['safetyAttributes', 'scores']) is not None: - setv( - to_object, ['scores'], getv(from_object, ['safetyAttributes', 'scores']) - ) - - if getv(from_object, ['contentType']) is not None: - setv(to_object, ['content_type'], getv(from_object, ['contentType'])) - - return to_object - - def _SafetyAttributes_from_vertex( from_object: Union[dict[str, Any], object], parent_object: Optional[dict[str, Any]] = None, @@ -5260,18 +4979,13 @@ def _generate_images( ) request_url_dict: Optional[dict[str, str]] - - if self._api_client.vertexai: - request_dict = _GenerateImagesParameters_to_vertex( - self._api_client, parameter_model, None, parameter_model + if not self._api_client.vertexai: + raise ValueError( + 'This method is only supported in Gemini Enterprise Agent Platform' + ' mode, not in Gemini Developer API mode.' ) - request_url_dict = request_dict.get('_url') - if request_url_dict: - path = '{model}:predict'.format_map(request_url_dict) - else: - path = '{model}:predict' else: - request_dict = _GenerateImagesParameters_to_mldev( + request_dict = _GenerateImagesParameters_to_vertex( self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') @@ -5279,6 +4993,7 @@ def _generate_images( path = '{model}:predict'.format_map(request_url_dict) else: path = '{model}:predict' + query_params = request_dict.get('_query') if query_params: path = f'{path}?{urlencode(query_params)}' @@ -5306,11 +5021,6 @@ def _generate_images( response_dict, None, parameter_model ) - if not self._api_client.vertexai: - response_dict = _GenerateImagesResponse_from_mldev( - response_dict, None, parameter_model - ) - return_value = types.GenerateImagesResponse._from_response( response=response_dict, kwargs={ @@ -7472,18 +7182,13 @@ async def _generate_images( ) request_url_dict: Optional[dict[str, str]] - - if self._api_client.vertexai: - request_dict = _GenerateImagesParameters_to_vertex( - self._api_client, parameter_model, None, parameter_model + if not self._api_client.vertexai: + raise ValueError( + 'This method is only supported in Gemini Enterprise Agent Platform' + ' mode, not in Gemini Developer API mode.' ) - request_url_dict = request_dict.get('_url') - if request_url_dict: - path = '{model}:predict'.format_map(request_url_dict) - else: - path = '{model}:predict' else: - request_dict = _GenerateImagesParameters_to_mldev( + request_dict = _GenerateImagesParameters_to_vertex( self._api_client, parameter_model, None, parameter_model ) request_url_dict = request_dict.get('_url') @@ -7491,6 +7196,7 @@ async def _generate_images( path = '{model}:predict'.format_map(request_url_dict) else: path = '{model}:predict' + query_params = request_dict.get('_query') if query_params: path = f'{path}?{urlencode(query_params)}' @@ -7518,11 +7224,6 @@ async def _generate_images( response_dict, None, parameter_model ) - if not self._api_client.vertexai: - response_dict = _GenerateImagesResponse_from_mldev( - response_dict, None, parameter_model - ) - return_value = types.GenerateImagesResponse._from_response( response=response_dict, kwargs={ diff --git a/google/genai/tests/models/test_generate_images.py b/google/genai/tests/models/test_generate_images.py index 96a49fddb..53516cef9 100644 --- a/google/genai/tests/models/test_generate_images.py +++ b/google/genai/tests/models/test_generate_images.py @@ -26,6 +26,7 @@ test_table: list[pytest_helper.TestTableItem] = [ pytest_helper.TestTableItem( name='test_simple_prompt', + exception_if_mldev='only supported in Gemini Enterprise Agent Platform', parameters=types._GenerateImagesParameters( model=IMAGEN_MODEL_LATEST, prompt='Red skateboard', @@ -37,7 +38,7 @@ ), pytest_helper.TestTableItem( name='test_all_vertexai_config_parameters', - exception_if_mldev='only supported in Gemini Enterprise Agent Platform mode', + exception_if_mldev='only supported in Gemini Enterprise Agent Platform', parameters=types._GenerateImagesParameters( model=IMAGEN_MODEL_LATEST, prompt='Red skateboard', @@ -64,7 +65,7 @@ ), pytest_helper.TestTableItem( name='test_all_vertexai_config_person_generation_enum_parameters', - exception_if_mldev='enum value is only supported in Gemini Enterprise Agent Platform mode', + exception_if_mldev='only supported in Gemini Enterprise Agent Platform', parameters=types._GenerateImagesParameters( model=IMAGEN_MODEL_LATEST, prompt='Robot holding a red skateboard', @@ -77,7 +78,7 @@ ), pytest_helper.TestTableItem( name='test_all_vertexai_config_person_generation_enum_parameters_2', - exception_if_mldev='enum value is only supported in Gemini Enterprise Agent Platform mode', + exception_if_mldev='only supported in Gemini Enterprise Agent Platform', parameters=types._GenerateImagesParameters( model=IMAGEN_MODEL_LATEST, prompt='Robot holding a red skateboard', @@ -90,7 +91,7 @@ ), pytest_helper.TestTableItem( name='test_all_vertexai_config_person_generation_enum_parameters_3', - exception_if_mldev='enum value is only supported in Gemini Enterprise Agent Platform mode', + exception_if_mldev='only supported in Gemini Enterprise Agent Platform', parameters=types._GenerateImagesParameters( model=IMAGEN_MODEL_LATEST, prompt='Robot holding a red skateboard', @@ -103,6 +104,7 @@ ), pytest_helper.TestTableItem( name='test_all_vertexai_config_safety_filter_level_enum_parameters', + exception_if_mldev='only supported in Gemini Enterprise Agent Platform', parameters=types._GenerateImagesParameters( model=IMAGEN_MODEL_LATEST, prompt='Robot holding a red skateboard', @@ -115,6 +117,7 @@ ), pytest_helper.TestTableItem( name='test_all_vertexai_config_safety_filter_level_enum_parameters_2', + exception_if_mldev='only supported in Gemini Enterprise Agent Platform', parameters=types._GenerateImagesParameters( model=IMAGEN_MODEL_LATEST, prompt='Robot holding a red skateboard', @@ -127,6 +130,7 @@ ), pytest_helper.TestTableItem( name='test_all_vertexai_config_safety_filter_level_enum_parameters_3', + exception_if_mldev='only supported in Gemini Enterprise Agent Platform', parameters=types._GenerateImagesParameters( model=IMAGEN_MODEL_LATEST, prompt='Robot holding a red skateboard', @@ -139,6 +143,7 @@ ), pytest_helper.TestTableItem( name='test_all_mldev_config_parameters', + exception_if_mldev='only supported in Gemini Enterprise Agent Platform', parameters=types._GenerateImagesParameters( model=IMAGEN_MODEL_LATEST, prompt='Red skateboard', @@ -167,25 +172,26 @@ @pytest.mark.asyncio async def test_simple_prompt_async(client): - response = await client.aio.models.generate_images( - model=IMAGEN_MODEL_LATEST, - prompt='Red skateboard', - config=types.GenerateImagesConfig( - number_of_images=1, - output_mime_type='image/jpeg', - include_safety_attributes=True, - include_rai_reason=True, - ), - ) + with pytest_helper.exception_if_mldev(client, ValueError): + response = await client.aio.models.generate_images( + model=IMAGEN_MODEL_LATEST, + prompt='Red skateboard', + config=types.GenerateImagesConfig( + number_of_images=1, + output_mime_type='image/jpeg', + include_safety_attributes=True, + include_rai_reason=True, + ), + ) - assert response.generated_images[0].image.image_bytes - # Verify the images accessor works correctly. - assert ( - response.generated_images[0].image.image_bytes - == response.images[0].image_bytes - ) - assert len(response.generated_images) == 1 - assert ( - response.positive_prompt_safety_attributes.content_type - == 'Positive Prompt' - ) + assert response.generated_images[0].image.image_bytes + # Verify the images accessor works correctly. + assert ( + response.generated_images[0].image.image_bytes + == response.images[0].image_bytes + ) + assert len(response.generated_images) == 1 + assert ( + response.positive_prompt_safety_attributes.content_type + == 'Positive Prompt' + ) diff --git a/google/genai/tests/shared/models/test_generate_images.py b/google/genai/tests/shared/models/test_generate_images.py index cea305b9c..3e85fb9b2 100644 --- a/google/genai/tests/shared/models/test_generate_images.py +++ b/google/genai/tests/shared/models/test_generate_images.py @@ -22,6 +22,7 @@ test_table: list[pytest_helper.TestTableItem] = [ pytest_helper.TestTableItem( name='test_simple_prompt', + exception_if_mldev='only supported in Gemini Enterprise Agent Platform', parameters=types._GenerateImagesParameters( model=IMAGEN_MODEL_LATEST, prompt='Red skateboard',