modal 1.1.5.dev83__py3-none-any.whl → 1.3.1.dev8__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.
Potentially problematic release.
This version of modal might be problematic. Click here for more details.
- modal/__init__.py +4 -4
- modal/__main__.py +4 -29
- modal/_billing.py +84 -0
- modal/_clustered_functions.py +1 -3
- modal/_container_entrypoint.py +33 -208
- modal/_functions.py +146 -121
- modal/_grpc_client.py +191 -0
- modal/_ipython.py +16 -6
- modal/_load_context.py +106 -0
- modal/_object.py +72 -21
- modal/_output.py +12 -14
- modal/_partial_function.py +31 -4
- modal/_resolver.py +44 -57
- modal/_runtime/container_io_manager.py +26 -28
- modal/_runtime/container_io_manager.pyi +42 -44
- modal/_runtime/gpu_memory_snapshot.py +9 -7
- modal/_runtime/user_code_event_loop.py +80 -0
- modal/_runtime/user_code_imports.py +236 -10
- modal/_serialization.py +2 -1
- modal/_traceback.py +4 -13
- modal/_tunnel.py +16 -11
- modal/_tunnel.pyi +25 -3
- modal/_utils/async_utils.py +337 -10
- modal/_utils/auth_token_manager.py +1 -4
- modal/_utils/blob_utils.py +29 -22
- modal/_utils/function_utils.py +20 -21
- modal/_utils/grpc_testing.py +6 -3
- modal/_utils/grpc_utils.py +223 -64
- modal/_utils/mount_utils.py +26 -1
- modal/_utils/package_utils.py +0 -1
- modal/_utils/rand_pb_testing.py +8 -1
- modal/_utils/task_command_router_client.py +524 -0
- modal/_vendor/cloudpickle.py +144 -48
- modal/app.py +215 -96
- modal/app.pyi +78 -37
- modal/billing.py +5 -0
- modal/builder/2025.06.txt +6 -3
- modal/builder/PREVIEW.txt +2 -1
- modal/builder/base-images.json +4 -2
- modal/cli/_download.py +19 -3
- modal/cli/cluster.py +4 -2
- modal/cli/config.py +3 -1
- modal/cli/container.py +5 -4
- modal/cli/dict.py +5 -2
- modal/cli/entry_point.py +26 -2
- modal/cli/environment.py +2 -16
- modal/cli/launch.py +1 -76
- modal/cli/network_file_system.py +5 -20
- modal/cli/queues.py +5 -4
- modal/cli/run.py +24 -204
- modal/cli/secret.py +1 -2
- modal/cli/shell.py +375 -0
- modal/cli/utils.py +1 -13
- modal/cli/volume.py +11 -17
- modal/client.py +16 -125
- modal/client.pyi +94 -144
- modal/cloud_bucket_mount.py +3 -1
- modal/cloud_bucket_mount.pyi +4 -0
- modal/cls.py +101 -64
- modal/cls.pyi +9 -8
- modal/config.py +21 -1
- modal/container_process.py +288 -12
- modal/container_process.pyi +99 -38
- modal/dict.py +72 -33
- modal/dict.pyi +88 -57
- modal/environments.py +16 -8
- modal/environments.pyi +6 -2
- modal/exception.py +154 -16
- modal/experimental/__init__.py +23 -5
- modal/experimental/flash.py +161 -74
- modal/experimental/flash.pyi +97 -49
- modal/file_io.py +50 -92
- modal/file_io.pyi +117 -89
- modal/functions.pyi +70 -87
- modal/image.py +73 -47
- modal/image.pyi +33 -30
- modal/io_streams.py +500 -149
- modal/io_streams.pyi +279 -189
- modal/mount.py +60 -45
- modal/mount.pyi +41 -17
- modal/network_file_system.py +19 -11
- modal/network_file_system.pyi +72 -39
- modal/object.pyi +114 -22
- modal/parallel_map.py +42 -44
- modal/parallel_map.pyi +9 -17
- modal/partial_function.pyi +4 -2
- modal/proxy.py +14 -6
- modal/proxy.pyi +10 -2
- modal/queue.py +45 -38
- modal/queue.pyi +88 -52
- modal/runner.py +96 -96
- modal/runner.pyi +44 -27
- modal/sandbox.py +225 -108
- modal/sandbox.pyi +226 -63
- modal/secret.py +58 -56
- modal/secret.pyi +28 -13
- modal/serving.py +7 -11
- modal/serving.pyi +7 -8
- modal/snapshot.py +29 -15
- modal/snapshot.pyi +18 -10
- modal/token_flow.py +1 -1
- modal/token_flow.pyi +4 -6
- modal/volume.py +102 -55
- modal/volume.pyi +125 -66
- {modal-1.1.5.dev83.dist-info → modal-1.3.1.dev8.dist-info}/METADATA +10 -9
- modal-1.3.1.dev8.dist-info/RECORD +189 -0
- modal_proto/api.proto +86 -30
- modal_proto/api_grpc.py +10 -25
- modal_proto/api_pb2.py +1080 -1047
- modal_proto/api_pb2.pyi +253 -79
- modal_proto/api_pb2_grpc.py +14 -48
- modal_proto/api_pb2_grpc.pyi +6 -18
- modal_proto/modal_api_grpc.py +175 -176
- modal_proto/{sandbox_router.proto → task_command_router.proto} +62 -45
- modal_proto/task_command_router_grpc.py +138 -0
- modal_proto/task_command_router_pb2.py +180 -0
- modal_proto/{sandbox_router_pb2.pyi → task_command_router_pb2.pyi} +110 -63
- modal_proto/task_command_router_pb2_grpc.py +272 -0
- modal_proto/task_command_router_pb2_grpc.pyi +100 -0
- modal_version/__init__.py +1 -1
- modal_version/__main__.py +1 -1
- modal/cli/programs/launch_instance_ssh.py +0 -94
- modal/cli/programs/run_marimo.py +0 -95
- modal-1.1.5.dev83.dist-info/RECORD +0 -191
- modal_proto/modal_options_grpc.py +0 -3
- modal_proto/options.proto +0 -19
- modal_proto/options_grpc.py +0 -3
- modal_proto/options_pb2.py +0 -35
- modal_proto/options_pb2.pyi +0 -20
- modal_proto/options_pb2_grpc.py +0 -4
- modal_proto/options_pb2_grpc.pyi +0 -7
- modal_proto/sandbox_router_grpc.py +0 -105
- modal_proto/sandbox_router_pb2.py +0 -148
- modal_proto/sandbox_router_pb2_grpc.py +0 -203
- modal_proto/sandbox_router_pb2_grpc.pyi +0 -75
- {modal-1.1.5.dev83.dist-info → modal-1.3.1.dev8.dist-info}/WHEEL +0 -0
- {modal-1.1.5.dev83.dist-info → modal-1.3.1.dev8.dist-info}/entry_points.txt +0 -0
- {modal-1.1.5.dev83.dist-info → modal-1.3.1.dev8.dist-info}/licenses/LICENSE +0 -0
- {modal-1.1.5.dev83.dist-info → modal-1.3.1.dev8.dist-info}/top_level.txt +0 -0
modal/volume.pyi
CHANGED
|
@@ -265,7 +265,7 @@ class VolumeManager:
|
|
|
265
265
|
"""
|
|
266
266
|
...
|
|
267
267
|
|
|
268
|
-
create: __create_spec
|
|
268
|
+
create: typing.ClassVar[__create_spec]
|
|
269
269
|
|
|
270
270
|
class __list_spec(typing_extensions.Protocol):
|
|
271
271
|
def __call__(
|
|
@@ -338,7 +338,7 @@ class VolumeManager:
|
|
|
338
338
|
"""
|
|
339
339
|
...
|
|
340
340
|
|
|
341
|
-
list: __list_spec
|
|
341
|
+
list: typing.ClassVar[__list_spec]
|
|
342
342
|
|
|
343
343
|
class __delete_spec(typing_extensions.Protocol):
|
|
344
344
|
def __call__(
|
|
@@ -401,7 +401,7 @@ class VolumeManager:
|
|
|
401
401
|
"""
|
|
402
402
|
...
|
|
403
403
|
|
|
404
|
-
delete: __delete_spec
|
|
404
|
+
delete: typing.ClassVar[__delete_spec]
|
|
405
405
|
|
|
406
406
|
class _Volume(modal._object._Object):
|
|
407
407
|
"""A writeable volume that can be used to share files between one or more Modal functions.
|
|
@@ -489,6 +489,7 @@ class _Volume(modal._object._Object):
|
|
|
489
489
|
environment_name: typing.Optional[str] = None,
|
|
490
490
|
create_if_missing: bool = False,
|
|
491
491
|
version: typing.Optional[int] = None,
|
|
492
|
+
client: typing.Optional[modal.client._Client] = None,
|
|
492
493
|
) -> _Volume:
|
|
493
494
|
"""Reference a Volume by name, creating if necessary.
|
|
494
495
|
|
|
@@ -596,7 +597,7 @@ class _Volume(modal._object._Object):
|
|
|
596
597
|
"""
|
|
597
598
|
...
|
|
598
599
|
|
|
599
|
-
def read_file(self, path: str) -> collections.abc.
|
|
600
|
+
def read_file(self, path: str) -> collections.abc.AsyncGenerator[bytes, None]:
|
|
600
601
|
"""Read a file from the modal.Volume.
|
|
601
602
|
|
|
602
603
|
Note - this function is primarily intended to be used outside of a Modal App.
|
|
@@ -626,6 +627,14 @@ class _Volume(modal._object._Object):
|
|
|
626
627
|
"""
|
|
627
628
|
...
|
|
628
629
|
|
|
630
|
+
async def _read_file_into_fileobj(
|
|
631
|
+
self,
|
|
632
|
+
path: str,
|
|
633
|
+
fileobj: typing.IO[bytes],
|
|
634
|
+
concurrency: typing.Optional[int] = None,
|
|
635
|
+
download_semaphore: typing.Optional[asyncio.locks.Semaphore] = None,
|
|
636
|
+
progress_cb: typing.Optional[collections.abc.Callable[..., typing.Any]] = None,
|
|
637
|
+
) -> int: ...
|
|
629
638
|
async def remove_file(self, path: str, recursive: bool = False) -> None:
|
|
630
639
|
"""Remove a file or directory from a volume."""
|
|
631
640
|
...
|
|
@@ -657,7 +666,7 @@ class _Volume(modal._object._Object):
|
|
|
657
666
|
"""
|
|
658
667
|
...
|
|
659
668
|
|
|
660
|
-
|
|
669
|
+
def batch_upload(self, force: bool = False) -> typing.AsyncContextManager[_AbstractVolumeUploadContextManager]:
|
|
661
670
|
"""Initiate a batched upload to a volume.
|
|
662
671
|
|
|
663
672
|
To allow overwriting existing files, set `force` to `True` (you cannot overwrite existing directories with
|
|
@@ -700,8 +709,6 @@ class _Volume(modal._object._Object):
|
|
|
700
709
|
environment_name: typing.Optional[str] = None,
|
|
701
710
|
): ...
|
|
702
711
|
|
|
703
|
-
SUPERSELF = typing.TypeVar("SUPERSELF", covariant=True)
|
|
704
|
-
|
|
705
712
|
class Volume(modal.object.Object):
|
|
706
713
|
"""A writeable volume that can be used to share files between one or more Modal functions.
|
|
707
714
|
|
|
@@ -782,11 +789,11 @@ class Volume(modal.object.Object):
|
|
|
782
789
|
def _hydrate_metadata(self, metadata: typing.Optional[google.protobuf.message.Message]): ...
|
|
783
790
|
def _get_metadata(self) -> typing.Optional[google.protobuf.message.Message]: ...
|
|
784
791
|
|
|
785
|
-
class ___get_lock_spec(typing_extensions.Protocol
|
|
792
|
+
class ___get_lock_spec(typing_extensions.Protocol):
|
|
786
793
|
def __call__(self, /): ...
|
|
787
794
|
async def aio(self, /): ...
|
|
788
795
|
|
|
789
|
-
_get_lock: ___get_lock_spec
|
|
796
|
+
_get_lock: ___get_lock_spec
|
|
790
797
|
|
|
791
798
|
@property
|
|
792
799
|
def _is_v1(self) -> bool: ...
|
|
@@ -798,6 +805,7 @@ class Volume(modal.object.Object):
|
|
|
798
805
|
environment_name: typing.Optional[str] = None,
|
|
799
806
|
create_if_missing: bool = False,
|
|
800
807
|
version: typing.Optional[int] = None,
|
|
808
|
+
client: typing.Optional[modal.client.Client] = None,
|
|
801
809
|
) -> Volume:
|
|
802
810
|
"""Reference a Volume by name, creating if necessary.
|
|
803
811
|
|
|
@@ -818,29 +826,56 @@ class Volume(modal.object.Object):
|
|
|
818
826
|
"""
|
|
819
827
|
...
|
|
820
828
|
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
829
|
+
class __ephemeral_spec(typing_extensions.Protocol):
|
|
830
|
+
def __call__(
|
|
831
|
+
self,
|
|
832
|
+
/,
|
|
833
|
+
client: typing.Optional[modal.client.Client] = None,
|
|
834
|
+
environment_name: typing.Optional[str] = None,
|
|
835
|
+
version: typing.Optional[int] = None,
|
|
836
|
+
_heartbeat_sleep: float = 300,
|
|
837
|
+
) -> synchronicity.combined_types.AsyncAndBlockingContextManager[Volume]:
|
|
838
|
+
"""Creates a new ephemeral volume within a context manager:
|
|
830
839
|
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
840
|
+
Usage:
|
|
841
|
+
```python
|
|
842
|
+
import modal
|
|
843
|
+
with modal.Volume.ephemeral() as vol:
|
|
844
|
+
assert vol.listdir("/") == []
|
|
845
|
+
```
|
|
837
846
|
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
847
|
+
```python notest
|
|
848
|
+
async with modal.Volume.ephemeral() as vol:
|
|
849
|
+
assert await vol.listdir("/") == []
|
|
850
|
+
```
|
|
851
|
+
"""
|
|
852
|
+
...
|
|
853
|
+
|
|
854
|
+
def aio(
|
|
855
|
+
self,
|
|
856
|
+
/,
|
|
857
|
+
client: typing.Optional[modal.client.Client] = None,
|
|
858
|
+
environment_name: typing.Optional[str] = None,
|
|
859
|
+
version: typing.Optional[int] = None,
|
|
860
|
+
_heartbeat_sleep: float = 300,
|
|
861
|
+
) -> typing.AsyncContextManager[Volume]:
|
|
862
|
+
"""Creates a new ephemeral volume within a context manager:
|
|
863
|
+
|
|
864
|
+
Usage:
|
|
865
|
+
```python
|
|
866
|
+
import modal
|
|
867
|
+
with modal.Volume.ephemeral() as vol:
|
|
868
|
+
assert vol.listdir("/") == []
|
|
869
|
+
```
|
|
870
|
+
|
|
871
|
+
```python notest
|
|
872
|
+
async with modal.Volume.ephemeral() as vol:
|
|
873
|
+
assert await vol.listdir("/") == []
|
|
874
|
+
```
|
|
875
|
+
"""
|
|
876
|
+
...
|
|
877
|
+
|
|
878
|
+
ephemeral: typing.ClassVar[__ephemeral_spec]
|
|
844
879
|
|
|
845
880
|
class __create_deployed_spec(typing_extensions.Protocol):
|
|
846
881
|
def __call__(
|
|
@@ -867,7 +902,7 @@ class Volume(modal.object.Object):
|
|
|
867
902
|
"""mdmd:hidden"""
|
|
868
903
|
...
|
|
869
904
|
|
|
870
|
-
create_deployed: __create_deployed_spec
|
|
905
|
+
create_deployed: typing.ClassVar[__create_deployed_spec]
|
|
871
906
|
|
|
872
907
|
class ___create_deployed_spec(typing_extensions.Protocol):
|
|
873
908
|
def __call__(
|
|
@@ -894,9 +929,9 @@ class Volume(modal.object.Object):
|
|
|
894
929
|
"""mdmd:hidden"""
|
|
895
930
|
...
|
|
896
931
|
|
|
897
|
-
_create_deployed: ___create_deployed_spec
|
|
932
|
+
_create_deployed: typing.ClassVar[___create_deployed_spec]
|
|
898
933
|
|
|
899
|
-
class __info_spec(typing_extensions.Protocol
|
|
934
|
+
class __info_spec(typing_extensions.Protocol):
|
|
900
935
|
def __call__(self, /) -> VolumeInfo:
|
|
901
936
|
"""Return information about the Volume object."""
|
|
902
937
|
...
|
|
@@ -905,15 +940,15 @@ class Volume(modal.object.Object):
|
|
|
905
940
|
"""Return information about the Volume object."""
|
|
906
941
|
...
|
|
907
942
|
|
|
908
|
-
info: __info_spec
|
|
943
|
+
info: __info_spec
|
|
909
944
|
|
|
910
|
-
class ___do_reload_spec(typing_extensions.Protocol
|
|
945
|
+
class ___do_reload_spec(typing_extensions.Protocol):
|
|
911
946
|
def __call__(self, /, lock=True): ...
|
|
912
947
|
async def aio(self, /, lock=True): ...
|
|
913
948
|
|
|
914
|
-
_do_reload: ___do_reload_spec
|
|
949
|
+
_do_reload: ___do_reload_spec
|
|
915
950
|
|
|
916
|
-
class __commit_spec(typing_extensions.Protocol
|
|
951
|
+
class __commit_spec(typing_extensions.Protocol):
|
|
917
952
|
def __call__(self, /):
|
|
918
953
|
"""Commit changes to a mounted volume.
|
|
919
954
|
|
|
@@ -930,9 +965,9 @@ class Volume(modal.object.Object):
|
|
|
930
965
|
"""
|
|
931
966
|
...
|
|
932
967
|
|
|
933
|
-
commit: __commit_spec
|
|
968
|
+
commit: __commit_spec
|
|
934
969
|
|
|
935
|
-
class __reload_spec(typing_extensions.Protocol
|
|
970
|
+
class __reload_spec(typing_extensions.Protocol):
|
|
936
971
|
def __call__(self, /):
|
|
937
972
|
"""Make latest committed state of volume available in the running container.
|
|
938
973
|
|
|
@@ -953,9 +988,9 @@ class Volume(modal.object.Object):
|
|
|
953
988
|
"""
|
|
954
989
|
...
|
|
955
990
|
|
|
956
|
-
reload: __reload_spec
|
|
991
|
+
reload: __reload_spec
|
|
957
992
|
|
|
958
|
-
class __iterdir_spec(typing_extensions.Protocol
|
|
993
|
+
class __iterdir_spec(typing_extensions.Protocol):
|
|
959
994
|
def __call__(self, /, path: str, *, recursive: bool = True) -> typing.Iterator[FileEntry]:
|
|
960
995
|
"""Iterate over all files in a directory in the volume.
|
|
961
996
|
|
|
@@ -974,9 +1009,9 @@ class Volume(modal.object.Object):
|
|
|
974
1009
|
"""
|
|
975
1010
|
...
|
|
976
1011
|
|
|
977
|
-
iterdir: __iterdir_spec
|
|
1012
|
+
iterdir: __iterdir_spec
|
|
978
1013
|
|
|
979
|
-
class __listdir_spec(typing_extensions.Protocol
|
|
1014
|
+
class __listdir_spec(typing_extensions.Protocol):
|
|
980
1015
|
def __call__(self, /, path: str, *, recursive: bool = False) -> list[FileEntry]:
|
|
981
1016
|
"""List all files under a path prefix in the modal.Volume.
|
|
982
1017
|
|
|
@@ -995,10 +1030,10 @@ class Volume(modal.object.Object):
|
|
|
995
1030
|
"""
|
|
996
1031
|
...
|
|
997
1032
|
|
|
998
|
-
listdir: __listdir_spec
|
|
1033
|
+
listdir: __listdir_spec
|
|
999
1034
|
|
|
1000
|
-
class __read_file_spec(typing_extensions.Protocol
|
|
1001
|
-
def __call__(self, /, path: str) -> typing.
|
|
1035
|
+
class __read_file_spec(typing_extensions.Protocol):
|
|
1036
|
+
def __call__(self, /, path: str) -> typing.Generator[bytes, None, None]:
|
|
1002
1037
|
"""Read a file from the modal.Volume.
|
|
1003
1038
|
|
|
1004
1039
|
Note - this function is primarily intended to be used outside of a Modal App.
|
|
@@ -1017,7 +1052,7 @@ class Volume(modal.object.Object):
|
|
|
1017
1052
|
"""
|
|
1018
1053
|
...
|
|
1019
1054
|
|
|
1020
|
-
def aio(self, /, path: str) -> collections.abc.
|
|
1055
|
+
def aio(self, /, path: str) -> collections.abc.AsyncGenerator[bytes, None]:
|
|
1021
1056
|
"""Read a file from the modal.Volume.
|
|
1022
1057
|
|
|
1023
1058
|
Note - this function is primarily intended to be used outside of a Modal App.
|
|
@@ -1036,9 +1071,9 @@ class Volume(modal.object.Object):
|
|
|
1036
1071
|
"""
|
|
1037
1072
|
...
|
|
1038
1073
|
|
|
1039
|
-
read_file: __read_file_spec
|
|
1074
|
+
read_file: __read_file_spec
|
|
1040
1075
|
|
|
1041
|
-
class __read_file_into_fileobj_spec(typing_extensions.Protocol
|
|
1076
|
+
class __read_file_into_fileobj_spec(typing_extensions.Protocol):
|
|
1042
1077
|
def __call__(
|
|
1043
1078
|
self,
|
|
1044
1079
|
/,
|
|
@@ -1063,9 +1098,31 @@ class Volume(modal.object.Object):
|
|
|
1063
1098
|
"""
|
|
1064
1099
|
...
|
|
1065
1100
|
|
|
1066
|
-
read_file_into_fileobj: __read_file_into_fileobj_spec
|
|
1101
|
+
read_file_into_fileobj: __read_file_into_fileobj_spec
|
|
1067
1102
|
|
|
1068
|
-
class
|
|
1103
|
+
class ___read_file_into_fileobj_spec(typing_extensions.Protocol):
|
|
1104
|
+
def __call__(
|
|
1105
|
+
self,
|
|
1106
|
+
/,
|
|
1107
|
+
path: str,
|
|
1108
|
+
fileobj: typing.IO[bytes],
|
|
1109
|
+
concurrency: typing.Optional[int] = None,
|
|
1110
|
+
download_semaphore: typing.Optional[asyncio.locks.Semaphore] = None,
|
|
1111
|
+
progress_cb: typing.Optional[collections.abc.Callable[..., typing.Any]] = None,
|
|
1112
|
+
) -> int: ...
|
|
1113
|
+
async def aio(
|
|
1114
|
+
self,
|
|
1115
|
+
/,
|
|
1116
|
+
path: str,
|
|
1117
|
+
fileobj: typing.IO[bytes],
|
|
1118
|
+
concurrency: typing.Optional[int] = None,
|
|
1119
|
+
download_semaphore: typing.Optional[asyncio.locks.Semaphore] = None,
|
|
1120
|
+
progress_cb: typing.Optional[collections.abc.Callable[..., typing.Any]] = None,
|
|
1121
|
+
) -> int: ...
|
|
1122
|
+
|
|
1123
|
+
_read_file_into_fileobj: ___read_file_into_fileobj_spec
|
|
1124
|
+
|
|
1125
|
+
class __remove_file_spec(typing_extensions.Protocol):
|
|
1069
1126
|
def __call__(self, /, path: str, recursive: bool = False) -> None:
|
|
1070
1127
|
"""Remove a file or directory from a volume."""
|
|
1071
1128
|
...
|
|
@@ -1074,9 +1131,9 @@ class Volume(modal.object.Object):
|
|
|
1074
1131
|
"""Remove a file or directory from a volume."""
|
|
1075
1132
|
...
|
|
1076
1133
|
|
|
1077
|
-
remove_file: __remove_file_spec
|
|
1134
|
+
remove_file: __remove_file_spec
|
|
1078
1135
|
|
|
1079
|
-
class __copy_files_spec(typing_extensions.Protocol
|
|
1136
|
+
class __copy_files_spec(typing_extensions.Protocol):
|
|
1080
1137
|
def __call__(self, /, src_paths: collections.abc.Sequence[str], dst_path: str, recursive: bool = False) -> None:
|
|
1081
1138
|
"""Copy files within the volume from src_paths to dst_path.
|
|
1082
1139
|
The semantics of the copy operation follow those of the UNIX cp command.
|
|
@@ -1129,10 +1186,12 @@ class Volume(modal.object.Object):
|
|
|
1129
1186
|
"""
|
|
1130
1187
|
...
|
|
1131
1188
|
|
|
1132
|
-
copy_files: __copy_files_spec
|
|
1189
|
+
copy_files: __copy_files_spec
|
|
1133
1190
|
|
|
1134
|
-
class __batch_upload_spec(typing_extensions.Protocol
|
|
1135
|
-
def __call__(
|
|
1191
|
+
class __batch_upload_spec(typing_extensions.Protocol):
|
|
1192
|
+
def __call__(
|
|
1193
|
+
self, /, force: bool = False
|
|
1194
|
+
) -> synchronicity.combined_types.AsyncAndBlockingContextManager[AbstractVolumeUploadContextManager]:
|
|
1136
1195
|
"""Initiate a batched upload to a volume.
|
|
1137
1196
|
|
|
1138
1197
|
To allow overwriting existing files, set `force` to `True` (you cannot overwrite existing directories with
|
|
@@ -1151,7 +1210,7 @@ class Volume(modal.object.Object):
|
|
|
1151
1210
|
"""
|
|
1152
1211
|
...
|
|
1153
1212
|
|
|
1154
|
-
|
|
1213
|
+
def aio(self, /, force: bool = False) -> typing.AsyncContextManager[AbstractVolumeUploadContextManager]:
|
|
1155
1214
|
"""Initiate a batched upload to a volume.
|
|
1156
1215
|
|
|
1157
1216
|
To allow overwriting existing files, set `force` to `True` (you cannot overwrite existing directories with
|
|
@@ -1170,13 +1229,13 @@ class Volume(modal.object.Object):
|
|
|
1170
1229
|
"""
|
|
1171
1230
|
...
|
|
1172
1231
|
|
|
1173
|
-
batch_upload: __batch_upload_spec
|
|
1232
|
+
batch_upload: __batch_upload_spec
|
|
1174
1233
|
|
|
1175
|
-
class ___instance_delete_spec(typing_extensions.Protocol
|
|
1234
|
+
class ___instance_delete_spec(typing_extensions.Protocol):
|
|
1176
1235
|
def __call__(self, /): ...
|
|
1177
1236
|
async def aio(self, /): ...
|
|
1178
1237
|
|
|
1179
|
-
_instance_delete: ___instance_delete_spec
|
|
1238
|
+
_instance_delete: ___instance_delete_spec
|
|
1180
1239
|
|
|
1181
1240
|
class __delete_spec(typing_extensions.Protocol):
|
|
1182
1241
|
def __call__(
|
|
@@ -1213,7 +1272,7 @@ class Volume(modal.object.Object):
|
|
|
1213
1272
|
"""
|
|
1214
1273
|
...
|
|
1215
1274
|
|
|
1216
|
-
delete: __delete_spec
|
|
1275
|
+
delete: typing.ClassVar[__delete_spec]
|
|
1217
1276
|
|
|
1218
1277
|
class __rename_spec(typing_extensions.Protocol):
|
|
1219
1278
|
def __call__(
|
|
@@ -1235,7 +1294,7 @@ class Volume(modal.object.Object):
|
|
|
1235
1294
|
environment_name: typing.Optional[str] = None,
|
|
1236
1295
|
): ...
|
|
1237
1296
|
|
|
1238
|
-
rename: __rename_spec
|
|
1297
|
+
rename: typing.ClassVar[__rename_spec]
|
|
1239
1298
|
|
|
1240
1299
|
class _AbstractVolumeUploadContextManager:
|
|
1241
1300
|
async def __aenter__(self): ...
|
|
@@ -1395,11 +1454,11 @@ class VolumeUploadContextManager(AbstractVolumeUploadContextManager):
|
|
|
1395
1454
|
"""
|
|
1396
1455
|
...
|
|
1397
1456
|
|
|
1398
|
-
class ___upload_file_spec(typing_extensions.Protocol
|
|
1457
|
+
class ___upload_file_spec(typing_extensions.Protocol):
|
|
1399
1458
|
def __call__(self, /, file_spec: modal._utils.blob_utils.FileUploadSpec) -> modal_proto.api_pb2.MountFile: ...
|
|
1400
1459
|
async def aio(self, /, file_spec: modal._utils.blob_utils.FileUploadSpec) -> modal_proto.api_pb2.MountFile: ...
|
|
1401
1460
|
|
|
1402
|
-
_upload_file: ___upload_file_spec
|
|
1461
|
+
_upload_file: ___upload_file_spec
|
|
1403
1462
|
|
|
1404
1463
|
class _VolumeUploadContextManager2(_AbstractVolumeUploadContextManager):
|
|
1405
1464
|
"""Context manager for batch-uploading files to a Volume version 2."""
|
|
@@ -1519,11 +1578,11 @@ class VolumeUploadContextManager2(AbstractVolumeUploadContextManager):
|
|
|
1519
1578
|
"""
|
|
1520
1579
|
...
|
|
1521
1580
|
|
|
1522
|
-
class ___put_file_specs_spec(typing_extensions.Protocol
|
|
1581
|
+
class ___put_file_specs_spec(typing_extensions.Protocol):
|
|
1523
1582
|
def __call__(self, /, file_specs: list[modal._utils.blob_utils.FileUploadSpec2]): ...
|
|
1524
1583
|
async def aio(self, /, file_specs: list[modal._utils.blob_utils.FileUploadSpec2]): ...
|
|
1525
1584
|
|
|
1526
|
-
_put_file_specs: ___put_file_specs_spec
|
|
1585
|
+
_put_file_specs: ___put_file_specs_spec
|
|
1527
1586
|
|
|
1528
1587
|
async def _put_missing_blocks(
|
|
1529
1588
|
file_specs: list[modal._utils.blob_utils.FileUploadSpec2],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: modal
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.3.1.dev8
|
|
4
4
|
Summary: Python client library for Modal
|
|
5
5
|
Author-email: Modal Labs <support@modal.com>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -13,17 +13,18 @@ Classifier: Topic :: System :: Distributed Computing
|
|
|
13
13
|
Classifier: Operating System :: OS Independent
|
|
14
14
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
15
15
|
Classifier: Programming Language :: Python :: 3
|
|
16
|
-
Requires-Python:
|
|
16
|
+
Requires-Python: <3.15,>=3.10
|
|
17
17
|
Description-Content-Type: text/markdown
|
|
18
18
|
License-File: LICENSE
|
|
19
19
|
Requires-Dist: aiohttp
|
|
20
20
|
Requires-Dist: cbor2
|
|
21
21
|
Requires-Dist: certifi
|
|
22
22
|
Requires-Dist: click~=8.1
|
|
23
|
-
Requires-Dist: grpclib<0.4.
|
|
23
|
+
Requires-Dist: grpclib<0.4.10,>=0.4.7; python_version < "3.14"
|
|
24
|
+
Requires-Dist: grpclib<0.4.10,>=0.4.9; python_version >= "3.14"
|
|
24
25
|
Requires-Dist: protobuf!=4.24.0,<7.0,>=3.19
|
|
25
26
|
Requires-Dist: rich>=12.0.0
|
|
26
|
-
Requires-Dist: synchronicity~=0.
|
|
27
|
+
Requires-Dist: synchronicity~=0.11.1
|
|
27
28
|
Requires-Dist: toml
|
|
28
29
|
Requires-Dist: typer>=0.9
|
|
29
30
|
Requires-Dist: types-certifi
|
|
@@ -32,14 +33,14 @@ Requires-Dist: watchfiles
|
|
|
32
33
|
Requires-Dist: typing_extensions~=4.6
|
|
33
34
|
Dynamic: license-file
|
|
34
35
|
|
|
35
|
-
# Modal Python
|
|
36
|
+
# Modal Python SDK
|
|
36
37
|
|
|
37
38
|
[](https://pypi.org/project/modal/)
|
|
38
39
|
[](https://github.com/modal-labs/modal-client/blob/master/LICENSE)
|
|
39
40
|
[](https://github.com/modal-labs/modal-client/actions/workflows/ci-cd.yml)
|
|
40
41
|
[](https://modal.com/slack)
|
|
41
42
|
|
|
42
|
-
The [Modal](https://modal.com/) Python
|
|
43
|
+
The [Modal](https://modal.com/) Python SDK provides convenient, on-demand
|
|
43
44
|
access to serverless cloud compute from Python scripts on your local computer.
|
|
44
45
|
|
|
45
46
|
## Documentation
|
|
@@ -51,12 +52,12 @@ a [user guide](https://modal.com/docs/guide), and the detailed
|
|
|
51
52
|
|
|
52
53
|
## Installation
|
|
53
54
|
|
|
54
|
-
**This library requires Python 3.
|
|
55
|
+
**This library requires Python 3.10 – 3.14.**
|
|
55
56
|
|
|
56
|
-
Install the package with `pip`:
|
|
57
|
+
Install the package with `uv` or `pip`:
|
|
57
58
|
|
|
58
59
|
```bash
|
|
59
|
-
pip install modal
|
|
60
|
+
uv pip install modal
|
|
60
61
|
```
|
|
61
62
|
|
|
62
63
|
You can create a Modal account (or link your existing one) directly on the
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
modal/__init__.py,sha256=K84VA1KG2BCeg_rF47a1QXE3H_uunFmYJmyFZ-2TrYU,2684
|
|
2
|
+
modal/__main__.py,sha256=UTyagD6NHFl3hdmKVr4yXGGB5_Gzj3NjrpuTIwJ25Tw,1597
|
|
3
|
+
modal/_billing.py,sha256=plJei3pEERVQMc_r7GvN1OKT9GAFdrI8Jl4biDw2CXY,3170
|
|
4
|
+
modal/_clustered_functions.py,sha256=7amiOxErtlciWeBJBL2KvaxerUomJpTAJ3qElflFHQA,2884
|
|
5
|
+
modal/_clustered_functions.pyi,sha256=JmYwAGOLEnD5AF-gYF9O5tu-SgGjeoJz-X1j48b1Ijg,1157
|
|
6
|
+
modal/_container_entrypoint.py,sha256=aatoboeM3fe9w7DVdCgVOhW4iW9EwduZwiVS3ri0HgA,19787
|
|
7
|
+
modal/_functions.py,sha256=RlcQdwVkN6IB-7XRzhW3Kh3KX79vLL3yVmrhv-2GuGE,92173
|
|
8
|
+
modal/_grpc_client.py,sha256=G8gWQXChtsuRgyXK9kcPiPNYXOYbl_m9Bz2AVBJb-zs,6924
|
|
9
|
+
modal/_ipython.py,sha256=Bu9fc3hm3xt2O47qLe_d-Mu2jS81LwMsmXNJ1sawBA0,575
|
|
10
|
+
modal/_load_context.py,sha256=P7bMvu-_E1YXWhunYU46EqQX78r4D3b05YGz9blSsy8,3786
|
|
11
|
+
modal/_location.py,sha256=joiX-0ZeutEUDTrrqLF1GHXCdVLF-rHzstocbMcd_-k,366
|
|
12
|
+
modal/_object.py,sha256=-LgLXdWlSQ2V-UhmKgswBE7uLTy7E6KgJmV1G4loCMw,13726
|
|
13
|
+
modal/_output.py,sha256=pKRLDyoEXjLe-oV12-hb6gYOpdUmNzrq7FQna-maC70,26832
|
|
14
|
+
modal/_partial_function.py,sha256=xRaU_A5SE30jywgU_-S1kV2y9WUrm0S906T5OWpS2Vg,38684
|
|
15
|
+
modal/_pty.py,sha256=E58MQ8d5-wkbMatRKpQR-G9FdbCRcZGiZxOpGy__VuY,1481
|
|
16
|
+
modal/_resolver.py,sha256=01fdEP-ujXlw2LG0sthPqanm3b0DAiRG81xiQcHHkhY,7317
|
|
17
|
+
modal/_resources.py,sha256=NMAp0GCLutiZI4GuKSIVnRHVlstoD3hNGUabjTUtzf4,1794
|
|
18
|
+
modal/_serialization.py,sha256=Yc4czrt8x3xkX43oJngb7BSI4zPgtBVuifYrxTCdsAQ,26451
|
|
19
|
+
modal/_traceback.py,sha256=N0EumYnHHqPHkmP2L6cJKjTpoxc8QYmiofROmdgSthQ,6238
|
|
20
|
+
modal/_tunnel.py,sha256=bbjVuWiDyC3m_NaVBpgoNQte-NM1FUtDVQsMobQbhc8,6578
|
|
21
|
+
modal/_tunnel.pyi,sha256=FoedJzHymbPk4Bmnbszm6uhay2rMq1JS9mIiHELYf3k,13804
|
|
22
|
+
modal/_type_manager.py,sha256=DWjgmjYJuOagw2erin506UUbG2H5UzZCFEekS-7hmfA,9087
|
|
23
|
+
modal/_watcher.py,sha256=K6LYnlmSGQB4tWWI9JADv-tvSvQ1j522FwT71B51CX8,3584
|
|
24
|
+
modal/app.py,sha256=ls8RTBz5yeMWCFtUAPzy8U2ZgRpQEsDBRq_WY8t1vqg,59449
|
|
25
|
+
modal/app.pyi,sha256=WR0nGSUh8-8OYRHFqEnijGoPp_IbawNY1JW_0pozXsE,50857
|
|
26
|
+
modal/billing.py,sha256=zmQ3bcCJlwa4KD1IA_QgdWpm1pn13c-7qfy79iEauYI,195
|
|
27
|
+
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
|
28
|
+
modal/client.py,sha256=CXnyJYLhY--xaCkjv3tpjYDca8AuXGQG1IiaXQVX4y4,14436
|
|
29
|
+
modal/client.pyi,sha256=cL-0qiU8AREPuoSWORpDQ_2-gQ4tzXOTiGDWNxDVaiE,14471
|
|
30
|
+
modal/cloud_bucket_mount.py,sha256=cvVj5Rt4nDHoQbTneoJPTaAcnl_Ab_mrsjnnzd0v9OI,6013
|
|
31
|
+
modal/cloud_bucket_mount.pyi,sha256=vXusGMOUk9HjCs4lhxteuCK4xLQclPfugGWKo7LECEA,7539
|
|
32
|
+
modal/cls.py,sha256=Cmqt1vOw0-01ktjJBOrdzvdyDbHpjKMTaZ2eEy_8YUE,41694
|
|
33
|
+
modal/cls.pyi,sha256=ZsJBwboZJ95wqgQUFi2VB6etbDXrmMPwJ61c-r8T2kY,27262
|
|
34
|
+
modal/config.py,sha256=JvNf4jr5xRLlFgIp4l38z1CJQyDxOHc_DnPOAYCJGvE,13516
|
|
35
|
+
modal/container_process.py,sha256=xMJ93EeBcI-BoGDv78-a0UEbvSza-ye_TFi5fpGAxbw,16777
|
|
36
|
+
modal/container_process.pyi,sha256=jyV3WIkTn2NsXqAFf5Jseciz2mdq_sjO9zQMoJnquIg,8211
|
|
37
|
+
modal/dict.py,sha256=9tyzgvLLribY5dJAC5n8_kiF5GNZTr0QD35LuEtYgC4,22664
|
|
38
|
+
modal/dict.pyi,sha256=1g6wUpLESOsSecE9oLiu61wg9wOhl5t1e0jX0qHqkJQ,32381
|
|
39
|
+
modal/environments.py,sha256=wMiMNpPkvIl_BdxRb81CY9Djzhczp_y4GEYKWp0JyBc,6135
|
|
40
|
+
modal/environments.pyi,sha256=bMIxvwahckgaolGD3-hP2iovRHDXewvgbVs_nx4ze0o,3808
|
|
41
|
+
modal/exception.py,sha256=T_yVtqe2B-fXy57qd-3Pk90nqGXq9T7FJElEEPHdC5g,10435
|
|
42
|
+
modal/file_io.py,sha256=dx90C5L8cQv2Z7pVVPaQmE0R3pUOGv2h-wn1qNNXbGQ,19818
|
|
43
|
+
modal/file_io.pyi,sha256=up9OhV2Y54n-X7nlfV6j_eBwJ8D2cNMEswZ1iddrEQw,15877
|
|
44
|
+
modal/file_pattern_matcher.py,sha256=A_Kdkej6q7YQyhM_2-BvpFmPqJ0oHb54B6yf9VqvPVE,8116
|
|
45
|
+
modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
|
|
46
|
+
modal/functions.pyi,sha256=fkjxeYAqh6sX9C84gjUGoLVgHT1IfNB_07h0fpmIyWw,36465
|
|
47
|
+
modal/gpu.py,sha256=Fe5ORvVPDIstSq1xjmM6OoNgLYFWvogP9r5BgmD3hYg,6769
|
|
48
|
+
modal/image.py,sha256=sPaYxx4Dwdod1FjVooDaDDcPbcyyBXY4ChpbQvWe5mc,108197
|
|
49
|
+
modal/image.pyi,sha256=UMwAaYu4feSDzJS9l-5xKYP_yaJm18bY_s3pREOQF6A,78249
|
|
50
|
+
modal/io_streams.py,sha256=g6H6QAl48qZtN5OY6WIIVwF9TXBj3jMNYCgn7RYYrVg,30697
|
|
51
|
+
modal/io_streams.pyi,sha256=aBxCcbHTprL08FLvPlkzu4bypCTT7xUdelNe5kc7OZY,18506
|
|
52
|
+
modal/mount.py,sha256=5ps0p8dik2McxetRfHakLouzOvBrQPYBFCUCrgNlXik,33856
|
|
53
|
+
modal/mount.pyi,sha256=ISBxzudOyLvw5r2LtzYm6Bh_wMUHrVAans8-u33k8cY,15721
|
|
54
|
+
modal/network_file_system.py,sha256=23GUYz2DZ5kCzlUrdWBq1siBse6fP_CeGt2Lo9xHkR8,13598
|
|
55
|
+
modal/network_file_system.pyi,sha256=oRQzPxSF3ZmY8BDtBFU3CCyGwPLl5jkobtN6ekexLog,16161
|
|
56
|
+
modal/object.py,sha256=bTeskuY8JFrESjU4_UL_nTwYlBQdOLmVaOX3X6EMxsg,164
|
|
57
|
+
modal/object.pyi,sha256=IiWqkhIVNryH9mbpOpZiG21W9UWW5T7l8gf98J3fVIk,10088
|
|
58
|
+
modal/output.py,sha256=q4T9uHduunj4NwY-YSwkHGgjZlCXMuJbfQ5UFaAGRAc,1968
|
|
59
|
+
modal/parallel_map.py,sha256=VAfhkgCKFXtpba01Dvq7kc-xg5nlP-AdvmJW0LoyfD8,68670
|
|
60
|
+
modal/parallel_map.pyi,sha256=CPX8c8sxCGjrMGFYdm6u8x28b9T2UnW96O2dRbiqWPI,15426
|
|
61
|
+
modal/partial_function.py,sha256=aIdlGfTjjgqY6Fpr-biCjvRU9W542_S5N2xkNN_rYGM,1127
|
|
62
|
+
modal/partial_function.pyi,sha256=ESpPy_ziWJSI6zX0aaiN6oglpx8USmeMO_z27isXaIY,13996
|
|
63
|
+
modal/proxy.py,sha256=zIe_ZMAeRu9dgU9FKwZqpvCFTNwLLwIC0Vra4ZZfz1I,1737
|
|
64
|
+
modal/proxy.pyi,sha256=05HihJqRRJydYQSjLMYs9-mxdvzq4OUpKg3PAfrBppo,1597
|
|
65
|
+
modal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
66
|
+
modal/queue.py,sha256=DGqXKEY0B4yyV_bN_XSmwIM50T9VZLu6RYzH_hh-KRg,25719
|
|
67
|
+
modal/queue.pyi,sha256=EtdH62gzf3o_s831FH2dir5Bxoif7YtJjx-cnjmbGcg,37866
|
|
68
|
+
modal/retries.py,sha256=IvNLDM0f_GLUDD5VgEDoN09C88yoxSrCquinAuxT1Sc,5205
|
|
69
|
+
modal/runner.py,sha256=T-QUi4IykPxCu6TqzJtBdqQvwiIuysstaAL01SEQ9tA,25592
|
|
70
|
+
modal/runner.pyi,sha256=HYBi04nUrZN9-L-cTlvDDHFiJS-N6M3usKk1_QzGnpc,8736
|
|
71
|
+
modal/running_app.py,sha256=v61mapYNV1-O-Uaho5EfJlryMLvIT9We0amUOSvSGx8,1188
|
|
72
|
+
modal/sandbox.py,sha256=qmtpyUxtVPjNNiaCoIHZW9fic0Wq2sGTDdrD2Q4uHNI,50811
|
|
73
|
+
modal/sandbox.pyi,sha256=B7VwuwumUuvVDxwHFPAmJFmxXGUOfdwJTUxBRBFLIv0,57454
|
|
74
|
+
modal/schedule.py,sha256=ng0g0AqNY5GQI9KhkXZQ5Wam5G42glbkqVQsNpBtbDE,3078
|
|
75
|
+
modal/scheduler_placement.py,sha256=BAREdOY5HzHpzSBqt6jDVR6YC_jYfHMVqOzkyqQfngU,1235
|
|
76
|
+
modal/secret.py,sha256=XOHgwhjPJpzsIe7eo3DGAQ66hvyepc232UEEAREnjtk,18203
|
|
77
|
+
modal/secret.pyi,sha256=wzGS_qOE0YwmoXvxWT5FyzKlTYS4wPFblbqDSuXRnoY,21016
|
|
78
|
+
modal/serving.py,sha256=rfzj23Q4hPSMpc3vj_cQg3awkZULu4hLtRs83cOEB-w,4291
|
|
79
|
+
modal/serving.pyi,sha256=eNqF_bhO_JQ0EDpqvSjSUdNs48vv7AcPXinp7GEs5wI,1966
|
|
80
|
+
modal/snapshot.py,sha256=vIKxA1XRRsH8cFcpSUqC9M8NccKIaYaDpmiEC2clNks,2297
|
|
81
|
+
modal/snapshot.pyi,sha256=vMYDx1s9Ds4qtH-PXgB_9RzVuS5wsTchVcclR5Q-mmM,2014
|
|
82
|
+
modal/stream_type.py,sha256=A6320qoAAWhEfwOCZfGtymQTu5AfLfJXXgARqooTPvY,417
|
|
83
|
+
modal/token_flow.py,sha256=tLvBE9OT50p8AnYYh4b5MvBMQc1vV1-6C0GsmyFDfxw,7626
|
|
84
|
+
modal/token_flow.pyi,sha256=xxMmxKU2_Z8aLhQazqhnBng8PVPKaPgZXKnUuS5WykI,2406
|
|
85
|
+
modal/volume.py,sha256=vej3tMfs0ayarcp2Y3wsDnStJdnQ6u2U8VKYQi7YTn8,52733
|
|
86
|
+
modal/volume.pyi,sha256=lrfm3p_IvWysX0OItHpsti7v9yJN1JA1XtGQrXOT1AM,53915
|
|
87
|
+
modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
|
88
|
+
modal/_runtime/asgi.py,sha256=AOcduIlijmlxhXVWo7AIUhigo-bqm6nDkHj4Q4JLy6o,22607
|
|
89
|
+
modal/_runtime/container_io_manager.py,sha256=EQF1aAtzb0A2chhr0B8es_G0rawbBUKZaFu0-p6dsQU,52102
|
|
90
|
+
modal/_runtime/container_io_manager.pyi,sha256=qwnmErhulV_2OYRWbw8wM3vw6r2Pub1W98NccrKrXaY,22701
|
|
91
|
+
modal/_runtime/execution_context.py,sha256=AYrNQRHHXEqX2MwMf8zxelKZnYf25RE_B-NRLWf93n8,3521
|
|
92
|
+
modal/_runtime/execution_context.pyi,sha256=FVzakehz72ndL-ufe8-EC7TM4IHO_MEBcAdgWuU4W9k,2426
|
|
93
|
+
modal/_runtime/gpu_memory_snapshot.py,sha256=vRLzSVZckD7xYjahrXlRPExuoOdDwTTKIaEMsWDTrzM,12113
|
|
94
|
+
modal/_runtime/telemetry.py,sha256=T1RoAGyjBDr1swiM6pPsGRSITm7LI5FDK18oNXxY08U,5163
|
|
95
|
+
modal/_runtime/user_code_event_loop.py,sha256=HwOuDyCZLOakr_DG7p2MrcscjSQNheIhBBuLgB5I3Cc,3014
|
|
96
|
+
modal/_runtime/user_code_imports.py,sha256=_6uHDfTpqCcspHpgjNV14uMyiGdWkAHU7zqHfUx9uzU,25997
|
|
97
|
+
modal/_utils/__init__.py,sha256=waLjl5c6IPDhSsdWAm9Bji4e2PVxamYABKAze6CHVXY,28
|
|
98
|
+
modal/_utils/app_utils.py,sha256=88BT4TPLWfYAQwKTHcyzNQRHg8n9B-QE2UyJs96iV-0,108
|
|
99
|
+
modal/_utils/async_utils.py,sha256=2KQs7W2OwU6-5wxCoYbkt8_sLocDDQSyyBbb1gulZ20,43322
|
|
100
|
+
modal/_utils/auth_token_manager.py,sha256=QsDokl1c1dN9m6Z9N-Se-8cY3laphByjJtNdRXUTieI,5151
|
|
101
|
+
modal/_utils/blob_utils.py,sha256=LIWNN7w0ma5IG1rP3gaOrn6YKcGTXMbI1_rSpJay8pY,23147
|
|
102
|
+
modal/_utils/bytes_io_segment_payload.py,sha256=vaXPq8b52-x6G2hwE7SrjS58pg_aRm7gV3bn3yjmTzQ,4261
|
|
103
|
+
modal/_utils/deprecation.py,sha256=-Bgg7jZdcJU8lROy18YyVnQYbM8hue-hVmwJqlWAGH0,5504
|
|
104
|
+
modal/_utils/docker_utils.py,sha256=h1uETghR40mp_y3fSWuZAfbIASH1HMzuphJHghAL6DU,3722
|
|
105
|
+
modal/_utils/function_utils.py,sha256=uoOcn_pyl6fOVHr_Q6ci1_5eJqo90so7G9izfs-T-As,28272
|
|
106
|
+
modal/_utils/git_utils.py,sha256=qtUU6JAttF55ZxYq51y55OR58B0tDPZsZWK5dJe6W5g,3182
|
|
107
|
+
modal/_utils/grpc_testing.py,sha256=fZLyfMA5VYmIo-dUCcKQrVCH3ZKPT7K4_6ww373jt0Y,8697
|
|
108
|
+
modal/_utils/grpc_utils.py,sha256=8KxNd8M8ziVTc-FB2mkmesBG9hscJScjjL0VIUB4T8k,16270
|
|
109
|
+
modal/_utils/hash_utils.py,sha256=zg3J6OGxTFGSFri1qQ12giDz90lWk8bzaxCTUCRtiX4,3034
|
|
110
|
+
modal/_utils/http_utils.py,sha256=yeTFsXYr0rYMEhB7vBP7audG9Uc7OLhzKBANFDZWVt0,2451
|
|
111
|
+
modal/_utils/jwt_utils.py,sha256=fxH9plyrbAemTbjSsQtzIdDXE9QXxvMC4DiUZ16G0aA,1360
|
|
112
|
+
modal/_utils/logger.py,sha256=NgbMKFT9chYYt_TU01DdIior5ByYr2gZtrWIk1SFRLc,1782
|
|
113
|
+
modal/_utils/mount_utils.py,sha256=3v6wbSvEjOhIlnLGbyXKOzdoXaG-FwNAZ_Rr0io_v2o,4113
|
|
114
|
+
modal/_utils/name_utils.py,sha256=CIQL0Y4z47tq0rfNL2Kdo5dxsGrxoN2hR9Ko0HapeE4,2517
|
|
115
|
+
modal/_utils/package_utils.py,sha256=jYE7WFVzYWIfO0ZJhno_BYHb6Skp48uupOiw1a3yWzw,2056
|
|
116
|
+
modal/_utils/pattern_utils.py,sha256=ZUffaECfe2iYBhH6cvCB-0-UWhmEBTZEl_TwG_So3ag,6714
|
|
117
|
+
modal/_utils/rand_pb_testing.py,sha256=oNtQB1BY9CDh7vDXEkJitCuCu9a2ufk0KRcEuZ15d0k,4229
|
|
118
|
+
modal/_utils/shell_utils.py,sha256=hWHzv730Br2Xyj6cGPiMZ-198Z3RZuOu3pDXhFSZ22c,2157
|
|
119
|
+
modal/_utils/task_command_router_client.py,sha256=-5ZYVBZj0mQLA2Nul2o_XSEM5xV0hrzLziP4v6SZPiI,23219
|
|
120
|
+
modal/_utils/time_utils.py,sha256=43tpFVwT7ykOjlETIFLVt9auMsRZqYYRYBEKxGCrRSA,1212
|
|
121
|
+
modal/_vendor/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
|
122
|
+
modal/_vendor/a2wsgi_wsgi.py,sha256=Q1AsjpV_Q_vzQsz_cSqmP9jWzsGsB-ARFU6vpQYml8k,21878
|
|
123
|
+
modal/_vendor/cloudpickle.py,sha256=N0PN-AwRn3GWGVWBdr1rYcgKVzLOk66oz0hBSjocG4o,59166
|
|
124
|
+
modal/_vendor/tblib.py,sha256=g1O7QUDd3sDoLd8YPFltkXkih7r_fyZOjgmGuligv3s,9722
|
|
125
|
+
modal/builder/2023.12.312.txt,sha256=zWWUVgVQ92GXBKNYYr2-5vn9rlnXcmkqlwlX5u1eTYw,400
|
|
126
|
+
modal/builder/2023.12.txt,sha256=OjsbXFkCSdkzzryZP82Q73osr5wxQ6EUzmGcK7twfkA,502
|
|
127
|
+
modal/builder/2024.04.txt,sha256=6NnrbIE-mflwMyKyQ0tsWeY8XFE1kSW9oE8DVDoD8QU,544
|
|
128
|
+
modal/builder/2024.10.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddRo,296
|
|
129
|
+
modal/builder/2025.06.txt,sha256=Ml51O7e_6GXpgYHI3Vn4c7N4xAYbaThAF-i31BqwdAk,532
|
|
130
|
+
modal/builder/PREVIEW.txt,sha256=ScSScM_BQcdcfTUJB2pMUyNw4_krm4pYkoZfMuxMRVk,393
|
|
131
|
+
modal/builder/README.md,sha256=9tK76KP0Uph7O0M5oUgsSwEZDj5y-dcUPsnpR0Sc-Ik,854
|
|
132
|
+
modal/builder/base-images.json,sha256=9zgY2-a2U_iEBBe60VNLQvErJQosRhQuXXRqcG6mHGg,1348
|
|
133
|
+
modal/cli/__init__.py,sha256=6FRleWQxBDT19y7OayO4lBOzuL6Bs9r0rLINYYYbHwQ,769
|
|
134
|
+
modal/cli/_download.py,sha256=_Q_CG1Qb4cjVSAwHGGPOPoNTsmK9gHvF-HNWCNdFjaY,4900
|
|
135
|
+
modal/cli/_traceback.py,sha256=IKj9xtc6LjAxyhGJWolNIXEX3MhAIulnRqywZNOFmkU,7324
|
|
136
|
+
modal/cli/app.py,sha256=rbuAG92my-1eZN0olk6p2eD4oBnyBliUsrCOUW-U-9k,7832
|
|
137
|
+
modal/cli/cluster.py,sha256=BLcKDpwpDmlqE2UC4V0qNpJKiQ-ZXfI9g_SE7u6vnIU,3347
|
|
138
|
+
modal/cli/config.py,sha256=7xgglsSf5pKfE7ZLz-uZf9S11NBuNbUkUbcZ5nFk8Y0,1721
|
|
139
|
+
modal/cli/container.py,sha256=meFH-T_Bdyd7a9HjClzGCgYuPq0KhWs_HUUsSW12HjM,3686
|
|
140
|
+
modal/cli/dict.py,sha256=8aVWjxdmsPznYNMNYYkKHtrJSEREGc_H21g1hTHa0FM,4686
|
|
141
|
+
modal/cli/entry_point.py,sha256=aaofRsA9c4s68CVbXehzmLilJWLBUL2DXLh--lTVYRQ,5816
|
|
142
|
+
modal/cli/environment.py,sha256=AKgtjzFkTxAOlWAZC6uHsZro_y2jfeugL0r8bXHw4Ic,3904
|
|
143
|
+
modal/cli/import_refs.py,sha256=X59Z5JwgliRO6C-cIFto2Pr7o3SwlZMKQPKA0aI4ZK4,13927
|
|
144
|
+
modal/cli/launch.py,sha256=1inePjuiqV3HHwk0H-Lk-UAxhkoodCwFoRswD_dat2U,3840
|
|
145
|
+
modal/cli/network_file_system.py,sha256=AOT24KkYEM3YaHIPIZGe8SsA4-mDyj50o9HNwDsHiaE,7664
|
|
146
|
+
modal/cli/profile.py,sha256=g8X6tFFK9ccKyu2he9Yu19WLSLNdztzECgmIV__XJFs,3257
|
|
147
|
+
modal/cli/queues.py,sha256=S5dqk6lEd_2fJolHqoN9iRs6EkeTa0k7KqJWBBGS23k,6170
|
|
148
|
+
modal/cli/run.py,sha256=j0NJqxZrfPikpuIjLtQV9dwi2GK3rUHcr6_BJabZXBQ,18728
|
|
149
|
+
modal/cli/secret.py,sha256=zkCztov8c4x8CI8G0EoyieUfv9XLQQtVXV8xeMLK-Os,8044
|
|
150
|
+
modal/cli/shell.py,sha256=L5Dw8yeuu9-f6vNlBGbUT4oh9AVSK4GuB5J6m6vYLBk,12613
|
|
151
|
+
modal/cli/token.py,sha256=NAmQzKBfEHkcldWKeFxAVIqQBoo1RTp7_A4yc7-8qM0,1911
|
|
152
|
+
modal/cli/utils.py,sha256=d7J4j29b6bsj2GqYe3QdqgHpO-QkxcjtF9YnRCYxVIg,2879
|
|
153
|
+
modal/cli/volume.py,sha256=8_wjfaFmtcPrIYx46__CbCefaSLPJ14nlm6iCLz_HOA,10512
|
|
154
|
+
modal/cli/programs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
|
155
|
+
modal/cli/programs/run_jupyter.py,sha256=IJw8nds8Cjl9j4dxBqMGxhz-bIyVX0kle7jbt8HFOhM,2688
|
|
156
|
+
modal/cli/programs/vscode.py,sha256=E1aJPU7b8RWWj-JX71DifsCoLYsCAnre7lATiBJjUms,3386
|
|
157
|
+
modal/experimental/__init__.py,sha256=GOuo3t4-Le0ZVddiHIOw0MQxkdTJge-bVbhDvgnblmQ,14573
|
|
158
|
+
modal/experimental/flash.py,sha256=GJZwSr-4OHlP6gCIZdcbsSb8D8WX9xJwMphjwcfsRoU,31262
|
|
159
|
+
modal/experimental/flash.pyi,sha256=W62a0AhmLUuH9a0n8Y3-DYhyEEFH3-bRUQFphOQfKHg,16418
|
|
160
|
+
modal/experimental/ipython.py,sha256=TrCfmol9LGsRZMeDoeMPx3Hv3BFqQhYnmD_iH0pqdhk,2904
|
|
161
|
+
modal-1.3.1.dev8.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
|
162
|
+
modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
|
163
|
+
modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
|
|
164
|
+
modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
|
|
165
|
+
modal_docs/mdmd/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
|
166
|
+
modal_docs/mdmd/mdmd.py,sha256=tUTImNd4UMFk1opkaw8J672gX8AkBO5gbY2S_NMxsxs,7140
|
|
167
|
+
modal_docs/mdmd/signatures.py,sha256=XJaZrK7Mdepk5fdX51A8uENiLFNil85Ud0d4MH8H5f0,3218
|
|
168
|
+
modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
|
169
|
+
modal_proto/api.proto,sha256=rCVrHKcB6QWjaALTGasjPr6En10CCWTWHSEYAMbkslk,111165
|
|
170
|
+
modal_proto/api_grpc.py,sha256=-8SHvPtalTAjQtRv7zzU7Z1VoDupoJs2ifG4gl_mF0s,134442
|
|
171
|
+
modal_proto/api_pb2.py,sha256=DfSnuy7cKJ6e6udu22xKoVQyoF0d0aod0U-_za9j7ZE,384579
|
|
172
|
+
modal_proto/api_pb2.pyi,sha256=4jfkVV0jZDsIVkoEaffdkRnrjwy_rxiYsy1LKAIKzzQ,543056
|
|
173
|
+
modal_proto/api_pb2_grpc.py,sha256=Hqw9jcbhpr-W6jsfog_tGU55ouZjITxGvA-DGNBqOLA,289714
|
|
174
|
+
modal_proto/api_pb2_grpc.pyi,sha256=QLJ58ANCx147HeGJva58h0MTCLIDs9JmVjrx8bDdwlg,67776
|
|
175
|
+
modal_proto/modal_api_grpc.py,sha256=MqaBZB2ZqYj6XTIgI_p5dOPjt9gKT4pAJNd_WXR3W84,21295
|
|
176
|
+
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
177
|
+
modal_proto/task_command_router.proto,sha256=oyHT02Ck7jrBe55s4ge5f2ko58-2sg3gZ-xEvvn5bXU,5620
|
|
178
|
+
modal_proto/task_command_router_grpc.py,sha256=_K9lOLOB_pyT8-XvGnicgAIW1aLVFTqQISmP7Q1x4e8,6962
|
|
179
|
+
modal_proto/task_command_router_pb2.py,sha256=2Y8wRvnq4_7RiQ-5ZAPIgXaxrHv_MXzgS5wyWVJmQTo,13107
|
|
180
|
+
modal_proto/task_command_router_pb2.pyi,sha256=yI4tFteErLlonFA2HyaWtONfhY_VGSe7KCWFIspvmkE,16323
|
|
181
|
+
modal_proto/task_command_router_pb2_grpc.py,sha256=q2VWfK2-4uDcPaPLhAqPZkgxhuQRYnWmwUcnEbPbGuk,13895
|
|
182
|
+
modal_proto/task_command_router_pb2_grpc.pyi,sha256=e1MM10VGUgDkm041v53QeTglGQPzTpA0FUsFtezjp74,4536
|
|
183
|
+
modal_version/__init__.py,sha256=09igZ6kO7zTS-MQTRIsbU4NSUdt5oJIlPZx-kYGhH2M,120
|
|
184
|
+
modal_version/__main__.py,sha256=nLUbubxKx7GXNzJIkTB7M7_u8080LyLM0IS0rzFkC_c,119
|
|
185
|
+
modal-1.3.1.dev8.dist-info/METADATA,sha256=4FYfdjmdPWtRcLeH4ChhNszpN9QQ_f1Lz3nJbuuOK2Y,2581
|
|
186
|
+
modal-1.3.1.dev8.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
|
187
|
+
modal-1.3.1.dev8.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
|
188
|
+
modal-1.3.1.dev8.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
|
189
|
+
modal-1.3.1.dev8.dist-info/RECORD,,
|