gemini-webapi 1.10.1__py3-none-any.whl → 1.11.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.
- gemini_webapi/client.py +30 -6
- gemini_webapi/constants.py +20 -26
- gemini_webapi/exceptions.py +16 -0
- {gemini_webapi-1.10.1.dist-info → gemini_webapi-1.11.0.dist-info}/METADATA +5 -7
- {gemini_webapi-1.10.1.dist-info → gemini_webapi-1.11.0.dist-info}/RECORD +8 -8
- {gemini_webapi-1.10.1.dist-info → gemini_webapi-1.11.0.dist-info}/WHEEL +0 -0
- {gemini_webapi-1.10.1.dist-info → gemini_webapi-1.11.0.dist-info}/licenses/LICENSE +0 -0
- {gemini_webapi-1.10.1.dist-info → gemini_webapi-1.11.0.dist-info}/top_level.txt +0 -0
gemini_webapi/client.py
CHANGED
|
@@ -8,8 +8,15 @@ from typing import Any, Optional
|
|
|
8
8
|
|
|
9
9
|
from httpx import AsyncClient, ReadTimeout
|
|
10
10
|
|
|
11
|
-
from .constants import Endpoint, Headers, Model
|
|
12
|
-
from .exceptions import
|
|
11
|
+
from .constants import Endpoint, ErrorCode, Headers, Model
|
|
12
|
+
from .exceptions import (
|
|
13
|
+
AuthError,
|
|
14
|
+
APIError,
|
|
15
|
+
TimeoutError,
|
|
16
|
+
GeminiError,
|
|
17
|
+
UsageLimitExceeded,
|
|
18
|
+
ModelInvalid,
|
|
19
|
+
)
|
|
13
20
|
from .types import WebImage, GeneratedImage, Candidate, ModelOutput
|
|
14
21
|
from .utils import (
|
|
15
22
|
upload_file,
|
|
@@ -376,10 +383,27 @@ class GeminiClient:
|
|
|
376
383
|
raise Exception
|
|
377
384
|
except Exception:
|
|
378
385
|
await self.close()
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
386
|
+
|
|
387
|
+
try:
|
|
388
|
+
match ErrorCode(response_json[0][5][2][0][1][0]):
|
|
389
|
+
case ErrorCode.USAGE_LIMIT_EXCEEDED:
|
|
390
|
+
raise UsageLimitExceeded(
|
|
391
|
+
f"Failed to generate contents. Usage limit of {model.model_name} model has exceeded. Please try switching to another model."
|
|
392
|
+
)
|
|
393
|
+
case ErrorCode.MODEL_HEADER_INVALID:
|
|
394
|
+
raise ModelInvalid(
|
|
395
|
+
"Failed to generate contents. The specified model is not available. Please update gemini_webapi to the latest version. "
|
|
396
|
+
"If the error persists and is caused by the package, please report it on GitHub."
|
|
397
|
+
)
|
|
398
|
+
case _:
|
|
399
|
+
raise Exception
|
|
400
|
+
except GeminiError:
|
|
401
|
+
raise
|
|
402
|
+
except Exception:
|
|
403
|
+
logger.debug(f"Invalid response: {response.text}")
|
|
404
|
+
raise APIError(
|
|
405
|
+
"Failed to generate contents. Invalid response data received. Client will try to re-initialize on next request."
|
|
406
|
+
)
|
|
383
407
|
|
|
384
408
|
try:
|
|
385
409
|
candidates = []
|
gemini_webapi/constants.py
CHANGED
|
@@ -27,24 +27,24 @@ class Model(Enum):
|
|
|
27
27
|
UNSPECIFIED = ("unspecified", {}, False)
|
|
28
28
|
G_2_0_FLASH = (
|
|
29
29
|
"gemini-2.0-flash",
|
|
30
|
-
{"x-goog-ext-525001261-jspb": '[
|
|
30
|
+
{"x-goog-ext-525001261-jspb": '[1,null,null,null,"f299729663a2343f"]'},
|
|
31
31
|
False,
|
|
32
32
|
)
|
|
33
|
-
G_2_0_FLASH_EXP = (
|
|
34
|
-
"gemini-2.0-flash-exp",
|
|
35
|
-
{"x-goog-ext-525001261-jspb": '[null,null,null,null,"f299729663a2343f"]'},
|
|
36
|
-
False,
|
|
37
|
-
) # Deprecated, should be removed in the future
|
|
38
33
|
G_2_0_FLASH_THINKING = (
|
|
39
34
|
"gemini-2.0-flash-thinking",
|
|
40
|
-
{"x-goog-ext-525001261-jspb": '[null,null,null,null,"
|
|
35
|
+
{"x-goog-ext-525001261-jspb": '[null,null,null,null,"7ca48d02d802f20a"]'},
|
|
36
|
+
False,
|
|
37
|
+
) # Deprecated
|
|
38
|
+
G_2_5_FLASH = (
|
|
39
|
+
"gemini-2.5-flash",
|
|
40
|
+
{"x-goog-ext-525001261-jspb": '[1,null,null,null,"35609594dbe934d8"]'},
|
|
41
41
|
False,
|
|
42
42
|
)
|
|
43
|
-
|
|
44
|
-
"gemini-2.
|
|
45
|
-
{"x-goog-ext-525001261-jspb": '[
|
|
43
|
+
G_2_5_PRO = (
|
|
44
|
+
"gemini-2.5-pro",
|
|
45
|
+
{"x-goog-ext-525001261-jspb": '[1,null,null,null,"2525e3954d185b3c"]'},
|
|
46
46
|
False,
|
|
47
|
-
)
|
|
47
|
+
)
|
|
48
48
|
G_2_0_EXP_ADVANCED = (
|
|
49
49
|
"gemini-2.0-exp-advanced",
|
|
50
50
|
{"x-goog-ext-525001261-jspb": '[null,null,null,null,"b1e46a6037e6aa9f"]'},
|
|
@@ -55,21 +55,6 @@ class Model(Enum):
|
|
|
55
55
|
{"x-goog-ext-525001261-jspb": '[null,null,null,null,"203e6bb81620bcfe"]'},
|
|
56
56
|
True,
|
|
57
57
|
)
|
|
58
|
-
G_1_5_FLASH = (
|
|
59
|
-
"gemini-1.5-flash",
|
|
60
|
-
{"x-goog-ext-525001261-jspb": '[null,null,null,null,"418ab5ea040b5c43"]'},
|
|
61
|
-
False,
|
|
62
|
-
) # Deprecated, should be removed in the future
|
|
63
|
-
G_1_5_PRO = (
|
|
64
|
-
"gemini-1.5-pro",
|
|
65
|
-
{"x-goog-ext-525001261-jspb": '[null,null,null,null,"9d60dfae93c9ff1f"]'},
|
|
66
|
-
True,
|
|
67
|
-
) # Deprecated, should be removed in the future
|
|
68
|
-
G_1_5_PRO_RESEARCH = (
|
|
69
|
-
"gemini-1.5-pro-research",
|
|
70
|
-
{"x-goog-ext-525001261-jspb": '[null,null,null,null,"e5a44cb1dae2b489"]'},
|
|
71
|
-
True,
|
|
72
|
-
) # Deprecated, should be removed in the future
|
|
73
58
|
|
|
74
59
|
def __init__(self, name, header, advanced_only):
|
|
75
60
|
self.model_name = name
|
|
@@ -84,3 +69,12 @@ class Model(Enum):
|
|
|
84
69
|
raise ValueError(
|
|
85
70
|
f"Unknown model name: {name}. Available models: {', '.join([model.model_name for model in cls])}"
|
|
86
71
|
)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class ErrorCode(Enum):
|
|
75
|
+
"""
|
|
76
|
+
Known error codes returned from server.
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
USAGE_LIMIT_EXCEEDED = 1037
|
|
80
|
+
MODEL_HEADER_INVALID = 1052
|
gemini_webapi/exceptions.py
CHANGED
|
@@ -28,3 +28,19 @@ class TimeoutError(GeminiError):
|
|
|
28
28
|
"""
|
|
29
29
|
|
|
30
30
|
pass
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class UsageLimitExceeded(GeminiError):
|
|
34
|
+
"""
|
|
35
|
+
Exception for model usage limit exceeded errors.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
pass
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class ModelInvalid(GeminiError):
|
|
42
|
+
"""
|
|
43
|
+
Exception for invalid model header string errors.
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
pass
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gemini-webapi
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.11.0
|
|
4
4
|
Summary: ✨ An elegant async Python wrapper for Google Gemini web app
|
|
5
5
|
Author: UZQueen
|
|
6
6
|
License: GNU AFFERO GENERAL PUBLIC LICENSE
|
|
@@ -677,8 +677,8 @@ Requires-Python: >=3.10
|
|
|
677
677
|
Description-Content-Type: text/markdown
|
|
678
678
|
License-File: LICENSE
|
|
679
679
|
Requires-Dist: httpx[http2]~=0.28.1
|
|
680
|
-
Requires-Dist: pydantic~=2.10.5
|
|
681
680
|
Requires-Dist: loguru~=0.7.3
|
|
681
|
+
Requires-Dist: pydantic~=2.11.3
|
|
682
682
|
Dynamic: license-file
|
|
683
683
|
|
|
684
684
|
<p align="center">
|
|
@@ -822,18 +822,16 @@ You can specify which language model to use by passing `model` argument to `Gemi
|
|
|
822
822
|
|
|
823
823
|
Currently available models (as of Feb 5, 2025):
|
|
824
824
|
|
|
825
|
-
- `unspecified` - Default model
|
|
825
|
+
- `unspecified` - Default model
|
|
826
826
|
- `gemini-2.0-flash` - Gemini 2.0 Flash
|
|
827
827
|
- `gemini-2.0-flash-thinking` - Gemini 2.0 Flash Thinking Experimental
|
|
828
|
-
- `gemini-2.
|
|
829
|
-
- `gemini-
|
|
828
|
+
- `gemini-2.5-flash` - Gemini 2.5 Flash
|
|
829
|
+
- `gemini-2.5-pro` - Gemini 2.5 Pro (daily usage limit imposed)
|
|
830
830
|
|
|
831
831
|
Models pending update (may not work as expected):
|
|
832
832
|
|
|
833
833
|
- `gemini-2.5-exp-advanced` - Gemini 2.5 Experimental Advanced **(requires Gemini Advanced account)**
|
|
834
834
|
- `gemini-2.0-exp-advanced` - Gemini 2.0 Experimental Advanced **(requires Gemini Advanced account)**
|
|
835
|
-
- `gemini-1.5-pro` - Gemini 1.5 Pro **(requires Gemini Advanced account)**
|
|
836
|
-
- `gemini-1.5-pro-research` - Gemini 1.5 Pro with Deep Research **(requires Gemini Advanced account)**
|
|
837
835
|
|
|
838
836
|
```python
|
|
839
837
|
from gemini_webapi.constants import Model
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
gemini_webapi/__init__.py,sha256=28uNIywK4vCXxENaSagNWUzhqr1RyNtLzDF6WRRM4KQ,194
|
|
2
|
-
gemini_webapi/client.py,sha256=
|
|
3
|
-
gemini_webapi/constants.py,sha256=
|
|
4
|
-
gemini_webapi/exceptions.py,sha256=
|
|
2
|
+
gemini_webapi/client.py,sha256=C3xSlhEniIlKciaT_lgpnGgsGWXcFUMZsb1l9zq_3vQ,24127
|
|
3
|
+
gemini_webapi/constants.py,sha256=cHOm0kPdVGYORYkA3Qzv6QpnfyvrT3-Y9zwc_auAViE,2496
|
|
4
|
+
gemini_webapi/exceptions.py,sha256=3TnwWlUjM9uCL6Ug7H9qF4P0juS6XXZPk8ZGtFtyrJk,783
|
|
5
5
|
gemini_webapi/types/__init__.py,sha256=d2kvXnE004s2E2KDmPPLi5N-BQ59FgDSlrGrO3Wphww,163
|
|
6
6
|
gemini_webapi/types/candidate.py,sha256=dMoGr53WR7FYDRrXpG9Yd_n9YTHGwGaFHZ8zPt8RMWw,1178
|
|
7
7
|
gemini_webapi/types/image.py,sha256=4BC8hxAWJrYFwzA60CivF1di4RZkzPKjcaSPPFKmRdY,5237
|
|
@@ -12,8 +12,8 @@ gemini_webapi/utils/load_browser_cookies.py,sha256=A5n_VsB7Rm8ck5lpy856UNJEhv30l
|
|
|
12
12
|
gemini_webapi/utils/logger.py,sha256=PF4ROQq7scRRrWzeYdeYiYs2S2Jqr0bgjyrPbXVOCqE,816
|
|
13
13
|
gemini_webapi/utils/rotate_1psidts.py,sha256=NyQ9OYPLBOcvpc8bodvEYDIVFrsYN0kdfc831lPEctM,1680
|
|
14
14
|
gemini_webapi/utils/upload_file.py,sha256=SJOMr6kryK_ClrKmqI96fqZBNFOMPsyAvFINAGAU3rk,1468
|
|
15
|
-
gemini_webapi-1.
|
|
16
|
-
gemini_webapi-1.
|
|
17
|
-
gemini_webapi-1.
|
|
18
|
-
gemini_webapi-1.
|
|
19
|
-
gemini_webapi-1.
|
|
15
|
+
gemini_webapi-1.11.0.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
|
|
16
|
+
gemini_webapi-1.11.0.dist-info/METADATA,sha256=qVE4s3uC1iiON3ce25m9gsWKxL4xFLK21laFHLL2mBI,57167
|
|
17
|
+
gemini_webapi-1.11.0.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
|
18
|
+
gemini_webapi-1.11.0.dist-info/top_level.txt,sha256=dtWtug_ZrmnUqCYuu8NmGzTgWglHeNzhHU_hXmqZGWE,14
|
|
19
|
+
gemini_webapi-1.11.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|