modal 1.1.0__py3-none-any.whl → 1.1.1__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (75) hide show
  1. modal/__main__.py +2 -2
  2. modal/_clustered_functions.py +3 -0
  3. modal/_clustered_functions.pyi +3 -2
  4. modal/_functions.py +78 -26
  5. modal/_object.py +9 -1
  6. modal/_output.py +14 -25
  7. modal/_runtime/gpu_memory_snapshot.py +158 -54
  8. modal/_utils/async_utils.py +6 -4
  9. modal/_utils/auth_token_manager.py +1 -1
  10. modal/_utils/blob_utils.py +16 -21
  11. modal/_utils/function_utils.py +16 -4
  12. modal/_utils/time_utils.py +8 -4
  13. modal/app.py +0 -4
  14. modal/app.pyi +0 -4
  15. modal/cli/_traceback.py +3 -2
  16. modal/cli/app.py +4 -4
  17. modal/cli/cluster.py +4 -4
  18. modal/cli/config.py +2 -2
  19. modal/cli/container.py +2 -2
  20. modal/cli/dict.py +4 -4
  21. modal/cli/entry_point.py +2 -2
  22. modal/cli/import_refs.py +3 -3
  23. modal/cli/network_file_system.py +8 -9
  24. modal/cli/profile.py +2 -2
  25. modal/cli/queues.py +5 -5
  26. modal/cli/secret.py +5 -5
  27. modal/cli/utils.py +3 -4
  28. modal/cli/volume.py +8 -9
  29. modal/client.py +8 -1
  30. modal/client.pyi +9 -2
  31. modal/container_process.py +2 -2
  32. modal/dict.py +47 -3
  33. modal/dict.pyi +55 -0
  34. modal/exception.py +4 -0
  35. modal/experimental/__init__.py +1 -1
  36. modal/experimental/flash.py +18 -2
  37. modal/experimental/flash.pyi +19 -0
  38. modal/functions.pyi +0 -1
  39. modal/image.py +26 -10
  40. modal/image.pyi +12 -4
  41. modal/mount.py +1 -1
  42. modal/object.pyi +4 -0
  43. modal/parallel_map.py +432 -4
  44. modal/parallel_map.pyi +28 -0
  45. modal/queue.py +46 -3
  46. modal/queue.pyi +53 -0
  47. modal/sandbox.py +105 -25
  48. modal/sandbox.pyi +108 -18
  49. modal/secret.py +48 -5
  50. modal/secret.pyi +55 -0
  51. modal/token_flow.py +3 -3
  52. modal/volume.py +49 -18
  53. modal/volume.pyi +50 -8
  54. {modal-1.1.0.dist-info → modal-1.1.1.dist-info}/METADATA +2 -2
  55. {modal-1.1.0.dist-info → modal-1.1.1.dist-info}/RECORD +75 -75
  56. modal_proto/api.proto +140 -14
  57. modal_proto/api_grpc.py +80 -0
  58. modal_proto/api_pb2.py +927 -756
  59. modal_proto/api_pb2.pyi +488 -34
  60. modal_proto/api_pb2_grpc.py +166 -0
  61. modal_proto/api_pb2_grpc.pyi +52 -0
  62. modal_proto/modal_api_grpc.py +5 -0
  63. modal_version/__init__.py +1 -1
  64. /modal/{requirements → builder}/2023.12.312.txt +0 -0
  65. /modal/{requirements → builder}/2023.12.txt +0 -0
  66. /modal/{requirements → builder}/2024.04.txt +0 -0
  67. /modal/{requirements → builder}/2024.10.txt +0 -0
  68. /modal/{requirements → builder}/2025.06.txt +0 -0
  69. /modal/{requirements → builder}/PREVIEW.txt +0 -0
  70. /modal/{requirements → builder}/README.md +0 -0
  71. /modal/{requirements → builder}/base-images.json +0 -0
  72. {modal-1.1.0.dist-info → modal-1.1.1.dist-info}/WHEEL +0 -0
  73. {modal-1.1.0.dist-info → modal-1.1.1.dist-info}/entry_points.txt +0 -0
  74. {modal-1.1.0.dist-info → modal-1.1.1.dist-info}/licenses/LICENSE +0 -0
  75. {modal-1.1.0.dist-info → modal-1.1.1.dist-info}/top_level.txt +0 -0
modal_proto/api.proto CHANGED
@@ -240,6 +240,13 @@ enum SystemErrorCode {
240
240
  SYSTEM_ERROR_CODE_NOSPC = 28; // ENOSPC: No space left on device
241
241
  }
242
242
 
243
+ enum TaskSnapshotBehavior {
244
+ TASK_SNAPSHOT_BEHAVIOR_UNSPECIFIED = 0;
245
+ TASK_SNAPSHOT_BEHAVIOR_SNAPSHOT = 1;
246
+ TASK_SNAPSHOT_BEHAVIOR_RESTORE = 2;
247
+ TASK_SNAPSHOT_BEHAVIOR_NONE = 3;
248
+ }
249
+
243
250
  enum TaskState {
244
251
  TASK_STATE_UNSPECIFIED = 0;
245
252
  TASK_STATE_CREATED = 6;
@@ -611,7 +618,7 @@ message AttemptStartRequest {
611
618
 
612
619
  message AttemptStartResponse {
613
620
  string attempt_token = 1;
614
- FunctionRetryPolicy retry_policy = 2;
621
+ FunctionRetryPolicy retry_policy = 2; // TODO(ben-okeefe) TODO(nathan): Not currently used
615
622
  }
616
623
 
617
624
  message AuthTokenGetRequest {
@@ -858,6 +865,7 @@ message ContainerArguments { // This is used to pass data from the worker to th
858
865
  string environment_name = 13;
859
866
  optional string checkpoint_id = 14;
860
867
  AppLayout app_layout = 15;
868
+ string input_plane_server_url = 16;
861
869
  }
862
870
 
863
871
  message ContainerCheckpointRequest {
@@ -1035,6 +1043,13 @@ message ContainerStopRequest {
1035
1043
  message ContainerStopResponse {
1036
1044
  }
1037
1045
 
1046
+
1047
+ message CreationInfo {
1048
+ // This message is used in metadata for resource objects like Dict, Queue, Volume, etc.
1049
+ double created_at = 1; // Timestamp of resource creation
1050
+ string created_by = 2; // User name or service name
1051
+ }
1052
+
1038
1053
  message CustomDomainConfig {
1039
1054
  string name = 1;
1040
1055
  }
@@ -1099,6 +1114,7 @@ message DictGetOrCreateRequest {
1099
1114
 
1100
1115
  message DictGetOrCreateResponse {
1101
1116
  string dict_id = 1;
1117
+ DictMetadata metadata = 2;
1102
1118
  }
1103
1119
 
1104
1120
  message DictGetRequest {
@@ -1125,15 +1141,24 @@ message DictLenResponse {
1125
1141
 
1126
1142
  message DictListRequest {
1127
1143
  string environment_name = 1;
1144
+ ListPagination pagination = 2;
1128
1145
  }
1129
1146
 
1130
1147
  message DictListResponse {
1131
1148
  message DictInfo {
1132
1149
  string name = 1;
1133
- double created_at = 2;
1150
+ double created_at = 2; // Superseded by metadata, used by clients up to 1.1.1
1151
+ string dict_id = 3;
1152
+ DictMetadata metadata = 4;
1134
1153
  }
1135
1154
 
1136
1155
  repeated DictInfo dicts = 1;
1156
+ string environment_name = 2;
1157
+ }
1158
+
1159
+ message DictMetadata {
1160
+ string name = 1;
1161
+ CreationInfo creation_info = 2;
1137
1162
  }
1138
1163
 
1139
1164
  message DictPopRequest {
@@ -1464,6 +1489,7 @@ message FunctionBindParamsRequest {
1464
1489
  bytes serialized_params = 2;
1465
1490
  FunctionOptions function_options = 3;
1466
1491
  string environment_name = 4;
1492
+ string auth_secret = 5; // Only used for the input plane.
1467
1493
  }
1468
1494
 
1469
1495
  message FunctionBindParamsResponse {
@@ -1487,7 +1513,7 @@ message FunctionCallCancelRequest {
1487
1513
  message FunctionCallGetDataRequest {
1488
1514
  string function_call_id = 1;
1489
1515
  uint64 last_index = 2;
1490
- reserved 3; // attempt_token
1516
+ optional string attempt_token = 3;
1491
1517
  }
1492
1518
 
1493
1519
  message FunctionCallInfo {
@@ -1651,6 +1677,7 @@ message FunctionGetInputsItem {
1651
1677
  string function_call_id = 5;
1652
1678
  FunctionCallInvocationType function_call_invocation_type = 6;
1653
1679
  uint32 retry_count = 7;
1680
+ optional int32 function_map_idx = 8; // intercepted and only used by the worker.
1654
1681
  }
1655
1682
 
1656
1683
  message FunctionGetInputsRequest {
@@ -1816,7 +1843,8 @@ message FunctionPutInputsItem {
1816
1843
  int32 idx = 1;
1817
1844
  FunctionInput input = 2;
1818
1845
  bool r2_failed = 3;
1819
- uint64 r2_latency_ms = 4;
1846
+ reserved 4; // r2_latency_ms
1847
+ uint64 r2_throughput_bytes_s = 5;
1820
1848
  }
1821
1849
 
1822
1850
  message FunctionPutInputsRequest {
@@ -1842,6 +1870,8 @@ message FunctionPutOutputsItem {
1842
1870
  double output_created_at = 4;
1843
1871
  DataFormat data_format = 7; // for result.data_oneof
1844
1872
  uint32 retry_count = 8;
1873
+ string function_call_id = 9; // injected by the worker
1874
+ optional int32 function_map_idx = 10; // injected by the worker
1845
1875
  }
1846
1876
 
1847
1877
  message FunctionPutOutputsRequest {
@@ -2069,6 +2099,53 @@ message InputInfo {
2069
2099
  bool task_first_input = 7;
2070
2100
  }
2071
2101
 
2102
+ message ListPagination {
2103
+ int32 max_objects = 1;
2104
+ double created_before = 2;
2105
+ }
2106
+
2107
+ message MapAwaitRequest {
2108
+ string function_call_id = 1;
2109
+ string last_entry_id = 2;
2110
+ double requested_at = 3; // Used for waypoints.
2111
+ float timeout = 4;
2112
+ }
2113
+
2114
+ message MapAwaitResponse {
2115
+ repeated FunctionGetOutputsItem outputs = 1;
2116
+ string last_entry_id = 2;
2117
+ }
2118
+
2119
+ message MapCheckInputsRequest {
2120
+ string last_entry_id = 1;
2121
+ float timeout = 2;
2122
+ repeated string attempt_tokens = 3;
2123
+ }
2124
+
2125
+ message MapCheckInputsResponse {
2126
+ repeated bool lost = 1;
2127
+ }
2128
+
2129
+ message MapStartOrContinueItem {
2130
+ FunctionPutInputsItem input = 1;
2131
+ optional string attempt_token = 2; // None if this is a fresh input, otherwise it is the attempt token for a retry.
2132
+ }
2133
+
2134
+ message MapStartOrContinueRequest {
2135
+ string function_id = 1;
2136
+ string parent_input_id = 2;
2137
+ optional string function_call_id = 3; // This is given iff this is a map continue request.
2138
+ repeated MapStartOrContinueItem items = 4;
2139
+ }
2140
+
2141
+ message MapStartOrContinueResponse {
2142
+ string function_id = 1;
2143
+ string function_call_id = 2;
2144
+ uint32 max_inputs_outstanding = 3;
2145
+ repeated string attempt_tokens = 4;
2146
+ FunctionRetryPolicy retry_policy = 5; // TODO(ben-okeefe): Not currently used
2147
+ }
2148
+
2072
2149
  message MethodDefinition {
2073
2150
  string function_name = 1;
2074
2151
  Function.FunctionType function_type = 2;
@@ -2340,6 +2417,7 @@ message QueueGetOrCreateRequest {
2340
2417
 
2341
2418
  message QueueGetOrCreateResponse {
2342
2419
  string queue_id = 1;
2420
+ QueueMetadata metadata = 2;
2343
2421
  }
2344
2422
 
2345
2423
  message QueueGetRequest {
@@ -2374,19 +2452,27 @@ message QueueLenResponse {
2374
2452
 
2375
2453
  message QueueListRequest {
2376
2454
  string environment_name = 1;
2377
- // Allow client to report a bounded total size to reduce the number of partitions that need to be checked
2378
- int32 total_size_limit = 2;
2455
+ int32 total_size_limit = 2; // Limit on "number of partitions" reported, since checking them is costly
2456
+ ListPagination pagination = 3;
2379
2457
  }
2380
2458
 
2381
2459
  message QueueListResponse {
2382
2460
  message QueueInfo {
2383
2461
  string name = 1;
2384
- double created_at = 2;
2462
+ double created_at = 2; // Superseded by metadata, used by clients up to 1.1.1
2385
2463
  int32 num_partitions = 3;
2386
2464
  int32 total_size = 4;
2465
+ string queue_id = 5;
2466
+ QueueMetadata metadata = 6;
2387
2467
  }
2388
2468
 
2389
2469
  repeated QueueInfo queues = 1;
2470
+ string environment_name = 2;
2471
+ }
2472
+
2473
+ message QueueMetadata {
2474
+ string name = 1;
2475
+ CreationInfo creation_info = 2;
2390
2476
  }
2391
2477
 
2392
2478
  message QueueNextItemsRequest {
@@ -2520,6 +2606,9 @@ message Sandbox {
2520
2606
 
2521
2607
  // If set, the sandbox will be created with a name.
2522
2608
  optional string name = 30;
2609
+
2610
+ // Experimental options
2611
+ map<string, bool> experimental_options = 31;
2523
2612
  }
2524
2613
 
2525
2614
  message SandboxCreateRequest {
@@ -2624,6 +2713,19 @@ message SandboxRestoreResponse {
2624
2713
  string sandbox_id = 1;
2625
2714
  }
2626
2715
 
2716
+ message SandboxSnapshotFsAsyncGetRequest {
2717
+ string image_id = 1;
2718
+ float timeout = 2;
2719
+ }
2720
+
2721
+ message SandboxSnapshotFsAsyncRequest {
2722
+ string sandbox_id = 1;
2723
+ }
2724
+
2725
+ message SandboxSnapshotFsAsyncResponse {
2726
+ string image_id = 1;
2727
+ }
2728
+
2627
2729
  message SandboxSnapshotFsRequest {
2628
2730
  string sandbox_id = 1;
2629
2731
  float timeout = 2;
@@ -2761,25 +2863,35 @@ message SecretGetOrCreateRequest {
2761
2863
 
2762
2864
  message SecretGetOrCreateResponse {
2763
2865
  string secret_id = 1;
2866
+ SecretMetadata metadata = 2;
2764
2867
  }
2765
2868
 
2766
2869
  message SecretListItem {
2767
2870
  string label = 1;
2768
- double created_at = 2;
2871
+ double created_at = 2; // Superseded by metadata, used by clients up to 1.1.1
2769
2872
  double last_used_at = 3;
2770
- string environment_name = 4;
2873
+ string environment_name = 4; // Unused by client
2771
2874
  string secret_id = 5;
2875
+ SecretMetadata metadata = 6;
2772
2876
  }
2773
2877
 
2774
2878
  message SecretListRequest {
2775
- string environment_name = 1; // leaving empty will assume a singular environment
2879
+ string environment_name = 1;
2880
+ ListPagination pagination = 2;
2776
2881
  }
2777
2882
 
2778
2883
  message SecretListResponse {
2779
2884
  repeated SecretListItem items = 1;
2780
- string environment_name = 2; // the environment that was listed (useful when relying on "default" logic)
2885
+ string environment_name = 2;
2781
2886
  }
2782
2887
 
2888
+ message SecretMetadata {
2889
+ string name = 1;
2890
+ CreationInfo creation_info = 2;
2891
+ }
2892
+
2893
+ // SharedVolume in the backend corresponds to NetworkFileSystem in the current API
2894
+
2783
2895
  message SharedVolumeDeleteRequest {
2784
2896
  string shared_volume_id = 1;
2785
2897
  }
@@ -2878,8 +2990,9 @@ message TaskClusterHelloRequest {
2878
2990
  message TaskClusterHelloResponse {
2879
2991
  string cluster_id = 1;
2880
2992
  uint32 cluster_rank = 2;
2881
- // All IP addresses in cluster, ordered by cluster rank
2993
+ // All IPv6 addresses in cluster, ordered by cluster rank
2882
2994
  repeated string container_ips = 3;
2995
+ repeated string container_ipv4_ips = 4;
2883
2996
  }
2884
2997
 
2885
2998
  message TaskCurrentInputsResponse {
@@ -2894,6 +3007,8 @@ message TaskInfo {
2894
3007
  double enqueued_at = 5;
2895
3008
  string gpu_type = 6;
2896
3009
  string sandbox_id = 7;
3010
+ TaskSnapshotBehavior snapshot_behavior = 8;
3011
+ GPUConfig gpu_config = 9;
2897
3012
  }
2898
3013
 
2899
3014
  message TaskListRequest {
@@ -3087,7 +3202,7 @@ message VolumeGetOrCreateRequest {
3087
3202
 
3088
3203
  message VolumeGetOrCreateResponse {
3089
3204
  string volume_id = 1;
3090
- VolumeFsVersion version = 2;
3205
+ VolumeFsVersion version = 2; // Not used directly; version is part of the metadata
3091
3206
  VolumeMetadata metadata = 3;
3092
3207
  }
3093
3208
 
@@ -3120,11 +3235,13 @@ message VolumeListFilesResponse {
3120
3235
  message VolumeListItem {
3121
3236
  string label = 1; // app name of object entity app
3122
3237
  string volume_id = 2;
3123
- double created_at = 3;
3238
+ double created_at = 3; // Superseded by metadata, used by clients up to 1.1.1
3239
+ VolumeMetadata metadata = 4;
3124
3240
  }
3125
3241
 
3126
3242
  message VolumeListRequest {
3127
3243
  string environment_name = 1;
3244
+ ListPagination pagination = 2;
3128
3245
  }
3129
3246
 
3130
3247
  message VolumeListResponse {
@@ -3134,6 +3251,8 @@ message VolumeListResponse {
3134
3251
 
3135
3252
  message VolumeMetadata {
3136
3253
  VolumeFsVersion version = 1;
3254
+ string name = 2;
3255
+ CreationInfo creation_info = 3;
3137
3256
  }
3138
3257
 
3139
3258
  message VolumeMount {
@@ -3393,6 +3512,11 @@ service ModalClient {
3393
3512
  rpc ImageGetOrCreate(ImageGetOrCreateRequest) returns (ImageGetOrCreateResponse);
3394
3513
  rpc ImageJoinStreaming(ImageJoinStreamingRequest) returns (stream ImageJoinStreamingResponse);
3395
3514
 
3515
+ // Input Plane Map
3516
+ rpc MapAwait(MapAwaitRequest) returns (MapAwaitResponse);
3517
+ rpc MapCheckInputs(MapCheckInputsRequest) returns (MapCheckInputsResponse);
3518
+ rpc MapStartOrContinue(MapStartOrContinueRequest) returns (MapStartOrContinueResponse);
3519
+
3396
3520
  // Mounts
3397
3521
  rpc MountGetOrCreate(MountGetOrCreateRequest) returns (MountGetOrCreateResponse);
3398
3522
  rpc MountPutFile(MountPutFileRequest) returns (MountPutFileResponse);
@@ -3431,6 +3555,8 @@ service ModalClient {
3431
3555
  rpc SandboxRestore(SandboxRestoreRequest) returns (SandboxRestoreResponse);
3432
3556
  rpc SandboxSnapshot(SandboxSnapshotRequest) returns (SandboxSnapshotResponse);
3433
3557
  rpc SandboxSnapshotFs(SandboxSnapshotFsRequest) returns (SandboxSnapshotFsResponse);
3558
+ rpc SandboxSnapshotFsAsync(SandboxSnapshotFsAsyncRequest) returns (SandboxSnapshotFsAsyncResponse);
3559
+ rpc SandboxSnapshotFsAsyncGet(SandboxSnapshotFsAsyncGetRequest) returns (SandboxSnapshotFsResponse);
3434
3560
  rpc SandboxSnapshotGet(SandboxSnapshotGetRequest) returns (SandboxSnapshotGetResponse);
3435
3561
  rpc SandboxSnapshotWait(SandboxSnapshotWaitRequest) returns (SandboxSnapshotWaitResponse);
3436
3562
  rpc SandboxStdinWrite(SandboxStdinWriteRequest) returns (SandboxStdinWriteResponse);
modal_proto/api_grpc.py CHANGED
@@ -362,6 +362,18 @@ class ModalClientBase(abc.ABC):
362
362
  async def ImageJoinStreaming(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.ImageJoinStreamingRequest, modal_proto.api_pb2.ImageJoinStreamingResponse]') -> None:
363
363
  pass
364
364
 
365
+ @abc.abstractmethod
366
+ async def MapAwait(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.MapAwaitRequest, modal_proto.api_pb2.MapAwaitResponse]') -> None:
367
+ pass
368
+
369
+ @abc.abstractmethod
370
+ async def MapCheckInputs(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.MapCheckInputsRequest, modal_proto.api_pb2.MapCheckInputsResponse]') -> None:
371
+ pass
372
+
373
+ @abc.abstractmethod
374
+ async def MapStartOrContinue(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.MapStartOrContinueRequest, modal_proto.api_pb2.MapStartOrContinueResponse]') -> None:
375
+ pass
376
+
365
377
  @abc.abstractmethod
366
378
  async def MountGetOrCreate(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.MountGetOrCreateRequest, modal_proto.api_pb2.MountGetOrCreateResponse]') -> None:
367
379
  pass
@@ -478,6 +490,14 @@ class ModalClientBase(abc.ABC):
478
490
  async def SandboxSnapshotFs(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxSnapshotFsRequest, modal_proto.api_pb2.SandboxSnapshotFsResponse]') -> None:
479
491
  pass
480
492
 
493
+ @abc.abstractmethod
494
+ async def SandboxSnapshotFsAsync(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxSnapshotFsAsyncRequest, modal_proto.api_pb2.SandboxSnapshotFsAsyncResponse]') -> None:
495
+ pass
496
+
497
+ @abc.abstractmethod
498
+ async def SandboxSnapshotFsAsyncGet(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxSnapshotFsAsyncGetRequest, modal_proto.api_pb2.SandboxSnapshotFsResponse]') -> None:
499
+ pass
500
+
481
501
  @abc.abstractmethod
482
502
  async def SandboxSnapshotGet(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxSnapshotGetRequest, modal_proto.api_pb2.SandboxSnapshotGetResponse]') -> None:
483
503
  pass
@@ -1172,6 +1192,24 @@ class ModalClientBase(abc.ABC):
1172
1192
  modal_proto.api_pb2.ImageJoinStreamingRequest,
1173
1193
  modal_proto.api_pb2.ImageJoinStreamingResponse,
1174
1194
  ),
1195
+ '/modal.client.ModalClient/MapAwait': grpclib.const.Handler(
1196
+ self.MapAwait,
1197
+ grpclib.const.Cardinality.UNARY_UNARY,
1198
+ modal_proto.api_pb2.MapAwaitRequest,
1199
+ modal_proto.api_pb2.MapAwaitResponse,
1200
+ ),
1201
+ '/modal.client.ModalClient/MapCheckInputs': grpclib.const.Handler(
1202
+ self.MapCheckInputs,
1203
+ grpclib.const.Cardinality.UNARY_UNARY,
1204
+ modal_proto.api_pb2.MapCheckInputsRequest,
1205
+ modal_proto.api_pb2.MapCheckInputsResponse,
1206
+ ),
1207
+ '/modal.client.ModalClient/MapStartOrContinue': grpclib.const.Handler(
1208
+ self.MapStartOrContinue,
1209
+ grpclib.const.Cardinality.UNARY_UNARY,
1210
+ modal_proto.api_pb2.MapStartOrContinueRequest,
1211
+ modal_proto.api_pb2.MapStartOrContinueResponse,
1212
+ ),
1175
1213
  '/modal.client.ModalClient/MountGetOrCreate': grpclib.const.Handler(
1176
1214
  self.MountGetOrCreate,
1177
1215
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -1346,6 +1384,18 @@ class ModalClientBase(abc.ABC):
1346
1384
  modal_proto.api_pb2.SandboxSnapshotFsRequest,
1347
1385
  modal_proto.api_pb2.SandboxSnapshotFsResponse,
1348
1386
  ),
1387
+ '/modal.client.ModalClient/SandboxSnapshotFsAsync': grpclib.const.Handler(
1388
+ self.SandboxSnapshotFsAsync,
1389
+ grpclib.const.Cardinality.UNARY_UNARY,
1390
+ modal_proto.api_pb2.SandboxSnapshotFsAsyncRequest,
1391
+ modal_proto.api_pb2.SandboxSnapshotFsAsyncResponse,
1392
+ ),
1393
+ '/modal.client.ModalClient/SandboxSnapshotFsAsyncGet': grpclib.const.Handler(
1394
+ self.SandboxSnapshotFsAsyncGet,
1395
+ grpclib.const.Cardinality.UNARY_UNARY,
1396
+ modal_proto.api_pb2.SandboxSnapshotFsAsyncGetRequest,
1397
+ modal_proto.api_pb2.SandboxSnapshotFsResponse,
1398
+ ),
1349
1399
  '/modal.client.ModalClient/SandboxSnapshotGet': grpclib.const.Handler(
1350
1400
  self.SandboxSnapshotGet,
1351
1401
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -2132,6 +2182,24 @@ class ModalClientStub:
2132
2182
  modal_proto.api_pb2.ImageJoinStreamingRequest,
2133
2183
  modal_proto.api_pb2.ImageJoinStreamingResponse,
2134
2184
  )
2185
+ self.MapAwait = grpclib.client.UnaryUnaryMethod(
2186
+ channel,
2187
+ '/modal.client.ModalClient/MapAwait',
2188
+ modal_proto.api_pb2.MapAwaitRequest,
2189
+ modal_proto.api_pb2.MapAwaitResponse,
2190
+ )
2191
+ self.MapCheckInputs = grpclib.client.UnaryUnaryMethod(
2192
+ channel,
2193
+ '/modal.client.ModalClient/MapCheckInputs',
2194
+ modal_proto.api_pb2.MapCheckInputsRequest,
2195
+ modal_proto.api_pb2.MapCheckInputsResponse,
2196
+ )
2197
+ self.MapStartOrContinue = grpclib.client.UnaryUnaryMethod(
2198
+ channel,
2199
+ '/modal.client.ModalClient/MapStartOrContinue',
2200
+ modal_proto.api_pb2.MapStartOrContinueRequest,
2201
+ modal_proto.api_pb2.MapStartOrContinueResponse,
2202
+ )
2135
2203
  self.MountGetOrCreate = grpclib.client.UnaryUnaryMethod(
2136
2204
  channel,
2137
2205
  '/modal.client.ModalClient/MountGetOrCreate',
@@ -2306,6 +2374,18 @@ class ModalClientStub:
2306
2374
  modal_proto.api_pb2.SandboxSnapshotFsRequest,
2307
2375
  modal_proto.api_pb2.SandboxSnapshotFsResponse,
2308
2376
  )
2377
+ self.SandboxSnapshotFsAsync = grpclib.client.UnaryUnaryMethod(
2378
+ channel,
2379
+ '/modal.client.ModalClient/SandboxSnapshotFsAsync',
2380
+ modal_proto.api_pb2.SandboxSnapshotFsAsyncRequest,
2381
+ modal_proto.api_pb2.SandboxSnapshotFsAsyncResponse,
2382
+ )
2383
+ self.SandboxSnapshotFsAsyncGet = grpclib.client.UnaryUnaryMethod(
2384
+ channel,
2385
+ '/modal.client.ModalClient/SandboxSnapshotFsAsyncGet',
2386
+ modal_proto.api_pb2.SandboxSnapshotFsAsyncGetRequest,
2387
+ modal_proto.api_pb2.SandboxSnapshotFsResponse,
2388
+ )
2309
2389
  self.SandboxSnapshotGet = grpclib.client.UnaryUnaryMethod(
2310
2390
  channel,
2311
2391
  '/modal.client.ModalClient/SandboxSnapshotGet',