modal 0.74.11__py3-none-any.whl → 0.74.13__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 +2 -2
- modal/_functions.py +5 -0
- modal/_resolver.py +6 -0
- modal/_utils/function_utils.py +5 -0
- modal/app.py +5 -1
- modal/app.pyi +4 -0
- modal/cli/_traceback.py +2 -2
- modal/client.pyi +2 -2
- modal/functions.pyi +1 -0
- {modal-0.74.11.dist-info → modal-0.74.13.dist-info}/METADATA +1 -1
- {modal-0.74.11.dist-info → modal-0.74.13.dist-info}/RECORD +19 -19
- modal_proto/api.proto +12 -3
- modal_proto/api_pb2.py +592 -566
- modal_proto/api_pb2.pyi +58 -10
- modal_version/_version_generated.py +1 -1
- {modal-0.74.11.dist-info → modal-0.74.13.dist-info}/WHEEL +0 -0
- {modal-0.74.11.dist-info → modal-0.74.13.dist-info}/entry_points.txt +0 -0
- {modal-0.74.11.dist-info → modal-0.74.13.dist-info}/licenses/LICENSE +0 -0
- {modal-0.74.11.dist-info → modal-0.74.13.dist-info}/top_level.txt +0 -0
modal/__main__.py
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
import sys
|
3
3
|
|
4
4
|
from ._traceback import reduce_traceback_to_user_code
|
5
|
-
from .cli._traceback import
|
5
|
+
from .cli._traceback import highlight_modal_warnings, setup_rich_traceback
|
6
6
|
from .cli.entry_point import entrypoint_cli
|
7
7
|
from .cli.import_refs import _CliUserExecutionError
|
8
8
|
from .config import config
|
@@ -11,7 +11,7 @@ from .config import config
|
|
11
11
|
def main():
|
12
12
|
# Setup rich tracebacks, but only on user's end, when using the Modal CLI.
|
13
13
|
setup_rich_traceback()
|
14
|
-
|
14
|
+
highlight_modal_warnings()
|
15
15
|
|
16
16
|
try:
|
17
17
|
entrypoint_cli()
|
modal/_functions.py
CHANGED
@@ -459,6 +459,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
459
459
|
ephemeral_disk: Optional[int] = None,
|
460
460
|
# current default: first-party, future default: main-package
|
461
461
|
include_source: Optional[bool] = None,
|
462
|
+
experimental_options: Optional[dict[str, str]] = None,
|
462
463
|
_experimental_proxy_ip: Optional[str] = None,
|
463
464
|
_experimental_custom_scaling_factor: Optional[float] = None,
|
464
465
|
_experimental_enable_gpu_snapshot: bool = False,
|
@@ -819,6 +820,8 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
819
820
|
i6pn_enabled=i6pn_enabled,
|
820
821
|
schedule=schedule.proto_message if schedule is not None else None,
|
821
822
|
snapshot_debug=config.get("snapshot_debug"),
|
823
|
+
experimental_options=experimental_options or {},
|
824
|
+
# ---
|
822
825
|
_experimental_group_size=cluster_size or 0, # Experimental: Clustered functions
|
823
826
|
_experimental_concurrent_cancellations=True,
|
824
827
|
_experimental_proxy_ip=_experimental_proxy_ip,
|
@@ -856,6 +859,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
856
859
|
use_method_name=function_definition.use_method_name,
|
857
860
|
method_definitions=function_definition.method_definitions,
|
858
861
|
method_definitions_set=function_definition.method_definitions_set,
|
862
|
+
experimental_options=experimental_options or {},
|
859
863
|
_experimental_group_size=function_definition._experimental_group_size,
|
860
864
|
_experimental_buffer_containers=function_definition._experimental_buffer_containers,
|
861
865
|
_experimental_custom_scaling=function_definition._experimental_custom_scaling,
|
@@ -913,6 +917,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
913
917
|
raise InvalidError(f"Function {info.function_name} is too large to deploy.")
|
914
918
|
raise
|
915
919
|
function_creation_status.set_response(response)
|
920
|
+
|
916
921
|
# needed for modal.serve file watching
|
917
922
|
serve_mounts = {m for m in all_mounts if m.is_local()}
|
918
923
|
serve_mounts |= image._serve_mounts
|
modal/_resolver.py
CHANGED
@@ -10,6 +10,8 @@ from typing import TYPE_CHECKING, Optional
|
|
10
10
|
|
11
11
|
from grpclib import GRPCError, Status
|
12
12
|
|
13
|
+
from modal_proto import api_pb2
|
14
|
+
|
13
15
|
from ._utils.async_utils import TaskContext
|
14
16
|
from .client import _Client
|
15
17
|
from .exception import NotFoundError
|
@@ -34,6 +36,10 @@ class StatusRow:
|
|
34
36
|
if self._spinner is not None:
|
35
37
|
self._spinner.update(text=message)
|
36
38
|
|
39
|
+
def warning(self, warning: api_pb2.Warning):
|
40
|
+
if self._step_node is not None:
|
41
|
+
self._step_node.add(f"[yellow]:warning:[/yellow] {warning.message}")
|
42
|
+
|
37
43
|
def finish(self, message):
|
38
44
|
if self._step_node is not None and self._spinner is not None:
|
39
45
|
from ._output import OutputManager
|
modal/_utils/function_utils.py
CHANGED
@@ -584,6 +584,8 @@ class FunctionCreationStatus:
|
|
584
584
|
suffix = _get_suffix_from_web_url_info(url_info)
|
585
585
|
# TODO: this is only printed when we're showing progress. Maybe move this somewhere else.
|
586
586
|
web_url = self.response.handle_metadata.web_url
|
587
|
+
for warning in self.response.server_warnings:
|
588
|
+
self.status_row.warning(warning)
|
587
589
|
self.status_row.finish(
|
588
590
|
f"Created web function {self.tag} => [magenta underline]{web_url}[/magenta underline]"
|
589
591
|
f"{proxy_auth_suffix}{suffix}"
|
@@ -595,7 +597,10 @@ class FunctionCreationStatus:
|
|
595
597
|
custom_domain_status_row.finish(
|
596
598
|
f"Custom domain for {self.tag} => [magenta underline]{custom_domain.url}[/magenta underline]"
|
597
599
|
)
|
600
|
+
|
598
601
|
else:
|
602
|
+
for warning in self.response.server_warnings:
|
603
|
+
self.status_row.warning(warning)
|
599
604
|
self.status_row.finish(f"Created function {self.tag}.")
|
600
605
|
if self.response.function.method_definitions_set:
|
601
606
|
for method_definition in self.response.function.method_definitions.values():
|
modal/app.py
CHANGED
@@ -613,6 +613,7 @@ class _App:
|
|
613
613
|
i6pn: Optional[bool] = None, # Whether to enable IPv6 container networking within the region.
|
614
614
|
# Whether the function's home package should be included in the image - defaults to True
|
615
615
|
include_source: Optional[bool] = None, # When `False`, don't automatically add the App source to the container.
|
616
|
+
experimental_options: Optional[dict[str, Any]] = None,
|
616
617
|
# Parameters below here are experimental. Use with caution!
|
617
618
|
_experimental_scheduler_placement: Optional[
|
618
619
|
SchedulerPlacement
|
@@ -780,10 +781,11 @@ class _App:
|
|
780
781
|
block_network=block_network,
|
781
782
|
max_inputs=max_inputs,
|
782
783
|
scheduler_placement=scheduler_placement,
|
783
|
-
_experimental_proxy_ip=_experimental_proxy_ip,
|
784
784
|
i6pn_enabled=i6pn_enabled,
|
785
785
|
cluster_size=cluster_size, # Experimental: Clustered functions
|
786
786
|
include_source=include_source if include_source is not None else self._include_source_default,
|
787
|
+
experimental_options={k: str(v) for k, v in (experimental_options or {}).items()},
|
788
|
+
_experimental_proxy_ip=_experimental_proxy_ip,
|
787
789
|
_experimental_enable_gpu_snapshot=_experimental_enable_gpu_snapshot,
|
788
790
|
)
|
789
791
|
|
@@ -836,6 +838,7 @@ class _App:
|
|
836
838
|
# Use `max_inputs = 1` for single-use containers.
|
837
839
|
max_inputs: Optional[int] = None,
|
838
840
|
include_source: Optional[bool] = None, # When `False`, don't automatically add the App source to the container.
|
841
|
+
experimental_options: Optional[dict[str, Any]] = None,
|
839
842
|
# Parameters below here are experimental. Use with caution!
|
840
843
|
_experimental_scheduler_placement: Optional[
|
841
844
|
SchedulerPlacement
|
@@ -947,6 +950,7 @@ class _App:
|
|
947
950
|
max_inputs=max_inputs,
|
948
951
|
scheduler_placement=scheduler_placement,
|
949
952
|
include_source=include_source if include_source is not None else self._include_source_default,
|
953
|
+
experimental_options={k: str(v) for k, v in (experimental_options or {}).items()},
|
950
954
|
_experimental_proxy_ip=_experimental_proxy_ip,
|
951
955
|
_experimental_custom_scaling_factor=_experimental_custom_scaling_factor,
|
952
956
|
_experimental_enable_gpu_snapshot=_experimental_enable_gpu_snapshot,
|
modal/app.pyi
CHANGED
@@ -192,6 +192,7 @@ class _App:
|
|
192
192
|
max_inputs: typing.Optional[int] = None,
|
193
193
|
i6pn: typing.Optional[bool] = None,
|
194
194
|
include_source: typing.Optional[bool] = None,
|
195
|
+
experimental_options: typing.Optional[dict[str, typing.Any]] = None,
|
195
196
|
_experimental_scheduler_placement: typing.Optional[modal.scheduler_placement.SchedulerPlacement] = None,
|
196
197
|
_experimental_proxy_ip: typing.Optional[str] = None,
|
197
198
|
_experimental_custom_scaling_factor: typing.Optional[float] = None,
|
@@ -239,6 +240,7 @@ class _App:
|
|
239
240
|
block_network: bool = False,
|
240
241
|
max_inputs: typing.Optional[int] = None,
|
241
242
|
include_source: typing.Optional[bool] = None,
|
243
|
+
experimental_options: typing.Optional[dict[str, typing.Any]] = None,
|
242
244
|
_experimental_scheduler_placement: typing.Optional[modal.scheduler_placement.SchedulerPlacement] = None,
|
243
245
|
_experimental_proxy_ip: typing.Optional[str] = None,
|
244
246
|
_experimental_custom_scaling_factor: typing.Optional[float] = None,
|
@@ -432,6 +434,7 @@ class App:
|
|
432
434
|
max_inputs: typing.Optional[int] = None,
|
433
435
|
i6pn: typing.Optional[bool] = None,
|
434
436
|
include_source: typing.Optional[bool] = None,
|
437
|
+
experimental_options: typing.Optional[dict[str, typing.Any]] = None,
|
435
438
|
_experimental_scheduler_placement: typing.Optional[modal.scheduler_placement.SchedulerPlacement] = None,
|
436
439
|
_experimental_proxy_ip: typing.Optional[str] = None,
|
437
440
|
_experimental_custom_scaling_factor: typing.Optional[float] = None,
|
@@ -479,6 +482,7 @@ class App:
|
|
479
482
|
block_network: bool = False,
|
480
483
|
max_inputs: typing.Optional[int] = None,
|
481
484
|
include_source: typing.Optional[bool] = None,
|
485
|
+
experimental_options: typing.Optional[dict[str, typing.Any]] = None,
|
482
486
|
_experimental_scheduler_placement: typing.Optional[modal.scheduler_placement.SchedulerPlacement] = None,
|
483
487
|
_experimental_proxy_ip: typing.Optional[str] = None,
|
484
488
|
_experimental_custom_scaling_factor: typing.Optional[float] = None,
|
modal/cli/_traceback.py
CHANGED
@@ -161,8 +161,8 @@ def setup_rich_traceback() -> None:
|
|
161
161
|
install(suppress=[synchronicity, grpclib, click, typer], extra_lines=1)
|
162
162
|
|
163
163
|
|
164
|
-
def
|
165
|
-
"""Patch the warnings module to make
|
164
|
+
def highlight_modal_warnings() -> None:
|
165
|
+
"""Patch the warnings module to make certain warnings more salient in the CLI."""
|
166
166
|
base_showwarning = warnings.showwarning
|
167
167
|
|
168
168
|
def showwarning(warning, category, filename, lineno, file=None, line=None):
|
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.74.
|
30
|
+
self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.74.13"
|
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.74.
|
88
|
+
self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.74.13"
|
89
89
|
): ...
|
90
90
|
def is_closed(self) -> bool: ...
|
91
91
|
@property
|
modal/functions.pyi
CHANGED
@@ -98,6 +98,7 @@ class Function(
|
|
98
98
|
max_inputs: typing.Optional[int] = None,
|
99
99
|
ephemeral_disk: typing.Optional[int] = None,
|
100
100
|
include_source: typing.Optional[bool] = None,
|
101
|
+
experimental_options: typing.Optional[dict[str, str]] = None,
|
101
102
|
_experimental_proxy_ip: typing.Optional[str] = None,
|
102
103
|
_experimental_custom_scaling_factor: typing.Optional[float] = None,
|
103
104
|
_experimental_enable_gpu_snapshot: bool = False,
|
@@ -1,16 +1,16 @@
|
|
1
1
|
modal/__init__.py,sha256=7wz1AT_bpWJJEzXsAo3QMb7i87y7UGXwfneb0bGDhRg,2502
|
2
|
-
modal/__main__.py,sha256=
|
2
|
+
modal/__main__.py,sha256=sTJcc9EbDuCKSwg3tL6ZckFw9WWdlkXW8mId1IvJCNc,2846
|
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=DymOImhc3uGRkIq_qXmBsEbWMB4EBMpfuXzz2S4BcGg,29404
|
6
|
-
modal/_functions.py,sha256=
|
6
|
+
modal/_functions.py,sha256=JGkxTOL6dcKIK2kCZfalzAO5JZXABVk0rc1Id1QgmCg,74900
|
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
|
10
10
|
modal/_output.py,sha256=Z0nngPh2mKHMQc4MQ92YjVPc3ewOLa3I4dFBlL9nvQY,25656
|
11
11
|
modal/_partial_function.py,sha256=8mmd5lvjZaC7qi0KAnLR1H590MlxNslAE2_Kr9biJUA,39704
|
12
12
|
modal/_pty.py,sha256=JZfPDDpzqICZqtyPI_oMJf_9w-p_lLNuzHhwhodUXio,1329
|
13
|
-
modal/_resolver.py,sha256
|
13
|
+
modal/_resolver.py,sha256=-nolqj_p_mx5czVYj1Mazh2IQWpSMrTOGughVJqYfo8,7579
|
14
14
|
modal/_resources.py,sha256=5qmcirXUI8dSH926nwkUaeX9H25mqYu9mXD_KuT79-o,1733
|
15
15
|
modal/_serialization.py,sha256=wAgaALThfr-DBV9LMhM4qY_PCH7SRhA9xgoHL2bapBk,22963
|
16
16
|
modal/_traceback.py,sha256=IZQzB3fVlUfMHOSyKUgw0H6qv4yHnpyq-XVCNZKfUdA,5023
|
@@ -18,11 +18,11 @@ modal/_tunnel.py,sha256=zTBxBiuH1O22tS1OliAJdIsSmaZS8PlnifS_6S5z-mk,6320
|
|
18
18
|
modal/_tunnel.pyi,sha256=JmmDYAy9F1FpgJ_hWx0xkom2nTOFQjn4mTPYlU3PFo4,1245
|
19
19
|
modal/_type_manager.py,sha256=DWjgmjYJuOagw2erin506UUbG2H5UzZCFEekS-7hmfA,9087
|
20
20
|
modal/_watcher.py,sha256=K6LYnlmSGQB4tWWI9JADv-tvSvQ1j522FwT71B51CX8,3584
|
21
|
-
modal/app.py,sha256=
|
22
|
-
modal/app.pyi,sha256=
|
21
|
+
modal/app.py,sha256=1GSPMMYRkG17FQwnA_PleK9YQrPQWXlN_4mpZ5VRA4Q,48468
|
22
|
+
modal/app.pyi,sha256=bpC9uN_B4d_UtyXVuhGpXC2RM-IcsytS0ndu-GoKrHQ,27276
|
23
23
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
24
24
|
modal/client.py,sha256=U-YKSw0n7J1ZLREt9cbEJCtmHe5YoPKFxl0xlkan2yc,15565
|
25
|
-
modal/client.pyi,sha256
|
25
|
+
modal/client.pyi,sha256=-M9YBYKyMkBDEfnlF_7bL0uGlJiPlpwTZD1hIcYBtdc,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=GvaNl8R5UsH7Vg88WEOyerdjvZEPK7xxi3nqHlyOW_c,33497
|
@@ -39,7 +39,7 @@ modal/file_io.py,sha256=lcMs_E9Xfm0YX1t9U2wNIBPnqHRxmImqjLW1GHqVmyg,20945
|
|
39
39
|
modal/file_io.pyi,sha256=NTRft1tbPSWf9TlWVeZmTlgB5AZ_Zhu2srWIrWr7brk,9445
|
40
40
|
modal/file_pattern_matcher.py,sha256=trosX-Bp7dOubudN1bLLhRAoidWy1TcoaR4Pv8CedWw,6497
|
41
41
|
modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
|
42
|
-
modal/functions.pyi,sha256=
|
42
|
+
modal/functions.pyi,sha256=2J7jPa2tQWhuUy67wg-MWvEx0rwrBNjX6UTEJbAUq_A,14855
|
43
43
|
modal/gpu.py,sha256=Kbhs_u49FaC2Zi0TjCdrpstpRtT5eZgecynmQi5IZVE,6752
|
44
44
|
modal/image.py,sha256=I-9_YZL0SSfnuGPywa3-4PlxDmJ-53p7ce3gP74SrOA,92877
|
45
45
|
modal/image.pyi,sha256=89zv12C1sFrJs7Es9SnX23_m208ASAdeNGCVTrhjzHI,25632
|
@@ -96,7 +96,7 @@ modal/_utils/blob_utils.py,sha256=jWJovk4g-YNG3CvkvglOds4a6D1M0Tcal_59v7y9VsM,14
|
|
96
96
|
modal/_utils/bytes_io_segment_payload.py,sha256=uunxVJS4PE1LojF_UpURMzVK9GuvmYWRqQo_bxEj5TU,3385
|
97
97
|
modal/_utils/deprecation.py,sha256=EXP1beU4pmEqEzWMLw6E3kUfNfpmNA_VOp6i0EHi93g,4856
|
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=z6v8A5Ee827K9f2XV1c2_Ea6iv_zcaxbXySER-qW5XQ,26903
|
100
100
|
modal/_utils/git_utils.py,sha256=qtUU6JAttF55ZxYq51y55OR58B0tDPZsZWK5dJe6W5g,3182
|
101
101
|
modal/_utils/grpc_testing.py,sha256=H1zHqthv19eGPJz2HKXDyWXWGSqO4BRsxah3L5Xaa8A,8619
|
102
102
|
modal/_utils/grpc_utils.py,sha256=oxDMEzr7BzE2NhQn53gnQwKCkpHruTbbBZg8-fuiP7E,8529
|
@@ -116,7 +116,7 @@ modal/_vendor/cloudpickle.py,sha256=avxOIgNKqL9KyPNuIOVQzBm0D1l9ipeB4RrcUMUGmeQ,
|
|
116
116
|
modal/_vendor/tblib.py,sha256=g1O7QUDd3sDoLd8YPFltkXkih7r_fyZOjgmGuligv3s,9722
|
117
117
|
modal/cli/__init__.py,sha256=waLjl5c6IPDhSsdWAm9Bji4e2PVxamYABKAze6CHVXY,28
|
118
118
|
modal/cli/_download.py,sha256=t6BXZwjTd9MgznDvbsV8rp0FZWggdzC-lUAGZU4xx1g,3984
|
119
|
-
modal/cli/_traceback.py,sha256=
|
119
|
+
modal/cli/_traceback.py,sha256=4ywtmFcmPnY3tqb4-3fA061N2tRiM01xs8fSagtkwhE,7293
|
120
120
|
modal/cli/app.py,sha256=87LWg3bTQQIHFOqs8iiJYD_X03omXBZ6lFYR0rMJV-I,8433
|
121
121
|
modal/cli/config.py,sha256=QvFsqO4eUOtI7d_pQAOAyfq_ZitjhPtav3C6GIDQcZM,1680
|
122
122
|
modal/cli/container.py,sha256=FYwEgjf93j4NMorAjGbSV98i1wpebqdAeNU1wfrFp1k,3668
|
@@ -145,7 +145,7 @@ modal/requirements/2024.10.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddR
|
|
145
145
|
modal/requirements/PREVIEW.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddRo,296
|
146
146
|
modal/requirements/README.md,sha256=9tK76KP0Uph7O0M5oUgsSwEZDj5y-dcUPsnpR0Sc-Ik,854
|
147
147
|
modal/requirements/base-images.json,sha256=57vMSqzMbLBxw5tFWSaMiIkkVEps4JfX5PAtXGnkS4U,740
|
148
|
-
modal-0.74.
|
148
|
+
modal-0.74.13.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
149
149
|
modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
150
150
|
modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
|
151
151
|
modal_docs/gen_reference_docs.py,sha256=cvTgltucqYLLIX84QxAwf51Z5Vc2n6cLxS8VcrxNCAo,6401
|
@@ -153,10 +153,10 @@ modal_docs/mdmd/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,2
|
|
153
153
|
modal_docs/mdmd/mdmd.py,sha256=Irx49MCCTlBOP4FBdLR--JrpA3-WhsVeriq0LGgsRic,6232
|
154
154
|
modal_docs/mdmd/signatures.py,sha256=XJaZrK7Mdepk5fdX51A8uENiLFNil85Ud0d4MH8H5f0,3218
|
155
155
|
modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
156
|
-
modal_proto/api.proto,sha256=
|
156
|
+
modal_proto/api.proto,sha256=R6djZcysxWHbNlMTHdTtK5oRReLl5jbP7SWCy8fkglo,93046
|
157
157
|
modal_proto/api_grpc.py,sha256=DlrVx10B6HLy4LjWrgK7HJ7kUNDKqEvm6mUqh-6EVvs,112161
|
158
|
-
modal_proto/api_pb2.py,sha256=
|
159
|
-
modal_proto/api_pb2.pyi,sha256=
|
158
|
+
modal_proto/api_pb2.py,sha256=hi4j26oPUGyuhMGl9Ir0K1Bv3yLevOV0SQbwD7zQ7xE,328277
|
159
|
+
modal_proto/api_pb2.pyi,sha256=isSiMw7B3hyz-OeVS9xK6Jnk3TaEVea_aAAx4T7aW_g,446747
|
160
160
|
modal_proto/api_pb2_grpc.py,sha256=NQPpAa3Co-zFNB6L6BQoZjf-RaOlWFFPX8chQyGHQEo,242401
|
161
161
|
modal_proto/api_pb2_grpc.pyi,sha256=zK2Ms2Xws02cC9uy5U5A5sPULXx4T6A9o9BONqFcipg,56456
|
162
162
|
modal_proto/modal_api_grpc.py,sha256=K_GsrHIw2CayKh_nyuYAblQW_tOijUNW267Hs9vWUWU,14948
|
@@ -170,9 +170,9 @@ 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=m94xZNWIjH8oUtJk4l9xfovzDJede2o7X-q0MHVECtM,470
|
172
172
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
173
|
-
modal_version/_version_generated.py,sha256=
|
174
|
-
modal-0.74.
|
175
|
-
modal-0.74.
|
176
|
-
modal-0.74.
|
177
|
-
modal-0.74.
|
178
|
-
modal-0.74.
|
173
|
+
modal_version/_version_generated.py,sha256=6P-m7simvHASepYS4sFi55aFfrRHOPo0ngo6sh4PrcA,149
|
174
|
+
modal-0.74.13.dist-info/METADATA,sha256=89QV-hz_kh0ZBsKoKNX6FPQeQRwuXVm_iJ3bBvLE4x0,2474
|
175
|
+
modal-0.74.13.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
176
|
+
modal-0.74.13.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
177
|
+
modal-0.74.13.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
178
|
+
modal-0.74.13.dist-info/RECORD,,
|
modal_proto/api.proto
CHANGED
@@ -1341,6 +1341,11 @@ message Function {
|
|
1341
1341
|
|
1342
1342
|
AutoscalerSettings autoscaler_settings = 79; // Bundle of parameters related to autoscaling
|
1343
1343
|
FunctionSchema function_schema = 80;
|
1344
|
+
|
1345
|
+
// For server-side experimental functionality. Prefer using this over individual _experimental_* fields.
|
1346
|
+
// Note the value type as string. Internally we'll coerce all values to string with str().
|
1347
|
+
// On the server, it's necessary to convert back to the most natural type (e.g. int) when relevant.
|
1348
|
+
map<string, string> experimental_options = 81;
|
1344
1349
|
}
|
1345
1350
|
|
1346
1351
|
message FunctionAsyncInvokeRequest {
|
@@ -1425,6 +1430,7 @@ message FunctionCreateResponse {
|
|
1425
1430
|
string __deprecated_web_url = 2 [ deprecated = true]; // Used up until 0.62.212
|
1426
1431
|
Function function = 4;
|
1427
1432
|
FunctionHandleMetadata handle_metadata = 5;
|
1433
|
+
repeated Warning server_warnings = 6;
|
1428
1434
|
}
|
1429
1435
|
|
1430
1436
|
message FunctionData {
|
@@ -1490,6 +1496,8 @@ message FunctionData {
|
|
1490
1496
|
|
1491
1497
|
AutoscalerSettings autoscaler_settings = 31; // Bundle of parameters related to autoscaling
|
1492
1498
|
FunctionSchema function_schema = 32;
|
1499
|
+
|
1500
|
+
map<string, string> experimental_options = 33;
|
1493
1501
|
}
|
1494
1502
|
|
1495
1503
|
message FunctionExtended {
|
@@ -2881,13 +2889,13 @@ message VolumeGetOrCreateRequest {
|
|
2881
2889
|
string environment_name = 3;
|
2882
2890
|
ObjectCreationType object_creation_type = 4;
|
2883
2891
|
string app_id = 5; // only used with OBJECT_CREATION_TYPE_ANONYMOUS_OWNED_BY_APP
|
2884
|
-
VolumeFsVersion version = 6
|
2885
|
-
VolumeMetadata metadata = 7;
|
2892
|
+
VolumeFsVersion version = 6;
|
2886
2893
|
}
|
2887
2894
|
|
2888
2895
|
message VolumeGetOrCreateResponse {
|
2889
2896
|
string volume_id = 1;
|
2890
|
-
VolumeFsVersion version = 2;
|
2897
|
+
VolumeFsVersion version = 2 [deprecated = true];
|
2898
|
+
VolumeMetadata metadata = 3;
|
2891
2899
|
}
|
2892
2900
|
|
2893
2901
|
message VolumeHeartbeatRequest {
|
@@ -3028,6 +3036,7 @@ message Warning {
|
|
3028
3036
|
WARNING_TYPE_UNSPECIFIED = 0;
|
3029
3037
|
WARNING_TYPE_CLIENT_DEPRECATION = 1;
|
3030
3038
|
WARNING_TYPE_RESOURCE_LIMIT = 2;
|
3039
|
+
WARNING_TYPE_FUNCTION_CONFIGURATION = 3;
|
3031
3040
|
}
|
3032
3041
|
WarningType type = 1;
|
3033
3042
|
string message = 2;
|