chunkr-ai 0.0.29__py3-none-any.whl → 0.0.30__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.
@@ -66,17 +66,21 @@ def retry_on_429(max_retries: int = 25, initial_delay: float = 0.5) -> Callable[
66
66
 
67
67
  Args:
68
68
  max_retries: Maximum number of retry attempts (default: 25)
69
- initial_delay: Initial delay in seconds, will be exponentially increased (default: 0.5)
69
+ initial_delay: Initial delay in seconds, will be exponentially increased with jitter (default: 0.5)
70
70
  """
71
71
  def decorator(async_func: Callable[P, Awaitable[T]]) -> Callable[P, Awaitable[T]]:
72
72
  @functools.wraps(async_func)
73
73
  async def wrapper(*args: P.args, **kwargs: P.kwargs) -> T:
74
+ import random
74
75
  retries = 0
75
76
  while True:
76
77
  try:
77
78
  return await async_func(*args, **kwargs)
78
79
  except httpx.HTTPStatusError as e:
79
- if e.response.status_code != 429 or retries >= max_retries:
80
+ if e.response.status_code != 429:
81
+ raise
82
+ if retries >= max_retries:
83
+ print("Max retries reached")
80
84
  raise
81
85
  retries += 1
82
86
  delay = initial_delay * (2 ** retries)
@@ -87,6 +91,7 @@ def retry_on_429(max_retries: int = 25, initial_delay: float = 0.5) -> Callable[
87
91
  delay = float(retry_after)
88
92
  except (ValueError, TypeError):
89
93
  pass
90
- await asyncio.sleep(delay)
94
+ jitter = random.uniform(0, 0.25) * delay
95
+ await asyncio.sleep(delay + jitter)
91
96
  return wrapper
92
97
  return decorator
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: chunkr-ai
3
- Version: 0.0.29
3
+ Version: 0.0.30
4
4
  Summary: Python client for Chunkr: open source document intelligence
5
5
  Author-email: Ishaan Kapoor <ishaan@lumina.sh>
6
6
  License: MIT License
@@ -5,12 +5,12 @@ chunkr_ai/api/auth.py,sha256=hlv0GiUmlsbFO1wLL9sslqOnsBSoBqkL_6Mk2SDvxgE,413
5
5
  chunkr_ai/api/chunkr.py,sha256=VnbuAPlWLqyf8xCCU_kpdybgjVPTwZLarDQoD3uozY0,3065
6
6
  chunkr_ai/api/chunkr_base.py,sha256=giW56fL7xxJphdOTpIH52dXxpNt7OdP8pNiPSqbNjGM,5835
7
7
  chunkr_ai/api/configuration.py,sha256=m8QL6s2j1_xSo9bERzJ3UG5j8cE6o-cZIiQGxsSf7Ow,3805
8
- chunkr_ai/api/decorators.py,sha256=5MEA6e38Rdmry8vMQRyW1DUY0KLlbjH1DjSK8W-0PU8,4071
8
+ chunkr_ai/api/decorators.py,sha256=hu3wdd0s7P6askR3Td8g6OM-RoUCggDGv06HQUsMI6E,4284
9
9
  chunkr_ai/api/misc.py,sha256=5PBI6pvOXr0x-3WieSKLrC8MA0iGPa-IG-5FEZ3vnr0,5724
10
10
  chunkr_ai/api/protocol.py,sha256=LjPrYSq52m1afIlAo0yVGXlGZxPRh8J6g7S4PAit3Zo,388
11
11
  chunkr_ai/api/task_response.py,sha256=uvM5uNIImDnivsgujjOh2kxRYuUoqKDhLE1nOH2dJjo,6091
12
- chunkr_ai-0.0.29.dist-info/LICENSE,sha256=w3R12yNDyZpMiy2lxy_hvNbsldC75ww79sF0u11rkho,1069
13
- chunkr_ai-0.0.29.dist-info/METADATA,sha256=xscJ4AZnLEYPLZeUdduC96W4HLPf0cTDlnW1L4lgGlc,6996
14
- chunkr_ai-0.0.29.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
15
- chunkr_ai-0.0.29.dist-info/top_level.txt,sha256=0IZY7PZIiS8bw5r4NUQRUQ-ATi-L_3vLQVq3ZLouOW8,10
16
- chunkr_ai-0.0.29.dist-info/RECORD,,
12
+ chunkr_ai-0.0.30.dist-info/LICENSE,sha256=w3R12yNDyZpMiy2lxy_hvNbsldC75ww79sF0u11rkho,1069
13
+ chunkr_ai-0.0.30.dist-info/METADATA,sha256=7prC0mZFxek20uv901qM7s4rFmteCYNnK8BI3ZelXXo,6996
14
+ chunkr_ai-0.0.30.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
15
+ chunkr_ai-0.0.30.dist-info/top_level.txt,sha256=0IZY7PZIiS8bw5r4NUQRUQ-ATi-L_3vLQVq3ZLouOW8,10
16
+ chunkr_ai-0.0.30.dist-info/RECORD,,