modal 1.0.6.dev58__py3-none-any.whl → 1.2.3.dev7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of modal might be problematic. Click here for more details.

Files changed (147) hide show
  1. modal/__main__.py +3 -4
  2. modal/_billing.py +80 -0
  3. modal/_clustered_functions.py +7 -3
  4. modal/_clustered_functions.pyi +4 -2
  5. modal/_container_entrypoint.py +41 -49
  6. modal/_functions.py +424 -195
  7. modal/_grpc_client.py +171 -0
  8. modal/_load_context.py +105 -0
  9. modal/_object.py +68 -20
  10. modal/_output.py +58 -45
  11. modal/_partial_function.py +36 -11
  12. modal/_pty.py +7 -3
  13. modal/_resolver.py +21 -35
  14. modal/_runtime/asgi.py +4 -3
  15. modal/_runtime/container_io_manager.py +301 -186
  16. modal/_runtime/container_io_manager.pyi +70 -61
  17. modal/_runtime/execution_context.py +18 -2
  18. modal/_runtime/execution_context.pyi +4 -1
  19. modal/_runtime/gpu_memory_snapshot.py +170 -63
  20. modal/_runtime/user_code_imports.py +28 -58
  21. modal/_serialization.py +57 -1
  22. modal/_utils/async_utils.py +33 -12
  23. modal/_utils/auth_token_manager.py +2 -5
  24. modal/_utils/blob_utils.py +110 -53
  25. modal/_utils/function_utils.py +49 -42
  26. modal/_utils/grpc_utils.py +80 -50
  27. modal/_utils/mount_utils.py +26 -1
  28. modal/_utils/name_utils.py +17 -3
  29. modal/_utils/task_command_router_client.py +536 -0
  30. modal/_utils/time_utils.py +34 -6
  31. modal/app.py +219 -83
  32. modal/app.pyi +229 -56
  33. modal/billing.py +5 -0
  34. modal/{requirements → builder}/2025.06.txt +1 -0
  35. modal/{requirements → builder}/PREVIEW.txt +1 -0
  36. modal/cli/_download.py +19 -3
  37. modal/cli/_traceback.py +3 -2
  38. modal/cli/app.py +4 -4
  39. modal/cli/cluster.py +15 -7
  40. modal/cli/config.py +5 -3
  41. modal/cli/container.py +7 -6
  42. modal/cli/dict.py +22 -16
  43. modal/cli/entry_point.py +12 -5
  44. modal/cli/environment.py +5 -4
  45. modal/cli/import_refs.py +3 -3
  46. modal/cli/launch.py +102 -5
  47. modal/cli/network_file_system.py +9 -13
  48. modal/cli/profile.py +3 -2
  49. modal/cli/programs/launch_instance_ssh.py +94 -0
  50. modal/cli/programs/run_jupyter.py +1 -1
  51. modal/cli/programs/run_marimo.py +95 -0
  52. modal/cli/programs/vscode.py +1 -1
  53. modal/cli/queues.py +57 -26
  54. modal/cli/run.py +58 -16
  55. modal/cli/secret.py +48 -22
  56. modal/cli/utils.py +3 -4
  57. modal/cli/volume.py +28 -25
  58. modal/client.py +13 -116
  59. modal/client.pyi +9 -91
  60. modal/cloud_bucket_mount.py +5 -3
  61. modal/cloud_bucket_mount.pyi +5 -1
  62. modal/cls.py +130 -102
  63. modal/cls.pyi +45 -85
  64. modal/config.py +29 -10
  65. modal/container_process.py +291 -13
  66. modal/container_process.pyi +95 -32
  67. modal/dict.py +282 -63
  68. modal/dict.pyi +423 -73
  69. modal/environments.py +15 -27
  70. modal/environments.pyi +5 -15
  71. modal/exception.py +8 -0
  72. modal/experimental/__init__.py +143 -38
  73. modal/experimental/flash.py +247 -78
  74. modal/experimental/flash.pyi +137 -9
  75. modal/file_io.py +14 -28
  76. modal/file_io.pyi +2 -2
  77. modal/file_pattern_matcher.py +25 -16
  78. modal/functions.pyi +134 -61
  79. modal/image.py +255 -86
  80. modal/image.pyi +300 -62
  81. modal/io_streams.py +436 -126
  82. modal/io_streams.pyi +236 -171
  83. modal/mount.py +62 -157
  84. modal/mount.pyi +45 -172
  85. modal/network_file_system.py +30 -53
  86. modal/network_file_system.pyi +16 -76
  87. modal/object.pyi +42 -8
  88. modal/parallel_map.py +821 -113
  89. modal/parallel_map.pyi +134 -0
  90. modal/partial_function.pyi +4 -1
  91. modal/proxy.py +16 -7
  92. modal/proxy.pyi +10 -2
  93. modal/queue.py +263 -61
  94. modal/queue.pyi +409 -66
  95. modal/runner.py +112 -92
  96. modal/runner.pyi +45 -27
  97. modal/sandbox.py +451 -124
  98. modal/sandbox.pyi +513 -67
  99. modal/secret.py +291 -67
  100. modal/secret.pyi +425 -19
  101. modal/serving.py +7 -11
  102. modal/serving.pyi +7 -8
  103. modal/snapshot.py +11 -8
  104. modal/token_flow.py +4 -4
  105. modal/volume.py +344 -98
  106. modal/volume.pyi +464 -68
  107. {modal-1.0.6.dev58.dist-info → modal-1.2.3.dev7.dist-info}/METADATA +9 -8
  108. modal-1.2.3.dev7.dist-info/RECORD +195 -0
  109. modal_docs/mdmd/mdmd.py +11 -1
  110. modal_proto/api.proto +399 -67
  111. modal_proto/api_grpc.py +241 -1
  112. modal_proto/api_pb2.py +1395 -1000
  113. modal_proto/api_pb2.pyi +1239 -79
  114. modal_proto/api_pb2_grpc.py +499 -4
  115. modal_proto/api_pb2_grpc.pyi +162 -14
  116. modal_proto/modal_api_grpc.py +175 -160
  117. modal_proto/sandbox_router.proto +145 -0
  118. modal_proto/sandbox_router_grpc.py +105 -0
  119. modal_proto/sandbox_router_pb2.py +149 -0
  120. modal_proto/sandbox_router_pb2.pyi +333 -0
  121. modal_proto/sandbox_router_pb2_grpc.py +203 -0
  122. modal_proto/sandbox_router_pb2_grpc.pyi +75 -0
  123. modal_proto/task_command_router.proto +144 -0
  124. modal_proto/task_command_router_grpc.py +105 -0
  125. modal_proto/task_command_router_pb2.py +149 -0
  126. modal_proto/task_command_router_pb2.pyi +333 -0
  127. modal_proto/task_command_router_pb2_grpc.py +203 -0
  128. modal_proto/task_command_router_pb2_grpc.pyi +75 -0
  129. modal_version/__init__.py +1 -1
  130. modal-1.0.6.dev58.dist-info/RECORD +0 -183
  131. modal_proto/modal_options_grpc.py +0 -3
  132. modal_proto/options.proto +0 -19
  133. modal_proto/options_grpc.py +0 -3
  134. modal_proto/options_pb2.py +0 -35
  135. modal_proto/options_pb2.pyi +0 -20
  136. modal_proto/options_pb2_grpc.py +0 -4
  137. modal_proto/options_pb2_grpc.pyi +0 -7
  138. /modal/{requirements → builder}/2023.12.312.txt +0 -0
  139. /modal/{requirements → builder}/2023.12.txt +0 -0
  140. /modal/{requirements → builder}/2024.04.txt +0 -0
  141. /modal/{requirements → builder}/2024.10.txt +0 -0
  142. /modal/{requirements → builder}/README.md +0 -0
  143. /modal/{requirements → builder}/base-images.json +0 -0
  144. {modal-1.0.6.dev58.dist-info → modal-1.2.3.dev7.dist-info}/WHEEL +0 -0
  145. {modal-1.0.6.dev58.dist-info → modal-1.2.3.dev7.dist-info}/entry_points.txt +0 -0
  146. {modal-1.0.6.dev58.dist-info → modal-1.2.3.dev7.dist-info}/licenses/LICENSE +0 -0
  147. {modal-1.0.6.dev58.dist-info → modal-1.2.3.dev7.dist-info}/top_level.txt +0 -0
modal_proto/api_grpc.py CHANGED
@@ -9,9 +9,9 @@ import grpclib.client
9
9
  if typing.TYPE_CHECKING:
10
10
  import grpclib.server
11
11
 
12
- import modal_proto.options_pb2
13
12
  import google.protobuf.empty_pb2
14
13
  import google.protobuf.struct_pb2
14
+ import google.protobuf.timestamp_pb2
15
15
  import google.protobuf.wrappers_pb2
16
16
  import modal_proto.api_pb2
17
17
 
@@ -54,6 +54,10 @@ class ModalClientBase(abc.ABC):
54
54
  async def AppGetOrCreate(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.AppGetOrCreateRequest, modal_proto.api_pb2.AppGetOrCreateResponse]') -> None:
55
55
  pass
56
56
 
57
+ @abc.abstractmethod
58
+ async def AppGetTags(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.AppGetTagsRequest, modal_proto.api_pb2.AppGetTagsResponse]') -> None:
59
+ pass
60
+
57
61
  @abc.abstractmethod
58
62
  async def AppHeartbeat(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.AppHeartbeatRequest, google.protobuf.empty_pb2.Empty]') -> None:
59
63
  pass
@@ -78,6 +82,10 @@ class ModalClientBase(abc.ABC):
78
82
  async def AppSetObjects(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.AppSetObjectsRequest, google.protobuf.empty_pb2.Empty]') -> None:
79
83
  pass
80
84
 
85
+ @abc.abstractmethod
86
+ async def AppSetTags(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.AppSetTagsRequest, google.protobuf.empty_pb2.Empty]') -> None:
87
+ pass
88
+
81
89
  @abc.abstractmethod
82
90
  async def AppStop(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.AppStopRequest, google.protobuf.empty_pb2.Empty]') -> None:
83
91
  pass
@@ -262,6 +270,10 @@ class ModalClientBase(abc.ABC):
262
270
  async def FlashContainerRegister(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.FlashContainerRegisterRequest, modal_proto.api_pb2.FlashContainerRegisterResponse]') -> None:
263
271
  pass
264
272
 
273
+ @abc.abstractmethod
274
+ async def FlashSetTargetSlotsMetrics(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.FlashSetTargetSlotsMetricsRequest, modal_proto.api_pb2.FlashSetTargetSlotsMetricsResponse]') -> None:
275
+ pass
276
+
265
277
  @abc.abstractmethod
266
278
  async def FunctionAsyncInvoke(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.FunctionAsyncInvokeRequest, modal_proto.api_pb2.FunctionAsyncInvokeResponse]') -> None:
267
279
  pass
@@ -274,6 +286,10 @@ class ModalClientBase(abc.ABC):
274
286
  async def FunctionCallCancel(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.FunctionCallCancelRequest, google.protobuf.empty_pb2.Empty]') -> None:
275
287
  pass
276
288
 
289
+ @abc.abstractmethod
290
+ async def FunctionCallFromId(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.FunctionCallFromIdRequest, modal_proto.api_pb2.FunctionCallFromIdResponse]') -> None:
291
+ pass
292
+
277
293
  @abc.abstractmethod
278
294
  async def FunctionCallGetDataIn(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.FunctionCallGetDataRequest, modal_proto.api_pb2.DataChunk]') -> None:
279
295
  pass
@@ -294,6 +310,10 @@ class ModalClientBase(abc.ABC):
294
310
  async def FunctionCreate(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.FunctionCreateRequest, modal_proto.api_pb2.FunctionCreateResponse]') -> None:
295
311
  pass
296
312
 
313
+ @abc.abstractmethod
314
+ async def FunctionFinishInputs(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.FunctionFinishInputsRequest, google.protobuf.empty_pb2.Empty]') -> None:
315
+ pass
316
+
297
317
  @abc.abstractmethod
298
318
  async def FunctionGet(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.FunctionGetRequest, modal_proto.api_pb2.FunctionGetResponse]') -> None:
299
319
  pass
@@ -350,6 +370,10 @@ class ModalClientBase(abc.ABC):
350
370
  async def FunctionUpdateSchedulingParams(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.FunctionUpdateSchedulingParamsRequest, modal_proto.api_pb2.FunctionUpdateSchedulingParamsResponse]') -> None:
351
371
  pass
352
372
 
373
+ @abc.abstractmethod
374
+ async def ImageDelete(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.ImageDeleteRequest, google.protobuf.empty_pb2.Empty]') -> None:
375
+ pass
376
+
353
377
  @abc.abstractmethod
354
378
  async def ImageFromId(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.ImageFromIdRequest, modal_proto.api_pb2.ImageFromIdResponse]') -> None:
355
379
  pass
@@ -362,6 +386,18 @@ class ModalClientBase(abc.ABC):
362
386
  async def ImageJoinStreaming(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.ImageJoinStreamingRequest, modal_proto.api_pb2.ImageJoinStreamingResponse]') -> None:
363
387
  pass
364
388
 
389
+ @abc.abstractmethod
390
+ async def MapAwait(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.MapAwaitRequest, modal_proto.api_pb2.MapAwaitResponse]') -> None:
391
+ pass
392
+
393
+ @abc.abstractmethod
394
+ async def MapCheckInputs(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.MapCheckInputsRequest, modal_proto.api_pb2.MapCheckInputsResponse]') -> None:
395
+ pass
396
+
397
+ @abc.abstractmethod
398
+ async def MapStartOrContinue(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.MapStartOrContinueRequest, modal_proto.api_pb2.MapStartOrContinueResponse]') -> None:
399
+ pass
400
+
365
401
  @abc.abstractmethod
366
402
  async def MountGetOrCreate(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.MountGetOrCreateRequest, modal_proto.api_pb2.MountGetOrCreateResponse]') -> None:
367
403
  pass
@@ -442,6 +478,10 @@ class ModalClientBase(abc.ABC):
442
478
  async def SandboxCreate(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxCreateRequest, modal_proto.api_pb2.SandboxCreateResponse]') -> None:
443
479
  pass
444
480
 
481
+ @abc.abstractmethod
482
+ async def SandboxCreateConnectToken(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxCreateConnectTokenRequest, modal_proto.api_pb2.SandboxCreateConnectTokenResponse]') -> None:
483
+ pass
484
+
445
485
  @abc.abstractmethod
446
486
  async def SandboxGetFromName(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxGetFromNameRequest, modal_proto.api_pb2.SandboxGetFromNameResponse]') -> None:
447
487
  pass
@@ -478,6 +518,14 @@ class ModalClientBase(abc.ABC):
478
518
  async def SandboxSnapshotFs(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxSnapshotFsRequest, modal_proto.api_pb2.SandboxSnapshotFsResponse]') -> None:
479
519
  pass
480
520
 
521
+ @abc.abstractmethod
522
+ async def SandboxSnapshotFsAsync(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxSnapshotFsAsyncRequest, modal_proto.api_pb2.SandboxSnapshotFsAsyncResponse]') -> None:
523
+ pass
524
+
525
+ @abc.abstractmethod
526
+ async def SandboxSnapshotFsAsyncGet(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxSnapshotFsAsyncGetRequest, modal_proto.api_pb2.SandboxSnapshotFsResponse]') -> None:
527
+ pass
528
+
481
529
  @abc.abstractmethod
482
530
  async def SandboxSnapshotGet(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxSnapshotGetRequest, modal_proto.api_pb2.SandboxSnapshotGetResponse]') -> None:
483
531
  pass
@@ -490,6 +538,10 @@ class ModalClientBase(abc.ABC):
490
538
  async def SandboxStdinWrite(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxStdinWriteRequest, modal_proto.api_pb2.SandboxStdinWriteResponse]') -> None:
491
539
  pass
492
540
 
541
+ @abc.abstractmethod
542
+ async def SandboxTagsGet(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxTagsGetRequest, modal_proto.api_pb2.SandboxTagsGetResponse]') -> None:
543
+ pass
544
+
493
545
  @abc.abstractmethod
494
546
  async def SandboxTagsSet(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxTagsSetRequest, google.protobuf.empty_pb2.Empty]') -> None:
495
547
  pass
@@ -558,6 +610,10 @@ class ModalClientBase(abc.ABC):
558
610
  async def TaskCurrentInputs(self, stream: 'grpclib.server.Stream[google.protobuf.empty_pb2.Empty, modal_proto.api_pb2.TaskCurrentInputsResponse]') -> None:
559
611
  pass
560
612
 
613
+ @abc.abstractmethod
614
+ async def TaskGetCommandRouterAccess(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.TaskGetCommandRouterAccessRequest, modal_proto.api_pb2.TaskGetCommandRouterAccessResponse]') -> None:
615
+ pass
616
+
561
617
  @abc.abstractmethod
562
618
  async def TaskList(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.TaskListRequest, modal_proto.api_pb2.TaskListResponse]') -> None:
563
619
  pass
@@ -650,6 +706,10 @@ class ModalClientBase(abc.ABC):
650
706
  async def VolumeRename(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.VolumeRenameRequest, google.protobuf.empty_pb2.Empty]') -> None:
651
707
  pass
652
708
 
709
+ @abc.abstractmethod
710
+ async def WorkspaceBillingReport(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.WorkspaceBillingReportRequest, modal_proto.api_pb2.WorkspaceBillingReportItem]') -> None:
711
+ pass
712
+
653
713
  @abc.abstractmethod
654
714
  async def WorkspaceNameLookup(self, stream: 'grpclib.server.Stream[google.protobuf.empty_pb2.Empty, modal_proto.api_pb2.WorkspaceNameLookupResponse]') -> None:
655
715
  pass
@@ -710,6 +770,12 @@ class ModalClientBase(abc.ABC):
710
770
  modal_proto.api_pb2.AppGetOrCreateRequest,
711
771
  modal_proto.api_pb2.AppGetOrCreateResponse,
712
772
  ),
773
+ '/modal.client.ModalClient/AppGetTags': grpclib.const.Handler(
774
+ self.AppGetTags,
775
+ grpclib.const.Cardinality.UNARY_UNARY,
776
+ modal_proto.api_pb2.AppGetTagsRequest,
777
+ modal_proto.api_pb2.AppGetTagsResponse,
778
+ ),
713
779
  '/modal.client.ModalClient/AppHeartbeat': grpclib.const.Handler(
714
780
  self.AppHeartbeat,
715
781
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -746,6 +812,12 @@ class ModalClientBase(abc.ABC):
746
812
  modal_proto.api_pb2.AppSetObjectsRequest,
747
813
  google.protobuf.empty_pb2.Empty,
748
814
  ),
815
+ '/modal.client.ModalClient/AppSetTags': grpclib.const.Handler(
816
+ self.AppSetTags,
817
+ grpclib.const.Cardinality.UNARY_UNARY,
818
+ modal_proto.api_pb2.AppSetTagsRequest,
819
+ google.protobuf.empty_pb2.Empty,
820
+ ),
749
821
  '/modal.client.ModalClient/AppStop': grpclib.const.Handler(
750
822
  self.AppStop,
751
823
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -1022,6 +1094,12 @@ class ModalClientBase(abc.ABC):
1022
1094
  modal_proto.api_pb2.FlashContainerRegisterRequest,
1023
1095
  modal_proto.api_pb2.FlashContainerRegisterResponse,
1024
1096
  ),
1097
+ '/modal.client.ModalClient/FlashSetTargetSlotsMetrics': grpclib.const.Handler(
1098
+ self.FlashSetTargetSlotsMetrics,
1099
+ grpclib.const.Cardinality.UNARY_UNARY,
1100
+ modal_proto.api_pb2.FlashSetTargetSlotsMetricsRequest,
1101
+ modal_proto.api_pb2.FlashSetTargetSlotsMetricsResponse,
1102
+ ),
1025
1103
  '/modal.client.ModalClient/FunctionAsyncInvoke': grpclib.const.Handler(
1026
1104
  self.FunctionAsyncInvoke,
1027
1105
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -1040,6 +1118,12 @@ class ModalClientBase(abc.ABC):
1040
1118
  modal_proto.api_pb2.FunctionCallCancelRequest,
1041
1119
  google.protobuf.empty_pb2.Empty,
1042
1120
  ),
1121
+ '/modal.client.ModalClient/FunctionCallFromId': grpclib.const.Handler(
1122
+ self.FunctionCallFromId,
1123
+ grpclib.const.Cardinality.UNARY_UNARY,
1124
+ modal_proto.api_pb2.FunctionCallFromIdRequest,
1125
+ modal_proto.api_pb2.FunctionCallFromIdResponse,
1126
+ ),
1043
1127
  '/modal.client.ModalClient/FunctionCallGetDataIn': grpclib.const.Handler(
1044
1128
  self.FunctionCallGetDataIn,
1045
1129
  grpclib.const.Cardinality.UNARY_STREAM,
@@ -1070,6 +1154,12 @@ class ModalClientBase(abc.ABC):
1070
1154
  modal_proto.api_pb2.FunctionCreateRequest,
1071
1155
  modal_proto.api_pb2.FunctionCreateResponse,
1072
1156
  ),
1157
+ '/modal.client.ModalClient/FunctionFinishInputs': grpclib.const.Handler(
1158
+ self.FunctionFinishInputs,
1159
+ grpclib.const.Cardinality.UNARY_UNARY,
1160
+ modal_proto.api_pb2.FunctionFinishInputsRequest,
1161
+ google.protobuf.empty_pb2.Empty,
1162
+ ),
1073
1163
  '/modal.client.ModalClient/FunctionGet': grpclib.const.Handler(
1074
1164
  self.FunctionGet,
1075
1165
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -1154,6 +1244,12 @@ class ModalClientBase(abc.ABC):
1154
1244
  modal_proto.api_pb2.FunctionUpdateSchedulingParamsRequest,
1155
1245
  modal_proto.api_pb2.FunctionUpdateSchedulingParamsResponse,
1156
1246
  ),
1247
+ '/modal.client.ModalClient/ImageDelete': grpclib.const.Handler(
1248
+ self.ImageDelete,
1249
+ grpclib.const.Cardinality.UNARY_UNARY,
1250
+ modal_proto.api_pb2.ImageDeleteRequest,
1251
+ google.protobuf.empty_pb2.Empty,
1252
+ ),
1157
1253
  '/modal.client.ModalClient/ImageFromId': grpclib.const.Handler(
1158
1254
  self.ImageFromId,
1159
1255
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -1172,6 +1268,24 @@ class ModalClientBase(abc.ABC):
1172
1268
  modal_proto.api_pb2.ImageJoinStreamingRequest,
1173
1269
  modal_proto.api_pb2.ImageJoinStreamingResponse,
1174
1270
  ),
1271
+ '/modal.client.ModalClient/MapAwait': grpclib.const.Handler(
1272
+ self.MapAwait,
1273
+ grpclib.const.Cardinality.UNARY_UNARY,
1274
+ modal_proto.api_pb2.MapAwaitRequest,
1275
+ modal_proto.api_pb2.MapAwaitResponse,
1276
+ ),
1277
+ '/modal.client.ModalClient/MapCheckInputs': grpclib.const.Handler(
1278
+ self.MapCheckInputs,
1279
+ grpclib.const.Cardinality.UNARY_UNARY,
1280
+ modal_proto.api_pb2.MapCheckInputsRequest,
1281
+ modal_proto.api_pb2.MapCheckInputsResponse,
1282
+ ),
1283
+ '/modal.client.ModalClient/MapStartOrContinue': grpclib.const.Handler(
1284
+ self.MapStartOrContinue,
1285
+ grpclib.const.Cardinality.UNARY_UNARY,
1286
+ modal_proto.api_pb2.MapStartOrContinueRequest,
1287
+ modal_proto.api_pb2.MapStartOrContinueResponse,
1288
+ ),
1175
1289
  '/modal.client.ModalClient/MountGetOrCreate': grpclib.const.Handler(
1176
1290
  self.MountGetOrCreate,
1177
1291
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -1292,6 +1406,12 @@ class ModalClientBase(abc.ABC):
1292
1406
  modal_proto.api_pb2.SandboxCreateRequest,
1293
1407
  modal_proto.api_pb2.SandboxCreateResponse,
1294
1408
  ),
1409
+ '/modal.client.ModalClient/SandboxCreateConnectToken': grpclib.const.Handler(
1410
+ self.SandboxCreateConnectToken,
1411
+ grpclib.const.Cardinality.UNARY_UNARY,
1412
+ modal_proto.api_pb2.SandboxCreateConnectTokenRequest,
1413
+ modal_proto.api_pb2.SandboxCreateConnectTokenResponse,
1414
+ ),
1295
1415
  '/modal.client.ModalClient/SandboxGetFromName': grpclib.const.Handler(
1296
1416
  self.SandboxGetFromName,
1297
1417
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -1346,6 +1466,18 @@ class ModalClientBase(abc.ABC):
1346
1466
  modal_proto.api_pb2.SandboxSnapshotFsRequest,
1347
1467
  modal_proto.api_pb2.SandboxSnapshotFsResponse,
1348
1468
  ),
1469
+ '/modal.client.ModalClient/SandboxSnapshotFsAsync': grpclib.const.Handler(
1470
+ self.SandboxSnapshotFsAsync,
1471
+ grpclib.const.Cardinality.UNARY_UNARY,
1472
+ modal_proto.api_pb2.SandboxSnapshotFsAsyncRequest,
1473
+ modal_proto.api_pb2.SandboxSnapshotFsAsyncResponse,
1474
+ ),
1475
+ '/modal.client.ModalClient/SandboxSnapshotFsAsyncGet': grpclib.const.Handler(
1476
+ self.SandboxSnapshotFsAsyncGet,
1477
+ grpclib.const.Cardinality.UNARY_UNARY,
1478
+ modal_proto.api_pb2.SandboxSnapshotFsAsyncGetRequest,
1479
+ modal_proto.api_pb2.SandboxSnapshotFsResponse,
1480
+ ),
1349
1481
  '/modal.client.ModalClient/SandboxSnapshotGet': grpclib.const.Handler(
1350
1482
  self.SandboxSnapshotGet,
1351
1483
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -1364,6 +1496,12 @@ class ModalClientBase(abc.ABC):
1364
1496
  modal_proto.api_pb2.SandboxStdinWriteRequest,
1365
1497
  modal_proto.api_pb2.SandboxStdinWriteResponse,
1366
1498
  ),
1499
+ '/modal.client.ModalClient/SandboxTagsGet': grpclib.const.Handler(
1500
+ self.SandboxTagsGet,
1501
+ grpclib.const.Cardinality.UNARY_UNARY,
1502
+ modal_proto.api_pb2.SandboxTagsGetRequest,
1503
+ modal_proto.api_pb2.SandboxTagsGetResponse,
1504
+ ),
1367
1505
  '/modal.client.ModalClient/SandboxTagsSet': grpclib.const.Handler(
1368
1506
  self.SandboxTagsSet,
1369
1507
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -1466,6 +1604,12 @@ class ModalClientBase(abc.ABC):
1466
1604
  google.protobuf.empty_pb2.Empty,
1467
1605
  modal_proto.api_pb2.TaskCurrentInputsResponse,
1468
1606
  ),
1607
+ '/modal.client.ModalClient/TaskGetCommandRouterAccess': grpclib.const.Handler(
1608
+ self.TaskGetCommandRouterAccess,
1609
+ grpclib.const.Cardinality.UNARY_UNARY,
1610
+ modal_proto.api_pb2.TaskGetCommandRouterAccessRequest,
1611
+ modal_proto.api_pb2.TaskGetCommandRouterAccessResponse,
1612
+ ),
1469
1613
  '/modal.client.ModalClient/TaskList': grpclib.const.Handler(
1470
1614
  self.TaskList,
1471
1615
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -1604,6 +1748,12 @@ class ModalClientBase(abc.ABC):
1604
1748
  modal_proto.api_pb2.VolumeRenameRequest,
1605
1749
  google.protobuf.empty_pb2.Empty,
1606
1750
  ),
1751
+ '/modal.client.ModalClient/WorkspaceBillingReport': grpclib.const.Handler(
1752
+ self.WorkspaceBillingReport,
1753
+ grpclib.const.Cardinality.UNARY_STREAM,
1754
+ modal_proto.api_pb2.WorkspaceBillingReportRequest,
1755
+ modal_proto.api_pb2.WorkspaceBillingReportItem,
1756
+ ),
1607
1757
  '/modal.client.ModalClient/WorkspaceNameLookup': grpclib.const.Handler(
1608
1758
  self.WorkspaceNameLookup,
1609
1759
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -1670,6 +1820,12 @@ class ModalClientStub:
1670
1820
  modal_proto.api_pb2.AppGetOrCreateRequest,
1671
1821
  modal_proto.api_pb2.AppGetOrCreateResponse,
1672
1822
  )
1823
+ self.AppGetTags = grpclib.client.UnaryUnaryMethod(
1824
+ channel,
1825
+ '/modal.client.ModalClient/AppGetTags',
1826
+ modal_proto.api_pb2.AppGetTagsRequest,
1827
+ modal_proto.api_pb2.AppGetTagsResponse,
1828
+ )
1673
1829
  self.AppHeartbeat = grpclib.client.UnaryUnaryMethod(
1674
1830
  channel,
1675
1831
  '/modal.client.ModalClient/AppHeartbeat',
@@ -1706,6 +1862,12 @@ class ModalClientStub:
1706
1862
  modal_proto.api_pb2.AppSetObjectsRequest,
1707
1863
  google.protobuf.empty_pb2.Empty,
1708
1864
  )
1865
+ self.AppSetTags = grpclib.client.UnaryUnaryMethod(
1866
+ channel,
1867
+ '/modal.client.ModalClient/AppSetTags',
1868
+ modal_proto.api_pb2.AppSetTagsRequest,
1869
+ google.protobuf.empty_pb2.Empty,
1870
+ )
1709
1871
  self.AppStop = grpclib.client.UnaryUnaryMethod(
1710
1872
  channel,
1711
1873
  '/modal.client.ModalClient/AppStop',
@@ -1982,6 +2144,12 @@ class ModalClientStub:
1982
2144
  modal_proto.api_pb2.FlashContainerRegisterRequest,
1983
2145
  modal_proto.api_pb2.FlashContainerRegisterResponse,
1984
2146
  )
2147
+ self.FlashSetTargetSlotsMetrics = grpclib.client.UnaryUnaryMethod(
2148
+ channel,
2149
+ '/modal.client.ModalClient/FlashSetTargetSlotsMetrics',
2150
+ modal_proto.api_pb2.FlashSetTargetSlotsMetricsRequest,
2151
+ modal_proto.api_pb2.FlashSetTargetSlotsMetricsResponse,
2152
+ )
1985
2153
  self.FunctionAsyncInvoke = grpclib.client.UnaryUnaryMethod(
1986
2154
  channel,
1987
2155
  '/modal.client.ModalClient/FunctionAsyncInvoke',
@@ -2000,6 +2168,12 @@ class ModalClientStub:
2000
2168
  modal_proto.api_pb2.FunctionCallCancelRequest,
2001
2169
  google.protobuf.empty_pb2.Empty,
2002
2170
  )
2171
+ self.FunctionCallFromId = grpclib.client.UnaryUnaryMethod(
2172
+ channel,
2173
+ '/modal.client.ModalClient/FunctionCallFromId',
2174
+ modal_proto.api_pb2.FunctionCallFromIdRequest,
2175
+ modal_proto.api_pb2.FunctionCallFromIdResponse,
2176
+ )
2003
2177
  self.FunctionCallGetDataIn = grpclib.client.UnaryStreamMethod(
2004
2178
  channel,
2005
2179
  '/modal.client.ModalClient/FunctionCallGetDataIn',
@@ -2030,6 +2204,12 @@ class ModalClientStub:
2030
2204
  modal_proto.api_pb2.FunctionCreateRequest,
2031
2205
  modal_proto.api_pb2.FunctionCreateResponse,
2032
2206
  )
2207
+ self.FunctionFinishInputs = grpclib.client.UnaryUnaryMethod(
2208
+ channel,
2209
+ '/modal.client.ModalClient/FunctionFinishInputs',
2210
+ modal_proto.api_pb2.FunctionFinishInputsRequest,
2211
+ google.protobuf.empty_pb2.Empty,
2212
+ )
2033
2213
  self.FunctionGet = grpclib.client.UnaryUnaryMethod(
2034
2214
  channel,
2035
2215
  '/modal.client.ModalClient/FunctionGet',
@@ -2114,6 +2294,12 @@ class ModalClientStub:
2114
2294
  modal_proto.api_pb2.FunctionUpdateSchedulingParamsRequest,
2115
2295
  modal_proto.api_pb2.FunctionUpdateSchedulingParamsResponse,
2116
2296
  )
2297
+ self.ImageDelete = grpclib.client.UnaryUnaryMethod(
2298
+ channel,
2299
+ '/modal.client.ModalClient/ImageDelete',
2300
+ modal_proto.api_pb2.ImageDeleteRequest,
2301
+ google.protobuf.empty_pb2.Empty,
2302
+ )
2117
2303
  self.ImageFromId = grpclib.client.UnaryUnaryMethod(
2118
2304
  channel,
2119
2305
  '/modal.client.ModalClient/ImageFromId',
@@ -2132,6 +2318,24 @@ class ModalClientStub:
2132
2318
  modal_proto.api_pb2.ImageJoinStreamingRequest,
2133
2319
  modal_proto.api_pb2.ImageJoinStreamingResponse,
2134
2320
  )
2321
+ self.MapAwait = grpclib.client.UnaryUnaryMethod(
2322
+ channel,
2323
+ '/modal.client.ModalClient/MapAwait',
2324
+ modal_proto.api_pb2.MapAwaitRequest,
2325
+ modal_proto.api_pb2.MapAwaitResponse,
2326
+ )
2327
+ self.MapCheckInputs = grpclib.client.UnaryUnaryMethod(
2328
+ channel,
2329
+ '/modal.client.ModalClient/MapCheckInputs',
2330
+ modal_proto.api_pb2.MapCheckInputsRequest,
2331
+ modal_proto.api_pb2.MapCheckInputsResponse,
2332
+ )
2333
+ self.MapStartOrContinue = grpclib.client.UnaryUnaryMethod(
2334
+ channel,
2335
+ '/modal.client.ModalClient/MapStartOrContinue',
2336
+ modal_proto.api_pb2.MapStartOrContinueRequest,
2337
+ modal_proto.api_pb2.MapStartOrContinueResponse,
2338
+ )
2135
2339
  self.MountGetOrCreate = grpclib.client.UnaryUnaryMethod(
2136
2340
  channel,
2137
2341
  '/modal.client.ModalClient/MountGetOrCreate',
@@ -2252,6 +2456,12 @@ class ModalClientStub:
2252
2456
  modal_proto.api_pb2.SandboxCreateRequest,
2253
2457
  modal_proto.api_pb2.SandboxCreateResponse,
2254
2458
  )
2459
+ self.SandboxCreateConnectToken = grpclib.client.UnaryUnaryMethod(
2460
+ channel,
2461
+ '/modal.client.ModalClient/SandboxCreateConnectToken',
2462
+ modal_proto.api_pb2.SandboxCreateConnectTokenRequest,
2463
+ modal_proto.api_pb2.SandboxCreateConnectTokenResponse,
2464
+ )
2255
2465
  self.SandboxGetFromName = grpclib.client.UnaryUnaryMethod(
2256
2466
  channel,
2257
2467
  '/modal.client.ModalClient/SandboxGetFromName',
@@ -2306,6 +2516,18 @@ class ModalClientStub:
2306
2516
  modal_proto.api_pb2.SandboxSnapshotFsRequest,
2307
2517
  modal_proto.api_pb2.SandboxSnapshotFsResponse,
2308
2518
  )
2519
+ self.SandboxSnapshotFsAsync = grpclib.client.UnaryUnaryMethod(
2520
+ channel,
2521
+ '/modal.client.ModalClient/SandboxSnapshotFsAsync',
2522
+ modal_proto.api_pb2.SandboxSnapshotFsAsyncRequest,
2523
+ modal_proto.api_pb2.SandboxSnapshotFsAsyncResponse,
2524
+ )
2525
+ self.SandboxSnapshotFsAsyncGet = grpclib.client.UnaryUnaryMethod(
2526
+ channel,
2527
+ '/modal.client.ModalClient/SandboxSnapshotFsAsyncGet',
2528
+ modal_proto.api_pb2.SandboxSnapshotFsAsyncGetRequest,
2529
+ modal_proto.api_pb2.SandboxSnapshotFsResponse,
2530
+ )
2309
2531
  self.SandboxSnapshotGet = grpclib.client.UnaryUnaryMethod(
2310
2532
  channel,
2311
2533
  '/modal.client.ModalClient/SandboxSnapshotGet',
@@ -2324,6 +2546,12 @@ class ModalClientStub:
2324
2546
  modal_proto.api_pb2.SandboxStdinWriteRequest,
2325
2547
  modal_proto.api_pb2.SandboxStdinWriteResponse,
2326
2548
  )
2549
+ self.SandboxTagsGet = grpclib.client.UnaryUnaryMethod(
2550
+ channel,
2551
+ '/modal.client.ModalClient/SandboxTagsGet',
2552
+ modal_proto.api_pb2.SandboxTagsGetRequest,
2553
+ modal_proto.api_pb2.SandboxTagsGetResponse,
2554
+ )
2327
2555
  self.SandboxTagsSet = grpclib.client.UnaryUnaryMethod(
2328
2556
  channel,
2329
2557
  '/modal.client.ModalClient/SandboxTagsSet',
@@ -2426,6 +2654,12 @@ class ModalClientStub:
2426
2654
  google.protobuf.empty_pb2.Empty,
2427
2655
  modal_proto.api_pb2.TaskCurrentInputsResponse,
2428
2656
  )
2657
+ self.TaskGetCommandRouterAccess = grpclib.client.UnaryUnaryMethod(
2658
+ channel,
2659
+ '/modal.client.ModalClient/TaskGetCommandRouterAccess',
2660
+ modal_proto.api_pb2.TaskGetCommandRouterAccessRequest,
2661
+ modal_proto.api_pb2.TaskGetCommandRouterAccessResponse,
2662
+ )
2429
2663
  self.TaskList = grpclib.client.UnaryUnaryMethod(
2430
2664
  channel,
2431
2665
  '/modal.client.ModalClient/TaskList',
@@ -2564,6 +2798,12 @@ class ModalClientStub:
2564
2798
  modal_proto.api_pb2.VolumeRenameRequest,
2565
2799
  google.protobuf.empty_pb2.Empty,
2566
2800
  )
2801
+ self.WorkspaceBillingReport = grpclib.client.UnaryStreamMethod(
2802
+ channel,
2803
+ '/modal.client.ModalClient/WorkspaceBillingReport',
2804
+ modal_proto.api_pb2.WorkspaceBillingReportRequest,
2805
+ modal_proto.api_pb2.WorkspaceBillingReportItem,
2806
+ )
2567
2807
  self.WorkspaceNameLookup = grpclib.client.UnaryUnaryMethod(
2568
2808
  channel,
2569
2809
  '/modal.client.ModalClient/WorkspaceNameLookup',