google-genai 1.26.0__py3-none-any.whl → 1.28.0__py3-none-any.whl

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.
google/genai/caches.py CHANGED
@@ -1327,6 +1327,11 @@ def _ListCachedContentsResponse_from_mldev(
1327
1327
  parent_object: Optional[dict[str, Any]] = None,
1328
1328
  ) -> dict[str, Any]:
1329
1329
  to_object: dict[str, Any] = {}
1330
+ if getv(from_object, ['sdkHttpResponse']) is not None:
1331
+ setv(
1332
+ to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse'])
1333
+ )
1334
+
1330
1335
  if getv(from_object, ['nextPageToken']) is not None:
1331
1336
  setv(to_object, ['next_page_token'], getv(from_object, ['nextPageToken']))
1332
1337
 
@@ -1386,6 +1391,11 @@ def _ListCachedContentsResponse_from_vertex(
1386
1391
  parent_object: Optional[dict[str, Any]] = None,
1387
1392
  ) -> dict[str, Any]:
1388
1393
  to_object: dict[str, Any] = {}
1394
+ if getv(from_object, ['sdkHttpResponse']) is not None:
1395
+ setv(
1396
+ to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse'])
1397
+ )
1398
+
1389
1399
  if getv(from_object, ['nextPageToken']) is not None:
1390
1400
  setv(to_object, ['next_page_token'], getv(from_object, ['nextPageToken']))
1391
1401
 
@@ -1773,7 +1783,9 @@ class Caches(_api_module.BaseModule):
1773
1783
  return_value = types.ListCachedContentsResponse._from_response(
1774
1784
  response=response_dict, kwargs=parameter_model.model_dump()
1775
1785
  )
1776
-
1786
+ return_value.sdk_http_response = types.HttpResponse(
1787
+ headers=response.headers
1788
+ )
1777
1789
  self._api_client._verify_response(return_value)
1778
1790
  return return_value
1779
1791
 
@@ -2165,7 +2177,9 @@ class AsyncCaches(_api_module.BaseModule):
2165
2177
  return_value = types.ListCachedContentsResponse._from_response(
2166
2178
  response=response_dict, kwargs=parameter_model.model_dump()
2167
2179
  )
2168
-
2180
+ return_value.sdk_http_response = types.HttpResponse(
2181
+ headers=response.headers
2182
+ )
2169
2183
  self._api_client._verify_response(return_value)
2170
2184
  return return_value
2171
2185
 
google/genai/errors.py CHANGED
@@ -65,7 +65,7 @@ class APIError(Exception):
65
65
  'code', response_json.get('error', {}).get('code', None)
66
66
  )
67
67
 
68
- def _to_replay_record(self) -> dict[str, Any]:
68
+ def _to_replay_record(self) -> _common.StringDict:
69
69
  """Returns a dictionary representation of the error for replay recording.
70
70
 
71
71
  details is not included since it may expose internal information in the
google/genai/files.py CHANGED
@@ -267,6 +267,11 @@ def _ListFilesResponse_from_mldev(
267
267
  parent_object: Optional[dict[str, Any]] = None,
268
268
  ) -> dict[str, Any]:
269
269
  to_object: dict[str, Any] = {}
270
+ if getv(from_object, ['sdkHttpResponse']) is not None:
271
+ setv(
272
+ to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse'])
273
+ )
274
+
270
275
  if getv(from_object, ['nextPageToken']) is not None:
271
276
  setv(to_object, ['next_page_token'], getv(from_object, ['nextPageToken']))
272
277
 
@@ -370,7 +375,9 @@ class Files(_api_module.BaseModule):
370
375
  return_value = types.ListFilesResponse._from_response(
371
376
  response=response_dict, kwargs=parameter_model.model_dump()
372
377
  )
373
-
378
+ return_value.sdk_http_response = types.HttpResponse(
379
+ headers=response.headers
380
+ )
374
381
  self._api_client._verify_response(return_value)
375
382
  return return_value
376
383
 
@@ -848,7 +855,9 @@ class AsyncFiles(_api_module.BaseModule):
848
855
  return_value = types.ListFilesResponse._from_response(
849
856
  response=response_dict, kwargs=parameter_model.model_dump()
850
857
  )
851
-
858
+ return_value.sdk_http_response = types.HttpResponse(
859
+ headers=response.headers
860
+ )
852
861
  self._api_client._verify_response(return_value)
853
862
  return return_value
854
863
 
google/genai/live.py CHANGED
@@ -33,7 +33,6 @@ from . import _common
33
33
  from . import _live_converters as live_converters
34
34
  from . import _mcp_utils
35
35
  from . import _transformers as t
36
- from . import client
37
36
  from . import errors
38
37
  from . import types
39
38
  from ._api_client import BaseApiClient
@@ -288,7 +287,7 @@ class AsyncSession:
288
287
  print(f'{msg.text}')
289
288
  ```
290
289
  """
291
- kwargs: dict[str, Any] = {}
290
+ kwargs: _common.StringDict = {}
292
291
  if media is not None:
293
292
  kwargs['media'] = media
294
293
  if audio is not None:
@@ -639,7 +638,7 @@ class AsyncSession:
639
638
  elif isinstance(formatted_input, Sequence) and any(
640
639
  isinstance(c, str) for c in formatted_input
641
640
  ):
642
- to_object: dict[str, Any] = {}
641
+ to_object: _common.StringDict = {}
643
642
  content_input_parts: list[types.PartUnion] = []
644
643
  for item in formatted_input:
645
644
  if isinstance(item, get_args(types.PartUnion)):
google/genai/models.py CHANGED
@@ -996,6 +996,9 @@ def _GenerateImagesConfig_to_mldev(
996
996
  if getv(from_object, ['add_watermark']) is not None:
997
997
  raise ValueError('add_watermark parameter is not supported in Gemini API.')
998
998
 
999
+ if getv(from_object, ['image_size']) is not None:
1000
+ raise ValueError('image_size parameter is not supported in Gemini API.')
1001
+
999
1002
  if getv(from_object, ['enhance_prompt']) is not None:
1000
1003
  raise ValueError('enhance_prompt parameter is not supported in Gemini API.')
1001
1004
 
@@ -1239,6 +1242,15 @@ def _Image_to_mldev(
1239
1242
  return to_object
1240
1243
 
1241
1244
 
1245
+ def _GenerateVideosSource_to_mldev(
1246
+ from_object: Union[dict[str, Any], object],
1247
+ parent_object: Optional[dict[str, Any]] = None,
1248
+ ) -> dict[str, Any]:
1249
+ to_object: dict[str, Any] = {}
1250
+
1251
+ return to_object
1252
+
1253
+
1242
1254
  def _GenerateVideosConfig_to_mldev(
1243
1255
  from_object: Union[dict[str, Any], object],
1244
1256
  parent_object: Optional[dict[str, Any]] = None,
@@ -2388,6 +2400,13 @@ def _GenerateImagesConfig_to_vertex(
2388
2400
  getv(from_object, ['add_watermark']),
2389
2401
  )
2390
2402
 
2403
+ if getv(from_object, ['image_size']) is not None:
2404
+ setv(
2405
+ parent_object,
2406
+ ['parameters', 'sampleImageSize'],
2407
+ getv(from_object, ['image_size']),
2408
+ )
2409
+
2391
2410
  if getv(from_object, ['enhance_prompt']) is not None:
2392
2411
  setv(
2393
2412
  parent_object,
@@ -3071,6 +3090,15 @@ def _Video_to_vertex(
3071
3090
  return to_object
3072
3091
 
3073
3092
 
3093
+ def _GenerateVideosSource_to_vertex(
3094
+ from_object: Union[dict[str, Any], object],
3095
+ parent_object: Optional[dict[str, Any]] = None,
3096
+ ) -> dict[str, Any]:
3097
+ to_object: dict[str, Any] = {}
3098
+
3099
+ return to_object
3100
+
3101
+
3074
3102
  def _GenerateVideosConfig_to_vertex(
3075
3103
  from_object: Union[dict[str, Any], object],
3076
3104
  parent_object: Optional[dict[str, Any]] = None,
@@ -3521,6 +3549,11 @@ def _EmbedContentResponse_from_mldev(
3521
3549
  parent_object: Optional[dict[str, Any]] = None,
3522
3550
  ) -> dict[str, Any]:
3523
3551
  to_object: dict[str, Any] = {}
3552
+ if getv(from_object, ['sdkHttpResponse']) is not None:
3553
+ setv(
3554
+ to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse'])
3555
+ )
3556
+
3524
3557
  if getv(from_object, ['embeddings']) is not None:
3525
3558
  setv(
3526
3559
  to_object,
@@ -3619,6 +3652,11 @@ def _GenerateImagesResponse_from_mldev(
3619
3652
  parent_object: Optional[dict[str, Any]] = None,
3620
3653
  ) -> dict[str, Any]:
3621
3654
  to_object: dict[str, Any] = {}
3655
+ if getv(from_object, ['sdkHttpResponse']) is not None:
3656
+ setv(
3657
+ to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse'])
3658
+ )
3659
+
3622
3660
  if getv(from_object, ['predictions']) is not None:
3623
3661
  setv(
3624
3662
  to_object,
@@ -3709,6 +3747,11 @@ def _ListModelsResponse_from_mldev(
3709
3747
  parent_object: Optional[dict[str, Any]] = None,
3710
3748
  ) -> dict[str, Any]:
3711
3749
  to_object: dict[str, Any] = {}
3750
+ if getv(from_object, ['sdkHttpResponse']) is not None:
3751
+ setv(
3752
+ to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse'])
3753
+ )
3754
+
3712
3755
  if getv(from_object, ['nextPageToken']) is not None:
3713
3756
  setv(to_object, ['next_page_token'], getv(from_object, ['nextPageToken']))
3714
3757
 
@@ -3739,6 +3782,11 @@ def _CountTokensResponse_from_mldev(
3739
3782
  parent_object: Optional[dict[str, Any]] = None,
3740
3783
  ) -> dict[str, Any]:
3741
3784
  to_object: dict[str, Any] = {}
3785
+ if getv(from_object, ['sdkHttpResponse']) is not None:
3786
+ setv(
3787
+ to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse'])
3788
+ )
3789
+
3742
3790
  if getv(from_object, ['totalTokens']) is not None:
3743
3791
  setv(to_object, ['total_tokens'], getv(from_object, ['totalTokens']))
3744
3792
 
@@ -4191,6 +4239,11 @@ def _EmbedContentResponse_from_vertex(
4191
4239
  parent_object: Optional[dict[str, Any]] = None,
4192
4240
  ) -> dict[str, Any]:
4193
4241
  to_object: dict[str, Any] = {}
4242
+ if getv(from_object, ['sdkHttpResponse']) is not None:
4243
+ setv(
4244
+ to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse'])
4245
+ )
4246
+
4194
4247
  if getv(from_object, ['predictions[]', 'embeddings']) is not None:
4195
4248
  setv(
4196
4249
  to_object,
@@ -4294,6 +4347,11 @@ def _GenerateImagesResponse_from_vertex(
4294
4347
  parent_object: Optional[dict[str, Any]] = None,
4295
4348
  ) -> dict[str, Any]:
4296
4349
  to_object: dict[str, Any] = {}
4350
+ if getv(from_object, ['sdkHttpResponse']) is not None:
4351
+ setv(
4352
+ to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse'])
4353
+ )
4354
+
4297
4355
  if getv(from_object, ['predictions']) is not None:
4298
4356
  setv(
4299
4357
  to_object,
@@ -4321,6 +4379,11 @@ def _EditImageResponse_from_vertex(
4321
4379
  parent_object: Optional[dict[str, Any]] = None,
4322
4380
  ) -> dict[str, Any]:
4323
4381
  to_object: dict[str, Any] = {}
4382
+ if getv(from_object, ['sdkHttpResponse']) is not None:
4383
+ setv(
4384
+ to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse'])
4385
+ )
4386
+
4324
4387
  if getv(from_object, ['predictions']) is not None:
4325
4388
  setv(
4326
4389
  to_object,
@@ -4339,6 +4402,11 @@ def _UpscaleImageResponse_from_vertex(
4339
4402
  parent_object: Optional[dict[str, Any]] = None,
4340
4403
  ) -> dict[str, Any]:
4341
4404
  to_object: dict[str, Any] = {}
4405
+ if getv(from_object, ['sdkHttpResponse']) is not None:
4406
+ setv(
4407
+ to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse'])
4408
+ )
4409
+
4342
4410
  if getv(from_object, ['predictions']) is not None:
4343
4411
  setv(
4344
4412
  to_object,
@@ -4471,6 +4539,11 @@ def _ListModelsResponse_from_vertex(
4471
4539
  parent_object: Optional[dict[str, Any]] = None,
4472
4540
  ) -> dict[str, Any]:
4473
4541
  to_object: dict[str, Any] = {}
4542
+ if getv(from_object, ['sdkHttpResponse']) is not None:
4543
+ setv(
4544
+ to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse'])
4545
+ )
4546
+
4474
4547
  if getv(from_object, ['nextPageToken']) is not None:
4475
4548
  setv(to_object, ['next_page_token'], getv(from_object, ['nextPageToken']))
4476
4549
 
@@ -4501,6 +4574,11 @@ def _CountTokensResponse_from_vertex(
4501
4574
  parent_object: Optional[dict[str, Any]] = None,
4502
4575
  ) -> dict[str, Any]:
4503
4576
  to_object: dict[str, Any] = {}
4577
+ if getv(from_object, ['sdkHttpResponse']) is not None:
4578
+ setv(
4579
+ to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse'])
4580
+ )
4581
+
4504
4582
  if getv(from_object, ['totalTokens']) is not None:
4505
4583
  setv(to_object, ['total_tokens'], getv(from_object, ['totalTokens']))
4506
4584
 
@@ -4512,6 +4590,11 @@ def _ComputeTokensResponse_from_vertex(
4512
4590
  parent_object: Optional[dict[str, Any]] = None,
4513
4591
  ) -> dict[str, Any]:
4514
4592
  to_object: dict[str, Any] = {}
4593
+ if getv(from_object, ['sdkHttpResponse']) is not None:
4594
+ setv(
4595
+ to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse'])
4596
+ )
4597
+
4515
4598
  if getv(from_object, ['tokensInfo']) is not None:
4516
4599
  setv(to_object, ['tokens_info'], getv(from_object, ['tokensInfo']))
4517
4600
 
@@ -4865,7 +4948,9 @@ class Models(_api_module.BaseModule):
4865
4948
  return_value = types.EmbedContentResponse._from_response(
4866
4949
  response=response_dict, kwargs=parameter_model.model_dump()
4867
4950
  )
4868
-
4951
+ return_value.sdk_http_response = types.HttpResponse(
4952
+ headers=response.headers
4953
+ )
4869
4954
  self._api_client._verify_response(return_value)
4870
4955
  return return_value
4871
4956
 
@@ -4941,7 +5026,9 @@ class Models(_api_module.BaseModule):
4941
5026
  return_value = types.GenerateImagesResponse._from_response(
4942
5027
  response=response_dict, kwargs=parameter_model.model_dump()
4943
5028
  )
4944
-
5029
+ return_value.sdk_http_response = types.HttpResponse(
5030
+ headers=response.headers
5031
+ )
4945
5032
  self._api_client._verify_response(return_value)
4946
5033
  return return_value
4947
5034
 
@@ -5043,7 +5130,9 @@ class Models(_api_module.BaseModule):
5043
5130
  return_value = types.EditImageResponse._from_response(
5044
5131
  response=response_dict, kwargs=parameter_model.model_dump()
5045
5132
  )
5046
-
5133
+ return_value.sdk_http_response = types.HttpResponse(
5134
+ headers=response.headers
5135
+ )
5047
5136
  self._api_client._verify_response(return_value)
5048
5137
  return return_value
5049
5138
 
@@ -5112,7 +5201,9 @@ class Models(_api_module.BaseModule):
5112
5201
  return_value = types.UpscaleImageResponse._from_response(
5113
5202
  response=response_dict, kwargs=parameter_model.model_dump()
5114
5203
  )
5115
-
5204
+ return_value.sdk_http_response = types.HttpResponse(
5205
+ headers=response.headers
5206
+ )
5116
5207
  self._api_client._verify_response(return_value)
5117
5208
  return return_value
5118
5209
 
@@ -5233,7 +5324,9 @@ class Models(_api_module.BaseModule):
5233
5324
  return_value = types.ListModelsResponse._from_response(
5234
5325
  response=response_dict, kwargs=parameter_model.model_dump()
5235
5326
  )
5236
-
5327
+ return_value.sdk_http_response = types.HttpResponse(
5328
+ headers=response.headers
5329
+ )
5237
5330
  self._api_client._verify_response(return_value)
5238
5331
  return return_value
5239
5332
 
@@ -5454,7 +5547,9 @@ class Models(_api_module.BaseModule):
5454
5547
  return_value = types.CountTokensResponse._from_response(
5455
5548
  response=response_dict, kwargs=parameter_model.model_dump()
5456
5549
  )
5457
-
5550
+ return_value.sdk_http_response = types.HttpResponse(
5551
+ headers=response.headers
5552
+ )
5458
5553
  self._api_client._verify_response(return_value)
5459
5554
  return return_value
5460
5555
 
@@ -5535,11 +5630,13 @@ class Models(_api_module.BaseModule):
5535
5630
  return_value = types.ComputeTokensResponse._from_response(
5536
5631
  response=response_dict, kwargs=parameter_model.model_dump()
5537
5632
  )
5538
-
5633
+ return_value.sdk_http_response = types.HttpResponse(
5634
+ headers=response.headers
5635
+ )
5539
5636
  self._api_client._verify_response(return_value)
5540
5637
  return return_value
5541
5638
 
5542
- def generate_videos(
5639
+ def _generate_videos(
5543
5640
  self,
5544
5641
  *,
5545
5642
  model: str,
@@ -5560,7 +5657,7 @@ class Models(_api_module.BaseModule):
5560
5657
  Args:
5561
5658
  model: The model to use.
5562
5659
  prompt: The text prompt for generating the videos. Optional for image to
5563
- video use cases.
5660
+ video and video extension use cases.
5564
5661
  image: The input image for generating the videos. Optional if prompt is
5565
5662
  provided.
5566
5663
  video: The input video for video extension use cases. Optional if prompt
@@ -6129,6 +6226,56 @@ class Models(_api_module.BaseModule):
6129
6226
  config=api_config,
6130
6227
  )
6131
6228
 
6229
+ def generate_videos(
6230
+ self,
6231
+ *,
6232
+ model: str,
6233
+ prompt: Optional[str] = None,
6234
+ image: Optional[types.ImageOrDict] = None,
6235
+ video: Optional[types.VideoOrDict] = None,
6236
+ config: Optional[types.GenerateVideosConfigOrDict] = None,
6237
+ ) -> types.GenerateVideosOperation:
6238
+ """Generates videos based on an input (text, image, or video) and configuration.
6239
+
6240
+ The following use cases are supported:
6241
+ 1. Text to video generation.
6242
+ 2a. Image to video generation (additional text prompt is optional).
6243
+ 2b. Image to video generation with frame interpolation (specify last_frame
6244
+ in config).
6245
+ 3. Video extension (additional text prompt is optional)
6246
+
6247
+ Args:
6248
+ model: The model to use.
6249
+ prompt: The text prompt for generating the videos. Optional for image to
6250
+ video and video extension use cases.
6251
+ image: The input image for generating the videos. Optional if prompt is
6252
+ provided.
6253
+ video: The input video for video extension use cases. Optional if prompt
6254
+ or image is provided.
6255
+ config: Configuration for generation.
6256
+
6257
+ Usage:
6258
+
6259
+ ```
6260
+ operation = client.models.generate_videos(
6261
+ model="veo-2.0-generate-001",
6262
+ prompt="A neon hologram of a cat driving at top speed",
6263
+ )
6264
+ while not operation.done:
6265
+ time.sleep(10)
6266
+ operation = client.operations.get(operation)
6267
+
6268
+ operation.result.generated_videos[0].video.uri
6269
+ ```
6270
+ """
6271
+ return self._generate_videos(
6272
+ model=model,
6273
+ prompt=prompt,
6274
+ image=image,
6275
+ video=video,
6276
+ config=config,
6277
+ )
6278
+
6132
6279
  def list(
6133
6280
  self,
6134
6281
  *,
@@ -6426,7 +6573,9 @@ class AsyncModels(_api_module.BaseModule):
6426
6573
  return_value = types.EmbedContentResponse._from_response(
6427
6574
  response=response_dict, kwargs=parameter_model.model_dump()
6428
6575
  )
6429
-
6576
+ return_value.sdk_http_response = types.HttpResponse(
6577
+ headers=response.headers
6578
+ )
6430
6579
  self._api_client._verify_response(return_value)
6431
6580
  return return_value
6432
6581
 
@@ -6502,7 +6651,9 @@ class AsyncModels(_api_module.BaseModule):
6502
6651
  return_value = types.GenerateImagesResponse._from_response(
6503
6652
  response=response_dict, kwargs=parameter_model.model_dump()
6504
6653
  )
6505
-
6654
+ return_value.sdk_http_response = types.HttpResponse(
6655
+ headers=response.headers
6656
+ )
6506
6657
  self._api_client._verify_response(return_value)
6507
6658
  return return_value
6508
6659
 
@@ -6604,7 +6755,9 @@ class AsyncModels(_api_module.BaseModule):
6604
6755
  return_value = types.EditImageResponse._from_response(
6605
6756
  response=response_dict, kwargs=parameter_model.model_dump()
6606
6757
  )
6607
-
6758
+ return_value.sdk_http_response = types.HttpResponse(
6759
+ headers=response.headers
6760
+ )
6608
6761
  self._api_client._verify_response(return_value)
6609
6762
  return return_value
6610
6763
 
@@ -6673,7 +6826,9 @@ class AsyncModels(_api_module.BaseModule):
6673
6826
  return_value = types.UpscaleImageResponse._from_response(
6674
6827
  response=response_dict, kwargs=parameter_model.model_dump()
6675
6828
  )
6676
-
6829
+ return_value.sdk_http_response = types.HttpResponse(
6830
+ headers=response.headers
6831
+ )
6677
6832
  self._api_client._verify_response(return_value)
6678
6833
  return return_value
6679
6834
 
@@ -6798,7 +6953,9 @@ class AsyncModels(_api_module.BaseModule):
6798
6953
  return_value = types.ListModelsResponse._from_response(
6799
6954
  response=response_dict, kwargs=parameter_model.model_dump()
6800
6955
  )
6801
-
6956
+ return_value.sdk_http_response = types.HttpResponse(
6957
+ headers=response.headers
6958
+ )
6802
6959
  self._api_client._verify_response(return_value)
6803
6960
  return return_value
6804
6961
 
@@ -7019,7 +7176,9 @@ class AsyncModels(_api_module.BaseModule):
7019
7176
  return_value = types.CountTokensResponse._from_response(
7020
7177
  response=response_dict, kwargs=parameter_model.model_dump()
7021
7178
  )
7022
-
7179
+ return_value.sdk_http_response = types.HttpResponse(
7180
+ headers=response.headers
7181
+ )
7023
7182
  self._api_client._verify_response(return_value)
7024
7183
  return return_value
7025
7184
 
@@ -7099,11 +7258,13 @@ class AsyncModels(_api_module.BaseModule):
7099
7258
  return_value = types.ComputeTokensResponse._from_response(
7100
7259
  response=response_dict, kwargs=parameter_model.model_dump()
7101
7260
  )
7102
-
7261
+ return_value.sdk_http_response = types.HttpResponse(
7262
+ headers=response.headers
7263
+ )
7103
7264
  self._api_client._verify_response(return_value)
7104
7265
  return return_value
7105
7266
 
7106
- async def generate_videos(
7267
+ async def _generate_videos(
7107
7268
  self,
7108
7269
  *,
7109
7270
  model: str,
@@ -7124,7 +7285,7 @@ class AsyncModels(_api_module.BaseModule):
7124
7285
  Args:
7125
7286
  model: The model to use.
7126
7287
  prompt: The text prompt for generating the videos. Optional for image to
7127
- video use cases.
7288
+ video and video extension use cases.
7128
7289
  image: The input image for generating the videos. Optional if prompt is
7129
7290
  provided.
7130
7291
  video: The input video for video extension use cases. Optional if prompt
@@ -7724,3 +7885,53 @@ class AsyncModels(_api_module.BaseModule):
7724
7885
  upscale_factor=upscale_factor,
7725
7886
  config=api_config,
7726
7887
  )
7888
+
7889
+ async def generate_videos(
7890
+ self,
7891
+ *,
7892
+ model: str,
7893
+ prompt: Optional[str] = None,
7894
+ image: Optional[types.ImageOrDict] = None,
7895
+ video: Optional[types.VideoOrDict] = None,
7896
+ config: Optional[types.GenerateVideosConfigOrDict] = None,
7897
+ ) -> types.GenerateVideosOperation:
7898
+ """Generates videos based on an input (text, image, or video) and configuration.
7899
+
7900
+ The following use cases are supported:
7901
+ 1. Text to video generation.
7902
+ 2a. Image to video generation (additional text prompt is optional).
7903
+ 2b. Image to video generation with frame interpolation (specify last_frame
7904
+ in config).
7905
+ 3. Video extension (additional text prompt is optional)
7906
+
7907
+ Args:
7908
+ model: The model to use.
7909
+ prompt: The text prompt for generating the videos. Optional for image to
7910
+ video and video extension use cases.
7911
+ image: The input image for generating the videos. Optional if prompt is
7912
+ provided.
7913
+ video: The input video for video extension use cases. Optional if prompt
7914
+ or image is provided.
7915
+ config: Configuration for generation.
7916
+
7917
+ Usage:
7918
+
7919
+ ```
7920
+ operation = client.models.generate_videos(
7921
+ model="veo-2.0-generate-001",
7922
+ prompt="A neon hologram of a cat driving at top speed",
7923
+ )
7924
+ while not operation.done:
7925
+ time.sleep(10)
7926
+ operation = client.operations.get(operation)
7927
+
7928
+ operation.result.generated_videos[0].video.uri
7929
+ ```
7930
+ """
7931
+ return await self._generate_videos(
7932
+ model=model,
7933
+ prompt=prompt,
7934
+ image=image,
7935
+ video=video,
7936
+ config=config,
7937
+ )
google/genai/pagers.py CHANGED
@@ -18,7 +18,9 @@
18
18
  # pylint: disable=protected-access
19
19
 
20
20
  import copy
21
- from typing import Any, AsyncIterator,Awaitable, Callable, Generic, Iterator, Literal, TypeVar
21
+ from typing import Any, AsyncIterator, Awaitable, Callable, Generic, Iterator, Literal, TypeVar, Union
22
+ from . import _common
23
+ from . import types
22
24
 
23
25
  T = TypeVar('T')
24
26
 
@@ -43,6 +45,8 @@ class _BasePager(Generic[T]):
43
45
  self._page = getattr(response, self._name) or []
44
46
  self._idx = 0
45
47
 
48
+ self._sdk_http_response = getattr(response, 'sdk_http_response', None)
49
+
46
50
  if not config:
47
51
  request_config = {}
48
52
  elif isinstance(config, dict):
@@ -65,7 +69,7 @@ class _BasePager(Generic[T]):
65
69
 
66
70
  @property
67
71
  def page(self) -> list[T]:
68
- """Returns a subset of the entire list of items.
72
+ """Returns a subset of the entire list of items.
69
73
 
70
74
  For the number of items returned, see `pageSize()`.
71
75
 
@@ -111,7 +115,13 @@ class _BasePager(Generic[T]):
111
115
  return self._page_size
112
116
 
113
117
  @property
114
- def config(self) -> dict[str, Any]:
118
+ def sdk_http_response(self) -> Union[types.HttpResponse, None]:
119
+ """Returns the http response of the API response."""
120
+
121
+ return self._sdk_http_response
122
+
123
+ @property
124
+ def config(self) -> _common.StringDict:
115
125
  """Returns the configuration when making the API request for the next page.
116
126
 
117
127
  A configuration is a set of optional parameters and arguments that can be
google/genai/tokens.py CHANGED
@@ -27,7 +27,7 @@ from . import types
27
27
  logger = logging.getLogger('google_genai.tokens')
28
28
 
29
29
 
30
- def _get_field_masks(setup: Dict[str, Any]) -> str:
30
+ def _get_field_masks(setup: _common.StringDict) -> str:
31
31
  """Return field_masks"""
32
32
  fields = []
33
33
  for k, v in setup.items():
@@ -42,9 +42,9 @@ def _get_field_masks(setup: Dict[str, Any]) -> str:
42
42
 
43
43
 
44
44
  def _convert_bidi_setup_to_token_setup(
45
- request_dict: dict[str, Any],
45
+ request_dict: _common.StringDict,
46
46
  config: Optional[types.CreateAuthTokenConfigOrDict] = None,
47
- ) -> Dict[str, Any]:
47
+ ) -> _common.StringDict:
48
48
  """Converts bidiGenerateContentSetup."""
49
49
  bidi_setup = request_dict.get('bidiGenerateContentSetup')
50
50
  if bidi_setup and bidi_setup.get('setup'):