modAL 1.5.1.dev2__py3-none-any.whl → 1.5.1.dev4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
modal/_functions.py CHANGED
@@ -661,6 +661,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
661
661
  min_containers: int | None = None,
662
662
  max_containers: int | None = None,
663
663
  buffer_containers: int | None = None,
664
+ scaleup_window: int | None = None,
664
665
  scaledown_window: int | None = None,
665
666
  max_concurrent_inputs: int | None = None,
666
667
  target_concurrent_inputs: int | None = None,
@@ -766,6 +767,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
766
767
  min_containers=min_containers,
767
768
  max_containers=max_containers,
768
769
  buffer_containers=buffer_containers,
770
+ scaleup_window=scaleup_window,
769
771
  scaledown_window=scaledown_window,
770
772
  )
771
773
 
@@ -1157,6 +1159,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
1157
1159
  min_containers: int | None = None,
1158
1160
  max_containers: int | None = None,
1159
1161
  buffer_containers: int | None = None,
1162
+ scaleup_window: int | None = None,
1160
1163
  scaledown_window: int | None = None,
1161
1164
  target_concurrency: int | None = None,
1162
1165
  ) -> None:
@@ -1164,6 +1167,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
1164
1167
  min_containers=min_containers,
1165
1168
  max_containers=max_containers,
1166
1169
  buffer_containers=buffer_containers,
1170
+ scaleup_window=scaleup_window,
1167
1171
  scaledown_window=scaledown_window,
1168
1172
  target_concurrency=target_concurrency,
1169
1173
  )
modal/_server.py CHANGED
@@ -31,7 +31,10 @@ def validate_http_server_config(
31
31
  raise InvalidError("The `startup_timeout` argument must be positive.")
32
32
  if exit_grace_period is not None and exit_grace_period < 0:
33
33
  raise InvalidError("The `exit_grace_period` argument must be non-negative.")
34
- if not is_server and exit_grace_period is not None and exit_grace_period > 25:
34
+ if is_server:
35
+ if exit_grace_period is not None and exit_grace_period > 3600:
36
+ raise InvalidError("The `exit_grace_period` argument must not exceed 3600 seconds (1 hour).")
37
+ elif exit_grace_period is not None and exit_grace_period > 25:
35
38
  raise InvalidError("The `exit_grace_period` argument must not exceed 25 seconds.")
36
39
 
37
40
  if not proxy_regions or not proxy_regions[0]:
@@ -101,6 +104,7 @@ class _Server:
101
104
  min_containers: int | None = None,
102
105
  max_containers: int | None = None,
103
106
  buffer_containers: int | None = None,
107
+ scaleup_window: int | None = None,
104
108
  scaledown_window: int | None = None,
105
109
  target_concurrency: int | None = None,
106
110
  ) -> None:
@@ -118,6 +122,9 @@ class _Server:
118
122
  # Limit this Server to avoid spinning up more than 5 containers
119
123
  server.update_autoscaler(max_containers=5)
120
124
 
125
+ # Require 30 seconds of sustained demand before scaling up
126
+ server.update_autoscaler(scaleup_window=30)
127
+
121
128
  # Adjust Server autoscaling to target 20 concurrent requests per replica
122
129
  server.update_autoscaler(target_concurrency=20)
123
130
 
@@ -129,6 +136,7 @@ class _Server:
129
136
  return await self._get_service_function()._update_autoscaler(
130
137
  min_containers=min_containers,
131
138
  max_containers=max_containers,
139
+ scaleup_window=scaleup_window,
132
140
  scaledown_window=scaledown_window,
133
141
  buffer_containers=buffer_containers,
134
142
  target_concurrency=target_concurrency,
modal/app.py CHANGED
@@ -1284,6 +1284,7 @@ class _App:
1284
1284
  min_containers: int | None = None, # Minimum number of containers to keep warm
1285
1285
  max_containers: int | None = None, # Maximum number of containers
1286
1286
  buffer_containers: int | None = None, # Additional idle containers under active load
1287
+ scaleup_window: int | None = None, # Stabilization window (seconds) of sustained demand before scaling up
1287
1288
  scaledown_window: int | None = None, # Max idle time before scaling down (seconds)
1288
1289
  proxy: _Proxy | None = None, # Modal Proxy to use in front of this server
1289
1290
  port: int = 8000, # Port the HTTP server listens on
@@ -1326,6 +1327,7 @@ class _App:
1326
1327
  min_containers: Minimum number of containers to keep warm.
1327
1328
  max_containers: Maximum number of containers.
1328
1329
  buffer_containers: Additional idle containers under active load.
1330
+ scaleup_window: Stabilization window (seconds) of sustained demand before scaling up, defaults to 1 second.
1329
1331
  scaledown_window: Max idle time before scaling down (seconds).
1330
1332
  proxy: Modal Proxy to use in front of this server.
1331
1333
  port: Port the HTTP server listens on.
@@ -1371,6 +1373,9 @@ class _App:
1371
1373
  if not isinstance(target_concurrency, int) or target_concurrency < 0:
1372
1374
  raise InvalidError("The `target_concurrency` argument must be a non-negative integer.")
1373
1375
 
1376
+ if scaleup_window is not None and scaleup_window <= 0:
1377
+ raise InvalidError("`scaleup_window` must be > 0")
1378
+
1374
1379
  http_config = api_pb2.HTTPConfig(
1375
1380
  port=port,
1376
1381
  proxy_regions=[routing_region],
@@ -1420,6 +1425,7 @@ class _App:
1420
1425
  min_containers=min_containers,
1421
1426
  max_containers=max_containers,
1422
1427
  buffer_containers=buffer_containers,
1428
+ scaleup_window=scaleup_window,
1423
1429
  scaledown_window=scaledown_window,
1424
1430
  proxy=proxy,
1425
1431
  retries=None, # No support for Server level retries
modal/app.pyi CHANGED
@@ -747,6 +747,7 @@ class _App:
747
747
  min_containers: typing.Optional[int] = None,
748
748
  max_containers: typing.Optional[int] = None,
749
749
  buffer_containers: typing.Optional[int] = None,
750
+ scaleup_window: typing.Optional[int] = None,
750
751
  scaledown_window: typing.Optional[int] = None,
751
752
  proxy: typing.Optional[modal.proxy._Proxy] = None,
752
753
  port: int = 8000,
@@ -789,6 +790,7 @@ class _App:
789
790
  min_containers: Minimum number of containers to keep warm.
790
791
  max_containers: Maximum number of containers.
791
792
  buffer_containers: Additional idle containers under active load.
793
+ scaleup_window: Stabilization window (seconds) of sustained demand before scaling up, defaults to 1 second.
792
794
  scaledown_window: Max idle time before scaling down (seconds).
793
795
  proxy: Modal Proxy to use in front of this server.
794
796
  port: Port the HTTP server listens on.
@@ -1745,6 +1747,7 @@ class App:
1745
1747
  min_containers: typing.Optional[int] = None,
1746
1748
  max_containers: typing.Optional[int] = None,
1747
1749
  buffer_containers: typing.Optional[int] = None,
1750
+ scaleup_window: typing.Optional[int] = None,
1748
1751
  scaledown_window: typing.Optional[int] = None,
1749
1752
  proxy: typing.Optional[modal.proxy.Proxy] = None,
1750
1753
  port: int = 8000,
@@ -1785,6 +1788,7 @@ class App:
1785
1788
  min_containers: Minimum number of containers to keep warm.
1786
1789
  max_containers: Maximum number of containers.
1787
1790
  buffer_containers: Additional idle containers under active load.
1791
+ scaleup_window: Stabilization window (seconds) of sustained demand before scaling up, defaults to 1 second.
1788
1792
  scaledown_window: Max idle time before scaling down (seconds).
1789
1793
  proxy: Modal Proxy to use in front of this server.
1790
1794
  port: Port the HTTP server listens on.
modal/client.pyi CHANGED
@@ -35,7 +35,7 @@ class _Client:
35
35
  server_url: str,
36
36
  client_type: int,
37
37
  credentials: typing.Optional[tuple[str, str]],
38
- version: str = "1.5.1.dev2",
38
+ version: str = "1.5.1.dev4",
39
39
  ):
40
40
  """mdmd:hidden
41
41
  The Modal client object is not intended to be instantiated directly by users.
@@ -205,7 +205,7 @@ class Client:
205
205
  server_url: str,
206
206
  client_type: int,
207
207
  credentials: typing.Optional[tuple[str, str]],
208
- version: str = "1.5.1.dev2",
208
+ version: str = "1.5.1.dev4",
209
209
  ):
210
210
  """mdmd:hidden
211
211
  The Modal client object is not intended to be instantiated directly by users.
modal/functions.pyi CHANGED
@@ -90,6 +90,7 @@ class Function(
90
90
  min_containers: typing.Optional[int] = None,
91
91
  max_containers: typing.Optional[int] = None,
92
92
  buffer_containers: typing.Optional[int] = None,
93
+ scaleup_window: typing.Optional[int] = None,
93
94
  scaledown_window: typing.Optional[int] = None,
94
95
  max_concurrent_inputs: typing.Optional[int] = None,
95
96
  target_concurrent_inputs: typing.Optional[int] = None,
@@ -129,6 +130,7 @@ class Function(
129
130
  min_containers: typing.Optional[int] = None,
130
131
  max_containers: typing.Optional[int] = None,
131
132
  buffer_containers: typing.Optional[int] = None,
133
+ scaleup_window: typing.Optional[int] = None,
132
134
  scaledown_window: typing.Optional[int] = None,
133
135
  target_concurrency: typing.Optional[int] = None,
134
136
  ) -> None: ...
@@ -139,6 +141,7 @@ class Function(
139
141
  min_containers: typing.Optional[int] = None,
140
142
  max_containers: typing.Optional[int] = None,
141
143
  buffer_containers: typing.Optional[int] = None,
144
+ scaleup_window: typing.Optional[int] = None,
142
145
  scaledown_window: typing.Optional[int] = None,
143
146
  target_concurrency: typing.Optional[int] = None,
144
147
  ) -> None: ...
modal/server.pyi CHANGED
@@ -52,6 +52,7 @@ class Server:
52
52
  min_containers: typing.Optional[int] = None,
53
53
  max_containers: typing.Optional[int] = None,
54
54
  buffer_containers: typing.Optional[int] = None,
55
+ scaleup_window: typing.Optional[int] = None,
55
56
  scaledown_window: typing.Optional[int] = None,
56
57
  target_concurrency: typing.Optional[int] = None,
57
58
  ) -> None:
@@ -69,6 +70,9 @@ class Server:
69
70
  # Limit this Server to avoid spinning up more than 5 containers
70
71
  server.update_autoscaler(max_containers=5)
71
72
 
73
+ # Require 30 seconds of sustained demand before scaling up
74
+ server.update_autoscaler(scaleup_window=30)
75
+
72
76
  # Adjust Server autoscaling to target 20 concurrent requests per replica
73
77
  server.update_autoscaler(target_concurrency=20)
74
78
 
@@ -85,6 +89,7 @@ class Server:
85
89
  min_containers: typing.Optional[int] = None,
86
90
  max_containers: typing.Optional[int] = None,
87
91
  buffer_containers: typing.Optional[int] = None,
92
+ scaleup_window: typing.Optional[int] = None,
88
93
  scaledown_window: typing.Optional[int] = None,
89
94
  target_concurrency: typing.Optional[int] = None,
90
95
  ) -> None:
@@ -102,6 +107,9 @@ class Server:
102
107
  # Limit this Server to avoid spinning up more than 5 containers
103
108
  server.update_autoscaler(max_containers=5)
104
109
 
110
+ # Require 30 seconds of sustained demand before scaling up
111
+ server.update_autoscaler(scaleup_window=30)
112
+
105
113
  # Adjust Server autoscaling to target 20 concurrent requests per replica
106
114
  server.update_autoscaler(target_concurrency=20)
107
115
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.5.1.dev2
3
+ Version: 1.5.1.dev4
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -6,7 +6,7 @@ modal/_clustered_functions.pyi,sha256=akbff8aXkp5aJapn72YMXPnzeYa6OFAfuakcy7Jx6w
6
6
  modal/_container_entrypoint.py,sha256=RoO9tnQVsUfzuqi0QzDkYKt-1YR3qlqEUok_jGhXw2s,22822
7
7
  modal/_environments.py,sha256=KtEyhgc33wWt3c3fuhzcW7kNGhdLITQID2k1tnAw_QI,17527
8
8
  modal/_function_variants.py,sha256=Oa1hwNGLmZrnKlp5u9jTbouOm9zlVaz5OmwxVe18d0o,12377
9
- modal/_functions.py,sha256=j42KRefj5veuECZtesg0hBa7913NJIoLtfvNiYy5YlI,94076
9
+ modal/_functions.py,sha256=ROecg729SZTf2bOuDCh4QUHG4G-wE8NJzJ66Xm7--us,94248
10
10
  modal/_grpc_client.py,sha256=7PPZIF68MaIKxOTqjCysSpPmjIGCJl5kzudrMK-Eqpg,6895
11
11
  modal/_image.py,sha256=LeE8d9KT2mSMafsASNgwFMxzRWMj15T5hpGKtfkqH3Q,126305
12
12
  modal/_ipython.py,sha256=Bu9fc3hm3xt2O47qLe_d-Mu2jS81LwMsmXNJ1sawBA0,575
@@ -18,19 +18,19 @@ modal/_partial_function.py,sha256=b5_3VdbAiafVMOXPNFSN9gnW1BKUHqqq_1JVxVcuLIk,34
18
18
  modal/_resolver.py,sha256=LLDM_84aaJfBdgMZ_50CpXJtQzTw5CNRkbLDOiLZEZ0,5309
19
19
  modal/_resources.py,sha256=IS6y7CulfLCjESrpdxFGZr23d5iRCLw6-YQVlE3mKQk,1731
20
20
  modal/_serialization.py,sha256=G07UlvH0SPU62twuwgx8MjD49zFX3te-Mg8bwNYfiEU,26594
21
- modal/_server.py,sha256=5su81mrzCowdc9wgv7L2jyx5QLp_cAx6ZJNbsUFW6J8,10675
21
+ modal/_server.py,sha256=lyqnmwE2rhsn_Z-dICeNA0KGrtOnULf8ytZEKmPGVuQ,11068
22
22
  modal/_traceback.py,sha256=472sH68_BsZGRsHW2vikIrmvaU1nT2TYkVvsuIYj_9Q,6231
23
23
  modal/_tunnel.py,sha256=iqx11Okxz052dpejoJYcofXEkSB6u1kPFw5DaGFjS2Q,7351
24
24
  modal/_tunnel.pyi,sha256=WVP0dkoN__mM73ZQ-r3nHKCXvYlRMmEWW8iw2xrSY6M,14698
25
25
  modal/_type_manager.py,sha256=DWjgmjYJuOagw2erin506UUbG2H5UzZCFEekS-7hmfA,9087
26
26
  modal/_watcher.py,sha256=f9kOdHga0TZ6Z6wL7h2O67sz3Oj8pDzjfoAYrNE2hik,3505
27
27
  modal/_workspace.py,sha256=plUkRCHSYj4mfnw3dGtAeSgDHmiyg31vh7Ggw5vodIM,3783
28
- modal/app.py,sha256=gLvYXc8R9CSjys8BoNLFJn0DiPQMeNOdEDqxv31gsFA,69880
29
- modal/app.pyi,sha256=Gpxdq9GpLDJVr4WkCrQKNJwhAlmlOAYLzYLbD-fv_c8,84095
28
+ modal/app.py,sha256=u93PJAPoLY_ZyQeChaanDJsv1A58zWUb5d687WZacw8,70289
29
+ modal/app.pyi,sha256=c-9DIsg5fxLwPjvPeFQp47rRAGswzIF6dEM4A7Y4rtI,84441
30
30
  modal/billing.py,sha256=V2WA_TAp8T3eEe5nE1nqXs9PL-CG-HhNpdr18IzsSMk,304
31
31
  modal/call_graph.py,sha256=k_wH3DuuUHCeuycHsOqlcOpIlIVbCYi9RPobg21hJdI,2550
32
32
  modal/client.py,sha256=KaAbJuglWWm_xR-WMGCPVTXDR56xdzenP9Q1b8Ynry0,16132
33
- modal/client.pyi,sha256=AlpOC4B3w0utCOi1VGf5fliAlZ-kx2ax2tSLqOrBWAQ,17852
33
+ modal/client.pyi,sha256=ZR0Mj4ahMXHiFGGbPhlGfGZY6X0N4yIssHHbxQm9hmk,17852
34
34
  modal/cloud_bucket_mount.py,sha256=03gECcV9l2Lnt9k23YrDOTGFW7ajfXMW5O8b1prhtwQ,6254
35
35
  modal/cloud_bucket_mount.pyi,sha256=lMOb44pbNE9kDVEqWfcmvpsnh1sdNNFzuKoVyZZ3d5M,8058
36
36
  modal/cls.py,sha256=wmtUfe0ewkIGK1AhyAnQ9IHTe6XJqcFvL8tCnfIjzZs,40928
@@ -47,7 +47,7 @@ modal/file_io.py,sha256=kfojtm0euzOMhfkVTAGyfuygDJ1XPPHQa5uUhkCsThg,21800
47
47
  modal/file_io.pyi,sha256=Tr0OtfbkTNa8v1dkGtl8l3RH58pMc9uGTYKxL1jNwho,15422
48
48
  modal/file_pattern_matcher.py,sha256=6g_awxudMy_ontBvkznybyeNnwGMj297YrmIHCbREI0,8132
49
49
  modal/functions.py,sha256=EZRcHFfnoYbvawUJnAHF5nIvoo9GX2Djy7mUmOCXmXc,258
50
- modal/functions.pyi,sha256=eRhBNSKxpLCysUPhgx0Mw060qY4SWlOwAWjfr1awSmo,47538
50
+ modal/functions.pyi,sha256=zvM0YWzbLWcUb2MsQjyp_XRrmKgEAJbsF8A858yaUeQ,47705
51
51
  modal/image.py,sha256=c0lUSAoU-Ip3g5DGZ0uhdCzoWSQWh1g0i-7Rxo-Sz-I,160
52
52
  modal/image.pyi,sha256=Whbfmda2YLAyzctLEF9uF4FQ5b1canwLojSksRJ4gx8,59716
53
53
  modal/io_streams.py,sha256=3fhhb7SDJ69pVUu9J3PiMLBePD9bpiIxPN05SCzf8FE,29118
@@ -81,7 +81,7 @@ modal/scheduler_placement.py,sha256=S2-MZQcWCt6NVwIWXUP11KsKZeRDQViJLlOngGUvjkM,
81
81
  modal/secret.py,sha256=ueDG3vjdZI8AZSz0zV6CfeIcSGa5K28Sr2nuImZuezY,19576
82
82
  modal/secret.pyi,sha256=TuAxoDETaPASI_Pv7qHJCVRuEuVlG54JvbDrv_111MQ,27293
83
83
  modal/server.py,sha256=zWoDdtwCEKsKbFfWC4l7-NkpnJJybweC284VIoCavrI,164
84
- modal/server.pyi,sha256=rs0uFXtNdNGgV0es8nNU7JrXPUvkP5aVqNhI2PLHBt8,6029
84
+ modal/server.pyi,sha256=N6UCe9OOCdaRTv1o62KOt2i2WFSPVhQoQDpni8pz8RU,6415
85
85
  modal/serving.py,sha256=3nAFUMwFpr5WMHavJYloEF-QTr-7XzXTRb5kagp2nrg,4815
86
86
  modal/serving.pyi,sha256=nKgt3i2X93NpAAZzIpbj4fiR1TIJxSXnK659w4UD2sE,3962
87
87
  modal/snapshot.py,sha256=FWtxkChzIn2GBb6xRfpgf0Yx6uzsrDWPkepXxP5fcc0,2545
@@ -187,7 +187,7 @@ modal/experimental/flash.py,sha256=GAJ1c-EGL8M3_loAkqr5gdUfySMHY3U_oc6RywfZ8-0,3
187
187
  modal/experimental/flash.pyi,sha256=lpTqJFZRMGWscw0xpYZVdBMnAYjj16asXE4_64A6itQ,17774
188
188
  modal/experimental/ipython.py,sha256=kJ6o9wkAY_MiSb7paewI7f1MJAeqdi8TX5pBdhr_mUI,2925
189
189
  modal/skills/modal/SKILL.md,sha256=WzLjYJ1utjc_ZOf6qZTPwB6wxxwRYB5PibdvIf_FLy0,5316
190
- modal-1.5.1.dev2.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
190
+ modal-1.5.1.dev4.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
191
191
  modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
192
192
  modal_docs/gen_cli_docs.py,sha256=zonWwnDnEIIk4sSF05TcXAlVSvji6GDwD2GHUIiw4OM,4028
193
193
  modal_docs/gen_cli_docs_main.py,sha256=UPGr7O1DYTIRLwfINe2rbdh89J3cPVTU1OWL-SjxnOQ,198
@@ -199,21 +199,21 @@ modal_docs/mdmd/signatures.py,sha256=Xx1FF6oND90MfbHJ24E9rej_GjmEGOAaOp6oJpkv1Os
199
199
  modal_docs/mdmd/types.py,sha256=UjPSjVmdiys9244vJ0DMDJcM9LrWWmI3alW98Ugy8tU,682
200
200
  modal_proto/__init__.py,sha256=tFdSv9eaHBvYcwhgq-XqIlYDNDw57clrvO91Fb-oUV4,130
201
201
  modal_proto/api_grpc.py,sha256=env5Fqnd7ytgy9rVS-z7UMjVMYzevAorG3KciZMhwbk,159206
202
- modal_proto/api_pb2.py,sha256=qBnsHf4zit-I9SB0r8aDlpeY1VkvxU83sYKk06DfBiE,448123
203
- modal_proto/api_pb2.pyi,sha256=L1xQ4G0e5zD_U3K4ffXBabCvxWAlS975Aa48FlcOFLE,628972
202
+ modal_proto/api_pb2.py,sha256=62vWJFV3kUsNSUDa3a8mJpmV2m2j_MVvQk0mBCRfYrI,449356
203
+ modal_proto/api_pb2.pyi,sha256=W-vkPzbKKkUnToq_LAVDrMx_-UxowqgTbZbV9ePwXzY,630946
204
204
  modal_proto/api_pb2_grpc.py,sha256=Em6AikDEJpG7NsiT8W6UuvChh0iQC_hUlUKZaQwG2W4,343011
205
205
  modal_proto/api_pb2_grpc.pyi,sha256=q9HRTgRpsXDw4OqIAI-gJT49R_5HQPwbIEhUeZCoscY,80036
206
206
  modal_proto/modal_api_grpc.py,sha256=I5gV8p3cLHIrus75XgQ7cJyO3wbmCwkjmr1StDK_TPk,25093
207
207
  modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
208
- modal_proto/task_command_router_grpc.py,sha256=HKhH6PK8onYUstR0V4rr0mRWg_jZAdkuCC9IODn2Yi4,18417
209
- modal_proto/task_command_router_pb2.py,sha256=P3ioP8E_Gp652Vs0Bj6uouDym_Iq2JDnOaHFYlDsPVA,35705
210
- modal_proto/task_command_router_pb2.pyi,sha256=fsozH4A4nms0IczwvCWv0x3biZqeoEesCSNOUmOl1Vw,41226
211
- modal_proto/task_command_router_pb2_grpc.py,sha256=uOLc2XOBGC3UtrPvHWuDNW31xeLt7y-xg5KgXkzQiGU,36562
212
- modal_proto/task_command_router_pb2_grpc.pyi,sha256=Snz-_-rJoanErpYH9cUzUE0r5mtQbqvk5IJdRixDUrc,11709
213
- modal_version/__init__.py,sha256=epUSjLvJM1tTN3JnkhUoKYAJS_xCltZPj_wlmnl7kNI,120
208
+ modal_proto/task_command_router_grpc.py,sha256=JK1yBSjqSfbHVpyDPomRQ0OkG-44tscr11bKBMu8Lnk,18435
209
+ modal_proto/task_command_router_pb2.py,sha256=xYb8HEkfPiNHmwUdtiUrnf2awWqXTKp9b4NhBwdx--c,35836
210
+ modal_proto/task_command_router_pb2.pyi,sha256=vRuauFV_LF-2fl3ZJsjo9UsTHB06gRJObomLRz1Ko00,41617
211
+ modal_proto/task_command_router_pb2_grpc.py,sha256=mBHw6VvZ2x9PBZJc29R5Nlge-bmK6zP-sEdG73OJVjk,36580
212
+ modal_proto/task_command_router_pb2_grpc.pyi,sha256=DQfjLizCu_NBxX5BBu0_MDRUnCuwJuOlLpK4Q8OjM9Y,11721
213
+ modal_version/__init__.py,sha256=GdrINmEHbnRJiCZFsHTamMz27YdQzf-P_fGmmrn1_Z8,120
214
214
  modal_version/__main__.py,sha256=nLUbubxKx7GXNzJIkTB7M7_u8080LyLM0IS0rzFkC_c,119
215
- modal-1.5.1.dev2.dist-info/METADATA,sha256=PT4ede3tSzAD6QhIqyLLvlCt9xk4GqobQDNkktGLdVc,2338
216
- modal-1.5.1.dev2.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
217
- modal-1.5.1.dev2.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
218
- modal-1.5.1.dev2.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
219
- modal-1.5.1.dev2.dist-info/RECORD,,
215
+ modal-1.5.1.dev4.dist-info/METADATA,sha256=34w2Xc8m1nej4T_huzsvi74KW98WhTRMl3iwfR_SuWA,2338
216
+ modal-1.5.1.dev4.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
217
+ modal-1.5.1.dev4.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
218
+ modal-1.5.1.dev4.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
219
+ modal-1.5.1.dev4.dist-info/RECORD,,