modal 1.2.1.dev8__py3-none-any.whl → 1.2.2.dev19__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.
Files changed (70) hide show
  1. modal/_clustered_functions.py +1 -3
  2. modal/_container_entrypoint.py +4 -1
  3. modal/_functions.py +33 -49
  4. modal/_grpc_client.py +148 -0
  5. modal/_output.py +3 -4
  6. modal/_partial_function.py +22 -2
  7. modal/_runtime/container_io_manager.py +21 -22
  8. modal/_utils/async_utils.py +12 -3
  9. modal/_utils/auth_token_manager.py +1 -4
  10. modal/_utils/blob_utils.py +3 -4
  11. modal/_utils/function_utils.py +4 -0
  12. modal/_utils/grpc_utils.py +80 -51
  13. modal/_utils/mount_utils.py +26 -1
  14. modal/_utils/task_command_router_client.py +536 -0
  15. modal/app.py +7 -5
  16. modal/cli/cluster.py +4 -2
  17. modal/cli/config.py +3 -1
  18. modal/cli/container.py +5 -4
  19. modal/cli/entry_point.py +1 -0
  20. modal/cli/launch.py +1 -2
  21. modal/cli/network_file_system.py +1 -4
  22. modal/cli/queues.py +1 -2
  23. modal/cli/secret.py +1 -2
  24. modal/client.py +5 -115
  25. modal/client.pyi +2 -91
  26. modal/cls.py +1 -2
  27. modal/config.py +3 -1
  28. modal/container_process.py +287 -11
  29. modal/container_process.pyi +95 -32
  30. modal/dict.py +12 -12
  31. modal/environments.py +1 -2
  32. modal/exception.py +4 -0
  33. modal/experimental/__init__.py +2 -3
  34. modal/experimental/flash.py +27 -57
  35. modal/experimental/flash.pyi +6 -20
  36. modal/file_io.py +13 -27
  37. modal/functions.pyi +6 -6
  38. modal/image.py +24 -3
  39. modal/image.pyi +4 -0
  40. modal/io_streams.py +433 -127
  41. modal/io_streams.pyi +236 -171
  42. modal/mount.py +4 -4
  43. modal/network_file_system.py +5 -6
  44. modal/parallel_map.py +29 -31
  45. modal/parallel_map.pyi +3 -9
  46. modal/partial_function.pyi +4 -1
  47. modal/queue.py +17 -18
  48. modal/runner.py +12 -11
  49. modal/sandbox.py +148 -42
  50. modal/sandbox.pyi +139 -0
  51. modal/secret.py +4 -5
  52. modal/snapshot.py +1 -4
  53. modal/token_flow.py +1 -1
  54. modal/volume.py +22 -22
  55. {modal-1.2.1.dev8.dist-info → modal-1.2.2.dev19.dist-info}/METADATA +1 -1
  56. {modal-1.2.1.dev8.dist-info → modal-1.2.2.dev19.dist-info}/RECORD +70 -68
  57. modal_proto/api.proto +2 -24
  58. modal_proto/api_grpc.py +0 -32
  59. modal_proto/api_pb2.py +838 -878
  60. modal_proto/api_pb2.pyi +8 -70
  61. modal_proto/api_pb2_grpc.py +0 -67
  62. modal_proto/api_pb2_grpc.pyi +0 -22
  63. modal_proto/modal_api_grpc.py +175 -177
  64. modal_proto/sandbox_router.proto +0 -4
  65. modal_proto/sandbox_router_pb2.pyi +0 -4
  66. modal_version/__init__.py +1 -1
  67. {modal-1.2.1.dev8.dist-info → modal-1.2.2.dev19.dist-info}/WHEEL +0 -0
  68. {modal-1.2.1.dev8.dist-info → modal-1.2.2.dev19.dist-info}/entry_points.txt +0 -0
  69. {modal-1.2.1.dev8.dist-info → modal-1.2.2.dev19.dist-info}/licenses/LICENSE +0 -0
  70. {modal-1.2.1.dev8.dist-info → modal-1.2.2.dev19.dist-info}/top_level.txt +0 -0
modal/volume.py CHANGED
@@ -59,7 +59,7 @@ from ._utils.blob_utils import (
59
59
  get_file_upload_spec_from_path,
60
60
  )
61
61
  from ._utils.deprecation import deprecation_warning, warn_if_passing_namespace
62
- from ._utils.grpc_utils import retry_transient_errors
62
+ from ._utils.grpc_utils import Retry
63
63
  from ._utils.http_utils import ClientSessionRegistry
64
64
  from ._utils.name_utils import check_object_name
65
65
  from ._utils.time_utils import as_timestamp, timestamp_to_localized_dt
@@ -170,7 +170,7 @@ class _VolumeManager:
170
170
  version=version,
171
171
  )
172
172
  try:
173
- await retry_transient_errors(client.stub.VolumeGetOrCreate, req)
173
+ await client.stub.VolumeGetOrCreate(req)
174
174
  except GRPCError as exc:
175
175
  if exc.status == Status.ALREADY_EXISTS and not allow_existing:
176
176
  raise AlreadyExistsError(exc.message)
@@ -222,7 +222,7 @@ class _VolumeManager:
222
222
  req = api_pb2.VolumeListRequest(
223
223
  environment_name=_get_environment_name(environment_name), pagination=pagination
224
224
  )
225
- resp = await retry_transient_errors(client.stub.VolumeList, req)
225
+ resp = await client.stub.VolumeList(req)
226
226
  items.extend(resp.items)
227
227
  finished = (len(resp.items) < max_page_size) or (max_objects is not None and len(items) >= max_objects)
228
228
  return finished
@@ -280,7 +280,7 @@ class _VolumeManager:
280
280
  raise
281
281
  else:
282
282
  req = api_pb2.VolumeDeleteRequest(volume_id=obj.object_id)
283
- await retry_transient_errors(obj._client.stub.VolumeDelete, req)
283
+ await obj._client.stub.VolumeDelete(req)
284
284
 
285
285
 
286
286
  VolumeManager = synchronize_api(_VolumeManager)
@@ -519,7 +519,7 @@ class _Volume(_Object, type_prefix="vo"):
519
519
  object_creation_type=api_pb2.OBJECT_CREATION_TYPE_CREATE_FAIL_IF_EXISTS,
520
520
  version=version,
521
521
  )
522
- resp = await retry_transient_errors(client.stub.VolumeGetOrCreate, request)
522
+ resp = await client.stub.VolumeGetOrCreate(request)
523
523
  return resp.volume_id
524
524
 
525
525
  @live_method
@@ -539,7 +539,7 @@ class _Volume(_Object, type_prefix="vo"):
539
539
  async def _do_reload(self, lock=True):
540
540
  async with (await self._get_lock()) if lock else asyncnullcontext():
541
541
  req = api_pb2.VolumeReloadRequest(volume_id=self.object_id)
542
- _ = await retry_transient_errors(self._client.stub.VolumeReload, req)
542
+ _ = await self._client.stub.VolumeReload(req)
543
543
 
544
544
  @live_method
545
545
  async def commit(self):
@@ -552,7 +552,7 @@ class _Volume(_Object, type_prefix="vo"):
552
552
  req = api_pb2.VolumeCommitRequest(volume_id=self.object_id)
553
553
  try:
554
554
  # TODO(gongy): only apply indefinite retries on 504 status.
555
- resp = await retry_transient_errors(self._client.stub.VolumeCommit, req, max_retries=90)
555
+ resp = await self._client.stub.VolumeCommit(req, retry=Retry(max_retries=90))
556
556
  if not resp.skip_reload:
557
557
  # Reload changes on successful commit.
558
558
  await self._do_reload(lock=False)
@@ -648,13 +648,14 @@ class _Volume(_Object, type_prefix="vo"):
648
648
  req = api_pb2.VolumeGetFile2Request(volume_id=self.object_id, path=path)
649
649
 
650
650
  try:
651
- response = await retry_transient_errors(self._client.stub.VolumeGetFile2, req)
651
+ response = await self._client.stub.VolumeGetFile2(req)
652
652
  except modal.exception.NotFoundError as exc:
653
653
  raise FileNotFoundError(exc.args[0])
654
654
 
655
655
  @retry(n_attempts=5, base_delay=0.1, timeout=None)
656
656
  async def read_block(block_url: str) -> bytes:
657
657
  async with ClientSessionRegistry.get_session().get(block_url) as get_response:
658
+ get_response.raise_for_status()
658
659
  return await get_response.content.read()
659
660
 
660
661
  async def iter_urls() -> AsyncGenerator[str]:
@@ -700,7 +701,7 @@ class _Volume(_Object, type_prefix="vo"):
700
701
  req = api_pb2.VolumeGetFile2Request(volume_id=self.object_id, path=path)
701
702
 
702
703
  try:
703
- response = await retry_transient_errors(self._client.stub.VolumeGetFile2, req)
704
+ response = await self._client.stub.VolumeGetFile2(req)
704
705
  except modal.exception.NotFoundError as exc:
705
706
  raise FileNotFoundError(exc.args[0])
706
707
 
@@ -716,6 +717,7 @@ class _Volume(_Object, type_prefix="vo"):
716
717
  num_bytes_written = 0
717
718
 
718
719
  async with download_semaphore, ClientSessionRegistry.get_session().get(url) as get_response:
720
+ get_response.raise_for_status()
719
721
  async for chunk in get_response.content.iter_any():
720
722
  num_chunk_bytes_written = 0
721
723
 
@@ -749,10 +751,10 @@ class _Volume(_Object, type_prefix="vo"):
749
751
  try:
750
752
  if self._is_v1:
751
753
  req = api_pb2.VolumeRemoveFileRequest(volume_id=self.object_id, path=path, recursive=recursive)
752
- await retry_transient_errors(self._client.stub.VolumeRemoveFile, req)
754
+ await self._client.stub.VolumeRemoveFile(req)
753
755
  else:
754
756
  req = api_pb2.VolumeRemoveFile2Request(volume_id=self.object_id, path=path, recursive=recursive)
755
- await retry_transient_errors(self._client.stub.VolumeRemoveFile2, req)
757
+ await self._client.stub.VolumeRemoveFile2(req)
756
758
  except modal.exception.NotFoundError as exc:
757
759
  raise FileNotFoundError(exc.args[0])
758
760
 
@@ -791,12 +793,12 @@ class _Volume(_Object, type_prefix="vo"):
791
793
  request = api_pb2.VolumeCopyFilesRequest(
792
794
  volume_id=self.object_id, src_paths=src_paths, dst_path=dst_path, recursive=recursive
793
795
  )
794
- await retry_transient_errors(self._client.stub.VolumeCopyFiles, request, base_delay=1)
796
+ await self._client.stub.VolumeCopyFiles(request, retry=Retry(base_delay=1))
795
797
  else:
796
798
  request = api_pb2.VolumeCopyFiles2Request(
797
799
  volume_id=self.object_id, src_paths=src_paths, dst_path=dst_path, recursive=recursive
798
800
  )
799
- await retry_transient_errors(self._client.stub.VolumeCopyFiles2, request, base_delay=1)
801
+ await self._client.stub.VolumeCopyFiles2(request, retry=Retry(base_delay=1))
800
802
 
801
803
  @live_method
802
804
  async def batch_upload(self, force: bool = False) -> "_AbstractVolumeUploadContextManager":
@@ -826,9 +828,7 @@ class _Volume(_Object, type_prefix="vo"):
826
828
 
827
829
  @live_method
828
830
  async def _instance_delete(self):
829
- await retry_transient_errors(
830
- self._client.stub.VolumeDelete, api_pb2.VolumeDeleteRequest(volume_id=self.object_id)
831
- )
831
+ await self._client.stub.VolumeDelete(api_pb2.VolumeDeleteRequest(volume_id=self.object_id))
832
832
 
833
833
  @staticmethod
834
834
  async def delete(name: str, client: Optional[_Client] = None, environment_name: Optional[str] = None):
@@ -857,7 +857,7 @@ class _Volume(_Object, type_prefix="vo"):
857
857
  ):
858
858
  obj = await _Volume.from_name(old_name, environment_name=environment_name).hydrate(client)
859
859
  req = api_pb2.VolumeRenameRequest(volume_id=obj.object_id, name=new_name)
860
- await retry_transient_errors(obj._client.stub.VolumeRename, req)
860
+ await obj._client.stub.VolumeRename(req)
861
861
 
862
862
 
863
863
  Volume = synchronize_api(_Volume)
@@ -958,7 +958,7 @@ class _VolumeUploadContextManager(_AbstractVolumeUploadContextManager):
958
958
  disallow_overwrite_existing_files=not self._force,
959
959
  )
960
960
  try:
961
- await retry_transient_errors(self._client.stub.VolumePutFiles, request, base_delay=1)
961
+ await self._client.stub.VolumePutFiles(request, retry=Retry(base_delay=1))
962
962
  except GRPCError as exc:
963
963
  raise FileExistsError(exc.message) if exc.status == Status.ALREADY_EXISTS else exc
964
964
 
@@ -1018,7 +1018,7 @@ class _VolumeUploadContextManager(_AbstractVolumeUploadContextManager):
1018
1018
  remote_filename = file_spec.mount_filename
1019
1019
  progress_task_id = self._progress_cb(name=remote_filename, size=file_spec.size)
1020
1020
  request = api_pb2.MountPutFileRequest(sha256_hex=file_spec.sha256_hex)
1021
- response = await retry_transient_errors(self._client.stub.MountPutFile, request, base_delay=1)
1021
+ response = await self._client.stub.MountPutFile(request, retry=Retry(base_delay=1))
1022
1022
 
1023
1023
  start_time = time.monotonic()
1024
1024
  if not response.exists:
@@ -1042,7 +1042,7 @@ class _VolumeUploadContextManager(_AbstractVolumeUploadContextManager):
1042
1042
  self._progress_cb(task_id=progress_task_id, complete=True)
1043
1043
 
1044
1044
  while (time.monotonic() - start_time) < VOLUME_PUT_FILE_CLIENT_TIMEOUT:
1045
- response = await retry_transient_errors(self._client.stub.MountPutFile, request2, base_delay=1)
1045
+ response = await self._client.stub.MountPutFile(request2, retry=Retry(base_delay=1))
1046
1046
  if response.exists:
1047
1047
  break
1048
1048
 
@@ -1202,7 +1202,7 @@ class _VolumeUploadContextManager2(_AbstractVolumeUploadContextManager):
1202
1202
  )
1203
1203
 
1204
1204
  try:
1205
- response = await retry_transient_errors(self._client.stub.VolumePutFiles2, request, base_delay=1)
1205
+ response = await self._client.stub.VolumePutFiles2(request, retry=Retry(base_delay=1))
1206
1206
  except GRPCError as exc:
1207
1207
  raise FileExistsError(exc.message) if exc.status == Status.ALREADY_EXISTS else exc
1208
1208
 
@@ -1263,7 +1263,7 @@ async def _put_missing_blocks(
1263
1263
  file_progress.pending_blocks.add(missing_block.block_index)
1264
1264
  task_progress_cb = functools.partial(progress_cb, task_id=file_progress.task_id)
1265
1265
 
1266
- @retry(n_attempts=5, base_delay=0.5, timeout=None)
1266
+ @retry(n_attempts=11, base_delay=0.5, timeout=None)
1267
1267
  async def put_missing_block_attempt(payload: BytesIOSegmentPayload) -> bytes:
1268
1268
  with payload.reset_on_error(subtract_progress=True):
1269
1269
  async with ClientSessionRegistry.get_session().put(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.2.1.dev8
3
+ Version: 1.2.2.dev19
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -1,15 +1,16 @@
1
1
  modal/__init__.py,sha256=WMaRW-2IJRGA9ioNAaBhJYuyLvu-GS01L8wQD90fKBs,2682
2
2
  modal/__main__.py,sha256=45H-GtwzaDfN-1nP4_HYvzN3s7AG_HXR4-ynrsjO_OI,2803
3
3
  modal/_billing.py,sha256=C1jUN9f_1WqozSZAt9EOk1nImXUdiLrgFeeAu3R23cI,3012
4
- modal/_clustered_functions.py,sha256=Sy4Sf_17EO8OL-FUe8LYcm4hrqLyQFCssNhr3p0SroU,3013
4
+ modal/_clustered_functions.py,sha256=7amiOxErtlciWeBJBL2KvaxerUomJpTAJ3qElflFHQA,2884
5
5
  modal/_clustered_functions.pyi,sha256=JmYwAGOLEnD5AF-gYF9O5tu-SgGjeoJz-X1j48b1Ijg,1157
6
- modal/_container_entrypoint.py,sha256=B_fIKKjWposiNsYOePifX7S6cR9hf5LRPhDfVums5O8,27867
7
- modal/_functions.py,sha256=7YbMBWtMMWLFxCaD3MSD-2iU1R7v5HRxfve-vGNzHnE,90991
6
+ modal/_container_entrypoint.py,sha256=zYk5mC8_IMx4kWnyFMRHKOrFRLBWchy6x-py3M8FYEw,28084
7
+ modal/_functions.py,sha256=QCEm1_6l0WSGlF4ICyH580wd8VyFinQRybQVxUXESuM,90416
8
+ modal/_grpc_client.py,sha256=xnrubCsqK8JlbVMLI3_iHuDLmV2rNZjEAQeCDAZl-eE,5558
8
9
  modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
9
10
  modal/_location.py,sha256=joiX-0ZeutEUDTrrqLF1GHXCdVLF-rHzstocbMcd_-k,366
10
11
  modal/_object.py,sha256=gwsLdXb-Ecd8nH8LVCo8oVZPzzdyo9BrN1DjgQmsSuM,11967
11
- modal/_output.py,sha256=sdQqEuWVknHwLPzuz_7eUYqF9TvmQkSfEjm1E__bzbY,26892
12
- modal/_partial_function.py,sha256=mjCt3OdBvcbvLiz90kG1TSFC174XvFkrPXIRAMx-L5Y,37565
12
+ modal/_output.py,sha256=eikFqD82RA8uwF-LLVzO-A9EtmoVLnqg0X5nZE5hdLA,26852
13
+ modal/_partial_function.py,sha256=t0yOVrYrDUdCJt7eVNyBS-atnUtjO56izKB3rDuN17Q,38573
13
14
  modal/_pty.py,sha256=E58MQ8d5-wkbMatRKpQR-G9FdbCRcZGiZxOpGy__VuY,1481
14
15
  modal/_resolver.py,sha256=2RWvm34cNSnbv1v7izJMNZgfvpLDD6LzaBlr0lIrLnY,7364
15
16
  modal/_resources.py,sha256=NMAp0GCLutiZI4GuKSIVnRHVlstoD3hNGUabjTUtzf4,1794
@@ -19,72 +20,72 @@ modal/_tunnel.py,sha256=zTBxBiuH1O22tS1OliAJdIsSmaZS8PlnifS_6S5z-mk,6320
19
20
  modal/_tunnel.pyi,sha256=rvC7USR2BcKkbZIeCJXwf7-UfGE-LPLjKsGNiK7Lxa4,13366
20
21
  modal/_type_manager.py,sha256=DWjgmjYJuOagw2erin506UUbG2H5UzZCFEekS-7hmfA,9087
21
22
  modal/_watcher.py,sha256=K6LYnlmSGQB4tWWI9JADv-tvSvQ1j522FwT71B51CX8,3584
22
- modal/app.py,sha256=tXbc6EO7ZCxphspVuqIOHOr-OKqL7De8vChDTYEAElg,54516
23
+ modal/app.py,sha256=mS2k4d6yC3zDxm2L3U1gK5O70-epWfVRdo72q_9m6eA,54667
23
24
  modal/app.pyi,sha256=AUV5Rp8qQrZJTP2waoKHFY7rYgsXNMYibMcCAQKuSeo,50544
24
25
  modal/billing.py,sha256=zmQ3bcCJlwa4KD1IA_QgdWpm1pn13c-7qfy79iEauYI,195
25
26
  modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
26
- modal/client.py,sha256=kyAIVB3Ay-XKJizQ_1ufUFB__EagV0MLmHJpyYyJ7J0,18636
27
- modal/client.pyi,sha256=xJmCcXA-PosLDtwke2D3FfNQrdt1jVNJ_jGodXMBA8Y,15829
27
+ modal/client.py,sha256=tPzihC7R9WtP56k6dyPKi5GLGdLEHdMA6YUj9Ry5G8o,14409
28
+ modal/client.pyi,sha256=LF-tVjsKrUjYDRLZQIQVfP7wsOo-ktfCsWbTj4LGZ9g,13094
28
29
  modal/cloud_bucket_mount.py,sha256=I2GRXYhOWLIz2kJZjXu75jAm9EJkBNcutGc6jR2ReUw,5928
29
30
  modal/cloud_bucket_mount.pyi,sha256=VuUOipMIHqFXMkD-3g2bsoqpSxV5qswlFHDOqPQzYAo,7405
30
- modal/cls.py,sha256=ZxzivE3fNci4-A5uyBYNAzXMXtdqDg3gnYvgbdy5fhg,40384
31
+ modal/cls.py,sha256=1kxGkqXgAJS6anuWKdbqWx_n0rbXqyFuYJIROeBxNyw,40306
31
32
  modal/cls.pyi,sha256=jJsDPFoqzM4ht-V-e-xEJKJ5TINLF0fYtoBm_UeAW5Y,27281
32
- modal/config.py,sha256=ZvQtKR4vACdvV-sDI-CtGepUGNMpQucwhgkGZ3k6gc0,12869
33
- modal/container_process.py,sha256=Mutkl7sg_WR5zP4oJiWSC-3UdYRqp0zdKi1shZbi-bk,6996
34
- modal/container_process.pyi,sha256=9m-st3hCUlNN1GOTctfPPvIvoLtEl7FbuGWwif5-7YU,6037
35
- modal/dict.py,sha256=XkaxuojMVtcc4bZvCjJcd6DedU5xxfF8H4w-mDzFPCo,21580
33
+ modal/config.py,sha256=xUbw_ETdR7S3guj4dyzqdd9EYwRRht3aGYQRogZbi1o,13050
34
+ modal/container_process.py,sha256=KG2ZkFOWe2KN1b8dFSBLBoW5pWoRxBzJ20MLhDTicJs,16749
35
+ modal/container_process.pyi,sha256=xMKr-VbQsydS8AbhAys9UTpHHnH2QRyINpPtPG7NwmI,8373
36
+ modal/dict.py,sha256=qHu6ZGLwgYWfQig1awWaOeza9EV5g9EexNscq2tGaEs,21317
36
37
  modal/dict.pyi,sha256=deOiwuwZtwXqedC3h19SwoQIWc4mUnDTBM5XkONt48Y,31712
37
- modal/environments.py,sha256=xXYDfgzd20CuFdww_zQ53OB0qANQG-j_ls_fT7mGdoQ,6028
38
+ modal/environments.py,sha256=v_TGina35BlkjG54e3FrEx6zEIKE7w21QoFTNm6u0Ys,5950
38
39
  modal/environments.pyi,sha256=YwI2zClQ5vZHqqKaBJYX2eK4QHRlUuqRlF0lM1JrMOs,3673
39
- modal/exception.py,sha256=o0V93PK8Hcg2YQ2aeOB1Y-qWBw4Gz5ATfyokR8GapuQ,5634
40
- modal/file_io.py,sha256=OSKr77TujcXGJW1iikzYiHckLSmv07QBgBHcxxYEkoI,21456
40
+ modal/exception.py,sha256=HrvKRJO4EMwkoqa77PBeZyrGIgEZ-yqLIA10cqZndqI,5768
41
+ modal/file_io.py,sha256=Whs3QSl3pQbSoLzSRIIWfK4XyP-kwgyZmWgx3bhJ9u0,20933
41
42
  modal/file_io.pyi,sha256=xtO6Glf_BFwDE7QiQQo24QqcMf_Vv-iz7WojcGVlLBU,15932
42
43
  modal/file_pattern_matcher.py,sha256=A_Kdkej6q7YQyhM_2-BvpFmPqJ0oHb54B6yf9VqvPVE,8116
43
44
  modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
44
- modal/functions.pyi,sha256=CMwApS396tdElFrjnV6RuL2DTCz4C3jYzYoq1y_LPUQ,37988
45
+ modal/functions.pyi,sha256=Z6VuukLrjASAgf0kV9I6c09WvP_b2gCujX6f9j2bBaw,37988
45
46
  modal/gpu.py,sha256=Fe5ORvVPDIstSq1xjmM6OoNgLYFWvogP9r5BgmD3hYg,6769
46
- modal/image.py,sha256=HDkOnhIAN8g63a8LTN4J5SjC9ciReFQQJIxTS2z5KFM,107216
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
50
- modal/mount.py,sha256=G7_xhQMZqokgfsaFLMch0YR3fs-OUNqYUm3f4jHTSMQ,33161
47
+ modal/image.py,sha256=SW2QJNZCXpPwLwK5UAjRJexWr1-pUJR6AJJ5OCF7rQI,108048
48
+ modal/image.pyi,sha256=NQ82YbSF_kadH0r4UqBDgHPDHZo5_yD8qNEFJgUzJZM,77956
49
+ modal/io_streams.py,sha256=Lc-id7HvW-ffJKSoN1xQxf37pHARNkr4re2HKyGpKy4,29316
50
+ modal/io_streams.pyi,sha256=P9kvQhXmh9fxQNGI2DtuFnnZ_9MJQ4ZiqOpDP2-QWUU,16746
51
+ modal/mount.py,sha256=UPel5L2JfeOgI96718SSrjJ0dhMOQgnFDJrzpzsZ4A8,33111
51
52
  modal/mount.pyi,sha256=MD_zV2M7eCWxbOpQRjU60aHevN-bmbiywaCX82QoFlw,15380
52
- modal/network_file_system.py,sha256=ZdEIRgdcR-p_ILyw_AecEtPOhhrSWJeADYCtFnhtaHM,13509
53
+ modal/network_file_system.py,sha256=mN26L8Q3jVZjmxSWNKbQHGAIDoZuP1LopVMt5ODqZ1o,13335
53
54
  modal/network_file_system.pyi,sha256=zF4PIaiuIaC4OLQ0YCj1e2O3uepW9-2Jo1T3blc7RVg,15365
54
55
  modal/object.py,sha256=bTeskuY8JFrESjU4_UL_nTwYlBQdOLmVaOX3X6EMxsg,164
55
56
  modal/object.pyi,sha256=qlyVVMezW3XgJe_iqhtzWRSki3Nuk-KrpXc1g-r8ujA,6944
56
57
  modal/output.py,sha256=q4T9uHduunj4NwY-YSwkHGgjZlCXMuJbfQ5UFaAGRAc,1968
57
- modal/parallel_map.py,sha256=E5UYVszgLR8ppOUOqCgkqgn5A93yVMvJ5YmgGgrjyQo,68991
58
- modal/parallel_map.pyi,sha256=NZrtfZljig59hcMKU7Cz8lYZZFOiwK9l7oWrBtX6Oy8,15838
58
+ modal/parallel_map.py,sha256=VAfhkgCKFXtpba01Dvq7kc-xg5nlP-AdvmJW0LoyfD8,68670
59
+ modal/parallel_map.pyi,sha256=3sbWnV2ijA2KCh4BV8oNUJMd7ryemJu7NvwsqyUlvho,15588
59
60
  modal/partial_function.py,sha256=aIdlGfTjjgqY6Fpr-biCjvRU9W542_S5N2xkNN_rYGM,1127
60
- modal/partial_function.pyi,sha256=lqqOzZ9-QvHTDWKQ_oAYYOvsXgTOBKhO9u-RI98JbUk,13986
61
+ modal/partial_function.pyi,sha256=M7aHV6sbCc7R28D4Tk6Agr39m6R0emrXvm8IfWflt1o,14023
61
62
  modal/proxy.py,sha256=CQydu_NPDgApN2GLdd7rrcg8PM-pXyFdVYcTaGMBRCQ,1491
62
63
  modal/proxy.pyi,sha256=yWGWwADCRGrC2w81B7671UTH4Uv3HMZKy5vVqlJUZoA,1417
63
64
  modal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
- modal/queue.py,sha256=aaH3SNWeh_HjEyVUtFiN345v0GJFoucJ6aNDrDggWZQ,25775
65
+ modal/queue.py,sha256=3IyfLRp_G_sg4-Wr7cplnt3KSjJkL-H3U0asfTacd7I,25536
65
66
  modal/queue.pyi,sha256=mFu7GFFVFNLU9VZshnfekEsb-ABgpjdhJ07KXHvdv3A,37256
66
67
  modal/retries.py,sha256=IvNLDM0f_GLUDD5VgEDoN09C88yoxSrCquinAuxT1Sc,5205
67
- modal/runner.py,sha256=b_oG8LU8pT3NByfhwLJfYJ0RdNbnlBd-Zcds-J1JRYU,25197
68
+ modal/runner.py,sha256=GP-8dU5J8ZSAVk1U8UtZ0KCxfq3i8Y49hX6BzVJwyaU,25053
68
69
  modal/runner.pyi,sha256=DV3Z7h0owgRyOu9W5KU5O3UbRftX99KGrZQId91fpsU,8671
69
70
  modal/running_app.py,sha256=v61mapYNV1-O-Uaho5EfJlryMLvIT9We0amUOSvSGx8,1188
70
- modal/sandbox.py,sha256=R1WOFDTmg_SiG7NIEbzQMeTYHwLvX9r3j9lpINhIufc,45970
71
- modal/sandbox.pyi,sha256=elVE1xEy_ZhD009oNPnCwlZi4tK-RUb1qAoxkVteG9E,50713
71
+ modal/sandbox.py,sha256=NbMS4iLQvz0moFZEcndXJ1OwpwVzXJDnoyMVugNrb3U,50295
72
+ modal/sandbox.pyi,sha256=VqGO59NZX5fSU1tnA_g0pAd7eq6GvV6lNtC8TH9Xlo8,57478
72
73
  modal/schedule.py,sha256=ng0g0AqNY5GQI9KhkXZQ5Wam5G42glbkqVQsNpBtbDE,3078
73
74
  modal/scheduler_placement.py,sha256=BAREdOY5HzHpzSBqt6jDVR6YC_jYfHMVqOzkyqQfngU,1235
74
- modal/secret.py,sha256=ThwP-PkwUZwiYkygqumh15n8P_77-N5ZyRWLc6I3r28,18323
75
+ modal/secret.py,sha256=ZSI7OAT8YXWQn4gmidH1bwjh8h7z68jxv0of46xiam8,18173
75
76
  modal/secret.pyi,sha256=2dj8FPBlAJodp_yvwwzV0_Q1VevMNpKxri0rDvlIn4U,20493
76
77
  modal/serving.py,sha256=3I3WBeVbzZY258u9PXBCW_dZBgypq3OhwBuTVvlgubE,4423
77
78
  modal/serving.pyi,sha256=YfixTaWikyYpwhnNxCHMZnDDQiPmV1xJ87QF91U_WGU,1924
78
- modal/snapshot.py,sha256=E3oxYQkYVRB_LeFBfmUV1Y6vHz8-azXJfC4x7A1QKnI,1455
79
+ modal/snapshot.py,sha256=DRKSQYwwUonh5Yt3lYUi1P3caJKc-gz4ST2ER7aZlrU,1347
79
80
  modal/snapshot.pyi,sha256=0q83hlmWxAhDu8xwZyL5VmYh0i8Tigf7S60or2k30L8,1682
80
81
  modal/stream_type.py,sha256=A6320qoAAWhEfwOCZfGtymQTu5AfLfJXXgARqooTPvY,417
81
- modal/token_flow.py,sha256=GWpar0gANs71vm9Bd_Cj87UG1K3ljTURbkEjG3JLsrY,7616
82
+ modal/token_flow.py,sha256=tLvBE9OT50p8AnYYh4b5MvBMQc1vV1-6C0GsmyFDfxw,7626
82
83
  modal/token_flow.pyi,sha256=eirYjyqbRiT3GCKMIPHJPpkvBTu8WxDKqSHehWaJI_4,2533
83
- modal/volume.py,sha256=IctU4M2bv_uw-0KuKqaN-xXyXEeNECD2QVQ_DUqrklA,52267
84
+ modal/volume.py,sha256=Fpx6J3OxkIsaVvzzQdt0EdoJjXjP4ahgV8_Piw22r20,51984
84
85
  modal/volume.pyi,sha256=WZGdwB51qvH5E7d6qS7sNCsscyuHsKUHFyyiZaQyvw8,53212
85
86
  modal/_runtime/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
86
87
  modal/_runtime/asgi.py,sha256=AOcduIlijmlxhXVWo7AIUhigo-bqm6nDkHj4Q4JLy6o,22607
87
- modal/_runtime/container_io_manager.py,sha256=Q3JUEYrsfWsG0DuuVUiYXAUccfb8RhM8ExQEQJXR0nc,52200
88
+ modal/_runtime/container_io_manager.py,sha256=MGURW9xa89j6GXzLlZDe9onMvfb-E69HrTyJUPaVXjw,52051
88
89
  modal/_runtime/container_io_manager.pyi,sha256=GDNLirCcPMRc6gckInYKmGmJZY3LNcgUVXKftt9P9jI,23493
89
90
  modal/_runtime/execution_context.py,sha256=AYrNQRHHXEqX2MwMf8zxelKZnYf25RE_B-NRLWf93n8,3521
90
91
  modal/_runtime/execution_context.pyi,sha256=FVzakehz72ndL-ufe8-EC7TM4IHO_MEBcAdgWuU4W9k,2426
@@ -93,26 +94,27 @@ modal/_runtime/telemetry.py,sha256=T1RoAGyjBDr1swiM6pPsGRSITm7LI5FDK18oNXxY08U,5
93
94
  modal/_runtime/user_code_imports.py,sha256=1MlOgw810aj0MeDvFPvHBIz-aHd7jUX6dwRfIcM3-KE,16498
94
95
  modal/_utils/__init__.py,sha256=waLjl5c6IPDhSsdWAm9Bji4e2PVxamYABKAze6CHVXY,28
95
96
  modal/_utils/app_utils.py,sha256=88BT4TPLWfYAQwKTHcyzNQRHg8n9B-QE2UyJs96iV-0,108
96
- modal/_utils/async_utils.py,sha256=7uA4KJV7XRgak5nXZSGRE-RN1h91UOyNwK6v_ilUQMQ,29737
97
- modal/_utils/auth_token_manager.py,sha256=i-kfLgDd4BMAw6wouO5aKfNGHo27VAZoVOsbEWqDr2I,5252
98
- modal/_utils/blob_utils.py,sha256=bmPPHfLy8Kdna8e2xS3lvKwnN5pJUUt_rN39kVIYPFM,22874
97
+ modal/_utils/async_utils.py,sha256=j2DEgAvYrp89tni0_oS-YotT8npvTlY97DExfiUHG4E,30057
98
+ modal/_utils/auth_token_manager.py,sha256=QsDokl1c1dN9m6Z9N-Se-8cY3laphByjJtNdRXUTieI,5151
99
+ modal/_utils/blob_utils.py,sha256=NoAWDqYQsqAjievWmH5mCFSXA6XxQStDt9otT-Nh7_g,22755
99
100
  modal/_utils/bytes_io_segment_payload.py,sha256=vaXPq8b52-x6G2hwE7SrjS58pg_aRm7gV3bn3yjmTzQ,4261
100
101
  modal/_utils/deprecation.py,sha256=-Bgg7jZdcJU8lROy18YyVnQYbM8hue-hVmwJqlWAGH0,5504
101
102
  modal/_utils/docker_utils.py,sha256=h1uETghR40mp_y3fSWuZAfbIASH1HMzuphJHghAL6DU,3722
102
- modal/_utils/function_utils.py,sha256=sXYXLpkGVGChnR-wFGu11-ovW640wePBvcc7f9aTUe8,28505
103
+ modal/_utils/function_utils.py,sha256=B5dAhcOM6SK3H-iwbrJjZ7XbjpweFd3YfmuFS26R8fQ,28671
103
104
  modal/_utils/git_utils.py,sha256=qtUU6JAttF55ZxYq51y55OR58B0tDPZsZWK5dJe6W5g,3182
104
105
  modal/_utils/grpc_testing.py,sha256=H1zHqthv19eGPJz2HKXDyWXWGSqO4BRsxah3L5Xaa8A,8619
105
- modal/_utils/grpc_utils.py,sha256=1dQgTvdHG9KSfyVTc26HhKjGnIDJpdDEJ0xZARklOrU,10205
106
+ modal/_utils/grpc_utils.py,sha256=9KOQ3JW6DEmsi0lqve0YkTMU23u9AmWIyvLWJVA3TKc,11515
106
107
  modal/_utils/hash_utils.py,sha256=zg3J6OGxTFGSFri1qQ12giDz90lWk8bzaxCTUCRtiX4,3034
107
108
  modal/_utils/http_utils.py,sha256=yeTFsXYr0rYMEhB7vBP7audG9Uc7OLhzKBANFDZWVt0,2451
108
109
  modal/_utils/jwt_utils.py,sha256=fxH9plyrbAemTbjSsQtzIdDXE9QXxvMC4DiUZ16G0aA,1360
109
110
  modal/_utils/logger.py,sha256=NgbMKFT9chYYt_TU01DdIior5ByYr2gZtrWIk1SFRLc,1782
110
- modal/_utils/mount_utils.py,sha256=gGCgIlWwYiJbUtgFY2GJcWYismYvazbMAeUOgf7NhFQ,3205
111
+ modal/_utils/mount_utils.py,sha256=3v6wbSvEjOhIlnLGbyXKOzdoXaG-FwNAZ_Rr0io_v2o,4113
111
112
  modal/_utils/name_utils.py,sha256=CIQL0Y4z47tq0rfNL2Kdo5dxsGrxoN2hR9Ko0HapeE4,2517
112
113
  modal/_utils/package_utils.py,sha256=LcL2olGN4xaUzu2Tbv-C-Ft9Qp6bsLxEfETOAVd-mjU,2073
113
114
  modal/_utils/pattern_utils.py,sha256=ZUffaECfe2iYBhH6cvCB-0-UWhmEBTZEl_TwG_So3ag,6714
114
115
  modal/_utils/rand_pb_testing.py,sha256=mmVPk1rZldHwHZx0DnHTuHQlRLAiiAYdxjwEJpxvT9c,3900
115
116
  modal/_utils/shell_utils.py,sha256=hWHzv730Br2Xyj6cGPiMZ-198Z3RZuOu3pDXhFSZ22c,2157
117
+ modal/_utils/task_command_router_client.py,sha256=ZoajSdIyAv_YXxpyY0jNsr_543FjTbSzyVONmaETqkw,23531
116
118
  modal/_utils/time_utils.py,sha256=43tpFVwT7ykOjlETIFLVt9auMsRZqYYRYBEKxGCrRSA,1212
117
119
  modal/_vendor/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
118
120
  modal/_vendor/a2wsgi_wsgi.py,sha256=Q1AsjpV_Q_vzQsz_cSqmP9jWzsGsB-ARFU6vpQYml8k,21878
@@ -130,19 +132,19 @@ modal/cli/__init__.py,sha256=6FRleWQxBDT19y7OayO4lBOzuL6Bs9r0rLINYYYbHwQ,769
130
132
  modal/cli/_download.py,sha256=_Q_CG1Qb4cjVSAwHGGPOPoNTsmK9gHvF-HNWCNdFjaY,4900
131
133
  modal/cli/_traceback.py,sha256=IKj9xtc6LjAxyhGJWolNIXEX3MhAIulnRqywZNOFmkU,7324
132
134
  modal/cli/app.py,sha256=rbuAG92my-1eZN0olk6p2eD4oBnyBliUsrCOUW-U-9k,7832
133
- modal/cli/cluster.py,sha256=MMdFXqyOOeNO7P2VIUN78xKJLvesLIy_28Dt56XEXhM,3307
134
- modal/cli/config.py,sha256=lhp2Pq4RbTDhaZJ-ZJvhrMqJj8c-WjuRX6gjE3TrvXc,1691
135
- modal/cli/container.py,sha256=9Ti-TIZ6vjDSmn9mk9h6SRwyhkQjtwirBN18LjpLyvE,3719
135
+ modal/cli/cluster.py,sha256=BLcKDpwpDmlqE2UC4V0qNpJKiQ-ZXfI9g_SE7u6vnIU,3347
136
+ modal/cli/config.py,sha256=7xgglsSf5pKfE7ZLz-uZf9S11NBuNbUkUbcZ5nFk8Y0,1721
137
+ modal/cli/container.py,sha256=meFH-T_Bdyd7a9HjClzGCgYuPq0KhWs_HUUsSW12HjM,3686
136
138
  modal/cli/dict.py,sha256=YAJtiv41YcCd5Fqam3hXCNTs4Y0yOgGR_i6RfQNSAFM,4572
137
- modal/cli/entry_point.py,sha256=F06p54rPOs1xAUeYW76RaimFOgLW_I17RCvNwfZRqPc,4747
139
+ modal/cli/entry_point.py,sha256=7nGM8zob80L5iyLCf_TEmjyinKojquW3_O_V0wDnK-U,4809
138
140
  modal/cli/environment.py,sha256=LGBq8RVQjfBH3EWz8QgmYe19UO66JKSDNxOXMUjw7JM,4285
139
141
  modal/cli/import_refs.py,sha256=X59Z5JwgliRO6C-cIFto2Pr7o3SwlZMKQPKA0aI4ZK4,13927
140
- modal/cli/launch.py,sha256=VARim2SCzgtI1ZuxQ6JgTTtvFwGA5czCwQZQHWC8Zcc,6498
141
- modal/cli/network_file_system.py,sha256=I9IqTpVfk32uKYwGd8LTldkQx6UKYrQYNZ26q7Ab5Oo,8126
142
+ modal/cli/launch.py,sha256=oJKGWjTJiXQTdw-SUiCmCQ76bY_8nlzJMUMu0zew0zs,6435
143
+ modal/cli/network_file_system.py,sha256=MO4YHBdwokXaVv95W4ucmxvi-Q2IpiMrxWLOBhEED5c,8029
142
144
  modal/cli/profile.py,sha256=g8X6tFFK9ccKyu2he9Yu19WLSLNdztzECgmIV__XJFs,3257
143
- modal/cli/queues.py,sha256=5vKtKQ7YExdaxNPYZ0g5suU9sX0-F5h0zy0qBV-hN80,6140
145
+ modal/cli/queues.py,sha256=-vqEHbbc5XHT0Qbzc4ttQtAGtKzoaeJ8o9B9-WlyMhU,6057
144
146
  modal/cli/run.py,sha256=3_UF2Vdye_KEgY8JzBBomt0i944cCJx96RfNbeAEPDo,25783
145
- modal/cli/secret.py,sha256=-Nnk3fq1IEzMtC9VUn61AKmdvZzZ9XQyiKVgQYRpajo,8127
147
+ modal/cli/secret.py,sha256=zkCztov8c4x8CI8G0EoyieUfv9XLQQtVXV8xeMLK-Os,8044
146
148
  modal/cli/token.py,sha256=NAmQzKBfEHkcldWKeFxAVIqQBoo1RTp7_A4yc7-8qM0,1911
147
149
  modal/cli/utils.py,sha256=aUXDU9_VgcJrGaGRy4bGf4dqwKYXHCpoO27x4m_bpuo,3293
148
150
  modal/cli/volume.py,sha256=wJchJyIEw9lTKiNUNTgR4I3DPYHYJBu50gU_SsecP0w,10877
@@ -151,11 +153,11 @@ modal/cli/programs/launch_instance_ssh.py,sha256=GrwK_Vy8-7B4x5a6AqFaF7lqNVgu75J
151
153
  modal/cli/programs/run_jupyter.py,sha256=IJw8nds8Cjl9j4dxBqMGxhz-bIyVX0kle7jbt8HFOhM,2688
152
154
  modal/cli/programs/run_marimo.py,sha256=QlCGPkwQ0XLajt2LtujR_BGsRV1AZ3OCUgZxkkM1lug,2893
153
155
  modal/cli/programs/vscode.py,sha256=E1aJPU7b8RWWj-JX71DifsCoLYsCAnre7lATiBJjUms,3386
154
- 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/__init__.py,sha256=sCwNbBLcR2t-jhrpwtMAPGKt2WNqXBg0xkNZdyB-6CE,13940
157
+ modal/experimental/flash.py,sha256=9Xk3W2tMobiP6QknnPUDeOnWf7aE89a1VZ2EByQYmEM,26662
158
+ modal/experimental/flash.pyi,sha256=uwinKAYxpunNNfBj58FP88DXb535Qik4F6tnJKPAIwQ,14696
157
159
  modal/experimental/ipython.py,sha256=TrCfmol9LGsRZMeDoeMPx3Hv3BFqQhYnmD_iH0pqdhk,2904
158
- modal-1.2.1.dev8.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
160
+ modal-1.2.2.dev19.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
159
161
  modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
160
162
  modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
161
163
  modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
@@ -163,18 +165,18 @@ modal_docs/mdmd/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,2
163
165
  modal_docs/mdmd/mdmd.py,sha256=tUTImNd4UMFk1opkaw8J672gX8AkBO5gbY2S_NMxsxs,7140
164
166
  modal_docs/mdmd/signatures.py,sha256=XJaZrK7Mdepk5fdX51A8uENiLFNil85Ud0d4MH8H5f0,3218
165
167
  modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
166
- modal_proto/api.proto,sha256=cq6aCHQ0P2oP4zMBytzc95n_l3W4ahysMd3OSgPuHhk,109531
167
- modal_proto/api_grpc.py,sha256=Kgv6E88imUNNWyOA0foC1NEzgPWTXW4mJ3IKg_f0Dek,136233
168
- modal_proto/api_pb2.py,sha256=5pHQKBLPP8yFHffqeYBwRrF1y9bB4G5M07HDQtpVPps,382801
169
- modal_proto/api_pb2.pyi,sha256=n09823GzmM3S8SWjWCmXMPgoqfXPRNOSTpIujVwNznc,533697
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
168
+ modal_proto/api.proto,sha256=mbijJX4tYHF9LcpJniYGpIhThdlawC0p-ORWru8NK30,108696
169
+ modal_proto/api_grpc.py,sha256=vwC-GjejDKWbG5jRN3rkU8WBSqQ8Pdj-T2E2xAECAUw,134411
170
+ modal_proto/api_pb2.py,sha256=uYJBEWhrDy0hS16LaWqEtWRJPp3LK4qr1HNAQTmQ0bE,379710
171
+ modal_proto/api_pb2.pyi,sha256=HSd6yyvy_479dqcI4_6BvD_djGW-FkORH2iWpxclyvE,531472
172
+ modal_proto/api_pb2_grpc.py,sha256=Hqw9jcbhpr-W6jsfog_tGU55ouZjITxGvA-DGNBqOLA,289714
173
+ modal_proto/api_pb2_grpc.pyi,sha256=QLJ58ANCx147HeGJva58h0MTCLIDs9JmVjrx8bDdwlg,67776
174
+ modal_proto/modal_api_grpc.py,sha256=MqaBZB2ZqYj6XTIgI_p5dOPjt9gKT4pAJNd_WXR3W84,21295
173
175
  modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
174
- modal_proto/sandbox_router.proto,sha256=9qxe4PYQAJXrznPhMMdBI0SNbWeCPKVDRkTnWFAsaPc,5357
176
+ modal_proto/sandbox_router.proto,sha256=o6LZWekz2h7uAhBlHcu_EqXnc5ptxm-4j_ZUFVGAJFk,5161
175
177
  modal_proto/sandbox_router_grpc.py,sha256=27daOTX2N5hADDG-5Qnn4Yj3VfekyJwrDUkrQ12mPuU,5004
176
178
  modal_proto/sandbox_router_pb2.py,sha256=-AuG6ZRjGDjKgS1J4nSleqkS1W0HgpLjs7ahPnYwUHc,10860
177
- modal_proto/sandbox_router_pb2.pyi,sha256=Ihf7LHmh0V5XfMHwYQobZiQ1_3xPoDJgIueyUxC4fMQ,15088
179
+ modal_proto/sandbox_router_pb2.pyi,sha256=9KzzS0-goV3p12hWZrLUHGzZEgrzpa4AazEUOd_xK9g,14899
178
180
  modal_proto/sandbox_router_pb2_grpc.py,sha256=8kPFo84rpRHfeRdZuHyoWuuIAphGmjM0s3ygGJSBVck,10006
179
181
  modal_proto/sandbox_router_pb2_grpc.pyi,sha256=iAr1ornlIEYP7pfrFMrw91-F3PNs7amH6z6J2oCwYxk,3276
180
182
  modal_proto/task_command_router.proto,sha256=xAVsFyIff6Yvp-PoS3kwyag2G73tBht2KtF4CWKeewI,5000
@@ -183,10 +185,10 @@ modal_proto/task_command_router_pb2.py,sha256=_pD2ZpU0bNzhwBdzmLoLyLtAtftI_Agxwn
183
185
  modal_proto/task_command_router_pb2.pyi,sha256=EyDgXPLr7alqjXYERV8w_MPuO404x0uCppmSkrfE9IE,14589
184
186
  modal_proto/task_command_router_pb2_grpc.py,sha256=uEQ0HdrCp8v-9bB5yIic9muA8spCShLHY6Bz9cCgOUE,10114
185
187
  modal_proto/task_command_router_pb2_grpc.pyi,sha256=s3Yxsrawdj4nr8vqQqsAxyX6ilWaGbdECy425KKbLIA,3301
186
- modal_version/__init__.py,sha256=BGT-zG4jbs-VPlDeSA13G_diAPSM3dNIBl_5lJOh-4w,120
188
+ modal_version/__init__.py,sha256=rAQMUy4uHHGCIGmPr3JAcoeSK-H_scIgJvE9xXrtEPc,121
187
189
  modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
188
- modal-1.2.1.dev8.dist-info/METADATA,sha256=gfahBhON2zAnVUbV8XvOE3cuXb3nukFnV9mOuVwiWBs,2483
189
- modal-1.2.1.dev8.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
190
- modal-1.2.1.dev8.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
191
- modal-1.2.1.dev8.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
192
- modal-1.2.1.dev8.dist-info/RECORD,,
190
+ modal-1.2.2.dev19.dist-info/METADATA,sha256=ASbe3swD5rqN8ld4oJBXmozVxfHT1GhGGxSOPUacnLw,2484
191
+ modal-1.2.2.dev19.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
192
+ modal-1.2.2.dev19.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
193
+ modal-1.2.2.dev19.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
194
+ modal-1.2.2.dev19.dist-info/RECORD,,
modal_proto/api.proto CHANGED
@@ -857,6 +857,7 @@ message CloudBucketMount {
857
857
  optional string bucket_endpoint_url = 7;
858
858
  optional string key_prefix = 8;
859
859
  optional string oidc_auth_role_arn = 9;
860
+ bool force_path_style = 10;
860
861
  }
861
862
 
862
863
  message ClusterGetRequest {
@@ -2461,6 +2462,7 @@ message ProxyAddIpResponse {
2461
2462
  message ProxyCreateRequest {
2462
2463
  string name = 1;
2463
2464
  string environment_name = 2;
2465
+ string region = 3;
2464
2466
  }
2465
2467
 
2466
2468
  message ProxyCreateResponse {
@@ -2757,20 +2759,6 @@ message SandboxCreateResponse {
2757
2759
  string sandbox_id = 1;
2758
2760
  }
2759
2761
 
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
2762
  message SandboxGetFromNameRequest {
2775
2763
  string sandbox_name = 1;
2776
2764
  string environment_name = 2;
@@ -3157,14 +3145,6 @@ message TaskCurrentInputsResponse {
3157
3145
  repeated string input_ids = 1;
3158
3146
  }
3159
3147
 
3160
- message TaskGetAutoscalingMetricsRequest {
3161
- string task_id = 1;
3162
- }
3163
-
3164
- message TaskGetAutoscalingMetricsResponse {
3165
- AutoscalingMetrics metrics = 1;
3166
- }
3167
-
3168
3148
  // Used to get a JWT and URL for direct access to a task command router
3169
3149
  // running on the modal-worker, so the client can issue exec commands (and other
3170
3150
  // operations as they become available) directly to the worker.
@@ -3754,7 +3734,6 @@ service ModalClient {
3754
3734
  // Sandboxes
3755
3735
  rpc SandboxCreate(SandboxCreateRequest) returns (SandboxCreateResponse);
3756
3736
  rpc SandboxCreateConnectToken(SandboxCreateConnectTokenRequest) returns (SandboxCreateConnectTokenResponse);
3757
- rpc SandboxGetCommandRouterAccess(SandboxGetCommandRouterAccessRequest) returns (SandboxGetCommandRouterAccessResponse);
3758
3737
  rpc SandboxGetFromName(SandboxGetFromNameRequest) returns (SandboxGetFromNameResponse);
3759
3738
  rpc SandboxGetLogs(SandboxGetLogsRequest) returns (stream TaskLogsBatch);
3760
3739
  rpc SandboxGetResourceUsage(SandboxGetResourceUsageRequest) returns (SandboxGetResourceUsageResponse);
@@ -3793,7 +3772,6 @@ service ModalClient {
3793
3772
  // Tasks
3794
3773
  rpc TaskClusterHello(TaskClusterHelloRequest) returns (TaskClusterHelloResponse);
3795
3774
  rpc TaskCurrentInputs(google.protobuf.Empty) returns (TaskCurrentInputsResponse);
3796
- rpc TaskGetAutoscalingMetrics(TaskGetAutoscalingMetricsRequest) returns (TaskGetAutoscalingMetricsResponse); // Used for flash autoscaling
3797
3775
  rpc TaskGetCommandRouterAccess(TaskGetCommandRouterAccessRequest) returns (TaskGetCommandRouterAccessResponse);
3798
3776
  rpc TaskList(TaskListRequest) returns (TaskListResponse);
3799
3777
  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',