modAL 1.4.3.dev7__py3-none-any.whl → 1.4.3.dev8__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/cli/cluster.py CHANGED
@@ -1,4 +1,5 @@
1
1
  # Copyright Modal Labs 2022
2
+ import uuid
2
3
  from typing import Optional, Union
3
4
 
4
5
  import click
@@ -8,15 +9,17 @@ from rich.text import Text
8
9
  from modal._object import _get_environment_name
9
10
  from modal._output.pty import get_pty_info
10
11
  from modal._utils.async_utils import synchronizer
12
+ from modal._utils.task_command_router_client import TaskCommandRouterClient
11
13
  from modal._utils.time_utils import timestamp_to_localized_str
12
14
  from modal.cli.utils import display_table, env_option, is_tty
13
15
  from modal.client import _Client
14
16
  from modal.config import config
15
17
  from modal.container_process import _ContainerProcess
16
18
  from modal.environments import ensure_env
19
+ from modal.exception import InvalidError
17
20
  from modal.output import OutputManager
18
21
  from modal.stream_type import StreamType
19
- from modal_proto import api_pb2
22
+ from modal_proto import api_pb2, task_command_router_pb2 as sr_pb2
20
23
 
21
24
  from ._help import ModalGroup
22
25
 
@@ -75,17 +78,32 @@ async def shell(cluster_id: str, rank: int = 0):
75
78
  )
76
79
 
77
80
  pty = is_tty()
78
- req = api_pb2.ContainerExecRequest(
81
+
82
+ command_router_client = await TaskCommandRouterClient.try_init(client, task_id)
83
+ if command_router_client is None:
84
+ raise InvalidError(f"Command router access is not available for container {task_id}")
85
+
86
+ process_id = str(uuid.uuid4())
87
+
88
+ start_req = sr_pb2.TaskExecStartRequest(
79
89
  task_id=task_id,
80
- command=["/bin/bash"],
90
+ exec_id=process_id,
91
+ command_args=["/bin/bash"],
92
+ stdout_config=sr_pb2.TaskExecStdoutConfig.TASK_EXEC_STDOUT_CONFIG_PIPE,
93
+ stderr_config=sr_pb2.TaskExecStderrConfig.TASK_EXEC_STDERR_CONFIG_PIPE,
81
94
  pty_info=get_pty_info(shell=True) if pty else None,
82
95
  runtime_debug=config.get("function_runtime_debug"),
83
96
  )
84
- exec_res: api_pb2.ContainerExecResponse = await client.stub.ContainerExec(req)
97
+ await command_router_client.exec_start(start_req)
98
+
85
99
  if pty:
86
- await _ContainerProcess(exec_res.exec_id, task_id, client).attach()
100
+ await _ContainerProcess(process_id, task_id, client, command_router_client=command_router_client).attach()
87
101
  else:
88
- # TODO: redirect stderr to its own stream?
89
102
  await _ContainerProcess(
90
- exec_res.exec_id, task_id, client, stdout=StreamType.STDOUT, stderr=StreamType.STDOUT
103
+ process_id,
104
+ task_id,
105
+ client,
106
+ command_router_client=command_router_client,
107
+ stdout=StreamType.STDOUT,
108
+ stderr=StreamType.STDOUT,
91
109
  ).wait()
modal/cli/container.py CHANGED
@@ -1,4 +1,5 @@
1
1
  # Copyright Modal Labs 2022
2
+ import uuid
2
3
  import warnings
3
4
  from datetime import datetime, timezone
4
5
  from typing import Optional, Union
@@ -12,6 +13,7 @@ from modal._logs import _FETCH_LIMIT, _MAX_FETCH_RANGE, LogsFilters
12
13
  from modal._object import _get_environment_name
13
14
  from modal._output.pty import get_pty_info
14
15
  from modal._utils.async_utils import synchronizer
16
+ from modal._utils.task_command_router_client import TaskCommandRouterClient
15
17
  from modal._utils.time_utils import timestamp_to_localized_str
16
18
  from modal.cli.app import _DEFAULT_LOGS_TAIL, _SOURCE_OPTIONS, _parse_time_arg
17
19
  from modal.cli.utils import (
@@ -30,7 +32,7 @@ from modal.container_process import _ContainerProcess
30
32
  from modal.environments import ensure_env
31
33
  from modal.exception import InvalidError
32
34
  from modal.stream_type import StreamType
33
- from modal_proto import api_pb2
35
+ from modal_proto import api_pb2, task_command_router_pb2 as sr_pb2
34
36
 
35
37
  from ._help import ModalGroup
36
38
 
@@ -276,20 +278,33 @@ async def _exec_impl(
276
278
 
277
279
  client = await _Client.from_env()
278
280
 
279
- req = api_pb2.ContainerExecRequest(
281
+ command_router_client = await TaskCommandRouterClient.try_init(client, container_id)
282
+ if command_router_client is None:
283
+ raise InvalidError(f"Command router access is not available for container {container_id}")
284
+
285
+ process_id = str(uuid.uuid4())
286
+
287
+ start_req = sr_pb2.TaskExecStartRequest(
280
288
  task_id=container_id,
281
- command=command,
289
+ exec_id=process_id,
290
+ command_args=command,
291
+ stdout_config=sr_pb2.TaskExecStdoutConfig.TASK_EXEC_STDOUT_CONFIG_PIPE,
292
+ stderr_config=sr_pb2.TaskExecStderrConfig.TASK_EXEC_STDERR_CONFIG_PIPE,
282
293
  pty_info=get_pty_info(shell=True) if pty else None,
283
294
  runtime_debug=config.get("function_runtime_debug"),
284
295
  )
285
- res: api_pb2.ContainerExecResponse = await client.stub.ContainerExec(req)
296
+ await command_router_client.exec_start(start_req)
286
297
 
287
298
  if pty:
288
- await _ContainerProcess(res.exec_id, container_id, client).attach()
299
+ await _ContainerProcess(process_id, container_id, client, command_router_client=command_router_client).attach()
289
300
  else:
290
- # TODO: redirect stderr to its own stream?
291
301
  await _ContainerProcess(
292
- res.exec_id, container_id, client, stdout=StreamType.STDOUT, stderr=StreamType.STDOUT
302
+ process_id,
303
+ container_id,
304
+ client,
305
+ command_router_client=command_router_client,
306
+ stdout=StreamType.STDOUT,
307
+ stderr=StreamType.STDOUT,
293
308
  ).wait()
294
309
 
295
310
 
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.4.3.dev7",
38
+ version: str = "1.4.3.dev8",
39
39
  ):
40
40
  """mdmd:hidden
41
41
  The Modal client object is not intended to be instantiated directly by users.
@@ -175,7 +175,7 @@ class Client:
175
175
  server_url: str,
176
176
  client_type: int,
177
177
  credentials: typing.Optional[tuple[str, str]],
178
- version: str = "1.4.3.dev7",
178
+ version: str = "1.4.3.dev8",
179
179
  ):
180
180
  """mdmd:hidden
181
181
  The Modal client object is not intended to be instantiated directly by users.
modal/functions.pyi CHANGED
@@ -347,7 +347,7 @@ class Function(
347
347
 
348
348
  _call_generator: ___call_generator_spec
349
349
 
350
- class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
350
+ class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
351
351
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
352
352
  """Calls the function remotely, executing it with the given arguments and returning the execution's result."""
353
353
  ...
@@ -356,7 +356,7 @@ class Function(
356
356
  """Calls the function remotely, executing it with the given arguments and returning the execution's result."""
357
357
  ...
358
358
 
359
- remote: __remote_spec[modal._functions.P, modal._functions.ReturnType]
359
+ remote: __remote_spec[modal._functions.ReturnType, modal._functions.P]
360
360
 
361
361
  class __remote_gen_spec(typing_extensions.Protocol):
362
362
  def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
@@ -383,7 +383,7 @@ class Function(
383
383
  """
384
384
  ...
385
385
 
386
- class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
386
+ class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
387
387
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
388
388
  """[Experimental] Calls the function with the given arguments, without waiting for the results.
389
389
 
@@ -406,7 +406,7 @@ class Function(
406
406
  """
407
407
  ...
408
408
 
409
- _experimental_spawn: ___experimental_spawn_spec[modal._functions.P, modal._functions.ReturnType]
409
+ _experimental_spawn: ___experimental_spawn_spec[modal._functions.ReturnType, modal._functions.P]
410
410
 
411
411
  class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER]):
412
412
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> None: ...
@@ -414,7 +414,7 @@ class Function(
414
414
 
415
415
  _spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P]
416
416
 
417
- class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
417
+ class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
418
418
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
419
419
  """Calls the function with the given arguments, without waiting for the results.
420
420
 
@@ -435,7 +435,7 @@ class Function(
435
435
  """
436
436
  ...
437
437
 
438
- spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType]
438
+ spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P]
439
439
 
440
440
  def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
441
441
  """Return the inner Python object wrapped by this Modal Function."""
modal/sandbox.py CHANGED
@@ -628,6 +628,7 @@ class _Sandbox(_Object, type_prefix="sb"):
628
628
  idle_timeout: Optional[int] = None,
629
629
  workdir: Optional[str] = None,
630
630
  cpu: Optional[float] = None,
631
+ memory: Optional[int] = None,
631
632
  cloud: Optional[str] = None,
632
633
  region: Optional[Union[str, Sequence[str]]] = None,
633
634
  block_network: bool = False,
@@ -642,7 +643,6 @@ class _Sandbox(_Object, type_prefix="sb"):
642
643
  ) -> "_Sandbox":
643
644
  """Create a sandbox using the V2 backend.
644
645
 
645
- Only CPU is configurable; memory is derived as a fixed ratio of CPU.
646
646
  Features like tags, snapshots, exec, volumes, network file systems,
647
647
  GPUs, custom domains, and proxies are not supported.
648
648
  """
@@ -714,7 +714,7 @@ class _Sandbox(_Object, type_prefix="sb"):
714
714
  timeout_secs=timeout,
715
715
  idle_timeout_secs=idle_timeout,
716
716
  workdir=workdir,
717
- resources=convert_fn_config_to_resources_config(cpu=cpu, memory=0, gpu=None, ephemeral_disk=None),
717
+ resources=convert_fn_config_to_resources_config(cpu=cpu, memory=memory, gpu=None, ephemeral_disk=None),
718
718
  cloud_provider_str=cloud if cloud else None,
719
719
  runtime=config.get("function_runtime"),
720
720
  runtime_debug=config.get("function_runtime_debug"),
modal/sandbox.pyi CHANGED
@@ -304,6 +304,7 @@ class _Sandbox(modal._object._Object):
304
304
  idle_timeout: typing.Optional[int] = None,
305
305
  workdir: typing.Optional[str] = None,
306
306
  cpu: typing.Optional[float] = None,
307
+ memory: typing.Optional[int] = None,
307
308
  cloud: typing.Optional[str] = None,
308
309
  region: typing.Union[str, collections.abc.Sequence[str], None] = None,
309
310
  block_network: bool = False,
@@ -318,7 +319,6 @@ class _Sandbox(modal._object._Object):
318
319
  ) -> _Sandbox:
319
320
  """Create a sandbox using the V2 backend.
320
321
 
321
- Only CPU is configurable; memory is derived as a fixed ratio of CPU.
322
322
  Features like tags, snapshots, exec, volumes, network file systems,
323
323
  GPUs, custom domains, and proxies are not supported.
324
324
  """
@@ -1190,6 +1190,7 @@ class Sandbox(modal.object.Object):
1190
1190
  idle_timeout: typing.Optional[int] = None,
1191
1191
  workdir: typing.Optional[str] = None,
1192
1192
  cpu: typing.Optional[float] = None,
1193
+ memory: typing.Optional[int] = None,
1193
1194
  cloud: typing.Optional[str] = None,
1194
1195
  region: typing.Union[str, collections.abc.Sequence[str], None] = None,
1195
1196
  block_network: bool = False,
@@ -1204,7 +1205,6 @@ class Sandbox(modal.object.Object):
1204
1205
  ) -> Sandbox:
1205
1206
  """Create a sandbox using the V2 backend.
1206
1207
 
1207
- Only CPU is configurable; memory is derived as a fixed ratio of CPU.
1208
1208
  Features like tags, snapshots, exec, volumes, network file systems,
1209
1209
  GPUs, custom domains, and proxies are not supported.
1210
1210
  """
@@ -1223,6 +1223,7 @@ class Sandbox(modal.object.Object):
1223
1223
  idle_timeout: typing.Optional[int] = None,
1224
1224
  workdir: typing.Optional[str] = None,
1225
1225
  cpu: typing.Optional[float] = None,
1226
+ memory: typing.Optional[int] = None,
1226
1227
  cloud: typing.Optional[str] = None,
1227
1228
  region: typing.Union[str, collections.abc.Sequence[str], None] = None,
1228
1229
  block_network: bool = False,
@@ -1237,7 +1238,6 @@ class Sandbox(modal.object.Object):
1237
1238
  ) -> Sandbox:
1238
1239
  """Create a sandbox using the V2 backend.
1239
1240
 
1240
- Only CPU is configurable; memory is derived as a fixed ratio of CPU.
1241
1241
  Features like tags, snapshots, exec, volumes, network file systems,
1242
1242
  GPUs, custom domains, and proxies are not supported.
1243
1243
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.4.3.dev7
3
+ Version: 1.4.3.dev8
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License-Expression: Apache-2.0
@@ -26,7 +26,7 @@ modal/app.pyi,sha256=mysbOCD6OjZi938NeMY40RpdpQbnI43Bb4s5P79x5OQ,53773
26
26
  modal/billing.py,sha256=B2zXa7KeMnpqi2AQINycEk-KSXVYaLTTTAQTtuf2Gfs,257
27
27
  modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
28
28
  modal/client.py,sha256=jjT4eLFHGcvIF6Xw4kPptIx-VmExtphRN8XJ1JA7fWI,15502
29
- modal/client.pyi,sha256=TuZfFnS_-XxtHnhR7ZtOGru-1nIAUPwX-C8qQBZ2hHE,15701
29
+ modal/client.pyi,sha256=xx85z1MlGyiGvYhlGkJ-ypngp-jblaCKIaUVJ5TZ31c,15701
30
30
  modal/cloud_bucket_mount.py,sha256=KkaJVy5vpO_u2NtDYtv1JM-M3y4J0UtWBapTDKpQRcA,6034
31
31
  modal/cloud_bucket_mount.pyi,sha256=mGDeEd1XvxGpCE6O5jRBSfIvMXvZ5AtIybea5k-0w9w,7560
32
32
  modal/cls.py,sha256=Yrl5b_tQhZMhc5avInM-i5UlGuqeog6Gs4rX2d9lLjI,40390
@@ -43,7 +43,7 @@ modal/file_io.py,sha256=45gO6ScEPKrE-KTQ619RwejaqoHUregwMgKcVktfoAk,22275
43
43
  modal/file_io.pyi,sha256=DPaq0BhySaiCX3g56QHhyIMdU1izbfWsjpSp30JoJUU,15745
44
44
  modal/file_pattern_matcher.py,sha256=A_Kdkej6q7YQyhM_2-BvpFmPqJ0oHb54B6yf9VqvPVE,8116
45
45
  modal/functions.py,sha256=EZRcHFfnoYbvawUJnAHF5nIvoo9GX2Djy7mUmOCXmXc,258
46
- modal/functions.pyi,sha256=m2uNU9DMi9LWprk9PJykCM1Zs_oEG2-Vl2FaJMGSNpY,34255
46
+ modal/functions.pyi,sha256=_sZ27MFClkElRg0iyVXmn9pGXwm9F-r49sHjrYhH4Sg,34255
47
47
  modal/image.py,sha256=EHdzQMPBXtbwHBajZJAC-uLCypF-DoNbB0vMWVfaZ5c,112579
48
48
  modal/image.pyi,sha256=zYiJsc5tEhGev_rT9R3cGpyQJf-Hm08OJl37sV4E_fk,79377
49
49
  modal/io_streams.py,sha256=JcYbvvjMZFugv53yHc9Id0N4nIvDMwV63ZtnN1bPmZc,30940
@@ -68,8 +68,8 @@ modal/retries.py,sha256=vPWWKP-FRolJwTBuLPXdWqHV7aJfSQFgEW7vhlBBXRQ,5067
68
68
  modal/runner.py,sha256=yIB1PE5EGdvLWPPymyT4P0KYliREnFf-MAtULl3tVN0,30062
69
69
  modal/runner.pyi,sha256=ySefjmlMQ5FsvJgJkCWiUZKvcPNfEqdB5hwxI1fGtDo,9445
70
70
  modal/running_app.py,sha256=v61mapYNV1-O-Uaho5EfJlryMLvIT9We0amUOSvSGx8,1188
71
- modal/sandbox.py,sha256=ilVVQoCW4T_Ow5GQ-khqBdU1DSZuf2uqpg73myLpyMw,83656
72
- modal/sandbox.pyi,sha256=0rLb_VT1ALXcbrNUFlUhC0Z6pkh_-H6il8Layt5Z5Hc,86642
71
+ modal/sandbox.py,sha256=byesQYe1QWRNB6yA3eTpr8TUIlb398U9kSoSm77X9P0,83622
72
+ modal/sandbox.pyi,sha256=fDUIw3NsJPBRZ198lEo_Bw9WfESsqmUWcFLRnow8F-0,86546
73
73
  modal/sandbox_fs.py,sha256=IfsbUfYO1whNENRLP1UukH5TdYsdctveE1hvIPoKoGA,19789
74
74
  modal/sandbox_fs.pyi,sha256=0PlbdZmBERFbQ2ZgwHnqBZybD6SVOmWecBDuHQa3ZY8,31826
75
75
  modal/schedule.py,sha256=ng0g0AqNY5GQI9KhkXZQ5Wam5G42glbkqVQsNpBtbDE,3078
@@ -149,9 +149,9 @@ modal/cli/app.py,sha256=9mTkT2JZaGs2_GomWMk_WIXAuP4HelmgyqLUWhc-gwk,21990
149
149
  modal/cli/billing.py,sha256=afXmnVmak5gzPF9n-3v_WQ7jTr2idyZCKk7gKRKuYmo,5727
150
150
  modal/cli/bootstrap.py,sha256=tnEHGvLWc3oLy5hv2spB2-8AIcck8gLWgHDEI126Wl8,5300
151
151
  modal/cli/changelog.py,sha256=RSem_IBx4Zb6BsJbHUFs50PElm37O7fEjcL2f6FalSc,5848
152
- modal/cli/cluster.py,sha256=c33Yv3vgxYxWn1h9oVQHBrhHQpB4HcgSDimvMwBzVgY,3403
152
+ modal/cli/cluster.py,sha256=3oh_3FNnyeoEXMQnNSHyDYhkjqtWaMGid2lyKm79CiY,4079
153
153
  modal/cli/config.py,sha256=2_PV3TKd7BA-5EhhskGS3_tUVMGUptimjw8KBEHvSQY,1857
154
- modal/cli/container.py,sha256=1vzF2yBWF0B6wxw0mMZ26PMlA6I8SnhxS8TXY1jdW1c,11553
154
+ modal/cli/container.py,sha256=0aJFZnZ-Mck8G5Pdk6N4j1CwKKVOWvS-ndzAklQvyzY,12211
155
155
  modal/cli/dashboard.py,sha256=u3HzFNb4BgSBTW8ve034XNO0Tdt_z5P1kr8RcGFMxcw,941
156
156
  modal/cli/dict.py,sha256=DwZ-fbunPAgY9M678u4urL_SI1TrPxjs1Vavm52AKG0,5087
157
157
  modal/cli/entry_point.py,sha256=0g7C_BGDg6GPJSCKEOty9GPGXhkjlRI6UoP9oZVQdDI,4647
@@ -176,7 +176,7 @@ modal/experimental/__init__.py,sha256=Wb1YoAKAnNxH_0c2wA0T12I7bSu9PSO2nS_LuLska7
176
176
  modal/experimental/flash.py,sha256=ATGhVO8AleJ-TOe2PGolI5T7zfCEtj0kl_ivMPp7Rqg,33362
177
177
  modal/experimental/flash.pyi,sha256=R4h2nQl7-oiwqq_twCp0YqID_LnPjPGqxywXvxbiLIk,17011
178
178
  modal/experimental/ipython.py,sha256=TrCfmol9LGsRZMeDoeMPx3Hv3BFqQhYnmD_iH0pqdhk,2904
179
- modal-1.4.3.dev7.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
179
+ modal-1.4.3.dev8.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
180
180
  modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
181
181
  modal_docs/gen_cli_docs.py,sha256=bfUSLscHfoQoKkKjIqJvQMe3fURzqcQK7gF1h9WQLtM,3742
182
182
  modal_docs/gen_cli_docs_main.py,sha256=UPGr7O1DYTIRLwfINe2rbdh89J3cPVTU1OWL-SjxnOQ,198
@@ -193,15 +193,15 @@ modal_proto/api_pb2_grpc.py,sha256=dWnojBtfuaqHvBos1FL-JMNEB7LsNHM1UGUpKXO5IFY,3
193
193
  modal_proto/api_pb2_grpc.pyi,sha256=qDqqKIs18olWaoBjLOJ8Z6Gn8_GjpNn3Z1Pw1yG_M4I,77024
194
194
  modal_proto/modal_api_grpc.py,sha256=bBPhTehvCriGANMHxXNxKa58ew_2QbSvO88zhKCr4CE,24177
195
195
  modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
196
- modal_proto/task_command_router_grpc.py,sha256=wbRjiCyx9MlvkmPKM_6UVU1KmJaynUO4Eyt6tDKtmRk,12572
197
- modal_proto/task_command_router_pb2.py,sha256=ZrDKDK9Kw2Ks4l9-gWXjUG8nW50pyDY5G-DOwTGfF1U,24363
198
- modal_proto/task_command_router_pb2.pyi,sha256=qDvQBePeIQZcLmpYgEEiT5-7LnkpWTP9h-Lkzan5LXE,27289
199
- modal_proto/task_command_router_pb2_grpc.py,sha256=CW52Dj00YLRRAc2-KIz_aimGe7RuKvx0cROMs2No-b0,25002
200
- modal_proto/task_command_router_pb2_grpc.pyi,sha256=j4-VU3QFp8nUyx5_6F04T4IIU28KWHpAFMnY8Eg521g,8018
201
- modal_version/__init__.py,sha256=fJ4FvwhIrc4NwEftoGhdqyBjJ2OQuONLUSjj5FcuGz8,120
196
+ modal_proto/task_command_router_grpc.py,sha256=i5ho152oU3hgfY3DZLXdT44ogcMy7rQUfGcEbmi0vXc,14477
197
+ modal_proto/task_command_router_pb2.py,sha256=cFzU-s7Y1cnqUHIVrSFauBQ37Xv_jEQRDTHSNb-70t0,28015
198
+ modal_proto/task_command_router_pb2.pyi,sha256=0fjfaucVSziP8VCLMalnqTaSfPCDjwMsWlD3EDQA_sk,30466
199
+ modal_proto/task_command_router_pb2_grpc.py,sha256=XVmcdxLnK_IY3trlF6nLmzFhqSG-bbYNABC7xIs6fT8,28732
200
+ modal_proto/task_command_router_pb2_grpc.pyi,sha256=og_J8CxYeAV0ikpHXZMvr_uC15UD3I3fgyyAO2pGm1E,8981
201
+ modal_version/__init__.py,sha256=640BRe09B3s_LEYg_H83MOwI1-q8f4ES2t4l3udAsw4,120
202
202
  modal_version/__main__.py,sha256=nLUbubxKx7GXNzJIkTB7M7_u8080LyLM0IS0rzFkC_c,119
203
- modal-1.4.3.dev7.dist-info/METADATA,sha256=QLrVNmly1BjJoKEOm5y0DVrdyUbRagzvtsQ6tfyGT_8,2338
204
- modal-1.4.3.dev7.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
205
- modal-1.4.3.dev7.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
206
- modal-1.4.3.dev7.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
207
- modal-1.4.3.dev7.dist-info/RECORD,,
203
+ modal-1.4.3.dev8.dist-info/METADATA,sha256=MQF4REj1Xl3ByWCz5vMaifctLfGFRdzeFHEGQRU3GeE,2338
204
+ modal-1.4.3.dev8.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
205
+ modal-1.4.3.dev8.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
206
+ modal-1.4.3.dev8.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
207
+ modal-1.4.3.dev8.dist-info/RECORD,,
@@ -16,6 +16,14 @@ import modal_proto.task_command_router_pb2
16
16
 
17
17
  class TaskCommandRouterBase(abc.ABC):
18
18
 
19
+ @abc.abstractmethod
20
+ async def SandboxStdinWriteV2(self, stream: 'grpclib.server.Stream[modal_proto.task_command_router_pb2.SandboxStdinWriteV2Request, modal_proto.task_command_router_pb2.SandboxStdinWriteV2Response]') -> None:
21
+ pass
22
+
23
+ @abc.abstractmethod
24
+ async def SandboxStdioReadV2(self, stream: 'grpclib.server.Stream[modal_proto.task_command_router_pb2.SandboxStdioReadV2Request, modal_proto.task_command_router_pb2.SandboxStdioReadV2Response]') -> None:
25
+ pass
26
+
19
27
  @abc.abstractmethod
20
28
  async def TaskContainerCreate(self, stream: 'grpclib.server.Stream[modal_proto.task_command_router_pb2.TaskContainerCreateRequest, modal_proto.task_command_router_pb2.TaskContainerCreateResponse]') -> None:
21
29
  pass
@@ -70,6 +78,18 @@ class TaskCommandRouterBase(abc.ABC):
70
78
 
71
79
  def __mapping__(self) -> typing.Dict[str, grpclib.const.Handler]:
72
80
  return {
81
+ '/modal.task_command_router.TaskCommandRouter/SandboxStdinWriteV2': grpclib.const.Handler(
82
+ self.SandboxStdinWriteV2,
83
+ grpclib.const.Cardinality.UNARY_UNARY,
84
+ modal_proto.task_command_router_pb2.SandboxStdinWriteV2Request,
85
+ modal_proto.task_command_router_pb2.SandboxStdinWriteV2Response,
86
+ ),
87
+ '/modal.task_command_router.TaskCommandRouter/SandboxStdioReadV2': grpclib.const.Handler(
88
+ self.SandboxStdioReadV2,
89
+ grpclib.const.Cardinality.UNARY_STREAM,
90
+ modal_proto.task_command_router_pb2.SandboxStdioReadV2Request,
91
+ modal_proto.task_command_router_pb2.SandboxStdioReadV2Response,
92
+ ),
73
93
  '/modal.task_command_router.TaskCommandRouter/TaskContainerCreate': grpclib.const.Handler(
74
94
  self.TaskContainerCreate,
75
95
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -154,6 +174,18 @@ class TaskCommandRouterBase(abc.ABC):
154
174
  class TaskCommandRouterStub:
155
175
 
156
176
  def __init__(self, channel: grpclib.client.Channel) -> None:
177
+ self.SandboxStdinWriteV2 = grpclib.client.UnaryUnaryMethod(
178
+ channel,
179
+ '/modal.task_command_router.TaskCommandRouter/SandboxStdinWriteV2',
180
+ modal_proto.task_command_router_pb2.SandboxStdinWriteV2Request,
181
+ modal_proto.task_command_router_pb2.SandboxStdinWriteV2Response,
182
+ )
183
+ self.SandboxStdioReadV2 = grpclib.client.UnaryStreamMethod(
184
+ channel,
185
+ '/modal.task_command_router.TaskCommandRouter/SandboxStdioReadV2',
186
+ modal_proto.task_command_router_pb2.SandboxStdioReadV2Request,
187
+ modal_proto.task_command_router_pb2.SandboxStdioReadV2Response,
188
+ )
157
189
  self.TaskContainerCreate = grpclib.client.UnaryUnaryMethod(
158
190
  channel,
159
191
  '/modal.task_command_router.TaskCommandRouter/TaskContainerCreate',
@@ -17,14 +17,18 @@ from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
17
17
  from modal_proto import api_pb2 as modal__proto_dot_api__pb2
18
18
 
19
19
 
20
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%modal_proto/task_command_router.proto\x12\x19modal.task_command_router\x1a\x1bgoogle/protobuf/empty.proto\x1a\x15modal_proto/api.proto\"\x83\x02\n\x1aTaskContainerCreateRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x16\n\x0e\x63ontainer_name\x18\x02 \x01(\t\x12\x10\n\x08image_id\x18\x03 \x01(\t\x12\x0c\n\x04\x61rgs\x18\x05 \x03(\t\x12K\n\x03\x65nv\x18\x06 \x03(\x0b\x32>.modal.task_command_router.TaskContainerCreateRequest.EnvEntry\x12\x0f\n\x07workdir\x18\x07 \x01(\t\x12\x12\n\nsecret_ids\x18\x08 \x03(\t\x1a*\n\x08\x45nvEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"K\n\x1bTaskContainerCreateResponse\x12\x14\n\x0c\x63ontainer_id\x18\x01 \x01(\t\x12\x16\n\x0e\x63ontainer_name\x18\x02 \x01(\t\"^\n\x17TaskContainerGetRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x16\n\x0e\x63ontainer_name\x18\x02 \x01(\t\x12\x1a\n\x12include_terminated\x18\x03 \x01(\x08\"[\n\x18TaskContainerGetResponse\x12?\n\tcontainer\x18\x01 \x01(\x0b\x32,.modal.task_command_router.TaskContainerInfo\"~\n\x11TaskContainerInfo\x12\x14\n\x0c\x63ontainer_id\x18\x01 \x01(\t\x12\x16\n\x0e\x63ontainer_name\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12+\n\x06result\x18\x04 \x01(\x0b\x32\x1b.modal.client.GenericResult\"G\n\x18TaskContainerListRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x1a\n\x12include_terminated\x18\x02 \x01(\x08\"]\n\x19TaskContainerListResponse\x12@\n\ncontainers\x18\x01 \x03(\x0b\x32,.modal.task_command_router.TaskContainerInfo\"F\n\x1dTaskContainerTerminateRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x14\n\x0c\x63ontainer_id\x18\x02 \x01(\t\" \n\x1eTaskContainerTerminateResponse\"R\n\x18TaskContainerWaitRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x14\n\x0c\x63ontainer_id\x18\x02 \x01(\t\x12\x0f\n\x07timeout\x18\x03 \x01(\x02\"H\n\x19TaskContainerWaitResponse\x12+\n\x06result\x18\x01 \x01(\x0b\x32\x1b.modal.client.GenericResult\"7\n\x13TaskExecPollRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\"G\n\x14TaskExecPollResponse\x12\x0e\n\x04\x63ode\x18\x01 \x01(\x05H\x00\x12\x10\n\x06signal\x18\x02 \x01(\x05H\x00\x42\r\n\x0b\x65xit_status\"\x9b\x04\n\x14TaskExecStartRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\x12\x14\n\x0c\x63ommand_args\x18\x03 \x03(\t\x12\x46\n\rstdout_config\x18\x04 \x01(\x0e\x32/.modal.task_command_router.TaskExecStdoutConfig\x12\x46\n\rstderr_config\x18\x05 \x01(\x0e\x32/.modal.task_command_router.TaskExecStderrConfig\x12\x19\n\x0ctimeout_secs\x18\x06 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07workdir\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x12\n\nsecret_ids\x18\x08 \x03(\t\x12,\n\x08pty_info\x18\t \x01(\x0b\x32\x15.modal.client.PTYInfoH\x02\x88\x01\x01\x12\x15\n\rruntime_debug\x18\n \x01(\x08\x12\x14\n\x0c\x63ontainer_id\x18\x0b \x01(\t\x12\x45\n\x03\x65nv\x18\x0c \x03(\x0b\x32\x38.modal.task_command_router.TaskExecStartRequest.EnvEntry\x1a*\n\x08\x45nvEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x0f\n\r_timeout_secsB\n\n\x08_workdirB\x0b\n\t_pty_info\"\x17\n\x15TaskExecStartResponse\"h\n\x19TaskExecStdinWriteRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\x12\x0e\n\x06offset\x18\x03 \x01(\x04\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\x12\x0b\n\x03\x65of\x18\x05 \x01(\x08\"\x1c\n\x1aTaskExecStdinWriteResponse\"\x9d\x01\n\x18TaskExecStdioReadRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\x12\x0e\n\x06offset\x18\x03 \x01(\x04\x12O\n\x0f\x66ile_descriptor\x18\x04 \x01(\x0e\x32\x36.modal.task_command_router.TaskExecStdioFileDescriptor\")\n\x19TaskExecStdioReadResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"7\n\x13TaskExecWaitRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\"G\n\x14TaskExecWaitResponse\x12\x0e\n\x04\x63ode\x18\x01 \x01(\x05H\x00\x12\x10\n\x06signal\x18\x02 \x01(\x05H\x00\x42\r\n\x0b\x65xit_status\"L\n\x19TaskMountDirectoryRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\x12\x10\n\x08image_id\x18\x03 \x01(\t\"R\n\x1cTaskSnapshotDirectoryRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\x12\x13\n\x0bsnapshot_id\x18\x03 \x01(\t\"1\n\x1dTaskSnapshotDirectoryResponse\x12\x10\n\x08image_id\x18\x01 \x01(\t\"<\n\x1bTaskUnmountDirectoryRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c*\x81\x01\n\x14TaskExecStderrConfig\x12#\n\x1fTASK_EXEC_STDERR_CONFIG_DEVNULL\x10\x00\x12 \n\x1cTASK_EXEC_STDERR_CONFIG_PIPE\x10\x01\x12\"\n\x1eTASK_EXEC_STDERR_CONFIG_STDOUT\x10\x02*u\n\x1bTaskExecStdioFileDescriptor\x12*\n&TASK_EXEC_STDIO_FILE_DESCRIPTOR_STDOUT\x10\x00\x12*\n&TASK_EXEC_STDIO_FILE_DESCRIPTOR_STDERR\x10\x01*]\n\x14TaskExecStdoutConfig\x12#\n\x1fTASK_EXEC_STDOUT_CONFIG_DEVNULL\x10\x00\x12 \n\x1cTASK_EXEC_STDOUT_CONFIG_PIPE\x10\x01\x32\xdd\x0c\n\x11TaskCommandRouter\x12\x84\x01\n\x13TaskContainerCreate\x12\x35.modal.task_command_router.TaskContainerCreateRequest\x1a\x36.modal.task_command_router.TaskContainerCreateResponse\x12{\n\x10TaskContainerGet\x12\x32.modal.task_command_router.TaskContainerGetRequest\x1a\x33.modal.task_command_router.TaskContainerGetResponse\x12~\n\x11TaskContainerList\x12\x33.modal.task_command_router.TaskContainerListRequest\x1a\x34.modal.task_command_router.TaskContainerListResponse\x12\x8d\x01\n\x16TaskContainerTerminate\x12\x38.modal.task_command_router.TaskContainerTerminateRequest\x1a\x39.modal.task_command_router.TaskContainerTerminateResponse\x12~\n\x11TaskContainerWait\x12\x33.modal.task_command_router.TaskContainerWaitRequest\x1a\x34.modal.task_command_router.TaskContainerWaitResponse\x12o\n\x0cTaskExecPoll\x12..modal.task_command_router.TaskExecPollRequest\x1a/.modal.task_command_router.TaskExecPollResponse\x12r\n\rTaskExecStart\x12/.modal.task_command_router.TaskExecStartRequest\x1a\x30.modal.task_command_router.TaskExecStartResponse\x12\x81\x01\n\x12TaskExecStdinWrite\x12\x34.modal.task_command_router.TaskExecStdinWriteRequest\x1a\x35.modal.task_command_router.TaskExecStdinWriteResponse\x12\x80\x01\n\x11TaskExecStdioRead\x12\x33.modal.task_command_router.TaskExecStdioReadRequest\x1a\x34.modal.task_command_router.TaskExecStdioReadResponse0\x01\x12o\n\x0cTaskExecWait\x12..modal.task_command_router.TaskExecWaitRequest\x1a/.modal.task_command_router.TaskExecWaitResponse\x12\x62\n\x12TaskMountDirectory\x12\x34.modal.task_command_router.TaskMountDirectoryRequest\x1a\x16.google.protobuf.Empty\x12\x8a\x01\n\x15TaskSnapshotDirectory\x12\x37.modal.task_command_router.TaskSnapshotDirectoryRequest\x1a\x38.modal.task_command_router.TaskSnapshotDirectoryResponse\x12\x66\n\x14TaskUnmountDirectory\x12\x36.modal.task_command_router.TaskUnmountDirectoryRequest\x1a\x16.google.protobuf.EmptyB&Z$github.com/modal-labs/modal/go/protob\x06proto3')
20
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%modal_proto/task_command_router.proto\x12\x19modal.task_command_router\x1a\x1bgoogle/protobuf/empty.proto\x1a\x15modal_proto/api.proto\"X\n\x1aSandboxStdinWriteV2Request\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0e\n\x06offset\x18\x02 \x01(\x04\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\x0b\n\x03\x65of\x18\x04 \x01(\x08\"\x1d\n\x1bSandboxStdinWriteV2Response\"\x8c\x01\n\x19SandboxStdioReadV2Request\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0e\n\x06offset\x18\x02 \x01(\x04\x12N\n\x0f\x66ile_descriptor\x18\x03 \x01(\x0e\x32\x35.modal.task_command_router.SandboxStdioFileDescriptor\"*\n\x1aSandboxStdioReadV2Response\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"\x83\x02\n\x1aTaskContainerCreateRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x16\n\x0e\x63ontainer_name\x18\x02 \x01(\t\x12\x10\n\x08image_id\x18\x03 \x01(\t\x12\x0c\n\x04\x61rgs\x18\x05 \x03(\t\x12K\n\x03\x65nv\x18\x06 \x03(\x0b\x32>.modal.task_command_router.TaskContainerCreateRequest.EnvEntry\x12\x0f\n\x07workdir\x18\x07 \x01(\t\x12\x12\n\nsecret_ids\x18\x08 \x03(\t\x1a*\n\x08\x45nvEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"K\n\x1bTaskContainerCreateResponse\x12\x14\n\x0c\x63ontainer_id\x18\x01 \x01(\t\x12\x16\n\x0e\x63ontainer_name\x18\x02 \x01(\t\"^\n\x17TaskContainerGetRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x16\n\x0e\x63ontainer_name\x18\x02 \x01(\t\x12\x1a\n\x12include_terminated\x18\x03 \x01(\x08\"[\n\x18TaskContainerGetResponse\x12?\n\tcontainer\x18\x01 \x01(\x0b\x32,.modal.task_command_router.TaskContainerInfo\"~\n\x11TaskContainerInfo\x12\x14\n\x0c\x63ontainer_id\x18\x01 \x01(\t\x12\x16\n\x0e\x63ontainer_name\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12+\n\x06result\x18\x04 \x01(\x0b\x32\x1b.modal.client.GenericResult\"G\n\x18TaskContainerListRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x1a\n\x12include_terminated\x18\x02 \x01(\x08\"]\n\x19TaskContainerListResponse\x12@\n\ncontainers\x18\x01 \x03(\x0b\x32,.modal.task_command_router.TaskContainerInfo\"F\n\x1dTaskContainerTerminateRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x14\n\x0c\x63ontainer_id\x18\x02 \x01(\t\" \n\x1eTaskContainerTerminateResponse\"R\n\x18TaskContainerWaitRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x14\n\x0c\x63ontainer_id\x18\x02 \x01(\t\x12\x0f\n\x07timeout\x18\x03 \x01(\x02\"H\n\x19TaskContainerWaitResponse\x12+\n\x06result\x18\x01 \x01(\x0b\x32\x1b.modal.client.GenericResult\"7\n\x13TaskExecPollRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\"G\n\x14TaskExecPollResponse\x12\x0e\n\x04\x63ode\x18\x01 \x01(\x05H\x00\x12\x10\n\x06signal\x18\x02 \x01(\x05H\x00\x42\r\n\x0b\x65xit_status\"\x9b\x04\n\x14TaskExecStartRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\x12\x14\n\x0c\x63ommand_args\x18\x03 \x03(\t\x12\x46\n\rstdout_config\x18\x04 \x01(\x0e\x32/.modal.task_command_router.TaskExecStdoutConfig\x12\x46\n\rstderr_config\x18\x05 \x01(\x0e\x32/.modal.task_command_router.TaskExecStderrConfig\x12\x19\n\x0ctimeout_secs\x18\x06 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07workdir\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x12\n\nsecret_ids\x18\x08 \x03(\t\x12,\n\x08pty_info\x18\t \x01(\x0b\x32\x15.modal.client.PTYInfoH\x02\x88\x01\x01\x12\x15\n\rruntime_debug\x18\n \x01(\x08\x12\x14\n\x0c\x63ontainer_id\x18\x0b \x01(\t\x12\x45\n\x03\x65nv\x18\x0c \x03(\x0b\x32\x38.modal.task_command_router.TaskExecStartRequest.EnvEntry\x1a*\n\x08\x45nvEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x0f\n\r_timeout_secsB\n\n\x08_workdirB\x0b\n\t_pty_info\"\x17\n\x15TaskExecStartResponse\"h\n\x19TaskExecStdinWriteRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\x12\x0e\n\x06offset\x18\x03 \x01(\x04\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\x12\x0b\n\x03\x65of\x18\x05 \x01(\x08\"\x1c\n\x1aTaskExecStdinWriteResponse\"\x9d\x01\n\x18TaskExecStdioReadRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\x12\x0e\n\x06offset\x18\x03 \x01(\x04\x12O\n\x0f\x66ile_descriptor\x18\x04 \x01(\x0e\x32\x36.modal.task_command_router.TaskExecStdioFileDescriptor\")\n\x19TaskExecStdioReadResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"7\n\x13TaskExecWaitRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\t\"G\n\x14TaskExecWaitResponse\x12\x0e\n\x04\x63ode\x18\x01 \x01(\x05H\x00\x12\x10\n\x06signal\x18\x02 \x01(\x05H\x00\x42\r\n\x0b\x65xit_status\"L\n\x19TaskMountDirectoryRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\x12\x10\n\x08image_id\x18\x03 \x01(\t\"R\n\x1cTaskSnapshotDirectoryRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\x12\x13\n\x0bsnapshot_id\x18\x03 \x01(\t\"1\n\x1dTaskSnapshotDirectoryResponse\x12\x10\n\x08image_id\x18\x01 \x01(\t\"<\n\x1bTaskUnmountDirectoryRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c*p\n\x1aSandboxStdioFileDescriptor\x12(\n$SANDBOX_STDIO_FILE_DESCRIPTOR_STDOUT\x10\x00\x12(\n$SANDBOX_STDIO_FILE_DESCRIPTOR_STDERR\x10\x01*\x81\x01\n\x14TaskExecStderrConfig\x12#\n\x1fTASK_EXEC_STDERR_CONFIG_DEVNULL\x10\x00\x12 \n\x1cTASK_EXEC_STDERR_CONFIG_PIPE\x10\x01\x12\"\n\x1eTASK_EXEC_STDERR_CONFIG_STDOUT\x10\x02*u\n\x1bTaskExecStdioFileDescriptor\x12*\n&TASK_EXEC_STDIO_FILE_DESCRIPTOR_STDOUT\x10\x00\x12*\n&TASK_EXEC_STDIO_FILE_DESCRIPTOR_STDERR\x10\x01*]\n\x14TaskExecStdoutConfig\x12#\n\x1fTASK_EXEC_STDOUT_CONFIG_DEVNULL\x10\x00\x12 \n\x1cTASK_EXEC_STDOUT_CONFIG_PIPE\x10\x01\x32\xea\x0e\n\x11TaskCommandRouter\x12\x84\x01\n\x13SandboxStdinWriteV2\x12\x35.modal.task_command_router.SandboxStdinWriteV2Request\x1a\x36.modal.task_command_router.SandboxStdinWriteV2Response\x12\x83\x01\n\x12SandboxStdioReadV2\x12\x34.modal.task_command_router.SandboxStdioReadV2Request\x1a\x35.modal.task_command_router.SandboxStdioReadV2Response0\x01\x12\x84\x01\n\x13TaskContainerCreate\x12\x35.modal.task_command_router.TaskContainerCreateRequest\x1a\x36.modal.task_command_router.TaskContainerCreateResponse\x12{\n\x10TaskContainerGet\x12\x32.modal.task_command_router.TaskContainerGetRequest\x1a\x33.modal.task_command_router.TaskContainerGetResponse\x12~\n\x11TaskContainerList\x12\x33.modal.task_command_router.TaskContainerListRequest\x1a\x34.modal.task_command_router.TaskContainerListResponse\x12\x8d\x01\n\x16TaskContainerTerminate\x12\x38.modal.task_command_router.TaskContainerTerminateRequest\x1a\x39.modal.task_command_router.TaskContainerTerminateResponse\x12~\n\x11TaskContainerWait\x12\x33.modal.task_command_router.TaskContainerWaitRequest\x1a\x34.modal.task_command_router.TaskContainerWaitResponse\x12o\n\x0cTaskExecPoll\x12..modal.task_command_router.TaskExecPollRequest\x1a/.modal.task_command_router.TaskExecPollResponse\x12r\n\rTaskExecStart\x12/.modal.task_command_router.TaskExecStartRequest\x1a\x30.modal.task_command_router.TaskExecStartResponse\x12\x81\x01\n\x12TaskExecStdinWrite\x12\x34.modal.task_command_router.TaskExecStdinWriteRequest\x1a\x35.modal.task_command_router.TaskExecStdinWriteResponse\x12\x80\x01\n\x11TaskExecStdioRead\x12\x33.modal.task_command_router.TaskExecStdioReadRequest\x1a\x34.modal.task_command_router.TaskExecStdioReadResponse0\x01\x12o\n\x0cTaskExecWait\x12..modal.task_command_router.TaskExecWaitRequest\x1a/.modal.task_command_router.TaskExecWaitResponse\x12\x62\n\x12TaskMountDirectory\x12\x34.modal.task_command_router.TaskMountDirectoryRequest\x1a\x16.google.protobuf.Empty\x12\x8a\x01\n\x15TaskSnapshotDirectory\x12\x37.modal.task_command_router.TaskSnapshotDirectoryRequest\x1a\x38.modal.task_command_router.TaskSnapshotDirectoryResponse\x12\x66\n\x14TaskUnmountDirectory\x12\x36.modal.task_command_router.TaskUnmountDirectoryRequest\x1a\x16.google.protobuf.EmptyB&Z$github.com/modal-labs/modal/go/protob\x06proto3')
21
21
 
22
+ _SANDBOXSTDIOFILEDESCRIPTOR = DESCRIPTOR.enum_types_by_name['SandboxStdioFileDescriptor']
23
+ SandboxStdioFileDescriptor = enum_type_wrapper.EnumTypeWrapper(_SANDBOXSTDIOFILEDESCRIPTOR)
22
24
  _TASKEXECSTDERRCONFIG = DESCRIPTOR.enum_types_by_name['TaskExecStderrConfig']
23
25
  TaskExecStderrConfig = enum_type_wrapper.EnumTypeWrapper(_TASKEXECSTDERRCONFIG)
24
26
  _TASKEXECSTDIOFILEDESCRIPTOR = DESCRIPTOR.enum_types_by_name['TaskExecStdioFileDescriptor']
25
27
  TaskExecStdioFileDescriptor = enum_type_wrapper.EnumTypeWrapper(_TASKEXECSTDIOFILEDESCRIPTOR)
26
28
  _TASKEXECSTDOUTCONFIG = DESCRIPTOR.enum_types_by_name['TaskExecStdoutConfig']
27
29
  TaskExecStdoutConfig = enum_type_wrapper.EnumTypeWrapper(_TASKEXECSTDOUTCONFIG)
30
+ SANDBOX_STDIO_FILE_DESCRIPTOR_STDOUT = 0
31
+ SANDBOX_STDIO_FILE_DESCRIPTOR_STDERR = 1
28
32
  TASK_EXEC_STDERR_CONFIG_DEVNULL = 0
29
33
  TASK_EXEC_STDERR_CONFIG_PIPE = 1
30
34
  TASK_EXEC_STDERR_CONFIG_STDOUT = 2
@@ -34,6 +38,10 @@ TASK_EXEC_STDOUT_CONFIG_DEVNULL = 0
34
38
  TASK_EXEC_STDOUT_CONFIG_PIPE = 1
35
39
 
36
40
 
41
+ _SANDBOXSTDINWRITEV2REQUEST = DESCRIPTOR.message_types_by_name['SandboxStdinWriteV2Request']
42
+ _SANDBOXSTDINWRITEV2RESPONSE = DESCRIPTOR.message_types_by_name['SandboxStdinWriteV2Response']
43
+ _SANDBOXSTDIOREADV2REQUEST = DESCRIPTOR.message_types_by_name['SandboxStdioReadV2Request']
44
+ _SANDBOXSTDIOREADV2RESPONSE = DESCRIPTOR.message_types_by_name['SandboxStdioReadV2Response']
37
45
  _TASKCONTAINERCREATEREQUEST = DESCRIPTOR.message_types_by_name['TaskContainerCreateRequest']
38
46
  _TASKCONTAINERCREATEREQUEST_ENVENTRY = _TASKCONTAINERCREATEREQUEST.nested_types_by_name['EnvEntry']
39
47
  _TASKCONTAINERCREATERESPONSE = DESCRIPTOR.message_types_by_name['TaskContainerCreateResponse']
@@ -61,6 +69,34 @@ _TASKMOUNTDIRECTORYREQUEST = DESCRIPTOR.message_types_by_name['TaskMountDirector
61
69
  _TASKSNAPSHOTDIRECTORYREQUEST = DESCRIPTOR.message_types_by_name['TaskSnapshotDirectoryRequest']
62
70
  _TASKSNAPSHOTDIRECTORYRESPONSE = DESCRIPTOR.message_types_by_name['TaskSnapshotDirectoryResponse']
63
71
  _TASKUNMOUNTDIRECTORYREQUEST = DESCRIPTOR.message_types_by_name['TaskUnmountDirectoryRequest']
72
+ SandboxStdinWriteV2Request = _reflection.GeneratedProtocolMessageType('SandboxStdinWriteV2Request', (_message.Message,), {
73
+ 'DESCRIPTOR' : _SANDBOXSTDINWRITEV2REQUEST,
74
+ '__module__' : 'modal_proto.task_command_router_pb2'
75
+ # @@protoc_insertion_point(class_scope:modal.task_command_router.SandboxStdinWriteV2Request)
76
+ })
77
+ _sym_db.RegisterMessage(SandboxStdinWriteV2Request)
78
+
79
+ SandboxStdinWriteV2Response = _reflection.GeneratedProtocolMessageType('SandboxStdinWriteV2Response', (_message.Message,), {
80
+ 'DESCRIPTOR' : _SANDBOXSTDINWRITEV2RESPONSE,
81
+ '__module__' : 'modal_proto.task_command_router_pb2'
82
+ # @@protoc_insertion_point(class_scope:modal.task_command_router.SandboxStdinWriteV2Response)
83
+ })
84
+ _sym_db.RegisterMessage(SandboxStdinWriteV2Response)
85
+
86
+ SandboxStdioReadV2Request = _reflection.GeneratedProtocolMessageType('SandboxStdioReadV2Request', (_message.Message,), {
87
+ 'DESCRIPTOR' : _SANDBOXSTDIOREADV2REQUEST,
88
+ '__module__' : 'modal_proto.task_command_router_pb2'
89
+ # @@protoc_insertion_point(class_scope:modal.task_command_router.SandboxStdioReadV2Request)
90
+ })
91
+ _sym_db.RegisterMessage(SandboxStdioReadV2Request)
92
+
93
+ SandboxStdioReadV2Response = _reflection.GeneratedProtocolMessageType('SandboxStdioReadV2Response', (_message.Message,), {
94
+ 'DESCRIPTOR' : _SANDBOXSTDIOREADV2RESPONSE,
95
+ '__module__' : 'modal_proto.task_command_router_pb2'
96
+ # @@protoc_insertion_point(class_scope:modal.task_command_router.SandboxStdioReadV2Response)
97
+ })
98
+ _sym_db.RegisterMessage(SandboxStdioReadV2Response)
99
+
64
100
  TaskContainerCreateRequest = _reflection.GeneratedProtocolMessageType('TaskContainerCreateRequest', (_message.Message,), {
65
101
 
66
102
  'EnvEntry' : _reflection.GeneratedProtocolMessageType('EnvEntry', (_message.Message,), {
@@ -261,66 +297,76 @@ if _descriptor._USE_C_DESCRIPTORS == False:
261
297
  _TASKCONTAINERCREATEREQUEST_ENVENTRY._serialized_options = b'8\001'
262
298
  _TASKEXECSTARTREQUEST_ENVENTRY._options = None
263
299
  _TASKEXECSTARTREQUEST_ENVENTRY._serialized_options = b'8\001'
264
- _TASKEXECSTDERRCONFIG._serialized_start=2650
265
- _TASKEXECSTDERRCONFIG._serialized_end=2779
266
- _TASKEXECSTDIOFILEDESCRIPTOR._serialized_start=2781
267
- _TASKEXECSTDIOFILEDESCRIPTOR._serialized_end=2898
268
- _TASKEXECSTDOUTCONFIG._serialized_start=2900
269
- _TASKEXECSTDOUTCONFIG._serialized_end=2993
270
- _TASKCONTAINERCREATEREQUEST._serialized_start=121
271
- _TASKCONTAINERCREATEREQUEST._serialized_end=380
272
- _TASKCONTAINERCREATEREQUEST_ENVENTRY._serialized_start=338
273
- _TASKCONTAINERCREATEREQUEST_ENVENTRY._serialized_end=380
274
- _TASKCONTAINERCREATERESPONSE._serialized_start=382
275
- _TASKCONTAINERCREATERESPONSE._serialized_end=457
276
- _TASKCONTAINERGETREQUEST._serialized_start=459
277
- _TASKCONTAINERGETREQUEST._serialized_end=553
278
- _TASKCONTAINERGETRESPONSE._serialized_start=555
279
- _TASKCONTAINERGETRESPONSE._serialized_end=646
280
- _TASKCONTAINERINFO._serialized_start=648
281
- _TASKCONTAINERINFO._serialized_end=774
282
- _TASKCONTAINERLISTREQUEST._serialized_start=776
283
- _TASKCONTAINERLISTREQUEST._serialized_end=847
284
- _TASKCONTAINERLISTRESPONSE._serialized_start=849
285
- _TASKCONTAINERLISTRESPONSE._serialized_end=942
286
- _TASKCONTAINERTERMINATEREQUEST._serialized_start=944
287
- _TASKCONTAINERTERMINATEREQUEST._serialized_end=1014
288
- _TASKCONTAINERTERMINATERESPONSE._serialized_start=1016
289
- _TASKCONTAINERTERMINATERESPONSE._serialized_end=1048
290
- _TASKCONTAINERWAITREQUEST._serialized_start=1050
291
- _TASKCONTAINERWAITREQUEST._serialized_end=1132
292
- _TASKCONTAINERWAITRESPONSE._serialized_start=1134
293
- _TASKCONTAINERWAITRESPONSE._serialized_end=1206
294
- _TASKEXECPOLLREQUEST._serialized_start=1208
295
- _TASKEXECPOLLREQUEST._serialized_end=1263
296
- _TASKEXECPOLLRESPONSE._serialized_start=1265
297
- _TASKEXECPOLLRESPONSE._serialized_end=1336
298
- _TASKEXECSTARTREQUEST._serialized_start=1339
299
- _TASKEXECSTARTREQUEST._serialized_end=1878
300
- _TASKEXECSTARTREQUEST_ENVENTRY._serialized_start=338
301
- _TASKEXECSTARTREQUEST_ENVENTRY._serialized_end=380
302
- _TASKEXECSTARTRESPONSE._serialized_start=1880
303
- _TASKEXECSTARTRESPONSE._serialized_end=1903
304
- _TASKEXECSTDINWRITEREQUEST._serialized_start=1905
305
- _TASKEXECSTDINWRITEREQUEST._serialized_end=2009
306
- _TASKEXECSTDINWRITERESPONSE._serialized_start=2011
307
- _TASKEXECSTDINWRITERESPONSE._serialized_end=2039
308
- _TASKEXECSTDIOREADREQUEST._serialized_start=2042
309
- _TASKEXECSTDIOREADREQUEST._serialized_end=2199
310
- _TASKEXECSTDIOREADRESPONSE._serialized_start=2201
311
- _TASKEXECSTDIOREADRESPONSE._serialized_end=2242
312
- _TASKEXECWAITREQUEST._serialized_start=2244
313
- _TASKEXECWAITREQUEST._serialized_end=2299
314
- _TASKEXECWAITRESPONSE._serialized_start=2301
315
- _TASKEXECWAITRESPONSE._serialized_end=2372
316
- _TASKMOUNTDIRECTORYREQUEST._serialized_start=2374
317
- _TASKMOUNTDIRECTORYREQUEST._serialized_end=2450
318
- _TASKSNAPSHOTDIRECTORYREQUEST._serialized_start=2452
319
- _TASKSNAPSHOTDIRECTORYREQUEST._serialized_end=2534
320
- _TASKSNAPSHOTDIRECTORYRESPONSE._serialized_start=2536
321
- _TASKSNAPSHOTDIRECTORYRESPONSE._serialized_end=2585
322
- _TASKUNMOUNTDIRECTORYREQUEST._serialized_start=2587
323
- _TASKUNMOUNTDIRECTORYREQUEST._serialized_end=2647
324
- _TASKCOMMANDROUTER._serialized_start=2996
325
- _TASKCOMMANDROUTER._serialized_end=4625
300
+ _SANDBOXSTDIOFILEDESCRIPTOR._serialized_start=2957
301
+ _SANDBOXSTDIOFILEDESCRIPTOR._serialized_end=3069
302
+ _TASKEXECSTDERRCONFIG._serialized_start=3072
303
+ _TASKEXECSTDERRCONFIG._serialized_end=3201
304
+ _TASKEXECSTDIOFILEDESCRIPTOR._serialized_start=3203
305
+ _TASKEXECSTDIOFILEDESCRIPTOR._serialized_end=3320
306
+ _TASKEXECSTDOUTCONFIG._serialized_start=3322
307
+ _TASKEXECSTDOUTCONFIG._serialized_end=3415
308
+ _SANDBOXSTDINWRITEV2REQUEST._serialized_start=120
309
+ _SANDBOXSTDINWRITEV2REQUEST._serialized_end=208
310
+ _SANDBOXSTDINWRITEV2RESPONSE._serialized_start=210
311
+ _SANDBOXSTDINWRITEV2RESPONSE._serialized_end=239
312
+ _SANDBOXSTDIOREADV2REQUEST._serialized_start=242
313
+ _SANDBOXSTDIOREADV2REQUEST._serialized_end=382
314
+ _SANDBOXSTDIOREADV2RESPONSE._serialized_start=384
315
+ _SANDBOXSTDIOREADV2RESPONSE._serialized_end=426
316
+ _TASKCONTAINERCREATEREQUEST._serialized_start=429
317
+ _TASKCONTAINERCREATEREQUEST._serialized_end=688
318
+ _TASKCONTAINERCREATEREQUEST_ENVENTRY._serialized_start=646
319
+ _TASKCONTAINERCREATEREQUEST_ENVENTRY._serialized_end=688
320
+ _TASKCONTAINERCREATERESPONSE._serialized_start=690
321
+ _TASKCONTAINERCREATERESPONSE._serialized_end=765
322
+ _TASKCONTAINERGETREQUEST._serialized_start=767
323
+ _TASKCONTAINERGETREQUEST._serialized_end=861
324
+ _TASKCONTAINERGETRESPONSE._serialized_start=863
325
+ _TASKCONTAINERGETRESPONSE._serialized_end=954
326
+ _TASKCONTAINERINFO._serialized_start=956
327
+ _TASKCONTAINERINFO._serialized_end=1082
328
+ _TASKCONTAINERLISTREQUEST._serialized_start=1084
329
+ _TASKCONTAINERLISTREQUEST._serialized_end=1155
330
+ _TASKCONTAINERLISTRESPONSE._serialized_start=1157
331
+ _TASKCONTAINERLISTRESPONSE._serialized_end=1250
332
+ _TASKCONTAINERTERMINATEREQUEST._serialized_start=1252
333
+ _TASKCONTAINERTERMINATEREQUEST._serialized_end=1322
334
+ _TASKCONTAINERTERMINATERESPONSE._serialized_start=1324
335
+ _TASKCONTAINERTERMINATERESPONSE._serialized_end=1356
336
+ _TASKCONTAINERWAITREQUEST._serialized_start=1358
337
+ _TASKCONTAINERWAITREQUEST._serialized_end=1440
338
+ _TASKCONTAINERWAITRESPONSE._serialized_start=1442
339
+ _TASKCONTAINERWAITRESPONSE._serialized_end=1514
340
+ _TASKEXECPOLLREQUEST._serialized_start=1516
341
+ _TASKEXECPOLLREQUEST._serialized_end=1571
342
+ _TASKEXECPOLLRESPONSE._serialized_start=1573
343
+ _TASKEXECPOLLRESPONSE._serialized_end=1644
344
+ _TASKEXECSTARTREQUEST._serialized_start=1647
345
+ _TASKEXECSTARTREQUEST._serialized_end=2186
346
+ _TASKEXECSTARTREQUEST_ENVENTRY._serialized_start=646
347
+ _TASKEXECSTARTREQUEST_ENVENTRY._serialized_end=688
348
+ _TASKEXECSTARTRESPONSE._serialized_start=2188
349
+ _TASKEXECSTARTRESPONSE._serialized_end=2211
350
+ _TASKEXECSTDINWRITEREQUEST._serialized_start=2213
351
+ _TASKEXECSTDINWRITEREQUEST._serialized_end=2317
352
+ _TASKEXECSTDINWRITERESPONSE._serialized_start=2319
353
+ _TASKEXECSTDINWRITERESPONSE._serialized_end=2347
354
+ _TASKEXECSTDIOREADREQUEST._serialized_start=2350
355
+ _TASKEXECSTDIOREADREQUEST._serialized_end=2507
356
+ _TASKEXECSTDIOREADRESPONSE._serialized_start=2509
357
+ _TASKEXECSTDIOREADRESPONSE._serialized_end=2550
358
+ _TASKEXECWAITREQUEST._serialized_start=2552
359
+ _TASKEXECWAITREQUEST._serialized_end=2607
360
+ _TASKEXECWAITRESPONSE._serialized_start=2609
361
+ _TASKEXECWAITRESPONSE._serialized_end=2680
362
+ _TASKMOUNTDIRECTORYREQUEST._serialized_start=2682
363
+ _TASKMOUNTDIRECTORYREQUEST._serialized_end=2758
364
+ _TASKSNAPSHOTDIRECTORYREQUEST._serialized_start=2760
365
+ _TASKSNAPSHOTDIRECTORYREQUEST._serialized_end=2842
366
+ _TASKSNAPSHOTDIRECTORYRESPONSE._serialized_start=2844
367
+ _TASKSNAPSHOTDIRECTORYRESPONSE._serialized_end=2893
368
+ _TASKUNMOUNTDIRECTORYREQUEST._serialized_start=2895
369
+ _TASKUNMOUNTDIRECTORYREQUEST._serialized_end=2955
370
+ _TASKCOMMANDROUTER._serialized_start=3418
371
+ _TASKCOMMANDROUTER._serialized_end=5316
326
372
  # @@protoc_insertion_point(module_scope)
@@ -19,6 +19,21 @@ else:
19
19
 
20
20
  DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
21
21
 
22
+ class _SandboxStdioFileDescriptor:
23
+ ValueType = typing.NewType("ValueType", builtins.int)
24
+ V: typing_extensions.TypeAlias = ValueType
25
+
26
+ class _SandboxStdioFileDescriptorEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_SandboxStdioFileDescriptor.ValueType], builtins.type): # noqa: F821
27
+ DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
28
+ SANDBOX_STDIO_FILE_DESCRIPTOR_STDOUT: _SandboxStdioFileDescriptor.ValueType # 0
29
+ SANDBOX_STDIO_FILE_DESCRIPTOR_STDERR: _SandboxStdioFileDescriptor.ValueType # 1
30
+
31
+ class SandboxStdioFileDescriptor(_SandboxStdioFileDescriptor, metaclass=_SandboxStdioFileDescriptorEnumTypeWrapper): ...
32
+
33
+ SANDBOX_STDIO_FILE_DESCRIPTOR_STDOUT: SandboxStdioFileDescriptor.ValueType # 0
34
+ SANDBOX_STDIO_FILE_DESCRIPTOR_STDERR: SandboxStdioFileDescriptor.ValueType # 1
35
+ global___SandboxStdioFileDescriptor = SandboxStdioFileDescriptor
36
+
22
37
  class _TaskExecStderrConfig:
23
38
  ValueType = typing.NewType("ValueType", builtins.int)
24
39
  V: typing_extensions.TypeAlias = ValueType
@@ -84,6 +99,72 @@ TASK_EXEC_STDOUT_CONFIG_PIPE: TaskExecStdoutConfig.ValueType # 1
84
99
  """The output will be streamed to the client."""
85
100
  global___TaskExecStdoutConfig = TaskExecStdoutConfig
86
101
 
102
+ class SandboxStdinWriteV2Request(google.protobuf.message.Message):
103
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
104
+
105
+ TASK_ID_FIELD_NUMBER: builtins.int
106
+ OFFSET_FIELD_NUMBER: builtins.int
107
+ DATA_FIELD_NUMBER: builtins.int
108
+ EOF_FIELD_NUMBER: builtins.int
109
+ task_id: builtins.str
110
+ offset: builtins.int
111
+ data: builtins.bytes
112
+ eof: builtins.bool
113
+ def __init__(
114
+ self,
115
+ *,
116
+ task_id: builtins.str = ...,
117
+ offset: builtins.int = ...,
118
+ data: builtins.bytes = ...,
119
+ eof: builtins.bool = ...,
120
+ ) -> None: ...
121
+ def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "eof", b"eof", "offset", b"offset", "task_id", b"task_id"]) -> None: ...
122
+
123
+ global___SandboxStdinWriteV2Request = SandboxStdinWriteV2Request
124
+
125
+ class SandboxStdinWriteV2Response(google.protobuf.message.Message):
126
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
127
+
128
+ def __init__(
129
+ self,
130
+ ) -> None: ...
131
+
132
+ global___SandboxStdinWriteV2Response = SandboxStdinWriteV2Response
133
+
134
+ class SandboxStdioReadV2Request(google.protobuf.message.Message):
135
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
136
+
137
+ TASK_ID_FIELD_NUMBER: builtins.int
138
+ OFFSET_FIELD_NUMBER: builtins.int
139
+ FILE_DESCRIPTOR_FIELD_NUMBER: builtins.int
140
+ task_id: builtins.str
141
+ offset: builtins.int
142
+ file_descriptor: global___SandboxStdioFileDescriptor.ValueType
143
+ def __init__(
144
+ self,
145
+ *,
146
+ task_id: builtins.str = ...,
147
+ offset: builtins.int = ...,
148
+ file_descriptor: global___SandboxStdioFileDescriptor.ValueType = ...,
149
+ ) -> None: ...
150
+ def ClearField(self, field_name: typing_extensions.Literal["file_descriptor", b"file_descriptor", "offset", b"offset", "task_id", b"task_id"]) -> None: ...
151
+
152
+ global___SandboxStdioReadV2Request = SandboxStdioReadV2Request
153
+
154
+ class SandboxStdioReadV2Response(google.protobuf.message.Message):
155
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
156
+
157
+ DATA_FIELD_NUMBER: builtins.int
158
+ data: builtins.bytes
159
+ def __init__(
160
+ self,
161
+ *,
162
+ data: builtins.bytes = ...,
163
+ ) -> None: ...
164
+ def ClearField(self, field_name: typing_extensions.Literal["data", b"data"]) -> None: ...
165
+
166
+ global___SandboxStdioReadV2Response = SandboxStdioReadV2Response
167
+
87
168
  class TaskContainerCreateRequest(google.protobuf.message.Message):
88
169
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
89
170
 
@@ -15,6 +15,16 @@ class TaskCommandRouterStub(object):
15
15
  Args:
16
16
  channel: A grpc.Channel.
17
17
  """
18
+ self.SandboxStdinWriteV2 = channel.unary_unary(
19
+ '/modal.task_command_router.TaskCommandRouter/SandboxStdinWriteV2',
20
+ request_serializer=modal__proto_dot_task__command__router__pb2.SandboxStdinWriteV2Request.SerializeToString,
21
+ response_deserializer=modal__proto_dot_task__command__router__pb2.SandboxStdinWriteV2Response.FromString,
22
+ )
23
+ self.SandboxStdioReadV2 = channel.unary_stream(
24
+ '/modal.task_command_router.TaskCommandRouter/SandboxStdioReadV2',
25
+ request_serializer=modal__proto_dot_task__command__router__pb2.SandboxStdioReadV2Request.SerializeToString,
26
+ response_deserializer=modal__proto_dot_task__command__router__pb2.SandboxStdioReadV2Response.FromString,
27
+ )
18
28
  self.TaskContainerCreate = channel.unary_unary(
19
29
  '/modal.task_command_router.TaskCommandRouter/TaskContainerCreate',
20
30
  request_serializer=modal__proto_dot_task__command__router__pb2.TaskContainerCreateRequest.SerializeToString,
@@ -85,6 +95,18 @@ class TaskCommandRouterStub(object):
85
95
  class TaskCommandRouterServicer(object):
86
96
  """Missing associated documentation comment in .proto file."""
87
97
 
98
+ def SandboxStdinWriteV2(self, request, context):
99
+ """Missing associated documentation comment in .proto file."""
100
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
101
+ context.set_details('Method not implemented!')
102
+ raise NotImplementedError('Method not implemented!')
103
+
104
+ def SandboxStdioReadV2(self, request, context):
105
+ """Missing associated documentation comment in .proto file."""
106
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
107
+ context.set_details('Method not implemented!')
108
+ raise NotImplementedError('Method not implemented!')
109
+
88
110
  def TaskContainerCreate(self, request, context):
89
111
  """Create an additional container for a task.
90
112
  """
@@ -179,6 +201,16 @@ class TaskCommandRouterServicer(object):
179
201
 
180
202
  def add_TaskCommandRouterServicer_to_server(servicer, server):
181
203
  rpc_method_handlers = {
204
+ 'SandboxStdinWriteV2': grpc.unary_unary_rpc_method_handler(
205
+ servicer.SandboxStdinWriteV2,
206
+ request_deserializer=modal__proto_dot_task__command__router__pb2.SandboxStdinWriteV2Request.FromString,
207
+ response_serializer=modal__proto_dot_task__command__router__pb2.SandboxStdinWriteV2Response.SerializeToString,
208
+ ),
209
+ 'SandboxStdioReadV2': grpc.unary_stream_rpc_method_handler(
210
+ servicer.SandboxStdioReadV2,
211
+ request_deserializer=modal__proto_dot_task__command__router__pb2.SandboxStdioReadV2Request.FromString,
212
+ response_serializer=modal__proto_dot_task__command__router__pb2.SandboxStdioReadV2Response.SerializeToString,
213
+ ),
182
214
  'TaskContainerCreate': grpc.unary_unary_rpc_method_handler(
183
215
  servicer.TaskContainerCreate,
184
216
  request_deserializer=modal__proto_dot_task__command__router__pb2.TaskContainerCreateRequest.FromString,
@@ -254,6 +286,40 @@ def add_TaskCommandRouterServicer_to_server(servicer, server):
254
286
  class TaskCommandRouter(object):
255
287
  """Missing associated documentation comment in .proto file."""
256
288
 
289
+ @staticmethod
290
+ def SandboxStdinWriteV2(request,
291
+ target,
292
+ options=(),
293
+ channel_credentials=None,
294
+ call_credentials=None,
295
+ insecure=False,
296
+ compression=None,
297
+ wait_for_ready=None,
298
+ timeout=None,
299
+ metadata=None):
300
+ return grpc.experimental.unary_unary(request, target, '/modal.task_command_router.TaskCommandRouter/SandboxStdinWriteV2',
301
+ modal__proto_dot_task__command__router__pb2.SandboxStdinWriteV2Request.SerializeToString,
302
+ modal__proto_dot_task__command__router__pb2.SandboxStdinWriteV2Response.FromString,
303
+ options, channel_credentials,
304
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
305
+
306
+ @staticmethod
307
+ def SandboxStdioReadV2(request,
308
+ target,
309
+ options=(),
310
+ channel_credentials=None,
311
+ call_credentials=None,
312
+ insecure=False,
313
+ compression=None,
314
+ wait_for_ready=None,
315
+ timeout=None,
316
+ metadata=None):
317
+ return grpc.experimental.unary_stream(request, target, '/modal.task_command_router.TaskCommandRouter/SandboxStdioReadV2',
318
+ modal__proto_dot_task__command__router__pb2.SandboxStdioReadV2Request.SerializeToString,
319
+ modal__proto_dot_task__command__router__pb2.SandboxStdioReadV2Response.FromString,
320
+ options, channel_credentials,
321
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
322
+
257
323
  @staticmethod
258
324
  def TaskContainerCreate(request,
259
325
  target,
@@ -10,6 +10,14 @@ import modal_proto.task_command_router_pb2
10
10
 
11
11
  class TaskCommandRouterStub:
12
12
  def __init__(self, channel: grpc.Channel) -> None: ...
13
+ SandboxStdinWriteV2: grpc.UnaryUnaryMultiCallable[
14
+ modal_proto.task_command_router_pb2.SandboxStdinWriteV2Request,
15
+ modal_proto.task_command_router_pb2.SandboxStdinWriteV2Response,
16
+ ]
17
+ SandboxStdioReadV2: grpc.UnaryStreamMultiCallable[
18
+ modal_proto.task_command_router_pb2.SandboxStdioReadV2Request,
19
+ modal_proto.task_command_router_pb2.SandboxStdioReadV2Response,
20
+ ]
13
21
  TaskContainerCreate: grpc.UnaryUnaryMultiCallable[
14
22
  modal_proto.task_command_router_pb2.TaskContainerCreateRequest,
15
23
  modal_proto.task_command_router_pb2.TaskContainerCreateResponse,
@@ -77,6 +85,18 @@ class TaskCommandRouterStub:
77
85
  """Unmount an image previously mounted at a directory in the container."""
78
86
 
79
87
  class TaskCommandRouterServicer(metaclass=abc.ABCMeta):
88
+ @abc.abstractmethod
89
+ def SandboxStdinWriteV2(
90
+ self,
91
+ request: modal_proto.task_command_router_pb2.SandboxStdinWriteV2Request,
92
+ context: grpc.ServicerContext,
93
+ ) -> modal_proto.task_command_router_pb2.SandboxStdinWriteV2Response: ...
94
+ @abc.abstractmethod
95
+ def SandboxStdioReadV2(
96
+ self,
97
+ request: modal_proto.task_command_router_pb2.SandboxStdioReadV2Request,
98
+ context: grpc.ServicerContext,
99
+ ) -> collections.abc.Iterator[modal_proto.task_command_router_pb2.SandboxStdioReadV2Response]: ...
80
100
  @abc.abstractmethod
81
101
  def TaskContainerCreate(
82
102
  self,
modal_version/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # Copyright Modal Labs 2026
2
2
  """Supplies the current version of the modal client library."""
3
3
 
4
- __version__ = "1.4.3.dev7"
4
+ __version__ = "1.4.3.dev8"