modal 1.1.2.dev22__py3-none-any.whl → 1.1.2.dev23__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 -0
- modal/client.pyi +2 -2
- modal/cls.py +10 -1
- modal/cls.pyi +9 -1
- modal/functions.pyi +6 -6
- {modal-1.1.2.dev22.dist-info → modal-1.1.2.dev23.dist-info}/METADATA +1 -1
- {modal-1.1.2.dev22.dist-info → modal-1.1.2.dev23.dist-info}/RECORD +12 -12
- modal_version/__init__.py +1 -1
- {modal-1.1.2.dev22.dist-info → modal-1.1.2.dev23.dist-info}/WHEEL +0 -0
- {modal-1.1.2.dev22.dist-info → modal-1.1.2.dev23.dist-info}/entry_points.txt +0 -0
- {modal-1.1.2.dev22.dist-info → modal-1.1.2.dev23.dist-info}/licenses/LICENSE +0 -0
- {modal-1.1.2.dev22.dist-info → modal-1.1.2.dev23.dist-info}/top_level.txt +0 -0
modal/_functions.py
CHANGED
@@ -1132,6 +1132,8 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
1132
1132
|
target_concurrent_inputs=options.target_concurrent_inputs,
|
1133
1133
|
batch_max_size=options.batch_max_size,
|
1134
1134
|
batch_linger_ms=options.batch_wait_ms,
|
1135
|
+
scheduler_placement=options.scheduler_placement,
|
1136
|
+
cloud_provider_str=options.cloud,
|
1135
1137
|
)
|
1136
1138
|
else:
|
1137
1139
|
options_pb = None
|
modal/client.pyi
CHANGED
@@ -33,7 +33,7 @@ class _Client:
|
|
33
33
|
server_url: str,
|
34
34
|
client_type: int,
|
35
35
|
credentials: typing.Optional[tuple[str, str]],
|
36
|
-
version: str = "1.1.2.
|
36
|
+
version: str = "1.1.2.dev23",
|
37
37
|
):
|
38
38
|
"""mdmd:hidden
|
39
39
|
The Modal client object is not intended to be instantiated directly by users.
|
@@ -164,7 +164,7 @@ class Client:
|
|
164
164
|
server_url: str,
|
165
165
|
client_type: int,
|
166
166
|
credentials: typing.Optional[tuple[str, str]],
|
167
|
-
version: str = "1.1.2.
|
167
|
+
version: str = "1.1.2.dev23",
|
168
168
|
):
|
169
169
|
"""mdmd:hidden
|
170
170
|
The Modal client object is not intended to be instantiated directly by users.
|
modal/cls.py
CHANGED
@@ -4,7 +4,7 @@ import inspect
|
|
4
4
|
import os
|
5
5
|
import typing
|
6
6
|
from collections.abc import Collection
|
7
|
-
from typing import Any, Callable, Optional, TypeVar, Union
|
7
|
+
from typing import Any, Callable, Optional, Sequence, TypeVar, Union
|
8
8
|
|
9
9
|
from google.protobuf.message import Message
|
10
10
|
from grpclib import GRPCError, Status
|
@@ -37,6 +37,7 @@ from .config import config
|
|
37
37
|
from .exception import ExecutionError, InvalidError, NotFoundError
|
38
38
|
from .gpu import GPU_T
|
39
39
|
from .retries import Retries
|
40
|
+
from .scheduler_placement import SchedulerPlacement
|
40
41
|
from .secret import _Secret
|
41
42
|
from .volume import _Volume
|
42
43
|
|
@@ -92,6 +93,8 @@ class _ServiceOptions:
|
|
92
93
|
target_concurrent_inputs: Optional[int] = None
|
93
94
|
batch_max_size: Optional[int] = None
|
94
95
|
batch_wait_ms: Optional[int] = None
|
96
|
+
scheduler_placement: Optional[api_pb2.SchedulerPlacement] = None
|
97
|
+
cloud: Optional[str] = None
|
95
98
|
|
96
99
|
def merge_options(self, new_options: "_ServiceOptions") -> "_ServiceOptions":
|
97
100
|
"""Implement protobuf-like MergeFrom semantics for this dataclass.
|
@@ -685,6 +688,8 @@ More information on class parameterization can be found here: https://modal.com/
|
|
685
688
|
buffer_containers: Optional[int] = None, # Additional containers to scale up while Function is active.
|
686
689
|
scaledown_window: Optional[int] = None, # Max amount of time a container can remain idle before scaling down.
|
687
690
|
timeout: Optional[int] = None,
|
691
|
+
region: Optional[Union[str, Sequence[str]]] = None, # Region or regions to run the function on.
|
692
|
+
cloud: Optional[str] = None, # Cloud provider to run the function on. Possible values are aws, gcp, oci, auto.
|
688
693
|
# The following parameters are deprecated
|
689
694
|
concurrency_limit: Optional[int] = None, # Now called `max_containers`
|
690
695
|
container_idle_timeout: Optional[int] = None, # Now called `scaledown_window`
|
@@ -723,6 +728,8 @@ More information on class parameterization can be found here: https://modal.com/
|
|
723
728
|
else:
|
724
729
|
resources = None
|
725
730
|
|
731
|
+
scheduler_placement = SchedulerPlacement(region=region).proto if region else None
|
732
|
+
|
726
733
|
if allow_concurrent_inputs is not None:
|
727
734
|
deprecation_warning(
|
728
735
|
(2025, 5, 9),
|
@@ -758,6 +765,8 @@ More information on class parameterization can be found here: https://modal.com/
|
|
758
765
|
buffer_containers=buffer_containers,
|
759
766
|
scaledown_window=scaledown_window,
|
760
767
|
timeout_secs=timeout,
|
768
|
+
scheduler_placement=scheduler_placement,
|
769
|
+
cloud=cloud,
|
761
770
|
# Note: set both for backwards / forwards compatibility
|
762
771
|
# But going forward `.with_concurrency` is the preferred method with distinct parameterization
|
763
772
|
max_concurrent_inputs=allow_concurrent_inputs,
|
modal/cls.pyi
CHANGED
@@ -24,7 +24,7 @@ def _use_annotation_parameters(user_cls: type) -> bool: ...
|
|
24
24
|
def _get_class_constructor_signature(user_cls: type) -> inspect.Signature: ...
|
25
25
|
|
26
26
|
class _ServiceOptions:
|
27
|
-
"""_ServiceOptions(secrets: Collection[modal.secret._Secret] = (), validated_volumes: Sequence[tuple[str, modal.volume._Volume]] = (), resources: Optional[modal_proto.api_pb2.Resources] = None, retry_policy: Optional[modal_proto.api_pb2.FunctionRetryPolicy] = None, max_containers: Optional[int] = None, buffer_containers: Optional[int] = None, scaledown_window: Optional[int] = None, timeout_secs: Optional[int] = None, max_concurrent_inputs: Optional[int] = None, target_concurrent_inputs: Optional[int] = None, batch_max_size: Optional[int] = None, batch_wait_ms: Optional[int] = None)"""
|
27
|
+
"""_ServiceOptions(secrets: Collection[modal.secret._Secret] = (), validated_volumes: Sequence[tuple[str, modal.volume._Volume]] = (), resources: Optional[modal_proto.api_pb2.Resources] = None, retry_policy: Optional[modal_proto.api_pb2.FunctionRetryPolicy] = None, max_containers: Optional[int] = None, buffer_containers: Optional[int] = None, scaledown_window: Optional[int] = None, timeout_secs: Optional[int] = None, max_concurrent_inputs: Optional[int] = None, target_concurrent_inputs: Optional[int] = None, batch_max_size: Optional[int] = None, batch_wait_ms: Optional[int] = None, scheduler_placement: Optional[modal_proto.api_pb2.SchedulerPlacement] = None, cloud: Optional[str] = None)"""
|
28
28
|
|
29
29
|
secrets: typing.Collection[modal.secret._Secret]
|
30
30
|
validated_volumes: typing.Sequence[tuple[str, modal.volume._Volume]]
|
@@ -38,6 +38,8 @@ class _ServiceOptions:
|
|
38
38
|
target_concurrent_inputs: typing.Optional[int]
|
39
39
|
batch_max_size: typing.Optional[int]
|
40
40
|
batch_wait_ms: typing.Optional[int]
|
41
|
+
scheduler_placement: typing.Optional[modal_proto.api_pb2.SchedulerPlacement]
|
42
|
+
cloud: typing.Optional[str]
|
41
43
|
|
42
44
|
def merge_options(self, new_options: _ServiceOptions) -> _ServiceOptions:
|
43
45
|
"""Implement protobuf-like MergeFrom semantics for this dataclass.
|
@@ -60,6 +62,8 @@ class _ServiceOptions:
|
|
60
62
|
target_concurrent_inputs: typing.Optional[int] = None,
|
61
63
|
batch_max_size: typing.Optional[int] = None,
|
62
64
|
batch_wait_ms: typing.Optional[int] = None,
|
65
|
+
scheduler_placement: typing.Optional[modal_proto.api_pb2.SchedulerPlacement] = None,
|
66
|
+
cloud: typing.Optional[str] = None,
|
63
67
|
) -> None:
|
64
68
|
"""Initialize self. See help(type(self)) for accurate signature."""
|
65
69
|
...
|
@@ -395,6 +399,8 @@ class _Cls(modal._object._Object):
|
|
395
399
|
buffer_containers: typing.Optional[int] = None,
|
396
400
|
scaledown_window: typing.Optional[int] = None,
|
397
401
|
timeout: typing.Optional[int] = None,
|
402
|
+
region: typing.Union[str, typing.Sequence[str], None] = None,
|
403
|
+
cloud: typing.Optional[str] = None,
|
398
404
|
concurrency_limit: typing.Optional[int] = None,
|
399
405
|
container_idle_timeout: typing.Optional[int] = None,
|
400
406
|
allow_concurrent_inputs: typing.Optional[int] = None,
|
@@ -559,6 +565,8 @@ class Cls(modal.object.Object):
|
|
559
565
|
buffer_containers: typing.Optional[int] = None,
|
560
566
|
scaledown_window: typing.Optional[int] = None,
|
561
567
|
timeout: typing.Optional[int] = None,
|
568
|
+
region: typing.Union[str, typing.Sequence[str], None] = None,
|
569
|
+
cloud: typing.Optional[str] = None,
|
562
570
|
concurrency_limit: typing.Optional[int] = None,
|
563
571
|
container_idle_timeout: typing.Optional[int] = None,
|
564
572
|
allow_concurrent_inputs: typing.Optional[int] = None,
|
modal/functions.pyi
CHANGED
@@ -433,7 +433,7 @@ class Function(
|
|
433
433
|
|
434
434
|
_call_generator: ___call_generator_spec[typing_extensions.Self]
|
435
435
|
|
436
|
-
class __remote_spec(typing_extensions.Protocol[
|
436
|
+
class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
437
437
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
|
438
438
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
439
439
|
...
|
@@ -442,7 +442,7 @@ class Function(
|
|
442
442
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
443
443
|
...
|
444
444
|
|
445
|
-
remote: __remote_spec[modal._functions.
|
445
|
+
remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
|
446
446
|
|
447
447
|
class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
|
448
448
|
def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
|
@@ -469,7 +469,7 @@ class Function(
|
|
469
469
|
"""
|
470
470
|
...
|
471
471
|
|
472
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
472
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
473
473
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
474
474
|
"""[Experimental] Calls the function with the given arguments, without waiting for the results.
|
475
475
|
|
@@ -493,7 +493,7 @@ class Function(
|
|
493
493
|
...
|
494
494
|
|
495
495
|
_experimental_spawn: ___experimental_spawn_spec[
|
496
|
-
modal._functions.
|
496
|
+
modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
|
497
497
|
]
|
498
498
|
|
499
499
|
class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
|
@@ -502,7 +502,7 @@ class Function(
|
|
502
502
|
|
503
503
|
_spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
|
504
504
|
|
505
|
-
class __spawn_spec(typing_extensions.Protocol[
|
505
|
+
class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
506
506
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
507
507
|
"""Calls the function with the given arguments, without waiting for the results.
|
508
508
|
|
@@ -523,7 +523,7 @@ class Function(
|
|
523
523
|
"""
|
524
524
|
...
|
525
525
|
|
526
|
-
spawn: __spawn_spec[modal._functions.
|
526
|
+
spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
|
527
527
|
|
528
528
|
def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
|
529
529
|
"""Return the inner Python object wrapped by this Modal Function."""
|
@@ -3,7 +3,7 @@ modal/__main__.py,sha256=45H-GtwzaDfN-1nP4_HYvzN3s7AG_HXR4-ynrsjO_OI,2803
|
|
3
3
|
modal/_clustered_functions.py,sha256=zmrKbptRbqp4euS3LWncKaLXb8Kjj4YreusOzpEpRMk,2856
|
4
4
|
modal/_clustered_functions.pyi,sha256=_wtFjWocGf1WgI-qYBpbJPArNkg2H9JV7BVaGgMesEQ,1103
|
5
5
|
modal/_container_entrypoint.py,sha256=1qBMNY_E9ICC_sRCtillMxmKPsmxJl1J0_qOAG8rH-0,28288
|
6
|
-
modal/_functions.py,sha256=
|
6
|
+
modal/_functions.py,sha256=AfCni9pszo_uCF1XOj3C98sHfYU_b-boVbr5ZexY0WE,83637
|
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=gwsLdXb-Ecd8nH8LVCo8oVZPzzdyo9BrN1DjgQmsSuM,11967
|
@@ -22,11 +22,11 @@ modal/app.py,sha256=GsClEQIs8i0K-n-DxkCO3flV2xq36sejFd4Dtjxfw0U,47914
|
|
22
22
|
modal/app.pyi,sha256=k0HnXfwV3mEze3PFHmSeqXBqizNqeJWF5oxrqo-P4Wg,43447
|
23
23
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
24
24
|
modal/client.py,sha256=kyAIVB3Ay-XKJizQ_1ufUFB__EagV0MLmHJpyYyJ7J0,18636
|
25
|
-
modal/client.pyi,sha256=
|
25
|
+
modal/client.pyi,sha256=OblRsMEFt7sssoyUCiyhOH6cNNHtLYNq-Tp7CdtJCqM,15831
|
26
26
|
modal/cloud_bucket_mount.py,sha256=YOe9nnvSr4ZbeCn587d7_VhE9IioZYRvF9VYQTQux08,5914
|
27
27
|
modal/cloud_bucket_mount.pyi,sha256=-qSfYAQvIoO_l2wsCCGTG5ZUwQieNKXdAO00yP1-LYU,7394
|
28
|
-
modal/cls.py,sha256=
|
29
|
-
modal/cls.pyi,sha256=
|
28
|
+
modal/cls.py,sha256=1mBcExFrLDTZwkD3Dzu8F26_CL0CGktOV9pE60Y8g_E,40689
|
29
|
+
modal/cls.pyi,sha256=TevKBrBez2R0_4Epsx5GB5gyQX_kQV-uVHPxpqEokhQ,28357
|
30
30
|
modal/config.py,sha256=tW-SEGjVvAt3D_MNi3LhxXnFKIA9fjLd3UIgbW8uSJE,12121
|
31
31
|
modal/container_process.py,sha256=XkPwNIW-iD_GB9u9yqv9q8y-i5cQ8eBbLZZ_GvEw9t8,6858
|
32
32
|
modal/container_process.pyi,sha256=9m-st3hCUlNN1GOTctfPPvIvoLtEl7FbuGWwif5-7YU,6037
|
@@ -39,7 +39,7 @@ modal/file_io.py,sha256=BVqAJ0sgPUfN8QsYztWiGB4j56he60TncM02KsylnCw,21449
|
|
39
39
|
modal/file_io.pyi,sha256=cPT_hsplE5iLCXhYOLn1Sp9eDdk7DxdFmicQHanJZyg,15918
|
40
40
|
modal/file_pattern_matcher.py,sha256=A_Kdkej6q7YQyhM_2-BvpFmPqJ0oHb54B6yf9VqvPVE,8116
|
41
41
|
modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
|
42
|
-
modal/functions.pyi,sha256=
|
42
|
+
modal/functions.pyi,sha256=s3PQtacOfSeHukLR7Xz3qGD2sVh-CEgfpjgimv2gCCo,36161
|
43
43
|
modal/gpu.py,sha256=Fe5ORvVPDIstSq1xjmM6OoNgLYFWvogP9r5BgmD3hYg,6769
|
44
44
|
modal/image.py,sha256=A83nmo0zfCUwgvJh0LZ7Yc1sYvDnZLl_phbKxN-9HIw,103144
|
45
45
|
modal/image.pyi,sha256=oH-GCHVEwD5fOX0K_IaWN5RKZlYwX82z-K4wxx8aN3c,68541
|
@@ -153,7 +153,7 @@ modal/experimental/__init__.py,sha256=dPBPpxsmjZMLF3YjRrXoTvT01pl65wxi4UdFZsOem3
|
|
153
153
|
modal/experimental/flash.py,sha256=viXQumCIFp5VFsPFURdFTBTjP_QnsAi8nSWXAMmfjeQ,19744
|
154
154
|
modal/experimental/flash.pyi,sha256=A8_qJGtGoXEzKDdHbvhmCw7oqfneFEvJQK3ZdTOvUdU,10830
|
155
155
|
modal/experimental/ipython.py,sha256=TrCfmol9LGsRZMeDoeMPx3Hv3BFqQhYnmD_iH0pqdhk,2904
|
156
|
-
modal-1.1.2.
|
156
|
+
modal-1.1.2.dev23.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
157
157
|
modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
158
158
|
modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
|
159
159
|
modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
|
@@ -176,10 +176,10 @@ modal_proto/options_pb2.pyi,sha256=l7DBrbLO7q3Ir-XDkWsajm0d0TQqqrfuX54i4BMpdQg,1
|
|
176
176
|
modal_proto/options_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
177
177
|
modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0yJSI,247
|
178
178
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
179
|
-
modal_version/__init__.py,sha256=
|
179
|
+
modal_version/__init__.py,sha256=sue_vsGSTvHbKvoZGG1YoybkXKfeiJB_BAQaQ7TkyDA,121
|
180
180
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
181
|
-
modal-1.1.2.
|
182
|
-
modal-1.1.2.
|
183
|
-
modal-1.1.2.
|
184
|
-
modal-1.1.2.
|
185
|
-
modal-1.1.2.
|
181
|
+
modal-1.1.2.dev23.dist-info/METADATA,sha256=RpT7pH1zUlVy6jhvP-rU_-7duhZYxmOIrAeOgg6Mqdc,2460
|
182
|
+
modal-1.1.2.dev23.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
183
|
+
modal-1.1.2.dev23.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
184
|
+
modal-1.1.2.dev23.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
185
|
+
modal-1.1.2.dev23.dist-info/RECORD,,
|
modal_version/__init__.py
CHANGED
File without changes
|
File without changes
|
File without changes
|
File without changes
|