google-genai 1.1.0__py3-none-any.whl → 1.2.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.
@@ -85,7 +85,11 @@ def _patch_http_options(
85
85
 
86
86
  def _join_url_path(base_url: str, path: str) -> str:
87
87
  parsed_base = urlparse(base_url)
88
- base_path = parsed_base.path[:-1] if parsed_base.path.endswith('/') else parsed_base.path
88
+ base_path = (
89
+ parsed_base.path[:-1]
90
+ if parsed_base.path.endswith('/')
91
+ else parsed_base.path
92
+ )
89
93
  path = path[1:] if path.startswith('/') else path
90
94
  return urlunparse(parsed_base._replace(path=base_path + '/' + path))
91
95
 
@@ -201,12 +205,14 @@ class ApiClient:
201
205
  if (project or location) and api_key:
202
206
  # API cannot consume both project/location and api_key.
203
207
  raise ValueError(
204
- 'Project/location and API key are mutually exclusive in the client initializer.'
208
+ 'Project/location and API key are mutually exclusive in the client'
209
+ ' initializer.'
205
210
  )
206
211
  elif credentials and api_key:
207
212
  # API cannot consume both credentials and api_key.
208
213
  raise ValueError(
209
- 'Credentials and API key are mutually exclusive in the client initializer.'
214
+ 'Credentials and API key are mutually exclusive in the client'
215
+ ' initializer.'
210
216
  )
211
217
 
212
218
  # Validate http_options if a dict is provided.
@@ -215,7 +221,7 @@ class ApiClient:
215
221
  HttpOptions.model_validate(http_options)
216
222
  except ValidationError as e:
217
223
  raise ValueError(f'Invalid http_options: {e}')
218
- elif(isinstance(http_options, HttpOptions)):
224
+ elif isinstance(http_options, HttpOptions):
219
225
  http_options = http_options.model_dump()
220
226
 
221
227
  # Retrieve implicitly set values from the environment.
@@ -269,17 +275,19 @@ class ApiClient:
269
275
  'AI API.'
270
276
  )
271
277
  if self.api_key or self.location == 'global':
272
- self._http_options['base_url'] = (
273
- f'https://aiplatform.googleapis.com/'
274
- )
278
+ self._http_options['base_url'] = f'https://aiplatform.googleapis.com/'
275
279
  else:
276
280
  self._http_options['base_url'] = (
277
281
  f'https://{self.location}-aiplatform.googleapis.com/'
278
282
  )
279
283
  self._http_options['api_version'] = 'v1beta1'
280
- else: # ML Dev API
284
+ else: # Implicit initialization or missing arguments.
281
285
  if not self.api_key:
282
- raise ValueError('API key must be set when using the Google AI API.')
286
+ raise ValueError(
287
+ 'Missing key inputs argument! To use the Google AI API,'
288
+ 'provide (`api_key`) arguments. To use the Google Cloud API,'
289
+ ' provide (`vertexai`, `project` & `location`) arguments.'
290
+ )
283
291
  self._http_options['base_url'] = (
284
292
  'https://generativelanguage.googleapis.com/'
285
293
  )
@@ -363,7 +371,7 @@ class ApiClient:
363
371
  if self.vertexai and not self.api_key:
364
372
  if not self._credentials:
365
373
  self._credentials, _ = google.auth.default(
366
- scopes=["https://www.googleapis.com/auth/cloud-platform"],
374
+ scopes=['https://www.googleapis.com/auth/cloud-platform'],
367
375
  )
368
376
  authed_session = AuthorizedSession(self._credentials)
369
377
  authed_session.stream = stream
@@ -371,9 +379,7 @@ class ApiClient:
371
379
  http_request.method.upper(),
372
380
  http_request.url,
373
381
  headers=http_request.headers,
374
- data=json.dumps(http_request.data)
375
- if http_request.data
376
- else None,
382
+ data=json.dumps(http_request.data) if http_request.data else None,
377
383
  timeout=http_request.timeout,
378
384
  )
379
385
  errors.APIError.raise_for_response(response)
@@ -415,7 +421,7 @@ class ApiClient:
415
421
  if self.vertexai:
416
422
  if not self._credentials:
417
423
  self._credentials, _ = google.auth.default(
418
- scopes=["https://www.googleapis.com/auth/cloud-platform"],
424
+ scopes=['https://www.googleapis.com/auth/cloud-platform'],
419
425
  )
420
426
  return await asyncio.to_thread(
421
427
  self._request,
@@ -503,6 +509,7 @@ class ApiClient:
503
509
  async def async_generator():
504
510
  async for chunk in response:
505
511
  yield chunk
512
+
506
513
  return async_generator()
507
514
 
508
515
  def upload_file(
@@ -21,10 +21,10 @@ from enum import Enum, EnumMeta
21
21
  import inspect
22
22
  import io
23
23
  import re
24
+ import sys
24
25
  import time
25
26
  import typing
26
27
  from typing import Any, GenericAlias, Optional, Union
27
- import sys
28
28
 
29
29
  if typing.TYPE_CHECKING:
30
30
  import PIL.Image
@@ -205,12 +205,17 @@ def t_caches_model(api_client: _api_client.ApiClient, model: str):
205
205
  def pil_to_blob(img) -> types.Blob:
206
206
  try:
207
207
  import PIL.PngImagePlugin
208
+
208
209
  PngImagePlugin = PIL.PngImagePlugin
209
210
  except ImportError:
210
211
  PngImagePlugin = None
211
212
 
212
213
  bytesio = io.BytesIO()
213
- if PngImagePlugin is not None and isinstance(img, PngImagePlugin.PngImageFile) or img.mode == 'RGBA':
214
+ if (
215
+ PngImagePlugin is not None
216
+ and isinstance(img, PngImagePlugin.PngImageFile)
217
+ or img.mode == 'RGBA'
218
+ ):
214
219
  img.save(bytesio, format='PNG')
215
220
  mime_type = 'image/png'
216
221
  else:
@@ -382,7 +387,10 @@ def handle_null_fields(schema: dict[str, Any]):
382
387
  def process_schema(
383
388
  schema: dict[str, Any],
384
389
  client: Optional[_api_client.ApiClient] = None,
385
- defs: Optional[dict[str, Any]]=None):
390
+ defs: Optional[dict[str, Any]] = None,
391
+ *,
392
+ order_properties: bool = True,
393
+ ):
386
394
  """Updates the schema and each sub-schema inplace to be API-compatible.
387
395
 
388
396
  - Removes the `title` field from the schema if the client is not vertexai.
@@ -517,6 +525,16 @@ def process_schema(
517
525
  ref = defs[ref_key.split('defs/')[-1]]
518
526
  process_schema(ref, client, defs)
519
527
  properties[name] = ref
528
+ if (
529
+ len(properties.items()) > 1
530
+ and order_properties
531
+ and all(
532
+ ordering_key not in schema
533
+ for ordering_key in ['property_ordering', 'propertyOrdering']
534
+ )
535
+ ):
536
+ property_names = list(properties.keys())
537
+ schema['property_ordering'] = property_names
520
538
  elif schema_type == 'ARRAY':
521
539
  sub_schema = schema.get('items', None)
522
540
  if sub_schema is None:
@@ -539,6 +557,7 @@ def _process_enum(
539
557
  f'Enum member {member.name} value must be a string, got'
540
558
  f' {type(member.value)}'
541
559
  )
560
+
542
561
  class Placeholder(pydantic.BaseModel):
543
562
  placeholder: enum
544
563
 
@@ -554,7 +573,7 @@ def t_schema(
554
573
  if not origin:
555
574
  return None
556
575
  if isinstance(origin, dict):
557
- process_schema(origin, client)
576
+ process_schema(origin, client, order_properties=False)
558
577
  return types.Schema.model_validate(origin)
559
578
  if isinstance(origin, EnumMeta):
560
579
  return _process_enum(origin, client)
@@ -563,15 +582,15 @@ def t_schema(
563
582
  # response_schema value was coerced to an empty Schema instance because it did not adhere to the Schema field annotation
564
583
  raise ValueError(f'Unsupported schema type.')
565
584
  schema = origin.model_dump(exclude_unset=True)
566
- process_schema(schema, client)
585
+ process_schema(schema, client, order_properties=False)
567
586
  return types.Schema.model_validate(schema)
568
587
 
569
588
  if (
570
589
  # in Python 3.9 Generic alias list[int] counts as a type,
571
590
  # and breaks issubclass because it's not a class.
572
- not isinstance(origin, GenericAlias) and
573
- isinstance(origin, type) and
574
- issubclass(origin, pydantic.BaseModel)
591
+ not isinstance(origin, GenericAlias)
592
+ and isinstance(origin, type)
593
+ and issubclass(origin, pydantic.BaseModel)
575
594
  ):
576
595
  schema = origin.model_json_schema()
577
596
  process_schema(schema, client)
@@ -582,6 +601,7 @@ def t_schema(
582
601
  or isinstance(origin, VersionedUnionType)
583
602
  or typing.get_origin(origin) in _UNION_TYPES
584
603
  ):
604
+
585
605
  class Placeholder(pydantic.BaseModel):
586
606
  placeholder: origin
587
607
 
google/genai/caches.py CHANGED
@@ -172,8 +172,10 @@ def _Schema_to_mldev(
172
172
  raise ValueError('example parameter is not supported in Gemini API.')
173
173
 
174
174
  if getv(from_object, ['property_ordering']) is not None:
175
- raise ValueError(
176
- 'property_ordering parameter is not supported in Gemini API.'
175
+ setv(
176
+ to_object,
177
+ ['propertyOrdering'],
178
+ getv(from_object, ['property_ordering']),
177
179
  )
178
180
 
179
181
  if getv(from_object, ['pattern']) is not None:
google/genai/client.py CHANGED
@@ -94,6 +94,17 @@ class Client:
94
94
  Use this client to make a request to the Gemini Developer API or Vertex AI
95
95
  API and then wait for the response.
96
96
 
97
+ To initialize the client, provide the required arguments either directly
98
+ or by using environment variables. Gemini API users and Vertex AI users in
99
+ express mode can provide API key by providing input argument
100
+ `api_key="your-api-key"` or by defining `GOOGLE_API_KEY="your-api-key"` as an
101
+ environment variable
102
+
103
+ Vertex AI API users can provide inputs argument as `vertexai=false,
104
+ project="your-project-id", location="us-central1"` or by defining
105
+ `GOOGLE_GENAI_USE_VERTEXAI=false`, `GOOGLE_CLOUD_PROJECT` and
106
+ `GOOGLE_CLOUD_LOCATION` environment variables.
107
+
97
108
  Attributes:
98
109
  api_key: The `API key <https://ai.google.dev/gemini-api/docs/api-key>`_ to
99
110
  use for authentication. Applies to the Gemini Developer API only.
@@ -173,21 +184,11 @@ class Client:
173
184
  debug_config (DebugConfig): Config settings that control network behavior
174
185
  of the client. This is typically used when running test code.
175
186
  http_options (Union[HttpOptions, HttpOptionsDict]): Http options to use
176
- for the client. The field deprecated_response_payload should not be set
177
- in http_options.
187
+ for the client.
178
188
  """
179
189
 
180
190
  self._debug_config = debug_config or DebugConfig()
181
191
 
182
- # Throw ValueError if deprecated_response_payload is set in http_options
183
- # due to unpredictable behavior when running multiple coroutines through
184
- # client.aio.
185
- if http_options and 'deprecated_response_payload' in http_options:
186
- raise ValueError(
187
- 'Setting deprecated_response_payload in http_options is not'
188
- ' supported.'
189
- )
190
-
191
192
  self._api_client = self._get_api_client(
192
193
  vertexai=vertexai,
193
194
  api_key=api_key,
@@ -272,4 +273,4 @@ class Client:
272
273
  @property
273
274
  def vertexai(self) -> bool:
274
275
  """Returns whether the client is using the Vertex AI API."""
275
- return self._api_client.vertexai or False
276
+ return self._api_client.vertexai or False
google/genai/models.py CHANGED
@@ -174,8 +174,10 @@ def _Schema_to_mldev(
174
174
  raise ValueError('example parameter is not supported in Gemini API.')
175
175
 
176
176
  if getv(from_object, ['property_ordering']) is not None:
177
- raise ValueError(
178
- 'property_ordering parameter is not supported in Gemini API.'
177
+ setv(
178
+ to_object,
179
+ ['propertyOrdering'],
180
+ getv(from_object, ['property_ordering']),
179
181
  )
180
182
 
181
183
  if getv(from_object, ['pattern']) is not None:
@@ -924,8 +926,8 @@ def _GenerateContentConfig_to_mldev(
924
926
  )
925
927
 
926
928
  if getv(from_object, ['media_resolution']) is not None:
927
- raise ValueError(
928
- 'media_resolution parameter is not supported in Gemini API.'
929
+ setv(
930
+ to_object, ['mediaResolution'], getv(from_object, ['media_resolution'])
929
931
  )
930
932
 
931
933
  if getv(from_object, ['speech_config']) is not None:
@@ -2787,16 +2789,6 @@ def _ComputeTokensParameters_to_vertex(
2787
2789
  return to_object
2788
2790
 
2789
2791
 
2790
- def _MediaResolution_to_mldev_enum_validate(enum_value: Any):
2791
- if enum_value in set([
2792
- 'MEDIA_RESOLUTION_UNSPECIFIED',
2793
- 'MEDIA_RESOLUTION_LOW',
2794
- 'MEDIA_RESOLUTION_MEDIUM',
2795
- 'MEDIA_RESOLUTION_HIGH',
2796
- ]):
2797
- raise ValueError(f'{enum_value} enum value is not supported in Gemini API.')
2798
-
2799
-
2800
2792
  def _SafetyFilterLevel_to_mldev_enum_validate(enum_value: Any):
2801
2793
  if enum_value in set(['BLOCK_NONE']):
2802
2794
  raise ValueError(f'{enum_value} enum value is not supported in Gemini API.')
@@ -6030,8 +6022,8 @@ class AsyncModels(_api_module.BaseModule):
6030
6022
  ) -> AsyncPager[types.Model]:
6031
6023
  """Makes an API request to list the available models.
6032
6024
 
6033
- If `query_base` is set to True in the config, the API will return all
6034
- available base models. If set to False or not set (default), it will return
6025
+ If `query_base` is set to True in the config or not set (default), the
6026
+ API will return all available base models. If set to False, it will return
6035
6027
  all tuned models.
6036
6028
 
6037
6029
  Args:
@@ -6056,6 +6048,8 @@ class AsyncModels(_api_module.BaseModule):
6056
6048
  types._ListModelsParameters(config=config).config
6057
6049
  or types.ListModelsConfig()
6058
6050
  )
6051
+ if config.query_base is None:
6052
+ config.query_base = True
6059
6053
  if self._api_client.vertexai:
6060
6054
  config = config.copy()
6061
6055
  if not config.query_base:
@@ -6066,8 +6060,6 @@ class AsyncModels(_api_module.BaseModule):
6066
6060
  if filter_value
6067
6061
  else 'labels.tune-type:*'
6068
6062
  )
6069
- if not config.query_base:
6070
- config.query_base = False
6071
6063
  return AsyncPager(
6072
6064
  'models',
6073
6065
  self._list,
google/genai/types.py CHANGED
@@ -22,9 +22,10 @@ import json
22
22
  import logging
23
23
  import sys
24
24
  import typing
25
- from typing import Any, Callable, GenericAlias, Literal, Optional, Type, TypedDict, Union
25
+ from typing import Any, Callable, GenericAlias, Literal, Optional, Union
26
26
  import pydantic
27
27
  from pydantic import Field
28
+ from typing_extensions import TypedDict
28
29
  from . import _common
29
30
 
30
31
  if sys.version_info >= (3, 10):
@@ -43,7 +44,7 @@ if typing.TYPE_CHECKING:
43
44
  PIL_Image = PIL.Image.Image
44
45
  _is_pillow_image_imported = True
45
46
  else:
46
- PIL_Image: Type = Any
47
+ PIL_Image: typing.Type = Any
47
48
  try:
48
49
  import PIL.Image
49
50
 
@@ -1592,7 +1593,7 @@ class File(_common.BaseModel):
1592
1593
  )
1593
1594
  expiration_time: Optional[datetime.datetime] = Field(
1594
1595
  default=None,
1595
- description="""Optional. The human-readable display name for the `File`. The display name must be no more than 512 characters in length, including spaces. Example: 'Welcome Image'""",
1596
+ description="""Output only. The timestamp of when the `File` will be deleted. Only set if the `File` is scheduled to expire.""",
1596
1597
  )
1597
1598
  update_time: Optional[datetime.datetime] = Field(
1598
1599
  default=None,
@@ -1643,7 +1644,7 @@ class FileDict(TypedDict, total=False):
1643
1644
  """Output only. The timestamp of when the `File` was created."""
1644
1645
 
1645
1646
  expiration_time: Optional[datetime.datetime]
1646
- """Optional. The human-readable display name for the `File`. The display name must be no more than 512 characters in length, including spaces. Example: 'Welcome Image'"""
1647
+ """Output only. The timestamp of when the `File` will be deleted. Only set if the `File` is scheduled to expire."""
1647
1648
 
1648
1649
  update_time: Optional[datetime.datetime]
1649
1650
  """Output only. The timestamp of when the `File` was last updated."""
google/genai/version.py CHANGED
@@ -13,4 +13,4 @@
13
13
  # limitations under the License.
14
14
  #
15
15
 
16
- __version__ = '1.1.0' # x-release-please-version
16
+ __version__ = '1.2.0' # x-release-please-version
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: google-genai
3
- Version: 1.1.0
3
+ Version: 1.2.0
4
4
  Summary: GenAI Python SDK
5
5
  Author-email: Google LLC <googleapis-packages@google.com>
6
6
  License: Apache-2.0
@@ -24,6 +24,7 @@ Requires-Dist: google-auth<3.0.0dev,>=2.14.1
24
24
  Requires-Dist: pydantic<3.0.0dev,>=2.0.0
25
25
  Requires-Dist: requests<3.0.0dev,>=2.28.1
26
26
  Requires-Dist: websockets<15.0dev,>=13.0
27
+ Requires-Dist: typing-extensions<5.0.0dev,>=4.11.0
27
28
 
28
29
  # Google Gen AI SDK
29
30
 
@@ -66,6 +67,33 @@ client = genai.Client(
66
67
  )
67
68
  ```
68
69
 
70
+ **(Optional) Using environment variables:**
71
+
72
+ You can create a client by configuring the necessary environment variables.
73
+ Configuration setup instructions depends on whether you're using the Gemini API
74
+ on Vertex AI or the ML Dev Gemini API.
75
+
76
+ **ML Dev Gemini API:** Set `GOOGLE_API_KEY` as shown below:
77
+
78
+ ```bash
79
+ export GOOGLE_API_KEY='your-api-key'
80
+ ```
81
+
82
+ **Vertex AI API:** Set `GOOGLE_GENAI_USE_VERTEXAI`, `GOOGLE_CLOUD_PROJECT`
83
+ and `GOOGLE_CLOUD_LOCATION`, as shown below:
84
+
85
+ ```bash
86
+ export GOOGLE_GENAI_USE_VERTEXAI=false
87
+ export GOOGLE_CLOUD_PROJECT='your-project-id'
88
+ export GOOGLE_CLOUD_LOCATION='us-central1'
89
+ ```
90
+
91
+ ```python
92
+ client = genai.Client()
93
+ ```
94
+
95
+ ### API Selection
96
+
69
97
  To set the API version use `http_options`. For example, to set the API version
70
98
  to `v1` for Vertex AI:
71
99
 
@@ -114,7 +142,7 @@ download the file in console.
114
142
  python code.
115
143
 
116
144
  ```python
117
- file = client.files.upload(path='a11.txt')
145
+ file = client.files.upload(file='a11.txt')
118
146
  response = client.models.generate_content(
119
147
  model='gemini-2.0-flash-001',
120
148
  contents=['Could you summarize this file?', file]
@@ -778,17 +806,24 @@ Files are only supported in Gemini Developer API.
778
806
  ### Upload
779
807
 
780
808
  ```python
781
- file1 = client.files.upload(path='2312.11805v3.pdf')
782
- file2 = client.files.upload(path='2403.05530.pdf')
809
+ file1 = client.files.upload(file='2312.11805v3.pdf')
810
+ file2 = client.files.upload(file='2403.05530.pdf')
783
811
 
784
812
  print(file1)
785
813
  print(file2)
786
814
  ```
787
815
 
816
+ ### Get
817
+
818
+ ```python
819
+ file1 = client.files.upload(file='2312.11805v3.pdf')
820
+ file_info = client.files.get(name=file1.name)
821
+ ```
822
+
788
823
  ### Delete
789
824
 
790
825
  ```python
791
- file3 = client.files.upload(path='2312.11805v3.pdf')
826
+ file3 = client.files.upload(file='2312.11805v3.pdf')
792
827
 
793
828
  client.files.delete(name=file3.name)
794
829
  ```
@@ -1,5 +1,5 @@
1
1
  google/genai/__init__.py,sha256=IYw-PcsdgjSpS1mU_ZcYkTfPocsJ4aVmrDxP7vX7c6Y,709
2
- google/genai/_api_client.py,sha256=wLDcPY7qZi3caUlN-uIzbir6gzKQZg-zP8cxBp9Yq5g,22534
2
+ google/genai/_api_client.py,sha256=uQ-nYVKD81mPvXj7_CAIfhAgv2_aJlFCXQ0llSNal8s,22747
3
3
  google/genai/_api_module.py,sha256=9bxmtcSTpT8Ht6VwJyw7fQqiR0jJXz7350dWGl-bC5E,780
4
4
  google/genai/_automatic_function_calling_util.py,sha256=Hs7vvLRCRxL-YbNRnwx_qulY9sspwE6xP7A3-cjoIB8,10834
5
5
  google/genai/_common.py,sha256=HrGkshBrfkt5bARjtJ8-dSLJSKEptM1JnqDG5AGm2Rw,9565
@@ -7,21 +7,21 @@ google/genai/_extra_utils.py,sha256=vpZs7mrAwZ1mJrbsmSdqrDepLe4hyPgjNYENV56lv2Y,
7
7
  google/genai/_operations.py,sha256=KaDgwqG5g6Odd1P6ftvIUT9gF3ov08drm01jE1CjB_s,11490
8
8
  google/genai/_replay_api_client.py,sha256=f_znGdDKXUOEN8lkRBzVZ6LDSGwrWHzy9N-Sk6pUU4E,14963
9
9
  google/genai/_test_api_client.py,sha256=2PvDcW3h01U4UOSoj7TUo6TwdBHSEN_lO2tXjBoh5Fw,4765
10
- google/genai/_transformers.py,sha256=BfKU8xla1OmE5MmTxhYIMhBjZE3LJ2Rag1Fd6ojXX18,23891
10
+ google/genai/_transformers.py,sha256=iZ1EFNEJE3Nh3ZnccUQmdRupWLDJonaEreilhvenK-w,24331
11
11
  google/genai/batches.py,sha256=jv8pW_g_cZee6ol5ER5bQRUkXsj4IUcZC5cMo-YAnt0,38033
12
- google/genai/caches.py,sha256=jsiclHO71kIa2CNrds3O8PL2fCNr_dlhUSPjhiRsjNE,53152
12
+ google/genai/caches.py,sha256=lTlGSSeCLhh9kq6k4kzjVomHp0gqlON_LUOgnWbfNc0,53169
13
13
  google/genai/chats.py,sha256=6gKf81vtLqUAR2TeaI0kZfxrEPEHbfwxHB5hI9zSz9A,8552
14
- google/genai/client.py,sha256=MTZ3DOXk1_xgljaHlvF16jr_SKVPRfU8lZ1eH_dfDeQ,9334
14
+ google/genai/client.py,sha256=YvOt-jPWynf4exAh5rfl2i-YxQCrw5Z9zWQNSwtE6xE,9451
15
15
  google/genai/errors.py,sha256=dea3cQecyGFMoV5oIvUfKeMY904HzlcT4oiPWQzDCZo,3746
16
16
  google/genai/files.py,sha256=U3qaa31AX7dKcZh6RkZSAkrDO7FVitukMW67wxL70kQ,42074
17
17
  google/genai/live.py,sha256=xDu1wV8iQ5lI2i4_AmtOQOuiiPXBt6WykV_rXfjb0Sc,23467
18
- google/genai/models.py,sha256=GEmUx8hLdfEenZNeUDjbKkpHHXsFiaxmAI5JN9OQHXA,178456
18
+ google/genai/models.py,sha256=guW4WbKmfMT97TW3l4-kJHi7VyncpReceESL-Qi3gTI,178167
19
19
  google/genai/pagers.py,sha256=hSHd-gLvEzYWwK85i8EcFNWUMKtszUs7Nw2r3L7d6_U,6686
20
20
  google/genai/tunings.py,sha256=sZYVy8gJmvMLxYGLVDhASVPNP58ngNVIQb3CWJVTs48,44678
21
- google/genai/types.py,sha256=2Ysd4tt4a2_FK8L-idyH6a9UvoXKOr0eg_xluGl_34M,281256
22
- google/genai/version.py,sha256=xY649pcj-oW-ztwg6bMebnF3eIBvVGp4g6eFatbMDGQ,626
23
- google_genai-1.1.0.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
24
- google_genai-1.1.0.dist-info/METADATA,sha256=xywOX430bytBvC7mthMlXcpVJPUF7ugZocPm2UvG9wY,26094
25
- google_genai-1.1.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
26
- google_genai-1.1.0.dist-info/top_level.txt,sha256=_1QvSJIhFAGfxb79D6DhB7SUw2X6T4rwnz_LLrbcD3c,7
27
- google_genai-1.1.0.dist-info/RECORD,,
21
+ google/genai/types.py,sha256=8-gnTJ26SR_d2Gp_QkN2UrfKSCY-dS3LfK0TrCIf9WQ,281176
22
+ google/genai/version.py,sha256=LyKJKSTJTPOw5Ja9WHJkQfQM6sTw2mTPv4HOr8RUwyk,626
23
+ google_genai-1.2.0.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
24
+ google_genai-1.2.0.dist-info/METADATA,sha256=4y5cU1W6Xsq2fgBN7n-q1xqpJAyW3YSQR2bOT6sAYqk,26940
25
+ google_genai-1.2.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
26
+ google_genai-1.2.0.dist-info/top_level.txt,sha256=_1QvSJIhFAGfxb79D6DhB7SUw2X6T4rwnz_LLrbcD3c,7
27
+ google_genai-1.2.0.dist-info/RECORD,,