modal 0.73.141__tar.gz → 0.73.143__tar.gz

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.
Files changed (184) hide show
  1. {modal-0.73.141 → modal-0.73.143}/PKG-INFO +1 -1
  2. {modal-0.73.141 → modal-0.73.143}/modal/client.pyi +2 -2
  3. {modal-0.73.141 → modal-0.73.143}/modal/functions.pyi +6 -6
  4. {modal-0.73.141 → modal-0.73.143}/modal/parallel_map.py +12 -8
  5. {modal-0.73.141 → modal-0.73.143}/modal/parallel_map.pyi +1 -0
  6. {modal-0.73.141 → modal-0.73.143}/modal.egg-info/PKG-INFO +1 -1
  7. {modal-0.73.141 → modal-0.73.143}/modal_proto/api.proto +1 -0
  8. {modal-0.73.141 → modal-0.73.143}/modal_proto/api_pb2.py +466 -466
  9. {modal-0.73.141 → modal-0.73.143}/modal_proto/api_pb2.pyi +4 -1
  10. {modal-0.73.141 → modal-0.73.143}/modal_version/_version_generated.py +1 -1
  11. {modal-0.73.141 → modal-0.73.143}/LICENSE +0 -0
  12. {modal-0.73.141 → modal-0.73.143}/README.md +0 -0
  13. {modal-0.73.141 → modal-0.73.143}/modal/__init__.py +0 -0
  14. {modal-0.73.141 → modal-0.73.143}/modal/__main__.py +0 -0
  15. {modal-0.73.141 → modal-0.73.143}/modal/_clustered_functions.py +0 -0
  16. {modal-0.73.141 → modal-0.73.143}/modal/_clustered_functions.pyi +0 -0
  17. {modal-0.73.141 → modal-0.73.143}/modal/_container_entrypoint.py +0 -0
  18. {modal-0.73.141 → modal-0.73.143}/modal/_functions.py +0 -0
  19. {modal-0.73.141 → modal-0.73.143}/modal/_ipython.py +0 -0
  20. {modal-0.73.141 → modal-0.73.143}/modal/_location.py +0 -0
  21. {modal-0.73.141 → modal-0.73.143}/modal/_object.py +0 -0
  22. {modal-0.73.141 → modal-0.73.143}/modal/_output.py +0 -0
  23. {modal-0.73.141 → modal-0.73.143}/modal/_partial_function.py +0 -0
  24. {modal-0.73.141 → modal-0.73.143}/modal/_proxy_tunnel.py +0 -0
  25. {modal-0.73.141 → modal-0.73.143}/modal/_pty.py +0 -0
  26. {modal-0.73.141 → modal-0.73.143}/modal/_resolver.py +0 -0
  27. {modal-0.73.141 → modal-0.73.143}/modal/_resources.py +0 -0
  28. {modal-0.73.141 → modal-0.73.143}/modal/_runtime/__init__.py +0 -0
  29. {modal-0.73.141 → modal-0.73.143}/modal/_runtime/asgi.py +0 -0
  30. {modal-0.73.141 → modal-0.73.143}/modal/_runtime/container_io_manager.py +0 -0
  31. {modal-0.73.141 → modal-0.73.143}/modal/_runtime/container_io_manager.pyi +0 -0
  32. {modal-0.73.141 → modal-0.73.143}/modal/_runtime/execution_context.py +0 -0
  33. {modal-0.73.141 → modal-0.73.143}/modal/_runtime/execution_context.pyi +0 -0
  34. {modal-0.73.141 → modal-0.73.143}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  35. {modal-0.73.141 → modal-0.73.143}/modal/_runtime/telemetry.py +0 -0
  36. {modal-0.73.141 → modal-0.73.143}/modal/_runtime/user_code_imports.py +0 -0
  37. {modal-0.73.141 → modal-0.73.143}/modal/_serialization.py +0 -0
  38. {modal-0.73.141 → modal-0.73.143}/modal/_traceback.py +0 -0
  39. {modal-0.73.141 → modal-0.73.143}/modal/_tunnel.py +0 -0
  40. {modal-0.73.141 → modal-0.73.143}/modal/_tunnel.pyi +0 -0
  41. {modal-0.73.141 → modal-0.73.143}/modal/_type_manager.py +0 -0
  42. {modal-0.73.141 → modal-0.73.143}/modal/_utils/__init__.py +0 -0
  43. {modal-0.73.141 → modal-0.73.143}/modal/_utils/app_utils.py +0 -0
  44. {modal-0.73.141 → modal-0.73.143}/modal/_utils/async_utils.py +0 -0
  45. {modal-0.73.141 → modal-0.73.143}/modal/_utils/blob_utils.py +0 -0
  46. {modal-0.73.141 → modal-0.73.143}/modal/_utils/bytes_io_segment_payload.py +0 -0
  47. {modal-0.73.141 → modal-0.73.143}/modal/_utils/deprecation.py +0 -0
  48. {modal-0.73.141 → modal-0.73.143}/modal/_utils/docker_utils.py +0 -0
  49. {modal-0.73.141 → modal-0.73.143}/modal/_utils/function_utils.py +0 -0
  50. {modal-0.73.141 → modal-0.73.143}/modal/_utils/git_utils.py +0 -0
  51. {modal-0.73.141 → modal-0.73.143}/modal/_utils/grpc_testing.py +0 -0
  52. {modal-0.73.141 → modal-0.73.143}/modal/_utils/grpc_utils.py +0 -0
  53. {modal-0.73.141 → modal-0.73.143}/modal/_utils/hash_utils.py +0 -0
  54. {modal-0.73.141 → modal-0.73.143}/modal/_utils/http_utils.py +0 -0
  55. {modal-0.73.141 → modal-0.73.143}/modal/_utils/jwt_utils.py +0 -0
  56. {modal-0.73.141 → modal-0.73.143}/modal/_utils/logger.py +0 -0
  57. {modal-0.73.141 → modal-0.73.143}/modal/_utils/mount_utils.py +0 -0
  58. {modal-0.73.141 → modal-0.73.143}/modal/_utils/name_utils.py +0 -0
  59. {modal-0.73.141 → modal-0.73.143}/modal/_utils/package_utils.py +0 -0
  60. {modal-0.73.141 → modal-0.73.143}/modal/_utils/pattern_utils.py +0 -0
  61. {modal-0.73.141 → modal-0.73.143}/modal/_utils/rand_pb_testing.py +0 -0
  62. {modal-0.73.141 → modal-0.73.143}/modal/_utils/shell_utils.py +0 -0
  63. {modal-0.73.141 → modal-0.73.143}/modal/_vendor/__init__.py +0 -0
  64. {modal-0.73.141 → modal-0.73.143}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  65. {modal-0.73.141 → modal-0.73.143}/modal/_vendor/cloudpickle.py +0 -0
  66. {modal-0.73.141 → modal-0.73.143}/modal/_vendor/tblib.py +0 -0
  67. {modal-0.73.141 → modal-0.73.143}/modal/_watcher.py +0 -0
  68. {modal-0.73.141 → modal-0.73.143}/modal/app.py +0 -0
  69. {modal-0.73.141 → modal-0.73.143}/modal/app.pyi +0 -0
  70. {modal-0.73.141 → modal-0.73.143}/modal/call_graph.py +0 -0
  71. {modal-0.73.141 → modal-0.73.143}/modal/cli/__init__.py +0 -0
  72. {modal-0.73.141 → modal-0.73.143}/modal/cli/_download.py +0 -0
  73. {modal-0.73.141 → modal-0.73.143}/modal/cli/_traceback.py +0 -0
  74. {modal-0.73.141 → modal-0.73.143}/modal/cli/app.py +0 -0
  75. {modal-0.73.141 → modal-0.73.143}/modal/cli/config.py +0 -0
  76. {modal-0.73.141 → modal-0.73.143}/modal/cli/container.py +0 -0
  77. {modal-0.73.141 → modal-0.73.143}/modal/cli/dict.py +0 -0
  78. {modal-0.73.141 → modal-0.73.143}/modal/cli/entry_point.py +0 -0
  79. {modal-0.73.141 → modal-0.73.143}/modal/cli/environment.py +0 -0
  80. {modal-0.73.141 → modal-0.73.143}/modal/cli/import_refs.py +0 -0
  81. {modal-0.73.141 → modal-0.73.143}/modal/cli/launch.py +0 -0
  82. {modal-0.73.141 → modal-0.73.143}/modal/cli/network_file_system.py +0 -0
  83. {modal-0.73.141 → modal-0.73.143}/modal/cli/profile.py +0 -0
  84. {modal-0.73.141 → modal-0.73.143}/modal/cli/programs/__init__.py +0 -0
  85. {modal-0.73.141 → modal-0.73.143}/modal/cli/programs/run_jupyter.py +0 -0
  86. {modal-0.73.141 → modal-0.73.143}/modal/cli/programs/vscode.py +0 -0
  87. {modal-0.73.141 → modal-0.73.143}/modal/cli/queues.py +0 -0
  88. {modal-0.73.141 → modal-0.73.143}/modal/cli/run.py +0 -0
  89. {modal-0.73.141 → modal-0.73.143}/modal/cli/secret.py +0 -0
  90. {modal-0.73.141 → modal-0.73.143}/modal/cli/token.py +0 -0
  91. {modal-0.73.141 → modal-0.73.143}/modal/cli/utils.py +0 -0
  92. {modal-0.73.141 → modal-0.73.143}/modal/cli/volume.py +0 -0
  93. {modal-0.73.141 → modal-0.73.143}/modal/client.py +0 -0
  94. {modal-0.73.141 → modal-0.73.143}/modal/cloud_bucket_mount.py +0 -0
  95. {modal-0.73.141 → modal-0.73.143}/modal/cloud_bucket_mount.pyi +0 -0
  96. {modal-0.73.141 → modal-0.73.143}/modal/cls.py +0 -0
  97. {modal-0.73.141 → modal-0.73.143}/modal/cls.pyi +0 -0
  98. {modal-0.73.141 → modal-0.73.143}/modal/config.py +0 -0
  99. {modal-0.73.141 → modal-0.73.143}/modal/container_process.py +0 -0
  100. {modal-0.73.141 → modal-0.73.143}/modal/container_process.pyi +0 -0
  101. {modal-0.73.141 → modal-0.73.143}/modal/dict.py +0 -0
  102. {modal-0.73.141 → modal-0.73.143}/modal/dict.pyi +0 -0
  103. {modal-0.73.141 → modal-0.73.143}/modal/environments.py +0 -0
  104. {modal-0.73.141 → modal-0.73.143}/modal/environments.pyi +0 -0
  105. {modal-0.73.141 → modal-0.73.143}/modal/exception.py +0 -0
  106. {modal-0.73.141 → modal-0.73.143}/modal/experimental/__init__.py +0 -0
  107. {modal-0.73.141 → modal-0.73.143}/modal/experimental/ipython.py +0 -0
  108. {modal-0.73.141 → modal-0.73.143}/modal/file_io.py +0 -0
  109. {modal-0.73.141 → modal-0.73.143}/modal/file_io.pyi +0 -0
  110. {modal-0.73.141 → modal-0.73.143}/modal/file_pattern_matcher.py +0 -0
  111. {modal-0.73.141 → modal-0.73.143}/modal/functions.py +0 -0
  112. {modal-0.73.141 → modal-0.73.143}/modal/gpu.py +0 -0
  113. {modal-0.73.141 → modal-0.73.143}/modal/image.py +0 -0
  114. {modal-0.73.141 → modal-0.73.143}/modal/image.pyi +0 -0
  115. {modal-0.73.141 → modal-0.73.143}/modal/io_streams.py +0 -0
  116. {modal-0.73.141 → modal-0.73.143}/modal/io_streams.pyi +0 -0
  117. {modal-0.73.141 → modal-0.73.143}/modal/mount.py +0 -0
  118. {modal-0.73.141 → modal-0.73.143}/modal/mount.pyi +0 -0
  119. {modal-0.73.141 → modal-0.73.143}/modal/network_file_system.py +0 -0
  120. {modal-0.73.141 → modal-0.73.143}/modal/network_file_system.pyi +0 -0
  121. {modal-0.73.141 → modal-0.73.143}/modal/object.py +0 -0
  122. {modal-0.73.141 → modal-0.73.143}/modal/object.pyi +0 -0
  123. {modal-0.73.141 → modal-0.73.143}/modal/output.py +0 -0
  124. {modal-0.73.141 → modal-0.73.143}/modal/partial_function.py +0 -0
  125. {modal-0.73.141 → modal-0.73.143}/modal/partial_function.pyi +0 -0
  126. {modal-0.73.141 → modal-0.73.143}/modal/proxy.py +0 -0
  127. {modal-0.73.141 → modal-0.73.143}/modal/proxy.pyi +0 -0
  128. {modal-0.73.141 → modal-0.73.143}/modal/py.typed +0 -0
  129. {modal-0.73.141 → modal-0.73.143}/modal/queue.py +0 -0
  130. {modal-0.73.141 → modal-0.73.143}/modal/queue.pyi +0 -0
  131. {modal-0.73.141 → modal-0.73.143}/modal/requirements/2023.12.312.txt +0 -0
  132. {modal-0.73.141 → modal-0.73.143}/modal/requirements/2023.12.txt +0 -0
  133. {modal-0.73.141 → modal-0.73.143}/modal/requirements/2024.04.txt +0 -0
  134. {modal-0.73.141 → modal-0.73.143}/modal/requirements/2024.10.txt +0 -0
  135. {modal-0.73.141 → modal-0.73.143}/modal/requirements/PREVIEW.txt +0 -0
  136. {modal-0.73.141 → modal-0.73.143}/modal/requirements/README.md +0 -0
  137. {modal-0.73.141 → modal-0.73.143}/modal/requirements/base-images.json +0 -0
  138. {modal-0.73.141 → modal-0.73.143}/modal/retries.py +0 -0
  139. {modal-0.73.141 → modal-0.73.143}/modal/runner.py +0 -0
  140. {modal-0.73.141 → modal-0.73.143}/modal/runner.pyi +0 -0
  141. {modal-0.73.141 → modal-0.73.143}/modal/running_app.py +0 -0
  142. {modal-0.73.141 → modal-0.73.143}/modal/sandbox.py +0 -0
  143. {modal-0.73.141 → modal-0.73.143}/modal/sandbox.pyi +0 -0
  144. {modal-0.73.141 → modal-0.73.143}/modal/schedule.py +0 -0
  145. {modal-0.73.141 → modal-0.73.143}/modal/scheduler_placement.py +0 -0
  146. {modal-0.73.141 → modal-0.73.143}/modal/secret.py +0 -0
  147. {modal-0.73.141 → modal-0.73.143}/modal/secret.pyi +0 -0
  148. {modal-0.73.141 → modal-0.73.143}/modal/serving.py +0 -0
  149. {modal-0.73.141 → modal-0.73.143}/modal/serving.pyi +0 -0
  150. {modal-0.73.141 → modal-0.73.143}/modal/snapshot.py +0 -0
  151. {modal-0.73.141 → modal-0.73.143}/modal/snapshot.pyi +0 -0
  152. {modal-0.73.141 → modal-0.73.143}/modal/stream_type.py +0 -0
  153. {modal-0.73.141 → modal-0.73.143}/modal/token_flow.py +0 -0
  154. {modal-0.73.141 → modal-0.73.143}/modal/token_flow.pyi +0 -0
  155. {modal-0.73.141 → modal-0.73.143}/modal/volume.py +0 -0
  156. {modal-0.73.141 → modal-0.73.143}/modal/volume.pyi +0 -0
  157. {modal-0.73.141 → modal-0.73.143}/modal.egg-info/SOURCES.txt +0 -0
  158. {modal-0.73.141 → modal-0.73.143}/modal.egg-info/dependency_links.txt +0 -0
  159. {modal-0.73.141 → modal-0.73.143}/modal.egg-info/entry_points.txt +0 -0
  160. {modal-0.73.141 → modal-0.73.143}/modal.egg-info/requires.txt +0 -0
  161. {modal-0.73.141 → modal-0.73.143}/modal.egg-info/top_level.txt +0 -0
  162. {modal-0.73.141 → modal-0.73.143}/modal_docs/__init__.py +0 -0
  163. {modal-0.73.141 → modal-0.73.143}/modal_docs/gen_cli_docs.py +0 -0
  164. {modal-0.73.141 → modal-0.73.143}/modal_docs/gen_reference_docs.py +0 -0
  165. {modal-0.73.141 → modal-0.73.143}/modal_docs/mdmd/__init__.py +0 -0
  166. {modal-0.73.141 → modal-0.73.143}/modal_docs/mdmd/mdmd.py +0 -0
  167. {modal-0.73.141 → modal-0.73.143}/modal_docs/mdmd/signatures.py +0 -0
  168. {modal-0.73.141 → modal-0.73.143}/modal_proto/__init__.py +0 -0
  169. {modal-0.73.141 → modal-0.73.143}/modal_proto/api_grpc.py +0 -0
  170. {modal-0.73.141 → modal-0.73.143}/modal_proto/api_pb2_grpc.py +0 -0
  171. {modal-0.73.141 → modal-0.73.143}/modal_proto/api_pb2_grpc.pyi +0 -0
  172. {modal-0.73.141 → modal-0.73.143}/modal_proto/modal_api_grpc.py +0 -0
  173. {modal-0.73.141 → modal-0.73.143}/modal_proto/modal_options_grpc.py +0 -0
  174. {modal-0.73.141 → modal-0.73.143}/modal_proto/options.proto +0 -0
  175. {modal-0.73.141 → modal-0.73.143}/modal_proto/options_grpc.py +0 -0
  176. {modal-0.73.141 → modal-0.73.143}/modal_proto/options_pb2.py +0 -0
  177. {modal-0.73.141 → modal-0.73.143}/modal_proto/options_pb2.pyi +0 -0
  178. {modal-0.73.141 → modal-0.73.143}/modal_proto/options_pb2_grpc.py +0 -0
  179. {modal-0.73.141 → modal-0.73.143}/modal_proto/options_pb2_grpc.pyi +0 -0
  180. {modal-0.73.141 → modal-0.73.143}/modal_proto/py.typed +0 -0
  181. {modal-0.73.141 → modal-0.73.143}/modal_version/__init__.py +0 -0
  182. {modal-0.73.141 → modal-0.73.143}/modal_version/__main__.py +0 -0
  183. {modal-0.73.141 → modal-0.73.143}/pyproject.toml +0 -0
  184. {modal-0.73.141 → modal-0.73.143}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: modal
3
- Version: 0.73.141
3
+ Version: 0.73.143
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -31,7 +31,7 @@ class _Client:
31
31
  server_url: str,
32
32
  client_type: int,
33
33
  credentials: typing.Optional[tuple[str, str]],
34
- version: str = "0.73.141",
34
+ version: str = "0.73.143",
35
35
  ): ...
36
36
  def is_closed(self) -> bool: ...
37
37
  @property
@@ -93,7 +93,7 @@ class Client:
93
93
  server_url: str,
94
94
  client_type: int,
95
95
  credentials: typing.Optional[tuple[str, str]],
96
- version: str = "0.73.141",
96
+ version: str = "0.73.143",
97
97
  ): ...
98
98
  def is_closed(self) -> bool: ...
99
99
  @property
@@ -199,11 +199,11 @@ class Function(
199
199
 
200
200
  _call_generator_nowait: ___call_generator_nowait_spec[typing_extensions.Self]
201
201
 
202
- class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
202
+ class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
203
203
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
204
204
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
205
205
 
206
- remote: __remote_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
206
+ remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
207
207
 
208
208
  class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
209
209
  def __call__(self, *args, **kwargs) -> typing.Generator[typing.Any, None, None]: ...
@@ -218,19 +218,19 @@ class Function(
218
218
  self, *args: modal._functions.P.args, **kwargs: modal._functions.P.kwargs
219
219
  ) -> modal._functions.OriginalReturnType: ...
220
220
 
221
- class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
221
+ class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
222
222
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
223
223
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
224
224
 
225
225
  _experimental_spawn: ___experimental_spawn_spec[
226
- modal._functions.P, modal._functions.ReturnType, typing_extensions.Self
226
+ modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
227
227
  ]
228
228
 
229
- class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
229
+ class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
230
230
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
231
231
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
232
232
 
233
- spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
233
+ spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
234
234
 
235
235
  def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]: ...
236
236
 
@@ -70,10 +70,7 @@ class _OutputValue:
70
70
  value: Any
71
71
 
72
72
 
73
- # maximum number of inputs that can be in progress (either queued to be sent,
74
- # or waiting for completion). if this limit is reached, we will block sending
75
- # more inputs to the server until some of the existing inputs are completed.
76
- MAP_MAX_INPUTS_OUTSTANDING = 1000
73
+ MAX_INPUTS_OUTSTANDING_DEFAULT = 1000
77
74
 
78
75
  # maximum number of inputs to send to the server in a single request
79
76
  MAP_INVOCATION_CHUNK_SIZE = 49
@@ -105,6 +102,9 @@ async def _map_invocation(
105
102
  function_call_jwt = response.function_call_jwt
106
103
  retry_policy = response.retry_policy
107
104
  sync_client_retries_enabled = response.sync_client_retries_enabled
105
+ # The server should always send a value back for max_inputs_outstanding.
106
+ # Falling back to a default just in case something very unexpected happens.
107
+ max_inputs_outstanding = response.max_inputs_outstanding or MAX_INPUTS_OUTSTANDING_DEFAULT
108
108
 
109
109
  have_all_inputs = False
110
110
  inputs_created = 0
@@ -127,7 +127,7 @@ async def _map_invocation(
127
127
  completed_outputs: set[str] = set() # Set of input_ids whose outputs are complete (expecting no more values)
128
128
  input_queue: asyncio.Queue[api_pb2.FunctionPutInputsItem | None] = asyncio.Queue()
129
129
  map_items_manager = _MapItemsManager(
130
- retry_policy, function_call_invocation_type, retry_queue, sync_client_retries_enabled
130
+ retry_policy, function_call_invocation_type, retry_queue, sync_client_retries_enabled, max_inputs_outstanding
131
131
  )
132
132
 
133
133
  async def create_input(argskwargs):
@@ -700,13 +700,17 @@ class _MapItemsManager:
700
700
  retry_policy: api_pb2.FunctionRetryPolicy,
701
701
  function_call_invocation_type: "api_pb2.FunctionCallInvocationType.ValueType",
702
702
  retry_queue: TimestampPriorityQueue,
703
- sync_client_retries_enabled: bool
703
+ sync_client_retries_enabled: bool,
704
+ max_inputs_outstanding: int
705
+
704
706
  ):
705
707
  self._retry_policy = retry_policy
706
708
  self.function_call_invocation_type = function_call_invocation_type
707
709
  self._retry_queue = retry_queue
708
- # semaphore to limit the number of inputs that can be in progress at once
709
- self._inputs_outstanding = asyncio.BoundedSemaphore(MAP_MAX_INPUTS_OUTSTANDING)
710
+ # semaphore to control the maximum number of inputs that can be in progress (either queued to be sent,
711
+ # or waiting for completion). if this limit is reached, we will block sending more inputs to the server
712
+ # until some of the existing inputs are completed.
713
+ self._inputs_outstanding = asyncio.BoundedSemaphore(max_inputs_outstanding)
710
714
  self._item_context: dict[int, _MapItemContext] = {}
711
715
  self._sync_client_retries_enabled = sync_client_retries_enabled
712
716
 
@@ -138,6 +138,7 @@ class _MapItemsManager:
138
138
  function_call_invocation_type: int,
139
139
  retry_queue: modal._utils.async_utils.TimestampPriorityQueue,
140
140
  sync_client_retries_enabled: bool,
141
+ max_inputs_outstanding: int,
141
142
  ): ...
142
143
  async def add_items(self, items: list[modal_proto.api_pb2.FunctionPutInputsItem]): ...
143
144
  async def prepare_items_for_retry(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: modal
3
- Version: 0.73.141
3
+ Version: 0.73.143
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -1619,6 +1619,7 @@ message FunctionMapResponse {
1619
1619
  FunctionRetryPolicy retry_policy = 3;
1620
1620
  string function_call_jwt = 4;
1621
1621
  bool sync_client_retries_enabled = 5;
1622
+ uint32 max_inputs_outstanding = 6;
1622
1623
  }
1623
1624
 
1624
1625
  message FunctionOptions {