Skip to content

Commit 4f39964

Browse files
feat(genai): add python samples for text generation (2nd batch)
1 parent 6afd47e commit 4f39964

11 files changed

+447
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Copyright 2021 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
# Default TEST_CONFIG_OVERRIDE for python repos.
16+
17+
# You can copy this file into your directory, then it will be imported from
18+
# the noxfile.py.
19+
20+
# The source of truth:
21+
# https://github.com/GoogleCloudPlatform/python-docs-samples/blob/main/noxfile_config.py
22+
23+
TEST_CONFIG_OVERRIDE = {
24+
# You can opt out from the test for specific Python versions.
25+
"ignored_versions": ["2.7", "3.7", "3.8", "3.10", "3.11", "3.13"],
26+
# Old samples are opted out of enforcing Python type hints
27+
# All new samples should feature them
28+
"enforce_type_hints": True,
29+
# An envvar key for determining the project id to use. Change it
30+
# to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a
31+
# build specific Cloud project. You can also use your own string
32+
# to use your own Cloud project.
33+
"gcloud_project_env": "GOOGLE_CLOUD_PROJECT",
34+
# 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT',
35+
# If you need to use a specific version of pip,
36+
# change pip_version_override to the string representation
37+
# of the version number, for example, "20.2.4"
38+
"pip_version_override": None,
39+
# A dictionary you want to inject into your test. Don't put any
40+
# secrets here. These values will override predefined values.
41+
"envs": {},
42+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
google-api-core==2.24.0
2+
pytest==8.2.0
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
google-genai==0.6.0
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# Copyright 2025 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# https://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
import textgen_config_with_txt
16+
import textgen_sys_instr_with_txt
17+
import textgen_with_multi_img
18+
import textgen_with_multi_local_img
19+
import textgen_with_mute_video
20+
import textgen_with_video
21+
22+
23+
def test_textgen_config_with_txt() -> None:
24+
response = textgen_config_with_txt.generate_content()
25+
assert response
26+
27+
28+
def test_textgen_sys_instr_with_txt() -> None:
29+
response = textgen_sys_instr_with_txt.generate_content()
30+
assert response
31+
32+
33+
def test_textgen_with_multi_img() -> None:
34+
response = textgen_with_multi_img.generate_content()
35+
assert response
36+
37+
38+
def test_textgen_with_multi_local_img() -> None:
39+
response = textgen_with_multi_local_img.generate_content()
40+
assert response
41+
42+
43+
def test_textgen_with_mute_video() -> None:
44+
response = textgen_with_mute_video.generate_content()
45+
assert response
46+
47+
48+
def test_textgen_with_video() -> None:
49+
response = textgen_with_video.generate_content()
50+
assert response
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Copyright 2025 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# https://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
16+
def generate_content() -> str:
17+
# [START googlegenaisdk_textgen_config_with_txt]
18+
from google import genai
19+
from google.genai import types
20+
21+
client = genai.Client()
22+
response = client.models.generate_content(
23+
model="gemini-2.0-flash-001",
24+
contents="Why is the sky blue?",
25+
# See the documentation: https://googleapis.github.io/python-genai/genai.html#genai.types.GenerateContentConfig
26+
config=types.GenerateContentConfig(
27+
temperature=0,
28+
candidate_count=1,
29+
response_mime_type="application/json"
30+
)
31+
)
32+
print(response.text)
33+
# Example response:
34+
# {
35+
# "explanation": "The sky appears blue due to a phenomenon called Rayleigh scattering. When ...
36+
# }
37+
# [END googlegenaisdk_textgen_config_with_txt]
38+
return response.text
39+
40+
41+
if __name__ == "__main__":
42+
generate_content()
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Copyright 2025 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# https://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
16+
def generate_content() -> str:
17+
# [START googlegenaisdk_textgen_sys_instr_with_txt]
18+
from google import genai
19+
from google.genai import types
20+
21+
client = genai.Client()
22+
response = client.models.generate_content(
23+
model="gemini-2.0-flash-001",
24+
contents="Why is the sky blue?",
25+
config=types.GenerateContentConfig(
26+
system_instruction=[
27+
"You're a language translator.",
28+
"Your mission is to translate text in English to French."
29+
]
30+
)
31+
)
32+
print(response.text)
33+
# Example response:
34+
# Pourquoi le ciel est-il bleu ?
35+
# [END googlegenaisdk_textgen_sys_instr_with_txt]
36+
return response.text
37+
38+
39+
if __name__ == "__main__":
40+
generate_content()
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# Copyright 2025 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# https://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
16+
def generate_content() -> str:
17+
# [START googlegenaisdk_textgen_with_multi_img]
18+
from google import genai
19+
from google.genai.types import Part
20+
21+
client = genai.Client()
22+
response = client.models.generate_content(
23+
model="gemini-2.0-flash-001",
24+
contents=[
25+
"Generate a list of all the objects contained in both images.",
26+
Part.from_uri(
27+
file_uri="gs://cloud-samples-data/generative-ai/image/scones.jpg",
28+
mime_type="image/jpeg"
29+
),
30+
Part.from_uri(
31+
file_uri="gs://cloud-samples-data/generative-ai/image/latte.jpg",
32+
mime_type="image/jpeg"
33+
)
34+
]
35+
)
36+
print(response.text)
37+
# Example response:
38+
# Okay, here's the list of objects present in both images:
39+
# ...
40+
# [END googlegenaisdk_textgen_with_multi_img]
41+
return response.text
42+
43+
44+
if __name__ == "__main__":
45+
generate_content()
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# Copyright 2025 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# https://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
16+
def generate_content() -> str:
17+
# [START googlegenaisdk_textgen_with_multi_local_img]
18+
from google import genai
19+
from google.genai.types import Part
20+
21+
client = genai.Client()
22+
23+
# TODO(Developer): Update the below file paths to your images
24+
with open("path/to/your/image1.jpeg", "rb") as f:
25+
image_1_bytes = f.read()
26+
with open("path/to/your/image2.jpeg", "rb") as f:
27+
image_2_bytes = f.read()
28+
29+
response = client.models.generate_content(
30+
model="gemini-2.0-flash-001",
31+
contents=[
32+
"Write an advertising jingle based on the items in both images.",
33+
Part.from_bytes(
34+
data=image_1_bytes,
35+
mime_type="image/jpeg"
36+
),
37+
Part.from_bytes(
38+
data=image_2_bytes,
39+
mime_type="image/jpeg"
40+
)
41+
]
42+
)
43+
print(response.text)
44+
# Example response:
45+
# Okay, here's a jingle combining the elements of both sets of images, focusing on ...
46+
# ...
47+
# [END googlegenaisdk_textgen_with_multi_local_img]
48+
return response.text
49+
50+
51+
if __name__ == "__main__":
52+
generate_content()
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Copyright 2025 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# https://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
16+
def generate_content() -> str:
17+
# [START googlegenaisdk_textgen_with_mute_video]
18+
from google import genai
19+
from google.genai.types import Part
20+
21+
client = genai.Client()
22+
23+
response = client.models.generate_content(
24+
model="gemini-2.0-flash-001",
25+
contents=[
26+
"What is in the video?",
27+
Part.from_uri(
28+
"gs://cloud-samples-data/generative-ai/video/ad_copy_from_video.mp4",
29+
mime_type="video/mp4"
30+
)
31+
]
32+
)
33+
print(response.text)
34+
# Example response:
35+
# The video shows several people surfing in an ocean with a coastline in the background. The camera ...
36+
# [END googlegenaisdk_textgen_with_mute_video]
37+
return response.text
38+
39+
40+
if __name__ == "__main__":
41+
generate_content()
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# Copyright 2025 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# https://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
16+
def generate_content() -> str:
17+
# [START googlegenaisdk_textgen_with_video]
18+
from google import genai
19+
from google.genai.types import Part
20+
21+
client = genai.Client()
22+
23+
prompt = """
24+
Analyze the provided video file, including its audio.
25+
Summarize the main points of the video concisely.
26+
Create a chapter breakdown with timestamps for key sections or topics discussed.
27+
"""
28+
response = client.models.generate_content(
29+
model="gemini-2.0-flash-001",
30+
contents=[
31+
prompt,
32+
Part.from_uri(
33+
"gs://cloud-samples-data/generative-ai/video/pixel8.mp4",
34+
mime_type="video/mp4"
35+
)
36+
]
37+
)
38+
39+
print(response.text)
40+
# Example response:
41+
# Here's a breakdown of the video:
42+
#
43+
# **Summary:**
44+
#
45+
# Saeka Shimada, a photographer in Tokyo, uses the Google Pixel 8 Pro's "Video Boost" feature to ...
46+
#
47+
# **Chapter Breakdown with Timestamps:**
48+
#
49+
# * **[00:00-00:12] Introduction & Tokyo at Night:** Saeka Shimada introduces herself ...
50+
# ...
51+
# [END googlegenaisdk_textgen_with_video]
52+
return response.text
53+
54+
55+
if __name__ == "__main__":
56+
generate_content()

0 commit comments

Comments
 (0)