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 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 AuthError, APIError, TimeoutError, GeminiError
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
- logger.debug(f"Invalid response: {response.text}")
380
- raise APIError(
381
- "Failed to generate contents. Invalid response data received. Client will try to re-initialize on next request."
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 = []
@@ -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": '[null,null,null,null,"f299729663a2343f"]'},
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,"9c17b1863f581b8a"]'},
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
- G_2_0_FLASH_THINKING_WITH_APPS = (
44
- "gemini-2.0-flash-thinking-with-apps",
45
- {"x-goog-ext-525001261-jspb": '[null,null,null,null,"f8f8f5ea629f5d37"]'},
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
- ) # Deprecated, should be removed in the future
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
@@ -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.10.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 (same as `gemini-2.0-flash` if account does NOT have Gemini Advanced subscription)
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.0-flash-thinking-with-apps` - Gemini 2.0 Flash Thinking Experimental with apps
829
- - `gemini-1.5-flash` - Gemini 1.5 Flash
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=WsH07qepNSQzq4pdYIJW393Jr4gcdp8D64ti6GlDj9E,23065
3
- gemini_webapi/constants.py,sha256=Uv-EsCDJUsDJh2KUBkia7u9jXnItKzFJOEHVfrpxQs0,3090
4
- gemini_webapi/exceptions.py,sha256=6e-EXHGApi4iC0GDw7RKc3YqVK8UvEkHYaJyGQbReLw,548
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.10.1.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
16
- gemini_webapi-1.10.1.dist-info/METADATA,sha256=XHAVhXXLT9s7jvuZjaoXxw0CWmIyzg2Grfpiv4wkCKY,57455
17
- gemini_webapi-1.10.1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
18
- gemini_webapi-1.10.1.dist-info/top_level.txt,sha256=dtWtug_ZrmnUqCYuu8NmGzTgWglHeNzhHU_hXmqZGWE,14
19
- gemini_webapi-1.10.1.dist-info/RECORD,,
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,,