google-genai 1.31.0__py3-none-any.whl → 1.32.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/models.py CHANGED
@@ -21,6 +21,7 @@ from typing import Any, AsyncIterator, Awaitable, Iterator, Optional, Union
21
21
  from urllib.parse import urlencode
22
22
 
23
23
  from . import _api_module
24
+ from . import _base_transformers as base_t
24
25
  from . import _common
25
26
  from . import _extra_utils
26
27
  from . import _mcp_utils
@@ -1260,7 +1261,7 @@ def _Image_to_mldev(
1260
1261
  setv(
1261
1262
  to_object,
1262
1263
  ['bytesBase64Encoded'],
1263
- t.t_bytes(getv(from_object, ['image_bytes'])),
1264
+ base_t.t_bytes(getv(from_object, ['image_bytes'])),
1264
1265
  )
1265
1266
 
1266
1267
  if getv(from_object, ['mime_type']) is not None:
@@ -1269,6 +1270,29 @@ def _Image_to_mldev(
1269
1270
  return to_object
1270
1271
 
1271
1272
 
1273
+ def _GenerateVideosSource_to_mldev(
1274
+ from_object: Union[dict[str, Any], object],
1275
+ parent_object: Optional[dict[str, Any]] = None,
1276
+ ) -> dict[str, Any]:
1277
+ to_object: dict[str, Any] = {}
1278
+ if getv(from_object, ['prompt']) is not None:
1279
+ setv(
1280
+ parent_object, ['instances[0]', 'prompt'], getv(from_object, ['prompt'])
1281
+ )
1282
+
1283
+ if getv(from_object, ['image']) is not None:
1284
+ setv(
1285
+ parent_object,
1286
+ ['instances[0]', 'image'],
1287
+ _Image_to_mldev(getv(from_object, ['image']), to_object),
1288
+ )
1289
+
1290
+ if getv(from_object, ['video']) is not None:
1291
+ raise ValueError('video parameter is not supported in Gemini API.')
1292
+
1293
+ return to_object
1294
+
1295
+
1272
1296
  def _GenerateVideosConfig_to_mldev(
1273
1297
  from_object: Union[dict[str, Any], object],
1274
1298
  parent_object: Optional[dict[str, Any]] = None,
@@ -1377,6 +1401,15 @@ def _GenerateVideosParameters_to_mldev(
1377
1401
  if getv(from_object, ['video']) is not None:
1378
1402
  raise ValueError('video parameter is not supported in Gemini API.')
1379
1403
 
1404
+ if getv(from_object, ['source']) is not None:
1405
+ setv(
1406
+ to_object,
1407
+ ['config'],
1408
+ _GenerateVideosSource_to_mldev(
1409
+ getv(from_object, ['source']), to_object
1410
+ ),
1411
+ )
1412
+
1380
1413
  if getv(from_object, ['config']) is not None:
1381
1414
  setv(
1382
1415
  to_object,
@@ -2502,7 +2535,7 @@ def _Image_to_vertex(
2502
2535
  setv(
2503
2536
  to_object,
2504
2537
  ['bytesBase64Encoded'],
2505
- t.t_bytes(getv(from_object, ['image_bytes'])),
2538
+ base_t.t_bytes(getv(from_object, ['image_bytes'])),
2506
2539
  )
2507
2540
 
2508
2541
  if getv(from_object, ['mime_type']) is not None:
@@ -2797,6 +2830,13 @@ def _UpscaleImageAPIConfig_to_vertex(
2797
2830
  ) -> dict[str, Any]:
2798
2831
  to_object: dict[str, Any] = {}
2799
2832
 
2833
+ if getv(from_object, ['output_gcs_uri']) is not None:
2834
+ setv(
2835
+ parent_object,
2836
+ ['parameters', 'storageUri'],
2837
+ getv(from_object, ['output_gcs_uri']),
2838
+ )
2839
+
2800
2840
  if getv(from_object, ['include_rai_reason']) is not None:
2801
2841
  setv(
2802
2842
  parent_object,
@@ -2973,6 +3013,13 @@ def _RecontextImageConfig_to_vertex(
2973
3013
  getv(from_object, ['person_generation']),
2974
3014
  )
2975
3015
 
3016
+ if getv(from_object, ['add_watermark']) is not None:
3017
+ setv(
3018
+ parent_object,
3019
+ ['parameters', 'addWatermark'],
3020
+ getv(from_object, ['add_watermark']),
3021
+ )
3022
+
2976
3023
  if getv(from_object, ['output_mime_type']) is not None:
2977
3024
  setv(
2978
3025
  parent_object,
@@ -3387,7 +3434,7 @@ def _Video_to_vertex(
3387
3434
  setv(
3388
3435
  to_object,
3389
3436
  ['bytesBase64Encoded'],
3390
- t.t_bytes(getv(from_object, ['video_bytes'])),
3437
+ base_t.t_bytes(getv(from_object, ['video_bytes'])),
3391
3438
  )
3392
3439
 
3393
3440
  if getv(from_object, ['mime_type']) is not None:
@@ -3396,6 +3443,33 @@ def _Video_to_vertex(
3396
3443
  return to_object
3397
3444
 
3398
3445
 
3446
+ def _GenerateVideosSource_to_vertex(
3447
+ from_object: Union[dict[str, Any], object],
3448
+ parent_object: Optional[dict[str, Any]] = None,
3449
+ ) -> dict[str, Any]:
3450
+ to_object: dict[str, Any] = {}
3451
+ if getv(from_object, ['prompt']) is not None:
3452
+ setv(
3453
+ parent_object, ['instances[0]', 'prompt'], getv(from_object, ['prompt'])
3454
+ )
3455
+
3456
+ if getv(from_object, ['image']) is not None:
3457
+ setv(
3458
+ parent_object,
3459
+ ['instances[0]', 'image'],
3460
+ _Image_to_vertex(getv(from_object, ['image']), to_object),
3461
+ )
3462
+
3463
+ if getv(from_object, ['video']) is not None:
3464
+ setv(
3465
+ parent_object,
3466
+ ['instances[0]', 'video'],
3467
+ _Video_to_vertex(getv(from_object, ['video']), to_object),
3468
+ )
3469
+
3470
+ return to_object
3471
+
3472
+
3399
3473
  def _VideoGenerationReferenceImage_to_vertex(
3400
3474
  from_object: Union[dict[str, Any], object],
3401
3475
  parent_object: Optional[dict[str, Any]] = None,
@@ -3553,6 +3627,15 @@ def _GenerateVideosParameters_to_vertex(
3553
3627
  _Video_to_vertex(getv(from_object, ['video']), to_object),
3554
3628
  )
3555
3629
 
3630
+ if getv(from_object, ['source']) is not None:
3631
+ setv(
3632
+ to_object,
3633
+ ['config'],
3634
+ _GenerateVideosSource_to_vertex(
3635
+ getv(from_object, ['source']), to_object
3636
+ ),
3637
+ )
3638
+
3556
3639
  if getv(from_object, ['config']) is not None:
3557
3640
  setv(
3558
3641
  to_object,
@@ -3914,7 +3997,7 @@ def _Image_from_mldev(
3914
3997
  setv(
3915
3998
  to_object,
3916
3999
  ['image_bytes'],
3917
- t.t_bytes(getv(from_object, ['bytesBase64Encoded'])),
4000
+ base_t.t_bytes(getv(from_object, ['bytesBase64Encoded'])),
3918
4001
  )
3919
4002
 
3920
4003
  if getv(from_object, ['mimeType']) is not None:
@@ -4101,6 +4184,10 @@ def _DeleteModelResponse_from_mldev(
4101
4184
  parent_object: Optional[dict[str, Any]] = None,
4102
4185
  ) -> dict[str, Any]:
4103
4186
  to_object: dict[str, Any] = {}
4187
+ if getv(from_object, ['sdkHttpResponse']) is not None:
4188
+ setv(
4189
+ to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse'])
4190
+ )
4104
4191
 
4105
4192
  return to_object
4106
4193
 
@@ -4140,7 +4227,7 @@ def _Video_from_mldev(
4140
4227
  setv(
4141
4228
  to_object,
4142
4229
  ['video_bytes'],
4143
- t.t_bytes(getv(from_object, ['video', 'encodedVideo'])),
4230
+ base_t.t_bytes(getv(from_object, ['video', 'encodedVideo'])),
4144
4231
  )
4145
4232
 
4146
4233
  if getv(from_object, ['encoding']) is not None:
@@ -4606,7 +4693,7 @@ def _Image_from_vertex(
4606
4693
  setv(
4607
4694
  to_object,
4608
4695
  ['image_bytes'],
4609
- t.t_bytes(getv(from_object, ['bytesBase64Encoded'])),
4696
+ base_t.t_bytes(getv(from_object, ['bytesBase64Encoded'])),
4610
4697
  )
4611
4698
 
4612
4699
  if getv(from_object, ['mimeType']) is not None:
@@ -4968,6 +5055,10 @@ def _DeleteModelResponse_from_vertex(
4968
5055
  parent_object: Optional[dict[str, Any]] = None,
4969
5056
  ) -> dict[str, Any]:
4970
5057
  to_object: dict[str, Any] = {}
5058
+ if getv(from_object, ['sdkHttpResponse']) is not None:
5059
+ setv(
5060
+ to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse'])
5061
+ )
4971
5062
 
4972
5063
  return to_object
4973
5064
 
@@ -5016,7 +5107,7 @@ def _Video_from_vertex(
5016
5107
  setv(
5017
5108
  to_object,
5018
5109
  ['video_bytes'],
5019
- t.t_bytes(getv(from_object, ['bytesBase64Encoded'])),
5110
+ base_t.t_bytes(getv(from_object, ['bytesBase64Encoded'])),
5020
5111
  )
5021
5112
 
5022
5113
  if getv(from_object, ['mimeType']) is not None:
@@ -6050,7 +6141,9 @@ class Models(_api_module.BaseModule):
6050
6141
  return_value = types.DeleteModelResponse._from_response(
6051
6142
  response=response_dict, kwargs=parameter_model.model_dump()
6052
6143
  )
6053
-
6144
+ return_value.sdk_http_response = types.HttpResponse(
6145
+ headers=response.headers
6146
+ )
6054
6147
  self._api_client._verify_response(return_value)
6055
6148
  return return_value
6056
6149
 
@@ -6235,6 +6328,7 @@ class Models(_api_module.BaseModule):
6235
6328
  prompt: Optional[str] = None,
6236
6329
  image: Optional[types.ImageOrDict] = None,
6237
6330
  video: Optional[types.VideoOrDict] = None,
6331
+ source: Optional[types.GenerateVideosSourceOrDict] = None,
6238
6332
  config: Optional[types.GenerateVideosConfigOrDict] = None,
6239
6333
  ) -> types.GenerateVideosOperation:
6240
6334
  """Generates videos based on an input (text, image, or video) and configuration.
@@ -6276,6 +6370,7 @@ class Models(_api_module.BaseModule):
6276
6370
  prompt=prompt,
6277
6371
  image=image,
6278
6372
  video=video,
6373
+ source=source,
6279
6374
  config=config,
6280
6375
  )
6281
6376
 
@@ -6794,6 +6889,7 @@ class Models(_api_module.BaseModule):
6794
6889
  config_dct = dict(config)
6795
6890
  api_config = types._UpscaleImageAPIConfigDict(
6796
6891
  http_options=config_dct.get('http_options', None),
6892
+ output_gcs_uri=config_dct.get('output_gcs_uri', None),
6797
6893
  include_rai_reason=config_dct.get('include_rai_reason', None),
6798
6894
  output_mime_type=config_dct.get('output_mime_type', None),
6799
6895
  output_compression_quality=config_dct.get(
@@ -6823,6 +6919,7 @@ class Models(_api_module.BaseModule):
6823
6919
  prompt: Optional[str] = None,
6824
6920
  image: Optional[types.ImageOrDict] = None,
6825
6921
  video: Optional[types.VideoOrDict] = None,
6922
+ source: Optional[types.GenerateVideosSourceOrDict] = None,
6826
6923
  config: Optional[types.GenerateVideosConfigOrDict] = None,
6827
6924
  ) -> types.GenerateVideosOperation:
6828
6925
  """Generates videos based on an input (text, image, or video) and configuration.
@@ -6837,11 +6934,15 @@ class Models(_api_module.BaseModule):
6837
6934
  Args:
6838
6935
  model: The model to use.
6839
6936
  prompt: The text prompt for generating the videos. Optional for image to
6840
- video and video extension use cases.
6937
+ video and video extension use cases. This argument is deprecated, please
6938
+ use source instead.
6841
6939
  image: The input image for generating the videos. Optional if prompt is
6842
- provided.
6940
+ provided. This argument is deprecated, please use source instead.
6843
6941
  video: The input video for video extension use cases. Optional if prompt
6844
- or image is provided.
6942
+ or image is provided. This argument is deprecated, please use source
6943
+ instead.
6944
+ source: The input source for generating the videos (prompt, image, and/or
6945
+ video)
6845
6946
  config: Configuration for generation.
6846
6947
 
6847
6948
  Usage:
@@ -6849,7 +6950,9 @@ class Models(_api_module.BaseModule):
6849
6950
  ```
6850
6951
  operation = client.models.generate_videos(
6851
6952
  model="veo-2.0-generate-001",
6852
- prompt="A neon hologram of a cat driving at top speed",
6953
+ source=types.GenerateVideosSource(
6954
+ prompt="A neon hologram of a cat driving at top speed",
6955
+ ),
6853
6956
  )
6854
6957
  while not operation.done:
6855
6958
  time.sleep(10)
@@ -6858,11 +6961,17 @@ class Models(_api_module.BaseModule):
6858
6961
  operation.result.generated_videos[0].video.uri
6859
6962
  ```
6860
6963
  """
6964
+ if (prompt or image or video) and source:
6965
+ raise ValueError(
6966
+ 'Source and prompt/image/video are mutually exclusive.'
6967
+ + ' Please only use source.'
6968
+ )
6861
6969
  return self._generate_videos(
6862
6970
  model=model,
6863
6971
  prompt=prompt,
6864
6972
  image=image,
6865
6973
  video=video,
6974
+ source=source,
6866
6975
  config=config,
6867
6976
  )
6868
6977
 
@@ -7869,7 +7978,9 @@ class AsyncModels(_api_module.BaseModule):
7869
7978
  return_value = types.DeleteModelResponse._from_response(
7870
7979
  response=response_dict, kwargs=parameter_model.model_dump()
7871
7980
  )
7872
-
7981
+ return_value.sdk_http_response = types.HttpResponse(
7982
+ headers=response.headers
7983
+ )
7873
7984
  self._api_client._verify_response(return_value)
7874
7985
  return return_value
7875
7986
 
@@ -8053,6 +8164,7 @@ class AsyncModels(_api_module.BaseModule):
8053
8164
  prompt: Optional[str] = None,
8054
8165
  image: Optional[types.ImageOrDict] = None,
8055
8166
  video: Optional[types.VideoOrDict] = None,
8167
+ source: Optional[types.GenerateVideosSourceOrDict] = None,
8056
8168
  config: Optional[types.GenerateVideosConfigOrDict] = None,
8057
8169
  ) -> types.GenerateVideosOperation:
8058
8170
  """Generates videos based on an input (text, image, or video) and configuration.
@@ -8094,6 +8206,7 @@ class AsyncModels(_api_module.BaseModule):
8094
8206
  prompt=prompt,
8095
8207
  image=image,
8096
8208
  video=video,
8209
+ source=source,
8097
8210
  config=config,
8098
8211
  )
8099
8212
 
@@ -8645,6 +8758,7 @@ class AsyncModels(_api_module.BaseModule):
8645
8758
  config_dct = dict(config)
8646
8759
  api_config = types._UpscaleImageAPIConfigDict(
8647
8760
  http_options=config_dct.get('http_options', None),
8761
+ output_gcs_uri=config_dct.get('output_gcs_uri', None),
8648
8762
  include_rai_reason=config_dct.get('include_rai_reason', None),
8649
8763
  output_mime_type=config_dct.get('output_mime_type', None),
8650
8764
  output_compression_quality=config_dct.get(
@@ -8674,6 +8788,7 @@ class AsyncModels(_api_module.BaseModule):
8674
8788
  prompt: Optional[str] = None,
8675
8789
  image: Optional[types.ImageOrDict] = None,
8676
8790
  video: Optional[types.VideoOrDict] = None,
8791
+ source: Optional[types.GenerateVideosSourceOrDict] = None,
8677
8792
  config: Optional[types.GenerateVideosConfigOrDict] = None,
8678
8793
  ) -> types.GenerateVideosOperation:
8679
8794
  """Generates videos based on an input (text, image, or video) and configuration.
@@ -8688,11 +8803,15 @@ class AsyncModels(_api_module.BaseModule):
8688
8803
  Args:
8689
8804
  model: The model to use.
8690
8805
  prompt: The text prompt for generating the videos. Optional for image to
8691
- video and video extension use cases.
8806
+ video and video extension use cases. This argument is deprecated, please
8807
+ use source instead.
8692
8808
  image: The input image for generating the videos. Optional if prompt is
8693
- provided.
8809
+ provided. This argument is deprecated, please use source instead.
8694
8810
  video: The input video for video extension use cases. Optional if prompt
8695
- or image is provided.
8811
+ or image is provided. This argument is deprecated, please use source
8812
+ instead.
8813
+ source: The input source for generating the videos (prompt, image, and/or
8814
+ video)
8696
8815
  config: Configuration for generation.
8697
8816
 
8698
8817
  Usage:
@@ -8700,7 +8819,9 @@ class AsyncModels(_api_module.BaseModule):
8700
8819
  ```
8701
8820
  operation = client.models.generate_videos(
8702
8821
  model="veo-2.0-generate-001",
8703
- prompt="A neon hologram of a cat driving at top speed",
8822
+ source=types.GenerateVideosSource(
8823
+ prompt="A neon hologram of a cat driving at top speed",
8824
+ ),
8704
8825
  )
8705
8826
  while not operation.done:
8706
8827
  time.sleep(10)
@@ -8709,10 +8830,16 @@ class AsyncModels(_api_module.BaseModule):
8709
8830
  operation.result.generated_videos[0].video.uri
8710
8831
  ```
8711
8832
  """
8833
+ if (prompt or image or video) and source:
8834
+ raise ValueError(
8835
+ 'Source and prompt/image/video are mutually exclusive.'
8836
+ + ' Please only use source.'
8837
+ )
8712
8838
  return await self._generate_videos(
8713
8839
  model=model,
8714
8840
  prompt=prompt,
8715
8841
  image=image,
8716
8842
  video=video,
8843
+ source=source,
8717
8844
  config=config,
8718
8845
  )
google/genai/tunings.py CHANGED
@@ -87,6 +87,20 @@ def _ListTuningJobsParameters_to_mldev(
87
87
  return to_object
88
88
 
89
89
 
90
+ def _CancelTuningJobParameters_to_mldev(
91
+ from_object: Union[dict[str, Any], object],
92
+ parent_object: Optional[dict[str, Any]] = None,
93
+ ) -> dict[str, Any]:
94
+ to_object: dict[str, Any] = {}
95
+ if getv(from_object, ['name']) is not None:
96
+ setv(to_object, ['_url', 'name'], getv(from_object, ['name']))
97
+
98
+ if getv(from_object, ['config']) is not None:
99
+ setv(to_object, ['config'], getv(from_object, ['config']))
100
+
101
+ return to_object
102
+
103
+
90
104
  def _TuningExample_to_mldev(
91
105
  from_object: Union[dict[str, Any], object],
92
106
  parent_object: Optional[dict[str, Any]] = None,
@@ -285,6 +299,20 @@ def _ListTuningJobsParameters_to_vertex(
285
299
  return to_object
286
300
 
287
301
 
302
+ def _CancelTuningJobParameters_to_vertex(
303
+ from_object: Union[dict[str, Any], object],
304
+ parent_object: Optional[dict[str, Any]] = None,
305
+ ) -> dict[str, Any]:
306
+ to_object: dict[str, Any] = {}
307
+ if getv(from_object, ['name']) is not None:
308
+ setv(to_object, ['_url', 'name'], getv(from_object, ['name']))
309
+
310
+ if getv(from_object, ['config']) is not None:
311
+ setv(to_object, ['config'], getv(from_object, ['config']))
312
+
313
+ return to_object
314
+
315
+
288
316
  def _TuningDataset_to_vertex(
289
317
  from_object: Union[dict[str, Any], object],
290
318
  parent_object: Optional[dict[str, Any]] = None,
@@ -1060,6 +1088,59 @@ class Tunings(_api_module.BaseModule):
1060
1088
  self._api_client._verify_response(return_value)
1061
1089
  return return_value
1062
1090
 
1091
+ def cancel(
1092
+ self,
1093
+ *,
1094
+ name: str,
1095
+ config: Optional[types.CancelTuningJobConfigOrDict] = None,
1096
+ ) -> None:
1097
+ """Cancels a tuning job.
1098
+
1099
+ Args:
1100
+ name (str): TuningJob resource name.
1101
+ """
1102
+
1103
+ parameter_model = types._CancelTuningJobParameters(
1104
+ name=name,
1105
+ config=config,
1106
+ )
1107
+
1108
+ request_url_dict: Optional[dict[str, str]]
1109
+
1110
+ if self._api_client.vertexai:
1111
+ request_dict = _CancelTuningJobParameters_to_vertex(parameter_model)
1112
+ request_url_dict = request_dict.get('_url')
1113
+ if request_url_dict:
1114
+ path = '{name}:cancel'.format_map(request_url_dict)
1115
+ else:
1116
+ path = '{name}:cancel'
1117
+ else:
1118
+ request_dict = _CancelTuningJobParameters_to_mldev(parameter_model)
1119
+ request_url_dict = request_dict.get('_url')
1120
+ if request_url_dict:
1121
+ path = '{name}:cancel'.format_map(request_url_dict)
1122
+ else:
1123
+ path = '{name}:cancel'
1124
+ query_params = request_dict.get('_query')
1125
+ if query_params:
1126
+ path = f'{path}?{urlencode(query_params)}'
1127
+ # TODO: remove the hack that pops config.
1128
+ request_dict.pop('config', None)
1129
+
1130
+ http_options: Optional[types.HttpOptions] = None
1131
+ if (
1132
+ parameter_model.config is not None
1133
+ and parameter_model.config.http_options is not None
1134
+ ):
1135
+ http_options = parameter_model.config.http_options
1136
+
1137
+ request_dict = _common.convert_to_dict(request_dict)
1138
+ request_dict = _common.encode_unserializable_types(request_dict)
1139
+
1140
+ response = self._api_client.request(
1141
+ 'post', path, request_dict, http_options
1142
+ )
1143
+
1063
1144
  def _tune(
1064
1145
  self,
1065
1146
  *,
@@ -1457,6 +1538,59 @@ class AsyncTunings(_api_module.BaseModule):
1457
1538
  self._api_client._verify_response(return_value)
1458
1539
  return return_value
1459
1540
 
1541
+ async def cancel(
1542
+ self,
1543
+ *,
1544
+ name: str,
1545
+ config: Optional[types.CancelTuningJobConfigOrDict] = None,
1546
+ ) -> None:
1547
+ """Cancels a tuning job asynchronously.
1548
+
1549
+ Args:
1550
+ name (str): A TuningJob resource name.
1551
+ """
1552
+
1553
+ parameter_model = types._CancelTuningJobParameters(
1554
+ name=name,
1555
+ config=config,
1556
+ )
1557
+
1558
+ request_url_dict: Optional[dict[str, str]]
1559
+
1560
+ if self._api_client.vertexai:
1561
+ request_dict = _CancelTuningJobParameters_to_vertex(parameter_model)
1562
+ request_url_dict = request_dict.get('_url')
1563
+ if request_url_dict:
1564
+ path = '{name}:cancel'.format_map(request_url_dict)
1565
+ else:
1566
+ path = '{name}:cancel'
1567
+ else:
1568
+ request_dict = _CancelTuningJobParameters_to_mldev(parameter_model)
1569
+ request_url_dict = request_dict.get('_url')
1570
+ if request_url_dict:
1571
+ path = '{name}:cancel'.format_map(request_url_dict)
1572
+ else:
1573
+ path = '{name}:cancel'
1574
+ query_params = request_dict.get('_query')
1575
+ if query_params:
1576
+ path = f'{path}?{urlencode(query_params)}'
1577
+ # TODO: remove the hack that pops config.
1578
+ request_dict.pop('config', None)
1579
+
1580
+ http_options: Optional[types.HttpOptions] = None
1581
+ if (
1582
+ parameter_model.config is not None
1583
+ and parameter_model.config.http_options is not None
1584
+ ):
1585
+ http_options = parameter_model.config.http_options
1586
+
1587
+ request_dict = _common.convert_to_dict(request_dict)
1588
+ request_dict = _common.encode_unserializable_types(request_dict)
1589
+
1590
+ response = await self._api_client.async_request(
1591
+ 'post', path, request_dict, http_options
1592
+ )
1593
+
1460
1594
  async def _tune(
1461
1595
  self,
1462
1596
  *,