google-genai 1.39.1__tar.gz → 1.40.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. {google_genai-1.39.1/google_genai.egg-info → google_genai-1.40.0}/PKG-INFO +1 -1
  2. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/_live_converters.py +38 -42
  3. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/_tokens_converters.py +19 -21
  4. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/batches.py +37 -21
  5. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/caches.py +38 -42
  6. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/live.py +33 -4
  7. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/models.py +74 -42
  8. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/types.py +44 -5
  9. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/version.py +1 -1
  10. {google_genai-1.39.1 → google_genai-1.40.0/google_genai.egg-info}/PKG-INFO +1 -1
  11. {google_genai-1.39.1 → google_genai-1.40.0}/pyproject.toml +1 -1
  12. {google_genai-1.39.1 → google_genai-1.40.0}/LICENSE +0 -0
  13. {google_genai-1.39.1 → google_genai-1.40.0}/MANIFEST.in +0 -0
  14. {google_genai-1.39.1 → google_genai-1.40.0}/README.md +0 -0
  15. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/__init__.py +0 -0
  16. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/_adapters.py +0 -0
  17. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/_api_client.py +0 -0
  18. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/_api_module.py +0 -0
  19. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/_automatic_function_calling_util.py +0 -0
  20. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/_base_transformers.py +0 -0
  21. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/_base_url.py +0 -0
  22. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/_common.py +0 -0
  23. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/_extra_utils.py +0 -0
  24. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/_local_tokenizer_loader.py +0 -0
  25. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/_mcp_utils.py +0 -0
  26. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/_operations_converters.py +0 -0
  27. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/_replay_api_client.py +0 -0
  28. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/_test_api_client.py +0 -0
  29. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/_transformers.py +0 -0
  30. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/chats.py +0 -0
  31. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/client.py +0 -0
  32. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/errors.py +0 -0
  33. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/files.py +0 -0
  34. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/live_music.py +0 -0
  35. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/local_tokenizer.py +0 -0
  36. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/operations.py +0 -0
  37. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/pagers.py +0 -0
  38. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/py.typed +0 -0
  39. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/tokens.py +0 -0
  40. {google_genai-1.39.1 → google_genai-1.40.0}/google/genai/tunings.py +0 -0
  41. {google_genai-1.39.1 → google_genai-1.40.0}/google_genai.egg-info/SOURCES.txt +0 -0
  42. {google_genai-1.39.1 → google_genai-1.40.0}/google_genai.egg-info/dependency_links.txt +0 -0
  43. {google_genai-1.39.1 → google_genai-1.40.0}/google_genai.egg-info/requires.txt +0 -0
  44. {google_genai-1.39.1 → google_genai-1.40.0}/google_genai.egg-info/top_level.txt +0 -0
  45. {google_genai-1.39.1 → google_genai-1.40.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: google-genai
3
- Version: 1.39.1
3
+ Version: 1.40.0
4
4
  Summary: GenAI Python SDK
5
5
  Author-email: Google LLC <googleapis-packages@google.com>
6
6
  License: Apache-2.0
@@ -291,6 +291,42 @@ def _Blob_to_vertex(
291
291
  return to_object
292
292
 
293
293
 
294
+ def _ComputerUse_to_mldev(
295
+ from_object: Union[dict[str, Any], object],
296
+ parent_object: Optional[dict[str, Any]] = None,
297
+ ) -> dict[str, Any]:
298
+ to_object: dict[str, Any] = {}
299
+ if getv(from_object, ['environment']) is not None:
300
+ setv(to_object, ['environment'], getv(from_object, ['environment']))
301
+
302
+ if getv(from_object, ['excluded_predefined_functions']) is not None:
303
+ setv(
304
+ to_object,
305
+ ['excludedPredefinedFunctions'],
306
+ getv(from_object, ['excluded_predefined_functions']),
307
+ )
308
+
309
+ return to_object
310
+
311
+
312
+ def _ComputerUse_to_vertex(
313
+ from_object: Union[dict[str, Any], object],
314
+ parent_object: Optional[dict[str, Any]] = None,
315
+ ) -> dict[str, Any]:
316
+ to_object: dict[str, Any] = {}
317
+ if getv(from_object, ['environment']) is not None:
318
+ setv(to_object, ['environment'], getv(from_object, ['environment']))
319
+
320
+ if getv(from_object, ['excluded_predefined_functions']) is not None:
321
+ setv(
322
+ to_object,
323
+ ['excludedPredefinedFunctions'],
324
+ getv(from_object, ['excluded_predefined_functions']),
325
+ )
326
+
327
+ return to_object
328
+
329
+
294
330
  def _Content_from_mldev(
295
331
  from_object: Union[dict[str, Any], object],
296
332
  parent_object: Optional[dict[str, Any]] = None,
@@ -3189,42 +3225,6 @@ def _SpeechConfig_to_vertex(
3189
3225
  return to_object
3190
3226
 
3191
3227
 
3192
- def _ToolComputerUse_to_mldev(
3193
- from_object: Union[dict[str, Any], object],
3194
- parent_object: Optional[dict[str, Any]] = None,
3195
- ) -> dict[str, Any]:
3196
- to_object: dict[str, Any] = {}
3197
- if getv(from_object, ['environment']) is not None:
3198
- setv(to_object, ['environment'], getv(from_object, ['environment']))
3199
-
3200
- if getv(from_object, ['excluded_predefined_functions']) is not None:
3201
- setv(
3202
- to_object,
3203
- ['excludedPredefinedFunctions'],
3204
- getv(from_object, ['excluded_predefined_functions']),
3205
- )
3206
-
3207
- return to_object
3208
-
3209
-
3210
- def _ToolComputerUse_to_vertex(
3211
- from_object: Union[dict[str, Any], object],
3212
- parent_object: Optional[dict[str, Any]] = None,
3213
- ) -> dict[str, Any]:
3214
- to_object: dict[str, Any] = {}
3215
- if getv(from_object, ['environment']) is not None:
3216
- setv(to_object, ['environment'], getv(from_object, ['environment']))
3217
-
3218
- if getv(from_object, ['excluded_predefined_functions']) is not None:
3219
- setv(
3220
- to_object,
3221
- ['excludedPredefinedFunctions'],
3222
- getv(from_object, ['excluded_predefined_functions']),
3223
- )
3224
-
3225
- return to_object
3226
-
3227
-
3228
3228
  def _Tool_to_mldev(
3229
3229
  from_object: Union[dict[str, Any], object],
3230
3230
  parent_object: Optional[dict[str, Any]] = None,
@@ -3278,9 +3278,7 @@ def _Tool_to_mldev(
3278
3278
  setv(
3279
3279
  to_object,
3280
3280
  ['computerUse'],
3281
- _ToolComputerUse_to_mldev(
3282
- getv(from_object, ['computer_use']), to_object
3283
- ),
3281
+ _ComputerUse_to_mldev(getv(from_object, ['computer_use']), to_object),
3284
3282
  )
3285
3283
 
3286
3284
  if getv(from_object, ['code_execution']) is not None:
@@ -3352,9 +3350,7 @@ def _Tool_to_vertex(
3352
3350
  setv(
3353
3351
  to_object,
3354
3352
  ['computerUse'],
3355
- _ToolComputerUse_to_vertex(
3356
- getv(from_object, ['computer_use']), to_object
3357
- ),
3353
+ _ComputerUse_to_vertex(getv(from_object, ['computer_use']), to_object),
3358
3354
  )
3359
3355
 
3360
3356
  if getv(from_object, ['code_execution']) is not None:
@@ -106,6 +106,24 @@ def _Blob_to_mldev(
106
106
  return to_object
107
107
 
108
108
 
109
+ def _ComputerUse_to_mldev(
110
+ from_object: Union[dict[str, Any], object],
111
+ parent_object: Optional[dict[str, Any]] = None,
112
+ ) -> dict[str, Any]:
113
+ to_object: dict[str, Any] = {}
114
+ if getv(from_object, ['environment']) is not None:
115
+ setv(to_object, ['environment'], getv(from_object, ['environment']))
116
+
117
+ if getv(from_object, ['excluded_predefined_functions']) is not None:
118
+ setv(
119
+ to_object,
120
+ ['excludedPredefinedFunctions'],
121
+ getv(from_object, ['excluded_predefined_functions']),
122
+ )
123
+
124
+ return to_object
125
+
126
+
109
127
  def _Content_to_mldev(
110
128
  from_object: Union[dict[str, Any], object],
111
129
  parent_object: Optional[dict[str, Any]] = None,
@@ -743,24 +761,6 @@ def _SpeechConfig_to_mldev(
743
761
  return to_object
744
762
 
745
763
 
746
- def _ToolComputerUse_to_mldev(
747
- from_object: Union[dict[str, Any], object],
748
- parent_object: Optional[dict[str, Any]] = None,
749
- ) -> dict[str, Any]:
750
- to_object: dict[str, Any] = {}
751
- if getv(from_object, ['environment']) is not None:
752
- setv(to_object, ['environment'], getv(from_object, ['environment']))
753
-
754
- if getv(from_object, ['excluded_predefined_functions']) is not None:
755
- setv(
756
- to_object,
757
- ['excludedPredefinedFunctions'],
758
- getv(from_object, ['excluded_predefined_functions']),
759
- )
760
-
761
- return to_object
762
-
763
-
764
764
  def _Tool_to_mldev(
765
765
  from_object: Union[dict[str, Any], object],
766
766
  parent_object: Optional[dict[str, Any]] = None,
@@ -814,9 +814,7 @@ def _Tool_to_mldev(
814
814
  setv(
815
815
  to_object,
816
816
  ['computerUse'],
817
- _ToolComputerUse_to_mldev(
818
- getv(from_object, ['computer_use']), to_object
819
- ),
817
+ _ComputerUse_to_mldev(getv(from_object, ['computer_use']), to_object),
820
818
  )
821
819
 
822
820
  if getv(from_object, ['code_execution']) is not None:
@@ -467,6 +467,24 @@ def _CitationMetadata_from_mldev(
467
467
  return to_object
468
468
 
469
469
 
470
+ def _ComputerUse_to_mldev(
471
+ from_object: Union[dict[str, Any], object],
472
+ parent_object: Optional[dict[str, Any]] = None,
473
+ ) -> dict[str, Any]:
474
+ to_object: dict[str, Any] = {}
475
+ if getv(from_object, ['environment']) is not None:
476
+ setv(to_object, ['environment'], getv(from_object, ['environment']))
477
+
478
+ if getv(from_object, ['excluded_predefined_functions']) is not None:
479
+ setv(
480
+ to_object,
481
+ ['excludedPredefinedFunctions'],
482
+ getv(from_object, ['excluded_predefined_functions']),
483
+ )
484
+
485
+ return to_object
486
+
487
+
470
488
  def _ContentEmbedding_from_mldev(
471
489
  from_object: Union[dict[str, Any], object],
472
490
  parent_object: Optional[dict[str, Any]] = None,
@@ -1131,6 +1149,13 @@ def _GenerateContentConfig_to_mldev(
1131
1149
  ),
1132
1150
  )
1133
1151
 
1152
+ if getv(from_object, ['image_config']) is not None:
1153
+ setv(
1154
+ to_object,
1155
+ ['imageConfig'],
1156
+ _ImageConfig_to_mldev(getv(from_object, ['image_config']), to_object),
1157
+ )
1158
+
1134
1159
  return to_object
1135
1160
 
1136
1161
 
@@ -1238,6 +1263,17 @@ def _GoogleSearch_to_mldev(
1238
1263
  return to_object
1239
1264
 
1240
1265
 
1266
+ def _ImageConfig_to_mldev(
1267
+ from_object: Union[dict[str, Any], object],
1268
+ parent_object: Optional[dict[str, Any]] = None,
1269
+ ) -> dict[str, Any]:
1270
+ to_object: dict[str, Any] = {}
1271
+ if getv(from_object, ['aspect_ratio']) is not None:
1272
+ setv(to_object, ['aspectRatio'], getv(from_object, ['aspect_ratio']))
1273
+
1274
+ return to_object
1275
+
1276
+
1241
1277
  def _InlinedEmbedContentResponse_from_mldev(
1242
1278
  from_object: Union[dict[str, Any], object],
1243
1279
  parent_object: Optional[dict[str, Any]] = None,
@@ -1877,24 +1913,6 @@ def _ThinkingConfig_to_mldev(
1877
1913
  return to_object
1878
1914
 
1879
1915
 
1880
- def _ToolComputerUse_to_mldev(
1881
- from_object: Union[dict[str, Any], object],
1882
- parent_object: Optional[dict[str, Any]] = None,
1883
- ) -> dict[str, Any]:
1884
- to_object: dict[str, Any] = {}
1885
- if getv(from_object, ['environment']) is not None:
1886
- setv(to_object, ['environment'], getv(from_object, ['environment']))
1887
-
1888
- if getv(from_object, ['excluded_predefined_functions']) is not None:
1889
- setv(
1890
- to_object,
1891
- ['excludedPredefinedFunctions'],
1892
- getv(from_object, ['excluded_predefined_functions']),
1893
- )
1894
-
1895
- return to_object
1896
-
1897
-
1898
1916
  def _ToolConfig_to_mldev(
1899
1917
  from_object: Union[dict[str, Any], object],
1900
1918
  parent_object: Optional[dict[str, Any]] = None,
@@ -1974,9 +1992,7 @@ def _Tool_to_mldev(
1974
1992
  setv(
1975
1993
  to_object,
1976
1994
  ['computerUse'],
1977
- _ToolComputerUse_to_mldev(
1978
- getv(from_object, ['computer_use']), to_object
1979
- ),
1995
+ _ComputerUse_to_mldev(getv(from_object, ['computer_use']), to_object),
1980
1996
  )
1981
1997
 
1982
1998
  if getv(from_object, ['code_execution']) is not None:
@@ -181,6 +181,42 @@ def _CachedContent_from_vertex(
181
181
  return to_object
182
182
 
183
183
 
184
+ def _ComputerUse_to_mldev(
185
+ from_object: Union[dict[str, Any], object],
186
+ parent_object: Optional[dict[str, Any]] = None,
187
+ ) -> dict[str, Any]:
188
+ to_object: dict[str, Any] = {}
189
+ if getv(from_object, ['environment']) is not None:
190
+ setv(to_object, ['environment'], getv(from_object, ['environment']))
191
+
192
+ if getv(from_object, ['excluded_predefined_functions']) is not None:
193
+ setv(
194
+ to_object,
195
+ ['excludedPredefinedFunctions'],
196
+ getv(from_object, ['excluded_predefined_functions']),
197
+ )
198
+
199
+ return to_object
200
+
201
+
202
+ def _ComputerUse_to_vertex(
203
+ from_object: Union[dict[str, Any], object],
204
+ parent_object: Optional[dict[str, Any]] = None,
205
+ ) -> dict[str, Any]:
206
+ to_object: dict[str, Any] = {}
207
+ if getv(from_object, ['environment']) is not None:
208
+ setv(to_object, ['environment'], getv(from_object, ['environment']))
209
+
210
+ if getv(from_object, ['excluded_predefined_functions']) is not None:
211
+ setv(
212
+ to_object,
213
+ ['excludedPredefinedFunctions'],
214
+ getv(from_object, ['excluded_predefined_functions']),
215
+ )
216
+
217
+ return to_object
218
+
219
+
184
220
  def _Content_to_mldev(
185
221
  from_object: Union[dict[str, Any], object],
186
222
  parent_object: Optional[dict[str, Any]] = None,
@@ -1135,42 +1171,6 @@ def _RetrievalConfig_to_vertex(
1135
1171
  return to_object
1136
1172
 
1137
1173
 
1138
- def _ToolComputerUse_to_mldev(
1139
- from_object: Union[dict[str, Any], object],
1140
- parent_object: Optional[dict[str, Any]] = None,
1141
- ) -> dict[str, Any]:
1142
- to_object: dict[str, Any] = {}
1143
- if getv(from_object, ['environment']) is not None:
1144
- setv(to_object, ['environment'], getv(from_object, ['environment']))
1145
-
1146
- if getv(from_object, ['excluded_predefined_functions']) is not None:
1147
- setv(
1148
- to_object,
1149
- ['excludedPredefinedFunctions'],
1150
- getv(from_object, ['excluded_predefined_functions']),
1151
- )
1152
-
1153
- return to_object
1154
-
1155
-
1156
- def _ToolComputerUse_to_vertex(
1157
- from_object: Union[dict[str, Any], object],
1158
- parent_object: Optional[dict[str, Any]] = None,
1159
- ) -> dict[str, Any]:
1160
- to_object: dict[str, Any] = {}
1161
- if getv(from_object, ['environment']) is not None:
1162
- setv(to_object, ['environment'], getv(from_object, ['environment']))
1163
-
1164
- if getv(from_object, ['excluded_predefined_functions']) is not None:
1165
- setv(
1166
- to_object,
1167
- ['excludedPredefinedFunctions'],
1168
- getv(from_object, ['excluded_predefined_functions']),
1169
- )
1170
-
1171
- return to_object
1172
-
1173
-
1174
1174
  def _ToolConfig_to_mldev(
1175
1175
  from_object: Union[dict[str, Any], object],
1176
1176
  parent_object: Optional[dict[str, Any]] = None,
@@ -1276,9 +1276,7 @@ def _Tool_to_mldev(
1276
1276
  setv(
1277
1277
  to_object,
1278
1278
  ['computerUse'],
1279
- _ToolComputerUse_to_mldev(
1280
- getv(from_object, ['computer_use']), to_object
1281
- ),
1279
+ _ComputerUse_to_mldev(getv(from_object, ['computer_use']), to_object),
1282
1280
  )
1283
1281
 
1284
1282
  if getv(from_object, ['code_execution']) is not None:
@@ -1350,9 +1348,7 @@ def _Tool_to_vertex(
1350
1348
  setv(
1351
1349
  to_object,
1352
1350
  ['computerUse'],
1353
- _ToolComputerUse_to_vertex(
1354
- getv(from_object, ['computer_use']), to_object
1355
- ),
1351
+ _ComputerUse_to_vertex(getv(from_object, ['computer_use']), to_object),
1356
1352
  )
1357
1353
 
1358
1354
  if getv(from_object, ['code_execution']) is not None:
@@ -82,9 +82,15 @@ _FUNCTION_RESPONSE_REQUIRES_ID = (
82
82
  class AsyncSession:
83
83
  """[Preview] AsyncSession."""
84
84
 
85
- def __init__(self, api_client: BaseApiClient, websocket: ClientConnection):
85
+ def __init__(
86
+ self,
87
+ api_client: BaseApiClient,
88
+ websocket: ClientConnection,
89
+ session_id: Optional[str] = None,
90
+ ):
86
91
  self._api_client = api_client
87
92
  self._ws = websocket
93
+ self.session_id = session_id
88
94
 
89
95
  async def send(
90
96
  self,
@@ -1054,11 +1060,34 @@ class AsyncLive(_api_module.BaseModule):
1054
1060
  await ws.send(request)
1055
1061
  try:
1056
1062
  # websockets 14.0+
1057
- logger.info(await ws.recv(decode=False))
1063
+ raw_response = await ws.recv(decode=False)
1058
1064
  except TypeError:
1059
- logger.info(await ws.recv())
1065
+ raw_response = await ws.recv() # type: ignore[assignment]
1066
+ if raw_response:
1067
+ try:
1068
+ response = json.loads(raw_response)
1069
+ except json.decoder.JSONDecodeError:
1070
+ raise ValueError(f'Failed to parse response: {raw_response!r}')
1071
+ else:
1072
+ response = {}
1060
1073
 
1061
- yield AsyncSession(api_client=self._api_client, websocket=ws)
1074
+ if self._api_client.vertexai:
1075
+ response_dict = live_converters._LiveServerMessage_from_vertex(response)
1076
+ else:
1077
+ response_dict = live_converters._LiveServerMessage_from_mldev(response)
1078
+
1079
+ setup_response = types.LiveServerMessage._from_response(
1080
+ response=response_dict, kwargs=parameter_model.model_dump()
1081
+ )
1082
+ if setup_response.setup_complete:
1083
+ session_id = setup_response.setup_complete.session_id
1084
+ else:
1085
+ session_id = None
1086
+ yield AsyncSession(
1087
+ api_client=self._api_client,
1088
+ websocket=ws,
1089
+ session_id=session_id,
1090
+ )
1062
1091
 
1063
1092
 
1064
1093
  async def _t_live_connect_config(
@@ -366,6 +366,42 @@ def _ComputeTokensResponse_from_vertex(
366
366
  return to_object
367
367
 
368
368
 
369
+ def _ComputerUse_to_mldev(
370
+ from_object: Union[dict[str, Any], object],
371
+ parent_object: Optional[dict[str, Any]] = None,
372
+ ) -> dict[str, Any]:
373
+ to_object: dict[str, Any] = {}
374
+ if getv(from_object, ['environment']) is not None:
375
+ setv(to_object, ['environment'], getv(from_object, ['environment']))
376
+
377
+ if getv(from_object, ['excluded_predefined_functions']) is not None:
378
+ setv(
379
+ to_object,
380
+ ['excludedPredefinedFunctions'],
381
+ getv(from_object, ['excluded_predefined_functions']),
382
+ )
383
+
384
+ return to_object
385
+
386
+
387
+ def _ComputerUse_to_vertex(
388
+ from_object: Union[dict[str, Any], object],
389
+ parent_object: Optional[dict[str, Any]] = None,
390
+ ) -> dict[str, Any]:
391
+ to_object: dict[str, Any] = {}
392
+ if getv(from_object, ['environment']) is not None:
393
+ setv(to_object, ['environment'], getv(from_object, ['environment']))
394
+
395
+ if getv(from_object, ['excluded_predefined_functions']) is not None:
396
+ setv(
397
+ to_object,
398
+ ['excludedPredefinedFunctions'],
399
+ getv(from_object, ['excluded_predefined_functions']),
400
+ )
401
+
402
+ return to_object
403
+
404
+
369
405
  def _ContentEmbeddingStatistics_from_vertex(
370
406
  from_object: Union[dict[str, Any], object],
371
407
  parent_object: Optional[dict[str, Any]] = None,
@@ -1602,6 +1638,13 @@ def _GenerateContentConfig_to_mldev(
1602
1638
  ),
1603
1639
  )
1604
1640
 
1641
+ if getv(from_object, ['image_config']) is not None:
1642
+ setv(
1643
+ to_object,
1644
+ ['imageConfig'],
1645
+ _ImageConfig_to_mldev(getv(from_object, ['image_config']), to_object),
1646
+ )
1647
+
1605
1648
  return to_object
1606
1649
 
1607
1650
 
@@ -1774,6 +1817,13 @@ def _GenerateContentConfig_to_vertex(
1774
1817
  ),
1775
1818
  )
1776
1819
 
1820
+ if getv(from_object, ['image_config']) is not None:
1821
+ setv(
1822
+ to_object,
1823
+ ['imageConfig'],
1824
+ _ImageConfig_to_vertex(getv(from_object, ['image_config']), to_object),
1825
+ )
1826
+
1777
1827
  return to_object
1778
1828
 
1779
1829
 
@@ -2960,6 +3010,28 @@ def _GoogleSearch_to_vertex(
2960
3010
  return to_object
2961
3011
 
2962
3012
 
3013
+ def _ImageConfig_to_mldev(
3014
+ from_object: Union[dict[str, Any], object],
3015
+ parent_object: Optional[dict[str, Any]] = None,
3016
+ ) -> dict[str, Any]:
3017
+ to_object: dict[str, Any] = {}
3018
+ if getv(from_object, ['aspect_ratio']) is not None:
3019
+ setv(to_object, ['aspectRatio'], getv(from_object, ['aspect_ratio']))
3020
+
3021
+ return to_object
3022
+
3023
+
3024
+ def _ImageConfig_to_vertex(
3025
+ from_object: Union[dict[str, Any], object],
3026
+ parent_object: Optional[dict[str, Any]] = None,
3027
+ ) -> dict[str, Any]:
3028
+ to_object: dict[str, Any] = {}
3029
+ if getv(from_object, ['aspect_ratio']) is not None:
3030
+ setv(to_object, ['aspectRatio'], getv(from_object, ['aspect_ratio']))
3031
+
3032
+ return to_object
3033
+
3034
+
2963
3035
  def _Image_from_mldev(
2964
3036
  from_object: Union[dict[str, Any], object],
2965
3037
  parent_object: Optional[dict[str, Any]] = None,
@@ -4467,42 +4539,6 @@ def _ThinkingConfig_to_vertex(
4467
4539
  return to_object
4468
4540
 
4469
4541
 
4470
- def _ToolComputerUse_to_mldev(
4471
- from_object: Union[dict[str, Any], object],
4472
- parent_object: Optional[dict[str, Any]] = None,
4473
- ) -> dict[str, Any]:
4474
- to_object: dict[str, Any] = {}
4475
- if getv(from_object, ['environment']) is not None:
4476
- setv(to_object, ['environment'], getv(from_object, ['environment']))
4477
-
4478
- if getv(from_object, ['excluded_predefined_functions']) is not None:
4479
- setv(
4480
- to_object,
4481
- ['excludedPredefinedFunctions'],
4482
- getv(from_object, ['excluded_predefined_functions']),
4483
- )
4484
-
4485
- return to_object
4486
-
4487
-
4488
- def _ToolComputerUse_to_vertex(
4489
- from_object: Union[dict[str, Any], object],
4490
- parent_object: Optional[dict[str, Any]] = None,
4491
- ) -> dict[str, Any]:
4492
- to_object: dict[str, Any] = {}
4493
- if getv(from_object, ['environment']) is not None:
4494
- setv(to_object, ['environment'], getv(from_object, ['environment']))
4495
-
4496
- if getv(from_object, ['excluded_predefined_functions']) is not None:
4497
- setv(
4498
- to_object,
4499
- ['excludedPredefinedFunctions'],
4500
- getv(from_object, ['excluded_predefined_functions']),
4501
- )
4502
-
4503
- return to_object
4504
-
4505
-
4506
4542
  def _ToolConfig_to_mldev(
4507
4543
  from_object: Union[dict[str, Any], object],
4508
4544
  parent_object: Optional[dict[str, Any]] = None,
@@ -4608,9 +4644,7 @@ def _Tool_to_mldev(
4608
4644
  setv(
4609
4645
  to_object,
4610
4646
  ['computerUse'],
4611
- _ToolComputerUse_to_mldev(
4612
- getv(from_object, ['computer_use']), to_object
4613
- ),
4647
+ _ComputerUse_to_mldev(getv(from_object, ['computer_use']), to_object),
4614
4648
  )
4615
4649
 
4616
4650
  if getv(from_object, ['code_execution']) is not None:
@@ -4682,9 +4716,7 @@ def _Tool_to_vertex(
4682
4716
  setv(
4683
4717
  to_object,
4684
4718
  ['computerUse'],
4685
- _ToolComputerUse_to_vertex(
4686
- getv(from_object, ['computer_use']), to_object
4687
- ),
4719
+ _ComputerUse_to_vertex(getv(from_object, ['computer_use']), to_object),
4688
4720
  )
4689
4721
 
4690
4722
  if getv(from_object, ['code_execution']) is not None:
@@ -285,6 +285,8 @@ class FinishReason(_common.CaseInSensitiveEnum):
285
285
  """Token generation stopped because generated images have safety violations."""
286
286
  UNEXPECTED_TOOL_CALL = 'UNEXPECTED_TOOL_CALL'
287
287
  """The tool call generated by the model is invalid."""
288
+ IMAGE_PROHIBITED_CONTENT = 'IMAGE_PROHIBITED_CONTENT'
289
+ """Image generation stopped because the generated images have prohibited content."""
288
290
 
289
291
 
290
292
  class HarmProbability(_common.CaseInSensitiveEnum):
@@ -2795,7 +2797,7 @@ class UrlContextDict(TypedDict, total=False):
2795
2797
  UrlContextOrDict = Union[UrlContext, UrlContextDict]
2796
2798
 
2797
2799
 
2798
- class ToolComputerUse(_common.BaseModel):
2800
+ class ComputerUse(_common.BaseModel):
2799
2801
  """Tool to support computer use."""
2800
2802
 
2801
2803
  environment: Optional[Environment] = Field(
@@ -2811,7 +2813,7 @@ class ToolComputerUse(_common.BaseModel):
2811
2813
  )
2812
2814
 
2813
2815
 
2814
- class ToolComputerUseDict(TypedDict, total=False):
2816
+ class ComputerUseDict(TypedDict, total=False):
2815
2817
  """Tool to support computer use."""
2816
2818
 
2817
2819
  environment: Optional[Environment]
@@ -2825,7 +2827,7 @@ class ToolComputerUseDict(TypedDict, total=False):
2825
2827
  2. Improving the definitions / instructions of predefined functions."""
2826
2828
 
2827
2829
 
2828
- ToolComputerUseOrDict = Union[ToolComputerUse, ToolComputerUseDict]
2830
+ ComputerUseOrDict = Union[ComputerUse, ComputerUseDict]
2829
2831
 
2830
2832
 
2831
2833
  class ApiAuthApiKeyConfig(_common.BaseModel):
@@ -3422,7 +3424,7 @@ class Tool(_common.BaseModel):
3422
3424
  default=None,
3423
3425
  description="""Optional. Tool to support URL context retrieval.""",
3424
3426
  )
3425
- computer_use: Optional[ToolComputerUse] = Field(
3427
+ computer_use: Optional[ComputerUse] = Field(
3426
3428
  default=None,
3427
3429
  description="""Optional. Tool to support the model interacting directly with the
3428
3430
  computer. If enabled, it automatically populates computer-use specific
@@ -3461,7 +3463,7 @@ class ToolDict(TypedDict, total=False):
3461
3463
  url_context: Optional[UrlContextDict]
3462
3464
  """Optional. Tool to support URL context retrieval."""
3463
3465
 
3464
- computer_use: Optional[ToolComputerUseDict]
3466
+ computer_use: Optional[ComputerUseDict]
3465
3467
  """Optional. Tool to support the model interacting directly with the
3466
3468
  computer. If enabled, it automatically populates computer-use specific
3467
3469
  Function Declarations."""
@@ -3826,6 +3828,27 @@ class ThinkingConfigDict(TypedDict, total=False):
3826
3828
  ThinkingConfigOrDict = Union[ThinkingConfig, ThinkingConfigDict]
3827
3829
 
3828
3830
 
3831
+ class ImageConfig(_common.BaseModel):
3832
+ """The image generation configuration to be used in GenerateContentConfig."""
3833
+
3834
+ aspect_ratio: Optional[str] = Field(
3835
+ default=None,
3836
+ description="""Aspect ratio of the generated images. Supported values are
3837
+ "1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9", and "21:9".""",
3838
+ )
3839
+
3840
+
3841
+ class ImageConfigDict(TypedDict, total=False):
3842
+ """The image generation configuration to be used in GenerateContentConfig."""
3843
+
3844
+ aspect_ratio: Optional[str]
3845
+ """Aspect ratio of the generated images. Supported values are
3846
+ "1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9", and "21:9"."""
3847
+
3848
+
3849
+ ImageConfigOrDict = Union[ImageConfig, ImageConfigDict]
3850
+
3851
+
3829
3852
  class FileStatus(_common.BaseModel):
3830
3853
  """Status of a File that uses a common error model."""
3831
3854
 
@@ -4263,6 +4286,11 @@ class GenerateContentConfig(_common.BaseModel):
4263
4286
  description="""The thinking features configuration.
4264
4287
  """,
4265
4288
  )
4289
+ image_config: Optional[ImageConfig] = Field(
4290
+ default=None,
4291
+ description="""The image generation configuration.
4292
+ """,
4293
+ )
4266
4294
 
4267
4295
  @pydantic.field_validator('response_schema', mode='before')
4268
4296
  @classmethod
@@ -4278,6 +4306,13 @@ class GenerateContentConfig(_common.BaseModel):
4278
4306
  return Enum('PlaceholderLiteralEnum', {s: s for s in enum_vals})
4279
4307
  return value
4280
4308
 
4309
+ @pydantic.field_validator('image_config', mode='before')
4310
+ @classmethod
4311
+ def _check_image_config_type(cls, value: Any) -> Any:
4312
+ if not isinstance(value, ImageConfig):
4313
+ raise ValueError('image_config must be an instance of ImageConfig.')
4314
+ return value
4315
+
4281
4316
 
4282
4317
  class GenerateContentConfigDict(TypedDict, total=False):
4283
4318
  """Optional model configuration parameters.
@@ -4452,6 +4487,10 @@ class GenerateContentConfigDict(TypedDict, total=False):
4452
4487
  """The thinking features configuration.
4453
4488
  """
4454
4489
 
4490
+ image_config: Optional[ImageConfigDict]
4491
+ """The image generation configuration.
4492
+ """
4493
+
4455
4494
 
4456
4495
  GenerateContentConfigOrDict = Union[
4457
4496
  GenerateContentConfig, GenerateContentConfigDict
@@ -13,4 +13,4 @@
13
13
  # limitations under the License.
14
14
  #
15
15
 
16
- __version__ = '1.39.1' # x-release-please-version
16
+ __version__ = '1.40.0' # x-release-please-version
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: google-genai
3
- Version: 1.39.1
3
+ Version: 1.40.0
4
4
  Summary: GenAI Python SDK
5
5
  Author-email: Google LLC <googleapis-packages@google.com>
6
6
  License: Apache-2.0
@@ -3,7 +3,7 @@ requires = ["setuptools", "wheel", "twine>=6.1.0", "packaging>=24.2", "pkginfo>=
3
3
 
4
4
  [project]
5
5
  name = "google-genai"
6
- version = "1.39.1"
6
+ version = "1.40.0"
7
7
  description = "GenAI Python SDK"
8
8
  readme = "README.md"
9
9
  license = {text = "Apache-2.0"}
File without changes
File without changes
File without changes
File without changes