google-genai 1.25.0__py3-none-any.whl → 1.27.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.
@@ -17,12 +17,11 @@
17
17
 
18
18
  import json
19
19
  import logging
20
- from typing import Any, Optional, Union
20
+ from typing import Any, Optional, TypeVar, Union
21
21
  from urllib.parse import urlencode
22
22
 
23
23
  from . import _api_module
24
24
  from . import _common
25
- from . import _transformers as t
26
25
  from . import types
27
26
  from ._common import get_value_by_path as getv
28
27
  from ._common import set_value_by_path as setv
@@ -87,218 +86,6 @@ def _FetchPredictOperationParameters_to_vertex(
87
86
  return to_object
88
87
 
89
88
 
90
- def _Video_from_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, ['video', 'uri']) is not None:
96
- setv(to_object, ['uri'], getv(from_object, ['video', 'uri']))
97
-
98
- if getv(from_object, ['video', 'encodedVideo']) is not None:
99
- setv(
100
- to_object,
101
- ['video_bytes'],
102
- t.t_bytes(getv(from_object, ['video', 'encodedVideo'])),
103
- )
104
-
105
- if getv(from_object, ['encoding']) is not None:
106
- setv(to_object, ['mime_type'], getv(from_object, ['encoding']))
107
-
108
- return to_object
109
-
110
-
111
- def _GeneratedVideo_from_mldev(
112
- from_object: Union[dict[str, Any], object],
113
- parent_object: Optional[dict[str, Any]] = None,
114
- ) -> dict[str, Any]:
115
- to_object: dict[str, Any] = {}
116
- if getv(from_object, ['_self']) is not None:
117
- setv(
118
- to_object,
119
- ['video'],
120
- _Video_from_mldev(getv(from_object, ['_self']), to_object),
121
- )
122
-
123
- return to_object
124
-
125
-
126
- def _GenerateVideosResponse_from_mldev(
127
- from_object: Union[dict[str, Any], object],
128
- parent_object: Optional[dict[str, Any]] = None,
129
- ) -> dict[str, Any]:
130
- to_object: dict[str, Any] = {}
131
- if getv(from_object, ['generatedSamples']) is not None:
132
- setv(
133
- to_object,
134
- ['generated_videos'],
135
- [
136
- _GeneratedVideo_from_mldev(item, to_object)
137
- for item in getv(from_object, ['generatedSamples'])
138
- ],
139
- )
140
-
141
- if getv(from_object, ['raiMediaFilteredCount']) is not None:
142
- setv(
143
- to_object,
144
- ['rai_media_filtered_count'],
145
- getv(from_object, ['raiMediaFilteredCount']),
146
- )
147
-
148
- if getv(from_object, ['raiMediaFilteredReasons']) is not None:
149
- setv(
150
- to_object,
151
- ['rai_media_filtered_reasons'],
152
- getv(from_object, ['raiMediaFilteredReasons']),
153
- )
154
-
155
- return to_object
156
-
157
-
158
- def _GenerateVideosOperation_from_mldev(
159
- from_object: Union[dict[str, Any], object],
160
- parent_object: Optional[dict[str, Any]] = None,
161
- ) -> dict[str, Any]:
162
- to_object: dict[str, Any] = {}
163
- if getv(from_object, ['name']) is not None:
164
- setv(to_object, ['name'], getv(from_object, ['name']))
165
-
166
- if getv(from_object, ['metadata']) is not None:
167
- setv(to_object, ['metadata'], getv(from_object, ['metadata']))
168
-
169
- if getv(from_object, ['done']) is not None:
170
- setv(to_object, ['done'], getv(from_object, ['done']))
171
-
172
- if getv(from_object, ['error']) is not None:
173
- setv(to_object, ['error'], getv(from_object, ['error']))
174
-
175
- if getv(from_object, ['response', 'generateVideoResponse']) is not None:
176
- setv(
177
- to_object,
178
- ['response'],
179
- _GenerateVideosResponse_from_mldev(
180
- getv(from_object, ['response', 'generateVideoResponse']), to_object
181
- ),
182
- )
183
-
184
- if getv(from_object, ['response', 'generateVideoResponse']) is not None:
185
- setv(
186
- to_object,
187
- ['result'],
188
- _GenerateVideosResponse_from_mldev(
189
- getv(from_object, ['response', 'generateVideoResponse']), to_object
190
- ),
191
- )
192
-
193
- return to_object
194
-
195
-
196
- def _Video_from_vertex(
197
- from_object: Union[dict[str, Any], object],
198
- parent_object: Optional[dict[str, Any]] = None,
199
- ) -> dict[str, Any]:
200
- to_object: dict[str, Any] = {}
201
- if getv(from_object, ['gcsUri']) is not None:
202
- setv(to_object, ['uri'], getv(from_object, ['gcsUri']))
203
-
204
- if getv(from_object, ['bytesBase64Encoded']) is not None:
205
- setv(
206
- to_object,
207
- ['video_bytes'],
208
- t.t_bytes(getv(from_object, ['bytesBase64Encoded'])),
209
- )
210
-
211
- if getv(from_object, ['mimeType']) is not None:
212
- setv(to_object, ['mime_type'], getv(from_object, ['mimeType']))
213
-
214
- return to_object
215
-
216
-
217
- def _GeneratedVideo_from_vertex(
218
- from_object: Union[dict[str, Any], object],
219
- parent_object: Optional[dict[str, Any]] = None,
220
- ) -> dict[str, Any]:
221
- to_object: dict[str, Any] = {}
222
- if getv(from_object, ['_self']) is not None:
223
- setv(
224
- to_object,
225
- ['video'],
226
- _Video_from_vertex(getv(from_object, ['_self']), to_object),
227
- )
228
-
229
- return to_object
230
-
231
-
232
- def _GenerateVideosResponse_from_vertex(
233
- from_object: Union[dict[str, Any], object],
234
- parent_object: Optional[dict[str, Any]] = None,
235
- ) -> dict[str, Any]:
236
- to_object: dict[str, Any] = {}
237
- if getv(from_object, ['videos']) is not None:
238
- setv(
239
- to_object,
240
- ['generated_videos'],
241
- [
242
- _GeneratedVideo_from_vertex(item, to_object)
243
- for item in getv(from_object, ['videos'])
244
- ],
245
- )
246
-
247
- if getv(from_object, ['raiMediaFilteredCount']) is not None:
248
- setv(
249
- to_object,
250
- ['rai_media_filtered_count'],
251
- getv(from_object, ['raiMediaFilteredCount']),
252
- )
253
-
254
- if getv(from_object, ['raiMediaFilteredReasons']) is not None:
255
- setv(
256
- to_object,
257
- ['rai_media_filtered_reasons'],
258
- getv(from_object, ['raiMediaFilteredReasons']),
259
- )
260
-
261
- return to_object
262
-
263
-
264
- def _GenerateVideosOperation_from_vertex(
265
- from_object: Union[dict[str, Any], object],
266
- parent_object: Optional[dict[str, Any]] = None,
267
- ) -> dict[str, Any]:
268
- to_object: dict[str, Any] = {}
269
- if getv(from_object, ['name']) is not None:
270
- setv(to_object, ['name'], getv(from_object, ['name']))
271
-
272
- if getv(from_object, ['metadata']) is not None:
273
- setv(to_object, ['metadata'], getv(from_object, ['metadata']))
274
-
275
- if getv(from_object, ['done']) is not None:
276
- setv(to_object, ['done'], getv(from_object, ['done']))
277
-
278
- if getv(from_object, ['error']) is not None:
279
- setv(to_object, ['error'], getv(from_object, ['error']))
280
-
281
- if getv(from_object, ['response']) is not None:
282
- setv(
283
- to_object,
284
- ['response'],
285
- _GenerateVideosResponse_from_vertex(
286
- getv(from_object, ['response']), to_object
287
- ),
288
- )
289
-
290
- if getv(from_object, ['response']) is not None:
291
- setv(
292
- to_object,
293
- ['result'],
294
- _GenerateVideosResponse_from_vertex(
295
- getv(from_object, ['response']), to_object
296
- ),
297
- )
298
-
299
- return to_object
300
-
301
-
302
89
  class Operations(_api_module.BaseModule):
303
90
 
304
91
  def _get_videos_operation(
@@ -306,7 +93,7 @@ class Operations(_api_module.BaseModule):
306
93
  *,
307
94
  operation_name: str,
308
95
  config: Optional[types.GetOperationConfigOrDict] = None,
309
- ) -> types.GenerateVideosOperation:
96
+ ) -> Any:
310
97
  parameter_model = types._GetOperationParameters(
311
98
  operation_name=operation_name,
312
99
  config=config,
@@ -348,18 +135,7 @@ class Operations(_api_module.BaseModule):
348
135
 
349
136
  response_dict = '' if not response.body else json.loads(response.body)
350
137
 
351
- if self._api_client.vertexai:
352
- response_dict = _GenerateVideosOperation_from_vertex(response_dict)
353
-
354
- else:
355
- response_dict = _GenerateVideosOperation_from_mldev(response_dict)
356
-
357
- return_value = types.GenerateVideosOperation._from_response(
358
- response=response_dict, kwargs=parameter_model.model_dump()
359
- )
360
-
361
- self._api_client._verify_response(return_value)
362
- return return_value
138
+ return response_dict
363
139
 
364
140
  def _fetch_predict_videos_operation(
365
141
  self,
@@ -367,7 +143,7 @@ class Operations(_api_module.BaseModule):
367
143
  operation_name: str,
368
144
  resource_name: str,
369
145
  config: Optional[types.FetchPredictOperationConfigOrDict] = None,
370
- ) -> types.GenerateVideosOperation:
146
+ ) -> Any:
371
147
  parameter_model = types._FetchPredictOperationParameters(
372
148
  operation_name=operation_name,
373
149
  resource_name=resource_name,
@@ -409,22 +185,16 @@ class Operations(_api_module.BaseModule):
409
185
 
410
186
  response_dict = '' if not response.body else json.loads(response.body)
411
187
 
412
- if self._api_client.vertexai:
413
- response_dict = _GenerateVideosOperation_from_vertex(response_dict)
188
+ return response_dict
414
189
 
415
- return_value = types.GenerateVideosOperation._from_response(
416
- response=response_dict, kwargs=parameter_model.model_dump()
417
- )
418
-
419
- self._api_client._verify_response(return_value)
420
- return return_value
190
+ T = TypeVar('T', bound=types.Operation)
421
191
 
422
192
  def get(
423
193
  self,
424
- operation: types.GenerateVideosOperation,
194
+ operation: T,
425
195
  *,
426
196
  config: Optional[types.GetOperationConfigOrDict] = None,
427
- ) -> types.GenerateVideosOperation:
197
+ ) -> T:
428
198
  """Gets the status of an operation."""
429
199
  # Currently, only GenerateVideosOperation is supported.
430
200
  # TODO(b/398040607): Support short form names
@@ -449,16 +219,25 @@ class Operations(_api_module.BaseModule):
449
219
  fetch_operation_config = types.FetchPredictOperationConfig(
450
220
  http_options=http_options
451
221
  )
452
- return self._fetch_predict_videos_operation(
222
+ response_dict = self._fetch_predict_videos_operation(
453
223
  operation_name=operation_name,
454
224
  resource_name=resource_name,
455
225
  config=fetch_operation_config,
456
226
  )
227
+
228
+ response_operation = operation.from_api_response(
229
+ response_dict, is_vertex_ai=True
230
+ )
231
+ return response_operation # type: ignore[no-any-return]
457
232
  else:
458
- return self._get_videos_operation(
233
+ response_dict = self._get_videos_operation(
459
234
  operation_name=operation_name,
460
235
  config=config,
461
236
  )
237
+ response_operation = operation.from_api_response(
238
+ response_dict, is_vertex_ai=False
239
+ )
240
+ return response_operation # type: ignore[no-any-return]
462
241
 
463
242
 
464
243
  class AsyncOperations(_api_module.BaseModule):
@@ -468,7 +247,7 @@ class AsyncOperations(_api_module.BaseModule):
468
247
  *,
469
248
  operation_name: str,
470
249
  config: Optional[types.GetOperationConfigOrDict] = None,
471
- ) -> types.GenerateVideosOperation:
250
+ ) -> Any:
472
251
  parameter_model = types._GetOperationParameters(
473
252
  operation_name=operation_name,
474
253
  config=config,
@@ -512,18 +291,7 @@ class AsyncOperations(_api_module.BaseModule):
512
291
 
513
292
  response_dict = '' if not response.body else json.loads(response.body)
514
293
 
515
- if self._api_client.vertexai:
516
- response_dict = _GenerateVideosOperation_from_vertex(response_dict)
517
-
518
- else:
519
- response_dict = _GenerateVideosOperation_from_mldev(response_dict)
520
-
521
- return_value = types.GenerateVideosOperation._from_response(
522
- response=response_dict, kwargs=parameter_model.model_dump()
523
- )
524
-
525
- self._api_client._verify_response(return_value)
526
- return return_value
294
+ return response_dict
527
295
 
528
296
  async def _fetch_predict_videos_operation(
529
297
  self,
@@ -531,7 +299,7 @@ class AsyncOperations(_api_module.BaseModule):
531
299
  operation_name: str,
532
300
  resource_name: str,
533
301
  config: Optional[types.FetchPredictOperationConfigOrDict] = None,
534
- ) -> types.GenerateVideosOperation:
302
+ ) -> Any:
535
303
  parameter_model = types._FetchPredictOperationParameters(
536
304
  operation_name=operation_name,
537
305
  resource_name=resource_name,
@@ -573,22 +341,16 @@ class AsyncOperations(_api_module.BaseModule):
573
341
 
574
342
  response_dict = '' if not response.body else json.loads(response.body)
575
343
 
576
- if self._api_client.vertexai:
577
- response_dict = _GenerateVideosOperation_from_vertex(response_dict)
344
+ return response_dict
578
345
 
579
- return_value = types.GenerateVideosOperation._from_response(
580
- response=response_dict, kwargs=parameter_model.model_dump()
581
- )
582
-
583
- self._api_client._verify_response(return_value)
584
- return return_value
346
+ T = TypeVar('T', bound=types.Operation)
585
347
 
586
348
  async def get(
587
349
  self,
588
- operation: types.GenerateVideosOperation,
350
+ operation: T,
589
351
  *,
590
352
  config: Optional[types.GetOperationConfigOrDict] = None,
591
- ) -> types.GenerateVideosOperation:
353
+ ) -> T:
592
354
  """Gets the status of an operation."""
593
355
  # Currently, only GenerateVideosOperation is supported.
594
356
  operation_name = operation.name
@@ -611,13 +373,21 @@ class AsyncOperations(_api_module.BaseModule):
611
373
  fetch_operation_config = types.FetchPredictOperationConfig(
612
374
  http_options=http_options
613
375
  )
614
- return await self._fetch_predict_videos_operation(
376
+ response_dict = await self._fetch_predict_videos_operation(
615
377
  operation_name=operation_name,
616
378
  resource_name=resource_name,
617
379
  config=fetch_operation_config,
618
380
  )
381
+ response_operation = operation.from_api_response(
382
+ response_dict, is_vertex_ai=True
383
+ )
384
+ return response_operation # type: ignore[no-any-return]
619
385
  else:
620
- return await self._get_videos_operation(
386
+ response_dict = await self._get_videos_operation(
621
387
  operation_name=operation_name,
622
388
  config=config,
623
389
  )
390
+ response_operation = operation.from_api_response(
391
+ response_dict, is_vertex_ai=False
392
+ )
393
+ return response_operation # type: ignore[no-any-return]
google/genai/pagers.py CHANGED
@@ -18,7 +18,8 @@
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 types
22
23
 
23
24
  T = TypeVar('T')
24
25
 
@@ -43,6 +44,8 @@ class _BasePager(Generic[T]):
43
44
  self._page = getattr(response, self._name) or []
44
45
  self._idx = 0
45
46
 
47
+ self._sdk_http_response = getattr(response, 'sdk_http_response', None)
48
+
46
49
  if not config:
47
50
  request_config = {}
48
51
  elif isinstance(config, dict):
@@ -110,6 +113,13 @@ class _BasePager(Generic[T]):
110
113
 
111
114
  return self._page_size
112
115
 
116
+ @property
117
+ def sdk_http_response(self) -> Union[types.HttpResponse, None]:
118
+ """Returns the http response of the API response.
119
+ """
120
+
121
+ return self._sdk_http_response
122
+
113
123
  @property
114
124
  def config(self) -> dict[str, Any]:
115
125
  """Returns the configuration when making the API request for the next page.
google/genai/tunings.py CHANGED
@@ -126,22 +126,6 @@ def _TuningDataset_to_mldev(
126
126
  return to_object
127
127
 
128
128
 
129
- def _TuningValidationDataset_to_mldev(
130
- from_object: Union[dict[str, Any], object],
131
- parent_object: Optional[dict[str, Any]] = None,
132
- ) -> dict[str, Any]:
133
- to_object: dict[str, Any] = {}
134
- if getv(from_object, ['gcs_uri']) is not None:
135
- raise ValueError('gcs_uri parameter is not supported in Gemini API.')
136
-
137
- if getv(from_object, ['vertex_dataset_resource']) is not None:
138
- raise ValueError(
139
- 'vertex_dataset_resource parameter is not supported in Gemini API.'
140
- )
141
-
142
- return to_object
143
-
144
-
145
129
  def _CreateTuningJobConfig_to_mldev(
146
130
  from_object: Union[dict[str, Any], object],
147
131
  parent_object: Optional[dict[str, Any]] = None,
@@ -286,20 +270,6 @@ def _ListTuningJobsParameters_to_vertex(
286
270
  return to_object
287
271
 
288
272
 
289
- def _TuningExample_to_vertex(
290
- from_object: Union[dict[str, Any], object],
291
- parent_object: Optional[dict[str, Any]] = None,
292
- ) -> dict[str, Any]:
293
- to_object: dict[str, Any] = {}
294
- if getv(from_object, ['text_input']) is not None:
295
- raise ValueError('text_input parameter is not supported in Vertex AI.')
296
-
297
- if getv(from_object, ['output']) is not None:
298
- raise ValueError('output parameter is not supported in Vertex AI.')
299
-
300
- return to_object
301
-
302
-
303
273
  def _TuningDataset_to_vertex(
304
274
  from_object: Union[dict[str, Any], object],
305
275
  parent_object: Optional[dict[str, Any]] = None,
@@ -434,15 +404,6 @@ def _CreateTuningJobParameters_to_vertex(
434
404
  return to_object
435
405
 
436
406
 
437
- def _TunedModelCheckpoint_from_mldev(
438
- from_object: Union[dict[str, Any], object],
439
- parent_object: Optional[dict[str, Any]] = None,
440
- ) -> dict[str, Any]:
441
- to_object: dict[str, Any] = {}
442
-
443
- return to_object
444
-
445
-
446
407
  def _TunedModel_from_mldev(
447
408
  from_object: Union[dict[str, Any], object],
448
409
  parent_object: Optional[dict[str, Any]] = None,
@@ -545,6 +506,11 @@ def _ListTuningJobsResponse_from_mldev(
545
506
  parent_object: Optional[dict[str, Any]] = None,
546
507
  ) -> dict[str, Any]:
547
508
  to_object: dict[str, Any] = {}
509
+ if getv(from_object, ['sdkHttpResponse']) is not None:
510
+ setv(
511
+ to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse'])
512
+ )
513
+
548
514
  if getv(from_object, ['nextPageToken']) is not None:
549
515
  setv(to_object, ['next_page_token'], getv(from_object, ['nextPageToken']))
550
516
 
@@ -561,7 +527,7 @@ def _ListTuningJobsResponse_from_mldev(
561
527
  return to_object
562
528
 
563
529
 
564
- def _Operation_from_mldev(
530
+ def _TuningOperation_from_mldev(
565
531
  from_object: Union[dict[str, Any], object],
566
532
  parent_object: Optional[dict[str, Any]] = None,
567
533
  ) -> dict[str, Any]:
@@ -730,6 +696,11 @@ def _ListTuningJobsResponse_from_vertex(
730
696
  parent_object: Optional[dict[str, Any]] = None,
731
697
  ) -> dict[str, Any]:
732
698
  to_object: dict[str, Any] = {}
699
+ if getv(from_object, ['sdkHttpResponse']) is not None:
700
+ setv(
701
+ to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse'])
702
+ )
703
+
733
704
  if getv(from_object, ['nextPageToken']) is not None:
734
705
  setv(to_object, ['next_page_token'], getv(from_object, ['nextPageToken']))
735
706
 
@@ -878,7 +849,9 @@ class Tunings(_api_module.BaseModule):
878
849
  return_value = types.ListTuningJobsResponse._from_response(
879
850
  response=response_dict, kwargs=parameter_model.model_dump()
880
851
  )
881
-
852
+ return_value.sdk_http_response = types.HttpResponse(
853
+ headers=response.headers
854
+ )
882
855
  self._api_client._verify_response(return_value)
883
856
  return return_value
884
857
 
@@ -955,7 +928,7 @@ class Tunings(_api_module.BaseModule):
955
928
  base_model: str,
956
929
  training_dataset: types.TuningDatasetOrDict,
957
930
  config: Optional[types.CreateTuningJobConfigOrDict] = None,
958
- ) -> types.Operation:
931
+ ) -> types.TuningOperation:
959
932
  """Creates a supervised fine-tuning job and returns the TuningJob object.
960
933
 
961
934
  Args:
@@ -1009,9 +982,9 @@ class Tunings(_api_module.BaseModule):
1009
982
  response_dict = '' if not response.body else json.loads(response.body)
1010
983
 
1011
984
  if not self._api_client.vertexai:
1012
- response_dict = _Operation_from_mldev(response_dict)
985
+ response_dict = _TuningOperation_from_mldev(response_dict)
1013
986
 
1014
- return_value = types.Operation._from_response(
987
+ return_value = types.TuningOperation._from_response(
1015
988
  response=response_dict, kwargs=parameter_model.model_dump()
1016
989
  )
1017
990
 
@@ -1222,7 +1195,9 @@ class AsyncTunings(_api_module.BaseModule):
1222
1195
  return_value = types.ListTuningJobsResponse._from_response(
1223
1196
  response=response_dict, kwargs=parameter_model.model_dump()
1224
1197
  )
1225
-
1198
+ return_value.sdk_http_response = types.HttpResponse(
1199
+ headers=response.headers
1200
+ )
1226
1201
  self._api_client._verify_response(return_value)
1227
1202
  return return_value
1228
1203
 
@@ -1299,7 +1274,7 @@ class AsyncTunings(_api_module.BaseModule):
1299
1274
  base_model: str,
1300
1275
  training_dataset: types.TuningDatasetOrDict,
1301
1276
  config: Optional[types.CreateTuningJobConfigOrDict] = None,
1302
- ) -> types.Operation:
1277
+ ) -> types.TuningOperation:
1303
1278
  """Creates a supervised fine-tuning job and returns the TuningJob object.
1304
1279
 
1305
1280
  Args:
@@ -1353,9 +1328,9 @@ class AsyncTunings(_api_module.BaseModule):
1353
1328
  response_dict = '' if not response.body else json.loads(response.body)
1354
1329
 
1355
1330
  if not self._api_client.vertexai:
1356
- response_dict = _Operation_from_mldev(response_dict)
1331
+ response_dict = _TuningOperation_from_mldev(response_dict)
1357
1332
 
1358
- return_value = types.Operation._from_response(
1333
+ return_value = types.TuningOperation._from_response(
1359
1334
  response=response_dict, kwargs=parameter_model.model_dump()
1360
1335
  )
1361
1336