modal 1.2.1.dev14__py3-none-any.whl → 1.2.1.dev15__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/flash.py +21 -47
- modal/experimental/flash.pyi +6 -20
- modal/functions.pyi +6 -6
- {modal-1.2.1.dev14.dist-info → modal-1.2.1.dev15.dist-info}/METADATA +1 -1
- {modal-1.2.1.dev14.dist-info → modal-1.2.1.dev15.dist-info}/RECORD +18 -18
- modal_proto/api.proto +0 -9
- modal_proto/api_grpc.py +0 -16
- modal_proto/api_pb2.py +185 -205
- modal_proto/api_pb2.pyi +0 -30
- modal_proto/api_pb2_grpc.py +0 -34
- modal_proto/api_pb2_grpc.pyi +0 -12
- modal_proto/modal_api_grpc.py +0 -1
- modal_version/__init__.py +1 -1
- {modal-1.2.1.dev14.dist-info → modal-1.2.1.dev15.dist-info}/WHEEL +0 -0
- {modal-1.2.1.dev14.dist-info → modal-1.2.1.dev15.dist-info}/entry_points.txt +0 -0
- {modal-1.2.1.dev14.dist-info → modal-1.2.1.dev15.dist-info}/licenses/LICENSE +0 -0
- {modal-1.2.1.dev14.dist-info → modal-1.2.1.dev15.dist-info}/top_level.txt +0 -0
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.2.1.
|
|
36
|
+
version: str = "1.2.1.dev15",
|
|
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.2.1.
|
|
167
|
+
version: str = "1.2.1.dev15",
|
|
168
168
|
):
|
|
169
169
|
"""mdmd:hidden
|
|
170
170
|
The Modal client object is not intended to be instantiated directly by users.
|
modal/experimental/flash.py
CHANGED
|
@@ -321,7 +321,7 @@ class _FlashPrometheusAutoscaler:
|
|
|
321
321
|
|
|
322
322
|
async def _compute_target_containers(self, current_replicas: int) -> int:
|
|
323
323
|
"""
|
|
324
|
-
Gets
|
|
324
|
+
Gets metrics from container to autoscale up or down.
|
|
325
325
|
"""
|
|
326
326
|
containers = await self._get_all_containers()
|
|
327
327
|
if len(containers) > current_replicas:
|
|
@@ -334,7 +334,7 @@ class _FlashPrometheusAutoscaler:
|
|
|
334
334
|
if current_replicas == 0:
|
|
335
335
|
return 1
|
|
336
336
|
|
|
337
|
-
# Get metrics based on autoscaler type
|
|
337
|
+
# Get metrics based on autoscaler type
|
|
338
338
|
sum_metric, n_containers_with_metrics = await self._get_scaling_info(containers)
|
|
339
339
|
|
|
340
340
|
desired_replicas = self._calculate_desired_replicas(
|
|
@@ -406,39 +406,26 @@ class _FlashPrometheusAutoscaler:
|
|
|
406
406
|
return desired_replicas
|
|
407
407
|
|
|
408
408
|
async def _get_scaling_info(self, containers) -> tuple[float, int]:
|
|
409
|
-
"""Get metrics using
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
sum_metric = sum(container_metrics_list)
|
|
421
|
-
n_containers_with_metrics = len(container_metrics_list)
|
|
422
|
-
else:
|
|
423
|
-
sum_metric = 0
|
|
424
|
-
n_containers_with_metrics = 0
|
|
425
|
-
|
|
426
|
-
container_metrics_list = await asyncio.gather(
|
|
427
|
-
*[
|
|
428
|
-
self._get_metrics(f"https://{container.host}:{container.port}/{self.metrics_endpoint}")
|
|
429
|
-
for container in containers
|
|
430
|
-
]
|
|
431
|
-
)
|
|
409
|
+
"""Get metrics using container exposed metrics endpoints."""
|
|
410
|
+
sum_metric = 0
|
|
411
|
+
n_containers_with_metrics = 0
|
|
412
|
+
|
|
413
|
+
container_metrics_list = await asyncio.gather(
|
|
414
|
+
*[
|
|
415
|
+
self._get_metrics(f"https://{container.host}:{container.port}/{self.metrics_endpoint}")
|
|
416
|
+
for container in containers
|
|
417
|
+
]
|
|
418
|
+
)
|
|
432
419
|
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
420
|
+
for container_metrics in container_metrics_list:
|
|
421
|
+
if (
|
|
422
|
+
container_metrics is None
|
|
423
|
+
or self.target_metric not in container_metrics
|
|
424
|
+
or len(container_metrics[self.target_metric]) == 0
|
|
425
|
+
):
|
|
426
|
+
continue
|
|
427
|
+
sum_metric += container_metrics[self.target_metric][0].value
|
|
428
|
+
n_containers_with_metrics += 1
|
|
442
429
|
|
|
443
430
|
return sum_metric, n_containers_with_metrics
|
|
444
431
|
|
|
@@ -474,15 +461,6 @@ class _FlashPrometheusAutoscaler:
|
|
|
474
461
|
|
|
475
462
|
return metrics
|
|
476
463
|
|
|
477
|
-
async def _get_container_metrics(self, container_id: str) -> Optional[api_pb2.TaskGetAutoscalingMetricsResponse]:
|
|
478
|
-
req = api_pb2.TaskGetAutoscalingMetricsRequest(task_id=container_id)
|
|
479
|
-
try:
|
|
480
|
-
resp = await retry_transient_errors(self.client.stub.TaskGetAutoscalingMetrics, req)
|
|
481
|
-
return resp
|
|
482
|
-
except Exception as e:
|
|
483
|
-
logger.warning(f"[Modal Flash] Error getting metrics for container {container_id}: {e}")
|
|
484
|
-
return None
|
|
485
|
-
|
|
486
464
|
async def _get_all_containers(self):
|
|
487
465
|
req = api_pb2.FlashContainerListRequest(function_id=self.fn.object_id)
|
|
488
466
|
resp = await retry_transient_errors(self.client.stub.FlashContainerList, req)
|
|
@@ -572,14 +550,10 @@ async def flash_prometheus_autoscaler(
|
|
|
572
550
|
app_name: str,
|
|
573
551
|
cls_name: str,
|
|
574
552
|
# Endpoint to fetch metrics from. Must be in Prometheus format. Example: "/metrics"
|
|
575
|
-
# If metrics_endpoint is "internal", we will use containers' internal metrics to autoscale instead.
|
|
576
553
|
metrics_endpoint: str,
|
|
577
554
|
# Target metric to autoscale on. Example: "vllm:num_requests_running"
|
|
578
|
-
# If metrics_endpoint is "internal", target_metrics options are: [cpu_usage_percent, memory_usage_percent]
|
|
579
555
|
target_metric: str,
|
|
580
556
|
# Target metric value. Example: 25
|
|
581
|
-
# If metrics_endpoint is "internal", target_metric_value is a percentage value between 0.1 and 1.0 (inclusive),
|
|
582
|
-
# indicating container's usage of that metric.
|
|
583
557
|
target_metric_value: float,
|
|
584
558
|
min_containers: Optional[int] = None,
|
|
585
559
|
max_containers: Optional[int] = None,
|
modal/experimental/flash.pyi
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import modal.client
|
|
2
|
-
import modal_proto.api_pb2
|
|
3
2
|
import subprocess
|
|
4
3
|
import typing
|
|
5
4
|
import typing_extensions
|
|
@@ -139,7 +138,7 @@ class _FlashPrometheusAutoscaler:
|
|
|
139
138
|
async def start(self): ...
|
|
140
139
|
async def _run_autoscaler_loop(self): ...
|
|
141
140
|
async def _compute_target_containers(self, current_replicas: int) -> int:
|
|
142
|
-
"""Gets
|
|
141
|
+
"""Gets metrics from container to autoscale up or down."""
|
|
143
142
|
...
|
|
144
143
|
|
|
145
144
|
def _calculate_desired_replicas(
|
|
@@ -154,13 +153,10 @@ class _FlashPrometheusAutoscaler:
|
|
|
154
153
|
...
|
|
155
154
|
|
|
156
155
|
async def _get_scaling_info(self, containers) -> tuple[float, int]:
|
|
157
|
-
"""Get metrics using
|
|
156
|
+
"""Get metrics using container exposed metrics endpoints."""
|
|
158
157
|
...
|
|
159
158
|
|
|
160
159
|
async def _get_metrics(self, url: str) -> typing.Optional[dict[str, list[typing.Any]]]: ...
|
|
161
|
-
async def _get_container_metrics(
|
|
162
|
-
self, container_id: str
|
|
163
|
-
) -> typing.Optional[modal_proto.api_pb2.TaskGetAutoscalingMetricsResponse]: ...
|
|
164
160
|
async def _get_all_containers(self): ...
|
|
165
161
|
async def _set_target_slots(self, target_slots: int): ...
|
|
166
162
|
def _make_scaling_decision(
|
|
@@ -226,11 +222,11 @@ class FlashPrometheusAutoscaler:
|
|
|
226
222
|
|
|
227
223
|
class ___compute_target_containers_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
228
224
|
def __call__(self, /, current_replicas: int) -> int:
|
|
229
|
-
"""Gets
|
|
225
|
+
"""Gets metrics from container to autoscale up or down."""
|
|
230
226
|
...
|
|
231
227
|
|
|
232
228
|
async def aio(self, /, current_replicas: int) -> int:
|
|
233
|
-
"""Gets
|
|
229
|
+
"""Gets metrics from container to autoscale up or down."""
|
|
234
230
|
...
|
|
235
231
|
|
|
236
232
|
_compute_target_containers: ___compute_target_containers_spec[typing_extensions.Self]
|
|
@@ -248,11 +244,11 @@ class FlashPrometheusAutoscaler:
|
|
|
248
244
|
|
|
249
245
|
class ___get_scaling_info_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
250
246
|
def __call__(self, /, containers) -> tuple[float, int]:
|
|
251
|
-
"""Get metrics using
|
|
247
|
+
"""Get metrics using container exposed metrics endpoints."""
|
|
252
248
|
...
|
|
253
249
|
|
|
254
250
|
async def aio(self, /, containers) -> tuple[float, int]:
|
|
255
|
-
"""Get metrics using
|
|
251
|
+
"""Get metrics using container exposed metrics endpoints."""
|
|
256
252
|
...
|
|
257
253
|
|
|
258
254
|
_get_scaling_info: ___get_scaling_info_spec[typing_extensions.Self]
|
|
@@ -263,16 +259,6 @@ class FlashPrometheusAutoscaler:
|
|
|
263
259
|
|
|
264
260
|
_get_metrics: ___get_metrics_spec[typing_extensions.Self]
|
|
265
261
|
|
|
266
|
-
class ___get_container_metrics_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
267
|
-
def __call__(
|
|
268
|
-
self, /, container_id: str
|
|
269
|
-
) -> typing.Optional[modal_proto.api_pb2.TaskGetAutoscalingMetricsResponse]: ...
|
|
270
|
-
async def aio(
|
|
271
|
-
self, /, container_id: str
|
|
272
|
-
) -> typing.Optional[modal_proto.api_pb2.TaskGetAutoscalingMetricsResponse]: ...
|
|
273
|
-
|
|
274
|
-
_get_container_metrics: ___get_container_metrics_spec[typing_extensions.Self]
|
|
275
|
-
|
|
276
262
|
class ___get_all_containers_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
277
263
|
def __call__(self, /): ...
|
|
278
264
|
async def aio(self, /): ...
|
modal/functions.pyi
CHANGED
|
@@ -401,7 +401,7 @@ class Function(
|
|
|
401
401
|
|
|
402
402
|
_call_generator: ___call_generator_spec[typing_extensions.Self]
|
|
403
403
|
|
|
404
|
-
class __remote_spec(typing_extensions.Protocol[
|
|
404
|
+
class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
|
405
405
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
|
|
406
406
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
|
407
407
|
...
|
|
@@ -410,7 +410,7 @@ class Function(
|
|
|
410
410
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
|
411
411
|
...
|
|
412
412
|
|
|
413
|
-
remote: __remote_spec[modal._functions.
|
|
413
|
+
remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
|
|
414
414
|
|
|
415
415
|
class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
416
416
|
def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
|
|
@@ -437,7 +437,7 @@ class Function(
|
|
|
437
437
|
"""
|
|
438
438
|
...
|
|
439
439
|
|
|
440
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
|
440
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
|
441
441
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
442
442
|
"""[Experimental] Calls the function with the given arguments, without waiting for the results.
|
|
443
443
|
|
|
@@ -461,7 +461,7 @@ class Function(
|
|
|
461
461
|
...
|
|
462
462
|
|
|
463
463
|
_experimental_spawn: ___experimental_spawn_spec[
|
|
464
|
-
modal._functions.
|
|
464
|
+
modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
|
|
465
465
|
]
|
|
466
466
|
|
|
467
467
|
class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
|
|
@@ -470,7 +470,7 @@ class Function(
|
|
|
470
470
|
|
|
471
471
|
_spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
|
|
472
472
|
|
|
473
|
-
class __spawn_spec(typing_extensions.Protocol[
|
|
473
|
+
class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
|
474
474
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
475
475
|
"""Calls the function with the given arguments, without waiting for the results.
|
|
476
476
|
|
|
@@ -491,7 +491,7 @@ class Function(
|
|
|
491
491
|
"""
|
|
492
492
|
...
|
|
493
493
|
|
|
494
|
-
spawn: __spawn_spec[modal._functions.
|
|
494
|
+
spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
|
|
495
495
|
|
|
496
496
|
def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
|
|
497
497
|
"""Return the inner Python object wrapped by this Modal Function."""
|
|
@@ -24,7 +24,7 @@ modal/app.pyi,sha256=AUV5Rp8qQrZJTP2waoKHFY7rYgsXNMYibMcCAQKuSeo,50544
|
|
|
24
24
|
modal/billing.py,sha256=zmQ3bcCJlwa4KD1IA_QgdWpm1pn13c-7qfy79iEauYI,195
|
|
25
25
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
|
26
26
|
modal/client.py,sha256=kyAIVB3Ay-XKJizQ_1ufUFB__EagV0MLmHJpyYyJ7J0,18636
|
|
27
|
-
modal/client.pyi,sha256=
|
|
27
|
+
modal/client.pyi,sha256=UGtqk5bx_bnjPg7uudfmO0QmKws4uCbox7LUe-OzS98,15831
|
|
28
28
|
modal/cloud_bucket_mount.py,sha256=I2GRXYhOWLIz2kJZjXu75jAm9EJkBNcutGc6jR2ReUw,5928
|
|
29
29
|
modal/cloud_bucket_mount.pyi,sha256=VuUOipMIHqFXMkD-3g2bsoqpSxV5qswlFHDOqPQzYAo,7405
|
|
30
30
|
modal/cls.py,sha256=ZxzivE3fNci4-A5uyBYNAzXMXtdqDg3gnYvgbdy5fhg,40384
|
|
@@ -41,7 +41,7 @@ modal/file_io.py,sha256=OSKr77TujcXGJW1iikzYiHckLSmv07QBgBHcxxYEkoI,21456
|
|
|
41
41
|
modal/file_io.pyi,sha256=xtO6Glf_BFwDE7QiQQo24QqcMf_Vv-iz7WojcGVlLBU,15932
|
|
42
42
|
modal/file_pattern_matcher.py,sha256=A_Kdkej6q7YQyhM_2-BvpFmPqJ0oHb54B6yf9VqvPVE,8116
|
|
43
43
|
modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
|
|
44
|
-
modal/functions.pyi,sha256=
|
|
44
|
+
modal/functions.pyi,sha256=Z6VuukLrjASAgf0kV9I6c09WvP_b2gCujX6f9j2bBaw,37988
|
|
45
45
|
modal/gpu.py,sha256=Fe5ORvVPDIstSq1xjmM6OoNgLYFWvogP9r5BgmD3hYg,6769
|
|
46
46
|
modal/image.py,sha256=HDkOnhIAN8g63a8LTN4J5SjC9ciReFQQJIxTS2z5KFM,107216
|
|
47
47
|
modal/image.pyi,sha256=dMvMwAuvWkNN2BRYJFijkEy2m_xtEXgCKK0T7FVldsc,77514
|
|
@@ -153,10 +153,10 @@ modal/cli/programs/run_jupyter.py,sha256=IJw8nds8Cjl9j4dxBqMGxhz-bIyVX0kle7jbt8H
|
|
|
153
153
|
modal/cli/programs/run_marimo.py,sha256=QlCGPkwQ0XLajt2LtujR_BGsRV1AZ3OCUgZxkkM1lug,2893
|
|
154
154
|
modal/cli/programs/vscode.py,sha256=E1aJPU7b8RWWj-JX71DifsCoLYsCAnre7lATiBJjUms,3386
|
|
155
155
|
modal/experimental/__init__.py,sha256=9gkVuDmu3m4TlKoU3MzEtTOemUSs8EEOWba40s7Aa0M,14043
|
|
156
|
-
modal/experimental/flash.py,sha256
|
|
157
|
-
modal/experimental/flash.pyi,sha256=
|
|
156
|
+
modal/experimental/flash.py,sha256=-lSyFBbeT6UT-uB29L955SNh6L6ISg_uBDy5gF4ZpLo,26919
|
|
157
|
+
modal/experimental/flash.pyi,sha256=uwinKAYxpunNNfBj58FP88DXb535Qik4F6tnJKPAIwQ,14696
|
|
158
158
|
modal/experimental/ipython.py,sha256=TrCfmol9LGsRZMeDoeMPx3Hv3BFqQhYnmD_iH0pqdhk,2904
|
|
159
|
-
modal-1.2.1.
|
|
159
|
+
modal-1.2.1.dev15.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
|
160
160
|
modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
|
161
161
|
modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
|
|
162
162
|
modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
|
|
@@ -164,13 +164,13 @@ modal_docs/mdmd/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,2
|
|
|
164
164
|
modal_docs/mdmd/mdmd.py,sha256=tUTImNd4UMFk1opkaw8J672gX8AkBO5gbY2S_NMxsxs,7140
|
|
165
165
|
modal_docs/mdmd/signatures.py,sha256=XJaZrK7Mdepk5fdX51A8uENiLFNil85Ud0d4MH8H5f0,3218
|
|
166
166
|
modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
|
|
167
|
-
modal_proto/api.proto,sha256=
|
|
168
|
-
modal_proto/api_grpc.py,sha256=
|
|
169
|
-
modal_proto/api_pb2.py,sha256=
|
|
170
|
-
modal_proto/api_pb2.pyi,sha256=
|
|
171
|
-
modal_proto/api_pb2_grpc.py,sha256=
|
|
172
|
-
modal_proto/api_pb2_grpc.pyi,sha256=
|
|
173
|
-
modal_proto/modal_api_grpc.py,sha256=
|
|
167
|
+
modal_proto/api.proto,sha256=GYn-HjF_vc7Y4_BvHZBCG-c9ZJU0CWnyX_Lk973J2Pw,108645
|
|
168
|
+
modal_proto/api_grpc.py,sha256=vwC-GjejDKWbG5jRN3rkU8WBSqQ8Pdj-T2E2xAECAUw,134411
|
|
169
|
+
modal_proto/api_pb2.py,sha256=EtmyiWUznFw_YzPhrw9U4SuXuDsAgZigozbPR4n4TG4,379625
|
|
170
|
+
modal_proto/api_pb2.pyi,sha256=77N3MpNhleBngbyMkph2w87IZmj9DVxhJ1Ezc1Aosmw,531180
|
|
171
|
+
modal_proto/api_pb2_grpc.py,sha256=Hqw9jcbhpr-W6jsfog_tGU55ouZjITxGvA-DGNBqOLA,289714
|
|
172
|
+
modal_proto/api_pb2_grpc.pyi,sha256=QLJ58ANCx147HeGJva58h0MTCLIDs9JmVjrx8bDdwlg,67776
|
|
173
|
+
modal_proto/modal_api_grpc.py,sha256=ME4PoI4cm7_Tpi3duU6-0O5LwhbYKrgJ5n3ijWgeNss,20256
|
|
174
174
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
175
175
|
modal_proto/sandbox_router.proto,sha256=o6LZWekz2h7uAhBlHcu_EqXnc5ptxm-4j_ZUFVGAJFk,5161
|
|
176
176
|
modal_proto/sandbox_router_grpc.py,sha256=27daOTX2N5hADDG-5Qnn4Yj3VfekyJwrDUkrQ12mPuU,5004
|
|
@@ -184,10 +184,10 @@ modal_proto/task_command_router_pb2.py,sha256=_pD2ZpU0bNzhwBdzmLoLyLtAtftI_Agxwn
|
|
|
184
184
|
modal_proto/task_command_router_pb2.pyi,sha256=EyDgXPLr7alqjXYERV8w_MPuO404x0uCppmSkrfE9IE,14589
|
|
185
185
|
modal_proto/task_command_router_pb2_grpc.py,sha256=uEQ0HdrCp8v-9bB5yIic9muA8spCShLHY6Bz9cCgOUE,10114
|
|
186
186
|
modal_proto/task_command_router_pb2_grpc.pyi,sha256=s3Yxsrawdj4nr8vqQqsAxyX6ilWaGbdECy425KKbLIA,3301
|
|
187
|
-
modal_version/__init__.py,sha256=
|
|
187
|
+
modal_version/__init__.py,sha256=vkq2oCnafaqr6nqiR7nHb8JclOJLXYMcCph81nNMr3o,121
|
|
188
188
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
|
189
|
-
modal-1.2.1.
|
|
190
|
-
modal-1.2.1.
|
|
191
|
-
modal-1.2.1.
|
|
192
|
-
modal-1.2.1.
|
|
193
|
-
modal-1.2.1.
|
|
189
|
+
modal-1.2.1.dev15.dist-info/METADATA,sha256=er7pk05y0NA4kL_o8Jd0mYSzjqNc54yCFsz_vXY60u4,2484
|
|
190
|
+
modal-1.2.1.dev15.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
|
191
|
+
modal-1.2.1.dev15.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
|
192
|
+
modal-1.2.1.dev15.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
|
193
|
+
modal-1.2.1.dev15.dist-info/RECORD,,
|
modal_proto/api.proto
CHANGED
|
@@ -3143,14 +3143,6 @@ message TaskCurrentInputsResponse {
|
|
|
3143
3143
|
repeated string input_ids = 1;
|
|
3144
3144
|
}
|
|
3145
3145
|
|
|
3146
|
-
message TaskGetAutoscalingMetricsRequest {
|
|
3147
|
-
string task_id = 1;
|
|
3148
|
-
}
|
|
3149
|
-
|
|
3150
|
-
message TaskGetAutoscalingMetricsResponse {
|
|
3151
|
-
AutoscalingMetrics metrics = 1;
|
|
3152
|
-
}
|
|
3153
|
-
|
|
3154
3146
|
// Used to get a JWT and URL for direct access to a task command router
|
|
3155
3147
|
// running on the modal-worker, so the client can issue exec commands (and other
|
|
3156
3148
|
// operations as they become available) directly to the worker.
|
|
@@ -3778,7 +3770,6 @@ service ModalClient {
|
|
|
3778
3770
|
// Tasks
|
|
3779
3771
|
rpc TaskClusterHello(TaskClusterHelloRequest) returns (TaskClusterHelloResponse);
|
|
3780
3772
|
rpc TaskCurrentInputs(google.protobuf.Empty) returns (TaskCurrentInputsResponse);
|
|
3781
|
-
rpc TaskGetAutoscalingMetrics(TaskGetAutoscalingMetricsRequest) returns (TaskGetAutoscalingMetricsResponse); // Used for flash autoscaling
|
|
3782
3773
|
rpc TaskGetCommandRouterAccess(TaskGetCommandRouterAccessRequest) returns (TaskGetCommandRouterAccessResponse);
|
|
3783
3774
|
rpc TaskList(TaskListRequest) returns (TaskListResponse);
|
|
3784
3775
|
rpc TaskResult(TaskResultRequest) returns (google.protobuf.Empty);
|
modal_proto/api_grpc.py
CHANGED
|
@@ -610,10 +610,6 @@ class ModalClientBase(abc.ABC):
|
|
|
610
610
|
async def TaskCurrentInputs(self, stream: 'grpclib.server.Stream[google.protobuf.empty_pb2.Empty, modal_proto.api_pb2.TaskCurrentInputsResponse]') -> None:
|
|
611
611
|
pass
|
|
612
612
|
|
|
613
|
-
@abc.abstractmethod
|
|
614
|
-
async def TaskGetAutoscalingMetrics(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.TaskGetAutoscalingMetricsRequest, modal_proto.api_pb2.TaskGetAutoscalingMetricsResponse]') -> None:
|
|
615
|
-
pass
|
|
616
|
-
|
|
617
613
|
@abc.abstractmethod
|
|
618
614
|
async def TaskGetCommandRouterAccess(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.TaskGetCommandRouterAccessRequest, modal_proto.api_pb2.TaskGetCommandRouterAccessResponse]') -> None:
|
|
619
615
|
pass
|
|
@@ -1608,12 +1604,6 @@ class ModalClientBase(abc.ABC):
|
|
|
1608
1604
|
google.protobuf.empty_pb2.Empty,
|
|
1609
1605
|
modal_proto.api_pb2.TaskCurrentInputsResponse,
|
|
1610
1606
|
),
|
|
1611
|
-
'/modal.client.ModalClient/TaskGetAutoscalingMetrics': grpclib.const.Handler(
|
|
1612
|
-
self.TaskGetAutoscalingMetrics,
|
|
1613
|
-
grpclib.const.Cardinality.UNARY_UNARY,
|
|
1614
|
-
modal_proto.api_pb2.TaskGetAutoscalingMetricsRequest,
|
|
1615
|
-
modal_proto.api_pb2.TaskGetAutoscalingMetricsResponse,
|
|
1616
|
-
),
|
|
1617
1607
|
'/modal.client.ModalClient/TaskGetCommandRouterAccess': grpclib.const.Handler(
|
|
1618
1608
|
self.TaskGetCommandRouterAccess,
|
|
1619
1609
|
grpclib.const.Cardinality.UNARY_UNARY,
|
|
@@ -2664,12 +2654,6 @@ class ModalClientStub:
|
|
|
2664
2654
|
google.protobuf.empty_pb2.Empty,
|
|
2665
2655
|
modal_proto.api_pb2.TaskCurrentInputsResponse,
|
|
2666
2656
|
)
|
|
2667
|
-
self.TaskGetAutoscalingMetrics = grpclib.client.UnaryUnaryMethod(
|
|
2668
|
-
channel,
|
|
2669
|
-
'/modal.client.ModalClient/TaskGetAutoscalingMetrics',
|
|
2670
|
-
modal_proto.api_pb2.TaskGetAutoscalingMetricsRequest,
|
|
2671
|
-
modal_proto.api_pb2.TaskGetAutoscalingMetricsResponse,
|
|
2672
|
-
)
|
|
2673
2657
|
self.TaskGetCommandRouterAccess = grpclib.client.UnaryUnaryMethod(
|
|
2674
2658
|
channel,
|
|
2675
2659
|
'/modal.client.ModalClient/TaskGetCommandRouterAccess',
|