modal 1.2.2.dev30__py3-none-any.whl → 1.2.2.dev36__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 +77 -52
- modal/_load_context.py +105 -0
- modal/_object.py +47 -18
- modal/_resolver.py +21 -35
- modal/app.py +7 -0
- modal/app.pyi +3 -0
- modal/cli/dict.py +5 -2
- modal/cli/queues.py +4 -2
- modal/client.pyi +2 -2
- modal/cls.py +71 -32
- modal/cls.pyi +3 -0
- modal/dict.py +14 -5
- modal/dict.pyi +2 -0
- modal/environments.py +16 -7
- modal/environments.pyi +6 -2
- modal/functions.pyi +10 -4
- modal/image.py +22 -22
- modal/mount.py +35 -25
- modal/mount.pyi +33 -7
- modal/network_file_system.py +14 -5
- modal/network_file_system.pyi +12 -2
- modal/object.pyi +35 -8
- modal/proxy.py +14 -6
- modal/proxy.pyi +10 -2
- modal/queue.py +14 -5
- modal/queue.pyi +12 -2
- modal/runner.py +43 -47
- modal/runner.pyi +2 -2
- modal/sandbox.py +21 -12
- modal/secret.py +57 -39
- modal/secret.pyi +21 -4
- modal/serving.py +7 -11
- modal/serving.pyi +7 -8
- modal/snapshot.py +11 -5
- modal/volume.py +25 -7
- modal/volume.pyi +2 -0
- {modal-1.2.2.dev30.dist-info → modal-1.2.2.dev36.dist-info}/METADATA +1 -1
- {modal-1.2.2.dev30.dist-info → modal-1.2.2.dev36.dist-info}/RECORD +46 -45
- modal_proto/api.proto +4 -0
- modal_proto/api_pb2.py +684 -684
- modal_proto/api_pb2.pyi +24 -3
- modal_version/__init__.py +1 -1
- {modal-1.2.2.dev30.dist-info → modal-1.2.2.dev36.dist-info}/WHEEL +0 -0
- {modal-1.2.2.dev30.dist-info → modal-1.2.2.dev36.dist-info}/entry_points.txt +0 -0
- {modal-1.2.2.dev30.dist-info → modal-1.2.2.dev36.dist-info}/licenses/LICENSE +0 -0
- {modal-1.2.2.dev30.dist-info → modal-1.2.2.dev36.dist-info}/top_level.txt +0 -0
modal/serving.py
CHANGED
|
@@ -4,13 +4,13 @@ import platform
|
|
|
4
4
|
from collections.abc import AsyncGenerator
|
|
5
5
|
from multiprocessing.context import SpawnProcess
|
|
6
6
|
from multiprocessing.synchronize import Event
|
|
7
|
-
from typing import TYPE_CHECKING, Optional
|
|
7
|
+
from typing import TYPE_CHECKING, Optional
|
|
8
8
|
|
|
9
9
|
from synchronicity.async_wrap import asynccontextmanager
|
|
10
10
|
|
|
11
11
|
from modal._output import OutputManager
|
|
12
12
|
|
|
13
|
-
from ._utils.async_utils import TaskContext, asyncify, synchronize_api
|
|
13
|
+
from ._utils.async_utils import TaskContext, asyncify, synchronize_api
|
|
14
14
|
from ._utils.logger import logger
|
|
15
15
|
from ._watcher import watch
|
|
16
16
|
from .cli.import_refs import ImportRef, import_app_from_ref
|
|
@@ -20,20 +20,16 @@ from .output import _get_output_manager, enable_output
|
|
|
20
20
|
from .runner import _run_app, serve_update
|
|
21
21
|
|
|
22
22
|
if TYPE_CHECKING:
|
|
23
|
-
|
|
24
|
-
else:
|
|
25
|
-
_App = TypeVar("_App")
|
|
23
|
+
import modal.app
|
|
26
24
|
|
|
27
25
|
|
|
28
26
|
def _run_serve(
|
|
29
27
|
import_ref: ImportRef, existing_app_id: str, is_ready: Event, environment_name: str, show_progress: bool
|
|
30
28
|
):
|
|
31
|
-
|
|
32
|
-
_app = import_app_from_ref(import_ref, base_cmd="modal serve")
|
|
33
|
-
blocking_app = synchronizer._translate_out(_app)
|
|
29
|
+
app = import_app_from_ref(import_ref, base_cmd="modal serve")
|
|
34
30
|
|
|
35
31
|
with enable_output(show_progress=show_progress):
|
|
36
|
-
serve_update(
|
|
32
|
+
serve_update(app, existing_app_id, is_ready, environment_name)
|
|
37
33
|
|
|
38
34
|
|
|
39
35
|
async def _restart_serve(
|
|
@@ -97,12 +93,12 @@ async def _run_watch_loop(
|
|
|
97
93
|
|
|
98
94
|
@asynccontextmanager
|
|
99
95
|
async def _serve_app(
|
|
100
|
-
app: "_App",
|
|
96
|
+
app: "modal.app._App",
|
|
101
97
|
import_ref: ImportRef,
|
|
102
98
|
*,
|
|
103
99
|
_watcher: Optional[AsyncGenerator[set[str], None]] = None, # for testing
|
|
104
100
|
environment_name: Optional[str] = None,
|
|
105
|
-
) -> AsyncGenerator["_App", None]:
|
|
101
|
+
) -> AsyncGenerator["modal.app._App", None]:
|
|
106
102
|
if environment_name is None:
|
|
107
103
|
environment_name = config.get("environment")
|
|
108
104
|
|
modal/serving.pyi
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import collections.abc
|
|
2
|
+
import modal.app
|
|
2
3
|
import modal.cli.import_refs
|
|
3
4
|
import multiprocessing.context
|
|
4
5
|
import multiprocessing.synchronize
|
|
@@ -6,8 +7,6 @@ import synchronicity.combined_types
|
|
|
6
7
|
import typing
|
|
7
8
|
import typing_extensions
|
|
8
9
|
|
|
9
|
-
_App = typing.TypeVar("_App")
|
|
10
|
-
|
|
11
10
|
def _run_serve(
|
|
12
11
|
import_ref: modal.cli.import_refs.ImportRef,
|
|
13
12
|
existing_app_id: str,
|
|
@@ -27,31 +26,31 @@ async def _run_watch_loop(
|
|
|
27
26
|
environment_name: str,
|
|
28
27
|
): ...
|
|
29
28
|
def _serve_app(
|
|
30
|
-
app: _App,
|
|
29
|
+
app: modal.app._App,
|
|
31
30
|
import_ref: modal.cli.import_refs.ImportRef,
|
|
32
31
|
*,
|
|
33
32
|
_watcher: typing.Optional[collections.abc.AsyncGenerator[set[str], None]] = None,
|
|
34
33
|
environment_name: typing.Optional[str] = None,
|
|
35
|
-
) -> typing.AsyncContextManager[_App]: ...
|
|
34
|
+
) -> typing.AsyncContextManager[modal.app._App]: ...
|
|
36
35
|
|
|
37
36
|
class __serve_app_spec(typing_extensions.Protocol):
|
|
38
37
|
def __call__(
|
|
39
38
|
self,
|
|
40
39
|
/,
|
|
41
|
-
app:
|
|
40
|
+
app: modal.app.App,
|
|
42
41
|
import_ref: modal.cli.import_refs.ImportRef,
|
|
43
42
|
*,
|
|
44
43
|
_watcher: typing.Optional[typing.Generator[set[str], None, None]] = None,
|
|
45
44
|
environment_name: typing.Optional[str] = None,
|
|
46
|
-
) -> synchronicity.combined_types.AsyncAndBlockingContextManager[
|
|
45
|
+
) -> synchronicity.combined_types.AsyncAndBlockingContextManager[modal.app.App]: ...
|
|
47
46
|
def aio(
|
|
48
47
|
self,
|
|
49
48
|
/,
|
|
50
|
-
app:
|
|
49
|
+
app: modal.app.App,
|
|
51
50
|
import_ref: modal.cli.import_refs.ImportRef,
|
|
52
51
|
*,
|
|
53
52
|
_watcher: typing.Optional[collections.abc.AsyncGenerator[set[str], None]] = None,
|
|
54
53
|
environment_name: typing.Optional[str] = None,
|
|
55
|
-
) -> typing.AsyncContextManager[
|
|
54
|
+
) -> typing.AsyncContextManager[modal.app.App]: ...
|
|
56
55
|
|
|
57
56
|
serve_app: __serve_app_spec
|
modal/snapshot.py
CHANGED
|
@@ -3,6 +3,7 @@ from typing import Optional
|
|
|
3
3
|
|
|
4
4
|
from modal_proto import api_pb2
|
|
5
5
|
|
|
6
|
+
from ._load_context import LoadContext
|
|
6
7
|
from ._object import _Object
|
|
7
8
|
from ._resolver import Resolver
|
|
8
9
|
from ._utils.async_utils import synchronize_api
|
|
@@ -23,14 +24,19 @@ class _SandboxSnapshot(_Object, type_prefix="sn"):
|
|
|
23
24
|
"""
|
|
24
25
|
Construct a `SandboxSnapshot` object from a sandbox snapshot ID.
|
|
25
26
|
"""
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
# TODO: remove this - from_id constructor should not do io:
|
|
28
|
+
client = client or await _Client.from_env()
|
|
28
29
|
|
|
29
|
-
async def _load(
|
|
30
|
-
|
|
30
|
+
async def _load(
|
|
31
|
+
self: _SandboxSnapshot, resolver: Resolver, load_context: LoadContext, existing_object_id: Optional[str]
|
|
32
|
+
):
|
|
33
|
+
await load_context.client.stub.SandboxSnapshotGet(
|
|
34
|
+
api_pb2.SandboxSnapshotGetRequest(snapshot_id=sandbox_snapshot_id)
|
|
35
|
+
)
|
|
31
36
|
|
|
32
37
|
rep = "SandboxSnapshot()"
|
|
33
|
-
obj = _SandboxSnapshot._from_loader(_load, rep)
|
|
38
|
+
obj = _SandboxSnapshot._from_loader(_load, rep, load_context_overrides=LoadContext(client=client))
|
|
39
|
+
# TODO: should this be a _Object._new_hydrated instead?
|
|
34
40
|
obj._hydrate(sandbox_snapshot_id, client, None)
|
|
35
41
|
|
|
36
42
|
return obj
|
modal/volume.py
CHANGED
|
@@ -33,6 +33,7 @@ import modal_proto.api_pb2
|
|
|
33
33
|
from modal.exception import AlreadyExistsError, InvalidError, NotFoundError, VolumeUploadTimeoutError
|
|
34
34
|
from modal_proto import api_pb2
|
|
35
35
|
|
|
36
|
+
from ._load_context import LoadContext
|
|
36
37
|
from ._object import (
|
|
37
38
|
EPHEMERAL_OBJECT_HEARTBEAT_SLEEP,
|
|
38
39
|
_get_environment_name,
|
|
@@ -362,11 +363,19 @@ class _Volume(_Object, type_prefix="vo"):
|
|
|
362
363
|
Added in v1.0.5.
|
|
363
364
|
"""
|
|
364
365
|
|
|
365
|
-
async def _load(
|
|
366
|
+
async def _load(
|
|
367
|
+
new_volume: _Volume, resolver: Resolver, load_context: LoadContext, existing_object_id: Optional[str]
|
|
368
|
+
):
|
|
366
369
|
new_volume._initialize_from_other(self)
|
|
367
370
|
new_volume._read_only = True
|
|
368
371
|
|
|
369
|
-
obj = _Volume._from_loader(
|
|
372
|
+
obj = _Volume._from_loader(
|
|
373
|
+
_load,
|
|
374
|
+
"Volume()",
|
|
375
|
+
hydrate_lazily=True,
|
|
376
|
+
deps=lambda: [self],
|
|
377
|
+
load_context_overrides=self._load_context_overrides,
|
|
378
|
+
)
|
|
370
379
|
return obj
|
|
371
380
|
|
|
372
381
|
def _hydrate_metadata(self, metadata: Optional[Message]):
|
|
@@ -408,6 +417,7 @@ class _Volume(_Object, type_prefix="vo"):
|
|
|
408
417
|
environment_name: Optional[str] = None,
|
|
409
418
|
create_if_missing: bool = False,
|
|
410
419
|
version: "typing.Optional[modal_proto.api_pb2.VolumeFsVersion.ValueType]" = None,
|
|
420
|
+
client: Optional[_Client] = None,
|
|
411
421
|
) -> "_Volume":
|
|
412
422
|
"""Reference a Volume by name, creating if necessary.
|
|
413
423
|
|
|
@@ -429,18 +439,26 @@ class _Volume(_Object, type_prefix="vo"):
|
|
|
429
439
|
check_object_name(name, "Volume")
|
|
430
440
|
warn_if_passing_namespace(namespace, "modal.Volume.from_name")
|
|
431
441
|
|
|
432
|
-
async def _load(
|
|
442
|
+
async def _load(
|
|
443
|
+
self: _Volume, resolver: Resolver, load_context: LoadContext, existing_object_id: Optional[str]
|
|
444
|
+
):
|
|
433
445
|
req = api_pb2.VolumeGetOrCreateRequest(
|
|
434
446
|
deployment_name=name,
|
|
435
|
-
environment_name=
|
|
447
|
+
environment_name=load_context.environment_name,
|
|
436
448
|
object_creation_type=(api_pb2.OBJECT_CREATION_TYPE_CREATE_IF_MISSING if create_if_missing else None),
|
|
437
449
|
version=version,
|
|
438
450
|
)
|
|
439
|
-
response = await
|
|
440
|
-
self._hydrate(response.volume_id,
|
|
451
|
+
response = await load_context.client.stub.VolumeGetOrCreate(req)
|
|
452
|
+
self._hydrate(response.volume_id, load_context.client, response.metadata)
|
|
441
453
|
|
|
442
454
|
rep = _Volume._repr(name, environment_name)
|
|
443
|
-
return _Volume._from_loader(
|
|
455
|
+
return _Volume._from_loader(
|
|
456
|
+
_load,
|
|
457
|
+
rep,
|
|
458
|
+
hydrate_lazily=True,
|
|
459
|
+
name=name,
|
|
460
|
+
load_context_overrides=LoadContext(client=client, environment_name=environment_name),
|
|
461
|
+
)
|
|
444
462
|
|
|
445
463
|
@classmethod
|
|
446
464
|
@asynccontextmanager
|
modal/volume.pyi
CHANGED
|
@@ -489,6 +489,7 @@ class _Volume(modal._object._Object):
|
|
|
489
489
|
environment_name: typing.Optional[str] = None,
|
|
490
490
|
create_if_missing: bool = False,
|
|
491
491
|
version: typing.Optional[int] = None,
|
|
492
|
+
client: typing.Optional[modal.client._Client] = None,
|
|
492
493
|
) -> _Volume:
|
|
493
494
|
"""Reference a Volume by name, creating if necessary.
|
|
494
495
|
|
|
@@ -806,6 +807,7 @@ class Volume(modal.object.Object):
|
|
|
806
807
|
environment_name: typing.Optional[str] = None,
|
|
807
808
|
create_if_missing: bool = False,
|
|
808
809
|
version: typing.Optional[int] = None,
|
|
810
|
+
client: typing.Optional[modal.client.Client] = None,
|
|
809
811
|
) -> Volume:
|
|
810
812
|
"""Reference a Volume by name, creating if necessary.
|
|
811
813
|
|
|
@@ -4,15 +4,16 @@ modal/_billing.py,sha256=C1jUN9f_1WqozSZAt9EOk1nImXUdiLrgFeeAu3R23cI,3012
|
|
|
4
4
|
modal/_clustered_functions.py,sha256=7amiOxErtlciWeBJBL2KvaxerUomJpTAJ3qElflFHQA,2884
|
|
5
5
|
modal/_clustered_functions.pyi,sha256=JmYwAGOLEnD5AF-gYF9O5tu-SgGjeoJz-X1j48b1Ijg,1157
|
|
6
6
|
modal/_container_entrypoint.py,sha256=zYk5mC8_IMx4kWnyFMRHKOrFRLBWchy6x-py3M8FYEw,28084
|
|
7
|
-
modal/_functions.py,sha256=
|
|
7
|
+
modal/_functions.py,sha256=nuIkMeklVmR8tSEVXK06EJOC5ui4m0rIpR35II4ylmg,91168
|
|
8
8
|
modal/_grpc_client.py,sha256=KZcggVNvFL5jRQkFumshMppeFHMbaZI9Dzf13run6As,6083
|
|
9
9
|
modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
|
|
10
|
+
modal/_load_context.py,sha256=YU5vhnnaLg_OexEp5W16a9pivwfmYw9I1ItPvYmLuoE,3706
|
|
10
11
|
modal/_location.py,sha256=joiX-0ZeutEUDTrrqLF1GHXCdVLF-rHzstocbMcd_-k,366
|
|
11
|
-
modal/_object.py,sha256=
|
|
12
|
+
modal/_object.py,sha256=kuXkifDts65m1noObXNwKxDdxaurrtVs8DXj0iAZlXU,12833
|
|
12
13
|
modal/_output.py,sha256=eikFqD82RA8uwF-LLVzO-A9EtmoVLnqg0X5nZE5hdLA,26852
|
|
13
14
|
modal/_partial_function.py,sha256=t0yOVrYrDUdCJt7eVNyBS-atnUtjO56izKB3rDuN17Q,38573
|
|
14
15
|
modal/_pty.py,sha256=E58MQ8d5-wkbMatRKpQR-G9FdbCRcZGiZxOpGy__VuY,1481
|
|
15
|
-
modal/_resolver.py,sha256=
|
|
16
|
+
modal/_resolver.py,sha256=j_nhDXxT2gbmNEx5b0B8An4ZEt4EKdVLncIj8zF9-nU,7241
|
|
16
17
|
modal/_resources.py,sha256=NMAp0GCLutiZI4GuKSIVnRHVlstoD3hNGUabjTUtzf4,1794
|
|
17
18
|
modal/_serialization.py,sha256=_3-Z9jSoleDnv2HghH2kfo0m_WG8Iajs1wop1Iqnam8,26341
|
|
18
19
|
modal/_traceback.py,sha256=muKP7RbAXq74UGwkaVIdOxDdfDug0UcDKr9fe4LL3m8,6503
|
|
@@ -20,69 +21,69 @@ modal/_tunnel.py,sha256=zTBxBiuH1O22tS1OliAJdIsSmaZS8PlnifS_6S5z-mk,6320
|
|
|
20
21
|
modal/_tunnel.pyi,sha256=rvC7USR2BcKkbZIeCJXwf7-UfGE-LPLjKsGNiK7Lxa4,13366
|
|
21
22
|
modal/_type_manager.py,sha256=DWjgmjYJuOagw2erin506UUbG2H5UzZCFEekS-7hmfA,9087
|
|
22
23
|
modal/_watcher.py,sha256=K6LYnlmSGQB4tWWI9JADv-tvSvQ1j522FwT71B51CX8,3584
|
|
23
|
-
modal/app.py,sha256=
|
|
24
|
-
modal/app.pyi,sha256=
|
|
24
|
+
modal/app.py,sha256=wdcdEoWsP7UIH2TnZj39ZiHrQhwX-CH_tqa6yuKL6Xg,55057
|
|
25
|
+
modal/app.pyi,sha256=5XnLb07hnNS5mI7MpLTHSFrDVJbh7lYqHOdU0jz7lnk,50683
|
|
25
26
|
modal/billing.py,sha256=zmQ3bcCJlwa4KD1IA_QgdWpm1pn13c-7qfy79iEauYI,195
|
|
26
27
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
|
27
28
|
modal/client.py,sha256=tPzihC7R9WtP56k6dyPKi5GLGdLEHdMA6YUj9Ry5G8o,14409
|
|
28
|
-
modal/client.pyi,sha256=
|
|
29
|
+
modal/client.pyi,sha256=n0peHkn8DFMWGtxlfkgDLpc8CWSCUyGx1KUGtG8sbyk,13094
|
|
29
30
|
modal/cloud_bucket_mount.py,sha256=Ff8UFG_Z0HUzcRAAfo1jvDwzaNgiX_btTFOHL7CGyI8,6016
|
|
30
31
|
modal/cloud_bucket_mount.pyi,sha256=vXusGMOUk9HjCs4lhxteuCK4xLQclPfugGWKo7LECEA,7539
|
|
31
|
-
modal/cls.py,sha256=
|
|
32
|
-
modal/cls.pyi,sha256=
|
|
32
|
+
modal/cls.py,sha256=TSkc7XOdfYcMkVfXBHZzhqgnQTUYA8RPdv-DySIT9L0,41883
|
|
33
|
+
modal/cls.pyi,sha256=p8Unbfr0yUdAzYYnD7erSRO7dH-87HkAg4oAn6srBzA,27424
|
|
33
34
|
modal/config.py,sha256=xUbw_ETdR7S3guj4dyzqdd9EYwRRht3aGYQRogZbi1o,13050
|
|
34
35
|
modal/container_process.py,sha256=KG2ZkFOWe2KN1b8dFSBLBoW5pWoRxBzJ20MLhDTicJs,16749
|
|
35
36
|
modal/container_process.pyi,sha256=xMKr-VbQsydS8AbhAys9UTpHHnH2QRyINpPtPG7NwmI,8373
|
|
36
|
-
modal/dict.py,sha256=
|
|
37
|
-
modal/dict.pyi,sha256=
|
|
38
|
-
modal/environments.py,sha256=
|
|
39
|
-
modal/environments.pyi,sha256=
|
|
37
|
+
modal/dict.py,sha256=Omfmj3fUyg7ijTI33Z97geyK7MW8T31LRm-N7pZqSwU,21582
|
|
38
|
+
modal/dict.pyi,sha256=wemd-RTH3__HUsF2zfcVojb2ixE0-Xm0RVKOh5ZSDYE,31835
|
|
39
|
+
modal/environments.py,sha256=wMiMNpPkvIl_BdxRb81CY9Djzhczp_y4GEYKWp0JyBc,6135
|
|
40
|
+
modal/environments.pyi,sha256=bMIxvwahckgaolGD3-hP2iovRHDXewvgbVs_nx4ze0o,3808
|
|
40
41
|
modal/exception.py,sha256=HrvKRJO4EMwkoqa77PBeZyrGIgEZ-yqLIA10cqZndqI,5768
|
|
41
42
|
modal/file_io.py,sha256=Whs3QSl3pQbSoLzSRIIWfK4XyP-kwgyZmWgx3bhJ9u0,20933
|
|
42
43
|
modal/file_io.pyi,sha256=xtO6Glf_BFwDE7QiQQo24QqcMf_Vv-iz7WojcGVlLBU,15932
|
|
43
44
|
modal/file_pattern_matcher.py,sha256=A_Kdkej6q7YQyhM_2-BvpFmPqJ0oHb54B6yf9VqvPVE,8116
|
|
44
45
|
modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
|
|
45
|
-
modal/functions.pyi,sha256=
|
|
46
|
+
modal/functions.pyi,sha256=11hKG3vRpHzXUycfz6ozZzJ-EUHLzBUo6la_et3pEPY,38049
|
|
46
47
|
modal/gpu.py,sha256=Fe5ORvVPDIstSq1xjmM6OoNgLYFWvogP9r5BgmD3hYg,6769
|
|
47
|
-
modal/image.py,sha256=
|
|
48
|
+
modal/image.py,sha256=wdgZlQqewK8Tj95uGOq7s8YZ8wFxMhKZtzJFTN-RT0Y,108328
|
|
48
49
|
modal/image.pyi,sha256=grkqK9BfyKDXmJYNme-lGa0O3u7pOU5GifyLOAhG3sc,78202
|
|
49
50
|
modal/io_streams.py,sha256=Lc-id7HvW-ffJKSoN1xQxf37pHARNkr4re2HKyGpKy4,29316
|
|
50
51
|
modal/io_streams.pyi,sha256=P9kvQhXmh9fxQNGI2DtuFnnZ_9MJQ4ZiqOpDP2-QWUU,16746
|
|
51
|
-
modal/mount.py,sha256=
|
|
52
|
-
modal/mount.pyi,sha256=
|
|
53
|
-
modal/network_file_system.py,sha256=
|
|
54
|
-
modal/network_file_system.pyi,sha256=
|
|
52
|
+
modal/mount.py,sha256=GNdUfj7tWZy3-LaxVX-fvk70BqC51P1s2ktrMOMJGWU,33297
|
|
53
|
+
modal/mount.pyi,sha256=3_Xftyk2lEMQbt8UzmUW5N77eb7t9EdbczPwj9wue9o,15828
|
|
54
|
+
modal/network_file_system.py,sha256=23GUYz2DZ5kCzlUrdWBq1siBse6fP_CeGt2Lo9xHkR8,13598
|
|
55
|
+
modal/network_file_system.pyi,sha256=A0YyIpxToPTRi-x5DQWtlWPgzw9qHGauvwW7jTcw6y0,15554
|
|
55
56
|
modal/object.py,sha256=bTeskuY8JFrESjU4_UL_nTwYlBQdOLmVaOX3X6EMxsg,164
|
|
56
|
-
modal/object.pyi,sha256=
|
|
57
|
+
modal/object.pyi,sha256=fl-jJ0xYzYyIYBcU7OKubpLOeJHdtREKGYTzByq4x1I,7913
|
|
57
58
|
modal/output.py,sha256=q4T9uHduunj4NwY-YSwkHGgjZlCXMuJbfQ5UFaAGRAc,1968
|
|
58
59
|
modal/parallel_map.py,sha256=VAfhkgCKFXtpba01Dvq7kc-xg5nlP-AdvmJW0LoyfD8,68670
|
|
59
60
|
modal/parallel_map.pyi,sha256=3sbWnV2ijA2KCh4BV8oNUJMd7ryemJu7NvwsqyUlvho,15588
|
|
60
61
|
modal/partial_function.py,sha256=aIdlGfTjjgqY6Fpr-biCjvRU9W542_S5N2xkNN_rYGM,1127
|
|
61
62
|
modal/partial_function.pyi,sha256=M7aHV6sbCc7R28D4Tk6Agr39m6R0emrXvm8IfWflt1o,14023
|
|
62
|
-
modal/proxy.py,sha256=
|
|
63
|
-
modal/proxy.pyi,sha256=
|
|
63
|
+
modal/proxy.py,sha256=zIe_ZMAeRu9dgU9FKwZqpvCFTNwLLwIC0Vra4ZZfz1I,1737
|
|
64
|
+
modal/proxy.pyi,sha256=05HihJqRRJydYQSjLMYs9-mxdvzq4OUpKg3PAfrBppo,1597
|
|
64
65
|
modal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
65
|
-
modal/queue.py,sha256=
|
|
66
|
-
modal/queue.pyi,sha256=
|
|
66
|
+
modal/queue.py,sha256=ABXb1eaGBfl5lKh-O60B0wNi0rT7lZ8gCntMOA4piLQ,25801
|
|
67
|
+
modal/queue.pyi,sha256=XD-VwX9m-lH8Rc4KZXmvuaNZ8f5Sip1clQSTJPdUBZo,37445
|
|
67
68
|
modal/retries.py,sha256=IvNLDM0f_GLUDD5VgEDoN09C88yoxSrCquinAuxT1Sc,5205
|
|
68
|
-
modal/runner.py,sha256=
|
|
69
|
-
modal/runner.pyi,sha256=
|
|
69
|
+
modal/runner.py,sha256=EkEAzZNJyYQa2TNHwCEP0-y_almtOfrfiUoYWv27JGg,25813
|
|
70
|
+
modal/runner.pyi,sha256=HYBi04nUrZN9-L-cTlvDDHFiJS-N6M3usKk1_QzGnpc,8736
|
|
70
71
|
modal/running_app.py,sha256=v61mapYNV1-O-Uaho5EfJlryMLvIT9We0amUOSvSGx8,1188
|
|
71
|
-
modal/sandbox.py,sha256=
|
|
72
|
+
modal/sandbox.py,sha256=onH4cjq8SAbMhzn7eVOOkYzr-6odBatrCQBX6_R7qjk,50374
|
|
72
73
|
modal/sandbox.pyi,sha256=XWH57XZIouFGeE-CidVYXdI_l5w-kjCzIhqN4kd2y8Q,57428
|
|
73
74
|
modal/schedule.py,sha256=ng0g0AqNY5GQI9KhkXZQ5Wam5G42glbkqVQsNpBtbDE,3078
|
|
74
75
|
modal/scheduler_placement.py,sha256=BAREdOY5HzHpzSBqt6jDVR6YC_jYfHMVqOzkyqQfngU,1235
|
|
75
|
-
modal/secret.py,sha256=
|
|
76
|
-
modal/secret.pyi,sha256=
|
|
77
|
-
modal/serving.py,sha256=
|
|
78
|
-
modal/serving.pyi,sha256=
|
|
79
|
-
modal/snapshot.py,sha256=
|
|
76
|
+
modal/secret.py,sha256=KancnGQ3X4ihl1ysx7SplJP1dBsM1TWQTv6WyXM8nIo,18783
|
|
77
|
+
modal/secret.pyi,sha256=Fm4Tbs0UPLlqJZbjJUdubMOPpcOmIxGUQlXFSC9eOEc,21023
|
|
78
|
+
modal/serving.py,sha256=rfzj23Q4hPSMpc3vj_cQg3awkZULu4hLtRs83cOEB-w,4291
|
|
79
|
+
modal/serving.pyi,sha256=eNqF_bhO_JQ0EDpqvSjSUdNs48vv7AcPXinp7GEs5wI,1966
|
|
80
|
+
modal/snapshot.py,sha256=HiXLbJAZiQv2cEQ4ur8M3AVbI_ZSL-eoteVfCL77lUw,1640
|
|
80
81
|
modal/snapshot.pyi,sha256=0q83hlmWxAhDu8xwZyL5VmYh0i8Tigf7S60or2k30L8,1682
|
|
81
82
|
modal/stream_type.py,sha256=A6320qoAAWhEfwOCZfGtymQTu5AfLfJXXgARqooTPvY,417
|
|
82
83
|
modal/token_flow.py,sha256=tLvBE9OT50p8AnYYh4b5MvBMQc1vV1-6C0GsmyFDfxw,7626
|
|
83
84
|
modal/token_flow.pyi,sha256=eirYjyqbRiT3GCKMIPHJPpkvBTu8WxDKqSHehWaJI_4,2533
|
|
84
|
-
modal/volume.py,sha256=
|
|
85
|
-
modal/volume.pyi,sha256=
|
|
85
|
+
modal/volume.py,sha256=gVGp1gvME3n1fALSXgLSRdSMbMiihJKEX5GV599orh8,52432
|
|
86
|
+
modal/volume.pyi,sha256=sBnG6t4aPjH09vlo63S-k4915uz5VNycE-JPgUjwDs8,53335
|
|
86
87
|
modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
|
87
88
|
modal/_runtime/asgi.py,sha256=AOcduIlijmlxhXVWo7AIUhigo-bqm6nDkHj4Q4JLy6o,22607
|
|
88
89
|
modal/_runtime/container_io_manager.py,sha256=MGURW9xa89j6GXzLlZDe9onMvfb-E69HrTyJUPaVXjw,52051
|
|
@@ -135,14 +136,14 @@ modal/cli/app.py,sha256=rbuAG92my-1eZN0olk6p2eD4oBnyBliUsrCOUW-U-9k,7832
|
|
|
135
136
|
modal/cli/cluster.py,sha256=BLcKDpwpDmlqE2UC4V0qNpJKiQ-ZXfI9g_SE7u6vnIU,3347
|
|
136
137
|
modal/cli/config.py,sha256=7xgglsSf5pKfE7ZLz-uZf9S11NBuNbUkUbcZ5nFk8Y0,1721
|
|
137
138
|
modal/cli/container.py,sha256=meFH-T_Bdyd7a9HjClzGCgYuPq0KhWs_HUUsSW12HjM,3686
|
|
138
|
-
modal/cli/dict.py,sha256=
|
|
139
|
+
modal/cli/dict.py,sha256=8aVWjxdmsPznYNMNYYkKHtrJSEREGc_H21g1hTHa0FM,4686
|
|
139
140
|
modal/cli/entry_point.py,sha256=7nGM8zob80L5iyLCf_TEmjyinKojquW3_O_V0wDnK-U,4809
|
|
140
141
|
modal/cli/environment.py,sha256=LGBq8RVQjfBH3EWz8QgmYe19UO66JKSDNxOXMUjw7JM,4285
|
|
141
142
|
modal/cli/import_refs.py,sha256=X59Z5JwgliRO6C-cIFto2Pr7o3SwlZMKQPKA0aI4ZK4,13927
|
|
142
143
|
modal/cli/launch.py,sha256=oJKGWjTJiXQTdw-SUiCmCQ76bY_8nlzJMUMu0zew0zs,6435
|
|
143
144
|
modal/cli/network_file_system.py,sha256=MO4YHBdwokXaVv95W4ucmxvi-Q2IpiMrxWLOBhEED5c,8029
|
|
144
145
|
modal/cli/profile.py,sha256=g8X6tFFK9ccKyu2he9Yu19WLSLNdztzECgmIV__XJFs,3257
|
|
145
|
-
modal/cli/queues.py,sha256
|
|
146
|
+
modal/cli/queues.py,sha256=S5dqk6lEd_2fJolHqoN9iRs6EkeTa0k7KqJWBBGS23k,6170
|
|
146
147
|
modal/cli/run.py,sha256=3_UF2Vdye_KEgY8JzBBomt0i944cCJx96RfNbeAEPDo,25783
|
|
147
148
|
modal/cli/secret.py,sha256=zkCztov8c4x8CI8G0EoyieUfv9XLQQtVXV8xeMLK-Os,8044
|
|
148
149
|
modal/cli/token.py,sha256=NAmQzKBfEHkcldWKeFxAVIqQBoo1RTp7_A4yc7-8qM0,1911
|
|
@@ -157,7 +158,7 @@ modal/experimental/__init__.py,sha256=sCwNbBLcR2t-jhrpwtMAPGKt2WNqXBg0xkNZdyB-6C
|
|
|
157
158
|
modal/experimental/flash.py,sha256=RKS3X3h4tY_mOLcMzbRs5tNCLPFL01dBAhCZSqCeBgA,26675
|
|
158
159
|
modal/experimental/flash.pyi,sha256=uwinKAYxpunNNfBj58FP88DXb535Qik4F6tnJKPAIwQ,14696
|
|
159
160
|
modal/experimental/ipython.py,sha256=TrCfmol9LGsRZMeDoeMPx3Hv3BFqQhYnmD_iH0pqdhk,2904
|
|
160
|
-
modal-1.2.2.
|
|
161
|
+
modal-1.2.2.dev36.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
|
161
162
|
modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
|
162
163
|
modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
|
|
163
164
|
modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
|
|
@@ -165,10 +166,10 @@ modal_docs/mdmd/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,2
|
|
|
165
166
|
modal_docs/mdmd/mdmd.py,sha256=tUTImNd4UMFk1opkaw8J672gX8AkBO5gbY2S_NMxsxs,7140
|
|
166
167
|
modal_docs/mdmd/signatures.py,sha256=XJaZrK7Mdepk5fdX51A8uENiLFNil85Ud0d4MH8H5f0,3218
|
|
167
168
|
modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
|
168
|
-
modal_proto/api.proto,sha256=
|
|
169
|
+
modal_proto/api.proto,sha256=o1gwFo-hSFA6vsqgwuj8mfCuU115IH9WRaGFYZCbxBE,109200
|
|
169
170
|
modal_proto/api_grpc.py,sha256=vwC-GjejDKWbG5jRN3rkU8WBSqQ8Pdj-T2E2xAECAUw,134411
|
|
170
|
-
modal_proto/api_pb2.py,sha256=
|
|
171
|
-
modal_proto/api_pb2.pyi,sha256=
|
|
171
|
+
modal_proto/api_pb2.py,sha256=SqMt_EbaHRTcCz4_HeelaJTvQSsbP_YPTJSmlLNn8BU,381467
|
|
172
|
+
modal_proto/api_pb2.pyi,sha256=EaDJnKXZxxs1497rPGGCIcj5ZjfGNj891QEqftQ2qiA,536365
|
|
172
173
|
modal_proto/api_pb2_grpc.py,sha256=Hqw9jcbhpr-W6jsfog_tGU55ouZjITxGvA-DGNBqOLA,289714
|
|
173
174
|
modal_proto/api_pb2_grpc.pyi,sha256=QLJ58ANCx147HeGJva58h0MTCLIDs9JmVjrx8bDdwlg,67776
|
|
174
175
|
modal_proto/modal_api_grpc.py,sha256=MqaBZB2ZqYj6XTIgI_p5dOPjt9gKT4pAJNd_WXR3W84,21295
|
|
@@ -185,10 +186,10 @@ modal_proto/task_command_router_pb2.py,sha256=_pD2ZpU0bNzhwBdzmLoLyLtAtftI_Agxwn
|
|
|
185
186
|
modal_proto/task_command_router_pb2.pyi,sha256=EyDgXPLr7alqjXYERV8w_MPuO404x0uCppmSkrfE9IE,14589
|
|
186
187
|
modal_proto/task_command_router_pb2_grpc.py,sha256=uEQ0HdrCp8v-9bB5yIic9muA8spCShLHY6Bz9cCgOUE,10114
|
|
187
188
|
modal_proto/task_command_router_pb2_grpc.pyi,sha256=s3Yxsrawdj4nr8vqQqsAxyX6ilWaGbdECy425KKbLIA,3301
|
|
188
|
-
modal_version/__init__.py,sha256=
|
|
189
|
+
modal_version/__init__.py,sha256=782DByEJ_th6XWFxmR8yS5KZXKX4zFVE27W21dDjsPs,121
|
|
189
190
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
|
190
|
-
modal-1.2.2.
|
|
191
|
-
modal-1.2.2.
|
|
192
|
-
modal-1.2.2.
|
|
193
|
-
modal-1.2.2.
|
|
194
|
-
modal-1.2.2.
|
|
191
|
+
modal-1.2.2.dev36.dist-info/METADATA,sha256=cTS-BK_hb6dcpVhvPmBf0q0XgS8d8voOmHkksd0NTJQ,2490
|
|
192
|
+
modal-1.2.2.dev36.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
|
193
|
+
modal-1.2.2.dev36.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
|
194
|
+
modal-1.2.2.dev36.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
|
195
|
+
modal-1.2.2.dev36.dist-info/RECORD,,
|
modal_proto/api.proto
CHANGED
|
@@ -1289,6 +1289,8 @@ message EnvironmentListItem {
|
|
|
1289
1289
|
bool default = 4;
|
|
1290
1290
|
bool is_managed = 5;
|
|
1291
1291
|
string environment_id = 6;
|
|
1292
|
+
optional int32 max_concurrent_tasks = 7;
|
|
1293
|
+
optional int32 max_concurrent_gpus = 8;
|
|
1292
1294
|
}
|
|
1293
1295
|
|
|
1294
1296
|
message EnvironmentListResponse {
|
|
@@ -1312,6 +1314,8 @@ message EnvironmentUpdateRequest {
|
|
|
1312
1314
|
string current_name = 1;
|
|
1313
1315
|
google.protobuf.StringValue name = 2;
|
|
1314
1316
|
google.protobuf.StringValue web_suffix = 3;
|
|
1317
|
+
optional int32 max_concurrent_tasks = 4;
|
|
1318
|
+
optional int32 max_concurrent_gpus = 5;
|
|
1315
1319
|
}
|
|
1316
1320
|
|
|
1317
1321
|
// A file entry when listing files in a volume or network file system.
|