google-genai 1.29.0__py3-none-any.whl → 1.31.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
@@ -32,6 +32,7 @@ from ._common import get_value_by_path as getv
32
32
  from ._common import set_value_by_path as setv
33
33
  from .pagers import AsyncPager, Pager
34
34
 
35
+
35
36
  logger = logging.getLogger('google_genai.models')
36
37
 
37
38
 
@@ -340,6 +341,11 @@ def _GoogleSearch_to_mldev(
340
341
  _Interval_to_mldev(getv(from_object, ['time_range_filter']), to_object),
341
342
  )
342
343
 
344
+ if getv(from_object, ['exclude_domains']) is not None:
345
+ raise ValueError(
346
+ 'exclude_domains parameter is not supported in Gemini API.'
347
+ )
348
+
343
349
  return to_object
344
350
 
345
351
 
@@ -387,6 +393,17 @@ def _UrlContext_to_mldev(
387
393
  return to_object
388
394
 
389
395
 
396
+ def _ToolComputerUse_to_mldev(
397
+ from_object: Union[dict[str, Any], object],
398
+ parent_object: Optional[dict[str, Any]] = None,
399
+ ) -> dict[str, Any]:
400
+ to_object: dict[str, Any] = {}
401
+ if getv(from_object, ['environment']) is not None:
402
+ setv(to_object, ['environment'], getv(from_object, ['environment']))
403
+
404
+ return to_object
405
+
406
+
390
407
  def _Tool_to_mldev(
391
408
  from_object: Union[dict[str, Any], object],
392
409
  parent_object: Optional[dict[str, Any]] = None,
@@ -436,12 +453,18 @@ def _Tool_to_mldev(
436
453
  _UrlContext_to_mldev(getv(from_object, ['url_context']), to_object),
437
454
  )
438
455
 
456
+ if getv(from_object, ['computer_use']) is not None:
457
+ setv(
458
+ to_object,
459
+ ['computerUse'],
460
+ _ToolComputerUse_to_mldev(
461
+ getv(from_object, ['computer_use']), to_object
462
+ ),
463
+ )
464
+
439
465
  if getv(from_object, ['code_execution']) is not None:
440
466
  setv(to_object, ['codeExecution'], getv(from_object, ['code_execution']))
441
467
 
442
- if getv(from_object, ['computer_use']) is not None:
443
- setv(to_object, ['computerUse'], getv(from_object, ['computer_use']))
444
-
445
468
  return to_object
446
469
 
447
470
 
@@ -1246,15 +1269,6 @@ def _Image_to_mldev(
1246
1269
  return to_object
1247
1270
 
1248
1271
 
1249
- def _GenerateVideosSource_to_mldev(
1250
- from_object: Union[dict[str, Any], object],
1251
- parent_object: Optional[dict[str, Any]] = None,
1252
- ) -> dict[str, Any]:
1253
- to_object: dict[str, Any] = {}
1254
-
1255
- return to_object
1256
-
1257
-
1258
1272
  def _GenerateVideosConfig_to_mldev(
1259
1273
  from_object: Union[dict[str, Any], object],
1260
1274
  parent_object: Optional[dict[str, Any]] = None,
@@ -1324,6 +1338,11 @@ def _GenerateVideosConfig_to_mldev(
1324
1338
  if getv(from_object, ['last_frame']) is not None:
1325
1339
  raise ValueError('last_frame parameter is not supported in Gemini API.')
1326
1340
 
1341
+ if getv(from_object, ['reference_images']) is not None:
1342
+ raise ValueError(
1343
+ 'reference_images parameter is not supported in Gemini API.'
1344
+ )
1345
+
1327
1346
  if getv(from_object, ['compression_quality']) is not None:
1328
1347
  raise ValueError(
1329
1348
  'compression_quality parameter is not supported in Gemini API.'
@@ -1694,6 +1713,9 @@ def _GoogleSearch_to_vertex(
1694
1713
  ),
1695
1714
  )
1696
1715
 
1716
+ if getv(from_object, ['exclude_domains']) is not None:
1717
+ setv(to_object, ['excludeDomains'], getv(from_object, ['exclude_domains']))
1718
+
1697
1719
  return to_object
1698
1720
 
1699
1721
 
@@ -1737,6 +1759,8 @@ def _EnterpriseWebSearch_to_vertex(
1737
1759
  parent_object: Optional[dict[str, Any]] = None,
1738
1760
  ) -> dict[str, Any]:
1739
1761
  to_object: dict[str, Any] = {}
1762
+ if getv(from_object, ['exclude_domains']) is not None:
1763
+ setv(to_object, ['excludeDomains'], getv(from_object, ['exclude_domains']))
1740
1764
 
1741
1765
  return to_object
1742
1766
 
@@ -1816,6 +1840,17 @@ def _UrlContext_to_vertex(
1816
1840
  return to_object
1817
1841
 
1818
1842
 
1843
+ def _ToolComputerUse_to_vertex(
1844
+ from_object: Union[dict[str, Any], object],
1845
+ parent_object: Optional[dict[str, Any]] = None,
1846
+ ) -> dict[str, Any]:
1847
+ to_object: dict[str, Any] = {}
1848
+ if getv(from_object, ['environment']) is not None:
1849
+ setv(to_object, ['environment'], getv(from_object, ['environment']))
1850
+
1851
+ return to_object
1852
+
1853
+
1819
1854
  def _Tool_to_vertex(
1820
1855
  from_object: Union[dict[str, Any], object],
1821
1856
  parent_object: Optional[dict[str, Any]] = None,
@@ -1875,12 +1910,18 @@ def _Tool_to_vertex(
1875
1910
  _UrlContext_to_vertex(getv(from_object, ['url_context']), to_object),
1876
1911
  )
1877
1912
 
1913
+ if getv(from_object, ['computer_use']) is not None:
1914
+ setv(
1915
+ to_object,
1916
+ ['computerUse'],
1917
+ _ToolComputerUse_to_vertex(
1918
+ getv(from_object, ['computer_use']), to_object
1919
+ ),
1920
+ )
1921
+
1878
1922
  if getv(from_object, ['code_execution']) is not None:
1879
1923
  setv(to_object, ['codeExecution'], getv(from_object, ['code_execution']))
1880
1924
 
1881
- if getv(from_object, ['computer_use']) is not None:
1882
- setv(to_object, ['computerUse'], getv(from_object, ['computer_use']))
1883
-
1884
1925
  return to_object
1885
1926
 
1886
1927
 
@@ -2990,6 +3031,120 @@ def _RecontextImageParameters_to_vertex(
2990
3031
  return to_object
2991
3032
 
2992
3033
 
3034
+ def _ScribbleImage_to_vertex(
3035
+ from_object: Union[dict[str, Any], object],
3036
+ parent_object: Optional[dict[str, Any]] = None,
3037
+ ) -> dict[str, Any]:
3038
+ to_object: dict[str, Any] = {}
3039
+ if getv(from_object, ['image']) is not None:
3040
+ setv(
3041
+ to_object,
3042
+ ['image'],
3043
+ _Image_to_vertex(getv(from_object, ['image']), to_object),
3044
+ )
3045
+
3046
+ return to_object
3047
+
3048
+
3049
+ def _SegmentImageSource_to_vertex(
3050
+ from_object: Union[dict[str, Any], object],
3051
+ parent_object: Optional[dict[str, Any]] = None,
3052
+ ) -> dict[str, Any]:
3053
+ to_object: dict[str, Any] = {}
3054
+ if getv(from_object, ['prompt']) is not None:
3055
+ setv(
3056
+ parent_object, ['instances[0]', 'prompt'], getv(from_object, ['prompt'])
3057
+ )
3058
+
3059
+ if getv(from_object, ['image']) is not None:
3060
+ setv(
3061
+ parent_object,
3062
+ ['instances[0]', 'image'],
3063
+ _Image_to_vertex(getv(from_object, ['image']), to_object),
3064
+ )
3065
+
3066
+ if getv(from_object, ['scribble_image']) is not None:
3067
+ setv(
3068
+ parent_object,
3069
+ ['instances[0]', 'scribble'],
3070
+ _ScribbleImage_to_vertex(
3071
+ getv(from_object, ['scribble_image']), to_object
3072
+ ),
3073
+ )
3074
+
3075
+ return to_object
3076
+
3077
+
3078
+ def _SegmentImageConfig_to_vertex(
3079
+ from_object: Union[dict[str, Any], object],
3080
+ parent_object: Optional[dict[str, Any]] = None,
3081
+ ) -> dict[str, Any]:
3082
+ to_object: dict[str, Any] = {}
3083
+
3084
+ if getv(from_object, ['mode']) is not None:
3085
+ setv(parent_object, ['parameters', 'mode'], getv(from_object, ['mode']))
3086
+
3087
+ if getv(from_object, ['max_predictions']) is not None:
3088
+ setv(
3089
+ parent_object,
3090
+ ['parameters', 'maxPredictions'],
3091
+ getv(from_object, ['max_predictions']),
3092
+ )
3093
+
3094
+ if getv(from_object, ['confidence_threshold']) is not None:
3095
+ setv(
3096
+ parent_object,
3097
+ ['parameters', 'confidenceThreshold'],
3098
+ getv(from_object, ['confidence_threshold']),
3099
+ )
3100
+
3101
+ if getv(from_object, ['mask_dilation']) is not None:
3102
+ setv(
3103
+ parent_object,
3104
+ ['parameters', 'maskDilation'],
3105
+ getv(from_object, ['mask_dilation']),
3106
+ )
3107
+
3108
+ if getv(from_object, ['binary_color_threshold']) is not None:
3109
+ setv(
3110
+ parent_object,
3111
+ ['parameters', 'binaryColorThreshold'],
3112
+ getv(from_object, ['binary_color_threshold']),
3113
+ )
3114
+
3115
+ return to_object
3116
+
3117
+
3118
+ def _SegmentImageParameters_to_vertex(
3119
+ api_client: BaseApiClient,
3120
+ from_object: Union[dict[str, Any], object],
3121
+ parent_object: Optional[dict[str, Any]] = None,
3122
+ ) -> dict[str, Any]:
3123
+ to_object: dict[str, Any] = {}
3124
+ if getv(from_object, ['model']) is not None:
3125
+ setv(
3126
+ to_object,
3127
+ ['_url', 'model'],
3128
+ t.t_model(api_client, getv(from_object, ['model'])),
3129
+ )
3130
+
3131
+ if getv(from_object, ['source']) is not None:
3132
+ setv(
3133
+ to_object,
3134
+ ['config'],
3135
+ _SegmentImageSource_to_vertex(getv(from_object, ['source']), to_object),
3136
+ )
3137
+
3138
+ if getv(from_object, ['config']) is not None:
3139
+ setv(
3140
+ to_object,
3141
+ ['config'],
3142
+ _SegmentImageConfig_to_vertex(getv(from_object, ['config']), to_object),
3143
+ )
3144
+
3145
+ return to_object
3146
+
3147
+
2993
3148
  def _GetModelParameters_to_vertex(
2994
3149
  api_client: BaseApiClient,
2995
3150
  from_object: Union[dict[str, Any], object],
@@ -3241,11 +3396,20 @@ def _Video_to_vertex(
3241
3396
  return to_object
3242
3397
 
3243
3398
 
3244
- def _GenerateVideosSource_to_vertex(
3399
+ def _VideoGenerationReferenceImage_to_vertex(
3245
3400
  from_object: Union[dict[str, Any], object],
3246
3401
  parent_object: Optional[dict[str, Any]] = None,
3247
3402
  ) -> dict[str, Any]:
3248
3403
  to_object: dict[str, Any] = {}
3404
+ if getv(from_object, ['image']) is not None:
3405
+ setv(
3406
+ to_object,
3407
+ ['image'],
3408
+ _Image_to_vertex(getv(from_object, ['image']), to_object),
3409
+ )
3410
+
3411
+ if getv(from_object, ['reference_type']) is not None:
3412
+ setv(to_object, ['referenceType'], getv(from_object, ['reference_type']))
3249
3413
 
3250
3414
  return to_object
3251
3415
 
@@ -3339,6 +3503,16 @@ def _GenerateVideosConfig_to_vertex(
3339
3503
  _Image_to_vertex(getv(from_object, ['last_frame']), to_object),
3340
3504
  )
3341
3505
 
3506
+ if getv(from_object, ['reference_images']) is not None:
3507
+ setv(
3508
+ parent_object,
3509
+ ['instances[0]', 'referenceImages'],
3510
+ [
3511
+ _VideoGenerationReferenceImage_to_vertex(item, to_object)
3512
+ for item in getv(from_object, ['reference_images'])
3513
+ ],
3514
+ )
3515
+
3342
3516
  if getv(from_object, ['compression_quality']) is not None:
3343
3517
  setv(
3344
3518
  parent_object,
@@ -4592,6 +4766,63 @@ def _RecontextImageResponse_from_vertex(
4592
4766
  return to_object
4593
4767
 
4594
4768
 
4769
+ def _EntityLabel_from_vertex(
4770
+ from_object: Union[dict[str, Any], object],
4771
+ parent_object: Optional[dict[str, Any]] = None,
4772
+ ) -> dict[str, Any]:
4773
+ to_object: dict[str, Any] = {}
4774
+ if getv(from_object, ['label']) is not None:
4775
+ setv(to_object, ['label'], getv(from_object, ['label']))
4776
+
4777
+ if getv(from_object, ['score']) is not None:
4778
+ setv(to_object, ['score'], getv(from_object, ['score']))
4779
+
4780
+ return to_object
4781
+
4782
+
4783
+ def _GeneratedImageMask_from_vertex(
4784
+ from_object: Union[dict[str, Any], object],
4785
+ parent_object: Optional[dict[str, Any]] = None,
4786
+ ) -> dict[str, Any]:
4787
+ to_object: dict[str, Any] = {}
4788
+ if getv(from_object, ['_self']) is not None:
4789
+ setv(
4790
+ to_object,
4791
+ ['mask'],
4792
+ _Image_from_vertex(getv(from_object, ['_self']), to_object),
4793
+ )
4794
+
4795
+ if getv(from_object, ['labels']) is not None:
4796
+ setv(
4797
+ to_object,
4798
+ ['labels'],
4799
+ [
4800
+ _EntityLabel_from_vertex(item, to_object)
4801
+ for item in getv(from_object, ['labels'])
4802
+ ],
4803
+ )
4804
+
4805
+ return to_object
4806
+
4807
+
4808
+ def _SegmentImageResponse_from_vertex(
4809
+ from_object: Union[dict[str, Any], object],
4810
+ parent_object: Optional[dict[str, Any]] = None,
4811
+ ) -> dict[str, Any]:
4812
+ to_object: dict[str, Any] = {}
4813
+ if getv(from_object, ['predictions']) is not None:
4814
+ setv(
4815
+ to_object,
4816
+ ['generated_masks'],
4817
+ [
4818
+ _GeneratedImageMask_from_vertex(item, to_object)
4819
+ for item in getv(from_object, ['predictions'])
4820
+ ],
4821
+ )
4822
+
4823
+ return to_object
4824
+
4825
+
4595
4826
  def _Endpoint_from_vertex(
4596
4827
  from_object: Union[dict[str, Any], object],
4597
4828
  parent_object: Optional[dict[str, Any]] = None,
@@ -5485,6 +5716,89 @@ class Models(_api_module.BaseModule):
5485
5716
  self._api_client._verify_response(return_value)
5486
5717
  return return_value
5487
5718
 
5719
+ def segment_image(
5720
+ self,
5721
+ *,
5722
+ model: str,
5723
+ source: types.SegmentImageSourceOrDict,
5724
+ config: Optional[types.SegmentImageConfigOrDict] = None,
5725
+ ) -> types.SegmentImageResponse:
5726
+ """Segments an image, creating a mask of a specified area.
5727
+
5728
+ Args:
5729
+ model (str): The model to use.
5730
+ source (SegmentImageSource): An object containing the source inputs
5731
+ (prompt, image, scribble_image) for image segmentation. The prompt is
5732
+ required for prompt mode and semantic mode, disallowed for other modes.
5733
+ scribble_image is required for the interactive mode, disallowed for
5734
+ other modes.
5735
+ config (SegmentImageConfig): Configuration for segmentation.
5736
+
5737
+ Usage:
5738
+
5739
+ ```
5740
+ response = client.models.segment_image(
5741
+ model="image-segmentation-001",
5742
+ source=types.SegmentImageSource(
5743
+ image=types.Image.from_file(IMAGE_FILE_PATH),
5744
+ ),
5745
+ )
5746
+
5747
+ mask_image = response.generated_masks[0].mask
5748
+ ```
5749
+ """
5750
+
5751
+ parameter_model = types._SegmentImageParameters(
5752
+ model=model,
5753
+ source=source,
5754
+ config=config,
5755
+ )
5756
+
5757
+ request_url_dict: Optional[dict[str, str]]
5758
+ if not self._api_client.vertexai:
5759
+ raise ValueError('This method is only supported in the Vertex AI client.')
5760
+ else:
5761
+ request_dict = _SegmentImageParameters_to_vertex(
5762
+ self._api_client, parameter_model
5763
+ )
5764
+ request_url_dict = request_dict.get('_url')
5765
+ if request_url_dict:
5766
+ path = '{model}:predict'.format_map(request_url_dict)
5767
+ else:
5768
+ path = '{model}:predict'
5769
+
5770
+ query_params = request_dict.get('_query')
5771
+ if query_params:
5772
+ path = f'{path}?{urlencode(query_params)}'
5773
+ # TODO: remove the hack that pops config.
5774
+ request_dict.pop('config', None)
5775
+
5776
+ http_options: Optional[types.HttpOptions] = None
5777
+ if (
5778
+ parameter_model.config is not None
5779
+ and parameter_model.config.http_options is not None
5780
+ ):
5781
+ http_options = parameter_model.config.http_options
5782
+
5783
+ request_dict = _common.convert_to_dict(request_dict)
5784
+ request_dict = _common.encode_unserializable_types(request_dict)
5785
+
5786
+ response = self._api_client.request(
5787
+ 'post', path, request_dict, http_options
5788
+ )
5789
+
5790
+ response_dict = '' if not response.body else json.loads(response.body)
5791
+
5792
+ if self._api_client.vertexai:
5793
+ response_dict = _SegmentImageResponse_from_vertex(response_dict)
5794
+
5795
+ return_value = types.SegmentImageResponse._from_response(
5796
+ response=response_dict, kwargs=parameter_model.model_dump()
5797
+ )
5798
+
5799
+ self._api_client._verify_response(return_value)
5800
+ return return_value
5801
+
5488
5802
  def get(
5489
5803
  self, *, model: str, config: Optional[types.GetModelConfigOrDict] = None
5490
5804
  ) -> types.Model:
@@ -7214,6 +7528,92 @@ class AsyncModels(_api_module.BaseModule):
7214
7528
  self._api_client._verify_response(return_value)
7215
7529
  return return_value
7216
7530
 
7531
+ async def segment_image(
7532
+ self,
7533
+ *,
7534
+ model: str,
7535
+ source: types.SegmentImageSourceOrDict,
7536
+ config: Optional[types.SegmentImageConfigOrDict] = None,
7537
+ ) -> types.SegmentImageResponse:
7538
+ """Segments an image, creating a mask of a specified area.
7539
+
7540
+ Args:
7541
+ model (str): The model to use.
7542
+ source (SegmentImageSource): An object containing the source inputs
7543
+ (prompt, image, scribble_image) for image segmentation. The prompt is
7544
+ required for prompt mode and semantic mode, disallowed for other modes.
7545
+ scribble_image is required for the interactive mode, disallowed for
7546
+ other modes.
7547
+ config (SegmentImageConfig): Configuration for segmentation.
7548
+
7549
+ Usage:
7550
+
7551
+ ```
7552
+ response = client.models.segment_image(
7553
+ model="image-segmentation-001",
7554
+ source=types.SegmentImageSource(
7555
+ image=types.Image.from_file(IMAGE_FILE_PATH),
7556
+ ),
7557
+ config=types.SegmentImageConfig(
7558
+ mode=types.SegmentMode.foreground,
7559
+ ),
7560
+ )
7561
+
7562
+ mask_image = response.generated_masks[0].mask
7563
+ ```
7564
+ """
7565
+
7566
+ parameter_model = types._SegmentImageParameters(
7567
+ model=model,
7568
+ source=source,
7569
+ config=config,
7570
+ )
7571
+
7572
+ request_url_dict: Optional[dict[str, str]]
7573
+ if not self._api_client.vertexai:
7574
+ raise ValueError('This method is only supported in the Vertex AI client.')
7575
+ else:
7576
+ request_dict = _SegmentImageParameters_to_vertex(
7577
+ self._api_client, parameter_model
7578
+ )
7579
+ request_url_dict = request_dict.get('_url')
7580
+ if request_url_dict:
7581
+ path = '{model}:predict'.format_map(request_url_dict)
7582
+ else:
7583
+ path = '{model}:predict'
7584
+
7585
+ query_params = request_dict.get('_query')
7586
+ if query_params:
7587
+ path = f'{path}?{urlencode(query_params)}'
7588
+ # TODO: remove the hack that pops config.
7589
+ request_dict.pop('config', None)
7590
+
7591
+ http_options: Optional[types.HttpOptions] = None
7592
+ if (
7593
+ parameter_model.config is not None
7594
+ and parameter_model.config.http_options is not None
7595
+ ):
7596
+ http_options = parameter_model.config.http_options
7597
+
7598
+ request_dict = _common.convert_to_dict(request_dict)
7599
+ request_dict = _common.encode_unserializable_types(request_dict)
7600
+
7601
+ response = await self._api_client.async_request(
7602
+ 'post', path, request_dict, http_options
7603
+ )
7604
+
7605
+ response_dict = '' if not response.body else json.loads(response.body)
7606
+
7607
+ if self._api_client.vertexai:
7608
+ response_dict = _SegmentImageResponse_from_vertex(response_dict)
7609
+
7610
+ return_value = types.SegmentImageResponse._from_response(
7611
+ response=response_dict, kwargs=parameter_model.model_dump()
7612
+ )
7613
+
7614
+ self._api_client._verify_response(return_value)
7615
+ return return_value
7616
+
7217
7617
  async def get(
7218
7618
  self, *, model: str, config: Optional[types.GetModelConfigOrDict] = None
7219
7619
  ) -> types.Model:
@@ -26,6 +26,7 @@ from . import types
26
26
  from ._common import get_value_by_path as getv
27
27
  from ._common import set_value_by_path as setv
28
28
 
29
+
29
30
  logger = logging.getLogger('google_genai.operations')
30
31
 
31
32
 
google/genai/tokens.py CHANGED
@@ -292,6 +292,7 @@ class AsyncTokens(_api_module.BaseModule):
292
292
  Usage:
293
293
 
294
294
  .. code-block:: python
295
+
295
296
  client = genai.Client(
296
297
  api_key=API_KEY,
297
298
  http_options=types.HttpOptions(api_version='v1alpha'),