modal 1.0.3.dev0__py3-none-any.whl → 1.0.3.dev2__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/client.pyi +2 -2
- modal/functions.pyi +6 -6
- modal/image.py +38 -22
- modal/sandbox.py +2 -3
- modal/sandbox.pyi +6 -6
- {modal-1.0.3.dev0.dist-info → modal-1.0.3.dev2.dist-info}/METADATA +1 -1
- {modal-1.0.3.dev0.dist-info → modal-1.0.3.dev2.dist-info}/RECORD +12 -12
- modal_version/__init__.py +1 -1
- {modal-1.0.3.dev0.dist-info → modal-1.0.3.dev2.dist-info}/WHEEL +0 -0
- {modal-1.0.3.dev0.dist-info → modal-1.0.3.dev2.dist-info}/entry_points.txt +0 -0
- {modal-1.0.3.dev0.dist-info → modal-1.0.3.dev2.dist-info}/licenses/LICENSE +0 -0
- {modal-1.0.3.dev0.dist-info → modal-1.0.3.dev2.dist-info}/top_level.txt +0 -0
modal/client.pyi
CHANGED
@@ -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 = "1.0.3.
|
34
|
+
version: str = "1.0.3.dev2",
|
35
35
|
): ...
|
36
36
|
def is_closed(self) -> bool: ...
|
37
37
|
@property
|
@@ -94,7 +94,7 @@ class Client:
|
|
94
94
|
server_url: str,
|
95
95
|
client_type: int,
|
96
96
|
credentials: typing.Optional[tuple[str, str]],
|
97
|
-
version: str = "1.0.3.
|
97
|
+
version: str = "1.0.3.dev2",
|
98
98
|
): ...
|
99
99
|
def is_closed(self) -> bool: ...
|
100
100
|
@property
|
modal/functions.pyi
CHANGED
@@ -227,11 +227,11 @@ class Function(
|
|
227
227
|
|
228
228
|
_call_generator: ___call_generator_spec[typing_extensions.Self]
|
229
229
|
|
230
|
-
class __remote_spec(typing_extensions.Protocol[
|
230
|
+
class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
|
231
231
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
|
232
232
|
async def aio(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
|
233
233
|
|
234
|
-
remote: __remote_spec[modal._functions.
|
234
|
+
remote: __remote_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
|
235
235
|
|
236
236
|
class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
|
237
237
|
def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]: ...
|
@@ -246,12 +246,12 @@ class Function(
|
|
246
246
|
self, *args: modal._functions.P.args, **kwargs: modal._functions.P.kwargs
|
247
247
|
) -> modal._functions.OriginalReturnType: ...
|
248
248
|
|
249
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
249
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
|
250
250
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
251
251
|
async def aio(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
252
252
|
|
253
253
|
_experimental_spawn: ___experimental_spawn_spec[
|
254
|
-
modal._functions.
|
254
|
+
modal._functions.P, modal._functions.ReturnType, typing_extensions.Self
|
255
255
|
]
|
256
256
|
|
257
257
|
class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
|
@@ -260,11 +260,11 @@ class Function(
|
|
260
260
|
|
261
261
|
_spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
|
262
262
|
|
263
|
-
class __spawn_spec(typing_extensions.Protocol[
|
263
|
+
class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
|
264
264
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
265
265
|
async def aio(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
266
266
|
|
267
|
-
spawn: __spawn_spec[modal._functions.
|
267
|
+
spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
|
268
268
|
|
269
269
|
def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]: ...
|
270
270
|
|
modal/image.py
CHANGED
@@ -647,7 +647,13 @@ class _Image(_Object, type_prefix="im"):
|
|
647
647
|
metadata = resp.metadata
|
648
648
|
|
649
649
|
if result.status == api_pb2.GenericResult.GENERIC_STATUS_FAILURE:
|
650
|
-
|
650
|
+
if result.exception:
|
651
|
+
raise RemoteError(f"Image build for {image_id} failed with the exception:\n{result.exception}")
|
652
|
+
else:
|
653
|
+
msg = f"Image build for {image_id} failed. See build logs for more details."
|
654
|
+
if not _get_output_manager():
|
655
|
+
msg += " (Hint: Use `modal.enable_output()` to see logs from the process building the Image.)"
|
656
|
+
raise RemoteError(msg)
|
651
657
|
elif result.status == api_pb2.GenericResult.GENERIC_STATUS_TERMINATED:
|
652
658
|
raise RemoteError(f"Image build for {image_id} terminated due to external shut-down. Please try again.")
|
653
659
|
elif result.status == api_pb2.GenericResult.GENERIC_STATUS_TIMEOUT:
|
@@ -1522,12 +1528,14 @@ class _Image(_Object, type_prefix="im"):
|
|
1522
1528
|
modal_requirements_commands = []
|
1523
1529
|
if builder_version <= "2024.10":
|
1524
1530
|
# past 2024.10, client dependencies are mounted at runtime
|
1525
|
-
modal_requirements_commands.extend(
|
1526
|
-
|
1527
|
-
|
1528
|
-
|
1529
|
-
|
1530
|
-
|
1531
|
+
modal_requirements_commands.extend(
|
1532
|
+
[
|
1533
|
+
f"COPY {CONTAINER_REQUIREMENTS_PATH} {CONTAINER_REQUIREMENTS_PATH}",
|
1534
|
+
f"RUN python -m pip install --upgrade {_base_image_config('package_tools', builder_version)}",
|
1535
|
+
f"RUN {requirements_prefix}{_get_modal_requirements_command(builder_version)}",
|
1536
|
+
]
|
1537
|
+
)
|
1538
|
+
if "2024.10" >= builder_version > "2023.12":
|
1531
1539
|
modal_requirements_commands.append(f"RUN rm {CONTAINER_REQUIREMENTS_PATH}")
|
1532
1540
|
|
1533
1541
|
return [
|
@@ -1830,23 +1838,31 @@ class _Image(_Object, type_prefix="im"):
|
|
1830
1838
|
f"FROM python:{full_python_version}-slim-{debian_codename}",
|
1831
1839
|
]
|
1832
1840
|
if version <= "2024.10":
|
1833
|
-
commands.extend(
|
1834
|
-
|
1835
|
-
|
1836
|
-
|
1837
|
-
|
1838
|
-
|
1839
|
-
|
1840
|
-
|
1841
|
+
commands.extend(
|
1842
|
+
[
|
1843
|
+
f"COPY {CONTAINER_REQUIREMENTS_PATH} {CONTAINER_REQUIREMENTS_PATH}",
|
1844
|
+
]
|
1845
|
+
)
|
1846
|
+
commands.extend(
|
1847
|
+
[
|
1848
|
+
"RUN apt-get update",
|
1849
|
+
"RUN apt-get install -y gcc gfortran build-essential",
|
1850
|
+
f"RUN pip install --upgrade {_base_image_config('package_tools', version)}",
|
1851
|
+
]
|
1852
|
+
)
|
1841
1853
|
if version <= "2024.10":
|
1842
1854
|
# after 2024.10, modal requirements are mounted at runtime
|
1843
|
-
commands.extend(
|
1844
|
-
|
1845
|
-
|
1846
|
-
|
1847
|
-
|
1848
|
-
|
1849
|
-
|
1855
|
+
commands.extend(
|
1856
|
+
[
|
1857
|
+
f"RUN {_get_modal_requirements_command(version)}",
|
1858
|
+
]
|
1859
|
+
)
|
1860
|
+
commands.extend(
|
1861
|
+
[
|
1862
|
+
# Set debian front-end to non-interactive to avoid users getting stuck with input prompts.
|
1863
|
+
"RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections",
|
1864
|
+
]
|
1865
|
+
)
|
1850
1866
|
if "2024.10" >= version > "2023.12":
|
1851
1867
|
commands.append(f"RUN rm {CONTAINER_REQUIREMENTS_PATH}")
|
1852
1868
|
if version > "2024.10":
|
modal/sandbox.py
CHANGED
@@ -517,7 +517,7 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
517
517
|
|
518
518
|
return self._tunnels
|
519
519
|
|
520
|
-
async def terminate(self):
|
520
|
+
async def terminate(self) -> None:
|
521
521
|
"""Terminate Sandbox execution.
|
522
522
|
|
523
523
|
This is a no-op if the Sandbox has already finished running."""
|
@@ -525,7 +525,6 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
525
525
|
await retry_transient_errors(
|
526
526
|
self._client.stub.SandboxTerminate, api_pb2.SandboxTerminateRequest(sandbox_id=self.object_id)
|
527
527
|
)
|
528
|
-
await self.wait(raise_on_termination=False)
|
529
528
|
|
530
529
|
async def poll(self) -> Optional[int]:
|
531
530
|
"""Check if the Sandbox has finished running.
|
@@ -541,7 +540,7 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
541
540
|
|
542
541
|
return self.returncode
|
543
542
|
|
544
|
-
async def _get_task_id(self):
|
543
|
+
async def _get_task_id(self) -> str:
|
545
544
|
while not self._task_id:
|
546
545
|
resp = await self._client.stub.SandboxGetTaskId(api_pb2.SandboxGetTaskIdRequest(sandbox_id=self.object_id))
|
547
546
|
self._task_id = resp.task_id
|
modal/sandbox.pyi
CHANGED
@@ -129,9 +129,9 @@ class _Sandbox(modal._object._Object):
|
|
129
129
|
async def snapshot_filesystem(self, timeout: int = 55) -> modal.image._Image: ...
|
130
130
|
async def wait(self, raise_on_termination: bool = True): ...
|
131
131
|
async def tunnels(self, timeout: int = 50) -> dict[int, modal._tunnel.Tunnel]: ...
|
132
|
-
async def terminate(self): ...
|
132
|
+
async def terminate(self) -> None: ...
|
133
133
|
async def poll(self) -> typing.Optional[int]: ...
|
134
|
-
async def _get_task_id(self): ...
|
134
|
+
async def _get_task_id(self) -> str: ...
|
135
135
|
@typing.overload
|
136
136
|
async def exec(
|
137
137
|
self,
|
@@ -405,8 +405,8 @@ class Sandbox(modal.object.Object):
|
|
405
405
|
tunnels: __tunnels_spec[typing_extensions.Self]
|
406
406
|
|
407
407
|
class __terminate_spec(typing_extensions.Protocol[SUPERSELF]):
|
408
|
-
def __call__(self, /): ...
|
409
|
-
async def aio(self, /): ...
|
408
|
+
def __call__(self, /) -> None: ...
|
409
|
+
async def aio(self, /) -> None: ...
|
410
410
|
|
411
411
|
terminate: __terminate_spec[typing_extensions.Self]
|
412
412
|
|
@@ -417,8 +417,8 @@ class Sandbox(modal.object.Object):
|
|
417
417
|
poll: __poll_spec[typing_extensions.Self]
|
418
418
|
|
419
419
|
class ___get_task_id_spec(typing_extensions.Protocol[SUPERSELF]):
|
420
|
-
def __call__(self, /): ...
|
421
|
-
async def aio(self, /): ...
|
420
|
+
def __call__(self, /) -> str: ...
|
421
|
+
async def aio(self, /) -> str: ...
|
422
422
|
|
423
423
|
_get_task_id: ___get_task_id_spec[typing_extensions.Self]
|
424
424
|
|
@@ -22,7 +22,7 @@ modal/app.py,sha256=NZ_rJ9TuMfiNiLg8-gOFgufD5flGtXWPHOZI0gdD3hE,46585
|
|
22
22
|
modal/app.pyi,sha256=4-b_vbe3lNAqQPcMRpQCEDsE1zsVkQRJGUql9B7HvbM,22659
|
23
23
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
24
24
|
modal/client.py,sha256=OwISJvkgMb-rHm9Gc4i-7YcDgGiZgwJ7F_PzwZH7a6Q,16847
|
25
|
-
modal/client.pyi,sha256=
|
25
|
+
modal/client.pyi,sha256=GDuhXbz8cfOJ7FSjEb6XDSHFDKPViR1LQGHjY4Atktw,8457
|
26
26
|
modal/cloud_bucket_mount.py,sha256=YOe9nnvSr4ZbeCn587d7_VhE9IioZYRvF9VYQTQux08,5914
|
27
27
|
modal/cloud_bucket_mount.pyi,sha256=30T3K1a89l6wzmEJ_J9iWv9SknoGqaZDx59Xs-ZQcmk,1607
|
28
28
|
modal/cls.py,sha256=dBbeARwOWftlKd1cwtM0cHFtQWSWkwVXwVmOV4w0SyI,37907
|
@@ -39,9 +39,9 @@ modal/file_io.py,sha256=lcMs_E9Xfm0YX1t9U2wNIBPnqHRxmImqjLW1GHqVmyg,20945
|
|
39
39
|
modal/file_io.pyi,sha256=oB7x-rKq7bmm8cA7Z7W9C9yeko7KK9m9i5GidFnkGK4,9569
|
40
40
|
modal/file_pattern_matcher.py,sha256=wov-otB5M1oTdrYDtR2_VgacYin2srdtAP4McA1Cqzw,6516
|
41
41
|
modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
|
42
|
-
modal/functions.pyi,sha256=
|
42
|
+
modal/functions.pyi,sha256=iqdp5ixtOOlm8bF-QYbD_G8VKqSRt_AVLT7AWjpn6pQ,16236
|
43
43
|
modal/gpu.py,sha256=Kbhs_u49FaC2Zi0TjCdrpstpRtT5eZgecynmQi5IZVE,6752
|
44
|
-
modal/image.py,sha256
|
44
|
+
modal/image.py,sha256=yrI9DCw7GAck3d788GCHJom-_yU55zNu7reNapBhlgE,93284
|
45
45
|
modal/image.pyi,sha256=2xjB6XOZDtm_chDdd90UoIj8pnDt5hCg6bOmu5fNaA4,25625
|
46
46
|
modal/io_streams.py,sha256=YDZVQSDv05DeXg5TwcucC9Rj5hQBx2GXdluan9rIUpw,15467
|
47
47
|
modal/io_streams.pyi,sha256=1UK6kWLREASQfq-wL9wSp5iqjLU0egRZPDn4LXs1PZY,5136
|
@@ -65,8 +65,8 @@ modal/retries.py,sha256=IvNLDM0f_GLUDD5VgEDoN09C88yoxSrCquinAuxT1Sc,5205
|
|
65
65
|
modal/runner.py,sha256=nvpnU7U2O5d2WqME1QUTTwu-NkSLLwblytlGk7HXPAw,24152
|
66
66
|
modal/runner.pyi,sha256=1AnEu48SUPnLWp3raQ2zJCV5lc85EGLkX2nL0bHWaB0,5162
|
67
67
|
modal/running_app.py,sha256=v61mapYNV1-O-Uaho5EfJlryMLvIT9We0amUOSvSGx8,1188
|
68
|
-
modal/sandbox.py,sha256=
|
69
|
-
modal/sandbox.pyi,sha256=
|
68
|
+
modal/sandbox.py,sha256=OGNgK4l7iuO-p3kC0bwj7Ehh-Qm2m-Odj0iWOpQb-1I,35697
|
69
|
+
modal/sandbox.pyi,sha256=hTAnOmXyGZOaUjjqiKfc6B_uU93N1Uxwj_D-o7qwbbY,28240
|
70
70
|
modal/schedule.py,sha256=SdH8jk6S0zoc1bTRVblrVw0zBsNwPlSC2gNpVxMet9g,3061
|
71
71
|
modal/scheduler_placement.py,sha256=BAREdOY5HzHpzSBqt6jDVR6YC_jYfHMVqOzkyqQfngU,1235
|
72
72
|
modal/secret.py,sha256=I2z-rgKWl_Ix107d2_Y2OWGXdFOuJ7zMOyDfIOdFI1A,10374
|
@@ -147,7 +147,7 @@ modal/requirements/2024.10.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddR
|
|
147
147
|
modal/requirements/PREVIEW.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddRo,296
|
148
148
|
modal/requirements/README.md,sha256=9tK76KP0Uph7O0M5oUgsSwEZDj5y-dcUPsnpR0Sc-Ik,854
|
149
149
|
modal/requirements/base-images.json,sha256=57vMSqzMbLBxw5tFWSaMiIkkVEps4JfX5PAtXGnkS4U,740
|
150
|
-
modal-1.0.3.
|
150
|
+
modal-1.0.3.dev2.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
151
151
|
modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
152
152
|
modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
|
153
153
|
modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
|
@@ -170,10 +170,10 @@ modal_proto/options_pb2.pyi,sha256=l7DBrbLO7q3Ir-XDkWsajm0d0TQqqrfuX54i4BMpdQg,1
|
|
170
170
|
modal_proto/options_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
171
171
|
modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0yJSI,247
|
172
172
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
173
|
-
modal_version/__init__.py,sha256=
|
173
|
+
modal_version/__init__.py,sha256=4i8S9iaNFT-F-PobzZrdGgtvl7JaionX6OaMyf2J6RE,120
|
174
174
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
175
|
-
modal-1.0.3.
|
176
|
-
modal-1.0.3.
|
177
|
-
modal-1.0.3.
|
178
|
-
modal-1.0.3.
|
179
|
-
modal-1.0.3.
|
175
|
+
modal-1.0.3.dev2.dist-info/METADATA,sha256=tHJ5wylwSO0Po8_YKBwI3dAD-EXjHg5iJW10bh19U_0,2454
|
176
|
+
modal-1.0.3.dev2.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
177
|
+
modal-1.0.3.dev2.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
178
|
+
modal-1.0.3.dev2.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
179
|
+
modal-1.0.3.dev2.dist-info/RECORD,,
|
modal_version/__init__.py
CHANGED
File without changes
|
File without changes
|
File without changes
|
File without changes
|