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.
- google/genai/_api_client.py +21 -14
- google/genai/_transformers.py +28 -8
- google/genai/caches.py +4 -2
- google/genai/client.py +13 -12
- google/genai/models.py +10 -18
- google/genai/types.py +5 -4
- google/genai/version.py +1 -1
- {google_genai-1.1.0.dist-info → google_genai-1.2.0.dist-info}/METADATA +40 -5
- {google_genai-1.1.0.dist-info → google_genai-1.2.0.dist-info}/RECORD +12 -12
- {google_genai-1.1.0.dist-info → google_genai-1.2.0.dist-info}/LICENSE +0 -0
- {google_genai-1.1.0.dist-info → google_genai-1.2.0.dist-info}/WHEEL +0 -0
- {google_genai-1.1.0.dist-info → google_genai-1.2.0.dist-info}/top_level.txt +0 -0
google/genai/_api_client.py
CHANGED
@@ -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 =
|
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
|
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
|
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
|
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: #
|
284
|
+
else: # Implicit initialization or missing arguments.
|
281
285
|
if not self.api_key:
|
282
|
-
raise ValueError(
|
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=[
|
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=[
|
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(
|
google/genai/_transformers.py
CHANGED
@@ -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
|
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)
|
573
|
-
isinstance(origin, type)
|
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
|
-
|
176
|
-
|
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.
|
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
|
-
|
178
|
-
|
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
|
-
|
928
|
-
'
|
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
|
6034
|
-
available base models. If set to False
|
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,
|
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="""
|
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
|
-
"""
|
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
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: google-genai
|
3
|
-
Version: 1.
|
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(
|
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(
|
782
|
-
file2 = client.files.upload(
|
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(
|
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=
|
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=
|
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=
|
12
|
+
google/genai/caches.py,sha256=lTlGSSeCLhh9kq6k4kzjVomHp0gqlON_LUOgnWbfNc0,53169
|
13
13
|
google/genai/chats.py,sha256=6gKf81vtLqUAR2TeaI0kZfxrEPEHbfwxHB5hI9zSz9A,8552
|
14
|
-
google/genai/client.py,sha256=
|
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=
|
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=
|
22
|
-
google/genai/version.py,sha256=
|
23
|
-
google_genai-1.
|
24
|
-
google_genai-1.
|
25
|
-
google_genai-1.
|
26
|
-
google_genai-1.
|
27
|
-
google_genai-1.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|