modal 1.1.4.dev18__py3-none-any.whl → 1.1.4.dev20__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.
- modal/_runtime/asgi.py +1 -1
- modal/client.pyi +2 -2
- modal/parallel_map.py +15 -4
- modal/parallel_map.pyi +1 -0
- {modal-1.1.4.dev18.dist-info → modal-1.1.4.dev20.dist-info}/METADATA +1 -1
- {modal-1.1.4.dev18.dist-info → modal-1.1.4.dev20.dist-info}/RECORD +11 -11
- modal_version/__init__.py +1 -1
- {modal-1.1.4.dev18.dist-info → modal-1.1.4.dev20.dist-info}/WHEEL +0 -0
- {modal-1.1.4.dev18.dist-info → modal-1.1.4.dev20.dist-info}/entry_points.txt +0 -0
- {modal-1.1.4.dev18.dist-info → modal-1.1.4.dev20.dist-info}/licenses/LICENSE +0 -0
- {modal-1.1.4.dev18.dist-info → modal-1.1.4.dev20.dist-info}/top_level.txt +0 -0
modal/_runtime/asgi.py
CHANGED
@@ -120,7 +120,7 @@ def asgi_app_wrapper(asgi_app, container_io_manager) -> tuple[Callable[..., Asyn
|
|
120
120
|
|
121
121
|
async def handle_first_input_timeout():
|
122
122
|
if scope["type"] == "http":
|
123
|
-
await messages_from_app.put({"type": "http.response.start", "status":
|
123
|
+
await messages_from_app.put({"type": "http.response.start", "status": 408})
|
124
124
|
await messages_from_app.put(
|
125
125
|
{
|
126
126
|
"type": "http.response.body",
|
modal/client.pyi
CHANGED
@@ -33,7 +33,7 @@ class _Client:
|
|
33
33
|
server_url: str,
|
34
34
|
client_type: int,
|
35
35
|
credentials: typing.Optional[tuple[str, str]],
|
36
|
-
version: str = "1.1.4.
|
36
|
+
version: str = "1.1.4.dev20",
|
37
37
|
):
|
38
38
|
"""mdmd:hidden
|
39
39
|
The Modal client object is not intended to be instantiated directly by users.
|
@@ -164,7 +164,7 @@ class Client:
|
|
164
164
|
server_url: str,
|
165
165
|
client_type: int,
|
166
166
|
credentials: typing.Optional[tuple[str, str]],
|
167
|
-
version: str = "1.1.4.
|
167
|
+
version: str = "1.1.4.dev20",
|
168
168
|
):
|
169
169
|
"""mdmd:hidden
|
170
170
|
The Modal client object is not intended to be instantiated directly by users.
|
modal/parallel_map.py
CHANGED
@@ -79,8 +79,10 @@ class _OutputValue:
|
|
79
79
|
|
80
80
|
MAX_INPUTS_OUTSTANDING_DEFAULT = 1000
|
81
81
|
|
82
|
-
#
|
82
|
+
# Maximum number of inputs to send to the server per FunctionPutInputs request
|
83
83
|
MAP_INVOCATION_CHUNK_SIZE = 49
|
84
|
+
SPAWN_MAP_INVOCATION_CHUNK_SIZE = 512
|
85
|
+
|
84
86
|
|
85
87
|
if typing.TYPE_CHECKING:
|
86
88
|
import modal.functions
|
@@ -159,6 +161,7 @@ class InputPumper:
|
|
159
161
|
input_queue: asyncio.Queue,
|
160
162
|
function: "modal.functions._Function",
|
161
163
|
function_call_id: str,
|
164
|
+
max_batch_size: int,
|
162
165
|
map_items_manager: Optional["_MapItemsManager"] = None,
|
163
166
|
):
|
164
167
|
self.client = client
|
@@ -167,10 +170,11 @@ class InputPumper:
|
|
167
170
|
self.input_queue = input_queue
|
168
171
|
self.inputs_sent = 0
|
169
172
|
self.function_call_id = function_call_id
|
173
|
+
self.max_batch_size = max_batch_size
|
170
174
|
|
171
175
|
async def pump_inputs(self):
|
172
176
|
assert self.client.stub
|
173
|
-
async for items in queue_batch_iterator(self.input_queue, max_batch_size=
|
177
|
+
async for items in queue_batch_iterator(self.input_queue, max_batch_size=self.max_batch_size):
|
174
178
|
# Add items to the manager. Their state will be SENDING.
|
175
179
|
if self.map_items_manager is not None:
|
176
180
|
await self.map_items_manager.add_items(items)
|
@@ -234,6 +238,7 @@ class SyncInputPumper(InputPumper):
|
|
234
238
|
input_queue=input_queue,
|
235
239
|
function=function,
|
236
240
|
function_call_id=function_call_id,
|
241
|
+
max_batch_size=MAP_INVOCATION_CHUNK_SIZE,
|
237
242
|
map_items_manager=map_items_manager,
|
238
243
|
)
|
239
244
|
self.retry_queue = retry_queue
|
@@ -241,7 +246,7 @@ class SyncInputPumper(InputPumper):
|
|
241
246
|
self.function_call_jwt = function_call_jwt
|
242
247
|
|
243
248
|
async def retry_inputs(self):
|
244
|
-
async for retriable_idxs in queue_batch_iterator(self.retry_queue, max_batch_size=
|
249
|
+
async for retriable_idxs in queue_batch_iterator(self.retry_queue, max_batch_size=self.max_batch_size):
|
245
250
|
# For each index, use the context in the manager to create a FunctionRetryInputsItem.
|
246
251
|
# This will also update the context state to RETRYING.
|
247
252
|
inputs: list[api_pb2.FunctionRetryInputsItem] = await self.map_items_manager.prepare_items_for_retry(
|
@@ -269,7 +274,13 @@ class AsyncInputPumper(InputPumper):
|
|
269
274
|
function: "modal.functions._Function",
|
270
275
|
function_call_id: str,
|
271
276
|
):
|
272
|
-
super().__init__(
|
277
|
+
super().__init__(
|
278
|
+
client,
|
279
|
+
input_queue=input_queue,
|
280
|
+
function=function,
|
281
|
+
function_call_id=function_call_id,
|
282
|
+
max_batch_size=SPAWN_MAP_INVOCATION_CHUNK_SIZE,
|
283
|
+
)
|
273
284
|
|
274
285
|
async def pump_inputs(self):
|
275
286
|
async for _ in super().pump_inputs():
|
modal/parallel_map.pyi
CHANGED
@@ -89,6 +89,7 @@ class InputPumper:
|
|
89
89
|
input_queue: asyncio.queues.Queue,
|
90
90
|
function: modal._functions._Function,
|
91
91
|
function_call_id: str,
|
92
|
+
max_batch_size: int,
|
92
93
|
map_items_manager: typing.Optional[_MapItemsManager] = None,
|
93
94
|
):
|
94
95
|
"""Initialize self. See help(type(self)) for accurate signature."""
|
@@ -22,7 +22,7 @@ modal/app.py,sha256=hJU3DGzP5GwYRmBj57XajljkQtLxkKftxXih2TYRcKo,48047
|
|
22
22
|
modal/app.pyi,sha256=0U2xVKD3yfHe5l2bcihTDjPl__tzOvx1AIYOTebu-5o,43375
|
23
23
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
24
24
|
modal/client.py,sha256=kyAIVB3Ay-XKJizQ_1ufUFB__EagV0MLmHJpyYyJ7J0,18636
|
25
|
-
modal/client.pyi,sha256=
|
25
|
+
modal/client.pyi,sha256=KMT-SGcnipIapSAuDduFuIVVEhSbkWl0XVG9NXb3jpc,15831
|
26
26
|
modal/cloud_bucket_mount.py,sha256=YOe9nnvSr4ZbeCn587d7_VhE9IioZYRvF9VYQTQux08,5914
|
27
27
|
modal/cloud_bucket_mount.pyi,sha256=-qSfYAQvIoO_l2wsCCGTG5ZUwQieNKXdAO00yP1-LYU,7394
|
28
28
|
modal/cls.py,sha256=pTEO7pHjlO7taMbIqs4oI9ZZgKDJpVKyGkO5ZT0w6tQ,40934
|
@@ -52,8 +52,8 @@ modal/network_file_system.pyi,sha256=Td_IobHr84iLo_9LZKQ4tNdUB60yjX8QWBaFiUvhfi8
|
|
52
52
|
modal/object.py,sha256=bTeskuY8JFrESjU4_UL_nTwYlBQdOLmVaOX3X6EMxsg,164
|
53
53
|
modal/object.pyi,sha256=qlyVVMezW3XgJe_iqhtzWRSki3Nuk-KrpXc1g-r8ujA,6944
|
54
54
|
modal/output.py,sha256=q4T9uHduunj4NwY-YSwkHGgjZlCXMuJbfQ5UFaAGRAc,1968
|
55
|
-
modal/parallel_map.py,sha256=
|
56
|
-
modal/parallel_map.pyi,sha256=
|
55
|
+
modal/parallel_map.py,sha256=I2GADci-u1G_r7CxFzL11C0c3P4Tf_Jb3f_XCp4p_WI,69293
|
56
|
+
modal/parallel_map.pyi,sha256=NZrtfZljig59hcMKU7Cz8lYZZFOiwK9l7oWrBtX6Oy8,15838
|
57
57
|
modal/partial_function.py,sha256=aIdlGfTjjgqY6Fpr-biCjvRU9W542_S5N2xkNN_rYGM,1127
|
58
58
|
modal/partial_function.pyi,sha256=lqqOzZ9-QvHTDWKQ_oAYYOvsXgTOBKhO9u-RI98JbUk,13986
|
59
59
|
modal/proxy.py,sha256=CQydu_NPDgApN2GLdd7rrcg8PM-pXyFdVYcTaGMBRCQ,1491
|
@@ -81,7 +81,7 @@ modal/token_flow.pyi,sha256=eirYjyqbRiT3GCKMIPHJPpkvBTu8WxDKqSHehWaJI_4,2533
|
|
81
81
|
modal/volume.py,sha256=bPC8632-LyeLOjJu2fKOFyod0QG7Hd5bb-UIJ5syCjo,53303
|
82
82
|
modal/volume.pyi,sha256=5VppIgoqoJqpivESYt5_oWgVTL__zlmpNZkOPk43JF8,54443
|
83
83
|
modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
84
|
-
modal/_runtime/asgi.py,sha256=
|
84
|
+
modal/_runtime/asgi.py,sha256=AOcduIlijmlxhXVWo7AIUhigo-bqm6nDkHj4Q4JLy6o,22607
|
85
85
|
modal/_runtime/container_io_manager.py,sha256=iiFxPfnJjnZd_l2Aj5TCR_O1dQwBcrvHccq0LSIJGZY,45719
|
86
86
|
modal/_runtime/container_io_manager.pyi,sha256=pcGX7wUdidc2IO3eWOnsEgl9N8e8HG3yFIItXL6JgJI,23626
|
87
87
|
modal/_runtime/execution_context.py,sha256=AYrNQRHHXEqX2MwMf8zxelKZnYf25RE_B-NRLWf93n8,3521
|
@@ -153,7 +153,7 @@ modal/experimental/__init__.py,sha256=dPBPpxsmjZMLF3YjRrXoTvT01pl65wxi4UdFZsOem3
|
|
153
153
|
modal/experimental/flash.py,sha256=gydlThBSPgS8HA53Lwi0gUAFVtpdXu20IYAQXJSoTP0,21092
|
154
154
|
modal/experimental/flash.pyi,sha256=A8_qJGtGoXEzKDdHbvhmCw7oqfneFEvJQK3ZdTOvUdU,10830
|
155
155
|
modal/experimental/ipython.py,sha256=TrCfmol9LGsRZMeDoeMPx3Hv3BFqQhYnmD_iH0pqdhk,2904
|
156
|
-
modal-1.1.4.
|
156
|
+
modal-1.1.4.dev20.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
157
157
|
modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
158
158
|
modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
|
159
159
|
modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
|
@@ -176,10 +176,10 @@ modal_proto/options_pb2.pyi,sha256=l7DBrbLO7q3Ir-XDkWsajm0d0TQqqrfuX54i4BMpdQg,1
|
|
176
176
|
modal_proto/options_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
177
177
|
modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0yJSI,247
|
178
178
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
179
|
-
modal_version/__init__.py,sha256=
|
179
|
+
modal_version/__init__.py,sha256=w_Tz_F5sHgV9HsECtzgw9BPw3GHFLTMrCG7tSOUN46M,121
|
180
180
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
181
|
-
modal-1.1.4.
|
182
|
-
modal-1.1.4.
|
183
|
-
modal-1.1.4.
|
184
|
-
modal-1.1.4.
|
185
|
-
modal-1.1.4.
|
181
|
+
modal-1.1.4.dev20.dist-info/METADATA,sha256=2GIiC2AZ0xCNgGAUODslpNixcZYLFplt6onrRCBjKRo,2460
|
182
|
+
modal-1.1.4.dev20.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
183
|
+
modal-1.1.4.dev20.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
184
|
+
modal-1.1.4.dev20.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
185
|
+
modal-1.1.4.dev20.dist-info/RECORD,,
|
modal_version/__init__.py
CHANGED
File without changes
|
File without changes
|
File without changes
|
File without changes
|