modal 1.2.0__py3-none-any.whl → 1.2.1__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.

Files changed (49) hide show
  1. modal/_container_entrypoint.py +4 -1
  2. modal/_partial_function.py +28 -3
  3. modal/_utils/function_utils.py +4 -0
  4. modal/_utils/task_command_router_client.py +537 -0
  5. modal/app.py +93 -54
  6. modal/app.pyi +48 -18
  7. modal/cli/_download.py +19 -3
  8. modal/cli/cluster.py +4 -2
  9. modal/cli/container.py +4 -2
  10. modal/cli/entry_point.py +1 -0
  11. modal/cli/launch.py +1 -2
  12. modal/cli/run.py +6 -0
  13. modal/cli/volume.py +7 -1
  14. modal/client.pyi +2 -2
  15. modal/cls.py +5 -12
  16. modal/config.py +14 -0
  17. modal/container_process.py +283 -3
  18. modal/container_process.pyi +95 -32
  19. modal/exception.py +4 -0
  20. modal/experimental/flash.py +21 -47
  21. modal/experimental/flash.pyi +6 -20
  22. modal/functions.pyi +6 -6
  23. modal/io_streams.py +455 -122
  24. modal/io_streams.pyi +220 -95
  25. modal/partial_function.pyi +4 -1
  26. modal/runner.py +39 -36
  27. modal/runner.pyi +40 -24
  28. modal/sandbox.py +130 -11
  29. modal/sandbox.pyi +145 -9
  30. modal/volume.py +23 -3
  31. modal/volume.pyi +30 -0
  32. {modal-1.2.0.dist-info → modal-1.2.1.dist-info}/METADATA +5 -5
  33. {modal-1.2.0.dist-info → modal-1.2.1.dist-info}/RECORD +49 -48
  34. modal_proto/api.proto +2 -26
  35. modal_proto/api_grpc.py +0 -32
  36. modal_proto/api_pb2.py +327 -367
  37. modal_proto/api_pb2.pyi +6 -69
  38. modal_proto/api_pb2_grpc.py +0 -67
  39. modal_proto/api_pb2_grpc.pyi +0 -22
  40. modal_proto/modal_api_grpc.py +0 -2
  41. modal_proto/sandbox_router.proto +0 -4
  42. modal_proto/sandbox_router_pb2.pyi +0 -4
  43. modal_proto/task_command_router.proto +1 -1
  44. modal_proto/task_command_router_pb2.py +2 -2
  45. modal_version/__init__.py +1 -1
  46. {modal-1.2.0.dist-info → modal-1.2.1.dist-info}/WHEEL +0 -0
  47. {modal-1.2.0.dist-info → modal-1.2.1.dist-info}/entry_points.txt +0 -0
  48. {modal-1.2.0.dist-info → modal-1.2.1.dist-info}/licenses/LICENSE +0 -0
  49. {modal-1.2.0.dist-info → modal-1.2.1.dist-info}/top_level.txt +0 -0
modal/volume.pyi CHANGED
@@ -626,6 +626,14 @@ class _Volume(modal._object._Object):
626
626
  """
627
627
  ...
628
628
 
629
+ async def _read_file_into_fileobj(
630
+ self,
631
+ path: str,
632
+ fileobj: typing.IO[bytes],
633
+ concurrency: typing.Optional[int] = None,
634
+ download_semaphore: typing.Optional[asyncio.locks.Semaphore] = None,
635
+ progress_cb: typing.Optional[collections.abc.Callable[..., typing.Any]] = None,
636
+ ) -> int: ...
629
637
  async def remove_file(self, path: str, recursive: bool = False) -> None:
630
638
  """Remove a file or directory from a volume."""
631
639
  ...
@@ -1065,6 +1073,28 @@ class Volume(modal.object.Object):
1065
1073
 
1066
1074
  read_file_into_fileobj: __read_file_into_fileobj_spec[typing_extensions.Self]
1067
1075
 
1076
+ class ___read_file_into_fileobj_spec(typing_extensions.Protocol[SUPERSELF]):
1077
+ def __call__(
1078
+ self,
1079
+ /,
1080
+ path: str,
1081
+ fileobj: typing.IO[bytes],
1082
+ concurrency: typing.Optional[int] = None,
1083
+ download_semaphore: typing.Optional[asyncio.locks.Semaphore] = None,
1084
+ progress_cb: typing.Optional[collections.abc.Callable[..., typing.Any]] = None,
1085
+ ) -> int: ...
1086
+ async def aio(
1087
+ self,
1088
+ /,
1089
+ path: str,
1090
+ fileobj: typing.IO[bytes],
1091
+ concurrency: typing.Optional[int] = None,
1092
+ download_semaphore: typing.Optional[asyncio.locks.Semaphore] = None,
1093
+ progress_cb: typing.Optional[collections.abc.Callable[..., typing.Any]] = None,
1094
+ ) -> int: ...
1095
+
1096
+ _read_file_into_fileobj: ___read_file_into_fileobj_spec[typing_extensions.Self]
1097
+
1068
1098
  class __remove_file_spec(typing_extensions.Protocol[SUPERSELF]):
1069
1099
  def __call__(self, /, path: str, recursive: bool = False) -> None:
1070
1100
  """Remove a file or directory from a volume."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.2.0
3
+ Version: 1.2.1
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -32,14 +32,14 @@ Requires-Dist: watchfiles
32
32
  Requires-Dist: typing_extensions~=4.6
33
33
  Dynamic: license-file
34
34
 
35
- # Modal Python Library
35
+ # Modal Python SDK
36
36
 
37
37
  [![PyPI Version](https://img.shields.io/pypi/v/modal.svg)](https://pypi.org/project/modal/)
38
38
  [![License](https://img.shields.io/badge/license-apache_2.0-darkviolet.svg)](https://github.com/modal-labs/modal-client/blob/master/LICENSE)
39
39
  [![Tests](https://github.com/modal-labs/modal-client/actions/workflows/ci-cd.yml/badge.svg)](https://github.com/modal-labs/modal-client/actions/workflows/ci-cd.yml)
40
40
  [![Slack](https://img.shields.io/badge/slack-join-blue.svg?logo=slack)](https://modal.com/slack)
41
41
 
42
- The [Modal](https://modal.com/) Python library provides convenient, on-demand
42
+ The [Modal](https://modal.com/) Python SDK provides convenient, on-demand
43
43
  access to serverless cloud compute from Python scripts on your local computer.
44
44
 
45
45
  ## Documentation
@@ -53,10 +53,10 @@ a [user guide](https://modal.com/docs/guide), and the detailed
53
53
 
54
54
  **This library requires Python 3.9 – 3.13.**
55
55
 
56
- Install the package with `pip`:
56
+ Install the package with `uv` or `pip`:
57
57
 
58
58
  ```bash
59
- pip install modal
59
+ uv pip install modal
60
60
  ```
61
61
 
62
62
  You can create a Modal account (or link your existing one) directly on the
@@ -3,13 +3,13 @@ modal/__main__.py,sha256=45H-GtwzaDfN-1nP4_HYvzN3s7AG_HXR4-ynrsjO_OI,2803
3
3
  modal/_billing.py,sha256=C1jUN9f_1WqozSZAt9EOk1nImXUdiLrgFeeAu3R23cI,3012
4
4
  modal/_clustered_functions.py,sha256=Sy4Sf_17EO8OL-FUe8LYcm4hrqLyQFCssNhr3p0SroU,3013
5
5
  modal/_clustered_functions.pyi,sha256=JmYwAGOLEnD5AF-gYF9O5tu-SgGjeoJz-X1j48b1Ijg,1157
6
- modal/_container_entrypoint.py,sha256=B_fIKKjWposiNsYOePifX7S6cR9hf5LRPhDfVums5O8,27867
6
+ modal/_container_entrypoint.py,sha256=zYk5mC8_IMx4kWnyFMRHKOrFRLBWchy6x-py3M8FYEw,28084
7
7
  modal/_functions.py,sha256=7YbMBWtMMWLFxCaD3MSD-2iU1R7v5HRxfve-vGNzHnE,90991
8
8
  modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
9
9
  modal/_location.py,sha256=joiX-0ZeutEUDTrrqLF1GHXCdVLF-rHzstocbMcd_-k,366
10
10
  modal/_object.py,sha256=gwsLdXb-Ecd8nH8LVCo8oVZPzzdyo9BrN1DjgQmsSuM,11967
11
11
  modal/_output.py,sha256=sdQqEuWVknHwLPzuz_7eUYqF9TvmQkSfEjm1E__bzbY,26892
12
- modal/_partial_function.py,sha256=Yqk97hLS6vi8nWWVpzS5TSWbndWMdCtkhccdnyDJgBk,37302
12
+ modal/_partial_function.py,sha256=t0yOVrYrDUdCJt7eVNyBS-atnUtjO56izKB3rDuN17Q,38573
13
13
  modal/_pty.py,sha256=E58MQ8d5-wkbMatRKpQR-G9FdbCRcZGiZxOpGy__VuY,1481
14
14
  modal/_resolver.py,sha256=2RWvm34cNSnbv1v7izJMNZgfvpLDD6LzaBlr0lIrLnY,7364
15
15
  modal/_resources.py,sha256=NMAp0GCLutiZI4GuKSIVnRHVlstoD3hNGUabjTUtzf4,1794
@@ -19,34 +19,34 @@ modal/_tunnel.py,sha256=zTBxBiuH1O22tS1OliAJdIsSmaZS8PlnifS_6S5z-mk,6320
19
19
  modal/_tunnel.pyi,sha256=rvC7USR2BcKkbZIeCJXwf7-UfGE-LPLjKsGNiK7Lxa4,13366
20
20
  modal/_type_manager.py,sha256=DWjgmjYJuOagw2erin506UUbG2H5UzZCFEekS-7hmfA,9087
21
21
  modal/_watcher.py,sha256=K6LYnlmSGQB4tWWI9JADv-tvSvQ1j522FwT71B51CX8,3584
22
- modal/app.py,sha256=W-24GIIBTKBqBWF6n4aB_heUhCb8d4KJfGF8oWteZn8,52454
23
- modal/app.pyi,sha256=6wlYK9nNp0GuHXyUxGmcZ6J92EjsWS-KK6KRuejqXEY,49718
22
+ modal/app.py,sha256=FCU0n_qdKSIZNdNRX2EpbiukM1dY5LBdBNwro5xJB4k,54793
23
+ 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=iDDAqDKVjo4FAnytkylAp4B7_TYsVd-0KradR7SbSbQ,15753
27
+ modal/client.pyi,sha256=cy4c3o4m6nKPQj0WugDe19bGQY0k5qq5UQx77ztQF3Q,15753
28
28
  modal/cloud_bucket_mount.py,sha256=I2GRXYhOWLIz2kJZjXu75jAm9EJkBNcutGc6jR2ReUw,5928
29
29
  modal/cloud_bucket_mount.pyi,sha256=VuUOipMIHqFXMkD-3g2bsoqpSxV5qswlFHDOqPQzYAo,7405
30
- modal/cls.py,sha256=_Dzu8Tjjp_XukJxfBioAeHf03egKQYuKj7SrHJiK6CE,40676
30
+ modal/cls.py,sha256=ZxzivE3fNci4-A5uyBYNAzXMXtdqDg3gnYvgbdy5fhg,40384
31
31
  modal/cls.pyi,sha256=jJsDPFoqzM4ht-V-e-xEJKJ5TINLF0fYtoBm_UeAW5Y,27281
32
- modal/config.py,sha256=OLxJU1K7ijiV_65g700QcHX8hIPH-dgzuybyQAOf6cg,12333
33
- modal/container_process.py,sha256=Mutkl7sg_WR5zP4oJiWSC-3UdYRqp0zdKi1shZbi-bk,6996
34
- modal/container_process.pyi,sha256=9m-st3hCUlNN1GOTctfPPvIvoLtEl7FbuGWwif5-7YU,6037
32
+ modal/config.py,sha256=hpgkgQKbjzo6gVbRzXQrky72_KpdSEm65RNi1M2iNjc,13038
33
+ modal/container_process.py,sha256=S-JgzAqEBlYWw7f5gwbb_RVKA2APn-VAnInrntIWBL0,16948
34
+ modal/container_process.pyi,sha256=xMKr-VbQsydS8AbhAys9UTpHHnH2QRyINpPtPG7NwmI,8373
35
35
  modal/dict.py,sha256=XkaxuojMVtcc4bZvCjJcd6DedU5xxfF8H4w-mDzFPCo,21580
36
36
  modal/dict.pyi,sha256=deOiwuwZtwXqedC3h19SwoQIWc4mUnDTBM5XkONt48Y,31712
37
37
  modal/environments.py,sha256=xXYDfgzd20CuFdww_zQ53OB0qANQG-j_ls_fT7mGdoQ,6028
38
38
  modal/environments.pyi,sha256=YwI2zClQ5vZHqqKaBJYX2eK4QHRlUuqRlF0lM1JrMOs,3673
39
- modal/exception.py,sha256=o0V93PK8Hcg2YQ2aeOB1Y-qWBw4Gz5ATfyokR8GapuQ,5634
39
+ modal/exception.py,sha256=HrvKRJO4EMwkoqa77PBeZyrGIgEZ-yqLIA10cqZndqI,5768
40
40
  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=Z6VuukLrjASAgf0kV9I6c09WvP_b2gCujX6f9j2bBaw,37988
44
+ modal/functions.pyi,sha256=CMwApS396tdElFrjnV6RuL2DTCz4C3jYzYoq1y_LPUQ,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
48
- modal/io_streams.py,sha256=hZOVc5beOAm8S_VQQmmKUbk_BJ9OltN83RY0yMPqUDo,16545
49
- modal/io_streams.pyi,sha256=aOun_jUFKHSJyUY6-7gKvNoxzcULsa8_hxdtEO7v-gk,13980
48
+ modal/io_streams.py,sha256=HHRuwwWQAF1SKi0zBFugE2ldlHnyAPLyyJIpetOBGh0,29907
49
+ modal/io_streams.pyi,sha256=_Tu84oFE2VD6ueqGCqhUM0b18eJkHO7of3-YJRScwDw,17994
50
50
  modal/mount.py,sha256=G7_xhQMZqokgfsaFLMch0YR3fs-OUNqYUm3f4jHTSMQ,33161
51
51
  modal/mount.pyi,sha256=MD_zV2M7eCWxbOpQRjU60aHevN-bmbiywaCX82QoFlw,15380
52
52
  modal/network_file_system.py,sha256=ZdEIRgdcR-p_ILyw_AecEtPOhhrSWJeADYCtFnhtaHM,13509
@@ -57,18 +57,18 @@ modal/output.py,sha256=q4T9uHduunj4NwY-YSwkHGgjZlCXMuJbfQ5UFaAGRAc,1968
57
57
  modal/parallel_map.py,sha256=E5UYVszgLR8ppOUOqCgkqgn5A93yVMvJ5YmgGgrjyQo,68991
58
58
  modal/parallel_map.pyi,sha256=NZrtfZljig59hcMKU7Cz8lYZZFOiwK9l7oWrBtX6Oy8,15838
59
59
  modal/partial_function.py,sha256=aIdlGfTjjgqY6Fpr-biCjvRU9W542_S5N2xkNN_rYGM,1127
60
- modal/partial_function.pyi,sha256=lqqOzZ9-QvHTDWKQ_oAYYOvsXgTOBKhO9u-RI98JbUk,13986
60
+ modal/partial_function.pyi,sha256=M7aHV6sbCc7R28D4Tk6Agr39m6R0emrXvm8IfWflt1o,14023
61
61
  modal/proxy.py,sha256=CQydu_NPDgApN2GLdd7rrcg8PM-pXyFdVYcTaGMBRCQ,1491
62
62
  modal/proxy.pyi,sha256=yWGWwADCRGrC2w81B7671UTH4Uv3HMZKy5vVqlJUZoA,1417
63
63
  modal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
64
  modal/queue.py,sha256=aaH3SNWeh_HjEyVUtFiN345v0GJFoucJ6aNDrDggWZQ,25775
65
65
  modal/queue.pyi,sha256=mFu7GFFVFNLU9VZshnfekEsb-ABgpjdhJ07KXHvdv3A,37256
66
66
  modal/retries.py,sha256=IvNLDM0f_GLUDD5VgEDoN09C88yoxSrCquinAuxT1Sc,5205
67
- modal/runner.py,sha256=A_zaRmJ4dNpQJWNlwUI_GJIy2GMuaQBRjMAabX0Fmvg,24599
68
- modal/runner.pyi,sha256=vUDRKqLz09QvZsaCH1gTG_iujewj-eGxxb6-VmN6eAw,8531
67
+ modal/runner.py,sha256=Ni54hwa42SEBxLPpqFwKMsUPYY8Dv-I-Kz3_jL1StCI,25220
68
+ modal/runner.pyi,sha256=DV3Z7h0owgRyOu9W5KU5O3UbRftX99KGrZQId91fpsU,8671
69
69
  modal/running_app.py,sha256=v61mapYNV1-O-Uaho5EfJlryMLvIT9We0amUOSvSGx8,1188
70
- modal/sandbox.py,sha256=oxFhpz3PuIgybsS4k36EuVmGcEvtYqjJBx0fAFMX7ak,45981
71
- modal/sandbox.pyi,sha256=OXDrF4y6BZDbtjy6XDcIJ4sNy11IU1evjW2gR725a-s,50781
70
+ modal/sandbox.py,sha256=JAC4__5bOVaIIfVn35_SDm9BEu0TVaFVubGZX9d9ycc,51021
71
+ modal/sandbox.pyi,sha256=VqGO59NZX5fSU1tnA_g0pAd7eq6GvV6lNtC8TH9Xlo8,57478
72
72
  modal/schedule.py,sha256=ng0g0AqNY5GQI9KhkXZQ5Wam5G42glbkqVQsNpBtbDE,3078
73
73
  modal/scheduler_placement.py,sha256=BAREdOY5HzHpzSBqt6jDVR6YC_jYfHMVqOzkyqQfngU,1235
74
74
  modal/secret.py,sha256=ThwP-PkwUZwiYkygqumh15n8P_77-N5ZyRWLc6I3r28,18323
@@ -80,8 +80,8 @@ modal/snapshot.pyi,sha256=0q83hlmWxAhDu8xwZyL5VmYh0i8Tigf7S60or2k30L8,1682
80
80
  modal/stream_type.py,sha256=A6320qoAAWhEfwOCZfGtymQTu5AfLfJXXgARqooTPvY,417
81
81
  modal/token_flow.py,sha256=GWpar0gANs71vm9Bd_Cj87UG1K3ljTURbkEjG3JLsrY,7616
82
82
  modal/token_flow.pyi,sha256=eirYjyqbRiT3GCKMIPHJPpkvBTu8WxDKqSHehWaJI_4,2533
83
- modal/volume.py,sha256=LNfy3GZVuPZdG9LaBjHiLtpw2OdKpuOfOvw6bK1yKT8,51798
84
- modal/volume.pyi,sha256=Fgq-QDo4iwWO-CFAgG879AbbyBuSvwOaIRbGclcTQik,51972
83
+ modal/volume.py,sha256=N-YnuRgYod9VsgfGQ2_c-0yWOLEleGfuNbxj6eihSYI,52363
84
+ modal/volume.pyi,sha256=WZGdwB51qvH5E7d6qS7sNCsscyuHsKUHFyyiZaQyvw8,53212
85
85
  modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
86
86
  modal/_runtime/asgi.py,sha256=AOcduIlijmlxhXVWo7AIUhigo-bqm6nDkHj4Q4JLy6o,22607
87
87
  modal/_runtime/container_io_manager.py,sha256=Q3JUEYrsfWsG0DuuVUiYXAUccfb8RhM8ExQEQJXR0nc,52200
@@ -99,7 +99,7 @@ modal/_utils/blob_utils.py,sha256=bmPPHfLy8Kdna8e2xS3lvKwnN5pJUUt_rN39kVIYPFM,22
99
99
  modal/_utils/bytes_io_segment_payload.py,sha256=vaXPq8b52-x6G2hwE7SrjS58pg_aRm7gV3bn3yjmTzQ,4261
100
100
  modal/_utils/deprecation.py,sha256=-Bgg7jZdcJU8lROy18YyVnQYbM8hue-hVmwJqlWAGH0,5504
101
101
  modal/_utils/docker_utils.py,sha256=h1uETghR40mp_y3fSWuZAfbIASH1HMzuphJHghAL6DU,3722
102
- modal/_utils/function_utils.py,sha256=sXYXLpkGVGChnR-wFGu11-ovW640wePBvcc7f9aTUe8,28505
102
+ modal/_utils/function_utils.py,sha256=B5dAhcOM6SK3H-iwbrJjZ7XbjpweFd3YfmuFS26R8fQ,28671
103
103
  modal/_utils/git_utils.py,sha256=qtUU6JAttF55ZxYq51y55OR58B0tDPZsZWK5dJe6W5g,3182
104
104
  modal/_utils/grpc_testing.py,sha256=H1zHqthv19eGPJz2HKXDyWXWGSqO4BRsxah3L5Xaa8A,8619
105
105
  modal/_utils/grpc_utils.py,sha256=1dQgTvdHG9KSfyVTc26HhKjGnIDJpdDEJ0xZARklOrU,10205
@@ -113,6 +113,7 @@ modal/_utils/package_utils.py,sha256=LcL2olGN4xaUzu2Tbv-C-Ft9Qp6bsLxEfETOAVd-mjU
113
113
  modal/_utils/pattern_utils.py,sha256=ZUffaECfe2iYBhH6cvCB-0-UWhmEBTZEl_TwG_So3ag,6714
114
114
  modal/_utils/rand_pb_testing.py,sha256=mmVPk1rZldHwHZx0DnHTuHQlRLAiiAYdxjwEJpxvT9c,3900
115
115
  modal/_utils/shell_utils.py,sha256=hWHzv730Br2Xyj6cGPiMZ-198Z3RZuOu3pDXhFSZ22c,2157
116
+ modal/_utils/task_command_router_client.py,sha256=ugWyExVncfs_9SbcPaWjMi3gmXPaQWI-8LuL-xHah7M,23589
116
117
  modal/_utils/time_utils.py,sha256=43tpFVwT7ykOjlETIFLVt9auMsRZqYYRYBEKxGCrRSA,1212
117
118
  modal/_vendor/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
118
119
  modal/_vendor/a2wsgi_wsgi.py,sha256=Q1AsjpV_Q_vzQsz_cSqmP9jWzsGsB-ARFU6vpQYml8k,21878
@@ -127,35 +128,35 @@ modal/builder/PREVIEW.txt,sha256=XM4z76RPnrcbCx3o3sqXijWnumyOGiTCLGhKaaS4xz0,325
127
128
  modal/builder/README.md,sha256=9tK76KP0Uph7O0M5oUgsSwEZDj5y-dcUPsnpR0Sc-Ik,854
128
129
  modal/builder/base-images.json,sha256=JYSDAgHTl-WrV_TZW5icY-IJEnbe2eQ4CZ_KN6EOZKU,1304
129
130
  modal/cli/__init__.py,sha256=6FRleWQxBDT19y7OayO4lBOzuL6Bs9r0rLINYYYbHwQ,769
130
- modal/cli/_download.py,sha256=tV8JFkncTtQKh85bSguQg6AW5aRRlynf-rvyN7ruigc,4337
131
+ modal/cli/_download.py,sha256=_Q_CG1Qb4cjVSAwHGGPOPoNTsmK9gHvF-HNWCNdFjaY,4900
131
132
  modal/cli/_traceback.py,sha256=IKj9xtc6LjAxyhGJWolNIXEX3MhAIulnRqywZNOFmkU,7324
132
133
  modal/cli/app.py,sha256=rbuAG92my-1eZN0olk6p2eD4oBnyBliUsrCOUW-U-9k,7832
133
- modal/cli/cluster.py,sha256=MMdFXqyOOeNO7P2VIUN78xKJLvesLIy_28Dt56XEXhM,3307
134
+ modal/cli/cluster.py,sha256=BLcKDpwpDmlqE2UC4V0qNpJKiQ-ZXfI9g_SE7u6vnIU,3347
134
135
  modal/cli/config.py,sha256=lhp2Pq4RbTDhaZJ-ZJvhrMqJj8c-WjuRX6gjE3TrvXc,1691
135
- modal/cli/container.py,sha256=9Ti-TIZ6vjDSmn9mk9h6SRwyhkQjtwirBN18LjpLyvE,3719
136
+ modal/cli/container.py,sha256=IdJ07p7hwFGXz3oYB__NYilucWpVv-K1JL3QKduu7ok,3769
136
137
  modal/cli/dict.py,sha256=YAJtiv41YcCd5Fqam3hXCNTs4Y0yOgGR_i6RfQNSAFM,4572
137
- modal/cli/entry_point.py,sha256=F06p54rPOs1xAUeYW76RaimFOgLW_I17RCvNwfZRqPc,4747
138
+ modal/cli/entry_point.py,sha256=7nGM8zob80L5iyLCf_TEmjyinKojquW3_O_V0wDnK-U,4809
138
139
  modal/cli/environment.py,sha256=LGBq8RVQjfBH3EWz8QgmYe19UO66JKSDNxOXMUjw7JM,4285
139
140
  modal/cli/import_refs.py,sha256=X59Z5JwgliRO6C-cIFto2Pr7o3SwlZMKQPKA0aI4ZK4,13927
140
- modal/cli/launch.py,sha256=VARim2SCzgtI1ZuxQ6JgTTtvFwGA5czCwQZQHWC8Zcc,6498
141
+ modal/cli/launch.py,sha256=oJKGWjTJiXQTdw-SUiCmCQ76bY_8nlzJMUMu0zew0zs,6435
141
142
  modal/cli/network_file_system.py,sha256=I9IqTpVfk32uKYwGd8LTldkQx6UKYrQYNZ26q7Ab5Oo,8126
142
143
  modal/cli/profile.py,sha256=g8X6tFFK9ccKyu2he9Yu19WLSLNdztzECgmIV__XJFs,3257
143
144
  modal/cli/queues.py,sha256=5vKtKQ7YExdaxNPYZ0g5suU9sX0-F5h0zy0qBV-hN80,6140
144
- modal/cli/run.py,sha256=PHqAt2H_NTAK5FjwNovNqfCaYmTYvxFDqty7Ar8EEA0,25438
145
+ modal/cli/run.py,sha256=3_UF2Vdye_KEgY8JzBBomt0i944cCJx96RfNbeAEPDo,25783
145
146
  modal/cli/secret.py,sha256=-Nnk3fq1IEzMtC9VUn61AKmdvZzZ9XQyiKVgQYRpajo,8127
146
147
  modal/cli/token.py,sha256=NAmQzKBfEHkcldWKeFxAVIqQBoo1RTp7_A4yc7-8qM0,1911
147
148
  modal/cli/utils.py,sha256=aUXDU9_VgcJrGaGRy4bGf4dqwKYXHCpoO27x4m_bpuo,3293
148
- modal/cli/volume.py,sha256=QUHG28kKuL0UG6gO3wNdLQD1yVBUNVNZL70bxs0jBNo,10759
149
+ modal/cli/volume.py,sha256=wJchJyIEw9lTKiNUNTgR4I3DPYHYJBu50gU_SsecP0w,10877
149
150
  modal/cli/programs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
150
151
  modal/cli/programs/launch_instance_ssh.py,sha256=GrwK_Vy8-7B4x5a6AqFaF7lqNVgu75JYZ2BtFV0_DOw,2660
151
152
  modal/cli/programs/run_jupyter.py,sha256=IJw8nds8Cjl9j4dxBqMGxhz-bIyVX0kle7jbt8HFOhM,2688
152
153
  modal/cli/programs/run_marimo.py,sha256=QlCGPkwQ0XLajt2LtujR_BGsRV1AZ3OCUgZxkkM1lug,2893
153
154
  modal/cli/programs/vscode.py,sha256=E1aJPU7b8RWWj-JX71DifsCoLYsCAnre7lATiBJjUms,3386
154
155
  modal/experimental/__init__.py,sha256=9gkVuDmu3m4TlKoU3MzEtTOemUSs8EEOWba40s7Aa0M,14043
155
- modal/experimental/flash.py,sha256=C4sef08rARYFllsgtqukFmYL18SZW0_JpMS0BejDcUs,28552
156
- modal/experimental/flash.pyi,sha256=vV_OQhtdrPn8SW0XrBK-aLLHHIvxAzLzwFbWrke-m74,15463
156
+ modal/experimental/flash.py,sha256=-lSyFBbeT6UT-uB29L955SNh6L6ISg_uBDy5gF4ZpLo,26919
157
+ modal/experimental/flash.pyi,sha256=uwinKAYxpunNNfBj58FP88DXb535Qik4F6tnJKPAIwQ,14696
157
158
  modal/experimental/ipython.py,sha256=TrCfmol9LGsRZMeDoeMPx3Hv3BFqQhYnmD_iH0pqdhk,2904
158
- modal-1.2.0.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
159
+ modal-1.2.1.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
159
160
  modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
160
161
  modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
161
162
  modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
@@ -163,30 +164,30 @@ modal_docs/mdmd/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,2
163
164
  modal_docs/mdmd/mdmd.py,sha256=tUTImNd4UMFk1opkaw8J672gX8AkBO5gbY2S_NMxsxs,7140
164
165
  modal_docs/mdmd/signatures.py,sha256=XJaZrK7Mdepk5fdX51A8uENiLFNil85Ud0d4MH8H5f0,3218
165
166
  modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
166
- modal_proto/api.proto,sha256=V3XYevM1T8Btc8GJmV5i4I3faI6c62xE0sfwvjx3QKY,109406
167
- modal_proto/api_grpc.py,sha256=Kgv6E88imUNNWyOA0foC1NEzgPWTXW4mJ3IKg_f0Dek,136233
168
- modal_proto/api_pb2.py,sha256=QGUGKLLqnAQPrdpXtWUDmKuNyEdeMyBAYKvOrOBcLG8,382752
169
- modal_proto/api_pb2.pyi,sha256=5P6K_B-zCILsKFk9XgtvvPu5gqUrVxVkVzzdV9CBWrU,533421
170
- modal_proto/api_pb2_grpc.py,sha256=_M7mQCqZ3BhuCgL4vRrinA2oOjWeJSMXeb5iOFKHi2g,293349
171
- modal_proto/api_pb2_grpc.pyi,sha256=4Jub1tY9CWdUXRvC7LxAiTCWuu-tuLTLBAEcpoDQMDw,68760
172
- modal_proto/modal_api_grpc.py,sha256=6w-9wV6QLE3KFSzPerMtSjzbsunVEfCjOOmplKudjuw,20528
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
173
174
  modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
174
- modal_proto/sandbox_router.proto,sha256=9qxe4PYQAJXrznPhMMdBI0SNbWeCPKVDRkTnWFAsaPc,5357
175
+ modal_proto/sandbox_router.proto,sha256=o6LZWekz2h7uAhBlHcu_EqXnc5ptxm-4j_ZUFVGAJFk,5161
175
176
  modal_proto/sandbox_router_grpc.py,sha256=27daOTX2N5hADDG-5Qnn4Yj3VfekyJwrDUkrQ12mPuU,5004
176
177
  modal_proto/sandbox_router_pb2.py,sha256=-AuG6ZRjGDjKgS1J4nSleqkS1W0HgpLjs7ahPnYwUHc,10860
177
- modal_proto/sandbox_router_pb2.pyi,sha256=Ihf7LHmh0V5XfMHwYQobZiQ1_3xPoDJgIueyUxC4fMQ,15088
178
+ modal_proto/sandbox_router_pb2.pyi,sha256=9KzzS0-goV3p12hWZrLUHGzZEgrzpa4AazEUOd_xK9g,14899
178
179
  modal_proto/sandbox_router_pb2_grpc.py,sha256=8kPFo84rpRHfeRdZuHyoWuuIAphGmjM0s3ygGJSBVck,10006
179
180
  modal_proto/sandbox_router_pb2_grpc.pyi,sha256=iAr1ornlIEYP7pfrFMrw91-F3PNs7amH6z6J2oCwYxk,3276
180
- modal_proto/task_command_router.proto,sha256=XEA2i3Z8FtouZLSWj2vCZEtsSv2Z_C9XahzfhdWngP0,5020
181
+ modal_proto/task_command_router.proto,sha256=xAVsFyIff6Yvp-PoS3kwyag2G73tBht2KtF4CWKeewI,5000
181
182
  modal_proto/task_command_router_grpc.py,sha256=qxuVUaVwLtCUZGHnYYqUHPvzYepEwt_hXaq2KndPwys,5097
182
- modal_proto/task_command_router_pb2.py,sha256=rD-_XH6aZmkBrMbLWSg1etmP8GxEPLCj7zPm91tc_Nc,10656
183
+ modal_proto/task_command_router_pb2.py,sha256=_pD2ZpU0bNzhwBdzmLoLyLtAtftI_AgxwnowxvQbtvk,10616
183
184
  modal_proto/task_command_router_pb2.pyi,sha256=EyDgXPLr7alqjXYERV8w_MPuO404x0uCppmSkrfE9IE,14589
184
185
  modal_proto/task_command_router_pb2_grpc.py,sha256=uEQ0HdrCp8v-9bB5yIic9muA8spCShLHY6Bz9cCgOUE,10114
185
186
  modal_proto/task_command_router_pb2_grpc.pyi,sha256=s3Yxsrawdj4nr8vqQqsAxyX6ilWaGbdECy425KKbLIA,3301
186
- modal_version/__init__.py,sha256=mQjY4ChsLFR0RC4jJPIQIoOuanZNpOQT9UtVTAuBfcw,115
187
+ modal_version/__init__.py,sha256=JEbPNR-mVhZnUw6SXVucJTC3uu6jIkGL2LTGxkY06nQ,115
187
188
  modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
188
- modal-1.2.0.dist-info/METADATA,sha256=pFkjF-i6nKQQSI4kqi_XZoItOlHkgeeIwQDTZ7Ta0Lk,2475
189
- modal-1.2.0.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
190
- modal-1.2.0.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
191
- modal-1.2.0.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
192
- modal-1.2.0.dist-info/RECORD,,
189
+ modal-1.2.1.dist-info/METADATA,sha256=NTuhgrEbJZT15YlIomLgnC13PY8758Z7ITumqc6Zjdw,2478
190
+ modal-1.2.1.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
191
+ modal-1.2.1.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
192
+ modal-1.2.1.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
193
+ modal-1.2.1.dist-info/RECORD,,
modal_proto/api.proto CHANGED
@@ -2757,20 +2757,6 @@ message SandboxCreateResponse {
2757
2757
  string sandbox_id = 1;
2758
2758
  }
2759
2759
 
2760
- // Used to get a JWT and URL for direct access to a sandbox router server
2761
- // running on the modal-worker, so the client can issue exec commands (and other
2762
- // operations as they become available) directly to the worker.
2763
- // DEPRECATED: Use TaskGetCommandRouterAccessRequest instead.
2764
- // TODO(saltzm): Remove this.
2765
- message SandboxGetCommandRouterAccessRequest {
2766
- string sandbox_id = 1;
2767
- }
2768
-
2769
- message SandboxGetCommandRouterAccessResponse {
2770
- string jwt = 1;
2771
- string url = 2;
2772
- }
2773
-
2774
2760
  message SandboxGetFromNameRequest {
2775
2761
  string sandbox_name = 1;
2776
2762
  string environment_name = 2;
@@ -3157,14 +3143,6 @@ message TaskCurrentInputsResponse {
3157
3143
  repeated string input_ids = 1;
3158
3144
  }
3159
3145
 
3160
- message TaskGetAutoscalingMetricsRequest {
3161
- string task_id = 1;
3162
- }
3163
-
3164
- message TaskGetAutoscalingMetricsResponse {
3165
- AutoscalingMetrics metrics = 1;
3166
- }
3167
-
3168
3146
  // Used to get a JWT and URL for direct access to a task command router
3169
3147
  // running on the modal-worker, so the client can issue exec commands (and other
3170
3148
  // operations as they become available) directly to the worker.
@@ -3565,16 +3543,16 @@ message WebUrlInfo {
3565
3543
  message WebhookConfig {
3566
3544
  WebhookType type = 1;
3567
3545
  string method = 2;
3568
- string requested_suffix = 4;
3546
+ string requested_suffix = 4; // User-supplied "label" component of URL
3569
3547
  WebhookAsyncMode async_mode = 5;
3570
3548
  repeated CustomDomainConfig custom_domains = 6;
3571
3549
  uint32 web_server_port = 7;
3572
3550
  float web_server_startup_timeout = 8;
3573
3551
  bool web_endpoint_docs = 9;
3574
3552
  bool requires_proxy_auth = 10;
3553
+ string ephemeral_suffix = 11; // Additional URL suffix added for ephemeral Apps
3575
3554
  }
3576
3555
 
3577
-
3578
3556
  message WorkspaceBillingReportItem {
3579
3557
  string object_id = 1;
3580
3558
  string description = 2;
@@ -3754,7 +3732,6 @@ service ModalClient {
3754
3732
  // Sandboxes
3755
3733
  rpc SandboxCreate(SandboxCreateRequest) returns (SandboxCreateResponse);
3756
3734
  rpc SandboxCreateConnectToken(SandboxCreateConnectTokenRequest) returns (SandboxCreateConnectTokenResponse);
3757
- rpc SandboxGetCommandRouterAccess(SandboxGetCommandRouterAccessRequest) returns (SandboxGetCommandRouterAccessResponse);
3758
3735
  rpc SandboxGetFromName(SandboxGetFromNameRequest) returns (SandboxGetFromNameResponse);
3759
3736
  rpc SandboxGetLogs(SandboxGetLogsRequest) returns (stream TaskLogsBatch);
3760
3737
  rpc SandboxGetResourceUsage(SandboxGetResourceUsageRequest) returns (SandboxGetResourceUsageResponse);
@@ -3793,7 +3770,6 @@ service ModalClient {
3793
3770
  // Tasks
3794
3771
  rpc TaskClusterHello(TaskClusterHelloRequest) returns (TaskClusterHelloResponse);
3795
3772
  rpc TaskCurrentInputs(google.protobuf.Empty) returns (TaskCurrentInputsResponse);
3796
- rpc TaskGetAutoscalingMetrics(TaskGetAutoscalingMetricsRequest) returns (TaskGetAutoscalingMetricsResponse); // Used for flash autoscaling
3797
3773
  rpc TaskGetCommandRouterAccess(TaskGetCommandRouterAccessRequest) returns (TaskGetCommandRouterAccessResponse);
3798
3774
  rpc TaskList(TaskListRequest) returns (TaskListResponse);
3799
3775
  rpc TaskResult(TaskResultRequest) returns (google.protobuf.Empty);
modal_proto/api_grpc.py CHANGED
@@ -482,10 +482,6 @@ class ModalClientBase(abc.ABC):
482
482
  async def SandboxCreateConnectToken(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxCreateConnectTokenRequest, modal_proto.api_pb2.SandboxCreateConnectTokenResponse]') -> None:
483
483
  pass
484
484
 
485
- @abc.abstractmethod
486
- async def SandboxGetCommandRouterAccess(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxGetCommandRouterAccessRequest, modal_proto.api_pb2.SandboxGetCommandRouterAccessResponse]') -> None:
487
- pass
488
-
489
485
  @abc.abstractmethod
490
486
  async def SandboxGetFromName(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxGetFromNameRequest, modal_proto.api_pb2.SandboxGetFromNameResponse]') -> None:
491
487
  pass
@@ -614,10 +610,6 @@ class ModalClientBase(abc.ABC):
614
610
  async def TaskCurrentInputs(self, stream: 'grpclib.server.Stream[google.protobuf.empty_pb2.Empty, modal_proto.api_pb2.TaskCurrentInputsResponse]') -> None:
615
611
  pass
616
612
 
617
- @abc.abstractmethod
618
- async def TaskGetAutoscalingMetrics(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.TaskGetAutoscalingMetricsRequest, modal_proto.api_pb2.TaskGetAutoscalingMetricsResponse]') -> None:
619
- pass
620
-
621
613
  @abc.abstractmethod
622
614
  async def TaskGetCommandRouterAccess(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.TaskGetCommandRouterAccessRequest, modal_proto.api_pb2.TaskGetCommandRouterAccessResponse]') -> None:
623
615
  pass
@@ -1420,12 +1412,6 @@ class ModalClientBase(abc.ABC):
1420
1412
  modal_proto.api_pb2.SandboxCreateConnectTokenRequest,
1421
1413
  modal_proto.api_pb2.SandboxCreateConnectTokenResponse,
1422
1414
  ),
1423
- '/modal.client.ModalClient/SandboxGetCommandRouterAccess': grpclib.const.Handler(
1424
- self.SandboxGetCommandRouterAccess,
1425
- grpclib.const.Cardinality.UNARY_UNARY,
1426
- modal_proto.api_pb2.SandboxGetCommandRouterAccessRequest,
1427
- modal_proto.api_pb2.SandboxGetCommandRouterAccessResponse,
1428
- ),
1429
1415
  '/modal.client.ModalClient/SandboxGetFromName': grpclib.const.Handler(
1430
1416
  self.SandboxGetFromName,
1431
1417
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -1618,12 +1604,6 @@ class ModalClientBase(abc.ABC):
1618
1604
  google.protobuf.empty_pb2.Empty,
1619
1605
  modal_proto.api_pb2.TaskCurrentInputsResponse,
1620
1606
  ),
1621
- '/modal.client.ModalClient/TaskGetAutoscalingMetrics': grpclib.const.Handler(
1622
- self.TaskGetAutoscalingMetrics,
1623
- grpclib.const.Cardinality.UNARY_UNARY,
1624
- modal_proto.api_pb2.TaskGetAutoscalingMetricsRequest,
1625
- modal_proto.api_pb2.TaskGetAutoscalingMetricsResponse,
1626
- ),
1627
1607
  '/modal.client.ModalClient/TaskGetCommandRouterAccess': grpclib.const.Handler(
1628
1608
  self.TaskGetCommandRouterAccess,
1629
1609
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -2482,12 +2462,6 @@ class ModalClientStub:
2482
2462
  modal_proto.api_pb2.SandboxCreateConnectTokenRequest,
2483
2463
  modal_proto.api_pb2.SandboxCreateConnectTokenResponse,
2484
2464
  )
2485
- self.SandboxGetCommandRouterAccess = grpclib.client.UnaryUnaryMethod(
2486
- channel,
2487
- '/modal.client.ModalClient/SandboxGetCommandRouterAccess',
2488
- modal_proto.api_pb2.SandboxGetCommandRouterAccessRequest,
2489
- modal_proto.api_pb2.SandboxGetCommandRouterAccessResponse,
2490
- )
2491
2465
  self.SandboxGetFromName = grpclib.client.UnaryUnaryMethod(
2492
2466
  channel,
2493
2467
  '/modal.client.ModalClient/SandboxGetFromName',
@@ -2680,12 +2654,6 @@ class ModalClientStub:
2680
2654
  google.protobuf.empty_pb2.Empty,
2681
2655
  modal_proto.api_pb2.TaskCurrentInputsResponse,
2682
2656
  )
2683
- self.TaskGetAutoscalingMetrics = grpclib.client.UnaryUnaryMethod(
2684
- channel,
2685
- '/modal.client.ModalClient/TaskGetAutoscalingMetrics',
2686
- modal_proto.api_pb2.TaskGetAutoscalingMetricsRequest,
2687
- modal_proto.api_pb2.TaskGetAutoscalingMetricsResponse,
2688
- )
2689
2657
  self.TaskGetCommandRouterAccess = grpclib.client.UnaryUnaryMethod(
2690
2658
  channel,
2691
2659
  '/modal.client.ModalClient/TaskGetCommandRouterAccess',