modal 0.73.103__py3-none-any.whl → 0.73.105__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 +4 -0
- modal/client.pyi +2 -2
- modal/image.py +27 -0
- modal/image.pyi +2 -0
- {modal-0.73.103.dist-info → modal-0.73.105.dist-info}/METADATA +1 -1
- {modal-0.73.103.dist-info → modal-0.73.105.dist-info}/RECORD +14 -14
- modal_proto/api.proto +1 -0
- modal_proto/api_pb2.py +460 -460
- modal_proto/api_pb2.pyi +4 -1
- modal_version/_version_generated.py +1 -1
- {modal-0.73.103.dist-info → modal-0.73.105.dist-info}/LICENSE +0 -0
- {modal-0.73.103.dist-info → modal-0.73.105.dist-info}/WHEEL +0 -0
- {modal-0.73.103.dist-info → modal-0.73.105.dist-info}/entry_points.txt +0 -0
- {modal-0.73.103.dist-info → modal-0.73.105.dist-info}/top_level.txt +0 -0
modal/_functions.py
CHANGED
@@ -99,6 +99,7 @@ class _RetryContext:
|
|
99
99
|
input_jwt: str
|
100
100
|
input_id: str
|
101
101
|
item: api_pb2.FunctionPutInputsItem
|
102
|
+
sync_client_retries_enabled: bool
|
102
103
|
|
103
104
|
|
104
105
|
class _Invocation:
|
@@ -151,6 +152,7 @@ class _Invocation:
|
|
151
152
|
input_jwt=input.input_jwt,
|
152
153
|
input_id=input.input_id,
|
153
154
|
item=item,
|
155
|
+
sync_client_retries_enabled=response.sync_client_retries_enabled,
|
154
156
|
)
|
155
157
|
return _Invocation(client.stub, function_call_id, client, retry_context)
|
156
158
|
|
@@ -172,6 +174,7 @@ class _Invocation:
|
|
172
174
|
input_jwt=input.input_jwt,
|
173
175
|
input_id=input.input_id,
|
174
176
|
item=item,
|
177
|
+
sync_client_retries_enabled=response.sync_client_retries_enabled
|
175
178
|
)
|
176
179
|
return _Invocation(client.stub, function_call_id, client, retry_context)
|
177
180
|
|
@@ -242,6 +245,7 @@ class _Invocation:
|
|
242
245
|
or not ctx.retry_policy
|
243
246
|
or ctx.retry_policy.retries == 0
|
244
247
|
or ctx.function_call_invocation_type != api_pb2.FUNCTION_CALL_INVOCATION_TYPE_SYNC
|
248
|
+
or not ctx.sync_client_retries_enabled
|
245
249
|
):
|
246
250
|
return await self._get_single_output()
|
247
251
|
|
modal/client.pyi
CHANGED
@@ -31,7 +31,7 @@ class _Client:
|
|
31
31
|
server_url: str,
|
32
32
|
client_type: int,
|
33
33
|
credentials: typing.Optional[tuple[str, str]],
|
34
|
-
version: str = "0.73.
|
34
|
+
version: str = "0.73.105",
|
35
35
|
): ...
|
36
36
|
def is_closed(self) -> bool: ...
|
37
37
|
@property
|
@@ -93,7 +93,7 @@ class Client:
|
|
93
93
|
server_url: str,
|
94
94
|
client_type: int,
|
95
95
|
credentials: typing.Optional[tuple[str, str]],
|
96
|
-
version: str = "0.73.
|
96
|
+
version: str = "0.73.105",
|
97
97
|
): ...
|
98
98
|
def is_closed(self) -> bool: ...
|
99
99
|
@property
|
modal/image.py
CHANGED
@@ -1444,6 +1444,9 @@ class _Image(_Object, type_prefix="im"):
|
|
1444
1444
|
f"RUN micromamba install -n base -y python={validated_python_version} pip -c conda-forge",
|
1445
1445
|
]
|
1446
1446
|
commands = _Image._registry_setup_commands(tag, version, setup_commands)
|
1447
|
+
if version > "2024.10":
|
1448
|
+
# for convenience when launching in a sandbox: sleep for 48h
|
1449
|
+
commands.append(f'CMD ["sleep", "{48 * 3600}"]')
|
1447
1450
|
context_files = {CONTAINER_REQUIREMENTS_PATH: _get_modal_requirements_path(version, python_version)}
|
1448
1451
|
return DockerfileSpec(commands=commands, context_files=context_files)
|
1449
1452
|
|
@@ -1833,6 +1836,9 @@ class _Image(_Object, type_prefix="im"):
|
|
1833
1836
|
]
|
1834
1837
|
if version > "2023.12":
|
1835
1838
|
commands.append(f"RUN rm {CONTAINER_REQUIREMENTS_PATH}")
|
1839
|
+
if version > "2024.10":
|
1840
|
+
# for convenience when launching in a sandbox: sleep for 48h
|
1841
|
+
commands.append(f'CMD ["sleep", "{48 * 3600}"]')
|
1836
1842
|
return DockerfileSpec(commands=commands, context_files=context_files)
|
1837
1843
|
|
1838
1844
|
return _Image._from_args(
|
@@ -2021,6 +2027,27 @@ class _Image(_Object, type_prefix="im"):
|
|
2021
2027
|
dockerfile_function=build_dockerfile,
|
2022
2028
|
)
|
2023
2029
|
|
2030
|
+
def cmd(self, cmd: list[str]) -> "_Image":
|
2031
|
+
"""Set the default entrypoint argument (`CMD`) for the image.
|
2032
|
+
|
2033
|
+
**Example**
|
2034
|
+
|
2035
|
+
```python
|
2036
|
+
image = (
|
2037
|
+
modal.Image.debian_slim().cmd(["python", "app.py"])
|
2038
|
+
)
|
2039
|
+
```
|
2040
|
+
"""
|
2041
|
+
|
2042
|
+
if not isinstance(cmd, list) or not all(isinstance(x, str) for x in cmd):
|
2043
|
+
raise InvalidError("Image CMD must be a list of strings.")
|
2044
|
+
|
2045
|
+
cmd_str = _flatten_str_args("cmd", "cmd", cmd)
|
2046
|
+
cmd_str = '"' + '", "'.join(cmd_str) + '"' if cmd_str else ""
|
2047
|
+
dockerfile_cmd = f"CMD [{cmd_str}]"
|
2048
|
+
|
2049
|
+
return self.dockerfile_commands(dockerfile_cmd)
|
2050
|
+
|
2024
2051
|
# Live handle methods
|
2025
2052
|
|
2026
2053
|
@contextlib.contextmanager
|
modal/image.pyi
CHANGED
@@ -332,6 +332,7 @@ class _Image(modal._object._Object):
|
|
332
332
|
) -> _Image: ...
|
333
333
|
def env(self, vars: dict[str, str]) -> _Image: ...
|
334
334
|
def workdir(self, path: typing.Union[str, pathlib.PurePosixPath]) -> _Image: ...
|
335
|
+
def cmd(self, cmd: list[str]) -> _Image: ...
|
335
336
|
def imports(self): ...
|
336
337
|
def _logs(self) -> typing.AsyncGenerator[str, None]: ...
|
337
338
|
|
@@ -591,6 +592,7 @@ class Image(modal.object.Object):
|
|
591
592
|
) -> Image: ...
|
592
593
|
def env(self, vars: dict[str, str]) -> Image: ...
|
593
594
|
def workdir(self, path: typing.Union[str, pathlib.PurePosixPath]) -> Image: ...
|
595
|
+
def cmd(self, cmd: list[str]) -> Image: ...
|
594
596
|
def imports(self): ...
|
595
597
|
|
596
598
|
class ___logs_spec(typing_extensions.Protocol[SUPERSELF]):
|
@@ -3,7 +3,7 @@ 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=arhkIoF8nQNfa4iwYGSoqN3QMDg5M38QNAODXC8TlKc,29301
|
6
|
-
modal/_functions.py,sha256=
|
6
|
+
modal/_functions.py,sha256=XpzmVGtdGYTPhvrsM9mzyltM0y_Su_TJ9EcPojmghq0,73049
|
7
7
|
modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
|
8
8
|
modal/_location.py,sha256=joiX-0ZeutEUDTrrqLF1GHXCdVLF-rHzstocbMcd_-k,366
|
9
9
|
modal/_object.py,sha256=JBIECWdfpRKCaCxVWZbC3Q1kF5Whk_EKvY9f4Y6AFyg,11446
|
@@ -22,7 +22,7 @@ modal/app.py,sha256=ojhuLZuNZAQ1OsbDH0k6G4pm1W7bOIvZfXbaKlvQ-Ao,45622
|
|
22
22
|
modal/app.pyi,sha256=tZFbcsu20SuvfB2puxCyuXLFNJ9bQulzag55rVpgZmc,26827
|
23
23
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
24
24
|
modal/client.py,sha256=j9D3hNis1lfhnz9lVFGgJgowbH3PaGUzNKgHPWYG778,15372
|
25
|
-
modal/client.pyi,sha256=
|
25
|
+
modal/client.pyi,sha256=vLr_buXGEpKnVHJ66hj6mxSTgtDY0A5J08Z4x4JIb1M,7661
|
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=JhDbaZZHN52lqA_roY1BCbcN9BvbkUcdXiM2Kg9lIc0,31717
|
@@ -43,8 +43,8 @@ modal/file_pattern_matcher.py,sha256=trosX-Bp7dOubudN1bLLhRAoidWy1TcoaR4Pv8CedWw
|
|
43
43
|
modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
|
44
44
|
modal/functions.pyi,sha256=D-PDJfSbwqMDXdq7Bxu2ErZRENo-tRgu_zPoB-jl0OU,14377
|
45
45
|
modal/gpu.py,sha256=Kbhs_u49FaC2Zi0TjCdrpstpRtT5eZgecynmQi5IZVE,6752
|
46
|
-
modal/image.py,sha256=
|
47
|
-
modal/image.pyi,sha256=
|
46
|
+
modal/image.py,sha256=o9wnpB03agSoErzh-odrKU2BprROxRZOWGJidjZeeds,91811
|
47
|
+
modal/image.pyi,sha256=DQ4DLOCPr6_yV7z4LS0bTY0rOyvQP9-dQOrzaW7pPG8,25260
|
48
48
|
modal/io_streams.py,sha256=h5O2LmbRoT9l777z3TQhCAm-JF1r7avZ2ykXlejztDs,15163
|
49
49
|
modal/io_streams.pyi,sha256=bJ7ZLmSmJ0nKoa6r4FJpbqvzdUVa0lEe0Fa-MMpMezU,5071
|
50
50
|
modal/mount.py,sha256=JII0zTS1fPCcCbZgO18okkOuTDqYCxY1DIVa6i1E9cI,32196
|
@@ -152,10 +152,10 @@ modal_docs/mdmd/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,2
|
|
152
152
|
modal_docs/mdmd/mdmd.py,sha256=Irx49MCCTlBOP4FBdLR--JrpA3-WhsVeriq0LGgsRic,6232
|
153
153
|
modal_docs/mdmd/signatures.py,sha256=XJaZrK7Mdepk5fdX51A8uENiLFNil85Ud0d4MH8H5f0,3218
|
154
154
|
modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
155
|
-
modal_proto/api.proto,sha256=
|
155
|
+
modal_proto/api.proto,sha256=0koajsaKlUO0ALWiqEv7dXWuioWZEhZWdDdAcBn9edk,86993
|
156
156
|
modal_proto/api_grpc.py,sha256=FYGqDegM_w_qxdtlxum8k31mDibKoMvmNxv_p9cKdKs,109056
|
157
|
-
modal_proto/api_pb2.py,sha256=
|
158
|
-
modal_proto/api_pb2.pyi,sha256=
|
157
|
+
modal_proto/api_pb2.py,sha256=KFU1G0t9pgv9D1Ge-Gc5QxBXPfF_ABf2gyfD0lgyDcM,312874
|
158
|
+
modal_proto/api_pb2.pyi,sha256=iWlQJkaR0fS5SZJQ8_e-dc6Hq_GgyNuP1_YZMMvgFXg,422349
|
159
159
|
modal_proto/api_pb2_grpc.py,sha256=DNp0Et5i_Ey4dKx_1o1LRtYhyWYyT0NzTcAY4EcHn-c,235765
|
160
160
|
modal_proto/api_pb2_grpc.pyi,sha256=RI6tWC3L8EIN4-izFSEGPPJl5Ta0lXPNuHUJaWAr35s,54892
|
161
161
|
modal_proto/modal_api_grpc.py,sha256=UG8WJU81afrWPwItWB4Ag64E9EpyREMpBbAVGVEYJiM,14550
|
@@ -169,10 +169,10 @@ modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0y
|
|
169
169
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
170
170
|
modal_version/__init__.py,sha256=wiJQ53c-OMs0Xf1UeXOxQ7FwlV1VzIjnX6o-pRYZ_Pk,470
|
171
171
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
172
|
-
modal_version/_version_generated.py,sha256=
|
173
|
-
modal-0.73.
|
174
|
-
modal-0.73.
|
175
|
-
modal-0.73.
|
176
|
-
modal-0.73.
|
177
|
-
modal-0.73.
|
178
|
-
modal-0.73.
|
172
|
+
modal_version/_version_generated.py,sha256=AQJ4OlTWM73vwQ0-UvskgAHrh8aUu1JxD14Xs01FXqw,150
|
173
|
+
modal-0.73.105.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
174
|
+
modal-0.73.105.dist-info/METADATA,sha256=n6rOHxkL7wGLVNV5vswQPiNRLE3EH7cNUA1sWSDYyFI,2453
|
175
|
+
modal-0.73.105.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
|
176
|
+
modal-0.73.105.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
177
|
+
modal-0.73.105.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
178
|
+
modal-0.73.105.dist-info/RECORD,,
|
modal_proto/api.proto
CHANGED
@@ -1598,6 +1598,7 @@ message FunctionMapResponse {
|
|
1598
1598
|
repeated FunctionPutInputsResponseItem pipelined_inputs = 2;
|
1599
1599
|
FunctionRetryPolicy retry_policy = 3;
|
1600
1600
|
string function_call_jwt = 4;
|
1601
|
+
bool sync_client_retries_enabled = 5;
|
1601
1602
|
}
|
1602
1603
|
|
1603
1604
|
message FunctionOptions {
|