modal 1.1.5.dev66__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 (143) 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 +171 -138
  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 +30 -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/name_utils.py +2 -3
  31. modal/_utils/package_utils.py +0 -1
  32. modal/_utils/rand_pb_testing.py +8 -1
  33. modal/_utils/task_command_router_client.py +524 -0
  34. modal/_vendor/cloudpickle.py +144 -48
  35. modal/app.py +285 -105
  36. modal/app.pyi +216 -53
  37. modal/billing.py +5 -0
  38. modal/builder/2025.06.txt +6 -3
  39. modal/builder/PREVIEW.txt +2 -1
  40. modal/builder/base-images.json +4 -2
  41. modal/cli/_download.py +19 -3
  42. modal/cli/cluster.py +4 -2
  43. modal/cli/config.py +3 -1
  44. modal/cli/container.py +5 -4
  45. modal/cli/dict.py +5 -2
  46. modal/cli/entry_point.py +26 -2
  47. modal/cli/environment.py +2 -16
  48. modal/cli/launch.py +1 -76
  49. modal/cli/network_file_system.py +5 -20
  50. modal/cli/programs/run_jupyter.py +1 -1
  51. modal/cli/programs/vscode.py +1 -1
  52. modal/cli/queues.py +5 -4
  53. modal/cli/run.py +24 -204
  54. modal/cli/secret.py +1 -2
  55. modal/cli/shell.py +375 -0
  56. modal/cli/utils.py +1 -13
  57. modal/cli/volume.py +11 -17
  58. modal/client.py +16 -125
  59. modal/client.pyi +94 -144
  60. modal/cloud_bucket_mount.py +3 -1
  61. modal/cloud_bucket_mount.pyi +4 -0
  62. modal/cls.py +101 -64
  63. modal/cls.pyi +9 -8
  64. modal/config.py +21 -1
  65. modal/container_process.py +288 -12
  66. modal/container_process.pyi +99 -38
  67. modal/dict.py +72 -33
  68. modal/dict.pyi +88 -57
  69. modal/environments.py +16 -8
  70. modal/environments.pyi +6 -2
  71. modal/exception.py +154 -16
  72. modal/experimental/__init__.py +24 -53
  73. modal/experimental/flash.py +161 -74
  74. modal/experimental/flash.pyi +97 -49
  75. modal/file_io.py +50 -92
  76. modal/file_io.pyi +117 -89
  77. modal/functions.pyi +70 -87
  78. modal/image.py +82 -47
  79. modal/image.pyi +51 -30
  80. modal/io_streams.py +500 -149
  81. modal/io_streams.pyi +279 -189
  82. modal/mount.py +60 -46
  83. modal/mount.pyi +41 -17
  84. modal/network_file_system.py +19 -11
  85. modal/network_file_system.pyi +72 -39
  86. modal/object.pyi +114 -22
  87. modal/parallel_map.py +42 -44
  88. modal/parallel_map.pyi +9 -17
  89. modal/partial_function.pyi +4 -2
  90. modal/proxy.py +14 -6
  91. modal/proxy.pyi +10 -2
  92. modal/queue.py +45 -38
  93. modal/queue.pyi +88 -52
  94. modal/runner.py +96 -96
  95. modal/runner.pyi +44 -27
  96. modal/sandbox.py +225 -107
  97. modal/sandbox.pyi +226 -60
  98. modal/secret.py +58 -56
  99. modal/secret.pyi +28 -13
  100. modal/serving.py +7 -11
  101. modal/serving.pyi +7 -8
  102. modal/snapshot.py +29 -15
  103. modal/snapshot.pyi +18 -10
  104. modal/token_flow.py +1 -1
  105. modal/token_flow.pyi +4 -6
  106. modal/volume.py +102 -55
  107. modal/volume.pyi +125 -66
  108. {modal-1.1.5.dev66.dist-info → modal-1.3.1.dev8.dist-info}/METADATA +10 -9
  109. modal-1.3.1.dev8.dist-info/RECORD +189 -0
  110. modal_proto/api.proto +141 -70
  111. modal_proto/api_grpc.py +42 -26
  112. modal_proto/api_pb2.py +1123 -1103
  113. modal_proto/api_pb2.pyi +331 -83
  114. modal_proto/api_pb2_grpc.py +80 -48
  115. modal_proto/api_pb2_grpc.pyi +26 -18
  116. modal_proto/modal_api_grpc.py +175 -174
  117. modal_proto/task_command_router.proto +164 -0
  118. modal_proto/task_command_router_grpc.py +138 -0
  119. modal_proto/task_command_router_pb2.py +180 -0
  120. modal_proto/{sandbox_router_pb2.pyi → task_command_router_pb2.pyi} +148 -57
  121. modal_proto/task_command_router_pb2_grpc.py +272 -0
  122. modal_proto/task_command_router_pb2_grpc.pyi +100 -0
  123. modal_version/__init__.py +1 -1
  124. modal_version/__main__.py +1 -1
  125. modal/cli/programs/launch_instance_ssh.py +0 -94
  126. modal/cli/programs/run_marimo.py +0 -95
  127. modal-1.1.5.dev66.dist-info/RECORD +0 -191
  128. modal_proto/modal_options_grpc.py +0 -3
  129. modal_proto/options.proto +0 -19
  130. modal_proto/options_grpc.py +0 -3
  131. modal_proto/options_pb2.py +0 -35
  132. modal_proto/options_pb2.pyi +0 -20
  133. modal_proto/options_pb2_grpc.py +0 -4
  134. modal_proto/options_pb2_grpc.pyi +0 -7
  135. modal_proto/sandbox_router.proto +0 -125
  136. modal_proto/sandbox_router_grpc.py +0 -89
  137. modal_proto/sandbox_router_pb2.py +0 -128
  138. modal_proto/sandbox_router_pb2_grpc.py +0 -169
  139. modal_proto/sandbox_router_pb2_grpc.pyi +0 -63
  140. {modal-1.1.5.dev66.dist-info → modal-1.3.1.dev8.dist-info}/WHEEL +0 -0
  141. {modal-1.1.5.dev66.dist-info → modal-1.3.1.dev8.dist-info}/entry_points.txt +0 -0
  142. {modal-1.1.5.dev66.dist-info → modal-1.3.1.dev8.dist-info}/licenses/LICENSE +0 -0
  143. {modal-1.1.5.dev66.dist-info → modal-1.3.1.dev8.dist-info}/top_level.txt +0 -0
modal_proto/api_pb2.pyi CHANGED
@@ -4,6 +4,7 @@ isort:skip_file
4
4
  """
5
5
  import builtins
6
6
  import collections.abc
7
+ import google.protobuf.any_pb2
7
8
  import google.protobuf.descriptor
8
9
  import google.protobuf.internal.containers
9
10
  import google.protobuf.internal.enum_type_wrapper
@@ -809,15 +810,34 @@ global___AppClientDisconnectRequest = AppClientDisconnectRequest
809
810
  class AppCreateRequest(google.protobuf.message.Message):
810
811
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
811
812
 
813
+ class TagsEntry(google.protobuf.message.Message):
814
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
815
+
816
+ KEY_FIELD_NUMBER: builtins.int
817
+ VALUE_FIELD_NUMBER: builtins.int
818
+ key: builtins.str
819
+ value: builtins.str
820
+ def __init__(
821
+ self,
822
+ *,
823
+ key: builtins.str = ...,
824
+ value: builtins.str = ...,
825
+ ) -> None: ...
826
+ def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ...
827
+
812
828
  CLIENT_ID_FIELD_NUMBER: builtins.int
813
829
  DESCRIPTION_FIELD_NUMBER: builtins.int
814
830
  ENVIRONMENT_NAME_FIELD_NUMBER: builtins.int
815
831
  APP_STATE_FIELD_NUMBER: builtins.int
832
+ TAGS_FIELD_NUMBER: builtins.int
816
833
  client_id: builtins.str
817
834
  description: builtins.str
818
835
  """Human readable label for the app"""
819
836
  environment_name: builtins.str
820
837
  app_state: global___AppState.ValueType
838
+ @property
839
+ def tags(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]:
840
+ """Additional metadata to attach to the App"""
821
841
  def __init__(
822
842
  self,
823
843
  *,
@@ -825,8 +845,9 @@ class AppCreateRequest(google.protobuf.message.Message):
825
845
  description: builtins.str = ...,
826
846
  environment_name: builtins.str = ...,
827
847
  app_state: global___AppState.ValueType = ...,
848
+ tags: collections.abc.Mapping[builtins.str, builtins.str] | None = ...,
828
849
  ) -> None: ...
829
- def ClearField(self, field_name: typing_extensions.Literal["app_state", b"app_state", "client_id", b"client_id", "description", b"description", "environment_name", b"environment_name"]) -> None: ...
850
+ def ClearField(self, field_name: typing_extensions.Literal["app_state", b"app_state", "client_id", b"client_id", "description", b"description", "environment_name", b"environment_name", "tags", b"tags"]) -> None: ...
830
851
 
831
852
  global___AppCreateRequest = AppCreateRequest
832
853
 
@@ -1031,6 +1052,7 @@ class AppGetLogsRequest(google.protobuf.message.Message):
1031
1052
  TIMEOUT_FIELD_NUMBER: builtins.int
1032
1053
  LAST_ENTRY_ID_FIELD_NUMBER: builtins.int
1033
1054
  FUNCTION_ID_FIELD_NUMBER: builtins.int
1055
+ PARAMETRIZED_FUNCTION_ID_FIELD_NUMBER: builtins.int
1034
1056
  INPUT_ID_FIELD_NUMBER: builtins.int
1035
1057
  TASK_ID_FIELD_NUMBER: builtins.int
1036
1058
  FUNCTION_CALL_ID_FIELD_NUMBER: builtins.int
@@ -1040,6 +1062,7 @@ class AppGetLogsRequest(google.protobuf.message.Message):
1040
1062
  timeout: builtins.float
1041
1063
  last_entry_id: builtins.str
1042
1064
  function_id: builtins.str
1065
+ parametrized_function_id: builtins.str
1043
1066
  input_id: builtins.str
1044
1067
  task_id: builtins.str
1045
1068
  function_call_id: builtins.str
@@ -1052,13 +1075,14 @@ class AppGetLogsRequest(google.protobuf.message.Message):
1052
1075
  timeout: builtins.float = ...,
1053
1076
  last_entry_id: builtins.str = ...,
1054
1077
  function_id: builtins.str = ...,
1078
+ parametrized_function_id: builtins.str = ...,
1055
1079
  input_id: builtins.str = ...,
1056
1080
  task_id: builtins.str = ...,
1057
1081
  function_call_id: builtins.str = ...,
1058
1082
  file_descriptor: global___FileDescriptor.ValueType = ...,
1059
1083
  sandbox_id: builtins.str = ...,
1060
1084
  ) -> None: ...
1061
- def ClearField(self, field_name: typing_extensions.Literal["app_id", b"app_id", "file_descriptor", b"file_descriptor", "function_call_id", b"function_call_id", "function_id", b"function_id", "input_id", b"input_id", "last_entry_id", b"last_entry_id", "sandbox_id", b"sandbox_id", "task_id", b"task_id", "timeout", b"timeout"]) -> None: ...
1085
+ def ClearField(self, field_name: typing_extensions.Literal["app_id", b"app_id", "file_descriptor", b"file_descriptor", "function_call_id", b"function_call_id", "function_id", b"function_id", "input_id", b"input_id", "last_entry_id", b"last_entry_id", "parametrized_function_id", b"parametrized_function_id", "sandbox_id", b"sandbox_id", "task_id", b"task_id", "timeout", b"timeout"]) -> None: ...
1062
1086
 
1063
1087
  global___AppGetLogsRequest = AppGetLogsRequest
1064
1088
 
@@ -1151,6 +1175,50 @@ class AppGetOrCreateResponse(google.protobuf.message.Message):
1151
1175
 
1152
1176
  global___AppGetOrCreateResponse = AppGetOrCreateResponse
1153
1177
 
1178
+ class AppGetTagsRequest(google.protobuf.message.Message):
1179
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1180
+
1181
+ APP_ID_FIELD_NUMBER: builtins.int
1182
+ app_id: builtins.str
1183
+ def __init__(
1184
+ self,
1185
+ *,
1186
+ app_id: builtins.str = ...,
1187
+ ) -> None: ...
1188
+ def ClearField(self, field_name: typing_extensions.Literal["app_id", b"app_id"]) -> None: ...
1189
+
1190
+ global___AppGetTagsRequest = AppGetTagsRequest
1191
+
1192
+ class AppGetTagsResponse(google.protobuf.message.Message):
1193
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1194
+
1195
+ class TagsEntry(google.protobuf.message.Message):
1196
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1197
+
1198
+ KEY_FIELD_NUMBER: builtins.int
1199
+ VALUE_FIELD_NUMBER: builtins.int
1200
+ key: builtins.str
1201
+ value: builtins.str
1202
+ def __init__(
1203
+ self,
1204
+ *,
1205
+ key: builtins.str = ...,
1206
+ value: builtins.str = ...,
1207
+ ) -> None: ...
1208
+ def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ...
1209
+
1210
+ TAGS_FIELD_NUMBER: builtins.int
1211
+ @property
1212
+ def tags(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: ...
1213
+ def __init__(
1214
+ self,
1215
+ *,
1216
+ tags: collections.abc.Mapping[builtins.str, builtins.str] | None = ...,
1217
+ ) -> None: ...
1218
+ def ClearField(self, field_name: typing_extensions.Literal["tags", b"tags"]) -> None: ...
1219
+
1220
+ global___AppGetTagsResponse = AppGetTagsResponse
1221
+
1154
1222
  class AppHeartbeatRequest(google.protobuf.message.Message):
1155
1223
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
1156
1224
 
@@ -1509,6 +1577,39 @@ class AppSetObjectsRequest(google.protobuf.message.Message):
1509
1577
 
1510
1578
  global___AppSetObjectsRequest = AppSetObjectsRequest
1511
1579
 
1580
+ class AppSetTagsRequest(google.protobuf.message.Message):
1581
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1582
+
1583
+ class TagsEntry(google.protobuf.message.Message):
1584
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1585
+
1586
+ KEY_FIELD_NUMBER: builtins.int
1587
+ VALUE_FIELD_NUMBER: builtins.int
1588
+ key: builtins.str
1589
+ value: builtins.str
1590
+ def __init__(
1591
+ self,
1592
+ *,
1593
+ key: builtins.str = ...,
1594
+ value: builtins.str = ...,
1595
+ ) -> None: ...
1596
+ def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ...
1597
+
1598
+ APP_ID_FIELD_NUMBER: builtins.int
1599
+ TAGS_FIELD_NUMBER: builtins.int
1600
+ app_id: builtins.str
1601
+ @property
1602
+ def tags(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: ...
1603
+ def __init__(
1604
+ self,
1605
+ *,
1606
+ app_id: builtins.str = ...,
1607
+ tags: collections.abc.Mapping[builtins.str, builtins.str] | None = ...,
1608
+ ) -> None: ...
1609
+ def ClearField(self, field_name: typing_extensions.Literal["app_id", b"app_id", "tags", b"tags"]) -> None: ...
1610
+
1611
+ global___AppSetTagsRequest = AppSetTagsRequest
1612
+
1512
1613
  class AppStopRequest(google.protobuf.message.Message):
1513
1614
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
1514
1615
 
@@ -2279,16 +2380,19 @@ class CancelInputEvent(google.protobuf.message.Message):
2279
2380
 
2280
2381
  INPUT_IDS_FIELD_NUMBER: builtins.int
2281
2382
  TERMINATE_CONTAINERS_FIELD_NUMBER: builtins.int
2383
+ CANCELLATION_REASON_FIELD_NUMBER: builtins.int
2282
2384
  @property
2283
2385
  def input_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
2284
2386
  terminate_containers: builtins.bool
2387
+ cancellation_reason: builtins.str
2285
2388
  def __init__(
2286
2389
  self,
2287
2390
  *,
2288
2391
  input_ids: collections.abc.Iterable[builtins.str] | None = ...,
2289
2392
  terminate_containers: builtins.bool = ...,
2393
+ cancellation_reason: builtins.str = ...,
2290
2394
  ) -> None: ...
2291
- def ClearField(self, field_name: typing_extensions.Literal["input_ids", b"input_ids", "terminate_containers", b"terminate_containers"]) -> None: ...
2395
+ def ClearField(self, field_name: typing_extensions.Literal["cancellation_reason", b"cancellation_reason", "input_ids", b"input_ids", "terminate_containers", b"terminate_containers"]) -> None: ...
2292
2396
 
2293
2397
  global___CancelInputEvent = CancelInputEvent
2294
2398
 
@@ -2649,6 +2753,21 @@ class CloudBucketMount(google.protobuf.message.Message):
2649
2753
  R2: CloudBucketMount.BucketType.ValueType # 2
2650
2754
  GCP: CloudBucketMount.BucketType.ValueType # 3
2651
2755
 
2756
+ class _MetadataTTLType:
2757
+ ValueType = typing.NewType("ValueType", builtins.int)
2758
+ V: typing_extensions.TypeAlias = ValueType
2759
+
2760
+ class _MetadataTTLTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[CloudBucketMount._MetadataTTLType.ValueType], builtins.type): # noqa: F821
2761
+ DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
2762
+ METADATA_TTL_TYPE_UNSPECIFIED: CloudBucketMount._MetadataTTLType.ValueType # 0
2763
+ METADATA_TTL_TYPE_MINIMAL: CloudBucketMount._MetadataTTLType.ValueType # 1
2764
+ METADATA_TTL_TYPE_INDEFINITE: CloudBucketMount._MetadataTTLType.ValueType # 2
2765
+
2766
+ class MetadataTTLType(_MetadataTTLType, metaclass=_MetadataTTLTypeEnumTypeWrapper): ...
2767
+ METADATA_TTL_TYPE_UNSPECIFIED: CloudBucketMount.MetadataTTLType.ValueType # 0
2768
+ METADATA_TTL_TYPE_MINIMAL: CloudBucketMount.MetadataTTLType.ValueType # 1
2769
+ METADATA_TTL_TYPE_INDEFINITE: CloudBucketMount.MetadataTTLType.ValueType # 2
2770
+
2652
2771
  BUCKET_NAME_FIELD_NUMBER: builtins.int
2653
2772
  MOUNT_PATH_FIELD_NUMBER: builtins.int
2654
2773
  CREDENTIALS_SECRET_ID_FIELD_NUMBER: builtins.int
@@ -2658,6 +2777,9 @@ class CloudBucketMount(google.protobuf.message.Message):
2658
2777
  BUCKET_ENDPOINT_URL_FIELD_NUMBER: builtins.int
2659
2778
  KEY_PREFIX_FIELD_NUMBER: builtins.int
2660
2779
  OIDC_AUTH_ROLE_ARN_FIELD_NUMBER: builtins.int
2780
+ FORCE_PATH_STYLE_FIELD_NUMBER: builtins.int
2781
+ METADATA_TTL_TYPE_FIELD_NUMBER: builtins.int
2782
+ METADATA_TTL_SECONDS_FIELD_NUMBER: builtins.int
2661
2783
  bucket_name: builtins.str
2662
2784
  mount_path: builtins.str
2663
2785
  credentials_secret_id: builtins.str
@@ -2667,6 +2789,9 @@ class CloudBucketMount(google.protobuf.message.Message):
2667
2789
  bucket_endpoint_url: builtins.str
2668
2790
  key_prefix: builtins.str
2669
2791
  oidc_auth_role_arn: builtins.str
2792
+ force_path_style: builtins.bool
2793
+ metadata_ttl_type: global___CloudBucketMount.MetadataTTLType.ValueType
2794
+ metadata_ttl_seconds: builtins.int
2670
2795
  def __init__(
2671
2796
  self,
2672
2797
  *,
@@ -2679,15 +2804,20 @@ class CloudBucketMount(google.protobuf.message.Message):
2679
2804
  bucket_endpoint_url: builtins.str | None = ...,
2680
2805
  key_prefix: builtins.str | None = ...,
2681
2806
  oidc_auth_role_arn: builtins.str | None = ...,
2807
+ force_path_style: builtins.bool = ...,
2808
+ metadata_ttl_type: global___CloudBucketMount.MetadataTTLType.ValueType = ...,
2809
+ metadata_ttl_seconds: builtins.int = ...,
2682
2810
  ) -> None: ...
2683
- def HasField(self, field_name: typing_extensions.Literal["_bucket_endpoint_url", b"_bucket_endpoint_url", "_key_prefix", b"_key_prefix", "_oidc_auth_role_arn", b"_oidc_auth_role_arn", "bucket_endpoint_url", b"bucket_endpoint_url", "key_prefix", b"key_prefix", "oidc_auth_role_arn", b"oidc_auth_role_arn"]) -> builtins.bool: ...
2684
- def ClearField(self, field_name: typing_extensions.Literal["_bucket_endpoint_url", b"_bucket_endpoint_url", "_key_prefix", b"_key_prefix", "_oidc_auth_role_arn", b"_oidc_auth_role_arn", "bucket_endpoint_url", b"bucket_endpoint_url", "bucket_name", b"bucket_name", "bucket_type", b"bucket_type", "credentials_secret_id", b"credentials_secret_id", "key_prefix", b"key_prefix", "mount_path", b"mount_path", "oidc_auth_role_arn", b"oidc_auth_role_arn", "read_only", b"read_only", "requester_pays", b"requester_pays"]) -> None: ...
2811
+ def HasField(self, field_name: typing_extensions.Literal["_bucket_endpoint_url", b"_bucket_endpoint_url", "_key_prefix", b"_key_prefix", "_oidc_auth_role_arn", b"_oidc_auth_role_arn", "bucket_endpoint_url", b"bucket_endpoint_url", "key_prefix", b"key_prefix", "metadata_ttl_oneof", b"metadata_ttl_oneof", "metadata_ttl_seconds", b"metadata_ttl_seconds", "metadata_ttl_type", b"metadata_ttl_type", "oidc_auth_role_arn", b"oidc_auth_role_arn"]) -> builtins.bool: ...
2812
+ def ClearField(self, field_name: typing_extensions.Literal["_bucket_endpoint_url", b"_bucket_endpoint_url", "_key_prefix", b"_key_prefix", "_oidc_auth_role_arn", b"_oidc_auth_role_arn", "bucket_endpoint_url", b"bucket_endpoint_url", "bucket_name", b"bucket_name", "bucket_type", b"bucket_type", "credentials_secret_id", b"credentials_secret_id", "force_path_style", b"force_path_style", "key_prefix", b"key_prefix", "metadata_ttl_oneof", b"metadata_ttl_oneof", "metadata_ttl_seconds", b"metadata_ttl_seconds", "metadata_ttl_type", b"metadata_ttl_type", "mount_path", b"mount_path", "oidc_auth_role_arn", b"oidc_auth_role_arn", "read_only", b"read_only", "requester_pays", b"requester_pays"]) -> None: ...
2685
2813
  @typing.overload
2686
2814
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_bucket_endpoint_url", b"_bucket_endpoint_url"]) -> typing_extensions.Literal["bucket_endpoint_url"] | None: ...
2687
2815
  @typing.overload
2688
2816
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_key_prefix", b"_key_prefix"]) -> typing_extensions.Literal["key_prefix"] | None: ...
2689
2817
  @typing.overload
2690
2818
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_oidc_auth_role_arn", b"_oidc_auth_role_arn"]) -> typing_extensions.Literal["oidc_auth_role_arn"] | None: ...
2819
+ @typing.overload
2820
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["metadata_ttl_oneof", b"metadata_ttl_oneof"]) -> typing_extensions.Literal["metadata_ttl_type", "metadata_ttl_seconds"] | None: ...
2691
2821
 
2692
2822
  global___CloudBucketMount = CloudBucketMount
2693
2823
 
@@ -4145,12 +4275,20 @@ class EnvironmentListItem(google.protobuf.message.Message):
4145
4275
  DEFAULT_FIELD_NUMBER: builtins.int
4146
4276
  IS_MANAGED_FIELD_NUMBER: builtins.int
4147
4277
  ENVIRONMENT_ID_FIELD_NUMBER: builtins.int
4278
+ MAX_CONCURRENT_TASKS_FIELD_NUMBER: builtins.int
4279
+ MAX_CONCURRENT_GPUS_FIELD_NUMBER: builtins.int
4280
+ CURRENT_CONCURRENT_TASKS_FIELD_NUMBER: builtins.int
4281
+ CURRENT_CONCURRENT_GPUS_FIELD_NUMBER: builtins.int
4148
4282
  name: builtins.str
4149
4283
  webhook_suffix: builtins.str
4150
4284
  created_at: builtins.float
4151
4285
  default: builtins.bool
4152
4286
  is_managed: builtins.bool
4153
4287
  environment_id: builtins.str
4288
+ max_concurrent_tasks: builtins.int
4289
+ max_concurrent_gpus: builtins.int
4290
+ current_concurrent_tasks: builtins.int
4291
+ current_concurrent_gpus: builtins.int
4154
4292
  def __init__(
4155
4293
  self,
4156
4294
  *,
@@ -4160,8 +4298,17 @@ class EnvironmentListItem(google.protobuf.message.Message):
4160
4298
  default: builtins.bool = ...,
4161
4299
  is_managed: builtins.bool = ...,
4162
4300
  environment_id: builtins.str = ...,
4301
+ max_concurrent_tasks: builtins.int | None = ...,
4302
+ max_concurrent_gpus: builtins.int | None = ...,
4303
+ current_concurrent_tasks: builtins.int = ...,
4304
+ current_concurrent_gpus: builtins.int = ...,
4163
4305
  ) -> None: ...
4164
- def ClearField(self, field_name: typing_extensions.Literal["created_at", b"created_at", "default", b"default", "environment_id", b"environment_id", "is_managed", b"is_managed", "name", b"name", "webhook_suffix", b"webhook_suffix"]) -> None: ...
4306
+ def HasField(self, field_name: typing_extensions.Literal["_max_concurrent_gpus", b"_max_concurrent_gpus", "_max_concurrent_tasks", b"_max_concurrent_tasks", "max_concurrent_gpus", b"max_concurrent_gpus", "max_concurrent_tasks", b"max_concurrent_tasks"]) -> builtins.bool: ...
4307
+ def ClearField(self, field_name: typing_extensions.Literal["_max_concurrent_gpus", b"_max_concurrent_gpus", "_max_concurrent_tasks", b"_max_concurrent_tasks", "created_at", b"created_at", "current_concurrent_gpus", b"current_concurrent_gpus", "current_concurrent_tasks", b"current_concurrent_tasks", "default", b"default", "environment_id", b"environment_id", "is_managed", b"is_managed", "max_concurrent_gpus", b"max_concurrent_gpus", "max_concurrent_tasks", b"max_concurrent_tasks", "name", b"name", "webhook_suffix", b"webhook_suffix"]) -> None: ...
4308
+ @typing.overload
4309
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_max_concurrent_gpus", b"_max_concurrent_gpus"]) -> typing_extensions.Literal["max_concurrent_gpus"] | None: ...
4310
+ @typing.overload
4311
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_max_concurrent_tasks", b"_max_concurrent_tasks"]) -> typing_extensions.Literal["max_concurrent_tasks"] | None: ...
4165
4312
 
4166
4313
  global___EnvironmentListItem = EnvironmentListItem
4167
4314
 
@@ -4227,20 +4374,30 @@ class EnvironmentUpdateRequest(google.protobuf.message.Message):
4227
4374
  CURRENT_NAME_FIELD_NUMBER: builtins.int
4228
4375
  NAME_FIELD_NUMBER: builtins.int
4229
4376
  WEB_SUFFIX_FIELD_NUMBER: builtins.int
4377
+ MAX_CONCURRENT_TASKS_FIELD_NUMBER: builtins.int
4378
+ MAX_CONCURRENT_GPUS_FIELD_NUMBER: builtins.int
4230
4379
  current_name: builtins.str
4231
4380
  @property
4232
4381
  def name(self) -> google.protobuf.wrappers_pb2.StringValue: ...
4233
4382
  @property
4234
4383
  def web_suffix(self) -> google.protobuf.wrappers_pb2.StringValue: ...
4384
+ max_concurrent_tasks: builtins.int
4385
+ max_concurrent_gpus: builtins.int
4235
4386
  def __init__(
4236
4387
  self,
4237
4388
  *,
4238
4389
  current_name: builtins.str = ...,
4239
4390
  name: google.protobuf.wrappers_pb2.StringValue | None = ...,
4240
4391
  web_suffix: google.protobuf.wrappers_pb2.StringValue | None = ...,
4392
+ max_concurrent_tasks: builtins.int | None = ...,
4393
+ max_concurrent_gpus: builtins.int | None = ...,
4241
4394
  ) -> None: ...
4242
- def HasField(self, field_name: typing_extensions.Literal["name", b"name", "web_suffix", b"web_suffix"]) -> builtins.bool: ...
4243
- def ClearField(self, field_name: typing_extensions.Literal["current_name", b"current_name", "name", b"name", "web_suffix", b"web_suffix"]) -> None: ...
4395
+ def HasField(self, field_name: typing_extensions.Literal["_max_concurrent_gpus", b"_max_concurrent_gpus", "_max_concurrent_tasks", b"_max_concurrent_tasks", "max_concurrent_gpus", b"max_concurrent_gpus", "max_concurrent_tasks", b"max_concurrent_tasks", "name", b"name", "web_suffix", b"web_suffix"]) -> builtins.bool: ...
4396
+ def ClearField(self, field_name: typing_extensions.Literal["_max_concurrent_gpus", b"_max_concurrent_gpus", "_max_concurrent_tasks", b"_max_concurrent_tasks", "current_name", b"current_name", "max_concurrent_gpus", b"max_concurrent_gpus", "max_concurrent_tasks", b"max_concurrent_tasks", "name", b"name", "web_suffix", b"web_suffix"]) -> None: ...
4397
+ @typing.overload
4398
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_max_concurrent_gpus", b"_max_concurrent_gpus"]) -> typing_extensions.Literal["max_concurrent_gpus"] | None: ...
4399
+ @typing.overload
4400
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_max_concurrent_tasks", b"_max_concurrent_tasks"]) -> typing_extensions.Literal["max_concurrent_tasks"] | None: ...
4244
4401
 
4245
4402
  global___EnvironmentUpdateRequest = EnvironmentUpdateRequest
4246
4403
 
@@ -4603,6 +4760,9 @@ class Function(google.protobuf.message.Message):
4603
4760
  STARTUP_TIMEOUT_SECS_FIELD_NUMBER: builtins.int
4604
4761
  SUPPORTED_INPUT_FORMATS_FIELD_NUMBER: builtins.int
4605
4762
  SUPPORTED_OUTPUT_FORMATS_FIELD_NUMBER: builtins.int
4763
+ HTTP_CONFIG_FIELD_NUMBER: builtins.int
4764
+ IMPLEMENTATION_NAME_FIELD_NUMBER: builtins.int
4765
+ SINGLE_USE_CONTAINERS_FIELD_NUMBER: builtins.int
4606
4766
  module_name: builtins.str
4607
4767
  function_name: builtins.str
4608
4768
  @property
@@ -4665,6 +4825,9 @@ class Function(google.protobuf.message.Message):
4665
4825
  def object_dependencies(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ObjectDependency]: ...
4666
4826
  block_network: builtins.bool
4667
4827
  max_inputs: builtins.int
4828
+ """In the SDK, we've deprecated `max_inputs` (which only every implemented `max_inputs=1`)
4829
+ in favor of a boolean `single_use_containers` parameter.
4830
+ """
4668
4831
  @property
4669
4832
  def s3_mounts(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___S3Mount]: ...
4670
4833
  @property
@@ -4747,6 +4910,14 @@ class Function(google.protobuf.message.Message):
4747
4910
  """can be used as inputs"""
4748
4911
  @property
4749
4912
  def supported_output_formats(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[global___DataFormat.ValueType]: ...
4913
+ @property
4914
+ def http_config(self) -> global___HTTPConfig: ...
4915
+ implementation_name: builtins.str
4916
+ """Attribute on the module with the implementation, which may differ from function_name
4917
+ when the user provided a custom name= for the Function inside the Application namespace
4918
+ """
4919
+ single_use_containers: builtins.bool
4920
+ """When True, containers will shut down after handling a single input"""
4750
4921
  def __init__(
4751
4922
  self,
4752
4923
  *,
@@ -4825,14 +4996,19 @@ class Function(google.protobuf.message.Message):
4825
4996
  startup_timeout_secs: builtins.int = ...,
4826
4997
  supported_input_formats: collections.abc.Iterable[global___DataFormat.ValueType] | None = ...,
4827
4998
  supported_output_formats: collections.abc.Iterable[global___DataFormat.ValueType] | None = ...,
4999
+ http_config: global___HTTPConfig | None = ...,
5000
+ implementation_name: builtins.str = ...,
5001
+ single_use_containers: builtins.bool = ...,
4828
5002
  ) -> None: ...
4829
- def HasField(self, field_name: typing_extensions.Literal["X_experimental_proxy_ip", b"X_experimental_proxy_ip", "_cloud_provider", b"_cloud_provider", "_experimental_proxy_ip", b"_experimental_proxy_ip", "_proxy_id", b"_proxy_id", "_scheduler_placement", b"_scheduler_placement", "autoscaler_settings", b"autoscaler_settings", "checkpoint", b"checkpoint", "class_parameter_info", b"class_parameter_info", "cloud_provider", b"cloud_provider", "function_schema", b"function_schema", "proxy_id", b"proxy_id", "pty_info", b"pty_info", "rate_limit", b"rate_limit", "resources", b"resources", "retry_policy", b"retry_policy", "schedule", b"schedule", "scheduler_placement", b"scheduler_placement", "web_url_info", b"web_url_info", "webhook_config", b"webhook_config"]) -> builtins.bool: ...
4830
- def ClearField(self, field_name: typing_extensions.Literal["X_experimental_proxy_ip", b"X_experimental_proxy_ip", "_cloud_provider", b"_cloud_provider", "_experimental_buffer_containers", b"_experimental_buffer_containers", "_experimental_concurrent_cancellations", b"_experimental_concurrent_cancellations", "_experimental_custom_scaling", b"_experimental_custom_scaling", "_experimental_enable_gpu_snapshot", b"_experimental_enable_gpu_snapshot", "_experimental_group_size", b"_experimental_group_size", "_experimental_proxy_ip", b"_experimental_proxy_ip", "_experimental_task_templates", b"_experimental_task_templates", "_experimental_task_templates_enabled", b"_experimental_task_templates_enabled", "_proxy_id", b"_proxy_id", "_scheduler_placement", b"_scheduler_placement", "app_name", b"app_name", "autoscaler_settings", b"autoscaler_settings", "batch_linger_ms", b"batch_linger_ms", "batch_max_size", b"batch_max_size", "block_network", b"block_network", "checkpoint", b"checkpoint", "checkpointing_enabled", b"checkpointing_enabled", "class_parameter_info", b"class_parameter_info", "class_serialized", b"class_serialized", "cloud_bucket_mounts", b"cloud_bucket_mounts", "cloud_provider", b"cloud_provider", "cloud_provider_str", b"cloud_provider_str", "concurrency_limit", b"concurrency_limit", "custom_domain_info", b"custom_domain_info", "definition_type", b"definition_type", "enable_gpu_snapshot", b"enable_gpu_snapshot", "experimental_options", b"experimental_options", "flash_service_label", b"flash_service_label", "flash_service_urls", b"flash_service_urls", "function_name", b"function_name", "function_schema", b"function_schema", "function_serialized", b"function_serialized", "function_type", b"function_type", "i6pn_enabled", b"i6pn_enabled", "image_id", b"image_id", "is_auto_snapshot", b"is_auto_snapshot", "is_builder_function", b"is_builder_function", "is_checkpointing_function", b"is_checkpointing_function", "is_class", b"is_class", "is_method", b"is_method", "max_concurrent_inputs", b"max_concurrent_inputs", "max_inputs", b"max_inputs", "method_definitions", b"method_definitions", "method_definitions_set", b"method_definitions_set", "module_name", b"module_name", "mount_client_dependencies", b"mount_client_dependencies", "mount_ids", b"mount_ids", "object_dependencies", b"object_dependencies", "proxy_id", b"proxy_id", "pty_info", b"pty_info", "rate_limit", b"rate_limit", "resources", b"resources", "retry_policy", b"retry_policy", "runtime", b"runtime", "runtime_debug", b"runtime_debug", "runtime_perf_record", b"runtime_perf_record", "s3_mounts", b"s3_mounts", "schedule", b"schedule", "scheduler_placement", b"scheduler_placement", "secret_ids", b"secret_ids", "shared_volume_mounts", b"shared_volume_mounts", "snapshot_debug", b"snapshot_debug", "startup_timeout_secs", b"startup_timeout_secs", "supported_input_formats", b"supported_input_formats", "supported_output_formats", b"supported_output_formats", "target_concurrent_inputs", b"target_concurrent_inputs", "task_idle_timeout_secs", b"task_idle_timeout_secs", "timeout_secs", b"timeout_secs", "untrusted", b"untrusted", "use_function_id", b"use_function_id", "use_method_name", b"use_method_name", "volume_mounts", b"volume_mounts", "warm_pool_size", b"warm_pool_size", "web_url", b"web_url", "web_url_info", b"web_url_info", "webhook_config", b"webhook_config", "worker_id", b"worker_id"]) -> None: ...
5003
+ def HasField(self, field_name: typing_extensions.Literal["X_experimental_proxy_ip", b"X_experimental_proxy_ip", "_cloud_provider", b"_cloud_provider", "_experimental_proxy_ip", b"_experimental_proxy_ip", "_http_config", b"_http_config", "_proxy_id", b"_proxy_id", "_scheduler_placement", b"_scheduler_placement", "autoscaler_settings", b"autoscaler_settings", "checkpoint", b"checkpoint", "class_parameter_info", b"class_parameter_info", "cloud_provider", b"cloud_provider", "function_schema", b"function_schema", "http_config", b"http_config", "proxy_id", b"proxy_id", "pty_info", b"pty_info", "rate_limit", b"rate_limit", "resources", b"resources", "retry_policy", b"retry_policy", "schedule", b"schedule", "scheduler_placement", b"scheduler_placement", "web_url_info", b"web_url_info", "webhook_config", b"webhook_config"]) -> builtins.bool: ...
5004
+ def ClearField(self, field_name: typing_extensions.Literal["X_experimental_proxy_ip", b"X_experimental_proxy_ip", "_cloud_provider", b"_cloud_provider", "_experimental_buffer_containers", b"_experimental_buffer_containers", "_experimental_concurrent_cancellations", b"_experimental_concurrent_cancellations", "_experimental_custom_scaling", b"_experimental_custom_scaling", "_experimental_enable_gpu_snapshot", b"_experimental_enable_gpu_snapshot", "_experimental_group_size", b"_experimental_group_size", "_experimental_proxy_ip", b"_experimental_proxy_ip", "_experimental_task_templates", b"_experimental_task_templates", "_experimental_task_templates_enabled", b"_experimental_task_templates_enabled", "_http_config", b"_http_config", "_proxy_id", b"_proxy_id", "_scheduler_placement", b"_scheduler_placement", "app_name", b"app_name", "autoscaler_settings", b"autoscaler_settings", "batch_linger_ms", b"batch_linger_ms", "batch_max_size", b"batch_max_size", "block_network", b"block_network", "checkpoint", b"checkpoint", "checkpointing_enabled", b"checkpointing_enabled", "class_parameter_info", b"class_parameter_info", "class_serialized", b"class_serialized", "cloud_bucket_mounts", b"cloud_bucket_mounts", "cloud_provider", b"cloud_provider", "cloud_provider_str", b"cloud_provider_str", "concurrency_limit", b"concurrency_limit", "custom_domain_info", b"custom_domain_info", "definition_type", b"definition_type", "enable_gpu_snapshot", b"enable_gpu_snapshot", "experimental_options", b"experimental_options", "flash_service_label", b"flash_service_label", "flash_service_urls", b"flash_service_urls", "function_name", b"function_name", "function_schema", b"function_schema", "function_serialized", b"function_serialized", "function_type", b"function_type", "http_config", b"http_config", "i6pn_enabled", b"i6pn_enabled", "image_id", b"image_id", "implementation_name", b"implementation_name", "is_auto_snapshot", b"is_auto_snapshot", "is_builder_function", b"is_builder_function", "is_checkpointing_function", b"is_checkpointing_function", "is_class", b"is_class", "is_method", b"is_method", "max_concurrent_inputs", b"max_concurrent_inputs", "max_inputs", b"max_inputs", "method_definitions", b"method_definitions", "method_definitions_set", b"method_definitions_set", "module_name", b"module_name", "mount_client_dependencies", b"mount_client_dependencies", "mount_ids", b"mount_ids", "object_dependencies", b"object_dependencies", "proxy_id", b"proxy_id", "pty_info", b"pty_info", "rate_limit", b"rate_limit", "resources", b"resources", "retry_policy", b"retry_policy", "runtime", b"runtime", "runtime_debug", b"runtime_debug", "runtime_perf_record", b"runtime_perf_record", "s3_mounts", b"s3_mounts", "schedule", b"schedule", "scheduler_placement", b"scheduler_placement", "secret_ids", b"secret_ids", "shared_volume_mounts", b"shared_volume_mounts", "single_use_containers", b"single_use_containers", "snapshot_debug", b"snapshot_debug", "startup_timeout_secs", b"startup_timeout_secs", "supported_input_formats", b"supported_input_formats", "supported_output_formats", b"supported_output_formats", "target_concurrent_inputs", b"target_concurrent_inputs", "task_idle_timeout_secs", b"task_idle_timeout_secs", "timeout_secs", b"timeout_secs", "untrusted", b"untrusted", "use_function_id", b"use_function_id", "use_method_name", b"use_method_name", "volume_mounts", b"volume_mounts", "warm_pool_size", b"warm_pool_size", "web_url", b"web_url", "web_url_info", b"web_url_info", "webhook_config", b"webhook_config", "worker_id", b"worker_id"]) -> None: ...
4831
5005
  @typing.overload
4832
5006
  def WhichOneof(self, oneof_group: typing_extensions.Literal["X_experimental_proxy_ip", b"X_experimental_proxy_ip"]) -> typing_extensions.Literal["_experimental_proxy_ip"] | None: ...
4833
5007
  @typing.overload
4834
5008
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_cloud_provider", b"_cloud_provider"]) -> typing_extensions.Literal["cloud_provider"] | None: ...
4835
5009
  @typing.overload
5010
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_http_config", b"_http_config"]) -> typing_extensions.Literal["http_config"] | None: ...
5011
+ @typing.overload
4836
5012
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_proxy_id", b"_proxy_id"]) -> typing_extensions.Literal["proxy_id"] | None: ...
4837
5013
  @typing.overload
4838
5014
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_scheduler_placement", b"_scheduler_placement"]) -> typing_extensions.Literal["scheduler_placement"] | None: ...
@@ -5011,18 +5187,21 @@ class FunctionCallGetDataRequest(google.protobuf.message.Message):
5011
5187
  FUNCTION_CALL_ID_FIELD_NUMBER: builtins.int
5012
5188
  ATTEMPT_TOKEN_FIELD_NUMBER: builtins.int
5013
5189
  LAST_INDEX_FIELD_NUMBER: builtins.int
5190
+ USE_GAPLESS_READ_FIELD_NUMBER: builtins.int
5014
5191
  function_call_id: builtins.str
5015
5192
  attempt_token: builtins.str
5016
5193
  last_index: builtins.int
5194
+ use_gapless_read: builtins.bool
5017
5195
  def __init__(
5018
5196
  self,
5019
5197
  *,
5020
5198
  function_call_id: builtins.str = ...,
5021
5199
  attempt_token: builtins.str = ...,
5022
5200
  last_index: builtins.int = ...,
5201
+ use_gapless_read: builtins.bool = ...,
5023
5202
  ) -> None: ...
5024
5203
  def HasField(self, field_name: typing_extensions.Literal["attempt_token", b"attempt_token", "call_info", b"call_info", "function_call_id", b"function_call_id"]) -> builtins.bool: ...
5025
- def ClearField(self, field_name: typing_extensions.Literal["attempt_token", b"attempt_token", "call_info", b"call_info", "function_call_id", b"function_call_id", "last_index", b"last_index"]) -> None: ...
5204
+ def ClearField(self, field_name: typing_extensions.Literal["attempt_token", b"attempt_token", "call_info", b"call_info", "function_call_id", b"function_call_id", "last_index", b"last_index", "use_gapless_read", b"use_gapless_read"]) -> None: ...
5026
5205
  def WhichOneof(self, oneof_group: typing_extensions.Literal["call_info", b"call_info"]) -> typing_extensions.Literal["function_call_id", "attempt_token"] | None: ...
5027
5206
 
5028
5207
  global___FunctionCallGetDataRequest = FunctionCallGetDataRequest
@@ -5290,6 +5469,8 @@ class FunctionData(google.protobuf.message.Message):
5290
5469
  STARTUP_TIMEOUT_SECS_FIELD_NUMBER: builtins.int
5291
5470
  SUPPORTED_INPUT_FORMATS_FIELD_NUMBER: builtins.int
5292
5471
  SUPPORTED_OUTPUT_FORMATS_FIELD_NUMBER: builtins.int
5472
+ HTTP_CONFIG_FIELD_NUMBER: builtins.int
5473
+ IMPLEMENTATION_NAME_FIELD_NUMBER: builtins.int
5293
5474
  module_name: builtins.str
5294
5475
  function_name: builtins.str
5295
5476
  function_type: global___Function.FunctionType.ValueType
@@ -5356,6 +5537,12 @@ class FunctionData(google.protobuf.message.Message):
5356
5537
  def supported_input_formats(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[global___DataFormat.ValueType]: ...
5357
5538
  @property
5358
5539
  def supported_output_formats(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[global___DataFormat.ValueType]: ...
5540
+ @property
5541
+ def http_config(self) -> global___HTTPConfig: ...
5542
+ implementation_name: builtins.str
5543
+ """Attribute on the module with the implementation, which may differ from function_name
5544
+ when the user provided a custom name= for the Function inside the Application namespace
5545
+ """
5359
5546
  def __init__(
5360
5547
  self,
5361
5548
  *,
@@ -5396,10 +5583,15 @@ class FunctionData(google.protobuf.message.Message):
5396
5583
  startup_timeout_secs: builtins.int = ...,
5397
5584
  supported_input_formats: collections.abc.Iterable[global___DataFormat.ValueType] | None = ...,
5398
5585
  supported_output_formats: collections.abc.Iterable[global___DataFormat.ValueType] | None = ...,
5586
+ http_config: global___HTTPConfig | None = ...,
5587
+ implementation_name: builtins.str = ...,
5399
5588
  ) -> None: ...
5400
- def HasField(self, field_name: typing_extensions.Literal["X_experimental_proxy_ip", b"X_experimental_proxy_ip", "_experimental_proxy_ip", b"_experimental_proxy_ip", "autoscaler_settings", b"autoscaler_settings", "class_parameter_info", b"class_parameter_info", "function_schema", b"function_schema", "schedule", b"schedule", "web_url_info", b"web_url_info", "webhook_config", b"webhook_config"]) -> builtins.bool: ...
5401
- def ClearField(self, field_name: typing_extensions.Literal["X_experimental_proxy_ip", b"X_experimental_proxy_ip", "_experimental_buffer_containers", b"_experimental_buffer_containers", "_experimental_custom_scaling", b"_experimental_custom_scaling", "_experimental_enable_gpu_snapshot", b"_experimental_enable_gpu_snapshot", "_experimental_group_size", b"_experimental_group_size", "_experimental_proxy_ip", b"_experimental_proxy_ip", "autoscaler_settings", b"autoscaler_settings", "class_parameter_info", b"class_parameter_info", "concurrency_limit", b"concurrency_limit", "custom_domain_info", b"custom_domain_info", "experimental_options", b"experimental_options", "flash_service_label", b"flash_service_label", "flash_service_urls", b"flash_service_urls", "function_name", b"function_name", "function_schema", b"function_schema", "function_type", b"function_type", "is_class", b"is_class", "is_method", b"is_method", "method_definitions", b"method_definitions", "method_definitions_set", b"method_definitions_set", "module_name", b"module_name", "ranked_functions", b"ranked_functions", "runtime_perf_record", b"runtime_perf_record", "schedule", b"schedule", "snapshot_debug", b"snapshot_debug", "startup_timeout_secs", b"startup_timeout_secs", "supported_input_formats", b"supported_input_formats", "supported_output_formats", b"supported_output_formats", "task_idle_timeout_secs", b"task_idle_timeout_secs", "timeout_secs", b"timeout_secs", "untrusted", b"untrusted", "use_function_id", b"use_function_id", "use_method_name", b"use_method_name", "warm_pool_size", b"warm_pool_size", "web_url", b"web_url", "web_url_info", b"web_url_info", "webhook_config", b"webhook_config", "worker_id", b"worker_id"]) -> None: ...
5589
+ def HasField(self, field_name: typing_extensions.Literal["X_experimental_proxy_ip", b"X_experimental_proxy_ip", "_experimental_proxy_ip", b"_experimental_proxy_ip", "_http_config", b"_http_config", "autoscaler_settings", b"autoscaler_settings", "class_parameter_info", b"class_parameter_info", "function_schema", b"function_schema", "http_config", b"http_config", "schedule", b"schedule", "web_url_info", b"web_url_info", "webhook_config", b"webhook_config"]) -> builtins.bool: ...
5590
+ def ClearField(self, field_name: typing_extensions.Literal["X_experimental_proxy_ip", b"X_experimental_proxy_ip", "_experimental_buffer_containers", b"_experimental_buffer_containers", "_experimental_custom_scaling", b"_experimental_custom_scaling", "_experimental_enable_gpu_snapshot", b"_experimental_enable_gpu_snapshot", "_experimental_group_size", b"_experimental_group_size", "_experimental_proxy_ip", b"_experimental_proxy_ip", "_http_config", b"_http_config", "autoscaler_settings", b"autoscaler_settings", "class_parameter_info", b"class_parameter_info", "concurrency_limit", b"concurrency_limit", "custom_domain_info", b"custom_domain_info", "experimental_options", b"experimental_options", "flash_service_label", b"flash_service_label", "flash_service_urls", b"flash_service_urls", "function_name", b"function_name", "function_schema", b"function_schema", "function_type", b"function_type", "http_config", b"http_config", "implementation_name", b"implementation_name", "is_class", b"is_class", "is_method", b"is_method", "method_definitions", b"method_definitions", "method_definitions_set", b"method_definitions_set", "module_name", b"module_name", "ranked_functions", b"ranked_functions", "runtime_perf_record", b"runtime_perf_record", "schedule", b"schedule", "snapshot_debug", b"snapshot_debug", "startup_timeout_secs", b"startup_timeout_secs", "supported_input_formats", b"supported_input_formats", "supported_output_formats", b"supported_output_formats", "task_idle_timeout_secs", b"task_idle_timeout_secs", "timeout_secs", b"timeout_secs", "untrusted", b"untrusted", "use_function_id", b"use_function_id", "use_method_name", b"use_method_name", "warm_pool_size", b"warm_pool_size", "web_url", b"web_url", "web_url_info", b"web_url_info", "webhook_config", b"webhook_config", "worker_id", b"worker_id"]) -> None: ...
5591
+ @typing.overload
5402
5592
  def WhichOneof(self, oneof_group: typing_extensions.Literal["X_experimental_proxy_ip", b"X_experimental_proxy_ip"]) -> typing_extensions.Literal["_experimental_proxy_ip"] | None: ...
5593
+ @typing.overload
5594
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_http_config", b"_http_config"]) -> typing_extensions.Literal["http_config"] | None: ...
5403
5595
 
5404
5596
  global___FunctionData = FunctionData
5405
5597
 
@@ -6649,6 +6841,33 @@ class GenericResult(google.protobuf.message.Message):
6649
6841
 
6650
6842
  global___GenericResult = GenericResult
6651
6843
 
6844
+ class HTTPConfig(google.protobuf.message.Message):
6845
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
6846
+
6847
+ PORT_FIELD_NUMBER: builtins.int
6848
+ PROXY_REGIONS_FIELD_NUMBER: builtins.int
6849
+ STARTUP_TIMEOUT_FIELD_NUMBER: builtins.int
6850
+ EXIT_GRACE_PERIOD_FIELD_NUMBER: builtins.int
6851
+ H2_ENABLED_FIELD_NUMBER: builtins.int
6852
+ port: builtins.int
6853
+ @property
6854
+ def proxy_regions(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
6855
+ startup_timeout: builtins.int
6856
+ exit_grace_period: builtins.int
6857
+ h2_enabled: builtins.bool
6858
+ def __init__(
6859
+ self,
6860
+ *,
6861
+ port: builtins.int = ...,
6862
+ proxy_regions: collections.abc.Iterable[builtins.str] | None = ...,
6863
+ startup_timeout: builtins.int = ...,
6864
+ exit_grace_period: builtins.int = ...,
6865
+ h2_enabled: builtins.bool = ...,
6866
+ ) -> None: ...
6867
+ def ClearField(self, field_name: typing_extensions.Literal["exit_grace_period", b"exit_grace_period", "h2_enabled", b"h2_enabled", "port", b"port", "proxy_regions", b"proxy_regions", "startup_timeout", b"startup_timeout"]) -> None: ...
6868
+
6869
+ global___HTTPConfig = HTTPConfig
6870
+
6652
6871
  class Image(google.protobuf.message.Message):
6653
6872
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
6654
6873
 
@@ -7857,24 +8076,27 @@ class Proxy(google.protobuf.message.Message):
7857
8076
  NAME_FIELD_NUMBER: builtins.int
7858
8077
  CREATED_AT_FIELD_NUMBER: builtins.int
7859
8078
  ENVIRONMENT_NAME_FIELD_NUMBER: builtins.int
7860
- PROXY_ID_FIELD_NUMBER: builtins.int
7861
8079
  PROXY_IPS_FIELD_NUMBER: builtins.int
8080
+ PROXY_ID_FIELD_NUMBER: builtins.int
8081
+ REGION_FIELD_NUMBER: builtins.int
7862
8082
  name: builtins.str
7863
8083
  created_at: builtins.float
7864
8084
  environment_name: builtins.str
7865
- proxy_id: builtins.str
7866
8085
  @property
7867
8086
  def proxy_ips(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ProxyIp]: ...
8087
+ proxy_id: builtins.str
8088
+ region: builtins.str
7868
8089
  def __init__(
7869
8090
  self,
7870
8091
  *,
7871
8092
  name: builtins.str = ...,
7872
8093
  created_at: builtins.float = ...,
7873
8094
  environment_name: builtins.str = ...,
7874
- proxy_id: builtins.str = ...,
7875
8095
  proxy_ips: collections.abc.Iterable[global___ProxyIp] | None = ...,
8096
+ proxy_id: builtins.str = ...,
8097
+ region: builtins.str = ...,
7876
8098
  ) -> None: ...
7877
- def ClearField(self, field_name: typing_extensions.Literal["created_at", b"created_at", "environment_name", b"environment_name", "name", b"name", "proxy_id", b"proxy_id", "proxy_ips", b"proxy_ips"]) -> None: ...
8099
+ def ClearField(self, field_name: typing_extensions.Literal["created_at", b"created_at", "environment_name", b"environment_name", "name", b"name", "proxy_id", b"proxy_id", "proxy_ips", b"proxy_ips", "region", b"region"]) -> None: ...
7878
8100
 
7879
8101
  global___Proxy = Proxy
7880
8102
 
@@ -7913,15 +8135,18 @@ class ProxyCreateRequest(google.protobuf.message.Message):
7913
8135
 
7914
8136
  NAME_FIELD_NUMBER: builtins.int
7915
8137
  ENVIRONMENT_NAME_FIELD_NUMBER: builtins.int
8138
+ REGION_FIELD_NUMBER: builtins.int
7916
8139
  name: builtins.str
7917
8140
  environment_name: builtins.str
8141
+ region: builtins.str
7918
8142
  def __init__(
7919
8143
  self,
7920
8144
  *,
7921
8145
  name: builtins.str = ...,
7922
8146
  environment_name: builtins.str = ...,
8147
+ region: builtins.str = ...,
7923
8148
  ) -> None: ...
7924
- def ClearField(self, field_name: typing_extensions.Literal["environment_name", b"environment_name", "name", b"name"]) -> None: ...
8149
+ def ClearField(self, field_name: typing_extensions.Literal["environment_name", b"environment_name", "name", b"name", "region", b"region"]) -> None: ...
7925
8150
 
7926
8151
  global___ProxyCreateRequest = ProxyCreateRequest
7927
8152
 
@@ -8430,6 +8655,52 @@ class QueuePutRequest(google.protobuf.message.Message):
8430
8655
 
8431
8656
  global___QueuePutRequest = QueuePutRequest
8432
8657
 
8658
+ class RPCRetryPolicy(google.protobuf.message.Message):
8659
+ """Retry repolicy used by GRPCError.details for the server to give instructions
8660
+ for the client to retry.
8661
+ """
8662
+
8663
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
8664
+
8665
+ RETRY_AFTER_SECS_FIELD_NUMBER: builtins.int
8666
+ retry_after_secs: builtins.float
8667
+ def __init__(
8668
+ self,
8669
+ *,
8670
+ retry_after_secs: builtins.float = ...,
8671
+ ) -> None: ...
8672
+ def ClearField(self, field_name: typing_extensions.Literal["retry_after_secs", b"retry_after_secs"]) -> None: ...
8673
+
8674
+ global___RPCRetryPolicy = RPCRetryPolicy
8675
+
8676
+ class RPCStatus(google.protobuf.message.Message):
8677
+ """A copy google.rpc.Status for GRPCError.details:
8678
+ https://github.com/googleapis/googleapis/blob/master/google/rpc/status.proto
8679
+ RPCStatus is compatible with google.rpc.Status, so one can encode messages using
8680
+ google.rpc.Status. The `details` field can be a list of any message, but for client
8681
+ to decode it, the messages should be defined here (`modal_proto`).
8682
+ """
8683
+
8684
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
8685
+
8686
+ CODE_FIELD_NUMBER: builtins.int
8687
+ MESSAGE_FIELD_NUMBER: builtins.int
8688
+ DETAILS_FIELD_NUMBER: builtins.int
8689
+ code: builtins.int
8690
+ message: builtins.str
8691
+ @property
8692
+ def details(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[google.protobuf.any_pb2.Any]: ...
8693
+ def __init__(
8694
+ self,
8695
+ *,
8696
+ code: builtins.int = ...,
8697
+ message: builtins.str = ...,
8698
+ details: collections.abc.Iterable[google.protobuf.any_pb2.Any] | None = ...,
8699
+ ) -> None: ...
8700
+ def ClearField(self, field_name: typing_extensions.Literal["code", b"code", "details", b"details", "message", b"message"]) -> None: ...
8701
+
8702
+ global___RPCStatus = RPCStatus
8703
+
8433
8704
  class RateLimit(google.protobuf.message.Message):
8434
8705
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
8435
8706
 
@@ -8639,6 +8910,7 @@ class Sandbox(google.protobuf.message.Message):
8639
8910
  PRELOAD_PATH_PREFIXES_FIELD_NUMBER: builtins.int
8640
8911
  IDLE_TIMEOUT_SECS_FIELD_NUMBER: builtins.int
8641
8912
  DIRECT_SANDBOX_COMMANDS_ENABLED_FIELD_NUMBER: builtins.int
8913
+ _RESTORE_INSTANCE_TYPE_FIELD_NUMBER: builtins.int
8642
8914
  @property
8643
8915
  def entrypoint_args(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
8644
8916
  @property
@@ -8710,6 +8982,11 @@ class Sandbox(google.protobuf.message.Message):
8710
8982
  Exec commands for the sandbox will be issued directly to the sandbox
8711
8983
  command router running on the Modal worker.
8712
8984
  """
8985
+ _restore_instance_type: builtins.str
8986
+ """Internal: restricts sandbox to run on this specific instance type.
8987
+ Set by server during SandboxRestore to ensure the restored sandbox runs
8988
+ on the same instance type as the original snapshot.
8989
+ """
8713
8990
  def __init__(
8714
8991
  self,
8715
8992
  *,
@@ -8745,9 +9022,10 @@ class Sandbox(google.protobuf.message.Message):
8745
9022
  preload_path_prefixes: collections.abc.Iterable[builtins.str] | None = ...,
8746
9023
  idle_timeout_secs: builtins.int | None = ...,
8747
9024
  direct_sandbox_commands_enabled: builtins.bool = ...,
9025
+ _restore_instance_type: builtins.str = ...,
8748
9026
  ) -> None: ...
8749
9027
  def HasField(self, field_name: typing_extensions.Literal["_idle_timeout_secs", b"_idle_timeout_secs", "_name", b"_name", "_proxy_id", b"_proxy_id", "_runsc_runtime_version", b"_runsc_runtime_version", "_runtime", b"_runtime", "_scheduler_placement", b"_scheduler_placement", "_snapshot_version", b"_snapshot_version", "_workdir", b"_workdir", "idle_timeout_secs", b"idle_timeout_secs", "name", b"name", "network_access", b"network_access", "open_ports", b"open_ports", "open_ports_oneof", b"open_ports_oneof", "proxy_id", b"proxy_id", "pty_info", b"pty_info", "resources", b"resources", "runsc_runtime_version", b"runsc_runtime_version", "runtime", b"runtime", "scheduler_placement", b"scheduler_placement", "snapshot_version", b"snapshot_version", "workdir", b"workdir"]) -> builtins.bool: ...
8750
- def ClearField(self, field_name: typing_extensions.Literal["_idle_timeout_secs", b"_idle_timeout_secs", "_name", b"_name", "_proxy_id", b"_proxy_id", "_runsc_runtime_version", b"_runsc_runtime_version", "_runtime", b"_runtime", "_scheduler_placement", b"_scheduler_placement", "_snapshot_version", b"_snapshot_version", "_workdir", b"_workdir", "block_network", b"block_network", "cloud_bucket_mounts", b"cloud_bucket_mounts", "cloud_provider", b"cloud_provider", "cloud_provider_str", b"cloud_provider_str", "direct_sandbox_commands_enabled", b"direct_sandbox_commands_enabled", "enable_snapshot", b"enable_snapshot", "entrypoint_args", b"entrypoint_args", "experimental_options", b"experimental_options", "i6pn_enabled", b"i6pn_enabled", "idle_timeout_secs", b"idle_timeout_secs", "image_id", b"image_id", "mount_ids", b"mount_ids", "name", b"name", "network_access", b"network_access", "nfs_mounts", b"nfs_mounts", "open_ports", b"open_ports", "open_ports_oneof", b"open_ports_oneof", "preload_path_prefixes", b"preload_path_prefixes", "proxy_id", b"proxy_id", "pty_info", b"pty_info", "resources", b"resources", "runsc_runtime_version", b"runsc_runtime_version", "runtime", b"runtime", "runtime_debug", b"runtime_debug", "s3_mounts", b"s3_mounts", "scheduler_placement", b"scheduler_placement", "secret_ids", b"secret_ids", "snapshot_version", b"snapshot_version", "timeout_secs", b"timeout_secs", "verbose", b"verbose", "volume_mounts", b"volume_mounts", "workdir", b"workdir", "worker_id", b"worker_id"]) -> None: ...
9028
+ def ClearField(self, field_name: typing_extensions.Literal["_idle_timeout_secs", b"_idle_timeout_secs", "_name", b"_name", "_proxy_id", b"_proxy_id", "_restore_instance_type", b"_restore_instance_type", "_runsc_runtime_version", b"_runsc_runtime_version", "_runtime", b"_runtime", "_scheduler_placement", b"_scheduler_placement", "_snapshot_version", b"_snapshot_version", "_workdir", b"_workdir", "block_network", b"block_network", "cloud_bucket_mounts", b"cloud_bucket_mounts", "cloud_provider", b"cloud_provider", "cloud_provider_str", b"cloud_provider_str", "direct_sandbox_commands_enabled", b"direct_sandbox_commands_enabled", "enable_snapshot", b"enable_snapshot", "entrypoint_args", b"entrypoint_args", "experimental_options", b"experimental_options", "i6pn_enabled", b"i6pn_enabled", "idle_timeout_secs", b"idle_timeout_secs", "image_id", b"image_id", "mount_ids", b"mount_ids", "name", b"name", "network_access", b"network_access", "nfs_mounts", b"nfs_mounts", "open_ports", b"open_ports", "open_ports_oneof", b"open_ports_oneof", "preload_path_prefixes", b"preload_path_prefixes", "proxy_id", b"proxy_id", "pty_info", b"pty_info", "resources", b"resources", "runsc_runtime_version", b"runsc_runtime_version", "runtime", b"runtime", "runtime_debug", b"runtime_debug", "s3_mounts", b"s3_mounts", "scheduler_placement", b"scheduler_placement", "secret_ids", b"secret_ids", "snapshot_version", b"snapshot_version", "timeout_secs", b"timeout_secs", "verbose", b"verbose", "volume_mounts", b"volume_mounts", "workdir", b"workdir", "worker_id", b"worker_id"]) -> None: ...
8751
9029
  @typing.overload
8752
9030
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_idle_timeout_secs", b"_idle_timeout_secs"]) -> typing_extensions.Literal["idle_timeout_secs"] | None: ...
8753
9031
  @typing.overload
@@ -8840,42 +9118,6 @@ class SandboxCreateResponse(google.protobuf.message.Message):
8840
9118
 
8841
9119
  global___SandboxCreateResponse = SandboxCreateResponse
8842
9120
 
8843
- class SandboxGetCommandRouterAccessRequest(google.protobuf.message.Message):
8844
- """Used to get a JWT and URL for direct access to a sandbox router server
8845
- running on the modal-worker, so the client can issue exec commands (and other
8846
- operations as they become available) directly to the worker.
8847
- """
8848
-
8849
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
8850
-
8851
- SANDBOX_ID_FIELD_NUMBER: builtins.int
8852
- sandbox_id: builtins.str
8853
- def __init__(
8854
- self,
8855
- *,
8856
- sandbox_id: builtins.str = ...,
8857
- ) -> None: ...
8858
- def ClearField(self, field_name: typing_extensions.Literal["sandbox_id", b"sandbox_id"]) -> None: ...
8859
-
8860
- global___SandboxGetCommandRouterAccessRequest = SandboxGetCommandRouterAccessRequest
8861
-
8862
- class SandboxGetCommandRouterAccessResponse(google.protobuf.message.Message):
8863
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
8864
-
8865
- JWT_FIELD_NUMBER: builtins.int
8866
- URL_FIELD_NUMBER: builtins.int
8867
- jwt: builtins.str
8868
- url: builtins.str
8869
- def __init__(
8870
- self,
8871
- *,
8872
- jwt: builtins.str = ...,
8873
- url: builtins.str = ...,
8874
- ) -> None: ...
8875
- def ClearField(self, field_name: typing_extensions.Literal["jwt", b"jwt", "url", b"url"]) -> None: ...
8876
-
8877
- global___SandboxGetCommandRouterAccessResponse = SandboxGetCommandRouterAccessResponse
8878
-
8879
9121
  class SandboxGetFromNameRequest(google.protobuf.message.Message):
8880
9122
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
8881
9123
 
@@ -9083,6 +9325,7 @@ class SandboxInfo(google.protobuf.message.Message):
9083
9325
  APP_ID_FIELD_NUMBER: builtins.int
9084
9326
  TAGS_FIELD_NUMBER: builtins.int
9085
9327
  NAME_FIELD_NUMBER: builtins.int
9328
+ IMAGE_ID_FIELD_NUMBER: builtins.int
9086
9329
  id: builtins.str
9087
9330
  created_at: builtins.float
9088
9331
  @property
@@ -9092,6 +9335,7 @@ class SandboxInfo(google.protobuf.message.Message):
9092
9335
  def tags(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___SandboxTag]:
9093
9336
  """TODO: Not yet exposed in client library."""
9094
9337
  name: builtins.str
9338
+ image_id: builtins.str
9095
9339
  def __init__(
9096
9340
  self,
9097
9341
  *,
@@ -9101,9 +9345,10 @@ class SandboxInfo(google.protobuf.message.Message):
9101
9345
  app_id: builtins.str = ...,
9102
9346
  tags: collections.abc.Iterable[global___SandboxTag] | None = ...,
9103
9347
  name: builtins.str = ...,
9348
+ image_id: builtins.str = ...,
9104
9349
  ) -> None: ...
9105
9350
  def HasField(self, field_name: typing_extensions.Literal["task_info", b"task_info"]) -> builtins.bool: ...
9106
- def ClearField(self, field_name: typing_extensions.Literal["app_id", b"app_id", "created_at", b"created_at", "id", b"id", "name", b"name", "tags", b"tags", "task_info", b"task_info"]) -> None: ...
9351
+ def ClearField(self, field_name: typing_extensions.Literal["app_id", b"app_id", "created_at", b"created_at", "id", b"id", "image_id", b"image_id", "name", b"name", "tags", b"tags", "task_info", b"task_info"]) -> None: ...
9107
9352
 
9108
9353
  global___SandboxInfo = SandboxInfo
9109
9354
 
@@ -9602,11 +9847,7 @@ class Schedule(google.protobuf.message.Message):
9602
9847
  global___Schedule = Schedule
9603
9848
 
9604
9849
  class SchedulerPlacement(google.protobuf.message.Message):
9605
- """TODO(irfansharif):
9606
- - Fold in cloud, resource needs here too.
9607
- - Allow specifying list of zones, cloud, fallback and alternative
9608
- GPU types.
9609
- """
9850
+ """Scheduling constraints for Functions and Sandboxes."""
9610
9851
 
9611
9852
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
9612
9853
 
@@ -9614,17 +9855,15 @@ class SchedulerPlacement(google.protobuf.message.Message):
9614
9855
  _ZONE_FIELD_NUMBER: builtins.int
9615
9856
  _LIFECYCLE_FIELD_NUMBER: builtins.int
9616
9857
  _INSTANCE_TYPES_FIELD_NUMBER: builtins.int
9858
+ NONPREEMPTIBLE_FIELD_NUMBER: builtins.int
9617
9859
  @property
9618
9860
  def regions(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
9619
9861
  _zone: builtins.str
9620
- """TODO(irfansharif): Make these two repeated.
9621
- admin-only
9622
- """
9623
9862
  _lifecycle: builtins.str
9624
- """admin-only, "on-demand" or "spot", else ignored"""
9625
9863
  @property
9626
- def _instance_types(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
9627
- """admin-only"""
9864
+ def _instance_types(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
9865
+ nonpreemptible: builtins.bool
9866
+ """Functions only"""
9628
9867
  def __init__(
9629
9868
  self,
9630
9869
  *,
@@ -9632,9 +9871,10 @@ class SchedulerPlacement(google.protobuf.message.Message):
9632
9871
  _zone: builtins.str | None = ...,
9633
9872
  _lifecycle: builtins.str | None = ...,
9634
9873
  _instance_types: collections.abc.Iterable[builtins.str] | None = ...,
9874
+ nonpreemptible: builtins.bool = ...,
9635
9875
  ) -> None: ...
9636
9876
  def HasField(self, field_name: typing_extensions.Literal["X_lifecycle", b"X_lifecycle", "X_zone", b"X_zone", "_lifecycle", b"_lifecycle", "_zone", b"_zone"]) -> builtins.bool: ...
9637
- def ClearField(self, field_name: typing_extensions.Literal["X_lifecycle", b"X_lifecycle", "X_zone", b"X_zone", "_instance_types", b"_instance_types", "_lifecycle", b"_lifecycle", "_zone", b"_zone", "regions", b"regions"]) -> None: ...
9877
+ def ClearField(self, field_name: typing_extensions.Literal["X_lifecycle", b"X_lifecycle", "X_zone", b"X_zone", "_instance_types", b"_instance_types", "_lifecycle", b"_lifecycle", "_zone", b"_zone", "nonpreemptible", b"nonpreemptible", "regions", b"regions"]) -> None: ...
9638
9878
  @typing.overload
9639
9879
  def WhichOneof(self, oneof_group: typing_extensions.Literal["X_lifecycle", b"X_lifecycle"]) -> typing_extensions.Literal["_lifecycle"] | None: ...
9640
9880
  @typing.overload
@@ -10068,20 +10308,17 @@ class SharedVolumeMount(google.protobuf.message.Message):
10068
10308
  MOUNT_PATH_FIELD_NUMBER: builtins.int
10069
10309
  SHARED_VOLUME_ID_FIELD_NUMBER: builtins.int
10070
10310
  CLOUD_PROVIDER_FIELD_NUMBER: builtins.int
10071
- ALLOW_CROSS_REGION_FIELD_NUMBER: builtins.int
10072
10311
  mount_path: builtins.str
10073
10312
  shared_volume_id: builtins.str
10074
10313
  cloud_provider: global___CloudProvider.ValueType
10075
- allow_cross_region: builtins.bool
10076
10314
  def __init__(
10077
10315
  self,
10078
10316
  *,
10079
10317
  mount_path: builtins.str = ...,
10080
10318
  shared_volume_id: builtins.str = ...,
10081
10319
  cloud_provider: global___CloudProvider.ValueType = ...,
10082
- allow_cross_region: builtins.bool = ...,
10083
10320
  ) -> None: ...
10084
- def ClearField(self, field_name: typing_extensions.Literal["allow_cross_region", b"allow_cross_region", "cloud_provider", b"cloud_provider", "mount_path", b"mount_path", "shared_volume_id", b"shared_volume_id"]) -> None: ...
10321
+ def ClearField(self, field_name: typing_extensions.Literal["cloud_provider", b"cloud_provider", "mount_path", b"mount_path", "shared_volume_id", b"shared_volume_id"]) -> None: ...
10085
10322
 
10086
10323
  global___SharedVolumeMount = SharedVolumeMount
10087
10324
 
@@ -10226,7 +10463,12 @@ class TaskCurrentInputsResponse(google.protobuf.message.Message):
10226
10463
 
10227
10464
  global___TaskCurrentInputsResponse = TaskCurrentInputsResponse
10228
10465
 
10229
- class TaskGetAutoscalingMetricsRequest(google.protobuf.message.Message):
10466
+ class TaskGetCommandRouterAccessRequest(google.protobuf.message.Message):
10467
+ """Used to get a JWT and URL for direct access to a task command router
10468
+ running on the modal-worker, so the client can issue exec commands (and other
10469
+ operations as they become available) directly to the worker.
10470
+ """
10471
+
10230
10472
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
10231
10473
 
10232
10474
  TASK_ID_FIELD_NUMBER: builtins.int
@@ -10238,23 +10480,24 @@ class TaskGetAutoscalingMetricsRequest(google.protobuf.message.Message):
10238
10480
  ) -> None: ...
10239
10481
  def ClearField(self, field_name: typing_extensions.Literal["task_id", b"task_id"]) -> None: ...
10240
10482
 
10241
- global___TaskGetAutoscalingMetricsRequest = TaskGetAutoscalingMetricsRequest
10483
+ global___TaskGetCommandRouterAccessRequest = TaskGetCommandRouterAccessRequest
10242
10484
 
10243
- class TaskGetAutoscalingMetricsResponse(google.protobuf.message.Message):
10485
+ class TaskGetCommandRouterAccessResponse(google.protobuf.message.Message):
10244
10486
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
10245
10487
 
10246
- METRICS_FIELD_NUMBER: builtins.int
10247
- @property
10248
- def metrics(self) -> global___AutoscalingMetrics: ...
10488
+ JWT_FIELD_NUMBER: builtins.int
10489
+ URL_FIELD_NUMBER: builtins.int
10490
+ jwt: builtins.str
10491
+ url: builtins.str
10249
10492
  def __init__(
10250
10493
  self,
10251
10494
  *,
10252
- metrics: global___AutoscalingMetrics | None = ...,
10495
+ jwt: builtins.str = ...,
10496
+ url: builtins.str = ...,
10253
10497
  ) -> None: ...
10254
- def HasField(self, field_name: typing_extensions.Literal["metrics", b"metrics"]) -> builtins.bool: ...
10255
- def ClearField(self, field_name: typing_extensions.Literal["metrics", b"metrics"]) -> None: ...
10498
+ def ClearField(self, field_name: typing_extensions.Literal["jwt", b"jwt", "url", b"url"]) -> None: ...
10256
10499
 
10257
- global___TaskGetAutoscalingMetricsResponse = TaskGetAutoscalingMetricsResponse
10500
+ global___TaskGetCommandRouterAccessResponse = TaskGetCommandRouterAccessResponse
10258
10501
 
10259
10502
  class TaskInfo(google.protobuf.message.Message):
10260
10503
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
@@ -11485,9 +11728,11 @@ class WebhookConfig(google.protobuf.message.Message):
11485
11728
  WEB_SERVER_STARTUP_TIMEOUT_FIELD_NUMBER: builtins.int
11486
11729
  WEB_ENDPOINT_DOCS_FIELD_NUMBER: builtins.int
11487
11730
  REQUIRES_PROXY_AUTH_FIELD_NUMBER: builtins.int
11731
+ EPHEMERAL_SUFFIX_FIELD_NUMBER: builtins.int
11488
11732
  type: global___WebhookType.ValueType
11489
11733
  method: builtins.str
11490
11734
  requested_suffix: builtins.str
11735
+ """User-supplied "label" component of URL"""
11491
11736
  async_mode: global___WebhookAsyncMode.ValueType
11492
11737
  @property
11493
11738
  def custom_domains(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___CustomDomainConfig]: ...
@@ -11495,6 +11740,8 @@ class WebhookConfig(google.protobuf.message.Message):
11495
11740
  web_server_startup_timeout: builtins.float
11496
11741
  web_endpoint_docs: builtins.bool
11497
11742
  requires_proxy_auth: builtins.bool
11743
+ ephemeral_suffix: builtins.str
11744
+ """Additional URL suffix added for ephemeral Apps"""
11498
11745
  def __init__(
11499
11746
  self,
11500
11747
  *,
@@ -11507,8 +11754,9 @@ class WebhookConfig(google.protobuf.message.Message):
11507
11754
  web_server_startup_timeout: builtins.float = ...,
11508
11755
  web_endpoint_docs: builtins.bool = ...,
11509
11756
  requires_proxy_auth: builtins.bool = ...,
11757
+ ephemeral_suffix: builtins.str = ...,
11510
11758
  ) -> None: ...
11511
- def ClearField(self, field_name: typing_extensions.Literal["async_mode", b"async_mode", "custom_domains", b"custom_domains", "method", b"method", "requested_suffix", b"requested_suffix", "requires_proxy_auth", b"requires_proxy_auth", "type", b"type", "web_endpoint_docs", b"web_endpoint_docs", "web_server_port", b"web_server_port", "web_server_startup_timeout", b"web_server_startup_timeout"]) -> None: ...
11759
+ def ClearField(self, field_name: typing_extensions.Literal["async_mode", b"async_mode", "custom_domains", b"custom_domains", "ephemeral_suffix", b"ephemeral_suffix", "method", b"method", "requested_suffix", b"requested_suffix", "requires_proxy_auth", b"requires_proxy_auth", "type", b"type", "web_endpoint_docs", b"web_endpoint_docs", "web_server_port", b"web_server_port", "web_server_startup_timeout", b"web_server_startup_timeout"]) -> None: ...
11512
11760
 
11513
11761
  global___WebhookConfig = WebhookConfig
11514
11762