modal 1.1.2.dev43__py3-none-any.whl → 1.1.3__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/queue.pyi CHANGED
@@ -64,6 +64,8 @@ class _QueueManager:
64
64
 
65
65
  Note that this method does not return a local instance of the Queue. You can use
66
66
  `modal.Queue.from_name` to perform a lookup after creation.
67
+
68
+ Added in v1.1.2.
67
69
  """
68
70
  ...
69
71
 
@@ -96,6 +98,8 @@ class _QueueManager:
96
98
  ```python
97
99
  queues = modal.Queue.objects.list(max_objects=10, created_before="2025-01-01")
98
100
  ```
101
+
102
+ Added in v1.1.2.
99
103
  """
100
104
  ...
101
105
 
@@ -123,6 +127,8 @@ class _QueueManager:
123
127
  ```python notest
124
128
  await modal.Queue.objects.delete("my-queue", environment_name="dev")
125
129
  ```
130
+
131
+ Added in v1.1.2.
126
132
  """
127
133
  ...
128
134
 
@@ -165,6 +171,8 @@ class QueueManager:
165
171
 
166
172
  Note that this method does not return a local instance of the Queue. You can use
167
173
  `modal.Queue.from_name` to perform a lookup after creation.
174
+
175
+ Added in v1.1.2.
168
176
  """
169
177
  ...
170
178
 
@@ -200,6 +208,8 @@ class QueueManager:
200
208
 
201
209
  Note that this method does not return a local instance of the Queue. You can use
202
210
  `modal.Queue.from_name` to perform a lookup after creation.
211
+
212
+ Added in v1.1.2.
203
213
  """
204
214
  ...
205
215
 
@@ -236,6 +246,8 @@ class QueueManager:
236
246
  ```python
237
247
  queues = modal.Queue.objects.list(max_objects=10, created_before="2025-01-01")
238
248
  ```
249
+
250
+ Added in v1.1.2.
239
251
  """
240
252
  ...
241
253
 
@@ -269,6 +281,8 @@ class QueueManager:
269
281
  ```python
270
282
  queues = modal.Queue.objects.list(max_objects=10, created_before="2025-01-01")
271
283
  ```
284
+
285
+ Added in v1.1.2.
272
286
  """
273
287
  ...
274
288
 
@@ -300,6 +314,8 @@ class QueueManager:
300
314
  ```python notest
301
315
  await modal.Queue.objects.delete("my-queue", environment_name="dev")
302
316
  ```
317
+
318
+ Added in v1.1.2.
303
319
  """
304
320
  ...
305
321
 
@@ -328,6 +344,8 @@ class QueueManager:
328
344
  ```python notest
329
345
  await modal.Queue.objects.delete("my-queue", environment_name="dev")
330
346
  ```
347
+
348
+ Added in v1.1.2.
331
349
  """
332
350
  ...
333
351
 
modal/secret.py CHANGED
@@ -74,6 +74,8 @@ class _SecretManager:
74
74
  Note that this method does not return a local instance of the Secret. You can use
75
75
  `modal.Secret.from_name` to perform a lookup after creation.
76
76
 
77
+ Added in v1.1.2.
78
+
77
79
  """
78
80
  check_object_name(name, "Secret")
79
81
  client = await _Client.from_env() if client is None else client
@@ -126,6 +128,8 @@ class _SecretManager:
126
128
  secrets = modal.Secret.objects.list(max_objects=10, created_before="2025-01-01")
127
129
  ```
128
130
 
131
+ Added in v1.1.2.
132
+
129
133
  """
130
134
  client = await _Client.from_env() if client is None else client
131
135
  if max_objects is not None and max_objects < 0:
@@ -185,6 +189,9 @@ class _SecretManager:
185
189
  ```python notest
186
190
  await modal.Secret.objects.delete("my-secret", environment_name="dev")
187
191
  ```
192
+
193
+ Added in v1.1.2.
194
+
188
195
  """
189
196
  try:
190
197
  obj = await _Secret.from_name(name, environment_name=environment_name).hydrate(client)
modal/secret.pyi CHANGED
@@ -65,6 +65,8 @@ class _SecretManager:
65
65
 
66
66
  Note that this method does not return a local instance of the Secret. You can use
67
67
  `modal.Secret.from_name` to perform a lookup after creation.
68
+
69
+ Added in v1.1.2.
68
70
  """
69
71
  ...
70
72
 
@@ -97,6 +99,8 @@ class _SecretManager:
97
99
  ```python
98
100
  secrets = modal.Secret.objects.list(max_objects=10, created_before="2025-01-01")
99
101
  ```
102
+
103
+ Added in v1.1.2.
100
104
  """
101
105
  ...
102
106
 
@@ -123,6 +127,8 @@ class _SecretManager:
123
127
  ```python notest
124
128
  await modal.Secret.objects.delete("my-secret", environment_name="dev")
125
129
  ```
130
+
131
+ Added in v1.1.2.
126
132
  """
127
133
  ...
128
134
 
@@ -168,6 +174,8 @@ class SecretManager:
168
174
 
169
175
  Note that this method does not return a local instance of the Secret. You can use
170
176
  `modal.Secret.from_name` to perform a lookup after creation.
177
+
178
+ Added in v1.1.2.
171
179
  """
172
180
  ...
173
181
 
@@ -206,6 +214,8 @@ class SecretManager:
206
214
 
207
215
  Note that this method does not return a local instance of the Secret. You can use
208
216
  `modal.Secret.from_name` to perform a lookup after creation.
217
+
218
+ Added in v1.1.2.
209
219
  """
210
220
  ...
211
221
 
@@ -242,6 +252,8 @@ class SecretManager:
242
252
  ```python
243
253
  secrets = modal.Secret.objects.list(max_objects=10, created_before="2025-01-01")
244
254
  ```
255
+
256
+ Added in v1.1.2.
245
257
  """
246
258
  ...
247
259
 
@@ -275,6 +287,8 @@ class SecretManager:
275
287
  ```python
276
288
  secrets = modal.Secret.objects.list(max_objects=10, created_before="2025-01-01")
277
289
  ```
290
+
291
+ Added in v1.1.2.
278
292
  """
279
293
  ...
280
294
 
@@ -305,6 +319,8 @@ class SecretManager:
305
319
  ```python notest
306
320
  await modal.Secret.objects.delete("my-secret", environment_name="dev")
307
321
  ```
322
+
323
+ Added in v1.1.2.
308
324
  """
309
325
  ...
310
326
 
@@ -332,6 +348,8 @@ class SecretManager:
332
348
  ```python notest
333
349
  await modal.Secret.objects.delete("my-secret", environment_name="dev")
334
350
  ```
351
+
352
+ Added in v1.1.2.
335
353
  """
336
354
  ...
337
355
 
modal/volume.py CHANGED
@@ -139,6 +139,7 @@ class _VolumeManager:
139
139
  modal.Volume.objects.create("my-volume", environment_name="dev")
140
140
  ```
141
141
 
142
+ By default, an error will be raised if the Volume already exists, but passing
142
143
  `allow_existing=True` will make the creation attempt a no-op in this case.
143
144
 
144
145
  ```python notest
@@ -148,6 +149,8 @@ class _VolumeManager:
148
149
  Note that this method does not return a local instance of the Volume. You can use
149
150
  `modal.Volume.from_name` to perform a lookup after creation.
150
151
 
152
+ Added in v1.1.2.
153
+
151
154
  """
152
155
  check_object_name(name, "Volume")
153
156
  client = await _Client.from_env() if client is None else client
@@ -204,6 +207,8 @@ class _VolumeManager:
204
207
  volumes = modal.Volume.objects.list(max_objects=10, created_before="2025-01-01")
205
208
  ```
206
209
 
210
+ Added in v1.1.2.
211
+
207
212
  """
208
213
  client = await _Client.from_env() if client is None else client
209
214
  if max_objects is not None and max_objects < 0:
@@ -264,6 +269,9 @@ class _VolumeManager:
264
269
  ```python notest
265
270
  await modal.Volume.objects.delete("my-volume", environment_name="dev")
266
271
  ```
272
+
273
+ Added in v1.1.2.
274
+
267
275
  """
268
276
  try:
269
277
  obj = await _Volume.from_name(name, environment_name=environment_name).hydrate(client)
@@ -685,6 +693,7 @@ class _Volume(_Object, type_prefix="vo"):
685
693
  except modal.exception.NotFoundError as exc:
686
694
  raise FileNotFoundError(exc.args[0])
687
695
 
696
+ @retry(n_attempts=5, base_delay=0.1, timeout=None)
688
697
  async def read_block(block_url: str) -> bytes:
689
698
  async with ClientSessionRegistry.get_session().get(block_url) as get_response:
690
699
  return await get_response.content.read()
@@ -724,6 +733,7 @@ class _Volume(_Object, type_prefix="vo"):
724
733
  write_lock = asyncio.Lock()
725
734
  start_pos = fileobj.tell()
726
735
 
736
+ @retry(n_attempts=5, base_delay=0.1, timeout=None)
727
737
  async def download_block(idx, url) -> int:
728
738
  block_start_pos = start_pos + idx * BLOCK_SIZE
729
739
  num_bytes_written = 0
modal/volume.pyi CHANGED
@@ -105,6 +105,7 @@ class _VolumeManager:
105
105
  modal.Volume.objects.create("my-volume", environment_name="dev")
106
106
  ```
107
107
 
108
+ By default, an error will be raised if the Volume already exists, but passing
108
109
  `allow_existing=True` will make the creation attempt a no-op in this case.
109
110
 
110
111
  ```python notest
@@ -113,6 +114,8 @@ class _VolumeManager:
113
114
 
114
115
  Note that this method does not return a local instance of the Volume. You can use
115
116
  `modal.Volume.from_name` to perform a lookup after creation.
117
+
118
+ Added in v1.1.2.
116
119
  """
117
120
  ...
118
121
 
@@ -145,6 +148,8 @@ class _VolumeManager:
145
148
  ```python
146
149
  volumes = modal.Volume.objects.list(max_objects=10, created_before="2025-01-01")
147
150
  ```
151
+
152
+ Added in v1.1.2.
148
153
  """
149
154
  ...
150
155
 
@@ -172,6 +177,8 @@ class _VolumeManager:
172
177
  ```python notest
173
178
  await modal.Volume.objects.delete("my-volume", environment_name="dev")
174
179
  ```
180
+
181
+ Added in v1.1.2.
175
182
  """
176
183
  ...
177
184
 
@@ -206,6 +213,7 @@ class VolumeManager:
206
213
  modal.Volume.objects.create("my-volume", environment_name="dev")
207
214
  ```
208
215
 
216
+ By default, an error will be raised if the Volume already exists, but passing
209
217
  `allow_existing=True` will make the creation attempt a no-op in this case.
210
218
 
211
219
  ```python notest
@@ -214,6 +222,8 @@ class VolumeManager:
214
222
 
215
223
  Note that this method does not return a local instance of the Volume. You can use
216
224
  `modal.Volume.from_name` to perform a lookup after creation.
225
+
226
+ Added in v1.1.2.
217
227
  """
218
228
  ...
219
229
 
@@ -241,6 +251,7 @@ class VolumeManager:
241
251
  modal.Volume.objects.create("my-volume", environment_name="dev")
242
252
  ```
243
253
 
254
+ By default, an error will be raised if the Volume already exists, but passing
244
255
  `allow_existing=True` will make the creation attempt a no-op in this case.
245
256
 
246
257
  ```python notest
@@ -249,6 +260,8 @@ class VolumeManager:
249
260
 
250
261
  Note that this method does not return a local instance of the Volume. You can use
251
262
  `modal.Volume.from_name` to perform a lookup after creation.
263
+
264
+ Added in v1.1.2.
252
265
  """
253
266
  ...
254
267
 
@@ -285,6 +298,8 @@ class VolumeManager:
285
298
  ```python
286
299
  volumes = modal.Volume.objects.list(max_objects=10, created_before="2025-01-01")
287
300
  ```
301
+
302
+ Added in v1.1.2.
288
303
  """
289
304
  ...
290
305
 
@@ -318,6 +333,8 @@ class VolumeManager:
318
333
  ```python
319
334
  volumes = modal.Volume.objects.list(max_objects=10, created_before="2025-01-01")
320
335
  ```
336
+
337
+ Added in v1.1.2.
321
338
  """
322
339
  ...
323
340
 
@@ -349,6 +366,8 @@ class VolumeManager:
349
366
  ```python notest
350
367
  await modal.Volume.objects.delete("my-volume", environment_name="dev")
351
368
  ```
369
+
370
+ Added in v1.1.2.
352
371
  """
353
372
  ...
354
373
 
@@ -377,6 +396,8 @@ class VolumeManager:
377
396
  ```python notest
378
397
  await modal.Volume.objects.delete("my-volume", environment_name="dev")
379
398
  ```
399
+
400
+ Added in v1.1.2.
380
401
  """
381
402
  ...
382
403
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.1.2.dev43
3
+ Version: 1.1.3
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -3,7 +3,7 @@ modal/__main__.py,sha256=45H-GtwzaDfN-1nP4_HYvzN3s7AG_HXR4-ynrsjO_OI,2803
3
3
  modal/_clustered_functions.py,sha256=zmrKbptRbqp4euS3LWncKaLXb8Kjj4YreusOzpEpRMk,2856
4
4
  modal/_clustered_functions.pyi,sha256=_wtFjWocGf1WgI-qYBpbJPArNkg2H9JV7BVaGgMesEQ,1103
5
5
  modal/_container_entrypoint.py,sha256=a1HAQYh1gGpqHuhSw6AW7XDYHztbeYr5a8iNnfCnoks,29023
6
- modal/_functions.py,sha256=LHl1KJ8BSpFxPeG-iseC3l5N8N4MpbMXtdIyEocRD2E,85245
6
+ modal/_functions.py,sha256=wDpUpxX_K5lLRQQ5wJWq2E4UjBo9uEvuv9QSqfboplo,88890
7
7
  modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
8
8
  modal/_location.py,sha256=joiX-0ZeutEUDTrrqLF1GHXCdVLF-rHzstocbMcd_-k,366
9
9
  modal/_object.py,sha256=gwsLdXb-Ecd8nH8LVCo8oVZPzzdyo9BrN1DjgQmsSuM,11967
@@ -18,11 +18,11 @@ modal/_tunnel.py,sha256=zTBxBiuH1O22tS1OliAJdIsSmaZS8PlnifS_6S5z-mk,6320
18
18
  modal/_tunnel.pyi,sha256=rvC7USR2BcKkbZIeCJXwf7-UfGE-LPLjKsGNiK7Lxa4,13366
19
19
  modal/_type_manager.py,sha256=DWjgmjYJuOagw2erin506UUbG2H5UzZCFEekS-7hmfA,9087
20
20
  modal/_watcher.py,sha256=K6LYnlmSGQB4tWWI9JADv-tvSvQ1j522FwT71B51CX8,3584
21
- modal/app.py,sha256=RmoW5C7ZdJuv_BkV8waHPTbk7bROpWOynqkNyGrjEL0,48030
21
+ 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=Uj7GEIN3pTESbvS2BmQ_x-glr81bXyk8jMk4J8J99K4,15831
25
+ modal/client.pyi,sha256=mzkcDgf9oLXWMHNA6RzlK1quCnNjFr1ICBDpuUZ88oA,15753
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=1mBcExFrLDTZwkD3Dzu8F26_CL0CGktOV9pE60Y8g_E,40689
@@ -30,8 +30,8 @@ modal/cls.pyi,sha256=TevKBrBez2R0_4Epsx5GB5gyQX_kQV-uVHPxpqEokhQ,28357
30
30
  modal/config.py,sha256=tW-SEGjVvAt3D_MNi3LhxXnFKIA9fjLd3UIgbW8uSJE,12121
31
31
  modal/container_process.py,sha256=XkPwNIW-iD_GB9u9yqv9q8y-i5cQ8eBbLZZ_GvEw9t8,6858
32
32
  modal/container_process.pyi,sha256=9m-st3hCUlNN1GOTctfPPvIvoLtEl7FbuGWwif5-7YU,6037
33
- modal/dict.py,sha256=8zT0tCfpQiKFJWlG_Mm9vtLCklifcwCVwD8OnnESrtU,22597
34
- modal/dict.pyi,sha256=F9yxTgBjxLOy6boB3N4wc2BtnGIO1TARmyhpMBC8c80,33317
33
+ modal/dict.py,sha256=azL6WHOAR49OsqB33Rqyd1j9ljbbW7blHZDuRV8xPrA,22676
34
+ modal/dict.pyi,sha256=x0PxEqfC8wNGe5u4Y1GI5W1J0H51e3ZG9kHdYFRVLvQ,33575
35
35
  modal/environments.py,sha256=gHFNLG78bqgizpQ4w_elz27QOqmcgAonFsmLs7NjUJ4,6804
36
36
  modal/environments.pyi,sha256=9-KtrzAcUe55cCP4020lSUD7-fWS7OPakAHssq4-bro,4219
37
37
  modal/exception.py,sha256=o0V93PK8Hcg2YQ2aeOB1Y-qWBw4Gz5ATfyokR8GapuQ,5634
@@ -39,10 +39,10 @@ modal/file_io.py,sha256=OSKr77TujcXGJW1iikzYiHckLSmv07QBgBHcxxYEkoI,21456
39
39
  modal/file_io.pyi,sha256=xtO6Glf_BFwDE7QiQQo24QqcMf_Vv-iz7WojcGVlLBU,15932
40
40
  modal/file_pattern_matcher.py,sha256=A_Kdkej6q7YQyhM_2-BvpFmPqJ0oHb54B6yf9VqvPVE,8116
41
41
  modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
42
- modal/functions.pyi,sha256=JBl_Gr5wtxk38WMyb5EMNaq2AHRzOhZQkvWJDVFTIq4,37118
42
+ modal/functions.pyi,sha256=vXmQ5-tlrxSV8E8eI0yEF2HUeF0Bd6VyQVxMCW3SpBE,38890
43
43
  modal/gpu.py,sha256=Fe5ORvVPDIstSq1xjmM6OoNgLYFWvogP9r5BgmD3hYg,6769
44
- modal/image.py,sha256=9pSLEGMxwal55AY-hbL4eTf0lq3xMwuQ0mN-Gc3E99M,103134
45
- modal/image.pyi,sha256=zwCW80xe2BL7q4_kswfljKRrKjMkK5paTY26e5ITM1U,68507
44
+ modal/image.py,sha256=wEtojqiLDHSFinuIlAzCieGYPPAYh9iEBtY3wOSF6js,103236
45
+ modal/image.pyi,sha256=vdxGAddVYpQNqpxM-XSzKkTtrajD74Nelgt8-IB5RAU,68711
46
46
  modal/io_streams.py,sha256=ut9tY_yEtiBsgQ40u_72Ns87IZHfbMxfnh8t6U9RSGA,16204
47
47
  modal/io_streams.pyi,sha256=aOun_jUFKHSJyUY6-7gKvNoxzcULsa8_hxdtEO7v-gk,13980
48
48
  modal/mount.py,sha256=AObt5puO-jgtH5EtUfgAkz130bR-8Qvo5Am1_4tg3mE,37215
@@ -52,15 +52,15 @@ 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=Q2srzzDcwE5uWSSzA80_Y3NBUoCHUFAP2Ekz-Zi7jn0,67397
56
- modal/parallel_map.pyi,sha256=PTNIX3_KXLpEIGiFmZ5R5_G3a2toUvFdiUZVdSHa060,15417
55
+ modal/parallel_map.py,sha256=lgCtqWlBAfpVm0fw7RxoYnqTq9tDUZ6wtcPBakLRDzo,68544
56
+ modal/parallel_map.pyi,sha256=MjVotblObpEDRyKcMd2qFALC1emKpbC9Cdu-gkdewT4,15809
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
60
60
  modal/proxy.pyi,sha256=yWGWwADCRGrC2w81B7671UTH4Uv3HMZKy5vVqlJUZoA,1417
61
61
  modal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
- modal/queue.py,sha256=D1ROYl6N6Al5O7X-mB6URuuuWFOtx4I2kFNR2kzlTas,27054
63
- modal/queue.pyi,sha256=BEbAa9Fb77Z6Th644FhMnf3BvfLuoBuUz6iUVCkbD1k,39251
62
+ modal/queue.py,sha256=ooD_-z3gthje_kxBZQ_xDfwyTy_cxtyn5oM9wt2sXTo,27133
63
+ modal/queue.pyi,sha256=EJ6extEFKclbEUBXk-PuRJ4bkUYRwWgAAUNofQBbBmo,39509
64
64
  modal/retries.py,sha256=IvNLDM0f_GLUDD5VgEDoN09C88yoxSrCquinAuxT1Sc,5205
65
65
  modal/runner.py,sha256=ostdzYpQb-20tlD6dIq7bpWTkZkOhjJBNuMNektqnJA,24068
66
66
  modal/runner.pyi,sha256=lbwLljm1cC8d6PcNvmYQhkE8501V9fg0bYqqKX6G4r4,8489
@@ -69,8 +69,8 @@ modal/sandbox.py,sha256=O_vB-VgJ2ZMw2yyT2-ATYIWHdeDXCPf4cFcc-3JSB5Q,40895
69
69
  modal/sandbox.pyi,sha256=HoHgwb167i83qiGhUE7UAy79l45wqfXKfOA9hZ5HiEo,41572
70
70
  modal/schedule.py,sha256=ng0g0AqNY5GQI9KhkXZQ5Wam5G42glbkqVQsNpBtbDE,3078
71
71
  modal/scheduler_placement.py,sha256=BAREdOY5HzHpzSBqt6jDVR6YC_jYfHMVqOzkyqQfngU,1235
72
- modal/secret.py,sha256=syqkcgFtPUiMIv6m3aXjXeqzCyOaeovoDxHvkSRqVRA,19229
73
- modal/secret.pyi,sha256=JiWmFXu_YUjBdzVWctn7TQwVOj_qOSsQLRSUmQuaW34,21294
72
+ modal/secret.py,sha256=jcNJKc4ZB2nvAn7HJFawInqE-_7sbB43IWLZwyLBQ28,19308
73
+ modal/secret.pyi,sha256=7EzD7nZGSZHQR-Hf5aRi0ooZGxvy1-G8A4ul-M04Qs4,21552
74
74
  modal/serving.py,sha256=3I3WBeVbzZY258u9PXBCW_dZBgypq3OhwBuTVvlgubE,4423
75
75
  modal/serving.pyi,sha256=YfixTaWikyYpwhnNxCHMZnDDQiPmV1xJ87QF91U_WGU,1924
76
76
  modal/snapshot.py,sha256=E3oxYQkYVRB_LeFBfmUV1Y6vHz8-azXJfC4x7A1QKnI,1455
@@ -78,8 +78,8 @@ modal/snapshot.pyi,sha256=0q83hlmWxAhDu8xwZyL5VmYh0i8Tigf7S60or2k30L8,1682
78
78
  modal/stream_type.py,sha256=A6320qoAAWhEfwOCZfGtymQTu5AfLfJXXgARqooTPvY,417
79
79
  modal/token_flow.py,sha256=GWpar0gANs71vm9Bd_Cj87UG1K3ljTURbkEjG3JLsrY,7616
80
80
  modal/token_flow.pyi,sha256=eirYjyqbRiT3GCKMIPHJPpkvBTu8WxDKqSHehWaJI_4,2533
81
- modal/volume.py,sha256=CNzS7I8BI0x6uYUDdvNdMlXHljdFih3RrdgmEOhguIc,53020
82
- modal/volume.pyi,sha256=0_71AfI6pRUNPulA_yrz2UwFGxynHx3QNoyZ33Ie8bs,53919
81
+ modal/volume.py,sha256=bPC8632-LyeLOjJu2fKOFyod0QG7Hd5bb-UIJ5syCjo,53303
82
+ modal/volume.pyi,sha256=5VppIgoqoJqpivESYt5_oWgVTL__zlmpNZkOPk43JF8,54443
83
83
  modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
84
84
  modal/_runtime/asgi.py,sha256=yewQjvqPdXQ9SeEMMM53-h3Y22WlJNe28tFvPrrwguk,22607
85
85
  modal/_runtime/container_io_manager.py,sha256=iiFxPfnJjnZd_l2Aj5TCR_O1dQwBcrvHccq0LSIJGZY,45719
@@ -153,7 +153,7 @@ modal/experimental/__init__.py,sha256=dPBPpxsmjZMLF3YjRrXoTvT01pl65wxi4UdFZsOem3
153
153
  modal/experimental/flash.py,sha256=viXQumCIFp5VFsPFURdFTBTjP_QnsAi8nSWXAMmfjeQ,19744
154
154
  modal/experimental/flash.pyi,sha256=A8_qJGtGoXEzKDdHbvhmCw7oqfneFEvJQK3ZdTOvUdU,10830
155
155
  modal/experimental/ipython.py,sha256=TrCfmol9LGsRZMeDoeMPx3Hv3BFqQhYnmD_iH0pqdhk,2904
156
- modal-1.1.2.dev43.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
156
+ modal-1.1.3.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
@@ -161,10 +161,10 @@ modal_docs/mdmd/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,2
161
161
  modal_docs/mdmd/mdmd.py,sha256=tUTImNd4UMFk1opkaw8J672gX8AkBO5gbY2S_NMxsxs,7140
162
162
  modal_docs/mdmd/signatures.py,sha256=XJaZrK7Mdepk5fdX51A8uENiLFNil85Ud0d4MH8H5f0,3218
163
163
  modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
164
- modal_proto/api.proto,sha256=kMP25zmjHXX9UHd4Fn5urktJ0GjcXY5QQa9VDmsqKGM,104563
164
+ modal_proto/api.proto,sha256=l1uCuGuzRoZi8o6lG7qJ0x5F8A9SJtOEVipXqsioEwc,104771
165
165
  modal_proto/api_grpc.py,sha256=AWsKZFdXr_T6LpWGlMM6BDY30RdOPjqgoPMijR-R1lI,127964
166
- modal_proto/api_pb2.py,sha256=W1pFgLJxlMwIIUPLmaFHzGhQQtTzrmcIL0flh_WVEek,366713
167
- modal_proto/api_pb2.pyi,sha256=Le-NezvMy-R1fFrLZqX9OzF6SVl5REgWWV1O68jUA4k,505382
166
+ modal_proto/api_pb2.py,sha256=VTmkiJYDvP78OFQGFTqwHVafjvm8hq6-P8-e5uSeb-c,366852
167
+ modal_proto/api_pb2.pyi,sha256=NnuXK-JedDcBLMONS11sORu-e_oLrDT8V7ze1nh0vFE,506245
168
168
  modal_proto/api_pb2_grpc.py,sha256=kDZBX6i1KdRpm4P3c2wdRbGe3XOFtqGHSbWE0vOe4F4,276062
169
169
  modal_proto/api_pb2_grpc.pyi,sha256=s1hjXmqaB3jGCSgnOouzncdfMVX0umPZd4TC1zObhgU,64579
170
170
  modal_proto/modal_api_grpc.py,sha256=faBxtXAqoz6ei8ntNu1MQTL859FFHH_LZww_FP9wubw,19311
@@ -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=kq3FWk25Kqf0MCAHGDyYKufuCu_-GkgUP-fQaNTRmGE,121
179
+ modal_version/__init__.py,sha256=PnHiiARIEKc8I0wy6HTgG_EkVKEYVRtF3ooHs2Woeyo,115
180
180
  modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
181
- modal-1.1.2.dev43.dist-info/METADATA,sha256=TYbh1FG98BWr58qrSTpJ9RtoIHqft1FBt_3hScvHEm4,2460
182
- modal-1.1.2.dev43.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
183
- modal-1.1.2.dev43.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
184
- modal-1.1.2.dev43.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
185
- modal-1.1.2.dev43.dist-info/RECORD,,
181
+ modal-1.1.3.dist-info/METADATA,sha256=VZ76xAxemMY5P4AmA6rtq1JWElsqwYjcFrG3WCFjjM0,2454
182
+ modal-1.1.3.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
183
+ modal-1.1.3.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
184
+ modal-1.1.3.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
185
+ modal-1.1.3.dist-info/RECORD,,
modal_proto/api.proto CHANGED
@@ -618,7 +618,7 @@ message AttemptStartRequest {
618
618
 
619
619
  message AttemptStartResponse {
620
620
  string attempt_token = 1;
621
- FunctionRetryPolicy retry_policy = 2; // TODO(ben-okeefe) TODO(nathan): Not currently used
621
+ FunctionRetryPolicy retry_policy = 2;
622
622
  }
623
623
 
624
624
  message AuthTokenGetRequest {
@@ -1976,6 +1976,8 @@ message GenericResult { // Used for both tasks and function outputs
1976
1976
  // Terminates the function and all remaining inputs.
1977
1977
  GENERIC_STATUS_INIT_FAILURE = 5;
1978
1978
  GENERIC_STATUS_INTERNAL_FAILURE = 6;
1979
+ // Used when sandboxes are terminated due to idle_timeout
1980
+ GENERIC_STATUS_IDLE_TIMEOUT = 7;
1979
1981
  }
1980
1982
 
1981
1983
  GenericStatus status = 1; // Status of the task or function output.
@@ -2167,7 +2169,7 @@ message MapStartOrContinueResponse {
2167
2169
  string function_call_id = 2;
2168
2170
  uint32 max_inputs_outstanding = 3;
2169
2171
  repeated string attempt_tokens = 4;
2170
- FunctionRetryPolicy retry_policy = 5; // TODO(ben-okeefe): Not currently used
2172
+ FunctionRetryPolicy retry_policy = 5;
2171
2173
  }
2172
2174
 
2173
2175
  message MethodDefinition {
@@ -2573,7 +2575,7 @@ message Sandbox {
2573
2575
  Resources resources = 5;
2574
2576
  CloudProvider cloud_provider = 6; // Deprecated at some point
2575
2577
 
2576
- uint32 timeout_secs = 7;
2578
+ uint32 timeout_secs = 7; // The max lifetime of a sandbox in seconds.
2577
2579
 
2578
2580
  optional string workdir = 8;
2579
2581
 
@@ -2635,6 +2637,9 @@ message Sandbox {
2635
2637
  map<string, bool> experimental_options = 31;
2636
2638
 
2637
2639
  repeated string preload_path_prefixes = 32; // Internal use only.
2640
+
2641
+ // Optional idle timeout in seconds. If set, the sandbox will be terminated after being idle for this duration.
2642
+ optional uint32 idle_timeout_secs = 33;
2638
2643
  }
2639
2644
 
2640
2645
  message SandboxCreateRequest {