modal 0.73.5__py3-none-any.whl → 0.73.7__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 +9 -6
- modal/_runtime/container_io_manager.py +8 -8
- modal/_runtime/user_code_imports.py +2 -1
- modal/client.pyi +2 -2
- modal/cls.py +28 -62
- modal/cls.pyi +0 -4
- modal/functions.pyi +6 -6
- {modal-0.73.5.dist-info → modal-0.73.7.dist-info}/METADATA +1 -1
- {modal-0.73.5.dist-info → modal-0.73.7.dist-info}/RECORD +14 -14
- modal_version/_version_generated.py +1 -1
- {modal-0.73.5.dist-info → modal-0.73.7.dist-info}/LICENSE +0 -0
- {modal-0.73.5.dist-info → modal-0.73.7.dist-info}/WHEEL +0 -0
- {modal-0.73.5.dist-info → modal-0.73.7.dist-info}/entry_points.txt +0 -0
- {modal-0.73.5.dist-info → modal-0.73.7.dist-info}/top_level.txt +0 -0
modal/_functions.py
CHANGED
@@ -397,7 +397,9 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
397
397
|
_use_method_name: str = ""
|
398
398
|
|
399
399
|
_class_parameter_info: Optional["api_pb2.ClassParameterInfo"] = None
|
400
|
-
_method_handle_metadata: Optional[
|
400
|
+
_method_handle_metadata: Optional[
|
401
|
+
dict[str, "api_pb2.FunctionHandleMetadata"]
|
402
|
+
] = None # set for 0.67+ class service functions
|
401
403
|
|
402
404
|
def _bind_method(
|
403
405
|
self,
|
@@ -1026,16 +1028,17 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
1026
1028
|
|
1027
1029
|
# Usage on a parametrized function.
|
1028
1030
|
Model = modal.Cls.from_name("my-app", "Model")
|
1029
|
-
Model("fine-tuned-model").keep_warm(2)
|
1031
|
+
Model("fine-tuned-model").keep_warm(2) # note that this applies to the class instance, not a method
|
1030
1032
|
```
|
1031
1033
|
"""
|
1032
1034
|
if self._is_method:
|
1033
1035
|
raise InvalidError(
|
1034
1036
|
textwrap.dedent(
|
1035
1037
|
"""
|
1036
|
-
The `.keep_warm()` method can not be used on Modal class *methods
|
1038
|
+
The `.keep_warm()` method can not be used on Modal class *methods*.
|
1037
1039
|
|
1038
|
-
Call `.keep_warm()` on the class *instance* instead.
|
1040
|
+
Call `.keep_warm()` on the class *instance* instead. All methods of a class are run by the same
|
1041
|
+
container pool, and this method applies to the size of that container pool.
|
1039
1042
|
"""
|
1040
1043
|
)
|
1041
1044
|
)
|
@@ -1055,7 +1058,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
1055
1058
|
) -> "_Function":
|
1056
1059
|
"""Reference a Function from a deployed App by its name.
|
1057
1060
|
|
1058
|
-
In
|
1061
|
+
In contrast to `modal.Function.lookup`, this is a lazy method
|
1059
1062
|
that defers hydrating the local object with metadata from
|
1060
1063
|
Modal servers until the first time it is actually used.
|
1061
1064
|
|
@@ -1084,7 +1087,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
1084
1087
|
|
1085
1088
|
self._hydrate(response.function_id, resolver.client, response.handle_metadata)
|
1086
1089
|
|
1087
|
-
rep = f"
|
1090
|
+
rep = f"Function.from_name({app_name}, {name})"
|
1088
1091
|
return cls._from_loader(_load_remote, rep, is_another_app=True, hydrate_lazily=True)
|
1089
1092
|
|
1090
1093
|
@staticmethod
|
@@ -491,7 +491,7 @@ class _ContainerIOManager:
|
|
491
491
|
function_call_id: str,
|
492
492
|
start_index: int,
|
493
493
|
data_format: int,
|
494
|
-
|
494
|
+
serialized_messages: list[Any],
|
495
495
|
) -> None:
|
496
496
|
"""Put data onto the `data_out` stream of a function call.
|
497
497
|
|
@@ -500,7 +500,7 @@ class _ContainerIOManager:
|
|
500
500
|
still use the previous Postgres-backed system based on `FunctionPutOutputs()`.
|
501
501
|
"""
|
502
502
|
data_chunks: list[api_pb2.DataChunk] = []
|
503
|
-
for i, message_bytes in enumerate(
|
503
|
+
for i, message_bytes in enumerate(serialized_messages):
|
504
504
|
chunk = api_pb2.DataChunk(data_format=data_format, index=start_index + i) # type: ignore
|
505
505
|
if len(message_bytes) > MAX_OBJECT_SIZE_BYTES:
|
506
506
|
chunk.data_blob_id = await blob_upload(message_bytes, self._client.stub)
|
@@ -523,8 +523,8 @@ class _ContainerIOManager:
|
|
523
523
|
# If we don't sleep here for 1ms we end up with an extra call to .put_data_out().
|
524
524
|
if index == 1:
|
525
525
|
await asyncio.sleep(0.001)
|
526
|
-
|
527
|
-
total_size = len(
|
526
|
+
serialized_messages = [serialize_data_format(message, data_format)]
|
527
|
+
total_size = len(serialized_messages[0]) + 512
|
528
528
|
while total_size < 16 * 1024 * 1024: # 16 MiB, maximum size in a single message
|
529
529
|
try:
|
530
530
|
message = message_rx.get_nowait()
|
@@ -534,10 +534,10 @@ class _ContainerIOManager:
|
|
534
534
|
received_sentinel = True
|
535
535
|
break
|
536
536
|
else:
|
537
|
-
|
538
|
-
total_size += len(
|
539
|
-
await self.put_data_out(function_call_id, index, data_format,
|
540
|
-
index += len(
|
537
|
+
serialized_messages.append(serialize_data_format(message, data_format))
|
538
|
+
total_size += len(serialized_messages[-1]) + 512 # 512 bytes for estimated framing overhead
|
539
|
+
await self.put_data_out(function_call_id, index, data_format, serialized_messages)
|
540
|
+
index += len(serialized_messages)
|
541
541
|
|
542
542
|
async def _queue_create(self, size: int) -> asyncio.Queue:
|
543
543
|
"""Create a queue, on the synchronicity event loop (needed on Python 3.8 and 3.9)."""
|
@@ -255,7 +255,8 @@ def import_single_function_service(
|
|
255
255
|
else:
|
256
256
|
user_defined_callable = f
|
257
257
|
elif len(parts) == 2:
|
258
|
-
#
|
258
|
+
# This path should only be triggered by @build class builder methods and can be removed
|
259
|
+
# once @build is deprecated.
|
259
260
|
assert not function_def.use_method_name # new "placeholder methods" should not be invoked directly!
|
260
261
|
assert function_def.is_builder_function
|
261
262
|
cls_name, fun_name = parts
|
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.73.
|
30
|
+
self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.73.7"
|
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.73.
|
88
|
+
self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.73.7"
|
89
89
|
): ...
|
90
90
|
def is_closed(self) -> bool: ...
|
91
91
|
@property
|
modal/cls.py
CHANGED
@@ -12,7 +12,7 @@ from modal._utils.function_utils import CLASS_PARAM_TYPE_MAP
|
|
12
12
|
from modal_proto import api_pb2
|
13
13
|
|
14
14
|
from ._functions import _Function, _parse_retries
|
15
|
-
from ._object import
|
15
|
+
from ._object import _Object
|
16
16
|
from ._resolver import Resolver
|
17
17
|
from ._resources import convert_fn_config_to_resources_config
|
18
18
|
from ._serialization import check_valid_cls_constructor_arg
|
@@ -22,7 +22,8 @@ from ._utils.deprecation import deprecation_warning, renamed_parameter
|
|
22
22
|
from ._utils.grpc_utils import retry_transient_errors
|
23
23
|
from ._utils.mount_utils import validate_volumes
|
24
24
|
from .client import _Client
|
25
|
-
from .
|
25
|
+
from .config import config
|
26
|
+
from .exception import ExecutionError, InvalidError, NotFoundError
|
26
27
|
from .gpu import GPU_T
|
27
28
|
from .partial_function import (
|
28
29
|
_find_callables_for_obj,
|
@@ -145,10 +146,6 @@ class _Obj:
|
|
145
146
|
|
146
147
|
_instance_service_function: Optional[_Function] = None # this gets set lazily
|
147
148
|
|
148
|
-
def _uses_common_service_function(self):
|
149
|
-
# Used for backwards compatibility checks with pre v0.63 classes
|
150
|
-
return self._cls._class_service_function is not None
|
151
|
-
|
152
149
|
def __init__(
|
153
150
|
self,
|
154
151
|
cls: "_Cls",
|
@@ -175,8 +172,6 @@ class _Obj:
|
|
175
172
|
def _cached_service_function(self) -> "modal.functions._Function":
|
176
173
|
# Returns a service function for this _Obj, serving all its methods
|
177
174
|
# In case of methods without parameters or options, this is simply proxying to the class service function
|
178
|
-
|
179
|
-
# only safe to call for 0.63+ classes (before then, all methods had their own services)
|
180
175
|
if not self._instance_service_function:
|
181
176
|
assert self._cls._class_service_function
|
182
177
|
self._instance_service_function = self._cls._class_service_function._bind_parameters(
|
@@ -232,10 +227,6 @@ class _Obj:
|
|
232
227
|
Model("fine-tuned-model").keep_warm(2)
|
233
228
|
```
|
234
229
|
"""
|
235
|
-
if not self._uses_common_service_function():
|
236
|
-
raise VersionError(
|
237
|
-
"Class instance `.keep_warm(...)` can't be used on classes deployed using client version <v0.63"
|
238
|
-
)
|
239
230
|
await self._cached_service_function().keep_warm(warm_pool_size)
|
240
231
|
|
241
232
|
def _cached_user_cls_instance(self):
|
@@ -284,7 +275,6 @@ class _Obj:
|
|
284
275
|
|
285
276
|
def __getattr__(self, k):
|
286
277
|
# This is a bit messy and branchy because:
|
287
|
-
# * Support for pre-0.63 lookups *and* newer classes
|
288
278
|
# * Support .remote() on both hydrated (local or remote classes) or unhydrated classes (remote classes only)
|
289
279
|
# * Support .local() on both hydrated and unhydrated classes (assuming local access to code)
|
290
280
|
# * Support attribute access (when local cls is available)
|
@@ -305,11 +295,7 @@ class _Obj:
|
|
305
295
|
# doesn't require a local instance.
|
306
296
|
# As long as we have the service function or params, we can do remote calls
|
307
297
|
# without calling the constructor of the class in the calling context.
|
308
|
-
|
309
|
-
# a <v0.63 lookup
|
310
|
-
return class_bound_method._bind_parameters(self, self._options, self._args, self._kwargs)
|
311
|
-
else:
|
312
|
-
return _bind_instance_method(self._cached_service_function(), class_bound_method)
|
298
|
+
return _bind_instance_method(self._cached_service_function(), class_bound_method)
|
313
299
|
|
314
300
|
return None # The attribute isn't a method
|
315
301
|
|
@@ -366,9 +352,7 @@ class _Cls(_Object, type_prefix="cs"):
|
|
366
352
|
"""
|
367
353
|
|
368
354
|
_user_cls: Optional[type]
|
369
|
-
_class_service_function: Optional[
|
370
|
-
_Function
|
371
|
-
] # The _Function serving *all* methods of the class, used for version >=v0.63
|
355
|
+
_class_service_function: Optional[_Function] # The _Function (read "service") serving *all* methods of the class
|
372
356
|
_method_functions: Optional[dict[str, _Function]] = None # Placeholder _Functions for each method
|
373
357
|
_options: Optional[api_pb2.FunctionOptions]
|
374
358
|
_callables: dict[str, Callable[..., Any]]
|
@@ -414,15 +398,15 @@ class _Cls(_Object, type_prefix="cs"):
|
|
414
398
|
|
415
399
|
def _hydrate_metadata(self, metadata: Message):
|
416
400
|
assert isinstance(metadata, api_pb2.ClassHandleMetadata)
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
401
|
+
assert self._class_service_function.is_hydrated
|
402
|
+
|
403
|
+
if self._class_service_function._method_handle_metadata and len(
|
404
|
+
self._class_service_function._method_handle_metadata
|
421
405
|
):
|
422
|
-
#
|
406
|
+
# Method metadata stored on the backend Function object (v0.67+)
|
423
407
|
if self._method_functions:
|
424
408
|
# We're here when the Cls is loaded locally (e.g. _Cls.from_local) so the _method_functions mapping is
|
425
|
-
# populated with (un-hydrated) _Function objects
|
409
|
+
# populated with (un-hydrated) _Function objects - hydrate using function method metadata
|
426
410
|
for (
|
427
411
|
method_name,
|
428
412
|
method_handle_metadata,
|
@@ -430,9 +414,10 @@ class _Cls(_Object, type_prefix="cs"):
|
|
430
414
|
self._method_functions[method_name]._hydrate(
|
431
415
|
self._class_service_function.object_id, self._client, method_handle_metadata
|
432
416
|
)
|
433
|
-
|
434
417
|
else:
|
435
|
-
# We're here when the function is loaded remotely (e.g. _Cls.from_name)
|
418
|
+
# We're here when the function is loaded remotely (e.g. _Cls.from_name),
|
419
|
+
# same as above, but we create the method "Functions" from scratch rather
|
420
|
+
# than hydrate existing ones. TODO(elias): feels complicated - refactor?
|
436
421
|
self._method_functions = {}
|
437
422
|
for (
|
438
423
|
method_name,
|
@@ -441,19 +426,13 @@ class _Cls(_Object, type_prefix="cs"):
|
|
441
426
|
self._method_functions[method_name] = _Function._new_hydrated(
|
442
427
|
self._class_service_function.object_id, self._client, method_handle_metadata
|
443
428
|
)
|
444
|
-
elif self._class_service_function and self._class_service_function.object_id:
|
445
|
-
# A class with a class service function and method placeholder functions
|
446
|
-
self._method_functions = {}
|
447
|
-
for method in metadata.methods:
|
448
|
-
self._method_functions[method.function_name] = _Function._new_hydrated(
|
449
|
-
self._class_service_function.object_id, self._client, method.function_handle_metadata
|
450
|
-
)
|
451
429
|
else:
|
452
|
-
#
|
430
|
+
# Method metadata stored on the backend Cls object - pre 0.67
|
431
|
+
# Can be removed when v0.67 is least supported version (all metadata is on the function)
|
453
432
|
self._method_functions = {}
|
454
433
|
for method in metadata.methods:
|
455
434
|
self._method_functions[method.function_name] = _Function._new_hydrated(
|
456
|
-
|
435
|
+
self._class_service_function.object_id, self._client, method.function_handle_metadata
|
457
436
|
)
|
458
437
|
|
459
438
|
@staticmethod
|
@@ -528,11 +507,6 @@ class _Cls(_Object, type_prefix="cs"):
|
|
528
507
|
cls._name = user_cls.__name__
|
529
508
|
return cls
|
530
509
|
|
531
|
-
def _uses_common_service_function(self):
|
532
|
-
# Used for backwards compatibility with version < 0.63
|
533
|
-
# where methods had individual top level functions
|
534
|
-
return self._class_service_function is not None
|
535
|
-
|
536
510
|
@classmethod
|
537
511
|
@renamed_parameter((2024, 12, 18), "tag", "name")
|
538
512
|
def from_name(
|
@@ -553,9 +527,9 @@ class _Cls(_Object, type_prefix="cs"):
|
|
553
527
|
Model = modal.Cls.from_name("other-app", "Model")
|
554
528
|
```
|
555
529
|
"""
|
530
|
+
_environment_name = environment_name or config.get("environment")
|
556
531
|
|
557
|
-
async def _load_remote(
|
558
|
-
_environment_name = _get_environment_name(environment_name, resolver)
|
532
|
+
async def _load_remote(self: _Cls, resolver: Resolver, existing_object_id: Optional[str]):
|
559
533
|
request = api_pb2.ClassGetRequest(
|
560
534
|
app_name=app_name,
|
561
535
|
object_tag=name,
|
@@ -576,26 +550,18 @@ class _Cls(_Object, type_prefix="cs"):
|
|
576
550
|
raise
|
577
551
|
|
578
552
|
print_server_warnings(response.server_warnings)
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
class_service_function = _Function.from_name(
|
583
|
-
app_name,
|
584
|
-
class_service_name,
|
585
|
-
environment_name=_environment_name,
|
586
|
-
)
|
587
|
-
try:
|
588
|
-
obj._class_service_function = await resolver.load(class_service_function)
|
589
|
-
except modal.exception.NotFoundError:
|
590
|
-
# this happens when looking up classes deployed using <v0.63
|
591
|
-
# This try-except block can be removed when min supported version >= 0.63
|
592
|
-
pass
|
593
|
-
|
594
|
-
obj._hydrate(response.class_id, resolver.client, response.handle_metadata)
|
553
|
+
await resolver.load(self._class_service_function)
|
554
|
+
self._hydrate(response.class_id, resolver.client, response.handle_metadata)
|
595
555
|
|
596
556
|
rep = f"Ref({app_name})"
|
597
557
|
cls = cls._from_loader(_load_remote, rep, is_another_app=True, hydrate_lazily=True)
|
598
|
-
|
558
|
+
|
559
|
+
class_service_name = f"{name}.*" # special name of the base service function for the class
|
560
|
+
cls._class_service_function = _Function.from_name(
|
561
|
+
app_name,
|
562
|
+
class_service_name,
|
563
|
+
environment_name=_environment_name,
|
564
|
+
)
|
599
565
|
cls._name = name
|
600
566
|
return cls
|
601
567
|
|
modal/cls.pyi
CHANGED
@@ -34,7 +34,6 @@ class _Obj:
|
|
34
34
|
_kwargs: dict[str, typing.Any]
|
35
35
|
_instance_service_function: typing.Optional[modal._functions._Function]
|
36
36
|
|
37
|
-
def _uses_common_service_function(self): ...
|
38
37
|
def __init__(
|
39
38
|
self,
|
40
39
|
cls: _Cls,
|
@@ -75,7 +74,6 @@ class Obj:
|
|
75
74
|
args,
|
76
75
|
kwargs,
|
77
76
|
): ...
|
78
|
-
def _uses_common_service_function(self): ...
|
79
77
|
def _cached_service_function(self) -> modal.functions.Function: ...
|
80
78
|
def _get_parameter_values(self) -> dict[str, typing.Any]: ...
|
81
79
|
def _new_user_cls_instance(self): ...
|
@@ -117,7 +115,6 @@ class _Cls(modal._object._Object):
|
|
117
115
|
def validate_construction_mechanism(user_cls): ...
|
118
116
|
@staticmethod
|
119
117
|
def from_local(user_cls, app: modal.app._App, class_service_function: modal._functions._Function) -> _Cls: ...
|
120
|
-
def _uses_common_service_function(self): ...
|
121
118
|
@classmethod
|
122
119
|
def from_name(
|
123
120
|
cls: type[_Cls],
|
@@ -176,7 +173,6 @@ class Cls(modal.object.Object):
|
|
176
173
|
def validate_construction_mechanism(user_cls): ...
|
177
174
|
@staticmethod
|
178
175
|
def from_local(user_cls, app: modal.app.App, class_service_function: modal.functions.Function) -> Cls: ...
|
179
|
-
def _uses_common_service_function(self): ...
|
180
176
|
@classmethod
|
181
177
|
def from_name(
|
182
178
|
cls: type[Cls],
|
modal/functions.pyi
CHANGED
@@ -199,11 +199,11 @@ class Function(
|
|
199
199
|
|
200
200
|
_call_generator_nowait: ___call_generator_nowait_spec[typing_extensions.Self]
|
201
201
|
|
202
|
-
class __remote_spec(typing_extensions.Protocol[
|
202
|
+
class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
203
203
|
def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
|
204
204
|
async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
|
205
205
|
|
206
|
-
remote: __remote_spec[modal._functions.
|
206
|
+
remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
|
207
207
|
|
208
208
|
class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
|
209
209
|
def __call__(self, *args, **kwargs) -> typing.Generator[typing.Any, None, None]: ...
|
@@ -218,19 +218,19 @@ class Function(
|
|
218
218
|
self, *args: modal._functions.P.args, **kwargs: modal._functions.P.kwargs
|
219
219
|
) -> modal._functions.OriginalReturnType: ...
|
220
220
|
|
221
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
221
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
222
222
|
def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
223
223
|
async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
224
224
|
|
225
225
|
_experimental_spawn: ___experimental_spawn_spec[
|
226
|
-
modal._functions.
|
226
|
+
modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
|
227
227
|
]
|
228
228
|
|
229
|
-
class __spawn_spec(typing_extensions.Protocol[
|
229
|
+
class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
230
230
|
def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
231
231
|
async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
|
232
232
|
|
233
|
-
spawn: __spawn_spec[modal._functions.
|
233
|
+
spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
|
234
234
|
|
235
235
|
def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]: ...
|
236
236
|
|
@@ -3,7 +3,7 @@ modal/__main__.py,sha256=scYhGFqh8OJcVDo-VOxIT6CCwxOgzgflYWMnIZiMRqE,2871
|
|
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=qahIuJvaMmWG85N5vNS1yuAQ9XZoo1ftzfatkos_q7I,29553
|
6
|
-
modal/_functions.py,sha256=
|
6
|
+
modal/_functions.py,sha256=4-CRh1Hgi508tEZRFaSRYdS1Oki0MPgAhnUYcEckMe4,70113
|
7
7
|
modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
|
8
8
|
modal/_location.py,sha256=S3lSxIU3h9HkWpkJ3Pwo0pqjIOSB1fjeSgUsY3x7eec,1202
|
9
9
|
modal/_object.py,sha256=ItQcsMNkz9Y3kdTsvfNarbW-paJ2qabDyQ7njaqY0XI,11359
|
@@ -21,11 +21,11 @@ modal/app.py,sha256=4tHmc1hFAL9uGj9wp-u7AOPp2mWfu4wJ-633ghFePIY,44248
|
|
21
21
|
modal/app.pyi,sha256=ppb3UmJU4oX-Ptd5v_SOQJBP1309qovKaJnH5844pFI,25885
|
22
22
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
23
23
|
modal/client.py,sha256=8SQawr7P1PNUCq1UmJMUQXG2jIo4Nmdcs311XqrNLRE,15276
|
24
|
-
modal/client.pyi,sha256=
|
24
|
+
modal/client.pyi,sha256=IdooVP7M-V4EO74JFSFG91VhsFwQVm7-5IQvvu4idL0,7591
|
25
25
|
modal/cloud_bucket_mount.py,sha256=YOe9nnvSr4ZbeCn587d7_VhE9IioZYRvF9VYQTQux08,5914
|
26
26
|
modal/cloud_bucket_mount.pyi,sha256=30T3K1a89l6wzmEJ_J9iWv9SknoGqaZDx59Xs-ZQcmk,1607
|
27
|
-
modal/cls.py,sha256=
|
28
|
-
modal/cls.pyi,sha256=
|
27
|
+
modal/cls.py,sha256=kNnZrBYVXOhgEXU0rDWk2Hr-bQRrsZkMKDgC-TD_6Bs,31063
|
28
|
+
modal/cls.pyi,sha256=gb6QNwfX3HSJfcZXPY36N9ywF7aBJTwwtoARnf3G1HQ,8877
|
29
29
|
modal/config.py,sha256=BzhZYUUwOmvVwf6x5kf0ywMC257s648dmuhsnB6g3gk,11041
|
30
30
|
modal/container_process.py,sha256=WTqLn01dJPVkPpwR_0w_JH96ceN5mV4TGtiu1ZR2RRA,6108
|
31
31
|
modal/container_process.pyi,sha256=Hf0J5JyDdCCXBJSKx6gvkPOo0XrztCm78xzxamtzUjQ,2828
|
@@ -40,7 +40,7 @@ modal/file_io.py,sha256=lcMs_E9Xfm0YX1t9U2wNIBPnqHRxmImqjLW1GHqVmyg,20945
|
|
40
40
|
modal/file_io.pyi,sha256=NTRft1tbPSWf9TlWVeZmTlgB5AZ_Zhu2srWIrWr7brk,9445
|
41
41
|
modal/file_pattern_matcher.py,sha256=1cZ4V2wSLiaXqAqStETSwp3bzDD6QZOt6pmmjk3Okz4,6505
|
42
42
|
modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
|
43
|
-
modal/functions.pyi,sha256=
|
43
|
+
modal/functions.pyi,sha256=pStDYd9PnJVvWs57qhKIVnmYYAhvKdYzVNoNU1A-s_Q,14231
|
44
44
|
modal/gpu.py,sha256=2qZMNnoMrjU-5Bu7fx68pANUAKTtZq0EWEEeBA9OUVQ,7426
|
45
45
|
modal/image.py,sha256=Vjsi7wS9dEcoj-7m7_LmvbK5iqEuFz-SHKl2K-qWcew,90952
|
46
46
|
modal/image.pyi,sha256=A5mW2dBguEhmRo815Ax1rBIMXTCriu7PqLMHoUPsez8,26372
|
@@ -83,10 +83,10 @@ modal/volume.py,sha256=JAWeDvoAG95tMBv-fYIERyHsJPS_X_xGpxRRmYtb6j0,30096
|
|
83
83
|
modal/volume.pyi,sha256=kTsXarphjZILXci84LQy7EyC84eXUs5-7D62IM5q3eE,12491
|
84
84
|
modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
85
85
|
modal/_runtime/asgi.py,sha256=c4hmaMW1pLo-cm7ouriJjieuFm4ZF6D2LMy0638sfOs,22139
|
86
|
-
modal/_runtime/container_io_manager.py,sha256=
|
86
|
+
modal/_runtime/container_io_manager.py,sha256=QVWMCvJatd2696wsauzXl20psxCYsR0d_CHeS5ceTsU,43201
|
87
87
|
modal/_runtime/execution_context.py,sha256=E6ofm6j1POXGPxS841X3V7JU6NheVb8OkQc7JpLq4Kg,2712
|
88
88
|
modal/_runtime/telemetry.py,sha256=T1RoAGyjBDr1swiM6pPsGRSITm7LI5FDK18oNXxY08U,5163
|
89
|
-
modal/_runtime/user_code_imports.py,sha256=
|
89
|
+
modal/_runtime/user_code_imports.py,sha256=zl_Mq9dsrVF62x3w-iNK1YAhZKYAXeFaGpd4G7AySTc,14746
|
90
90
|
modal/_utils/__init__.py,sha256=waLjl5c6IPDhSsdWAm9Bji4e2PVxamYABKAze6CHVXY,28
|
91
91
|
modal/_utils/app_utils.py,sha256=88BT4TPLWfYAQwKTHcyzNQRHg8n9B-QE2UyJs96iV-0,108
|
92
92
|
modal/_utils/async_utils.py,sha256=9ubwMkwiDB4gzOYG2jL9j7Fs-5dxHjcifZe3r7JRg-k,25091
|
@@ -170,10 +170,10 @@ 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=wiJQ53c-OMs0Xf1UeXOxQ7FwlV1VzIjnX6o-pRYZ_Pk,470
|
172
172
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
173
|
-
modal_version/_version_generated.py,sha256=
|
174
|
-
modal-0.73.
|
175
|
-
modal-0.73.
|
176
|
-
modal-0.73.
|
177
|
-
modal-0.73.
|
178
|
-
modal-0.73.
|
179
|
-
modal-0.73.
|
173
|
+
modal_version/_version_generated.py,sha256=o0syRK3ZmTNxvzqCB10qZ2o4WuVW_Wn0HqidHCkVvJk,148
|
174
|
+
modal-0.73.7.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
175
|
+
modal-0.73.7.dist-info/METADATA,sha256=L5RUur3zp_azxXlfZQ-mqgOpuwt5LsYZOoFxhYHr6UY,2329
|
176
|
+
modal-0.73.7.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
177
|
+
modal-0.73.7.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
178
|
+
modal-0.73.7.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
|
179
|
+
modal-0.73.7.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|