modal 1.1.5.dev83__py3-none-any.whl → 1.3.1.dev8__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (139) hide show
  1. modal/__init__.py +4 -4
  2. modal/__main__.py +4 -29
  3. modal/_billing.py +84 -0
  4. modal/_clustered_functions.py +1 -3
  5. modal/_container_entrypoint.py +33 -208
  6. modal/_functions.py +146 -121
  7. modal/_grpc_client.py +191 -0
  8. modal/_ipython.py +16 -6
  9. modal/_load_context.py +106 -0
  10. modal/_object.py +72 -21
  11. modal/_output.py +12 -14
  12. modal/_partial_function.py +31 -4
  13. modal/_resolver.py +44 -57
  14. modal/_runtime/container_io_manager.py +26 -28
  15. modal/_runtime/container_io_manager.pyi +42 -44
  16. modal/_runtime/gpu_memory_snapshot.py +9 -7
  17. modal/_runtime/user_code_event_loop.py +80 -0
  18. modal/_runtime/user_code_imports.py +236 -10
  19. modal/_serialization.py +2 -1
  20. modal/_traceback.py +4 -13
  21. modal/_tunnel.py +16 -11
  22. modal/_tunnel.pyi +25 -3
  23. modal/_utils/async_utils.py +337 -10
  24. modal/_utils/auth_token_manager.py +1 -4
  25. modal/_utils/blob_utils.py +29 -22
  26. modal/_utils/function_utils.py +20 -21
  27. modal/_utils/grpc_testing.py +6 -3
  28. modal/_utils/grpc_utils.py +223 -64
  29. modal/_utils/mount_utils.py +26 -1
  30. modal/_utils/package_utils.py +0 -1
  31. modal/_utils/rand_pb_testing.py +8 -1
  32. modal/_utils/task_command_router_client.py +524 -0
  33. modal/_vendor/cloudpickle.py +144 -48
  34. modal/app.py +215 -96
  35. modal/app.pyi +78 -37
  36. modal/billing.py +5 -0
  37. modal/builder/2025.06.txt +6 -3
  38. modal/builder/PREVIEW.txt +2 -1
  39. modal/builder/base-images.json +4 -2
  40. modal/cli/_download.py +19 -3
  41. modal/cli/cluster.py +4 -2
  42. modal/cli/config.py +3 -1
  43. modal/cli/container.py +5 -4
  44. modal/cli/dict.py +5 -2
  45. modal/cli/entry_point.py +26 -2
  46. modal/cli/environment.py +2 -16
  47. modal/cli/launch.py +1 -76
  48. modal/cli/network_file_system.py +5 -20
  49. modal/cli/queues.py +5 -4
  50. modal/cli/run.py +24 -204
  51. modal/cli/secret.py +1 -2
  52. modal/cli/shell.py +375 -0
  53. modal/cli/utils.py +1 -13
  54. modal/cli/volume.py +11 -17
  55. modal/client.py +16 -125
  56. modal/client.pyi +94 -144
  57. modal/cloud_bucket_mount.py +3 -1
  58. modal/cloud_bucket_mount.pyi +4 -0
  59. modal/cls.py +101 -64
  60. modal/cls.pyi +9 -8
  61. modal/config.py +21 -1
  62. modal/container_process.py +288 -12
  63. modal/container_process.pyi +99 -38
  64. modal/dict.py +72 -33
  65. modal/dict.pyi +88 -57
  66. modal/environments.py +16 -8
  67. modal/environments.pyi +6 -2
  68. modal/exception.py +154 -16
  69. modal/experimental/__init__.py +23 -5
  70. modal/experimental/flash.py +161 -74
  71. modal/experimental/flash.pyi +97 -49
  72. modal/file_io.py +50 -92
  73. modal/file_io.pyi +117 -89
  74. modal/functions.pyi +70 -87
  75. modal/image.py +73 -47
  76. modal/image.pyi +33 -30
  77. modal/io_streams.py +500 -149
  78. modal/io_streams.pyi +279 -189
  79. modal/mount.py +60 -45
  80. modal/mount.pyi +41 -17
  81. modal/network_file_system.py +19 -11
  82. modal/network_file_system.pyi +72 -39
  83. modal/object.pyi +114 -22
  84. modal/parallel_map.py +42 -44
  85. modal/parallel_map.pyi +9 -17
  86. modal/partial_function.pyi +4 -2
  87. modal/proxy.py +14 -6
  88. modal/proxy.pyi +10 -2
  89. modal/queue.py +45 -38
  90. modal/queue.pyi +88 -52
  91. modal/runner.py +96 -96
  92. modal/runner.pyi +44 -27
  93. modal/sandbox.py +225 -108
  94. modal/sandbox.pyi +226 -63
  95. modal/secret.py +58 -56
  96. modal/secret.pyi +28 -13
  97. modal/serving.py +7 -11
  98. modal/serving.pyi +7 -8
  99. modal/snapshot.py +29 -15
  100. modal/snapshot.pyi +18 -10
  101. modal/token_flow.py +1 -1
  102. modal/token_flow.pyi +4 -6
  103. modal/volume.py +102 -55
  104. modal/volume.pyi +125 -66
  105. {modal-1.1.5.dev83.dist-info → modal-1.3.1.dev8.dist-info}/METADATA +10 -9
  106. modal-1.3.1.dev8.dist-info/RECORD +189 -0
  107. modal_proto/api.proto +86 -30
  108. modal_proto/api_grpc.py +10 -25
  109. modal_proto/api_pb2.py +1080 -1047
  110. modal_proto/api_pb2.pyi +253 -79
  111. modal_proto/api_pb2_grpc.py +14 -48
  112. modal_proto/api_pb2_grpc.pyi +6 -18
  113. modal_proto/modal_api_grpc.py +175 -176
  114. modal_proto/{sandbox_router.proto → task_command_router.proto} +62 -45
  115. modal_proto/task_command_router_grpc.py +138 -0
  116. modal_proto/task_command_router_pb2.py +180 -0
  117. modal_proto/{sandbox_router_pb2.pyi → task_command_router_pb2.pyi} +110 -63
  118. modal_proto/task_command_router_pb2_grpc.py +272 -0
  119. modal_proto/task_command_router_pb2_grpc.pyi +100 -0
  120. modal_version/__init__.py +1 -1
  121. modal_version/__main__.py +1 -1
  122. modal/cli/programs/launch_instance_ssh.py +0 -94
  123. modal/cli/programs/run_marimo.py +0 -95
  124. modal-1.1.5.dev83.dist-info/RECORD +0 -191
  125. modal_proto/modal_options_grpc.py +0 -3
  126. modal_proto/options.proto +0 -19
  127. modal_proto/options_grpc.py +0 -3
  128. modal_proto/options_pb2.py +0 -35
  129. modal_proto/options_pb2.pyi +0 -20
  130. modal_proto/options_pb2_grpc.py +0 -4
  131. modal_proto/options_pb2_grpc.pyi +0 -7
  132. modal_proto/sandbox_router_grpc.py +0 -105
  133. modal_proto/sandbox_router_pb2.py +0 -148
  134. modal_proto/sandbox_router_pb2_grpc.py +0 -203
  135. modal_proto/sandbox_router_pb2_grpc.pyi +0 -75
  136. {modal-1.1.5.dev83.dist-info → modal-1.3.1.dev8.dist-info}/WHEEL +0 -0
  137. {modal-1.1.5.dev83.dist-info → modal-1.3.1.dev8.dist-info}/entry_points.txt +0 -0
  138. {modal-1.1.5.dev83.dist-info → modal-1.3.1.dev8.dist-info}/licenses/LICENSE +0 -0
  139. {modal-1.1.5.dev83.dist-info → modal-1.3.1.dev8.dist-info}/top_level.txt +0 -0
modal_proto/api.proto CHANGED
@@ -4,6 +4,7 @@ option go_package = "github.com/modal-labs/modal/go/proto";
4
4
 
5
5
  package modal.client;
6
6
 
7
+ import "google/protobuf/any.proto";
7
8
  import "google/protobuf/empty.proto";
8
9
  import "google/protobuf/struct.proto";
9
10
  import "google/protobuf/timestamp.proto";
@@ -301,6 +302,7 @@ message AppCreateRequest {
301
302
  string description = 2; // Human readable label for the app
302
303
  string environment_name = 5;
303
304
  AppState app_state = 6;
305
+ map<string, string> tags = 7; // Additional metadata to attach to the App
304
306
  }
305
307
 
306
308
  message AppCreateResponse {
@@ -366,6 +368,7 @@ message AppGetLogsRequest {
366
368
  float timeout = 2;
367
369
  string last_entry_id = 4;
368
370
  string function_id = 5;
371
+ string parametrized_function_id = 11;
369
372
  string input_id = 6;
370
373
  string task_id = 7;
371
374
  string function_call_id = 9;
@@ -728,6 +731,7 @@ message BuildFunction {
728
731
  message CancelInputEvent {
729
732
  repeated string input_ids = 1;
730
733
  bool terminate_containers = 2;
734
+ string cancellation_reason = 3;
731
735
  }
732
736
 
733
737
  message CheckpointInfo {
@@ -848,6 +852,12 @@ message CloudBucketMount {
848
852
  GCP = 3;
849
853
  }
850
854
 
855
+ enum MetadataTTLType {
856
+ METADATA_TTL_TYPE_UNSPECIFIED = 0;
857
+ METADATA_TTL_TYPE_MINIMAL = 1;
858
+ METADATA_TTL_TYPE_INDEFINITE = 2;
859
+ }
860
+
851
861
  string bucket_name = 1;
852
862
  string mount_path = 2;
853
863
  string credentials_secret_id = 3;
@@ -857,6 +867,11 @@ message CloudBucketMount {
857
867
  optional string bucket_endpoint_url = 7;
858
868
  optional string key_prefix = 8;
859
869
  optional string oidc_auth_role_arn = 9;
870
+ bool force_path_style = 10;
871
+ oneof metadata_ttl_oneof {
872
+ MetadataTTLType metadata_ttl_type = 11;
873
+ uint64 metadata_ttl_seconds = 12;
874
+ }
860
875
  }
861
876
 
862
877
  message ClusterGetRequest {
@@ -1277,6 +1292,10 @@ message EnvironmentListItem {
1277
1292
  bool default = 4;
1278
1293
  bool is_managed = 5;
1279
1294
  string environment_id = 6;
1295
+ optional int32 max_concurrent_tasks = 7;
1296
+ optional int32 max_concurrent_gpus = 8;
1297
+ int32 current_concurrent_tasks = 9;
1298
+ int32 current_concurrent_gpus = 10;
1280
1299
  }
1281
1300
 
1282
1301
  message EnvironmentListResponse {
@@ -1300,6 +1319,8 @@ message EnvironmentUpdateRequest {
1300
1319
  string current_name = 1;
1301
1320
  google.protobuf.StringValue name = 2;
1302
1321
  google.protobuf.StringValue web_suffix = 3;
1322
+ optional int32 max_concurrent_tasks = 4;
1323
+ optional int32 max_concurrent_gpus = 5;
1303
1324
  }
1304
1325
 
1305
1326
  // A file entry when listing files in a volume or network file system.
@@ -1448,6 +1469,8 @@ message Function {
1448
1469
 
1449
1470
  bool block_network = 44;
1450
1471
 
1472
+ // In the SDK, we've deprecated `max_inputs` (which only every implemented `max_inputs=1`)
1473
+ // in favor of a boolean `single_use_containers` parameter.
1451
1474
  uint32 max_inputs = 46;
1452
1475
 
1453
1476
  repeated S3Mount s3_mounts = 47;
@@ -1530,6 +1553,14 @@ message Function {
1530
1553
  uint32 startup_timeout_secs = 86;
1531
1554
  repeated DataFormat supported_input_formats = 87; // can be used as inputs
1532
1555
  repeated DataFormat supported_output_formats = 88;
1556
+ optional HTTPConfig http_config = 89;
1557
+
1558
+ // Attribute on the module with the implementation, which may differ from function_name
1559
+ // when the user provided a custom name= for the Function inside the Application namespace
1560
+ string implementation_name = 90;
1561
+
1562
+ bool single_use_containers = 91; // When True, containers will shut down after handling a single input
1563
+
1533
1564
  }
1534
1565
 
1535
1566
  message FunctionAsyncInvokeRequest {
@@ -1585,6 +1616,7 @@ message FunctionCallGetDataRequest {
1585
1616
  string attempt_token = 3;
1586
1617
  }
1587
1618
  uint64 last_index = 2;
1619
+ bool use_gapless_read = 4;
1588
1620
  }
1589
1621
 
1590
1622
  message FunctionCallInfo {
@@ -1707,6 +1739,11 @@ message FunctionData {
1707
1739
  uint32 startup_timeout_secs = 36;
1708
1740
  repeated DataFormat supported_input_formats = 37;
1709
1741
  repeated DataFormat supported_output_formats = 38;
1742
+ optional HTTPConfig http_config = 39;
1743
+
1744
+ // Attribute on the module with the implementation, which may differ from function_name
1745
+ // when the user provided a custom name= for the Function inside the Application namespace
1746
+ string implementation_name = 40;
1710
1747
  }
1711
1748
 
1712
1749
  message FunctionExtended {
@@ -2025,6 +2062,7 @@ message GPUConfig {
2025
2062
  string gpu_type = 4;
2026
2063
  }
2027
2064
 
2065
+
2028
2066
  message GeneratorDone { // Sent as the output when a generator finishes running.
2029
2067
  uint64 items_total = 1;
2030
2068
  }
@@ -2066,6 +2104,14 @@ message GenericResult { // Used for both tasks and function outputs
2066
2104
  string propagation_reason = 13; // (?)
2067
2105
  }
2068
2106
 
2107
+ message HTTPConfig {
2108
+ uint32 port = 1;
2109
+ repeated string proxy_regions = 2;
2110
+ uint32 startup_timeout = 3;
2111
+ uint32 exit_grace_period = 4;
2112
+ bool h2_enabled = 5;
2113
+ }
2114
+
2069
2115
  message Image {
2070
2116
  repeated BaseImage base_images = 5;
2071
2117
  repeated string dockerfile_commands = 6;
@@ -2446,8 +2492,9 @@ message Proxy {
2446
2492
  string name = 1;
2447
2493
  double created_at = 2;
2448
2494
  string environment_name = 3;
2449
- string proxy_id = 5;
2450
2495
  repeated ProxyIp proxy_ips = 4;
2496
+ string proxy_id = 5;
2497
+ string region = 6;
2451
2498
  }
2452
2499
 
2453
2500
  message ProxyAddIpRequest {
@@ -2461,6 +2508,7 @@ message ProxyAddIpResponse {
2461
2508
  message ProxyCreateRequest {
2462
2509
  string name = 1;
2463
2510
  string environment_name = 2;
2511
+ string region = 3;
2464
2512
  }
2465
2513
 
2466
2514
  message ProxyCreateResponse {
@@ -2609,6 +2657,22 @@ message QueuePutRequest {
2609
2657
  int32 partition_ttl_seconds = 6;
2610
2658
  }
2611
2659
 
2660
+ // Retry repolicy used by GRPCError.details for the server to give instructions
2661
+ // for the client to retry.
2662
+ message RPCRetryPolicy {
2663
+ float retry_after_secs = 1;
2664
+ }
2665
+
2666
+ // A copy google.rpc.Status for GRPCError.details:
2667
+ // https://github.com/googleapis/googleapis/blob/master/google/rpc/status.proto
2668
+ // RPCStatus is compatible with google.rpc.Status, so one can encode messages using
2669
+ // google.rpc.Status. The `details` field can be a list of any message, but for client
2670
+ // to decode it, the messages should be defined here (`modal_proto`).
2671
+ message RPCStatus {
2672
+ int32 code = 1;
2673
+ string message = 2;
2674
+ repeated google.protobuf.Any details = 3;
2675
+ }
2612
2676
 
2613
2677
  message RateLimit {
2614
2678
  int32 limit = 1;
@@ -2735,6 +2799,11 @@ message Sandbox {
2735
2799
  // Exec commands for the sandbox will be issued directly to the sandbox
2736
2800
  // command router running on the Modal worker.
2737
2801
  bool direct_sandbox_commands_enabled = 34;
2802
+
2803
+ // Internal: restricts sandbox to run on this specific instance type.
2804
+ // Set by server during SandboxRestore to ensure the restored sandbox runs
2805
+ // on the same instance type as the original snapshot.
2806
+ string _restore_instance_type = 35;
2738
2807
  }
2739
2808
 
2740
2809
  message SandboxCreateConnectTokenRequest {
@@ -2757,18 +2826,6 @@ message SandboxCreateResponse {
2757
2826
  string sandbox_id = 1;
2758
2827
  }
2759
2828
 
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
- message SandboxGetCommandRouterAccessRequest {
2764
- string sandbox_id = 1;
2765
- }
2766
-
2767
- message SandboxGetCommandRouterAccessResponse {
2768
- string jwt = 1;
2769
- string url = 2;
2770
- }
2771
-
2772
2829
  message SandboxGetFromNameRequest {
2773
2830
  string sandbox_name = 1;
2774
2831
  string environment_name = 2;
@@ -2829,7 +2886,7 @@ message SandboxInfo {
2829
2886
  string app_id = 5;
2830
2887
  repeated SandboxTag tags = 6; // TODO: Not yet exposed in client library.
2831
2888
  string name = 7;
2832
-
2889
+ string image_id = 8;
2833
2890
  reserved 2; // modal.client.Sandbox definition
2834
2891
  }
2835
2892
 
@@ -2977,17 +3034,13 @@ message Schedule {
2977
3034
  }
2978
3035
  }
2979
3036
 
3037
+ // Scheduling constraints for Functions and Sandboxes.
2980
3038
  message SchedulerPlacement {
2981
- // TODO(irfansharif):
2982
- // - Fold in cloud, resource needs here too.
2983
- // - Allow specifying list of zones, cloud, fallback and alternative
2984
- // GPU types.
2985
-
2986
3039
  repeated string regions = 4;
2987
- // TODO(irfansharif): Make these two repeated.
2988
- optional string _zone = 2; // admin-only
2989
- optional string _lifecycle = 3; // admin-only, "on-demand" or "spot", else ignored
2990
- repeated string _instance_types = 5; // admin-only
3040
+ optional string _zone = 2 [deprecated = true];
3041
+ optional string _lifecycle = 3 [deprecated = true];
3042
+ repeated string _instance_types = 5 [deprecated = true];
3043
+ bool nonpreemptible = 6; // Functions only
2991
3044
 
2992
3045
  reserved 1;
2993
3046
  }
@@ -3155,12 +3208,16 @@ message TaskCurrentInputsResponse {
3155
3208
  repeated string input_ids = 1;
3156
3209
  }
3157
3210
 
3158
- message TaskGetAutoscalingMetricsRequest {
3211
+ // Used to get a JWT and URL for direct access to a task command router
3212
+ // running on the modal-worker, so the client can issue exec commands (and other
3213
+ // operations as they become available) directly to the worker.
3214
+ message TaskGetCommandRouterAccessRequest {
3159
3215
  string task_id = 1;
3160
3216
  }
3161
3217
 
3162
- message TaskGetAutoscalingMetricsResponse {
3163
- AutoscalingMetrics metrics = 1;
3218
+ message TaskGetCommandRouterAccessResponse {
3219
+ string jwt = 1;
3220
+ string url = 2;
3164
3221
  }
3165
3222
 
3166
3223
  message TaskInfo {
@@ -3551,16 +3608,16 @@ message WebUrlInfo {
3551
3608
  message WebhookConfig {
3552
3609
  WebhookType type = 1;
3553
3610
  string method = 2;
3554
- string requested_suffix = 4;
3611
+ string requested_suffix = 4; // User-supplied "label" component of URL
3555
3612
  WebhookAsyncMode async_mode = 5;
3556
3613
  repeated CustomDomainConfig custom_domains = 6;
3557
3614
  uint32 web_server_port = 7;
3558
3615
  float web_server_startup_timeout = 8;
3559
3616
  bool web_endpoint_docs = 9;
3560
3617
  bool requires_proxy_auth = 10;
3618
+ string ephemeral_suffix = 11; // Additional URL suffix added for ephemeral Apps
3561
3619
  }
3562
3620
 
3563
-
3564
3621
  message WorkspaceBillingReportItem {
3565
3622
  string object_id = 1;
3566
3623
  string description = 2;
@@ -3740,7 +3797,6 @@ service ModalClient {
3740
3797
  // Sandboxes
3741
3798
  rpc SandboxCreate(SandboxCreateRequest) returns (SandboxCreateResponse);
3742
3799
  rpc SandboxCreateConnectToken(SandboxCreateConnectTokenRequest) returns (SandboxCreateConnectTokenResponse);
3743
- rpc SandboxGetCommandRouterAccess(SandboxGetCommandRouterAccessRequest) returns (SandboxGetCommandRouterAccessResponse);
3744
3800
  rpc SandboxGetFromName(SandboxGetFromNameRequest) returns (SandboxGetFromNameResponse);
3745
3801
  rpc SandboxGetLogs(SandboxGetLogsRequest) returns (stream TaskLogsBatch);
3746
3802
  rpc SandboxGetResourceUsage(SandboxGetResourceUsageRequest) returns (SandboxGetResourceUsageResponse);
@@ -3779,7 +3835,7 @@ service ModalClient {
3779
3835
  // Tasks
3780
3836
  rpc TaskClusterHello(TaskClusterHelloRequest) returns (TaskClusterHelloResponse);
3781
3837
  rpc TaskCurrentInputs(google.protobuf.Empty) returns (TaskCurrentInputsResponse);
3782
- rpc TaskGetAutoscalingMetrics(TaskGetAutoscalingMetricsRequest) returns (TaskGetAutoscalingMetricsResponse); // Used for flash autoscaling
3838
+ rpc TaskGetCommandRouterAccess(TaskGetCommandRouterAccessRequest) returns (TaskGetCommandRouterAccessResponse);
3783
3839
  rpc TaskList(TaskListRequest) returns (TaskListResponse);
3784
3840
  rpc TaskResult(TaskResultRequest) returns (google.protobuf.Empty);
3785
3841
 
modal_proto/api_grpc.py CHANGED
@@ -9,6 +9,7 @@ import grpclib.client
9
9
  if typing.TYPE_CHECKING:
10
10
  import grpclib.server
11
11
 
12
+ import google.protobuf.any_pb2
12
13
  import google.protobuf.empty_pb2
13
14
  import google.protobuf.struct_pb2
14
15
  import google.protobuf.timestamp_pb2
@@ -482,10 +483,6 @@ class ModalClientBase(abc.ABC):
482
483
  async def SandboxCreateConnectToken(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxCreateConnectTokenRequest, modal_proto.api_pb2.SandboxCreateConnectTokenResponse]') -> None:
483
484
  pass
484
485
 
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
486
  @abc.abstractmethod
490
487
  async def SandboxGetFromName(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxGetFromNameRequest, modal_proto.api_pb2.SandboxGetFromNameResponse]') -> None:
491
488
  pass
@@ -615,7 +612,7 @@ class ModalClientBase(abc.ABC):
615
612
  pass
616
613
 
617
614
  @abc.abstractmethod
618
- async def TaskGetAutoscalingMetrics(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.TaskGetAutoscalingMetricsRequest, modal_proto.api_pb2.TaskGetAutoscalingMetricsResponse]') -> None:
615
+ async def TaskGetCommandRouterAccess(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.TaskGetCommandRouterAccessRequest, modal_proto.api_pb2.TaskGetCommandRouterAccessResponse]') -> None:
619
616
  pass
620
617
 
621
618
  @abc.abstractmethod
@@ -1416,12 +1413,6 @@ class ModalClientBase(abc.ABC):
1416
1413
  modal_proto.api_pb2.SandboxCreateConnectTokenRequest,
1417
1414
  modal_proto.api_pb2.SandboxCreateConnectTokenResponse,
1418
1415
  ),
1419
- '/modal.client.ModalClient/SandboxGetCommandRouterAccess': grpclib.const.Handler(
1420
- self.SandboxGetCommandRouterAccess,
1421
- grpclib.const.Cardinality.UNARY_UNARY,
1422
- modal_proto.api_pb2.SandboxGetCommandRouterAccessRequest,
1423
- modal_proto.api_pb2.SandboxGetCommandRouterAccessResponse,
1424
- ),
1425
1416
  '/modal.client.ModalClient/SandboxGetFromName': grpclib.const.Handler(
1426
1417
  self.SandboxGetFromName,
1427
1418
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -1614,11 +1605,11 @@ class ModalClientBase(abc.ABC):
1614
1605
  google.protobuf.empty_pb2.Empty,
1615
1606
  modal_proto.api_pb2.TaskCurrentInputsResponse,
1616
1607
  ),
1617
- '/modal.client.ModalClient/TaskGetAutoscalingMetrics': grpclib.const.Handler(
1618
- self.TaskGetAutoscalingMetrics,
1608
+ '/modal.client.ModalClient/TaskGetCommandRouterAccess': grpclib.const.Handler(
1609
+ self.TaskGetCommandRouterAccess,
1619
1610
  grpclib.const.Cardinality.UNARY_UNARY,
1620
- modal_proto.api_pb2.TaskGetAutoscalingMetricsRequest,
1621
- modal_proto.api_pb2.TaskGetAutoscalingMetricsResponse,
1611
+ modal_proto.api_pb2.TaskGetCommandRouterAccessRequest,
1612
+ modal_proto.api_pb2.TaskGetCommandRouterAccessResponse,
1622
1613
  ),
1623
1614
  '/modal.client.ModalClient/TaskList': grpclib.const.Handler(
1624
1615
  self.TaskList,
@@ -2472,12 +2463,6 @@ class ModalClientStub:
2472
2463
  modal_proto.api_pb2.SandboxCreateConnectTokenRequest,
2473
2464
  modal_proto.api_pb2.SandboxCreateConnectTokenResponse,
2474
2465
  )
2475
- self.SandboxGetCommandRouterAccess = grpclib.client.UnaryUnaryMethod(
2476
- channel,
2477
- '/modal.client.ModalClient/SandboxGetCommandRouterAccess',
2478
- modal_proto.api_pb2.SandboxGetCommandRouterAccessRequest,
2479
- modal_proto.api_pb2.SandboxGetCommandRouterAccessResponse,
2480
- )
2481
2466
  self.SandboxGetFromName = grpclib.client.UnaryUnaryMethod(
2482
2467
  channel,
2483
2468
  '/modal.client.ModalClient/SandboxGetFromName',
@@ -2670,11 +2655,11 @@ class ModalClientStub:
2670
2655
  google.protobuf.empty_pb2.Empty,
2671
2656
  modal_proto.api_pb2.TaskCurrentInputsResponse,
2672
2657
  )
2673
- self.TaskGetAutoscalingMetrics = grpclib.client.UnaryUnaryMethod(
2658
+ self.TaskGetCommandRouterAccess = grpclib.client.UnaryUnaryMethod(
2674
2659
  channel,
2675
- '/modal.client.ModalClient/TaskGetAutoscalingMetrics',
2676
- modal_proto.api_pb2.TaskGetAutoscalingMetricsRequest,
2677
- modal_proto.api_pb2.TaskGetAutoscalingMetricsResponse,
2660
+ '/modal.client.ModalClient/TaskGetCommandRouterAccess',
2661
+ modal_proto.api_pb2.TaskGetCommandRouterAccessRequest,
2662
+ modal_proto.api_pb2.TaskGetCommandRouterAccessResponse,
2678
2663
  )
2679
2664
  self.TaskList = grpclib.client.UnaryUnaryMethod(
2680
2665
  channel,