modal 1.0.6.dev38__py3-none-any.whl → 1.0.6.dev41__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.
Potentially problematic release.
This version of modal might be problematic. Click here for more details.
- modal/client.pyi +2 -2
- modal/experimental/__init__.py +1 -90
- modal/experimental/flash.py +449 -0
- modal/experimental/flash.pyi +252 -0
- modal/image.py +12 -1
- modal/image.pyi +15 -0
- {modal-1.0.6.dev38.dist-info → modal-1.0.6.dev41.dist-info}/METADATA +1 -1
- {modal-1.0.6.dev38.dist-info → modal-1.0.6.dev41.dist-info}/RECORD +16 -14
- modal_proto/api.proto +1 -0
- modal_proto/api_pb2.py +564 -564
- modal_proto/api_pb2.pyi +4 -1
- modal_version/__init__.py +1 -1
- {modal-1.0.6.dev38.dist-info → modal-1.0.6.dev41.dist-info}/WHEEL +0 -0
- {modal-1.0.6.dev38.dist-info → modal-1.0.6.dev41.dist-info}/entry_points.txt +0 -0
- {modal-1.0.6.dev38.dist-info → modal-1.0.6.dev41.dist-info}/licenses/LICENSE +0 -0
- {modal-1.0.6.dev38.dist-info → modal-1.0.6.dev41.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import modal.client
|
|
2
|
+
import typing
|
|
3
|
+
import typing_extensions
|
|
4
|
+
|
|
5
|
+
class _FlashManager:
|
|
6
|
+
def __init__(self, client: modal.client._Client, port: int, health_check_url: typing.Optional[str] = None):
|
|
7
|
+
"""Initialize self. See help(type(self)) for accurate signature."""
|
|
8
|
+
...
|
|
9
|
+
|
|
10
|
+
async def _start(self): ...
|
|
11
|
+
async def _run_heartbeat(self, host: str, port: int): ...
|
|
12
|
+
def get_container_url(self): ...
|
|
13
|
+
async def stop(self): ...
|
|
14
|
+
async def close(self): ...
|
|
15
|
+
|
|
16
|
+
SUPERSELF = typing.TypeVar("SUPERSELF", covariant=True)
|
|
17
|
+
|
|
18
|
+
class FlashManager:
|
|
19
|
+
def __init__(self, client: modal.client.Client, port: int, health_check_url: typing.Optional[str] = None): ...
|
|
20
|
+
|
|
21
|
+
class ___start_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
22
|
+
def __call__(self, /): ...
|
|
23
|
+
async def aio(self, /): ...
|
|
24
|
+
|
|
25
|
+
_start: ___start_spec[typing_extensions.Self]
|
|
26
|
+
|
|
27
|
+
class ___run_heartbeat_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
28
|
+
def __call__(self, /, host: str, port: int): ...
|
|
29
|
+
async def aio(self, /, host: str, port: int): ...
|
|
30
|
+
|
|
31
|
+
_run_heartbeat: ___run_heartbeat_spec[typing_extensions.Self]
|
|
32
|
+
|
|
33
|
+
def get_container_url(self): ...
|
|
34
|
+
|
|
35
|
+
class __stop_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
36
|
+
def __call__(self, /): ...
|
|
37
|
+
async def aio(self, /): ...
|
|
38
|
+
|
|
39
|
+
stop: __stop_spec[typing_extensions.Self]
|
|
40
|
+
|
|
41
|
+
class __close_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
42
|
+
def __call__(self, /): ...
|
|
43
|
+
async def aio(self, /): ...
|
|
44
|
+
|
|
45
|
+
close: __close_spec[typing_extensions.Self]
|
|
46
|
+
|
|
47
|
+
class __flash_forward_spec(typing_extensions.Protocol):
|
|
48
|
+
def __call__(self, /, port: int, health_check_url: typing.Optional[str] = None) -> FlashManager:
|
|
49
|
+
"""Forward a port to the Modal Flash service, exposing that port as a stable web endpoint.
|
|
50
|
+
|
|
51
|
+
This is a highly experimental method that can break or be removed at any time without warning.
|
|
52
|
+
Do not use this method unless explicitly instructed to do so by Modal support.
|
|
53
|
+
"""
|
|
54
|
+
...
|
|
55
|
+
|
|
56
|
+
async def aio(self, /, port: int, health_check_url: typing.Optional[str] = None) -> FlashManager:
|
|
57
|
+
"""Forward a port to the Modal Flash service, exposing that port as a stable web endpoint.
|
|
58
|
+
|
|
59
|
+
This is a highly experimental method that can break or be removed at any time without warning.
|
|
60
|
+
Do not use this method unless explicitly instructed to do so by Modal support.
|
|
61
|
+
"""
|
|
62
|
+
...
|
|
63
|
+
|
|
64
|
+
flash_forward: __flash_forward_spec
|
|
65
|
+
|
|
66
|
+
class _FlashPrometheusAutoscaler:
|
|
67
|
+
def __init__(
|
|
68
|
+
self,
|
|
69
|
+
client: modal.client._Client,
|
|
70
|
+
app_name: str,
|
|
71
|
+
cls_name: str,
|
|
72
|
+
metrics_endpoint: str,
|
|
73
|
+
target_metric: str,
|
|
74
|
+
target_metric_value: float,
|
|
75
|
+
min_containers: typing.Optional[int],
|
|
76
|
+
max_containers: typing.Optional[int],
|
|
77
|
+
scale_up_tolerance: float,
|
|
78
|
+
scale_down_tolerance: float,
|
|
79
|
+
scale_up_stabilization_window_seconds: int,
|
|
80
|
+
scale_down_stabilization_window_seconds: int,
|
|
81
|
+
autoscaling_interval_seconds: int,
|
|
82
|
+
):
|
|
83
|
+
"""Initialize self. See help(type(self)) for accurate signature."""
|
|
84
|
+
...
|
|
85
|
+
|
|
86
|
+
async def start(self): ...
|
|
87
|
+
async def _run_autoscaler_loop(self): ...
|
|
88
|
+
async def _compute_target_containers(self, current_replicas: int) -> int: ...
|
|
89
|
+
async def _get_metrics(self, url: str) -> typing.Optional[dict[str, list[typing.Any]]]: ...
|
|
90
|
+
async def _get_all_containers(self): ...
|
|
91
|
+
def _make_scaling_decision(
|
|
92
|
+
self,
|
|
93
|
+
current_replicas: int,
|
|
94
|
+
autoscaling_decisions: list[tuple[float, int]],
|
|
95
|
+
scale_up_stabilization_window_seconds: int = 0,
|
|
96
|
+
scale_down_stabilization_window_seconds: int = 300,
|
|
97
|
+
min_containers: typing.Optional[int] = None,
|
|
98
|
+
max_containers: typing.Optional[int] = None,
|
|
99
|
+
) -> int:
|
|
100
|
+
"""Return the target number of containers following (simplified) Kubernetes HPA
|
|
101
|
+
stabilization-window semantics.
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
current_replicas: Current number of running Pods/containers.
|
|
105
|
+
autoscaling_decisions: List of (timestamp, desired_replicas) pairs, where
|
|
106
|
+
timestamp is a UNIX epoch float (seconds).
|
|
107
|
+
The list *must* contain at least one entry and should
|
|
108
|
+
already include the most-recent measurement.
|
|
109
|
+
scale_up_stabilization_window_seconds: 0 disables the up-window.
|
|
110
|
+
scale_down_stabilization_window_seconds: 0 disables the down-window.
|
|
111
|
+
min_containers / max_containers: Clamp the final decision to this range.
|
|
112
|
+
|
|
113
|
+
Returns:
|
|
114
|
+
The target number of containers.
|
|
115
|
+
"""
|
|
116
|
+
...
|
|
117
|
+
|
|
118
|
+
async def stop(self): ...
|
|
119
|
+
|
|
120
|
+
class FlashPrometheusAutoscaler:
|
|
121
|
+
def __init__(
|
|
122
|
+
self,
|
|
123
|
+
client: modal.client.Client,
|
|
124
|
+
app_name: str,
|
|
125
|
+
cls_name: str,
|
|
126
|
+
metrics_endpoint: str,
|
|
127
|
+
target_metric: str,
|
|
128
|
+
target_metric_value: float,
|
|
129
|
+
min_containers: typing.Optional[int],
|
|
130
|
+
max_containers: typing.Optional[int],
|
|
131
|
+
scale_up_tolerance: float,
|
|
132
|
+
scale_down_tolerance: float,
|
|
133
|
+
scale_up_stabilization_window_seconds: int,
|
|
134
|
+
scale_down_stabilization_window_seconds: int,
|
|
135
|
+
autoscaling_interval_seconds: int,
|
|
136
|
+
): ...
|
|
137
|
+
|
|
138
|
+
class __start_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
139
|
+
def __call__(self, /): ...
|
|
140
|
+
async def aio(self, /): ...
|
|
141
|
+
|
|
142
|
+
start: __start_spec[typing_extensions.Self]
|
|
143
|
+
|
|
144
|
+
class ___run_autoscaler_loop_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
145
|
+
def __call__(self, /): ...
|
|
146
|
+
async def aio(self, /): ...
|
|
147
|
+
|
|
148
|
+
_run_autoscaler_loop: ___run_autoscaler_loop_spec[typing_extensions.Self]
|
|
149
|
+
|
|
150
|
+
class ___compute_target_containers_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
151
|
+
def __call__(self, /, current_replicas: int) -> int: ...
|
|
152
|
+
async def aio(self, /, current_replicas: int) -> int: ...
|
|
153
|
+
|
|
154
|
+
_compute_target_containers: ___compute_target_containers_spec[typing_extensions.Self]
|
|
155
|
+
|
|
156
|
+
class ___get_metrics_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
157
|
+
def __call__(self, /, url: str) -> typing.Optional[dict[str, list[typing.Any]]]: ...
|
|
158
|
+
async def aio(self, /, url: str) -> typing.Optional[dict[str, list[typing.Any]]]: ...
|
|
159
|
+
|
|
160
|
+
_get_metrics: ___get_metrics_spec[typing_extensions.Self]
|
|
161
|
+
|
|
162
|
+
class ___get_all_containers_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
163
|
+
def __call__(self, /): ...
|
|
164
|
+
async def aio(self, /): ...
|
|
165
|
+
|
|
166
|
+
_get_all_containers: ___get_all_containers_spec[typing_extensions.Self]
|
|
167
|
+
|
|
168
|
+
def _make_scaling_decision(
|
|
169
|
+
self,
|
|
170
|
+
current_replicas: int,
|
|
171
|
+
autoscaling_decisions: list[tuple[float, int]],
|
|
172
|
+
scale_up_stabilization_window_seconds: int = 0,
|
|
173
|
+
scale_down_stabilization_window_seconds: int = 300,
|
|
174
|
+
min_containers: typing.Optional[int] = None,
|
|
175
|
+
max_containers: typing.Optional[int] = None,
|
|
176
|
+
) -> int:
|
|
177
|
+
"""Return the target number of containers following (simplified) Kubernetes HPA
|
|
178
|
+
stabilization-window semantics.
|
|
179
|
+
|
|
180
|
+
Args:
|
|
181
|
+
current_replicas: Current number of running Pods/containers.
|
|
182
|
+
autoscaling_decisions: List of (timestamp, desired_replicas) pairs, where
|
|
183
|
+
timestamp is a UNIX epoch float (seconds).
|
|
184
|
+
The list *must* contain at least one entry and should
|
|
185
|
+
already include the most-recent measurement.
|
|
186
|
+
scale_up_stabilization_window_seconds: 0 disables the up-window.
|
|
187
|
+
scale_down_stabilization_window_seconds: 0 disables the down-window.
|
|
188
|
+
min_containers / max_containers: Clamp the final decision to this range.
|
|
189
|
+
|
|
190
|
+
Returns:
|
|
191
|
+
The target number of containers.
|
|
192
|
+
"""
|
|
193
|
+
...
|
|
194
|
+
|
|
195
|
+
class __stop_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
196
|
+
def __call__(self, /): ...
|
|
197
|
+
async def aio(self, /): ...
|
|
198
|
+
|
|
199
|
+
stop: __stop_spec[typing_extensions.Self]
|
|
200
|
+
|
|
201
|
+
class __flash_prometheus_autoscaler_spec(typing_extensions.Protocol):
|
|
202
|
+
def __call__(
|
|
203
|
+
self,
|
|
204
|
+
/,
|
|
205
|
+
app_name: str,
|
|
206
|
+
cls_name: str,
|
|
207
|
+
metrics_endpoint: str,
|
|
208
|
+
target_metric: str,
|
|
209
|
+
target_metric_value: float,
|
|
210
|
+
min_containers: typing.Optional[int] = None,
|
|
211
|
+
max_containers: typing.Optional[int] = None,
|
|
212
|
+
scale_up_tolerance: float = 0.1,
|
|
213
|
+
scale_down_tolerance: float = 0.1,
|
|
214
|
+
scale_up_stabilization_window_seconds: int = 0,
|
|
215
|
+
scale_down_stabilization_window_seconds: int = 300,
|
|
216
|
+
autoscaling_interval_seconds: int = 15,
|
|
217
|
+
) -> FlashPrometheusAutoscaler:
|
|
218
|
+
"""Autoscale a Flash service based on containers' Prometheus metrics.
|
|
219
|
+
|
|
220
|
+
The package `prometheus_client` is required to use this method.
|
|
221
|
+
|
|
222
|
+
This is a highly experimental method that can break or be removed at any time without warning.
|
|
223
|
+
Do not use this method unless explicitly instructed to do so by Modal support.
|
|
224
|
+
"""
|
|
225
|
+
...
|
|
226
|
+
|
|
227
|
+
async def aio(
|
|
228
|
+
self,
|
|
229
|
+
/,
|
|
230
|
+
app_name: str,
|
|
231
|
+
cls_name: str,
|
|
232
|
+
metrics_endpoint: str,
|
|
233
|
+
target_metric: str,
|
|
234
|
+
target_metric_value: float,
|
|
235
|
+
min_containers: typing.Optional[int] = None,
|
|
236
|
+
max_containers: typing.Optional[int] = None,
|
|
237
|
+
scale_up_tolerance: float = 0.1,
|
|
238
|
+
scale_down_tolerance: float = 0.1,
|
|
239
|
+
scale_up_stabilization_window_seconds: int = 0,
|
|
240
|
+
scale_down_stabilization_window_seconds: int = 300,
|
|
241
|
+
autoscaling_interval_seconds: int = 15,
|
|
242
|
+
) -> FlashPrometheusAutoscaler:
|
|
243
|
+
"""Autoscale a Flash service based on containers' Prometheus metrics.
|
|
244
|
+
|
|
245
|
+
The package `prometheus_client` is required to use this method.
|
|
246
|
+
|
|
247
|
+
This is a highly experimental method that can break or be removed at any time without warning.
|
|
248
|
+
Do not use this method unless explicitly instructed to do so by Modal support.
|
|
249
|
+
"""
|
|
250
|
+
...
|
|
251
|
+
|
|
252
|
+
flash_prometheus_autoscaler: __flash_prometheus_autoscaler_spec
|
modal/image.py
CHANGED
|
@@ -23,6 +23,7 @@ from typing import (
|
|
|
23
23
|
|
|
24
24
|
from google.protobuf.message import Message
|
|
25
25
|
from grpclib.exceptions import GRPCError, StreamTerminatedError
|
|
26
|
+
from typing_extensions import Self
|
|
26
27
|
|
|
27
28
|
from modal_proto import api_pb2
|
|
28
29
|
|
|
@@ -42,7 +43,7 @@ from .client import _Client
|
|
|
42
43
|
from .cloud_bucket_mount import _CloudBucketMount
|
|
43
44
|
from .config import config, logger, user_config_path
|
|
44
45
|
from .environments import _get_environment_cached
|
|
45
|
-
from .exception import InvalidError, NotFoundError, RemoteError, VersionError
|
|
46
|
+
from .exception import ExecutionError, InvalidError, NotFoundError, RemoteError, VersionError
|
|
46
47
|
from .file_pattern_matcher import NON_PYTHON_FILES, FilePatternMatcher, _ignore_fn
|
|
47
48
|
from .gpu import GPU_T, parse_gpu_config
|
|
48
49
|
from .mount import _Mount, python_standalone_mount_name
|
|
@@ -2295,5 +2296,15 @@ class _Image(_Object, type_prefix="im"):
|
|
|
2295
2296
|
if task_log.data:
|
|
2296
2297
|
yield task_log.data
|
|
2297
2298
|
|
|
2299
|
+
async def hydrate(self, client: Optional[_Client] = None) -> Self:
|
|
2300
|
+
"""mdmd:hidden"""
|
|
2301
|
+
# Image inherits hydrate() from Object but can't be hydrated on demand
|
|
2302
|
+
# Overriding the method lets us hide it from the docs and raise a better error message
|
|
2303
|
+
if not self.is_hydrated:
|
|
2304
|
+
raise ExecutionError(
|
|
2305
|
+
"Images cannot currently be hydrated on demand; you can build an Image by running an App that uses it."
|
|
2306
|
+
)
|
|
2307
|
+
return self
|
|
2308
|
+
|
|
2298
2309
|
|
|
2299
2310
|
Image = synchronize_api(_Image)
|
modal/image.pyi
CHANGED
|
@@ -940,6 +940,10 @@ class _Image(modal._object._Object):
|
|
|
940
940
|
"""
|
|
941
941
|
...
|
|
942
942
|
|
|
943
|
+
async def hydrate(self, client: typing.Optional[modal.client._Client] = None) -> typing_extensions.Self:
|
|
944
|
+
"""mdmd:hidden"""
|
|
945
|
+
...
|
|
946
|
+
|
|
943
947
|
SUPERSELF = typing.TypeVar("SUPERSELF", covariant=True)
|
|
944
948
|
|
|
945
949
|
class Image(modal.object.Object):
|
|
@@ -1781,4 +1785,15 @@ class Image(modal.object.Object):
|
|
|
1781
1785
|
|
|
1782
1786
|
_logs: ___logs_spec[typing_extensions.Self]
|
|
1783
1787
|
|
|
1788
|
+
class __hydrate_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
1789
|
+
def __call__(self, /, client: typing.Optional[modal.client.Client] = None) -> SUPERSELF:
|
|
1790
|
+
"""mdmd:hidden"""
|
|
1791
|
+
...
|
|
1792
|
+
|
|
1793
|
+
async def aio(self, /, client: typing.Optional[modal.client.Client] = None) -> SUPERSELF:
|
|
1794
|
+
"""mdmd:hidden"""
|
|
1795
|
+
...
|
|
1796
|
+
|
|
1797
|
+
hydrate: __hydrate_spec[typing_extensions.Self]
|
|
1798
|
+
|
|
1784
1799
|
SUPPORTED_PYTHON_SERIES: dict[typing.Literal["2023.12", "2024.04", "2024.10", "2025.06", "PREVIEW"], list[str]]
|
|
@@ -22,7 +22,7 @@ modal/app.py,sha256=U0sPiHpphcRHLnoLYh2IrU2RSpRFX9BE5uHb7h42STs,47478
|
|
|
22
22
|
modal/app.pyi,sha256=cXiSTu2bwu6csAUdkOlh7mr9tPvtaS2qWSEhlC1UxAg,43787
|
|
23
23
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
|
24
24
|
modal/client.py,sha256=5QyM7VJjsFbHf6E91ar3A2KY9mx03wdtGlNJvfTKUVs,17087
|
|
25
|
-
modal/client.pyi,sha256=
|
|
25
|
+
modal/client.pyi,sha256=59uOX3OI2h90k_P5Ooi8Z33dOMmA92zQerIoMtK_NWA,15270
|
|
26
26
|
modal/cloud_bucket_mount.py,sha256=YOe9nnvSr4ZbeCn587d7_VhE9IioZYRvF9VYQTQux08,5914
|
|
27
27
|
modal/cloud_bucket_mount.pyi,sha256=-qSfYAQvIoO_l2wsCCGTG5ZUwQieNKXdAO00yP1-LYU,7394
|
|
28
28
|
modal/cls.py,sha256=B5EtzpBXemH718YvgXaYjuTKvairvqfXJ7IwLZ_6vVA,40034
|
|
@@ -41,8 +41,8 @@ modal/file_pattern_matcher.py,sha256=urAue8es8jxqX94k9EYoZxxhtfgOlsEES8lbFHOorzc
|
|
|
41
41
|
modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
|
|
42
42
|
modal/functions.pyi,sha256=FJe_91dSrMCRNVT-YV1UhtxFKzIvL_C5q8xdk08-wT8,34840
|
|
43
43
|
modal/gpu.py,sha256=Fe5ORvVPDIstSq1xjmM6OoNgLYFWvogP9r5BgmD3hYg,6769
|
|
44
|
-
modal/image.py,sha256=
|
|
45
|
-
modal/image.pyi,sha256=
|
|
44
|
+
modal/image.py,sha256=qTJ6pTcLfYRh112wId7CCNWWmm077w6JoIqxE8BiCoo,102261
|
|
45
|
+
modal/image.pyi,sha256=TVy-rnSAP2WgQ5zf_sQLFzb-99Qg9LiQNGXR9psFA_o,68107
|
|
46
46
|
modal/io_streams.py,sha256=FUDpBsVK8isqwyC7DtAcQZhaHlMFSaNZGhYJOg-SFW0,15590
|
|
47
47
|
modal/io_streams.pyi,sha256=5b3b93ztZeR8IpJtNIGffX24QLPgocE4-gAps8y7CKU,13824
|
|
48
48
|
modal/mount.py,sha256=q-pPeVxAmte-G_LDpbFwaNs2Rb2MIpscfnCXzkhxrOI,36734
|
|
@@ -139,7 +139,9 @@ modal/cli/volume.py,sha256=KJ4WKQYjRGsTERkwHE1HcRia9rWzLIDDnlc89QmTLvE,10960
|
|
|
139
139
|
modal/cli/programs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
|
140
140
|
modal/cli/programs/run_jupyter.py,sha256=44Lpvqk2l3hH-uOkmAOzw60NEsfB5uaRDWDKVshvQhs,2682
|
|
141
141
|
modal/cli/programs/vscode.py,sha256=KbTAaIXyQBVCDXxXjmBHmKpgXkUw0q4R4KkJvUjCYgk,3380
|
|
142
|
-
modal/experimental/__init__.py,sha256=
|
|
142
|
+
modal/experimental/__init__.py,sha256=XhRr0QQds4fEAoILQFa0CQWUtQ76Gxioo88CupOxDvI,10847
|
|
143
|
+
modal/experimental/flash.py,sha256=xqfJLpdqaa7mgW8OgAFBfZV95PKzuTzevh7SOSVesnA,19055
|
|
144
|
+
modal/experimental/flash.pyi,sha256=1Nd31nYD8Eqi0BI63XuK6owXPGA0s9CgU_WOAzCQSQs,9957
|
|
143
145
|
modal/experimental/ipython.py,sha256=TrCfmol9LGsRZMeDoeMPx3Hv3BFqQhYnmD_iH0pqdhk,2904
|
|
144
146
|
modal/requirements/2023.12.312.txt,sha256=zWWUVgVQ92GXBKNYYr2-5vn9rlnXcmkqlwlX5u1eTYw,400
|
|
145
147
|
modal/requirements/2023.12.txt,sha256=OjsbXFkCSdkzzryZP82Q73osr5wxQ6EUzmGcK7twfkA,502
|
|
@@ -149,7 +151,7 @@ modal/requirements/2025.06.txt,sha256=KxDaVTOwatHvboDo4lorlgJ7-n-MfAwbPwxJ0zcJqr
|
|
|
149
151
|
modal/requirements/PREVIEW.txt,sha256=KxDaVTOwatHvboDo4lorlgJ7-n-MfAwbPwxJ0zcJqrs,312
|
|
150
152
|
modal/requirements/README.md,sha256=9tK76KP0Uph7O0M5oUgsSwEZDj5y-dcUPsnpR0Sc-Ik,854
|
|
151
153
|
modal/requirements/base-images.json,sha256=JYSDAgHTl-WrV_TZW5icY-IJEnbe2eQ4CZ_KN6EOZKU,1304
|
|
152
|
-
modal-1.0.6.
|
|
154
|
+
modal-1.0.6.dev41.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
|
153
155
|
modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
|
154
156
|
modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
|
|
155
157
|
modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
|
|
@@ -157,10 +159,10 @@ modal_docs/mdmd/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,2
|
|
|
157
159
|
modal_docs/mdmd/mdmd.py,sha256=eW5MzrEl7mSclDo4Uv64sQ1-4IyLggldbgUJdBVLDdI,6449
|
|
158
160
|
modal_docs/mdmd/signatures.py,sha256=XJaZrK7Mdepk5fdX51A8uENiLFNil85Ud0d4MH8H5f0,3218
|
|
159
161
|
modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
|
160
|
-
modal_proto/api.proto,sha256=
|
|
162
|
+
modal_proto/api.proto,sha256=8gWPs6-uQ-6FzXsGoZfd0Thxn7M8HCGlJifgak-HuOc,99382
|
|
161
163
|
modal_proto/api_grpc.py,sha256=F7Hu-1Yg7p5a2SbKw9yR4AgpyU0ntvgZTaVbIJMR0DE,122366
|
|
162
|
-
modal_proto/api_pb2.py,sha256=
|
|
163
|
-
modal_proto/api_pb2.pyi,sha256=
|
|
164
|
+
modal_proto/api_pb2.py,sha256=UkIGNmJulT5xRc0m6Yem28lW0NJOiPta0SzfiX6lNh8,349679
|
|
165
|
+
modal_proto/api_pb2.pyi,sha256=SOShNIPqZiOSqTgo18QkH6UCfAhLrGeMdIWs2hC8Sco,476375
|
|
164
166
|
modal_proto/api_pb2_grpc.py,sha256=pIFrNmCOgRRcIW8A1Ekja9Po6fHcsj54ExDZFzTpYe4,264347
|
|
165
167
|
modal_proto/api_pb2_grpc.pyi,sha256=vtxrQ9xnQG6ZRXjp2uk43Mb7wV7F4qGYuVl5JUBc8jI,61968
|
|
166
168
|
modal_proto/modal_api_grpc.py,sha256=Yl_fGbSIuX2FAEnURkYpKqshs7kbNqtz5HlTJEXkbhE,18487
|
|
@@ -172,10 +174,10 @@ modal_proto/options_pb2.pyi,sha256=l7DBrbLO7q3Ir-XDkWsajm0d0TQqqrfuX54i4BMpdQg,1
|
|
|
172
174
|
modal_proto/options_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
173
175
|
modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0yJSI,247
|
|
174
176
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
175
|
-
modal_version/__init__.py,sha256=
|
|
177
|
+
modal_version/__init__.py,sha256=o2_TOOYQzVwzurP3BNmDktIpBKS1fw1A_18HSJsCKcg,121
|
|
176
178
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
|
177
|
-
modal-1.0.6.
|
|
178
|
-
modal-1.0.6.
|
|
179
|
-
modal-1.0.6.
|
|
180
|
-
modal-1.0.6.
|
|
181
|
-
modal-1.0.6.
|
|
179
|
+
modal-1.0.6.dev41.dist-info/METADATA,sha256=i4u_mrFwG5IBfWnQQ7bp99JIQnqaz7zPlnpteqBudDI,2462
|
|
180
|
+
modal-1.0.6.dev41.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
|
181
|
+
modal-1.0.6.dev41.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
|
182
|
+
modal-1.0.6.dev41.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
|
183
|
+
modal-1.0.6.dev41.dist-info/RECORD,,
|