modal 0.73.28__py3-none-any.whl → 0.73.30__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/__main__.py +1 -1
- modal/_functions.py +3 -14
- modal/_partial_function.py +4 -8
- modal/_resolver.py +1 -2
- modal/_runtime/container_io_manager.py +1 -1
- modal/_runtime/user_code_imports.py +1 -2
- modal/_utils/async_utils.py +3 -6
- modal/_utils/blob_utils.py +1 -1
- modal/_utils/function_utils.py +1 -2
- modal/app.py +6 -8
- modal/cli/entry_point.py +1 -1
- modal/cli/run.py +2 -3
- modal/cli/secret.py +1 -1
- modal/cli/volume.py +1 -2
- modal/client.pyi +2 -2
- modal/environments.py +1 -3
- modal/file_pattern_matcher.py +1 -2
- modal/mount.py +4 -8
- modal/output.py +1 -0
- modal/sandbox.py +4 -8
- modal/token_flow.py +1 -1
- {modal-0.73.28.dist-info → modal-0.73.30.dist-info}/METADATA +1 -1
- {modal-0.73.28.dist-info → modal-0.73.30.dist-info}/RECORD +29 -29
- modal_docs/mdmd/mdmd.py +1 -0
- modal_version/_version_generated.py +1 -1
- {modal-0.73.28.dist-info → modal-0.73.30.dist-info}/LICENSE +0 -0
- {modal-0.73.28.dist-info → modal-0.73.30.dist-info}/WHEEL +0 -0
- {modal-0.73.28.dist-info → modal-0.73.30.dist-info}/entry_points.txt +0 -0
- {modal-0.73.28.dist-info → modal-0.73.30.dist-info}/top_level.txt +0 -0
modal/__main__.py
CHANGED
@@ -66,7 +66,7 @@ def main():
|
|
66
66
|
title = "Error"
|
67
67
|
content = str(exc)
|
68
68
|
if notes := getattr(exc, "__notes__", []):
|
69
|
-
content = f"{content}\n\nNote: {' '
|
69
|
+
content = f"{content}\n\nNote: {' '.join(notes)}"
|
70
70
|
|
71
71
|
console = Console(stderr=True)
|
72
72
|
panel = Panel(Text(content), title=title, title_align="left", border_style="red")
|
modal/_functions.py
CHANGED
@@ -398,9 +398,9 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
398
398
|
_use_method_name: str = ""
|
399
399
|
|
400
400
|
_class_parameter_info: Optional["api_pb2.ClassParameterInfo"] = None
|
401
|
-
_method_handle_metadata: Optional[
|
402
|
-
|
403
|
-
|
401
|
+
_method_handle_metadata: Optional[dict[str, "api_pb2.FunctionHandleMetadata"]] = (
|
402
|
+
None # set for 0.67+ class service functions
|
403
|
+
)
|
404
404
|
|
405
405
|
def _bind_method(
|
406
406
|
self,
|
@@ -1090,17 +1090,6 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
1090
1090
|
f = modal.Function.from_name("other-app", "function")
|
1091
1091
|
```
|
1092
1092
|
"""
|
1093
|
-
if "." in name:
|
1094
|
-
class_name, method_name = name.split(".", 1)
|
1095
|
-
deprecation_warning(
|
1096
|
-
(2025, 2, 6),
|
1097
|
-
"Looking up class methods using Function.from_name will be deprecated"
|
1098
|
-
" in a future version of Modal.\nUse modal.Cls.from_name instead, e.g.\n\n"
|
1099
|
-
f'{class_name} = modal.Cls.from_name("{app_name}", "{class_name}")\n'
|
1100
|
-
f"instance = {class_name}(...)\n"
|
1101
|
-
f"instance.{method_name}.remote(...)\n",
|
1102
|
-
pending=True,
|
1103
|
-
)
|
1104
1093
|
|
1105
1094
|
async def _load_remote(self: _Function, resolver: Resolver, existing_object_id: Optional[str]):
|
1106
1095
|
assert resolver.client and resolver.client.stub
|
modal/_partial_function.py
CHANGED
@@ -176,23 +176,19 @@ class _MethodDecoratorType:
|
|
176
176
|
def __call__(
|
177
177
|
self,
|
178
178
|
func: "modal.partial_function.PartialFunction[typing_extensions.Concatenate[Any, P], ReturnType, OriginalReturnType]", # noqa
|
179
|
-
) -> "modal.partial_function.PartialFunction[P, ReturnType, OriginalReturnType]":
|
180
|
-
...
|
179
|
+
) -> "modal.partial_function.PartialFunction[P, ReturnType, OriginalReturnType]": ...
|
181
180
|
|
182
181
|
@typing.overload
|
183
182
|
def __call__(
|
184
183
|
self, func: "Callable[typing_extensions.Concatenate[Any, P], Coroutine[Any, Any, ReturnType]]"
|
185
|
-
) -> "modal.partial_function.PartialFunction[P, ReturnType, Coroutine[Any, Any, ReturnType]]":
|
186
|
-
...
|
184
|
+
) -> "modal.partial_function.PartialFunction[P, ReturnType, Coroutine[Any, Any, ReturnType]]": ...
|
187
185
|
|
188
186
|
@typing.overload
|
189
187
|
def __call__(
|
190
188
|
self, func: "Callable[typing_extensions.Concatenate[Any, P], ReturnType]"
|
191
|
-
) -> "modal.partial_function.PartialFunction[P, ReturnType, ReturnType]":
|
192
|
-
...
|
189
|
+
) -> "modal.partial_function.PartialFunction[P, ReturnType, ReturnType]": ...
|
193
190
|
|
194
|
-
def __call__(self, func):
|
195
|
-
...
|
191
|
+
def __call__(self, func): ...
|
196
192
|
|
197
193
|
|
198
194
|
# TODO(elias): fix support for coroutine type unwrapping for methods (static typing)
|
modal/_resolver.py
CHANGED
@@ -142,8 +142,7 @@ class Resolver:
|
|
142
142
|
and obj.object_id != existing_object_id
|
143
143
|
):
|
144
144
|
raise Exception(
|
145
|
-
f"Tried creating an object using existing id {existing_object_id}"
|
146
|
-
f" but it has id {obj.object_id}"
|
145
|
+
f"Tried creating an object using existing id {existing_object_id} but it has id {obj.object_id}"
|
147
146
|
)
|
148
147
|
|
149
148
|
return obj
|
@@ -896,7 +896,7 @@ class _ContainerIOManager:
|
|
896
896
|
gpu_process_state = gpu_memory_snapshot.get_state()
|
897
897
|
if gpu_process_state != gpu_memory_snapshot.CudaCheckpointState.RUNNING:
|
898
898
|
raise ValueError(
|
899
|
-
"Cannot snapshot GPU state if it isn't running.
|
899
|
+
f"Cannot snapshot GPU state if it isn't running. Current GPU state: {gpu_process_state}"
|
900
900
|
)
|
901
901
|
|
902
902
|
gpu_memory_snapshot.toggle()
|
@@ -46,8 +46,7 @@ class Service(metaclass=ABCMeta):
|
|
46
46
|
@abstractmethod
|
47
47
|
def get_finalized_functions(
|
48
48
|
self, fun_def: api_pb2.Function, container_io_manager: "modal._runtime.container_io_manager.ContainerIOManager"
|
49
|
-
) -> dict[str, "FinalizedFunction"]:
|
50
|
-
...
|
49
|
+
) -> dict[str, "FinalizedFunction"]: ...
|
51
50
|
|
52
51
|
|
53
52
|
def construct_webhook_callable(
|
modal/_utils/async_utils.py
CHANGED
@@ -505,13 +505,11 @@ async def sync_or_async_iter(iter: Union[Iterable[T], AsyncIterable[T]]) -> Asyn
|
|
505
505
|
|
506
506
|
|
507
507
|
@typing.overload
|
508
|
-
def async_zip(g1: AsyncGenerator[T, None], g2: AsyncGenerator[V, None], /) -> AsyncGenerator[tuple[T, V], None]:
|
509
|
-
...
|
508
|
+
def async_zip(g1: AsyncGenerator[T, None], g2: AsyncGenerator[V, None], /) -> AsyncGenerator[tuple[T, V], None]: ...
|
510
509
|
|
511
510
|
|
512
511
|
@typing.overload
|
513
|
-
def async_zip(*generators: AsyncGenerator[T, None]) -> AsyncGenerator[tuple[T, ...], None]:
|
514
|
-
...
|
512
|
+
def async_zip(*generators: AsyncGenerator[T, None]) -> AsyncGenerator[tuple[T, ...], None]: ...
|
515
513
|
|
516
514
|
|
517
515
|
async def async_zip(*generators):
|
@@ -561,8 +559,7 @@ class ExceptionWrapper:
|
|
561
559
|
value: Exception
|
562
560
|
|
563
561
|
|
564
|
-
class StopSentinelType:
|
565
|
-
...
|
562
|
+
class StopSentinelType: ...
|
566
563
|
|
567
564
|
|
568
565
|
STOP_SENTINEL = StopSentinelType()
|
modal/_utils/blob_utils.py
CHANGED
@@ -227,7 +227,7 @@ async def blob_upload(payload: bytes, stub: ModalClientModal) -> str:
|
|
227
227
|
blob_id = await _blob_upload(upload_hashes, payload, stub)
|
228
228
|
dur_s = max(time.time() - t0, 0.001) # avoid division by zero
|
229
229
|
throughput_mib_s = (size_mib) / dur_s
|
230
|
-
logger.debug(f"Uploaded large blob of size {size_mib:.2f} MiB ({throughput_mib_s:.2f} MiB/s).
|
230
|
+
logger.debug(f"Uploaded large blob of size {size_mib:.2f} MiB ({throughput_mib_s:.2f} MiB/s). {blob_id}")
|
231
231
|
return blob_id
|
232
232
|
|
233
233
|
|
modal/_utils/function_utils.py
CHANGED
@@ -246,7 +246,6 @@ class FunctionInfo:
|
|
246
246
|
|
247
247
|
def get_cls_var_attrs(self) -> dict[str, Any]:
|
248
248
|
import dis
|
249
|
-
|
250
249
|
import opcode
|
251
250
|
|
252
251
|
LOAD_ATTR = opcode.opmap["LOAD_ATTR"]
|
@@ -603,7 +602,7 @@ class FunctionCreationStatus:
|
|
603
602
|
for custom_domain in self.response.function.custom_domain_info:
|
604
603
|
custom_domain_status_row = self.resolver.add_status_row()
|
605
604
|
custom_domain_status_row.finish(
|
606
|
-
f"Custom domain for {self.tag} => [magenta underline]
|
605
|
+
f"Custom domain for {self.tag} => [magenta underline]{custom_domain.url}[/magenta underline]"
|
607
606
|
)
|
608
607
|
else:
|
609
608
|
self.status_row.finish(f"Created function {self.tag}.")
|
modal/app.py
CHANGED
@@ -102,21 +102,19 @@ class _FunctionDecoratorType:
|
|
102
102
|
@overload
|
103
103
|
def __call__(
|
104
104
|
self, func: PartialFunction[P, ReturnType, OriginalReturnType]
|
105
|
-
) -> Function[P, ReturnType, OriginalReturnType]:
|
106
|
-
... # already wrapped by a modal decorator, e.g. web_endpoint
|
105
|
+
) -> Function[P, ReturnType, OriginalReturnType]: ... # already wrapped by a modal decorator, e.g. web_endpoint
|
107
106
|
|
108
107
|
@overload
|
109
108
|
def __call__(
|
110
109
|
self, func: Callable[P, Coroutine[Any, Any, ReturnType]]
|
111
|
-
) -> Function[P, ReturnType, Coroutine[Any, Any, ReturnType]]:
|
112
|
-
... # decorated async function
|
110
|
+
) -> Function[P, ReturnType, Coroutine[Any, Any, ReturnType]]: ... # decorated async function
|
113
111
|
|
114
112
|
@overload
|
115
|
-
def __call__(
|
116
|
-
|
113
|
+
def __call__(
|
114
|
+
self, func: Callable[P, ReturnType]
|
115
|
+
) -> Function[P, ReturnType, ReturnType]: ... # decorated non-async function
|
117
116
|
|
118
|
-
def __call__(self, func):
|
119
|
-
...
|
117
|
+
def __call__(self, func): ...
|
120
118
|
|
121
119
|
|
122
120
|
class _App:
|
modal/cli/entry_point.py
CHANGED
@@ -69,7 +69,7 @@ def check_path():
|
|
69
69
|
"[red]The `[white]modal[/white]` command is not executable!\n"
|
70
70
|
"You may need to give it permissions or use `[white]python -m modal[/white]` as a workaround.[/red]\n"
|
71
71
|
)
|
72
|
-
text += "See more information here:\n\n
|
72
|
+
text += f"See more information here:\n\n[link={url}]{url}[/link]\n"
|
73
73
|
console = Console()
|
74
74
|
console.print(text)
|
75
75
|
console.print(Rule(style="white"))
|
modal/cli/run.py
CHANGED
@@ -230,8 +230,7 @@ def _get_click_command_for_cls(app: App, method_ref: MethodReference):
|
|
230
230
|
method_name = method_names[0]
|
231
231
|
else:
|
232
232
|
raise click.UsageError(
|
233
|
-
f"Please specify a specific method of {cls._get_name()} to run, "
|
234
|
-
f"e.g. `modal run foo.py::MyClass.bar`" # noqa: E501
|
233
|
+
f"Please specify a specific method of {cls._get_name()} to run, e.g. `modal run foo.py::MyClass.bar`" # noqa: E501
|
235
234
|
)
|
236
235
|
|
237
236
|
partial_function = partial_functions[method_name]
|
@@ -493,7 +492,7 @@ def shell(
|
|
493
492
|
cloud: Optional[str] = typer.Option(
|
494
493
|
default=None,
|
495
494
|
help=(
|
496
|
-
"Cloud provider to run the shell on.
|
495
|
+
"Cloud provider to run the shell on. Possible values are `aws`, `gcp`, `oci`, `auto` (if not using REF)."
|
497
496
|
),
|
498
497
|
),
|
499
498
|
region: Optional[str] = typer.Option(
|
modal/cli/secret.py
CHANGED
@@ -85,7 +85,7 @@ def some_function():
|
|
85
85
|
"""
|
86
86
|
plural_s = "s" if len(env_dict) > 1 else ""
|
87
87
|
console.print(
|
88
|
-
f"""Created a new secret '{secret_name}' with the key{plural_s} {
|
88
|
+
f"""Created a new secret '{secret_name}' with the key{plural_s} {", ".join(repr(k) for k in env_dict.keys())}"""
|
89
89
|
)
|
90
90
|
console.print("\nUse it in to your Modal app using:\n")
|
91
91
|
console.print(Syntax(example_code, "python"))
|
modal/cli/volume.py
CHANGED
@@ -297,8 +297,7 @@ async def rename(
|
|
297
297
|
):
|
298
298
|
if not yes:
|
299
299
|
typer.confirm(
|
300
|
-
f"Are you sure you want rename the modal.Volume '{old_name}'?"
|
301
|
-
" This may break any Apps currently using it.",
|
300
|
+
f"Are you sure you want rename the modal.Volume '{old_name}'? This may break any Apps currently using it.",
|
302
301
|
default=False,
|
303
302
|
abort=True,
|
304
303
|
)
|
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.30"
|
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.30"
|
89
89
|
): ...
|
90
90
|
def is_closed(self) -> bool: ...
|
91
91
|
@property
|
modal/environments.py
CHANGED
@@ -29,9 +29,7 @@ class _Environment(_Object, type_prefix="en"):
|
|
29
29
|
|
30
30
|
def __init__(self):
|
31
31
|
"""mdmd:hidden"""
|
32
|
-
raise RuntimeError(
|
33
|
-
"`Environment(...)` constructor is not allowed." " Please use `Environment.from_name` instead."
|
34
|
-
)
|
32
|
+
raise RuntimeError("`Environment(...)` constructor is not allowed. Please use `Environment.from_name` instead.")
|
35
33
|
|
36
34
|
# TODO(michael) Keeping this private for now until we decide what else should be in it
|
37
35
|
# And what the rules should be about updates / mutability
|
modal/file_pattern_matcher.py
CHANGED
modal/mount.py
CHANGED
@@ -78,20 +78,16 @@ def python_standalone_mount_name(version: str) -> str:
|
|
78
78
|
|
79
79
|
class _MountEntry(metaclass=abc.ABCMeta):
|
80
80
|
@abc.abstractmethod
|
81
|
-
def description(self) -> str:
|
82
|
-
...
|
81
|
+
def description(self) -> str: ...
|
83
82
|
|
84
83
|
@abc.abstractmethod
|
85
|
-
def get_files_to_upload(self) -> typing.Iterator[tuple[Path, str]]:
|
86
|
-
...
|
84
|
+
def get_files_to_upload(self) -> typing.Iterator[tuple[Path, str]]: ...
|
87
85
|
|
88
86
|
@abc.abstractmethod
|
89
|
-
def watch_entry(self) -> tuple[Path, Path]:
|
90
|
-
...
|
87
|
+
def watch_entry(self) -> tuple[Path, Path]: ...
|
91
88
|
|
92
89
|
@abc.abstractmethod
|
93
|
-
def top_level_paths(self) -> list[tuple[Path, PurePosixPath]]:
|
94
|
-
...
|
90
|
+
def top_level_paths(self) -> list[tuple[Path, PurePosixPath]]: ...
|
95
91
|
|
96
92
|
|
97
93
|
def _select_files(entries: list[_MountEntry]) -> list[tuple[Path, PurePosixPath]]:
|
modal/output.py
CHANGED
@@ -6,6 +6,7 @@ transitively importing Rich, as we do in global scope in _output.py. This allows
|
|
6
6
|
us to avoid importing Rich for client code that runs in the container environment.
|
7
7
|
|
8
8
|
"""
|
9
|
+
|
9
10
|
import contextlib
|
10
11
|
from collections.abc import Generator
|
11
12
|
from typing import TYPE_CHECKING, Optional
|
modal/sandbox.py
CHANGED
@@ -468,8 +468,7 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
468
468
|
text: Literal[True] = True,
|
469
469
|
bufsize: Literal[-1, 1] = -1,
|
470
470
|
_pty_info: Optional[api_pb2.PTYInfo] = None,
|
471
|
-
) -> _ContainerProcess[str]:
|
472
|
-
...
|
471
|
+
) -> _ContainerProcess[str]: ...
|
473
472
|
|
474
473
|
@overload
|
475
474
|
async def exec(
|
@@ -484,8 +483,7 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
484
483
|
text: Literal[False] = False,
|
485
484
|
bufsize: Literal[-1, 1] = -1,
|
486
485
|
_pty_info: Optional[api_pb2.PTYInfo] = None,
|
487
|
-
) -> _ContainerProcess[bytes]:
|
488
|
-
...
|
486
|
+
) -> _ContainerProcess[bytes]: ...
|
489
487
|
|
490
488
|
async def exec(
|
491
489
|
self,
|
@@ -597,16 +595,14 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
597
595
|
self,
|
598
596
|
path: str,
|
599
597
|
mode: "_typeshed.OpenTextMode",
|
600
|
-
) -> _FileIO[str]:
|
601
|
-
...
|
598
|
+
) -> _FileIO[str]: ...
|
602
599
|
|
603
600
|
@overload
|
604
601
|
async def open(
|
605
602
|
self,
|
606
603
|
path: str,
|
607
604
|
mode: "_typeshed.OpenBinaryMode",
|
608
|
-
) -> _FileIO[bytes]:
|
609
|
-
...
|
605
|
+
) -> _FileIO[bytes]: ...
|
610
606
|
|
611
607
|
async def open(
|
612
608
|
self,
|
modal/token_flow.py
CHANGED
@@ -104,7 +104,7 @@ async def _new_token(
|
|
104
104
|
result = await token_flow.finish()
|
105
105
|
if result is not None:
|
106
106
|
break
|
107
|
-
status.update(f"Waiting for token flow to complete... (attempt {attempt+2})")
|
107
|
+
status.update(f"Waiting for token flow to complete... (attempt {attempt + 2})")
|
108
108
|
|
109
109
|
console.print("[green]Web authentication finished successfully![/green]")
|
110
110
|
|
@@ -1,28 +1,28 @@
|
|
1
1
|
modal/__init__.py,sha256=df6aKAigSPFXnmIohWySf_1zZ9Gzgrb7-oprSbopD4w,2299
|
2
|
-
modal/__main__.py,sha256=
|
2
|
+
modal/__main__.py,sha256=CgIjP8m1xJjjd4AXc-delmR6LdBCZclw2A_V38CFIio,2870
|
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=YtfJ852XUDtAWBD-yVs99zy933-VBEKQyIngEj36Qcw,29286
|
6
|
-
modal/_functions.py,sha256=
|
6
|
+
modal/_functions.py,sha256=eXqyhxucn3c_V4Y-zqwqqXCDeF6lW1h7N0hcQJNinR8,71463
|
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
|
10
10
|
modal/_output.py,sha256=Z0nngPh2mKHMQc4MQ92YjVPc3ewOLa3I4dFBlL9nvQY,25656
|
11
|
-
modal/_partial_function.py,sha256=
|
11
|
+
modal/_partial_function.py,sha256=KGv4hWXBboiWFxC733jfOHKdvShTPjF75lVv866Lgyc,29078
|
12
12
|
modal/_proxy_tunnel.py,sha256=gnKyCfmVB7x2d1A6c-JDysNIP3kEFxmXzhcXhPrzPn0,1906
|
13
13
|
modal/_pty.py,sha256=JZfPDDpzqICZqtyPI_oMJf_9w-p_lLNuzHhwhodUXio,1329
|
14
|
-
modal/_resolver.py,sha256=
|
14
|
+
modal/_resolver.py,sha256=RtoXoYzSllPlFu0D1vel_FWiEmDO7RyToiC2bxeN8ZY,6917
|
15
15
|
modal/_resources.py,sha256=5qmcirXUI8dSH926nwkUaeX9H25mqYu9mXD_KuT79-o,1733
|
16
16
|
modal/_serialization.py,sha256=NYSjM9FnbLXULuzpboVvPcFFHRyh3hn_AcSFXQCGPYc,19741
|
17
17
|
modal/_traceback.py,sha256=IZQzB3fVlUfMHOSyKUgw0H6qv4yHnpyq-XVCNZKfUdA,5023
|
18
18
|
modal/_tunnel.py,sha256=zTBxBiuH1O22tS1OliAJdIsSmaZS8PlnifS_6S5z-mk,6320
|
19
19
|
modal/_tunnel.pyi,sha256=JmmDYAy9F1FpgJ_hWx0xkom2nTOFQjn4mTPYlU3PFo4,1245
|
20
20
|
modal/_watcher.py,sha256=K6LYnlmSGQB4tWWI9JADv-tvSvQ1j522FwT71B51CX8,3584
|
21
|
-
modal/app.py,sha256=
|
21
|
+
modal/app.py,sha256=rCOPD51gVyow8muyaqMuV65qfTnAZKf_w1OCZdSF_6o,44636
|
22
22
|
modal/app.pyi,sha256=lxiuWzE_OLb3WHg-H7Pek9DGBuCUzZ55P594VhJL5LA,26113
|
23
23
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
24
24
|
modal/client.py,sha256=8SQawr7P1PNUCq1UmJMUQXG2jIo4Nmdcs311XqrNLRE,15276
|
25
|
-
modal/client.pyi,sha256=
|
25
|
+
modal/client.pyi,sha256=N2SJk_T6wD3P5mjZC2xapuXtU4mojxXyP5wioRPllfg,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=5Er9L9tGpLGIrbiHOI7c9266gPG6nhxoJ_BX8op96nU,31096
|
@@ -32,14 +32,14 @@ modal/container_process.py,sha256=WTqLn01dJPVkPpwR_0w_JH96ceN5mV4TGtiu1ZR2RRA,61
|
|
32
32
|
modal/container_process.pyi,sha256=Hf0J5JyDdCCXBJSKx6gvkPOo0XrztCm78xzxamtzUjQ,2828
|
33
33
|
modal/dict.py,sha256=vc5lQVqzeDUCb4fRjnOlqYK2GmBb0fIhZmvB0xIBG0U,12921
|
34
34
|
modal/dict.pyi,sha256=kKb0Kc6RUabtQ5Hwslg_vwL_OIrwIAJ2NXrJTepTtp4,7684
|
35
|
-
modal/environments.py,sha256=
|
35
|
+
modal/environments.py,sha256=mrOaS9hiIQijGWJYIgVKQnwC-kONhWHm1GqoK_9G75E,6924
|
36
36
|
modal/environments.pyi,sha256=JvSroVOIXDIILL40Z5G4HyY16bmih2YMWMvWL-SFTwo,3373
|
37
37
|
modal/exception.py,sha256=4JyO-SACaLNDe2QC48EjsK8GMkZ8AgEurZ8j1YdRu8E,5263
|
38
38
|
modal/experimental.py,sha256=e625Ekpo2HtYkk6ZltM_XYcI9xhLxic8_7Na91PbdUg,4017
|
39
39
|
modal/experimental.pyi,sha256=24tIYu_w9RLwFrz1cIsgYuqmDCtV8eg6-bQNz3zjhDo,939
|
40
40
|
modal/file_io.py,sha256=lcMs_E9Xfm0YX1t9U2wNIBPnqHRxmImqjLW1GHqVmyg,20945
|
41
41
|
modal/file_io.pyi,sha256=NTRft1tbPSWf9TlWVeZmTlgB5AZ_Zhu2srWIrWr7brk,9445
|
42
|
-
modal/file_pattern_matcher.py,sha256=
|
42
|
+
modal/file_pattern_matcher.py,sha256=trosX-Bp7dOubudN1bLLhRAoidWy1TcoaR4Pv8CedWw,6497
|
43
43
|
modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
|
44
44
|
modal/functions.pyi,sha256=YflJx4BhzmJLJzpVWbuAMv0Qv63Mgb3r9qZqrgBEr1w,14289
|
45
45
|
modal/gpu.py,sha256=uDluoK3hXyj2YRxGhVDFOifOBCsXFTo5hVueGoJPb8w,6001
|
@@ -47,13 +47,13 @@ modal/image.py,sha256=KYc6bg-m9A6wiLF38dWcFBMrEATyR2KOF0sp-6O9uC0,91508
|
|
47
47
|
modal/image.pyi,sha256=kdJzy1eaxNPZeCpE0TMYYLhJ6UWmkfRDeb_vzngJUoQ,26462
|
48
48
|
modal/io_streams.py,sha256=QkQiizKRzd5bnbKQsap31LJgBYlAnj4-XkV_50xPYX0,15079
|
49
49
|
modal/io_streams.pyi,sha256=bJ7ZLmSmJ0nKoa6r4FJpbqvzdUVa0lEe0Fa-MMpMezU,5071
|
50
|
-
modal/mount.py,sha256=
|
50
|
+
modal/mount.py,sha256=hNoy7J-E2C-CkSmbKldfL_zg8db8nP8cVzRj_35Rsp0,32124
|
51
51
|
modal/mount.pyi,sha256=CmHa7zKSxHA_7-vMQLnGfw_ZXvAvHlafvUEVJcQ1LQA,12535
|
52
52
|
modal/network_file_system.py,sha256=WXdyL7du_fvjvuG6hSAREyJ83sSEP2xSLAIAhBsisdI,14869
|
53
53
|
modal/network_file_system.pyi,sha256=4N3eqMbTSlqmS8VV_aJK-uvrgJC8xnf_YtW5FHfRfc8,8156
|
54
54
|
modal/object.py,sha256=bTeskuY8JFrESjU4_UL_nTwYlBQdOLmVaOX3X6EMxsg,164
|
55
55
|
modal/object.pyi,sha256=kyJkRQcVv3ct7zSAxvvXcuhBVeH914v80uSlqeS7cA4,5632
|
56
|
-
modal/output.py,sha256=
|
56
|
+
modal/output.py,sha256=q4T9uHduunj4NwY-YSwkHGgjZlCXMuJbfQ5UFaAGRAc,1968
|
57
57
|
modal/parallel_map.py,sha256=POBTyiWabe2e4qBNlsjjksiu1AAPEsNqI-mM8cgNFco,16042
|
58
58
|
modal/parallel_map.pyi,sha256=-YKY_bVuQv8B4gtFrHnXtuNV0_JpmU9vqMJzR7beeCU,2524
|
59
59
|
modal/partial_function.py,sha256=KkATL56zEe_Kzp4hDX0c0e6BrXeO8V8mZBjfIs_ldqI,1016
|
@@ -67,7 +67,7 @@ modal/retries.py,sha256=HKR2Q9aNPWkMjQ5nwobqYTuZaSuw0a8lI2zrtY5IW98,5230
|
|
67
67
|
modal/runner.py,sha256=fdUyDGN-bWu_aZBvxBO_MIgEuucsA0PgDKDHBn5k8J0,24451
|
68
68
|
modal/runner.pyi,sha256=RYEYsnofrvVroYefWLhWAy8I_uwXV9fRNuJaVgcNzrg,5278
|
69
69
|
modal/running_app.py,sha256=v61mapYNV1-O-Uaho5EfJlryMLvIT9We0amUOSvSGx8,1188
|
70
|
-
modal/sandbox.py,sha256=
|
70
|
+
modal/sandbox.py,sha256=fPStBypgDjclm388u5v3q26gAub0mP4c1pZYLlrJcUY,31777
|
71
71
|
modal/sandbox.pyi,sha256=qncEvzK76h_ehrs03vlroQyLThWiMsjKhD0DnCNc6zI,22663
|
72
72
|
modal/schedule.py,sha256=0ZFpKs1bOxeo5n3HZjoL7OE2ktsb-_oGtq-WJEPO4tY,2615
|
73
73
|
modal/scheduler_placement.py,sha256=BAREdOY5HzHpzSBqt6jDVR6YC_jYfHMVqOzkyqQfngU,1235
|
@@ -78,25 +78,25 @@ modal/serving.pyi,sha256=ncV-9jY_vZYFnGs5ZnMb3ffrX8LmcLdIMHBC56xRbtE,1711
|
|
78
78
|
modal/snapshot.py,sha256=6rQvDP3iX9hdiAudKTy0-m0JESt4kk0q2gusXbaRA-8,1279
|
79
79
|
modal/snapshot.pyi,sha256=Ypd4NKsjOTnnnqXyTGGLKq5lkocRrUURYjY5Pi67_qA,670
|
80
80
|
modal/stream_type.py,sha256=A6320qoAAWhEfwOCZfGtymQTu5AfLfJXXgARqooTPvY,417
|
81
|
-
modal/token_flow.py,sha256=
|
81
|
+
modal/token_flow.py,sha256=APNPQhuqy2avu6IY26U6OiN7erRhpo03Ztt1V60_wts,6776
|
82
82
|
modal/token_flow.pyi,sha256=0XV3d-9CGQL3qjPdw3RgwIFVqqxo8Z-u044_mkgAM3o,2064
|
83
83
|
modal/volume.py,sha256=JAWeDvoAG95tMBv-fYIERyHsJPS_X_xGpxRRmYtb6j0,30096
|
84
84
|
modal/volume.pyi,sha256=kTsXarphjZILXci84LQy7EyC84eXUs5-7D62IM5q3eE,12491
|
85
85
|
modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
86
86
|
modal/_runtime/asgi.py,sha256=vIxpGrCZhdeThwazQckmrqoNKgDQYOyv8emzBHr8CiU,22154
|
87
|
-
modal/_runtime/container_io_manager.py,sha256=
|
87
|
+
modal/_runtime/container_io_manager.py,sha256=3VPj0RWtSdvVZD96l5ZpO8MjhLRjAi_P_ZtpNK3nGn0,43593
|
88
88
|
modal/_runtime/execution_context.py,sha256=E6ofm6j1POXGPxS841X3V7JU6NheVb8OkQc7JpLq4Kg,2712
|
89
89
|
modal/_runtime/gpu_memory_snapshot.py,sha256=tA3m1d1cwnmHpvpCeN_WijDd6n8byn7LWlpicbIxiOI,3144
|
90
90
|
modal/_runtime/telemetry.py,sha256=T1RoAGyjBDr1swiM6pPsGRSITm7LI5FDK18oNXxY08U,5163
|
91
|
-
modal/_runtime/user_code_imports.py,sha256=
|
91
|
+
modal/_runtime/user_code_imports.py,sha256=qDasIvffN3SJjUeT1DHcpN35lWNepnbomS0Z8yD65mA,14740
|
92
92
|
modal/_utils/__init__.py,sha256=waLjl5c6IPDhSsdWAm9Bji4e2PVxamYABKAze6CHVXY,28
|
93
93
|
modal/_utils/app_utils.py,sha256=88BT4TPLWfYAQwKTHcyzNQRHg8n9B-QE2UyJs96iV-0,108
|
94
|
-
modal/_utils/async_utils.py,sha256=
|
95
|
-
modal/_utils/blob_utils.py,sha256=
|
94
|
+
modal/_utils/async_utils.py,sha256=5PdDuI1aSwPOI4a3dIvW0DkPqGw6KZN6RtWE18Dzv1E,25079
|
95
|
+
modal/_utils/blob_utils.py,sha256=RB1G6T7eC1Poe-O45qYLaxwCr2jkM-Q6Nexk1J3wk_w,14505
|
96
96
|
modal/_utils/bytes_io_segment_payload.py,sha256=uunxVJS4PE1LojF_UpURMzVK9GuvmYWRqQo_bxEj5TU,3385
|
97
97
|
modal/_utils/deprecation.py,sha256=dycySRBxyZf3ITzEqPNM6MxXTk9-0VVLA8oCPQ5j_Os,3426
|
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=Rmz8GJDie-RW_q2RcTwholEWixS2IQDPBsRBJ3f3ZvU,27302
|
100
100
|
modal/_utils/grpc_testing.py,sha256=H1zHqthv19eGPJz2HKXDyWXWGSqO4BRsxah3L5Xaa8A,8619
|
101
101
|
modal/_utils/grpc_utils.py,sha256=PPB5ay-vXencXNIWPVw5modr3EH7gfq2QPcO5YJ1lMU,7737
|
102
102
|
modal/_utils/hash_utils.py,sha256=zg3J6OGxTFGSFri1qQ12giDz90lWk8bzaxCTUCRtiX4,3034
|
@@ -119,18 +119,18 @@ modal/cli/app.py,sha256=TmUiFKAE1yc6ll8pfl-wZ2lh9crC31Fu_8_YKCX8NJc,7818
|
|
119
119
|
modal/cli/config.py,sha256=QvFsqO4eUOtI7d_pQAOAyfq_ZitjhPtav3C6GIDQcZM,1680
|
120
120
|
modal/cli/container.py,sha256=FYwEgjf93j4NMorAjGbSV98i1wpebqdAeNU1wfrFp1k,3668
|
121
121
|
modal/cli/dict.py,sha256=8Wq3w-UDaywk8EVNdj-ECCNV9TYHqh4kzhUqhhulatM,4593
|
122
|
-
modal/cli/entry_point.py,sha256=
|
122
|
+
modal/cli/entry_point.py,sha256=DzFr75smEi1OSJdGXx1ZaAl-3-4b08QCDUP3tzvApKo,4225
|
123
123
|
modal/cli/environment.py,sha256=Ayddkiq9jdj3XYDJ8ZmUqFpPPH8xajYlbexRkzGtUcg,4334
|
124
124
|
modal/cli/import_refs.py,sha256=YYseLJ6cU_wln7DjVWfKPgEhv77hxfA0klWAkTK_1HA,12672
|
125
125
|
modal/cli/launch.py,sha256=pzQt2QlcrbIUU0MVzWWPAvMQ6MCyqsHZ0X9JcV-sY04,3242
|
126
126
|
modal/cli/network_file_system.py,sha256=eq3JnwjbfFNsJodIyANHL06ByYc3BSavzdmu8C96cHA,7948
|
127
127
|
modal/cli/profile.py,sha256=rLXfjJObfPNjaZvNfHGIKqs7y9bGYyGe-K7V0w-Ni0M,3110
|
128
128
|
modal/cli/queues.py,sha256=6gTu76dzBtPN5eQVsLrvQpuru5jI9ZCWK5Eh8J8XhaM,4498
|
129
|
-
modal/cli/run.py,sha256=
|
130
|
-
modal/cli/secret.py,sha256=
|
129
|
+
modal/cli/run.py,sha256=Wu5P4ERjB4iZ_d4J8nP7KB58qIjL595KnFQkw_pWDik,21761
|
130
|
+
modal/cli/secret.py,sha256=iDsaFUJBq3333ZBVzKPcqyey68w0j82PNddGhRgP2pA,4206
|
131
131
|
modal/cli/token.py,sha256=mxSgOWakXG6N71hQb1ko61XAR9ZGkTMZD-Txn7gmTac,1924
|
132
132
|
modal/cli/utils.py,sha256=hZmjyzcPjDnQSkLvycZD2LhGdcsfdZshs_rOU78EpvI,3717
|
133
|
-
modal/cli/volume.py,sha256=
|
133
|
+
modal/cli/volume.py,sha256=c2IuVNO2yJVaXmZkRh3xwQmznlRTgFoJr_BIzzqtVv0,10251
|
134
134
|
modal/cli/programs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
135
135
|
modal/cli/programs/run_jupyter.py,sha256=1X8eQ3gB_IqkJn11Q4dQ9KdIqFVwQQlwkrrSqlFWfPQ,2685
|
136
136
|
modal/cli/programs/vscode.py,sha256=c5jKk1ruuC03X1D-hNc2jtTQqofCBweEZH_qxHjkHGo,3383
|
@@ -146,7 +146,7 @@ modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
|
146
146
|
modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
|
147
147
|
modal_docs/gen_reference_docs.py,sha256=aDcUSSDtAAZ4eeFWyroeIg2TOzyRoYcic-d9Zh9TdLY,6656
|
148
148
|
modal_docs/mdmd/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
149
|
-
modal_docs/mdmd/mdmd.py,sha256=
|
149
|
+
modal_docs/mdmd/mdmd.py,sha256=Irx49MCCTlBOP4FBdLR--JrpA3-WhsVeriq0LGgsRic,6232
|
150
150
|
modal_docs/mdmd/signatures.py,sha256=XJaZrK7Mdepk5fdX51A8uENiLFNil85Ud0d4MH8H5f0,3218
|
151
151
|
modal_global_objects/__init__.py,sha256=waLjl5c6IPDhSsdWAm9Bji4e2PVxamYABKAze6CHVXY,28
|
152
152
|
modal_global_objects/images/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
@@ -172,10 +172,10 @@ modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0y
|
|
172
172
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
173
173
|
modal_version/__init__.py,sha256=wiJQ53c-OMs0Xf1UeXOxQ7FwlV1VzIjnX6o-pRYZ_Pk,470
|
174
174
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
175
|
-
modal_version/_version_generated.py,sha256=
|
176
|
-
modal-0.73.
|
177
|
-
modal-0.73.
|
178
|
-
modal-0.73.
|
179
|
-
modal-0.73.
|
180
|
-
modal-0.73.
|
181
|
-
modal-0.73.
|
175
|
+
modal_version/_version_generated.py,sha256=m7J9hNWfGj6_B090wtexzuPT3ElFz-zc4beQRp2N5Eg,149
|
176
|
+
modal-0.73.30.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
177
|
+
modal-0.73.30.dist-info/METADATA,sha256=06SMbqr63TkUj0VTuFXpenZLMH3KVHZtYQyWqd9Fv3A,2330
|
178
|
+
modal-0.73.30.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
179
|
+
modal-0.73.30.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
180
|
+
modal-0.73.30.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
|
181
|
+
modal-0.73.30.dist-info/RECORD,,
|
modal_docs/mdmd/mdmd.py
CHANGED
File without changes
|
File without changes
|
File without changes
|
File without changes
|