modal 0.74.30__py3-none-any.whl → 0.74.33__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/_functions.py +2 -20
- modal/_utils/function_utils.py +5 -1
- modal/client.pyi +2 -2
- modal/functions.pyi +6 -9
- {modal-0.74.30.dist-info → modal-0.74.33.dist-info}/METADATA +1 -1
- {modal-0.74.30.dist-info → modal-0.74.33.dist-info}/RECORD +11 -11
- modal_version/_version_generated.py +1 -1
- {modal-0.74.30.dist-info → modal-0.74.33.dist-info}/WHEEL +0 -0
- {modal-0.74.30.dist-info → modal-0.74.33.dist-info}/entry_points.txt +0 -0
- {modal-0.74.30.dist-info → modal-0.74.33.dist-info}/licenses/LICENSE +0 -0
- {modal-0.74.30.dist-info → modal-0.74.33.dist-info}/top_level.txt +0 -0
modal/_functions.py
CHANGED
@@ -407,7 +407,6 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
407
407
|
_build_args: dict
|
408
408
|
|
409
409
|
_is_generator: Optional[bool] = None
|
410
|
-
_cluster_size: Optional[int] = None
|
411
410
|
|
412
411
|
# when this is the method of a class/object function, invocation of this function
|
413
412
|
# should supply the method name in the FunctionInput:
|
@@ -931,7 +930,6 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
931
930
|
obj._app = app # needed for CLI right now
|
932
931
|
obj._obj = None
|
933
932
|
obj._is_generator = is_generator
|
934
|
-
obj._cluster_size = cluster_size
|
935
933
|
obj._is_method = False
|
936
934
|
obj._spec = function_spec # needed for modal shell
|
937
935
|
obj._webhook_config = webhook_config # only set locally
|
@@ -968,19 +966,9 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
968
966
|
parent = self
|
969
967
|
|
970
968
|
async def _load(param_bound_func: _Function, resolver: Resolver, existing_object_id: Optional[str]):
|
971
|
-
try:
|
972
|
-
identity = f"{parent.info.function_name} class service function"
|
973
|
-
except Exception:
|
974
|
-
# Can't always look up the function name that way, so fall back to generic message
|
975
|
-
identity = "class service function for a parametrized class"
|
976
969
|
if not parent.is_hydrated:
|
977
|
-
|
978
|
-
|
979
|
-
else:
|
980
|
-
reason = ""
|
981
|
-
raise ExecutionError(
|
982
|
-
f"The {identity} has not been hydrated with the metadata it needs to run on Modal{reason}."
|
983
|
-
)
|
970
|
+
# While the base Object.hydrate() method appears to be idempotent, it's not always safe
|
971
|
+
await parent.hydrate()
|
984
972
|
|
985
973
|
assert parent._client and parent._client.stub
|
986
974
|
|
@@ -1236,7 +1224,6 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
1236
1224
|
# Overridden concrete implementation of base class method
|
1237
1225
|
self._progress = None
|
1238
1226
|
self._is_generator = None
|
1239
|
-
self._cluster_size = None
|
1240
1227
|
self._web_url = None
|
1241
1228
|
self._function_name = None
|
1242
1229
|
self._info = None
|
@@ -1305,11 +1292,6 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
1305
1292
|
assert self._is_generator is not None # should be set now
|
1306
1293
|
return self._is_generator
|
1307
1294
|
|
1308
|
-
@property
|
1309
|
-
def cluster_size(self) -> int:
|
1310
|
-
"""mdmd:hidden"""
|
1311
|
-
return self._cluster_size or 1
|
1312
|
-
|
1313
1295
|
@live_method_gen
|
1314
1296
|
async def _map(
|
1315
1297
|
self, input_queue: _SynchronizedQueue, order_outputs: bool, return_exceptions: bool
|
modal/_utils/function_utils.py
CHANGED
@@ -140,7 +140,7 @@ class FunctionInfo:
|
|
140
140
|
def __init__(
|
141
141
|
self,
|
142
142
|
f: Optional[Callable[..., Any]],
|
143
|
-
serialized=False,
|
143
|
+
serialized: bool = False,
|
144
144
|
name_override: Optional[str] = None,
|
145
145
|
user_cls: Optional[type] = None,
|
146
146
|
):
|
@@ -148,6 +148,10 @@ class FunctionInfo:
|
|
148
148
|
self.user_cls = user_cls
|
149
149
|
|
150
150
|
if name_override is not None:
|
151
|
+
if not serialized:
|
152
|
+
# We may relax this constraint in the future, but currently we don't track the distinction between
|
153
|
+
# the Function's name inside modal and the name of the object that we need to import in a container.
|
154
|
+
raise InvalidError("Setting a custom `name=` also requires setting `serialized=True`")
|
151
155
|
self.function_name = name_override
|
152
156
|
elif f is None and user_cls:
|
153
157
|
# "service function" for running all methods of a class
|
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.74.
|
30
|
+
self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.74.33"
|
31
31
|
): ...
|
32
32
|
def is_closed(self) -> bool: ...
|
33
33
|
@property
|
@@ -85,7 +85,7 @@ class Client:
|
|
85
85
|
_snapshotted: bool
|
86
86
|
|
87
87
|
def __init__(
|
88
|
-
self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.74.
|
88
|
+
self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.74.33"
|
89
89
|
): ...
|
90
90
|
def is_closed(self) -> bool: ...
|
91
91
|
@property
|
modal/functions.pyi
CHANGED
@@ -48,7 +48,6 @@ class Function(
|
|
48
48
|
_raw_f: typing.Optional[collections.abc.Callable[..., typing.Any]]
|
49
49
|
_build_args: dict
|
50
50
|
_is_generator: typing.Optional[bool]
|
51
|
-
_cluster_size: typing.Optional[int]
|
52
51
|
_use_method_name: str
|
53
52
|
_class_parameter_info: typing.Optional[modal_proto.api_pb2.ClassParameterInfo]
|
54
53
|
_method_handle_metadata: typing.Optional[dict[str, modal_proto.api_pb2.FunctionHandleMetadata]]
|
@@ -163,8 +162,6 @@ class Function(
|
|
163
162
|
def web_url(self) -> typing.Optional[str]: ...
|
164
163
|
@property
|
165
164
|
def is_generator(self) -> bool: ...
|
166
|
-
@property
|
167
|
-
def cluster_size(self) -> int: ...
|
168
165
|
|
169
166
|
class ___map_spec(typing_extensions.Protocol[SUPERSELF]):
|
170
167
|
def __call__(
|
@@ -200,11 +197,11 @@ class Function(
|
|
200
197
|
|
201
198
|
_call_generator_nowait: ___call_generator_nowait_spec[typing_extensions.Self]
|
202
199
|
|
203
|
-
class __remote_spec(typing_extensions.Protocol[
|
200
|
+
class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
|
204
201
|
def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
|
205
202
|
async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
|
206
203
|
|
207
|
-
remote: __remote_spec[modal._functions.
|
204
|
+
remote: __remote_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
|
208
205
|
|
209
206
|
class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
|
210
207
|
def __call__(self, *args, **kwargs) -> typing.Generator[typing.Any, None, None]: ...
|
@@ -219,19 +216,19 @@ class Function(
|
|
219
216
|
self, *args: modal._functions.P.args, **kwargs: modal._functions.P.kwargs
|
220
217
|
) -> modal._functions.OriginalReturnType: ...
|
221
218
|
|
222
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
219
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
|
223
220
|
def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
224
221
|
async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
225
222
|
|
226
223
|
_experimental_spawn: ___experimental_spawn_spec[
|
227
|
-
modal._functions.
|
224
|
+
modal._functions.P, modal._functions.ReturnType, typing_extensions.Self
|
228
225
|
]
|
229
226
|
|
230
|
-
class __spawn_spec(typing_extensions.Protocol[
|
227
|
+
class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
|
231
228
|
def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
232
229
|
async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
233
230
|
|
234
|
-
spawn: __spawn_spec[modal._functions.
|
231
|
+
spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
|
235
232
|
|
236
233
|
def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]: ...
|
237
234
|
|
@@ -3,7 +3,7 @@ modal/__main__.py,sha256=sTJcc9EbDuCKSwg3tL6ZckFw9WWdlkXW8mId1IvJCNc,2846
|
|
3
3
|
modal/_clustered_functions.py,sha256=kTf-9YBXY88NutC1akI-gCbvf01RhMPCw-zoOI_YIUE,2700
|
4
4
|
modal/_clustered_functions.pyi,sha256=vllkegc99A0jrUOWa8mdlSbdp6uz36TsHhGxysAOpaQ,771
|
5
5
|
modal/_container_entrypoint.py,sha256=DymOImhc3uGRkIq_qXmBsEbWMB4EBMpfuXzz2S4BcGg,29404
|
6
|
-
modal/_functions.py,sha256=
|
6
|
+
modal/_functions.py,sha256=SAne05DDItfyywxXxh_WpmUuSq5BXOc3DXbCsveQhao,74070
|
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=JBIECWdfpRKCaCxVWZbC3Q1kF5Whk_EKvY9f4Y6AFyg,11446
|
@@ -22,7 +22,7 @@ modal/app.py,sha256=VQPV0u6zqePdocBZS6Tgjf_we7aSrLtvqqXmZNdMfBQ,50890
|
|
22
22
|
modal/app.pyi,sha256=Dq7cfzkW8HR6Ud6L6YueZucHelEUYnGUc6BKn8KWpIk,28420
|
23
23
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
24
24
|
modal/client.py,sha256=U-YKSw0n7J1ZLREt9cbEJCtmHe5YoPKFxl0xlkan2yc,15565
|
25
|
-
modal/client.pyi,sha256=
|
25
|
+
modal/client.pyi,sha256=XV6ltRSq0V4LtMUrMO0EsEfsZXxe1bpwdVhheWvo0Ig,7593
|
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=ByV4st7Ka5mXAW4eBl9WMOmZKq1pSiCT4etpHIcylo8,33519
|
@@ -39,7 +39,7 @@ modal/file_io.py,sha256=lcMs_E9Xfm0YX1t9U2wNIBPnqHRxmImqjLW1GHqVmyg,20945
|
|
39
39
|
modal/file_io.pyi,sha256=NTRft1tbPSWf9TlWVeZmTlgB5AZ_Zhu2srWIrWr7brk,9445
|
40
40
|
modal/file_pattern_matcher.py,sha256=trosX-Bp7dOubudN1bLLhRAoidWy1TcoaR4Pv8CedWw,6497
|
41
41
|
modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
|
42
|
-
modal/functions.pyi,sha256=
|
42
|
+
modal/functions.pyi,sha256=ljRsgHRmnHEvZlrvzUSDb9PCZjtsPgMxYQptYS6REu4,14825
|
43
43
|
modal/gpu.py,sha256=Kbhs_u49FaC2Zi0TjCdrpstpRtT5eZgecynmQi5IZVE,6752
|
44
44
|
modal/image.py,sha256=ZCghS6l1O7pezXcdMHk6RoJpW3qWszfWGJTW38lNXaU,92797
|
45
45
|
modal/image.pyi,sha256=ddbegF532pDLiVANOJdtJiYoDbbF3mAFrsCiyvIu7jU,25632
|
@@ -96,7 +96,7 @@ modal/_utils/blob_utils.py,sha256=WhWaSFLcffVDchMyfKys-j0EFVbm9l7rebzeoa7Z2jM,18
|
|
96
96
|
modal/_utils/bytes_io_segment_payload.py,sha256=uunxVJS4PE1LojF_UpURMzVK9GuvmYWRqQo_bxEj5TU,3385
|
97
97
|
modal/_utils/deprecation.py,sha256=EXP1beU4pmEqEzWMLw6E3kUfNfpmNA_VOp6i0EHi93g,4856
|
98
98
|
modal/_utils/docker_utils.py,sha256=h1uETghR40mp_y3fSWuZAfbIASH1HMzuphJHghAL6DU,3722
|
99
|
-
modal/_utils/function_utils.py,sha256=
|
99
|
+
modal/_utils/function_utils.py,sha256=_q89uQr9v5ontrBkJ-WwEGR-VInJQpaCxmReCmfp4_A,27277
|
100
100
|
modal/_utils/git_utils.py,sha256=qtUU6JAttF55ZxYq51y55OR58B0tDPZsZWK5dJe6W5g,3182
|
101
101
|
modal/_utils/grpc_testing.py,sha256=H1zHqthv19eGPJz2HKXDyWXWGSqO4BRsxah3L5Xaa8A,8619
|
102
102
|
modal/_utils/grpc_utils.py,sha256=YgUfYuOKVYshBmFaIo4VWwcEEIFeZ2VjiVS5Y5K3Lfo,8549
|
@@ -145,7 +145,7 @@ modal/requirements/2024.10.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddR
|
|
145
145
|
modal/requirements/PREVIEW.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddRo,296
|
146
146
|
modal/requirements/README.md,sha256=9tK76KP0Uph7O0M5oUgsSwEZDj5y-dcUPsnpR0Sc-Ik,854
|
147
147
|
modal/requirements/base-images.json,sha256=57vMSqzMbLBxw5tFWSaMiIkkVEps4JfX5PAtXGnkS4U,740
|
148
|
-
modal-0.74.
|
148
|
+
modal-0.74.33.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
149
149
|
modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
150
150
|
modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
|
151
151
|
modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
|
@@ -170,9 +170,9 @@ modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0y
|
|
170
170
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
171
171
|
modal_version/__init__.py,sha256=m94xZNWIjH8oUtJk4l9xfovzDJede2o7X-q0MHVECtM,470
|
172
172
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
173
|
-
modal_version/_version_generated.py,sha256=
|
174
|
-
modal-0.74.
|
175
|
-
modal-0.74.
|
176
|
-
modal-0.74.
|
177
|
-
modal-0.74.
|
178
|
-
modal-0.74.
|
173
|
+
modal_version/_version_generated.py,sha256=6Use0Q9KiS4_eDdhMKDVfgMatdQWkDUKTNgIT_FQwJE,149
|
174
|
+
modal-0.74.33.dist-info/METADATA,sha256=vvPoqqVkrkz1meqKfpP3v1QGI3qYyREmtjagy7Ha1Jg,2474
|
175
|
+
modal-0.74.33.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
176
|
+
modal-0.74.33.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
177
|
+
modal-0.74.33.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
178
|
+
modal-0.74.33.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|