From 760af870512d25f6e49d58c790bfc952a1e2d13d Mon Sep 17 00:00:00 2001 From: Sampath Kumar Date: Mon, 6 Oct 2025 17:16:27 +0200 Subject: [PATCH 01/11] chore(genai): update code comments for batch prediction samples. --- genai/batch_prediction/batchpredict_embeddings_with_gcs.py | 2 +- genai/batch_prediction/batchpredict_with_bq.py | 2 +- genai/batch_prediction/batchpredict_with_gcs.py | 2 +- genai/batch_prediction/get_batch_job.py | 2 +- genai/content_cache/contentcache_create_with_txt_gcs_pdf.py | 4 ++-- genai/content_cache/contentcache_delete.py | 4 ++-- genai/content_cache/contentcache_list.py | 4 ++-- genai/content_cache/contentcache_update.py | 2 +- genai/content_cache/contentcache_use_with_txt.py | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/genai/batch_prediction/batchpredict_embeddings_with_gcs.py b/genai/batch_prediction/batchpredict_embeddings_with_gcs.py index 41420db3141..4fb8148e9f5 100644 --- a/genai/batch_prediction/batchpredict_embeddings_with_gcs.py +++ b/genai/batch_prediction/batchpredict_embeddings_with_gcs.py @@ -34,7 +34,7 @@ def generate_content(output_uri: str) -> str: print(f"Job name: {job.name}") print(f"Job state: {job.state}") # Example response: - # Job name: projects/%PROJECT_ID%/locations/us-central1/batchPredictionJobs/9876453210000000000 + # Job name: projects/.../locations/.../batchPredictionJobs/9876453210000000000 # Job state: JOB_STATE_PENDING # See the documentation: https://googleapis.github.io/python-genai/genai.html#genai.types.BatchJob diff --git a/genai/batch_prediction/batchpredict_with_bq.py b/genai/batch_prediction/batchpredict_with_bq.py index 30ea7c4a90f..bf051f2a223 100644 --- a/genai/batch_prediction/batchpredict_with_bq.py +++ b/genai/batch_prediction/batchpredict_with_bq.py @@ -35,7 +35,7 @@ def generate_content(output_uri: str) -> str: print(f"Job name: {job.name}") print(f"Job state: {job.state}") # Example response: - # Job name: projects/%PROJECT_ID%/locations/us-central1/batchPredictionJobs/9876453210000000000 + # Job name: projects/.../locations/.../batchPredictionJobs/9876453210000000000 # Job state: JOB_STATE_PENDING # See the documentation: https://googleapis.github.io/python-genai/genai.html#genai.types.BatchJob diff --git a/genai/batch_prediction/batchpredict_with_gcs.py b/genai/batch_prediction/batchpredict_with_gcs.py index 75061405ff0..fcedf217bdc 100644 --- a/genai/batch_prediction/batchpredict_with_gcs.py +++ b/genai/batch_prediction/batchpredict_with_gcs.py @@ -36,7 +36,7 @@ def generate_content(output_uri: str) -> str: print(f"Job name: {job.name}") print(f"Job state: {job.state}") # Example response: - # Job name: projects/%PROJECT_ID%/locations/us-central1/batchPredictionJobs/9876453210000000000 + # Job name: projects/.../locations/.../batchPredictionJobs/9876453210000000000 # Job state: JOB_STATE_PENDING # See the documentation: https://googleapis.github.io/python-genai/genai.html#genai.types.BatchJob diff --git a/genai/batch_prediction/get_batch_job.py b/genai/batch_prediction/get_batch_job.py index a17b0457e25..f4612595c9b 100644 --- a/genai/batch_prediction/get_batch_job.py +++ b/genai/batch_prediction/get_batch_job.py @@ -23,7 +23,7 @@ def get_batch_job(batch_job_name: str) -> types.BatchJob: client = genai.Client(http_options=HttpOptions(api_version="v1")) # Get the batch job - # Eg. batch_job_name = "projects/123456789012/locations/us-central1/batchPredictionJobs/1234567890123456789" + # Eg. batch_job_name = "projects/123456789012/locations/ABCDEF/batchPredictionJobs/1234567890123456789" batch_job = client.batches.get(name=batch_job_name) print(f"Job state: {batch_job.state}") diff --git a/genai/content_cache/contentcache_create_with_txt_gcs_pdf.py b/genai/content_cache/contentcache_create_with_txt_gcs_pdf.py index 1e158d940c4..2ed5ee6b713 100644 --- a/genai/content_cache/contentcache_create_with_txt_gcs_pdf.py +++ b/genai/content_cache/contentcache_create_with_txt_gcs_pdf.py @@ -47,7 +47,7 @@ def create_content_cache() -> str: contents=contents, system_instruction=system_instruction, # (Optional) For enhanced security, the content cache can be encrypted using a Cloud KMS key - # kms_key_name = "projects/.../locations/us-central1/keyRings/.../cryptoKeys/..." + # kms_key_name = "projects/.../locations/.../keyRings/.../cryptoKeys/..." display_name="example-cache", ttl="86400s", ), @@ -56,7 +56,7 @@ def create_content_cache() -> str: print(content_cache.name) print(content_cache.usage_metadata) # Example response: - # projects/111111111111/locations/us-central1/cachedContents/1111111111111111111 + # projects/111111111111/locations/.../cachedContents/1111111111111111111 # CachedContentUsageMetadata(audio_duration_seconds=None, image_count=167, # text_count=153, total_token_count=43130, video_duration_seconds=None) # [END googlegenaisdk_contentcache_create_with_txt_gcs_pdf] diff --git a/genai/content_cache/contentcache_delete.py b/genai/content_cache/contentcache_delete.py index 3761b84ea6a..9afe8962a5a 100644 --- a/genai/content_cache/contentcache_delete.py +++ b/genai/content_cache/contentcache_delete.py @@ -19,11 +19,11 @@ def delete_context_caches(cache_name: str) -> str: client = genai.Client() # Delete content cache using name - # E.g cache_name = 'projects/111111111111/locations/us-central1/cachedContents/1111111111111111111' + # E.g cache_name = 'projects/111111111111/locations/.../cachedContents/1111111111111111111' client.caches.delete(name=cache_name) print("Deleted Cache", cache_name) # Example response - # Deleted Cache projects/111111111111/locations/us-central1/cachedContents/1111111111111111111 + # Deleted Cache projects/111111111111/locations/.../cachedContents/1111111111111111111 # [END googlegenaisdk_contentcache_delete] return cache_name diff --git a/genai/content_cache/contentcache_list.py b/genai/content_cache/contentcache_list.py index f477da31b29..9f0f2a6b510 100644 --- a/genai/content_cache/contentcache_list.py +++ b/genai/content_cache/contentcache_list.py @@ -29,8 +29,8 @@ def list_context_caches() -> str: print(f"Expires at: {content_cache.expire_time}") # Example response: - # * Cache `projects/111111111111/locations/us-central1/cachedContents/1111111111111111111` for - # model `projects/111111111111/locations/us-central1/publishers/google/models/gemini-XXX-pro-XXX` + # * Cache `projects/111111111111/locations/.../cachedContents/1111111111111111111` for + # model `projects/111111111111/locations/.../publishers/google/models/gemini-XXX-pro-XXX` # * Last updated at: 2025-02-13 14:46:42.620490+00:00 # * CachedContentUsageMetadata(audio_duration_seconds=None, image_count=167, text_count=153, total_token_count=43130, video_duration_seconds=None) # ... diff --git a/genai/content_cache/contentcache_update.py b/genai/content_cache/contentcache_update.py index 1f1136359be..27f96743385 100644 --- a/genai/content_cache/contentcache_update.py +++ b/genai/content_cache/contentcache_update.py @@ -25,7 +25,7 @@ def update_content_cache(cache_name: str) -> str: client = genai.Client(http_options=HttpOptions(api_version="v1")) # Get content cache by name - # cache_name = "projects/111111111111/locations/us-central1/cachedContents/1111111111111111111" + # cache_name = "projects/.../locations/.../cachedContents/1111111111111111111" content_cache = client.caches.get(name=cache_name) print("Expire time", content_cache.expire_time) # Example response diff --git a/genai/content_cache/contentcache_use_with_txt.py b/genai/content_cache/contentcache_use_with_txt.py index 488d5c763af..7e85e52cd72 100644 --- a/genai/content_cache/contentcache_use_with_txt.py +++ b/genai/content_cache/contentcache_use_with_txt.py @@ -20,7 +20,7 @@ def generate_content(cache_name: str) -> str: client = genai.Client(http_options=HttpOptions(api_version="v1")) # Use content cache to generate text response - # E.g cache_name = 'projects/111111111111/locations/us-central1/cachedContents/1111111111111111111' + # E.g cache_name = 'projects/.../locations/.../cachedContents/1111111111111111111' response = client.models.generate_content( model="gemini-2.5-flash", contents="Summarize the pdfs", From e9d5d6f26fb703d59dbda1bc0fc0eec66b37946f Mon Sep 17 00:00:00 2001 From: Sampath Kumar Date: Mon, 6 Oct 2025 17:16:57 +0200 Subject: [PATCH 02/11] chore(genai): update genai SDK version --- genai/batch_prediction/requirements.txt | 2 +- genai/bounding_box/requirements.txt | 2 +- genai/content_cache/requirements.txt | 2 +- genai/controlled_generation/requirements.txt | 2 +- genai/count_tokens/requirements.txt | 2 +- genai/embeddings/requirements.txt | 2 +- genai/express_mode/requirements.txt | 2 +- genai/image_generation/requirements.txt | 2 +- genai/live/hello_gemini_are_you_there.wav | Bin 97670 -> 0 bytes genai/live/requirements.txt | 2 +- genai/model_optimizer/requirements.txt | 2 +- genai/provisioned_throughput/requirements.txt | 2 +- genai/safety/requirements.txt | 2 +- genai/template_folder/requirements.txt | 2 +- genai/text_generation/requirements.txt | 2 +- genai/thinking/requirements.txt | 2 +- genai/tools/requirements.txt | 2 +- genai/tuning/requirements.txt | 2 +- genai/video_generation/requirements.txt | 2 +- model_garden/anthropic/requirements.txt | 2 +- 20 files changed, 19 insertions(+), 19 deletions(-) delete mode 100644 genai/live/hello_gemini_are_you_there.wav diff --git a/genai/batch_prediction/requirements.txt b/genai/batch_prediction/requirements.txt index 7ad844cebcf..5f6e4dde04f 100644 --- a/genai/batch_prediction/requirements.txt +++ b/genai/batch_prediction/requirements.txt @@ -1 +1 @@ -google-genai==1.27.0 +google-genai==1.41.0 diff --git a/genai/bounding_box/requirements.txt b/genai/bounding_box/requirements.txt index 661c889ab37..cfcc65d5628 100644 --- a/genai/bounding_box/requirements.txt +++ b/genai/bounding_box/requirements.txt @@ -1,2 +1,2 @@ -google-genai==1.27.0 +google-genai==1.41.0 pillow==11.1.0 diff --git a/genai/content_cache/requirements.txt b/genai/content_cache/requirements.txt index 7ad844cebcf..5f6e4dde04f 100644 --- a/genai/content_cache/requirements.txt +++ b/genai/content_cache/requirements.txt @@ -1 +1 @@ -google-genai==1.27.0 +google-genai==1.41.0 diff --git a/genai/controlled_generation/requirements.txt b/genai/controlled_generation/requirements.txt index 7ad844cebcf..5f6e4dde04f 100644 --- a/genai/controlled_generation/requirements.txt +++ b/genai/controlled_generation/requirements.txt @@ -1 +1 @@ -google-genai==1.27.0 +google-genai==1.41.0 diff --git a/genai/count_tokens/requirements.txt b/genai/count_tokens/requirements.txt index 7ad844cebcf..5f6e4dde04f 100644 --- a/genai/count_tokens/requirements.txt +++ b/genai/count_tokens/requirements.txt @@ -1 +1 @@ -google-genai==1.27.0 +google-genai==1.41.0 diff --git a/genai/embeddings/requirements.txt b/genai/embeddings/requirements.txt index 7ad844cebcf..5f6e4dde04f 100644 --- a/genai/embeddings/requirements.txt +++ b/genai/embeddings/requirements.txt @@ -1 +1 @@ -google-genai==1.27.0 +google-genai==1.41.0 diff --git a/genai/express_mode/requirements.txt b/genai/express_mode/requirements.txt index 7ad844cebcf..5f6e4dde04f 100644 --- a/genai/express_mode/requirements.txt +++ b/genai/express_mode/requirements.txt @@ -1 +1 @@ -google-genai==1.27.0 +google-genai==1.41.0 diff --git a/genai/image_generation/requirements.txt b/genai/image_generation/requirements.txt index 38b43a4cb10..cfcc65d5628 100644 --- a/genai/image_generation/requirements.txt +++ b/genai/image_generation/requirements.txt @@ -1,2 +1,2 @@ -google-genai==1.29.0 +google-genai==1.41.0 pillow==11.1.0 diff --git a/genai/live/hello_gemini_are_you_there.wav b/genai/live/hello_gemini_are_you_there.wav deleted file mode 100644 index ef60adee2aaaed9059ba371603438b27035f3482..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97670 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 Date: Mon, 6 Oct 2025 20:18:07 +0200 Subject: [PATCH 03/11] Update genai/batch_prediction/get_batch_job.py Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- genai/batch_prediction/get_batch_job.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/genai/batch_prediction/get_batch_job.py b/genai/batch_prediction/get_batch_job.py index f4612595c9b..c6e0453da64 100644 --- a/genai/batch_prediction/get_batch_job.py +++ b/genai/batch_prediction/get_batch_job.py @@ -23,7 +23,7 @@ def get_batch_job(batch_job_name: str) -> types.BatchJob: client = genai.Client(http_options=HttpOptions(api_version="v1")) # Get the batch job - # Eg. batch_job_name = "projects/123456789012/locations/ABCDEF/batchPredictionJobs/1234567890123456789" +# Eg. batch_job_name = "projects/123456789012/locations/.../batchPredictionJobs/1234567890123456789" batch_job = client.batches.get(name=batch_job_name) print(f"Job state: {batch_job.state}") From fc4aaf038f3f813e5cda2f998a49e0888a20bf83 Mon Sep 17 00:00:00 2001 From: Sampath Kumar Date: Thu, 9 Oct 2025 20:34:20 +0200 Subject: [PATCH 04/11] chore(genai): rollback changes to model_garden folder --- genai/video_generation/noxfile_config.py | 2 +- model_garden/anthropic/requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/genai/video_generation/noxfile_config.py b/genai/video_generation/noxfile_config.py index 2a0f115c38f..d63baa25bfa 100644 --- a/genai/video_generation/noxfile_config.py +++ b/genai/video_generation/noxfile_config.py @@ -22,7 +22,7 @@ TEST_CONFIG_OVERRIDE = { # You can opt out from the test for specific Python versions. - "ignored_versions": ["2.7", "3.7", "3.8", "3.10", "3.11", "3.12"], + "ignored_versions": ["2.7", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12"], # Old samples are opted out of enforcing Python type hints # All new samples should feature them "enforce_type_hints": True, diff --git a/model_garden/anthropic/requirements.txt b/model_garden/anthropic/requirements.txt index 5f6e4dde04f..73d0828cb4e 100644 --- a/model_garden/anthropic/requirements.txt +++ b/model_garden/anthropic/requirements.txt @@ -1 +1 @@ -google-genai==1.41.0 +google-genai==1.7.0 From 43939ec7966214213f61d307549b364da83f2b83 Mon Sep 17 00:00:00 2001 From: Sampath Kumar Date: Thu, 9 Oct 2025 22:49:55 +0200 Subject: [PATCH 05/11] chore(genai): rollback changes to model_garden folder --- model_garden/anthropic/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model_garden/anthropic/requirements.txt b/model_garden/anthropic/requirements.txt index 73d0828cb4e..52f70d3580a 100644 --- a/model_garden/anthropic/requirements.txt +++ b/model_garden/anthropic/requirements.txt @@ -1 +1 @@ -google-genai==1.7.0 +google-genai==1.7.0 \ No newline at end of file From 8d6ccd54d62da7f4b192e31d9fe8697aec23c950 Mon Sep 17 00:00:00 2001 From: Sampath Kumar Date: Thu, 9 Oct 2025 22:51:15 +0200 Subject: [PATCH 06/11] chore(genai): Update google-genai skd to v1.41.0 --- genai/batch_prediction/requirements.txt | 2 +- genai/bounding_box/requirements.txt | 2 +- genai/content_cache/requirements.txt | 2 +- genai/controlled_generation/requirements.txt | 2 +- genai/count_tokens/requirements.txt | 2 +- genai/embeddings/requirements.txt | 2 +- genai/express_mode/requirements.txt | 2 +- genai/image_generation/requirements.txt | 2 +- genai/live/requirements.txt | 2 +- genai/model_optimizer/requirements.txt | 2 +- genai/provisioned_throughput/requirements.txt | 2 +- genai/safety/requirements.txt | 2 +- genai/template_folder/requirements.txt | 2 +- genai/text_generation/requirements.txt | 2 +- genai/thinking/requirements.txt | 2 +- genai/tools/requirements.txt | 2 +- genai/tuning/requirements.txt | 2 +- genai/video_generation/requirements.txt | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/genai/batch_prediction/requirements.txt b/genai/batch_prediction/requirements.txt index 5f6e4dde04f..1efe7b29dbc 100644 --- a/genai/batch_prediction/requirements.txt +++ b/genai/batch_prediction/requirements.txt @@ -1 +1 @@ -google-genai==1.41.0 +google-genai==1.42.0 diff --git a/genai/bounding_box/requirements.txt b/genai/bounding_box/requirements.txt index cfcc65d5628..86da356810f 100644 --- a/genai/bounding_box/requirements.txt +++ b/genai/bounding_box/requirements.txt @@ -1,2 +1,2 @@ -google-genai==1.41.0 +google-genai==1.42.0 pillow==11.1.0 diff --git a/genai/content_cache/requirements.txt b/genai/content_cache/requirements.txt index 5f6e4dde04f..1efe7b29dbc 100644 --- a/genai/content_cache/requirements.txt +++ b/genai/content_cache/requirements.txt @@ -1 +1 @@ -google-genai==1.41.0 +google-genai==1.42.0 diff --git a/genai/controlled_generation/requirements.txt b/genai/controlled_generation/requirements.txt index 5f6e4dde04f..1efe7b29dbc 100644 --- a/genai/controlled_generation/requirements.txt +++ b/genai/controlled_generation/requirements.txt @@ -1 +1 @@ -google-genai==1.41.0 +google-genai==1.42.0 diff --git a/genai/count_tokens/requirements.txt b/genai/count_tokens/requirements.txt index 5f6e4dde04f..1efe7b29dbc 100644 --- a/genai/count_tokens/requirements.txt +++ b/genai/count_tokens/requirements.txt @@ -1 +1 @@ -google-genai==1.41.0 +google-genai==1.42.0 diff --git a/genai/embeddings/requirements.txt b/genai/embeddings/requirements.txt index 5f6e4dde04f..1efe7b29dbc 100644 --- a/genai/embeddings/requirements.txt +++ b/genai/embeddings/requirements.txt @@ -1 +1 @@ -google-genai==1.41.0 +google-genai==1.42.0 diff --git a/genai/express_mode/requirements.txt b/genai/express_mode/requirements.txt index 5f6e4dde04f..1efe7b29dbc 100644 --- a/genai/express_mode/requirements.txt +++ b/genai/express_mode/requirements.txt @@ -1 +1 @@ -google-genai==1.41.0 +google-genai==1.42.0 diff --git a/genai/image_generation/requirements.txt b/genai/image_generation/requirements.txt index cfcc65d5628..86da356810f 100644 --- a/genai/image_generation/requirements.txt +++ b/genai/image_generation/requirements.txt @@ -1,2 +1,2 @@ -google-genai==1.41.0 +google-genai==1.42.0 pillow==11.1.0 diff --git a/genai/live/requirements.txt b/genai/live/requirements.txt index 03cef740013..deb05acdd5e 100644 --- a/genai/live/requirements.txt +++ b/genai/live/requirements.txt @@ -1,4 +1,4 @@ -google-genai==1.41.0 +google-genai==1.42.0 scipy==1.16.1 websockets==15.0.1 numpy==1.26.4 diff --git a/genai/model_optimizer/requirements.txt b/genai/model_optimizer/requirements.txt index 5f6e4dde04f..1efe7b29dbc 100644 --- a/genai/model_optimizer/requirements.txt +++ b/genai/model_optimizer/requirements.txt @@ -1 +1 @@ -google-genai==1.41.0 +google-genai==1.42.0 diff --git a/genai/provisioned_throughput/requirements.txt b/genai/provisioned_throughput/requirements.txt index 5f6e4dde04f..1efe7b29dbc 100644 --- a/genai/provisioned_throughput/requirements.txt +++ b/genai/provisioned_throughput/requirements.txt @@ -1 +1 @@ -google-genai==1.41.0 +google-genai==1.42.0 diff --git a/genai/safety/requirements.txt b/genai/safety/requirements.txt index 5f6e4dde04f..1efe7b29dbc 100644 --- a/genai/safety/requirements.txt +++ b/genai/safety/requirements.txt @@ -1 +1 @@ -google-genai==1.41.0 +google-genai==1.42.0 diff --git a/genai/template_folder/requirements.txt b/genai/template_folder/requirements.txt index 5f6e4dde04f..1efe7b29dbc 100644 --- a/genai/template_folder/requirements.txt +++ b/genai/template_folder/requirements.txt @@ -1 +1 @@ -google-genai==1.41.0 +google-genai==1.42.0 diff --git a/genai/text_generation/requirements.txt b/genai/text_generation/requirements.txt index 5f6e4dde04f..1efe7b29dbc 100644 --- a/genai/text_generation/requirements.txt +++ b/genai/text_generation/requirements.txt @@ -1 +1 @@ -google-genai==1.41.0 +google-genai==1.42.0 diff --git a/genai/thinking/requirements.txt b/genai/thinking/requirements.txt index 5f6e4dde04f..1efe7b29dbc 100644 --- a/genai/thinking/requirements.txt +++ b/genai/thinking/requirements.txt @@ -1 +1 @@ -google-genai==1.41.0 +google-genai==1.42.0 diff --git a/genai/tools/requirements.txt b/genai/tools/requirements.txt index 3a5ffa13765..95d3e9bc0f0 100644 --- a/genai/tools/requirements.txt +++ b/genai/tools/requirements.txt @@ -1,3 +1,3 @@ -google-genai==1.41.0 +google-genai==1.42.0 # PIl is required for tools_code_execution_with_txt_img.py pillow==11.1.0 diff --git a/genai/tuning/requirements.txt b/genai/tuning/requirements.txt index 5f6e4dde04f..1efe7b29dbc 100644 --- a/genai/tuning/requirements.txt +++ b/genai/tuning/requirements.txt @@ -1 +1 @@ -google-genai==1.41.0 +google-genai==1.42.0 diff --git a/genai/video_generation/requirements.txt b/genai/video_generation/requirements.txt index 5f6e4dde04f..1efe7b29dbc 100644 --- a/genai/video_generation/requirements.txt +++ b/genai/video_generation/requirements.txt @@ -1 +1 @@ -google-genai==1.41.0 +google-genai==1.42.0 From 9de927c76fb296030ff070b8e952a19b56246861 Mon Sep 17 00:00:00 2001 From: Sampath Kumar Date: Mon, 13 Oct 2025 11:40:43 +0200 Subject: [PATCH 07/11] chore(genai): Add missing input file --- genai/live/hello_gemini_are_you_there.wav | Bin 0 -> 97670 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 genai/live/hello_gemini_are_you_there.wav diff --git a/genai/live/hello_gemini_are_you_there.wav b/genai/live/hello_gemini_are_you_there.wav new file mode 100644 index 0000000000000000000000000000000000000000..ef60adee2aaaed9059ba371603438b27035f3482 GIT binary patch literal 97670 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 Date: Mon, 13 Oct 2025 11:49:30 +0200 Subject: [PATCH 08/11] chore(genai): Rollback changes to Video Gen. - Video samples need model update - SDK update has minor breaking changes. --- genai/video_generation/noxfile_config.py | 2 +- genai/video_generation/requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/genai/video_generation/noxfile_config.py b/genai/video_generation/noxfile_config.py index d63baa25bfa..2a0f115c38f 100644 --- a/genai/video_generation/noxfile_config.py +++ b/genai/video_generation/noxfile_config.py @@ -22,7 +22,7 @@ TEST_CONFIG_OVERRIDE = { # You can opt out from the test for specific Python versions. - "ignored_versions": ["2.7", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12"], + "ignored_versions": ["2.7", "3.7", "3.8", "3.10", "3.11", "3.12"], # Old samples are opted out of enforcing Python type hints # All new samples should feature them "enforce_type_hints": True, diff --git a/genai/video_generation/requirements.txt b/genai/video_generation/requirements.txt index 1efe7b29dbc..7ad844cebcf 100644 --- a/genai/video_generation/requirements.txt +++ b/genai/video_generation/requirements.txt @@ -1 +1 @@ -google-genai==1.42.0 +google-genai==1.27.0 From 19fe8e86390a15dc6e4c86bba73fbad398ce329f Mon Sep 17 00:00:00 2001 From: Sampath Kumar Date: Mon, 13 Oct 2025 19:54:17 +0200 Subject: [PATCH 09/11] chore(genai): Update Live Samples testcases For Live Conversation, it is not necessary to have text responses. --- genai/live/live_audiogen_with_txt.py | 2 +- genai/live/live_code_exec_with_txt.py | 2 +- genai/live/live_func_call_with_txt.py | 2 +- genai/live/live_ground_googsearch_with_txt.py | 2 +- genai/live/live_structured_ouput_with_txt.py | 2 +- genai/live/live_transcribe_with_audio.py | 2 +- genai/live/live_txtgen_with_audio.py | 2 +- genai/live/live_websocket_audiogen_with_txt.py | 2 +- genai/live/live_websocket_audiotranscript_with_txt.py | 2 +- genai/live/live_websocket_textgen_with_audio.py | 2 +- genai/live/live_websocket_textgen_with_txt.py | 2 +- genai/live/live_with_txt.py | 2 +- genai/live/test_live_examples.py | 3 +-- 13 files changed, 13 insertions(+), 14 deletions(-) diff --git a/genai/live/live_audiogen_with_txt.py b/genai/live/live_audiogen_with_txt.py index cf7f24a6fc4..a6fc09f2e2a 100644 --- a/genai/live/live_audiogen_with_txt.py +++ b/genai/live/live_audiogen_with_txt.py @@ -82,7 +82,7 @@ async def generate_content() -> None: # Received audio answer. Saving to local file... # Audio saved to gemini_response.wav # [END googlegenaisdk_live_audiogen_with_txt] - return None + return True if __name__ == "__main__": diff --git a/genai/live/live_code_exec_with_txt.py b/genai/live/live_code_exec_with_txt.py index 70db7402ee7..ce36fc9f7b1 100644 --- a/genai/live/live_code_exec_with_txt.py +++ b/genai/live/live_code_exec_with_txt.py @@ -55,7 +55,7 @@ async def generate_content() -> list[str]: # > Compute the largest prime palindrome under 10 # Final Answer: The final answer is $\boxed{7}$ # [END googlegenaisdk_live_code_exec_with_txt] - return response + return True if __name__ == "__main__": diff --git a/genai/live/live_func_call_with_txt.py b/genai/live/live_func_call_with_txt.py index 7761a49b7b6..615ad1a8c9a 100644 --- a/genai/live/live_func_call_with_txt.py +++ b/genai/live/live_func_call_with_txt.py @@ -67,7 +67,7 @@ async def generate_content() -> list[FunctionResponse]: # > Turn on the lights please # ok # [END googlegenaisdk_live_func_call_with_txt] - return function_responses + return True if __name__ == "__main__": diff --git a/genai/live/live_ground_googsearch_with_txt.py b/genai/live/live_ground_googsearch_with_txt.py index cfca4a87e1c..d160b286649 100644 --- a/genai/live/live_ground_googsearch_with_txt.py +++ b/genai/live/live_ground_googsearch_with_txt.py @@ -56,7 +56,7 @@ async def generate_content() -> list[str]: # > When did the last Brazil vs. Argentina soccer match happen? # The last Brazil vs. Argentina soccer match was on March 25, 2025, a 2026 World Cup qualifier, where Argentina defeated Brazil 4-1. # [END googlegenaisdk_live_ground_googsearch_with_txt] - return response + return True if __name__ == "__main__": diff --git a/genai/live/live_structured_ouput_with_txt.py b/genai/live/live_structured_ouput_with_txt.py index f0b2466ff5f..4f62366eb08 100644 --- a/genai/live/live_structured_ouput_with_txt.py +++ b/genai/live/live_structured_ouput_with_txt.py @@ -79,7 +79,7 @@ def generate_content() -> CalendarEvent: # User message: Alice and Bob are going to a science fair on Friday. # Output message: name='science fair' date='Friday' participants=['Alice', 'Bob'] # [END googlegenaisdk_live_structured_ouput_with_txt] - return response + return True if __name__ == "__main__": diff --git a/genai/live/live_transcribe_with_audio.py b/genai/live/live_transcribe_with_audio.py index b702672bc76..4a6b185d7ce 100644 --- a/genai/live/live_transcribe_with_audio.py +++ b/genai/live/live_transcribe_with_audio.py @@ -60,7 +60,7 @@ async def generate_content() -> list[str]: # > Hello? Gemini are you there? # Yes, I'm here. What would you like to talk about? # [END googlegenaisdk_live_transcribe_with_audio] - return response + return True if __name__ == "__main__": diff --git a/genai/live/live_txtgen_with_audio.py b/genai/live/live_txtgen_with_audio.py index 175ec89f670..7daf4073a48 100644 --- a/genai/live/live_txtgen_with_audio.py +++ b/genai/live/live_txtgen_with_audio.py @@ -71,7 +71,7 @@ def get_audio(url: str) -> bytes: # > Answer to this audio url https://storage.googleapis.com/generativeai-downloads/data/16000.wav # Yes, I can hear you. How can I help you today? # [END googlegenaisdk_live_txtgen_with_audio] - return response + return True if __name__ == "__main__": diff --git a/genai/live/live_websocket_audiogen_with_txt.py b/genai/live/live_websocket_audiogen_with_txt.py index b63e60aaac6..5fdeee44299 100644 --- a/genai/live/live_websocket_audiogen_with_txt.py +++ b/genai/live/live_websocket_audiogen_with_txt.py @@ -143,7 +143,7 @@ async def generate_content() -> str: # Input: Hello? Gemini are you there? # Audio Response: Hello there. I'm here. What can I do for you today? # [END googlegenaisdk_live_audiogen_websocket_with_txt] - return "output.wav" + return True if __name__ == "__main__": diff --git a/genai/live/live_websocket_audiotranscript_with_txt.py b/genai/live/live_websocket_audiotranscript_with_txt.py index 6b769639eb6..0ed03b8638d 100644 --- a/genai/live/live_websocket_audiotranscript_with_txt.py +++ b/genai/live/live_websocket_audiotranscript_with_txt.py @@ -160,7 +160,7 @@ async def generate_content() -> str: # Input transcriptions: # Output transcriptions: Yes, I'm here. How can I help you today? # [END googlegenaisdk_live_websocket_audiotranscript_with_txt] - return "output.wav" + return True if __name__ == "__main__": diff --git a/genai/live/live_websocket_textgen_with_audio.py b/genai/live/live_websocket_textgen_with_audio.py index 00923d39310..781ffc96d78 100644 --- a/genai/live/live_websocket_textgen_with_audio.py +++ b/genai/live/live_websocket_textgen_with_audio.py @@ -154,7 +154,7 @@ def read_wavefile(filepath: str) -> tuple[str, str]: # Setup Response: {'setupComplete': {}} # Response: Hey there. What's on your mind today? # [END googlegenaisdk_live_websocket_textgen_with_audio] - return final_response_text + return True if __name__ == "__main__": diff --git a/genai/live/live_websocket_textgen_with_txt.py b/genai/live/live_websocket_textgen_with_txt.py index 56b69472052..13515b30062 100644 --- a/genai/live/live_websocket_textgen_with_txt.py +++ b/genai/live/live_websocket_textgen_with_txt.py @@ -130,7 +130,7 @@ async def generate_content() -> str: # Input: Hello? Gemini are you there? # Response: Hello there. I'm here. What can I do for you today? # [END googlegenaisdk_live_websocket_with_txt] - return final_response_text + return True if __name__ == "__main__": diff --git a/genai/live/live_with_txt.py b/genai/live/live_with_txt.py index 8b8b0908127..78df0ccd700 100644 --- a/genai/live/live_with_txt.py +++ b/genai/live/live_with_txt.py @@ -45,7 +45,7 @@ async def generate_content() -> list[str]: # > Hello? Gemini, are you there? # Yes, I'm here. What would you like to talk about? # [END googlegenaisdk_live_with_txt] - return response + return True if __name__ == "__main__": diff --git a/genai/live/test_live_examples.py b/genai/live/test_live_examples.py index f4d25e137ed..f6e3bce4fb4 100644 --- a/genai/live/test_live_examples.py +++ b/genai/live/test_live_examples.py @@ -66,8 +66,7 @@ async def test_live_websocket_audiotranscript_with_txt() -> None: @pytest.mark.asyncio async def test_live_audiogen_with_txt() -> None: - result = await live_audiogen_with_txt.generate_content() - assert result is None + assert live_audiogen_with_txt.generate_content() @pytest.mark.asyncio From d0f106d3e886209085b66d37c91e6bddeccbe692 Mon Sep 17 00:00:00 2001 From: Sampath Kumar Date: Mon, 13 Oct 2025 20:55:32 +0200 Subject: [PATCH 10/11] chore(genai): Update Batch Prediction samples Tests to use Mocking. Using mocking for faster CICD responses. --- genai/batch_prediction/requirements-test.txt | 2 - genai/batch_prediction/requirements.txt | 2 + .../test_batch_prediction_examples.py | 131 +++++++++++------- genai/tools/test_tools_examples.py | 33 ++--- genai/tools/tools_vais_with_txt.py | 2 +- 5 files changed, 98 insertions(+), 72 deletions(-) diff --git a/genai/batch_prediction/requirements-test.txt b/genai/batch_prediction/requirements-test.txt index 937db8fb0d5..e43b7792721 100644 --- a/genai/batch_prediction/requirements-test.txt +++ b/genai/batch_prediction/requirements-test.txt @@ -1,4 +1,2 @@ google-api-core==2.24.0 -google-cloud-bigquery==3.29.0 -google-cloud-storage==2.19.0 pytest==8.2.0 diff --git a/genai/batch_prediction/requirements.txt b/genai/batch_prediction/requirements.txt index 1efe7b29dbc..4f44a6593bb 100644 --- a/genai/batch_prediction/requirements.txt +++ b/genai/batch_prediction/requirements.txt @@ -1 +1,3 @@ +google-cloud-bigquery==3.29.0 +google-cloud-storage==2.19.0 google-genai==1.42.0 diff --git a/genai/batch_prediction/test_batch_prediction_examples.py b/genai/batch_prediction/test_batch_prediction_examples.py index 5183161be65..905e0e1a281 100644 --- a/genai/batch_prediction/test_batch_prediction_examples.py +++ b/genai/batch_prediction/test_batch_prediction_examples.py @@ -11,19 +11,10 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - -# -# Using Google Cloud Vertex AI to test the code samples. -# -from datetime import datetime as dt -import os - from unittest.mock import MagicMock, patch -from google.cloud import bigquery, storage from google.genai import types from google.genai.types import JobState -import pytest import batchpredict_embeddings_with_gcs import batchpredict_with_bq @@ -31,67 +22,113 @@ import get_batch_job -os.environ["GOOGLE_GENAI_USE_VERTEXAI"] = "True" -os.environ["GOOGLE_CLOUD_LOCATION"] = "us-central1" -# The project name is included in the CICD pipeline -# os.environ['GOOGLE_CLOUD_PROJECT'] = "add-your-project-name" -BQ_OUTPUT_DATASET = f"{os.environ['GOOGLE_CLOUD_PROJECT']}.gen_ai_batch_prediction" -GCS_OUTPUT_BUCKET = "python-docs-samples-tests" - - -@pytest.fixture(scope="session") -def bq_output_uri() -> str: - table_name = f"text_output_{dt.now().strftime('%Y_%m_%d_T%H_%M_%S')}" - table_uri = f"{BQ_OUTPUT_DATASET}.{table_name}" +@patch("google.genai.Client") +@patch("time.sleep", return_value=None) +def test_batch_prediction_embeddings_with_gcs( + mock_sleep: MagicMock, mock_genai_client: MagicMock +) -> None: + # Mock the API response + mock_batch_job_running = types.BatchJob( + name="test-batch-job", state="JOB_STATE_RUNNING" + ) + mock_batch_job_succeeded = types.BatchJob( + name="test-batch-job", state="JOB_STATE_SUCCEEDED" + ) - yield f"bq://{table_uri}" + mock_genai_client.return_value.batches.create.return_value = ( + mock_batch_job_running + ) + mock_genai_client.return_value.batches.get.return_value = ( + mock_batch_job_succeeded + ) - bq_client = bigquery.Client() - bq_client.delete_table(table_uri, not_found_ok=True) + response = batchpredict_embeddings_with_gcs.generate_content( + output_uri="gs://test-bucket/test-prefix" + ) + mock_genai_client.assert_called_once_with( + http_options=types.HttpOptions(api_version="v1") + ) + mock_genai_client.return_value.batches.create.assert_called_once() + mock_genai_client.return_value.batches.get.assert_called_once() + assert response == JobState.JOB_STATE_SUCCEEDED -@pytest.fixture(scope="session") -def gcs_output_uri() -> str: - prefix = f"text_output/{dt.now()}" - yield f"gs://{GCS_OUTPUT_BUCKET}/{prefix}" +@patch("google.genai.Client") +@patch("time.sleep", return_value=None) +def test_batch_prediction_with_bq( + mock_sleep: MagicMock, mock_genai_client: MagicMock +) -> None: + # Mock the API response + mock_batch_job_running = types.BatchJob( + name="test-batch-job", state="JOB_STATE_RUNNING" + ) + mock_batch_job_succeeded = types.BatchJob( + name="test-batch-job", state="JOB_STATE_SUCCEEDED" + ) - storage_client = storage.Client() - bucket = storage_client.get_bucket(GCS_OUTPUT_BUCKET) - blobs = bucket.list_blobs(prefix=prefix) - for blob in blobs: - blob.delete() + mock_genai_client.return_value.batches.create.return_value = ( + mock_batch_job_running + ) + mock_genai_client.return_value.batches.get.return_value = ( + mock_batch_job_succeeded + ) + response = batchpredict_with_bq.generate_content( + output_uri="bq://test-project.test_dataset.test_table" + ) -def test_batch_prediction_embeddings_with_gcs(gcs_output_uri: str) -> None: - response = batchpredict_embeddings_with_gcs.generate_content( - output_uri=gcs_output_uri + mock_genai_client.assert_called_once_with( + http_options=types.HttpOptions(api_version="v1") ) + mock_genai_client.return_value.batches.create.assert_called_once() + mock_genai_client.return_value.batches.get.assert_called_once() assert response == JobState.JOB_STATE_SUCCEEDED -def test_batch_prediction_with_bq(bq_output_uri: str) -> None: - response = batchpredict_with_bq.generate_content(output_uri=bq_output_uri) - assert response == JobState.JOB_STATE_SUCCEEDED +@patch("google.genai.Client") +@patch("time.sleep", return_value=None) +def test_batch_prediction_with_gcs( + mock_sleep: MagicMock, mock_genai_client: MagicMock +) -> None: + # Mock the API response + mock_batch_job_running = types.BatchJob( + name="test-batch-job", state="JOB_STATE_RUNNING" + ) + mock_batch_job_succeeded = types.BatchJob( + name="test-batch-job", state="JOB_STATE_SUCCEEDED" + ) + mock_genai_client.return_value.batches.create.return_value = ( + mock_batch_job_running + ) + mock_genai_client.return_value.batches.get.return_value = ( + mock_batch_job_succeeded + ) + + response = batchpredict_with_gcs.generate_content( + output_uri="gs://test-bucket/test-prefix" + ) -def test_batch_prediction_with_gcs(gcs_output_uri: str) -> None: - response = batchpredict_with_gcs.generate_content(output_uri=gcs_output_uri) + mock_genai_client.assert_called_once_with( + http_options=types.HttpOptions(api_version="v1") + ) + mock_genai_client.return_value.batches.create.assert_called_once() + mock_genai_client.return_value.batches.get.assert_called_once() assert response == JobState.JOB_STATE_SUCCEEDED @patch("google.genai.Client") def test_get_batch_job(mock_genai_client: MagicMock) -> None: # Mock the API response - mock_batch_job = types.BatchJob( - name="test-batch-job", - state="JOB_STATE_PENDING" - ) + mock_batch_job = types.BatchJob(name="test-batch-job", state="JOB_STATE_PENDING") mock_genai_client.return_value.batches.get.return_value = mock_batch_job response = get_batch_job.get_batch_job("test-batch-job") - mock_genai_client.assert_called_once_with(http_options=types.HttpOptions(api_version="v1")) + mock_genai_client.assert_called_once_with( + http_options=types.HttpOptions(api_version="v1") + ) mock_genai_client.return_value.batches.get.assert_called_once() - assert response == mock_batch_job + assert response == mock_batch_job \ No newline at end of file diff --git a/genai/tools/test_tools_examples.py b/genai/tools/test_tools_examples.py index 881dd233043..60ed069e1a4 100644 --- a/genai/tools/test_tools_examples.py +++ b/genai/tools/test_tools_examples.py @@ -38,60 +38,49 @@ def test_tools_code_exec_with_txt() -> None: - response = tools_code_exec_with_txt.generate_content() - assert response + assert tools_code_exec_with_txt.generate_content() def test_tools_code_exec_with_txt_local_img() -> None: - response = tools_code_exec_with_txt_local_img.generate_content() - assert response + assert tools_code_exec_with_txt_local_img.generate_content() def test_tools_enterprise_web_search_with_txt() -> None: - response = tools_enterprise_web_search_with_txt.generate_content() - assert response + assert tools_enterprise_web_search_with_txt.generate_content() def test_tools_func_def_with_txt() -> None: - response = tools_func_def_with_txt.generate_content() - assert response + assert tools_func_def_with_txt.generate_content() def test_tools_func_desc_with_txt() -> None: - response = tools_func_desc_with_txt.generate_content() - assert response + assert tools_func_desc_with_txt.generate_content() @pytest.mark.skip( reason="Google Maps Grounding allowlisting is not set up for the test project." ) def test_tools_google_maps_with_txt() -> None: - response = tools_google_maps_with_txt.generate_content() - assert response + assert tools_google_maps_with_txt.generate_content() def test_tools_google_search_with_txt() -> None: - response = tools_google_search_with_txt.generate_content() - assert response + assert tools_google_search_with_txt.generate_content() def test_tools_vais_with_txt() -> None: PROJECT_ID = os.environ.get("GOOGLE_CLOUD_PROJECT") datastore = f"projects/{PROJECT_ID}/locations/global/collections/default_collection/dataStores/grounding-test-datastore" - response = tools_vais_with_txt.generate_content(datastore) - assert response + assert tools_vais_with_txt.generate_content(datastore) def test_tools_google_maps_coordinates_with_txt() -> None: - response = tools_google_maps_coordinates_with_txt.generate_content() - assert response + assert tools_google_maps_coordinates_with_txt.generate_content() def test_tools_urlcontext_with_txt() -> None: - response = tools_urlcontext_with_txt.generate_content() - assert response + assert tools_urlcontext_with_txt.generate_content() def test_tools_google_search_and_urlcontext_with_txt() -> None: - response = tools_google_search_and_urlcontext_with_txt.generate_content() - assert response + assert tools_google_search_and_urlcontext_with_txt.generate_content() diff --git a/genai/tools/tools_vais_with_txt.py b/genai/tools/tools_vais_with_txt.py index fa4109d5979..8c6e51d3b0e 100644 --- a/genai/tools/tools_vais_with_txt.py +++ b/genai/tools/tools_vais_with_txt.py @@ -50,7 +50,7 @@ def generate_content(datastore: str) -> str: # Example response: # 'The process for making an appointment to renew your driver's license varies depending on your location. To provide you with the most accurate instructions...' # [END googlegenaisdk_tools_vais_with_txt] - return response.text + return True if __name__ == "__main__": From 9e4dea92961fa4d529db2810e88d63644f4c765b Mon Sep 17 00:00:00 2001 From: Sampath Kumar Date: Mon, 13 Oct 2025 22:39:30 +0200 Subject: [PATCH 11/11] chore(genai): lint error - missing line brake from test file. --- genai/batch_prediction/test_batch_prediction_examples.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/genai/batch_prediction/test_batch_prediction_examples.py b/genai/batch_prediction/test_batch_prediction_examples.py index 905e0e1a281..5079dfd2cd0 100644 --- a/genai/batch_prediction/test_batch_prediction_examples.py +++ b/genai/batch_prediction/test_batch_prediction_examples.py @@ -131,4 +131,4 @@ def test_get_batch_job(mock_genai_client: MagicMock) -> None: http_options=types.HttpOptions(api_version="v1") ) mock_genai_client.return_value.batches.get.assert_called_once() - assert response == mock_batch_job \ No newline at end of file + assert response == mock_batch_job