modal 1.1.3.dev7__py3-none-any.whl → 1.1.4__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/_clustered_functions.py +3 -0
- modal/_clustered_functions.pyi +3 -2
- modal/_functions.py +11 -0
- modal/_runtime/asgi.py +1 -1
- modal/_utils/grpc_utils.py +1 -0
- modal/app.py +6 -2
- modal/app.pyi +4 -0
- modal/builder/2025.06.txt +1 -0
- modal/builder/PREVIEW.txt +1 -0
- modal/client.pyi +2 -10
- modal/cls.py +6 -1
- modal/cls.pyi +16 -0
- modal/experimental/__init__.py +2 -1
- modal/experimental/flash.py +183 -23
- modal/experimental/flash.pyi +83 -9
- modal/functions.pyi +18 -6
- modal/image.py +8 -2
- modal/image.pyi +16 -4
- modal/mount.py +17 -11
- modal/mount.pyi +4 -0
- modal/parallel_map.py +26 -6
- modal/parallel_map.pyi +1 -0
- modal/sandbox.py +31 -4
- modal/sandbox.pyi +12 -3
- {modal-1.1.3.dev7.dist-info → modal-1.1.4.dist-info}/METADATA +1 -1
- {modal-1.1.3.dev7.dist-info → modal-1.1.4.dist-info}/RECORD +38 -38
- modal_proto/api.proto +30 -0
- modal_proto/api_grpc.py +32 -0
- modal_proto/api_pb2.py +893 -853
- modal_proto/api_pb2.pyi +94 -5
- modal_proto/api_pb2_grpc.py +68 -1
- modal_proto/api_pb2_grpc.pyi +25 -3
- modal_proto/modal_api_grpc.py +2 -0
- modal_version/__init__.py +1 -1
- {modal-1.1.3.dev7.dist-info → modal-1.1.4.dist-info}/WHEEL +0 -0
- {modal-1.1.3.dev7.dist-info → modal-1.1.4.dist-info}/entry_points.txt +0 -0
- {modal-1.1.3.dev7.dist-info → modal-1.1.4.dist-info}/licenses/LICENSE +0 -0
- {modal-1.1.3.dev7.dist-info → modal-1.1.4.dist-info}/top_level.txt +0 -0
modal/sandbox.pyi
CHANGED
@@ -26,6 +26,7 @@ import typing
|
|
26
26
|
import typing_extensions
|
27
27
|
|
28
28
|
def _validate_exec_args(args: collections.abc.Sequence[str]) -> None: ...
|
29
|
+
def _warn_if_invalid_name(name: str) -> None: ...
|
29
30
|
|
30
31
|
class DefaultSandboxNameOverride(str):
|
31
32
|
"""A singleton class that represents the default sandbox name override.
|
@@ -60,6 +61,7 @@ class _Sandbox(modal._object._Object):
|
|
60
61
|
secrets: collections.abc.Sequence[modal.secret._Secret],
|
61
62
|
name: typing.Optional[str] = None,
|
62
63
|
timeout: int = 300,
|
64
|
+
idle_timeout: typing.Optional[int] = None,
|
63
65
|
workdir: typing.Optional[str] = None,
|
64
66
|
gpu: typing.Union[None, str, modal.gpu._GPUConfig] = None,
|
65
67
|
cloud: typing.Optional[str] = None,
|
@@ -96,6 +98,7 @@ class _Sandbox(modal._object._Object):
|
|
96
98
|
secrets: collections.abc.Sequence[modal.secret._Secret] = (),
|
97
99
|
network_file_systems: dict[typing.Union[str, os.PathLike], modal.network_file_system._NetworkFileSystem] = {},
|
98
100
|
timeout: int = 300,
|
101
|
+
idle_timeout: typing.Optional[int] = None,
|
99
102
|
workdir: typing.Optional[str] = None,
|
100
103
|
gpu: typing.Union[None, str, modal.gpu._GPUConfig] = None,
|
101
104
|
cloud: typing.Optional[str] = None,
|
@@ -145,6 +148,7 @@ class _Sandbox(modal._object._Object):
|
|
145
148
|
mounts: collections.abc.Sequence[modal.mount._Mount] = (),
|
146
149
|
network_file_systems: dict[typing.Union[str, os.PathLike], modal.network_file_system._NetworkFileSystem] = {},
|
147
150
|
timeout: int = 300,
|
151
|
+
idle_timeout: typing.Optional[int] = None,
|
148
152
|
workdir: typing.Optional[str] = None,
|
149
153
|
gpu: typing.Union[None, str, modal.gpu._GPUConfig] = None,
|
150
154
|
cloud: typing.Optional[str] = None,
|
@@ -177,7 +181,7 @@ class _Sandbox(modal._object._Object):
|
|
177
181
|
environment_name: typing.Optional[str] = None,
|
178
182
|
client: typing.Optional[modal.client._Client] = None,
|
179
183
|
) -> _Sandbox:
|
180
|
-
"""Get a running Sandbox by name from
|
184
|
+
"""Get a running Sandbox by name from a deployed App.
|
181
185
|
|
182
186
|
Raises a modal.exception.NotFoundError if no running sandbox is found with the given name.
|
183
187
|
A Sandbox's name is the `name` argument passed to `Sandbox.create`.
|
@@ -370,6 +374,7 @@ class Sandbox(modal.object.Object):
|
|
370
374
|
secrets: collections.abc.Sequence[modal.secret.Secret],
|
371
375
|
name: typing.Optional[str] = None,
|
372
376
|
timeout: int = 300,
|
377
|
+
idle_timeout: typing.Optional[int] = None,
|
373
378
|
workdir: typing.Optional[str] = None,
|
374
379
|
gpu: typing.Union[None, str, modal.gpu._GPUConfig] = None,
|
375
380
|
cloud: typing.Optional[str] = None,
|
@@ -409,6 +414,7 @@ class Sandbox(modal.object.Object):
|
|
409
414
|
typing.Union[str, os.PathLike], modal.network_file_system.NetworkFileSystem
|
410
415
|
] = {},
|
411
416
|
timeout: int = 300,
|
417
|
+
idle_timeout: typing.Optional[int] = None,
|
412
418
|
workdir: typing.Optional[str] = None,
|
413
419
|
gpu: typing.Union[None, str, modal.gpu._GPUConfig] = None,
|
414
420
|
cloud: typing.Optional[str] = None,
|
@@ -460,6 +466,7 @@ class Sandbox(modal.object.Object):
|
|
460
466
|
typing.Union[str, os.PathLike], modal.network_file_system.NetworkFileSystem
|
461
467
|
] = {},
|
462
468
|
timeout: int = 300,
|
469
|
+
idle_timeout: typing.Optional[int] = None,
|
463
470
|
workdir: typing.Optional[str] = None,
|
464
471
|
gpu: typing.Union[None, str, modal.gpu._GPUConfig] = None,
|
465
472
|
cloud: typing.Optional[str] = None,
|
@@ -515,6 +522,7 @@ class Sandbox(modal.object.Object):
|
|
515
522
|
typing.Union[str, os.PathLike], modal.network_file_system.NetworkFileSystem
|
516
523
|
] = {},
|
517
524
|
timeout: int = 300,
|
525
|
+
idle_timeout: typing.Optional[int] = None,
|
518
526
|
workdir: typing.Optional[str] = None,
|
519
527
|
gpu: typing.Union[None, str, modal.gpu._GPUConfig] = None,
|
520
528
|
cloud: typing.Optional[str] = None,
|
@@ -551,6 +559,7 @@ class Sandbox(modal.object.Object):
|
|
551
559
|
typing.Union[str, os.PathLike], modal.network_file_system.NetworkFileSystem
|
552
560
|
] = {},
|
553
561
|
timeout: int = 300,
|
562
|
+
idle_timeout: typing.Optional[int] = None,
|
554
563
|
workdir: typing.Optional[str] = None,
|
555
564
|
gpu: typing.Union[None, str, modal.gpu._GPUConfig] = None,
|
556
565
|
cloud: typing.Optional[str] = None,
|
@@ -589,7 +598,7 @@ class Sandbox(modal.object.Object):
|
|
589
598
|
environment_name: typing.Optional[str] = None,
|
590
599
|
client: typing.Optional[modal.client.Client] = None,
|
591
600
|
) -> Sandbox:
|
592
|
-
"""Get a running Sandbox by name from
|
601
|
+
"""Get a running Sandbox by name from a deployed App.
|
593
602
|
|
594
603
|
Raises a modal.exception.NotFoundError if no running sandbox is found with the given name.
|
595
604
|
A Sandbox's name is the `name` argument passed to `Sandbox.create`.
|
@@ -605,7 +614,7 @@ class Sandbox(modal.object.Object):
|
|
605
614
|
environment_name: typing.Optional[str] = None,
|
606
615
|
client: typing.Optional[modal.client.Client] = None,
|
607
616
|
) -> Sandbox:
|
608
|
-
"""Get a running Sandbox by name from
|
617
|
+
"""Get a running Sandbox by name from a deployed App.
|
609
618
|
|
610
619
|
Raises a modal.exception.NotFoundError if no running sandbox is found with the given name.
|
611
620
|
A Sandbox's name is the `name` argument passed to `Sandbox.create`.
|
@@ -1,9 +1,9 @@
|
|
1
1
|
modal/__init__.py,sha256=WMaRW-2IJRGA9ioNAaBhJYuyLvu-GS01L8wQD90fKBs,2682
|
2
2
|
modal/__main__.py,sha256=45H-GtwzaDfN-1nP4_HYvzN3s7AG_HXR4-ynrsjO_OI,2803
|
3
|
-
modal/_clustered_functions.py,sha256=
|
4
|
-
modal/_clustered_functions.pyi,sha256=
|
3
|
+
modal/_clustered_functions.py,sha256=Sy4Sf_17EO8OL-FUe8LYcm4hrqLyQFCssNhr3p0SroU,3013
|
4
|
+
modal/_clustered_functions.pyi,sha256=JmYwAGOLEnD5AF-gYF9O5tu-SgGjeoJz-X1j48b1Ijg,1157
|
5
5
|
modal/_container_entrypoint.py,sha256=a1HAQYh1gGpqHuhSw6AW7XDYHztbeYr5a8iNnfCnoks,29023
|
6
|
-
modal/_functions.py,sha256=
|
6
|
+
modal/_functions.py,sha256=JL6oB_uSTL6T3JCFrespKlbWmHdCQ66sspbQ9Ys1w88,89527
|
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,15 +18,15 @@ 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=
|
22
|
-
modal/app.pyi,sha256=
|
21
|
+
modal/app.py,sha256=F4baVULljFq0CwC_7U-EKNRNx7CYeWBKudjjYUuWc4U,48416
|
22
|
+
modal/app.pyi,sha256=AbXJCBkyt2rI_-M3VbTBYb32at0P6iRZuoC87xY_JrQ,43591
|
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=qLlYrBR7fMkrpPJamm_IHVhNkZqQgG2EU6GvjNvaISc,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
|
-
modal/cls.py,sha256=
|
29
|
-
modal/cls.pyi,sha256=
|
28
|
+
modal/cls.py,sha256=pTEO7pHjlO7taMbIqs4oI9ZZgKDJpVKyGkO5ZT0w6tQ,40934
|
29
|
+
modal/cls.pyi,sha256=C1eK-AkN-QaeXu0qmMZVgJmkb1tYAFS43iEG37takDs,28959
|
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
|
@@ -39,21 +39,21 @@ 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=
|
42
|
+
modal/functions.pyi,sha256=F3Dll-9c3d8c8NuJuEYICUEB-sa67uWU75L111npwbA,39404
|
43
43
|
modal/gpu.py,sha256=Fe5ORvVPDIstSq1xjmM6OoNgLYFWvogP9r5BgmD3hYg,6769
|
44
|
-
modal/image.py,sha256=
|
45
|
-
modal/image.pyi,sha256=
|
44
|
+
modal/image.py,sha256=nXN9k_6gApHFy8-Bk_XT2Zu3jsDsGVrC3QcuiDC4yRY,103543
|
45
|
+
modal/image.pyi,sha256=vKdb5PpYM8wcpq9PQegeVMjrPLzAipuV4q994NZiL84,69325
|
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
|
-
modal/mount.py,sha256=
|
49
|
-
modal/mount.pyi,sha256=
|
48
|
+
modal/mount.py,sha256=3WpYaaCBGLyawW2uhQzB4jXRBQEsuuRMxnCFsXSa9_k,37470
|
49
|
+
modal/mount.pyi,sha256=y4jbfYwvD4NsLIxP8i0sua_98kNRPk1w1YlRiHqgrdo,20580
|
50
50
|
modal/network_file_system.py,sha256=S5WhQEUv55u0YDpgeEQP-PGIcq2o1gJZVBHAO5vSR2Q,14933
|
51
51
|
modal/network_file_system.pyi,sha256=Td_IobHr84iLo_9LZKQ4tNdUB60yjX8QWBaFiUvhfi8,17685
|
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
|
@@ -65,8 +65,8 @@ modal/retries.py,sha256=IvNLDM0f_GLUDD5VgEDoN09C88yoxSrCquinAuxT1Sc,5205
|
|
65
65
|
modal/runner.py,sha256=ostdzYpQb-20tlD6dIq7bpWTkZkOhjJBNuMNektqnJA,24068
|
66
66
|
modal/runner.pyi,sha256=lbwLljm1cC8d6PcNvmYQhkE8501V9fg0bYqqKX6G4r4,8489
|
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=uqihD69r_hin4XEGBNUnO8hITkP856HviL3Y1xV6B6k,42164
|
69
|
+
modal/sandbox.pyi,sha256=mOyungHDDmUrg7jLmJpWuoUEbA4z6TUaVx291hndPmI,42049
|
70
70
|
modal/schedule.py,sha256=ng0g0AqNY5GQI9KhkXZQ5Wam5G42glbkqVQsNpBtbDE,3078
|
71
71
|
modal/scheduler_placement.py,sha256=BAREdOY5HzHpzSBqt6jDVR6YC_jYfHMVqOzkyqQfngU,1235
|
72
72
|
modal/secret.py,sha256=jcNJKc4ZB2nvAn7HJFawInqE-_7sbB43IWLZwyLBQ28,19308
|
@@ -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
|
@@ -100,7 +100,7 @@ modal/_utils/docker_utils.py,sha256=h1uETghR40mp_y3fSWuZAfbIASH1HMzuphJHghAL6DU,
|
|
100
100
|
modal/_utils/function_utils.py,sha256=NWoVg9UgUSS9RSfT9wQUDNcPMmZxjM68-Ch6u4Cp_hk,27481
|
101
101
|
modal/_utils/git_utils.py,sha256=qtUU6JAttF55ZxYq51y55OR58B0tDPZsZWK5dJe6W5g,3182
|
102
102
|
modal/_utils/grpc_testing.py,sha256=H1zHqthv19eGPJz2HKXDyWXWGSqO4BRsxah3L5Xaa8A,8619
|
103
|
-
modal/_utils/grpc_utils.py,sha256=
|
103
|
+
modal/_utils/grpc_utils.py,sha256=1dQgTvdHG9KSfyVTc26HhKjGnIDJpdDEJ0xZARklOrU,10205
|
104
104
|
modal/_utils/hash_utils.py,sha256=zg3J6OGxTFGSFri1qQ12giDz90lWk8bzaxCTUCRtiX4,3034
|
105
105
|
modal/_utils/http_utils.py,sha256=yeTFsXYr0rYMEhB7vBP7audG9Uc7OLhzKBANFDZWVt0,2451
|
106
106
|
modal/_utils/jwt_utils.py,sha256=fxH9plyrbAemTbjSsQtzIdDXE9QXxvMC4DiUZ16G0aA,1360
|
@@ -120,8 +120,8 @@ modal/builder/2023.12.312.txt,sha256=zWWUVgVQ92GXBKNYYr2-5vn9rlnXcmkqlwlX5u1eTYw
|
|
120
120
|
modal/builder/2023.12.txt,sha256=OjsbXFkCSdkzzryZP82Q73osr5wxQ6EUzmGcK7twfkA,502
|
121
121
|
modal/builder/2024.04.txt,sha256=6NnrbIE-mflwMyKyQ0tsWeY8XFE1kSW9oE8DVDoD8QU,544
|
122
122
|
modal/builder/2024.10.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddRo,296
|
123
|
-
modal/builder/2025.06.txt,sha256=
|
124
|
-
modal/builder/PREVIEW.txt,sha256=
|
123
|
+
modal/builder/2025.06.txt,sha256=XM4z76RPnrcbCx3o3sqXijWnumyOGiTCLGhKaaS4xz0,325
|
124
|
+
modal/builder/PREVIEW.txt,sha256=XM4z76RPnrcbCx3o3sqXijWnumyOGiTCLGhKaaS4xz0,325
|
125
125
|
modal/builder/README.md,sha256=9tK76KP0Uph7O0M5oUgsSwEZDj5y-dcUPsnpR0Sc-Ik,854
|
126
126
|
modal/builder/base-images.json,sha256=JYSDAgHTl-WrV_TZW5icY-IJEnbe2eQ4CZ_KN6EOZKU,1304
|
127
127
|
modal/cli/__init__.py,sha256=6FRleWQxBDT19y7OayO4lBOzuL6Bs9r0rLINYYYbHwQ,769
|
@@ -149,11 +149,11 @@ modal/cli/programs/launch_instance_ssh.py,sha256=GrwK_Vy8-7B4x5a6AqFaF7lqNVgu75J
|
|
149
149
|
modal/cli/programs/run_jupyter.py,sha256=44Lpvqk2l3hH-uOkmAOzw60NEsfB5uaRDWDKVshvQhs,2682
|
150
150
|
modal/cli/programs/run_marimo.py,sha256=HyZ2za0NYqg31-mGxFQxUIAJ3Q-jRaMocEwWwI5-cdw,2887
|
151
151
|
modal/cli/programs/vscode.py,sha256=KbTAaIXyQBVCDXxXjmBHmKpgXkUw0q4R4KkJvUjCYgk,3380
|
152
|
-
modal/experimental/__init__.py,sha256=
|
153
|
-
modal/experimental/flash.py,sha256=
|
154
|
-
modal/experimental/flash.pyi,sha256=
|
152
|
+
modal/experimental/__init__.py,sha256=aWDb1VO9s4D-5Ktw_kYQSqoCp1W8S7lhns-5l7S1l-8,15102
|
153
|
+
modal/experimental/flash.py,sha256=aP6ooKk5d1syKn895AzAp4utQMTuZkRjWJFwxZweNbM,27160
|
154
|
+
modal/experimental/flash.pyi,sha256=32bvUlolZHthplDJNXokmbjwb0RSOuXGCBpU6qfFPOk,13732
|
155
155
|
modal/experimental/ipython.py,sha256=TrCfmol9LGsRZMeDoeMPx3Hv3BFqQhYnmD_iH0pqdhk,2904
|
156
|
-
modal-1.1.
|
156
|
+
modal-1.1.4.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,13 +161,13 @@ 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=
|
165
|
-
modal_proto/api_grpc.py,sha256=
|
166
|
-
modal_proto/api_pb2.py,sha256=
|
167
|
-
modal_proto/api_pb2.pyi,sha256=
|
168
|
-
modal_proto/api_pb2_grpc.py,sha256=
|
169
|
-
modal_proto/api_pb2_grpc.pyi,sha256=
|
170
|
-
modal_proto/modal_api_grpc.py,sha256=
|
164
|
+
modal_proto/api.proto,sha256=9Vh3r3SjlJh2a9Eb6GwFYh2R6aCKV2-pEQXmVeOYkAE,105611
|
165
|
+
modal_proto/api_grpc.py,sha256=r1k5m9Z2brIWtkY59mPwAGSavhssStzmsSq_PEwkZWA,129564
|
166
|
+
modal_proto/api_pb2.py,sha256=M0DAllkbXBuQGnXEYiOaqzZoo5TQy0IS9DTHpzHNliU,370000
|
167
|
+
modal_proto/api_pb2.pyi,sha256=29iTBpyQozfgPuLuQmY_05PIx4PBJE7yQ-wpgmUrWz8,510035
|
168
|
+
modal_proto/api_pb2_grpc.py,sha256=ovaCh4weYl5r0XfX_2F2M2pn6XGH7Hl-BmVaIB62ssY,279448
|
169
|
+
modal_proto/api_pb2_grpc.pyi,sha256=q_S2ScjUjS2bonUnEBqwCXVRZUwEuO5jOD2eL9nw0Wc,65439
|
170
|
+
modal_proto/modal_api_grpc.py,sha256=E-5WMq82AVvtGRsmb7AqYzOz-cfqTOokp-QjaFaOhpo,19547
|
171
171
|
modal_proto/modal_options_grpc.py,sha256=qJ1cuwA54oRqrdTyPTbvfhFZYd9HhJKK5UCwt523r3Y,120
|
172
172
|
modal_proto/options.proto,sha256=zp9h5r61ivsp0XwEWwNBsVqNTbRA1VSY_UtN7sEcHtE,549
|
173
173
|
modal_proto/options_grpc.py,sha256=M18X3d-8F_cNYSVM3I25dUTO5rZ0rd-vCCfynfh13Nc,125
|
@@ -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=RAcGPupwBBn-srtcqhQt3Wlb8gDGkdqrEiery_OEQqk,115
|
180
180
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
181
|
-
modal-1.1.
|
182
|
-
modal-1.1.
|
183
|
-
modal-1.1.
|
184
|
-
modal-1.1.
|
185
|
-
modal-1.1.
|
181
|
+
modal-1.1.4.dist-info/METADATA,sha256=Tmfoa5WuRdLu0qKPeFaoCDwoOvAlcSSYBhMPfNUO5v8,2454
|
182
|
+
modal-1.1.4.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
183
|
+
modal-1.1.4.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
184
|
+
modal-1.1.4.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
185
|
+
modal-1.1.4.dist-info/RECORD,,
|
modal_proto/api.proto
CHANGED
@@ -644,6 +644,14 @@ message AutoscalerSettings {
|
|
644
644
|
optional uint32 scaledown_window = 5;
|
645
645
|
}
|
646
646
|
|
647
|
+
// Used for flash autoscaling
|
648
|
+
message AutoscalingMetrics {
|
649
|
+
double cpu_usage_percent = 1;
|
650
|
+
double memory_usage_percent = 2;
|
651
|
+
uint32 concurrent_requests = 3;
|
652
|
+
double timestamp = 4;
|
653
|
+
}
|
654
|
+
|
647
655
|
message BaseImage {
|
648
656
|
string image_id = 1;
|
649
657
|
string docker_tag = 2;
|
@@ -1235,6 +1243,8 @@ message EnvironmentListItem {
|
|
1235
1243
|
string webhook_suffix = 2;
|
1236
1244
|
double created_at = 3;
|
1237
1245
|
bool default = 4;
|
1246
|
+
bool is_managed = 5;
|
1247
|
+
string environment_id = 6;
|
1238
1248
|
}
|
1239
1249
|
|
1240
1250
|
message EnvironmentListResponse {
|
@@ -1471,6 +1481,8 @@ message Function {
|
|
1471
1481
|
string flash_service_label = 84;
|
1472
1482
|
|
1473
1483
|
bool enable_gpu_snapshot = 85; // GPU memory snapshotting (alpha)
|
1484
|
+
|
1485
|
+
uint32 startup_timeout_secs = 86;
|
1474
1486
|
}
|
1475
1487
|
|
1476
1488
|
message FunctionAsyncInvokeRequest {
|
@@ -1644,6 +1656,8 @@ message FunctionData {
|
|
1644
1656
|
|
1645
1657
|
repeated string flash_service_urls = 34;
|
1646
1658
|
string flash_service_label = 35;
|
1659
|
+
|
1660
|
+
uint32 startup_timeout_secs = 36;
|
1647
1661
|
}
|
1648
1662
|
|
1649
1663
|
message FunctionExtended {
|
@@ -1792,6 +1806,7 @@ message FunctionHandleMetadata {
|
|
1792
1806
|
optional string input_plane_region = 47;
|
1793
1807
|
// Use optional to ensure unset values default to None instead of 0
|
1794
1808
|
optional uint64 max_object_size_bytes = 48;
|
1809
|
+
repeated string _experimental_flash_urls = 49; // (Optional) urls for flash services
|
1795
1810
|
}
|
1796
1811
|
|
1797
1812
|
message FunctionInput {
|
@@ -2027,6 +2042,10 @@ message ImageContextFile {
|
|
2027
2042
|
bytes data = 2;
|
2028
2043
|
}
|
2029
2044
|
|
2045
|
+
message ImageDeleteRequest {
|
2046
|
+
string image_id = 1;
|
2047
|
+
}
|
2048
|
+
|
2030
2049
|
message ImageFromIdRequest {
|
2031
2050
|
string image_id = 1;
|
2032
2051
|
}
|
@@ -3030,6 +3049,14 @@ message TaskCurrentInputsResponse {
|
|
3030
3049
|
repeated string input_ids = 1;
|
3031
3050
|
}
|
3032
3051
|
|
3052
|
+
message TaskGetAutoscalingMetricsRequest {
|
3053
|
+
string task_id = 1;
|
3054
|
+
}
|
3055
|
+
|
3056
|
+
message TaskGetAutoscalingMetricsResponse {
|
3057
|
+
AutoscalingMetrics metrics = 1;
|
3058
|
+
}
|
3059
|
+
|
3033
3060
|
message TaskInfo {
|
3034
3061
|
string id = 1;
|
3035
3062
|
double started_at = 2;
|
@@ -3072,6 +3099,7 @@ message TaskLogsBatch {
|
|
3072
3099
|
bool eof = 14;
|
3073
3100
|
string pty_exec_id = 15; // Used for interactive functions
|
3074
3101
|
string root_function_id = 16;
|
3102
|
+
uint32 ttl_days = 17;
|
3075
3103
|
}
|
3076
3104
|
|
3077
3105
|
message TaskProgress {
|
@@ -3539,6 +3567,7 @@ service ModalClient {
|
|
3539
3567
|
rpc FunctionUpdateSchedulingParams(FunctionUpdateSchedulingParamsRequest) returns (FunctionUpdateSchedulingParamsResponse);
|
3540
3568
|
|
3541
3569
|
// Images
|
3570
|
+
rpc ImageDelete(ImageDeleteRequest) returns (google.protobuf.Empty);
|
3542
3571
|
rpc ImageFromId(ImageFromIdRequest) returns (ImageFromIdResponse);
|
3543
3572
|
rpc ImageGetOrCreate(ImageGetOrCreateRequest) returns (ImageGetOrCreateResponse);
|
3544
3573
|
rpc ImageJoinStreaming(ImageJoinStreamingRequest) returns (stream ImageJoinStreamingResponse);
|
@@ -3614,6 +3643,7 @@ service ModalClient {
|
|
3614
3643
|
// Tasks
|
3615
3644
|
rpc TaskClusterHello(TaskClusterHelloRequest) returns (TaskClusterHelloResponse);
|
3616
3645
|
rpc TaskCurrentInputs(google.protobuf.Empty) returns (TaskCurrentInputsResponse);
|
3646
|
+
rpc TaskGetAutoscalingMetrics(TaskGetAutoscalingMetricsRequest) returns (TaskGetAutoscalingMetricsResponse); // Used for flash autoscaling
|
3617
3647
|
rpc TaskList(TaskListRequest) returns (TaskListResponse);
|
3618
3648
|
rpc TaskResult(TaskResultRequest) returns (google.protobuf.Empty);
|
3619
3649
|
|
modal_proto/api_grpc.py
CHANGED
@@ -358,6 +358,10 @@ class ModalClientBase(abc.ABC):
|
|
358
358
|
async def FunctionUpdateSchedulingParams(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.FunctionUpdateSchedulingParamsRequest, modal_proto.api_pb2.FunctionUpdateSchedulingParamsResponse]') -> None:
|
359
359
|
pass
|
360
360
|
|
361
|
+
@abc.abstractmethod
|
362
|
+
async def ImageDelete(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.ImageDeleteRequest, google.protobuf.empty_pb2.Empty]') -> None:
|
363
|
+
pass
|
364
|
+
|
361
365
|
@abc.abstractmethod
|
362
366
|
async def ImageFromId(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.ImageFromIdRequest, modal_proto.api_pb2.ImageFromIdResponse]') -> None:
|
363
367
|
pass
|
@@ -586,6 +590,10 @@ class ModalClientBase(abc.ABC):
|
|
586
590
|
async def TaskCurrentInputs(self, stream: 'grpclib.server.Stream[google.protobuf.empty_pb2.Empty, modal_proto.api_pb2.TaskCurrentInputsResponse]') -> None:
|
587
591
|
pass
|
588
592
|
|
593
|
+
@abc.abstractmethod
|
594
|
+
async def TaskGetAutoscalingMetrics(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.TaskGetAutoscalingMetricsRequest, modal_proto.api_pb2.TaskGetAutoscalingMetricsResponse]') -> None:
|
595
|
+
pass
|
596
|
+
|
589
597
|
@abc.abstractmethod
|
590
598
|
async def TaskList(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.TaskListRequest, modal_proto.api_pb2.TaskListResponse]') -> None:
|
591
599
|
pass
|
@@ -1194,6 +1202,12 @@ class ModalClientBase(abc.ABC):
|
|
1194
1202
|
modal_proto.api_pb2.FunctionUpdateSchedulingParamsRequest,
|
1195
1203
|
modal_proto.api_pb2.FunctionUpdateSchedulingParamsResponse,
|
1196
1204
|
),
|
1205
|
+
'/modal.client.ModalClient/ImageDelete': grpclib.const.Handler(
|
1206
|
+
self.ImageDelete,
|
1207
|
+
grpclib.const.Cardinality.UNARY_UNARY,
|
1208
|
+
modal_proto.api_pb2.ImageDeleteRequest,
|
1209
|
+
google.protobuf.empty_pb2.Empty,
|
1210
|
+
),
|
1197
1211
|
'/modal.client.ModalClient/ImageFromId': grpclib.const.Handler(
|
1198
1212
|
self.ImageFromId,
|
1199
1213
|
grpclib.const.Cardinality.UNARY_UNARY,
|
@@ -1536,6 +1550,12 @@ class ModalClientBase(abc.ABC):
|
|
1536
1550
|
google.protobuf.empty_pb2.Empty,
|
1537
1551
|
modal_proto.api_pb2.TaskCurrentInputsResponse,
|
1538
1552
|
),
|
1553
|
+
'/modal.client.ModalClient/TaskGetAutoscalingMetrics': grpclib.const.Handler(
|
1554
|
+
self.TaskGetAutoscalingMetrics,
|
1555
|
+
grpclib.const.Cardinality.UNARY_UNARY,
|
1556
|
+
modal_proto.api_pb2.TaskGetAutoscalingMetricsRequest,
|
1557
|
+
modal_proto.api_pb2.TaskGetAutoscalingMetricsResponse,
|
1558
|
+
),
|
1539
1559
|
'/modal.client.ModalClient/TaskList': grpclib.const.Handler(
|
1540
1560
|
self.TaskList,
|
1541
1561
|
grpclib.const.Cardinality.UNARY_UNARY,
|
@@ -2196,6 +2216,12 @@ class ModalClientStub:
|
|
2196
2216
|
modal_proto.api_pb2.FunctionUpdateSchedulingParamsRequest,
|
2197
2217
|
modal_proto.api_pb2.FunctionUpdateSchedulingParamsResponse,
|
2198
2218
|
)
|
2219
|
+
self.ImageDelete = grpclib.client.UnaryUnaryMethod(
|
2220
|
+
channel,
|
2221
|
+
'/modal.client.ModalClient/ImageDelete',
|
2222
|
+
modal_proto.api_pb2.ImageDeleteRequest,
|
2223
|
+
google.protobuf.empty_pb2.Empty,
|
2224
|
+
)
|
2199
2225
|
self.ImageFromId = grpclib.client.UnaryUnaryMethod(
|
2200
2226
|
channel,
|
2201
2227
|
'/modal.client.ModalClient/ImageFromId',
|
@@ -2538,6 +2564,12 @@ class ModalClientStub:
|
|
2538
2564
|
google.protobuf.empty_pb2.Empty,
|
2539
2565
|
modal_proto.api_pb2.TaskCurrentInputsResponse,
|
2540
2566
|
)
|
2567
|
+
self.TaskGetAutoscalingMetrics = grpclib.client.UnaryUnaryMethod(
|
2568
|
+
channel,
|
2569
|
+
'/modal.client.ModalClient/TaskGetAutoscalingMetrics',
|
2570
|
+
modal_proto.api_pb2.TaskGetAutoscalingMetricsRequest,
|
2571
|
+
modal_proto.api_pb2.TaskGetAutoscalingMetricsResponse,
|
2572
|
+
)
|
2541
2573
|
self.TaskList = grpclib.client.UnaryUnaryMethod(
|
2542
2574
|
channel,
|
2543
2575
|
'/modal.client.ModalClient/TaskList',
|