modal 0.72.33__py3-none-any.whl → 0.72.35__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.py +2 -1
- modal/functions.pyi +6 -6
- modal/gpu.py +16 -21
- modal/sandbox.py +2 -1
- {modal-0.72.33.dist-info → modal-0.72.35.dist-info}/METADATA +1 -1
- {modal-0.72.33.dist-info → modal-0.72.35.dist-info}/RECORD +15 -15
- modal_proto/api.proto +8 -3
- modal_proto/api_pb2.py +532 -532
- modal_proto/api_pb2.pyi +17 -3
- modal_version/_version_generated.py +1 -1
- {modal-0.72.33.dist-info → modal-0.72.35.dist-info}/LICENSE +0 -0
- {modal-0.72.33.dist-info → modal-0.72.35.dist-info}/WHEEL +0 -0
- {modal-0.72.33.dist-info → modal-0.72.35.dist-info}/entry_points.txt +0 -0
- {modal-0.72.33.dist-info → modal-0.72.35.dist-info}/top_level.txt +0 -0
modal/client.pyi
CHANGED
@@ -27,7 +27,7 @@ class _Client:
|
|
27
27
|
_snapshotted: bool
|
28
28
|
|
29
29
|
def __init__(
|
30
|
-
self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.72.
|
30
|
+
self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.72.35"
|
31
31
|
): ...
|
32
32
|
def is_closed(self) -> bool: ...
|
33
33
|
@property
|
@@ -83,7 +83,7 @@ class Client:
|
|
83
83
|
_snapshotted: bool
|
84
84
|
|
85
85
|
def __init__(
|
86
|
-
self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.72.
|
86
|
+
self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.72.35"
|
87
87
|
): ...
|
88
88
|
def is_closed(self) -> bool: ...
|
89
89
|
@property
|
modal/functions.py
CHANGED
@@ -785,7 +785,8 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
785
785
|
task_idle_timeout_secs=container_idle_timeout or 0,
|
786
786
|
concurrency_limit=concurrency_limit or 0,
|
787
787
|
pty_info=pty_info,
|
788
|
-
cloud_provider=cloud_provider,
|
788
|
+
cloud_provider=cloud_provider, # Deprecated at some point
|
789
|
+
cloud_provider_str=cloud.upper() if cloud else "", # Supersedes cloud_provider
|
789
790
|
warm_pool_size=keep_warm or 0,
|
790
791
|
runtime=config.get("function_runtime"),
|
791
792
|
runtime_debug=config.get("function_runtime_debug"),
|
modal/functions.pyi
CHANGED
@@ -463,11 +463,11 @@ class Function(typing.Generic[P, ReturnType, OriginalReturnType], modal.object.O
|
|
463
463
|
|
464
464
|
_call_generator_nowait: ___call_generator_nowait_spec
|
465
465
|
|
466
|
-
class __remote_spec(typing_extensions.Protocol[
|
466
|
+
class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
|
467
467
|
def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
|
468
468
|
async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
|
469
469
|
|
470
|
-
remote: __remote_spec[
|
470
|
+
remote: __remote_spec[ReturnType, P]
|
471
471
|
|
472
472
|
class __remote_gen_spec(typing_extensions.Protocol):
|
473
473
|
def __call__(self, *args, **kwargs) -> typing.Generator[typing.Any, None, None]: ...
|
@@ -480,17 +480,17 @@ class Function(typing.Generic[P, ReturnType, OriginalReturnType], modal.object.O
|
|
480
480
|
def _get_obj(self) -> typing.Optional[modal.cls.Obj]: ...
|
481
481
|
def local(self, *args: P.args, **kwargs: P.kwargs) -> OriginalReturnType: ...
|
482
482
|
|
483
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
483
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
|
484
484
|
def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
485
485
|
async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
486
486
|
|
487
|
-
_experimental_spawn: ___experimental_spawn_spec[
|
487
|
+
_experimental_spawn: ___experimental_spawn_spec[ReturnType, P]
|
488
488
|
|
489
|
-
class __spawn_spec(typing_extensions.Protocol[
|
489
|
+
class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
|
490
490
|
def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
491
491
|
async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
492
492
|
|
493
|
-
spawn: __spawn_spec[
|
493
|
+
spawn: __spawn_spec[ReturnType, P]
|
494
494
|
|
495
495
|
def get_raw_f(self) -> typing.Callable[..., typing.Any]: ...
|
496
496
|
|
modal/gpu.py
CHANGED
@@ -9,8 +9,9 @@ from .exception import InvalidError
|
|
9
9
|
|
10
10
|
@dataclass(frozen=True)
|
11
11
|
class _GPUConfig:
|
12
|
-
type: "api_pb2.GPUType.V"
|
12
|
+
type: "api_pb2.GPUType.V" # Deprecated, at some point
|
13
13
|
count: int
|
14
|
+
gpu_type: str
|
14
15
|
memory: int = 0
|
15
16
|
|
16
17
|
def _to_proto(self) -> api_pb2.GPUConfig:
|
@@ -19,6 +20,7 @@ class _GPUConfig:
|
|
19
20
|
type=self.type,
|
20
21
|
count=self.count,
|
21
22
|
memory=self.memory,
|
23
|
+
gpu_type=self.gpu_type,
|
22
24
|
)
|
23
25
|
|
24
26
|
|
@@ -33,7 +35,7 @@ class T4(_GPUConfig):
|
|
33
35
|
self,
|
34
36
|
count: int = 1, # Number of GPUs per container. Defaults to 1.
|
35
37
|
):
|
36
|
-
super().__init__(api_pb2.GPU_TYPE_T4, count,
|
38
|
+
super().__init__(api_pb2.GPU_TYPE_T4, count, "T4")
|
37
39
|
|
38
40
|
def __repr__(self):
|
39
41
|
return f"GPU(T4, count={self.count})"
|
@@ -51,7 +53,7 @@ class L4(_GPUConfig):
|
|
51
53
|
self,
|
52
54
|
count: int = 1, # Number of GPUs per container. Defaults to 1.
|
53
55
|
):
|
54
|
-
super().__init__(api_pb2.GPU_TYPE_L4, count,
|
56
|
+
super().__init__(api_pb2.GPU_TYPE_L4, count, "L4")
|
55
57
|
|
56
58
|
def __repr__(self):
|
57
59
|
return f"GPU(L4, count={self.count})"
|
@@ -70,21 +72,14 @@ class A100(_GPUConfig):
|
|
70
72
|
count: int = 1, # Number of GPUs per container. Defaults to 1.
|
71
73
|
size: Union[str, None] = None, # Select GiB configuration of GPU device: "40GB" or "80GB". Defaults to "40GB".
|
72
74
|
):
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
raise ValueError(
|
78
|
-
f"size='{size}' is invalid. A100s can only have memory values of {allowed_size_values}."
|
79
|
-
)
|
80
|
-
memory = int(size.replace("GB", ""))
|
75
|
+
if size == "40GB" or not size:
|
76
|
+
super().__init__(api_pb2.GPU_TYPE_A100, count, "A100-40GB", 40)
|
77
|
+
elif size == "80GB":
|
78
|
+
super().__init__(api_pb2.GPU_TYPE_A100_80GB, count, "A100-80GB", 80)
|
81
79
|
else:
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
super().__init__(api_pb2.GPU_TYPE_A100_80GB, count, memory)
|
86
|
-
else:
|
87
|
-
super().__init__(api_pb2.GPU_TYPE_A100, count, memory)
|
80
|
+
raise ValueError(
|
81
|
+
f"size='{size}' is invalid. A100s can only have memory values of 40GB or 80GB."
|
82
|
+
)
|
88
83
|
|
89
84
|
def __repr__(self):
|
90
85
|
if self.memory == 80:
|
@@ -109,7 +104,7 @@ class A10G(_GPUConfig):
|
|
109
104
|
# Useful if you have very large models that don't fit on a single GPU.
|
110
105
|
count: int = 1,
|
111
106
|
):
|
112
|
-
super().__init__(api_pb2.GPU_TYPE_A10G, count)
|
107
|
+
super().__init__(api_pb2.GPU_TYPE_A10G, count, "A10G")
|
113
108
|
|
114
109
|
def __repr__(self):
|
115
110
|
return f"GPU(A10G, count={self.count})"
|
@@ -131,7 +126,7 @@ class H100(_GPUConfig):
|
|
131
126
|
# Useful if you have very large models that don't fit on a single GPU.
|
132
127
|
count: int = 1,
|
133
128
|
):
|
134
|
-
super().__init__(api_pb2.GPU_TYPE_H100, count)
|
129
|
+
super().__init__(api_pb2.GPU_TYPE_H100, count, "H100")
|
135
130
|
|
136
131
|
def __repr__(self):
|
137
132
|
return f"GPU(H100, count={self.count})"
|
@@ -152,7 +147,7 @@ class L40S(_GPUConfig):
|
|
152
147
|
# Useful if you have very large models that don't fit on a single GPU.
|
153
148
|
count: int = 1,
|
154
149
|
):
|
155
|
-
super().__init__(api_pb2.GPU_TYPE_L40S, count)
|
150
|
+
super().__init__(api_pb2.GPU_TYPE_L40S, count, "L40S")
|
156
151
|
|
157
152
|
def __repr__(self):
|
158
153
|
return f"GPU(L40S, count={self.count})"
|
@@ -162,7 +157,7 @@ class Any(_GPUConfig):
|
|
162
157
|
"""Selects any one of the GPU classes available within Modal, according to availability."""
|
163
158
|
|
164
159
|
def __init__(self, *, count: int = 1):
|
165
|
-
super().__init__(api_pb2.GPU_TYPE_ANY, count)
|
160
|
+
super().__init__(api_pb2.GPU_TYPE_ANY, count, "ANY")
|
166
161
|
|
167
162
|
def __repr__(self):
|
168
163
|
return f"GPU(Any, count={self.count})"
|
modal/sandbox.py
CHANGED
@@ -165,7 +165,8 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
165
165
|
resources=convert_fn_config_to_resources_config(
|
166
166
|
cpu=cpu, memory=memory, gpu=gpu, ephemeral_disk=ephemeral_disk
|
167
167
|
),
|
168
|
-
cloud_provider=parse_cloud_provider(cloud) if cloud else None,
|
168
|
+
cloud_provider=parse_cloud_provider(cloud) if cloud else None, # Deprecated at some point
|
169
|
+
cloud_provider_str=cloud.upper() if cloud else None, # Supersedes cloud_provider
|
169
170
|
nfs_mounts=network_file_system_mount_protos(validated_network_file_systems, False),
|
170
171
|
runtime_debug=config.get("function_runtime_debug"),
|
171
172
|
cloud_bucket_mounts=cloud_bucket_mounts_to_proto(cloud_bucket_mounts),
|
@@ -20,7 +20,7 @@ modal/app.py,sha256=UOuqlCKlFAjOXCacXmoEMM90FnqFwPRXUhLh0Gi6xzg,45344
|
|
20
20
|
modal/app.pyi,sha256=5D3LkPP6qvTIl2_YgiyhNQ9X4VsOVuxd69a23UmohDg,25477
|
21
21
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
22
22
|
modal/client.py,sha256=8SQawr7P1PNUCq1UmJMUQXG2jIo4Nmdcs311XqrNLRE,15276
|
23
|
-
modal/client.pyi,sha256=
|
23
|
+
modal/client.pyi,sha256=zQPANmRIUfQZQWyiOz86Nz8i0c6erIcaS7CfGnKB_OU,7326
|
24
24
|
modal/cloud_bucket_mount.py,sha256=YOe9nnvSr4ZbeCn587d7_VhE9IioZYRvF9VYQTQux08,5914
|
25
25
|
modal/cloud_bucket_mount.pyi,sha256=30T3K1a89l6wzmEJ_J9iWv9SknoGqaZDx59Xs-ZQcmk,1607
|
26
26
|
modal/cls.py,sha256=xHgZZAmymplw0I2YZGAA8raBboixdNKKTrnsxQZI7G8,32159
|
@@ -37,9 +37,9 @@ modal/experimental.py,sha256=npfKbyMpI41uZZs9HW_QiB3E4ykWfDXZbACXXbw6qeA,2385
|
|
37
37
|
modal/file_io.py,sha256=lcMs_E9Xfm0YX1t9U2wNIBPnqHRxmImqjLW1GHqVmyg,20945
|
38
38
|
modal/file_io.pyi,sha256=NrIoB0YjIqZ8MDMe826xAnybT0ww_kxQM3iPLo82REU,8898
|
39
39
|
modal/file_pattern_matcher.py,sha256=dSo7BMQGZBAuoBFOX-e_72HxmF3FLzjQlEtnGtJiaD4,6506
|
40
|
-
modal/functions.py,sha256=
|
41
|
-
modal/functions.pyi,sha256=
|
42
|
-
modal/gpu.py,sha256=
|
40
|
+
modal/functions.py,sha256=JLQxVn1VEyQMEFzqT1ibDradkb1mvrATJ41zvfffA4I,68499
|
41
|
+
modal/functions.pyi,sha256=EcGd1uGnJVbnMmdsnANYeDjLzjaL8BREG3XgxaDPcvM,25473
|
42
|
+
modal/gpu.py,sha256=rcBwbE-_e2hEUr3VJbr1EgQDRb6aieJKx6G2oQdyBhE,7462
|
43
43
|
modal/image.py,sha256=leeY7fLfFjS0IqTi3D4cRxIDOb80BPtb3jsQfqvVJ8c,90912
|
44
44
|
modal/image.pyi,sha256=X9vj6cwBdYh8q_2cOd-2RSYNMF49ujcy0lrOXh_v1xc,26049
|
45
45
|
modal/io_streams.py,sha256=QkQiizKRzd5bnbKQsap31LJgBYlAnj4-XkV_50xPYX0,15079
|
@@ -64,7 +64,7 @@ modal/retries.py,sha256=HKR2Q9aNPWkMjQ5nwobqYTuZaSuw0a8lI2zrtY5IW98,5230
|
|
64
64
|
modal/runner.py,sha256=0SCMgKO8lZ9W1C7le1EcgViKERMXpi_-QBd6PF_MH0Q,24450
|
65
65
|
modal/runner.pyi,sha256=YmP4EOCNjjkwSIPi2Gl6hF_ji_ytkxz9dw3iB9KXaOI,5275
|
66
66
|
modal/running_app.py,sha256=v61mapYNV1-O-Uaho5EfJlryMLvIT9We0amUOSvSGx8,1188
|
67
|
-
modal/sandbox.py,sha256=
|
67
|
+
modal/sandbox.py,sha256=Au_CdStaksvu2VY6hGvSjdTxAQEsWs0ksfuuuROqmac,28955
|
68
68
|
modal/sandbox.pyi,sha256=dCyU848YARwQwoYR19o2A9L6rfB5JFz276VGQ-aZId8,20831
|
69
69
|
modal/schedule.py,sha256=0ZFpKs1bOxeo5n3HZjoL7OE2ktsb-_oGtq-WJEPO4tY,2615
|
70
70
|
modal/scheduler_placement.py,sha256=BAREdOY5HzHpzSBqt6jDVR6YC_jYfHMVqOzkyqQfngU,1235
|
@@ -149,10 +149,10 @@ modal_global_objects/mounts/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0
|
|
149
149
|
modal_global_objects/mounts/modal_client_package.py,sha256=W0E_yShsRojPzWm6LtIQqNVolapdnrZkm2hVEQuZK_4,767
|
150
150
|
modal_global_objects/mounts/python_standalone.py,sha256=pEML5GaV2_0ahci_1vpfc_FnySpsfi2fhYmFF5I7IiQ,1837
|
151
151
|
modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
152
|
-
modal_proto/api.proto,sha256=
|
152
|
+
modal_proto/api.proto,sha256=smkhq5gGvZ6HWMc_-zv6ex3Pj76ySdqrmtHn_Ic0iFg,84501
|
153
153
|
modal_proto/api_grpc.py,sha256=Bcgo5hmJ0FCAVvWAm7X7Qki2GZ2gvAu3kOtqzRtvoMc,106793
|
154
|
-
modal_proto/api_pb2.py,sha256=
|
155
|
-
modal_proto/api_pb2.pyi,sha256=
|
154
|
+
modal_proto/api_pb2.py,sha256=Qy1Z-i65J6CKrSpDJ0IsvA48JJr1pGn8-YsUFEag6lY,307334
|
155
|
+
modal_proto/api_pb2.pyi,sha256=9pzRwWw2GKZsFwsU5VmGuBQvZq6Jb9GfJdM28S3KjuQ,411354
|
156
156
|
modal_proto/api_pb2_grpc.py,sha256=OTPQgFBajKwy7fhAFEewDjY6lK49C60Z9vTqUpQy_oY,230822
|
157
157
|
modal_proto/api_pb2_grpc.pyi,sha256=mwP2mw6UE46CHlraqicXHsgyGPtV0mCy96LwnFMz74s,53787
|
158
158
|
modal_proto/modal_api_grpc.py,sha256=C5QcdsBWEvF9ufbEjdyPQ5IDDexMdAI2_CQ_U2nEYuc,14258
|
@@ -166,10 +166,10 @@ modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0y
|
|
166
166
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
167
167
|
modal_version/__init__.py,sha256=kGya2ZlItX2zB7oHORs-wvP4PG8lg_mtbi1QIK3G6SQ,470
|
168
168
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
169
|
-
modal_version/_version_generated.py,sha256=
|
170
|
-
modal-0.72.
|
171
|
-
modal-0.72.
|
172
|
-
modal-0.72.
|
173
|
-
modal-0.72.
|
174
|
-
modal-0.72.
|
175
|
-
modal-0.72.
|
169
|
+
modal_version/_version_generated.py,sha256=Risj0f23NjXwV5p-2zAoUMadoNdAPr6CGxd8K2p7sDk,149
|
170
|
+
modal-0.72.35.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
171
|
+
modal-0.72.35.dist-info/METADATA,sha256=aHEZox4anXEutB5lNyiMsxgWcHVypn-HV4-8AsxnxoE,2329
|
172
|
+
modal-0.72.35.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
173
|
+
modal-0.72.35.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
174
|
+
modal-0.72.35.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
|
175
|
+
modal-0.72.35.dist-info/RECORD,,
|
modal_proto/api.proto
CHANGED
@@ -1163,7 +1163,7 @@ message Function {
|
|
1163
1163
|
|
1164
1164
|
uint32 task_idle_timeout_secs = 25;
|
1165
1165
|
|
1166
|
-
optional CloudProvider cloud_provider = 26;
|
1166
|
+
optional CloudProvider cloud_provider = 26; // Deprecated at some point
|
1167
1167
|
|
1168
1168
|
uint32 warm_pool_size = 27;
|
1169
1169
|
|
@@ -1257,6 +1257,8 @@ message Function {
|
|
1257
1257
|
bool method_definitions_set = 75;
|
1258
1258
|
|
1259
1259
|
bool _experimental_custom_scaling = 76;
|
1260
|
+
|
1261
|
+
string cloud_provider_str = 77; // Supersedes cloud_provider
|
1260
1262
|
}
|
1261
1263
|
|
1262
1264
|
message FunctionAsyncInvokeRequest {
|
@@ -1667,9 +1669,10 @@ message FunctionUpdateSchedulingParamsRequest {
|
|
1667
1669
|
message FunctionUpdateSchedulingParamsResponse {}
|
1668
1670
|
|
1669
1671
|
message GPUConfig {
|
1670
|
-
GPUType type = 1;
|
1672
|
+
GPUType type = 1; // Deprecated, at some point
|
1671
1673
|
uint32 count = 2;
|
1672
1674
|
uint32 memory = 3;
|
1675
|
+
string gpu_type = 4;
|
1673
1676
|
}
|
1674
1677
|
|
1675
1678
|
message GeneratorDone { // Sent as the output when a generator finishes running.
|
@@ -2192,7 +2195,7 @@ message Sandbox {
|
|
2192
2195
|
repeated string secret_ids = 4;
|
2193
2196
|
|
2194
2197
|
Resources resources = 5;
|
2195
|
-
CloudProvider cloud_provider = 6;
|
2198
|
+
CloudProvider cloud_provider = 6; // Deprecated at some point
|
2196
2199
|
|
2197
2200
|
uint32 timeout_secs = 7;
|
2198
2201
|
|
@@ -2236,6 +2239,8 @@ message Sandbox {
|
|
2236
2239
|
// Used to pin gVisor version for memory-snapshottable sandboxes.
|
2237
2240
|
// This field is set by the server, not the client.
|
2238
2241
|
optional uint32 snapshot_version = 25;
|
2242
|
+
|
2243
|
+
string cloud_provider_str = 26; // Supersedes cloud_provider
|
2239
2244
|
}
|
2240
2245
|
|
2241
2246
|
message SandboxCreateRequest {
|