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_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
 
@@ -2356,16 +2380,19 @@ class CancelInputEvent(google.protobuf.message.Message):
2356
2380
 
2357
2381
  INPUT_IDS_FIELD_NUMBER: builtins.int
2358
2382
  TERMINATE_CONTAINERS_FIELD_NUMBER: builtins.int
2383
+ CANCELLATION_REASON_FIELD_NUMBER: builtins.int
2359
2384
  @property
2360
2385
  def input_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
2361
2386
  terminate_containers: builtins.bool
2387
+ cancellation_reason: builtins.str
2362
2388
  def __init__(
2363
2389
  self,
2364
2390
  *,
2365
2391
  input_ids: collections.abc.Iterable[builtins.str] | None = ...,
2366
2392
  terminate_containers: builtins.bool = ...,
2393
+ cancellation_reason: builtins.str = ...,
2367
2394
  ) -> None: ...
2368
- 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: ...
2369
2396
 
2370
2397
  global___CancelInputEvent = CancelInputEvent
2371
2398
 
@@ -2726,6 +2753,21 @@ class CloudBucketMount(google.protobuf.message.Message):
2726
2753
  R2: CloudBucketMount.BucketType.ValueType # 2
2727
2754
  GCP: CloudBucketMount.BucketType.ValueType # 3
2728
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
+
2729
2771
  BUCKET_NAME_FIELD_NUMBER: builtins.int
2730
2772
  MOUNT_PATH_FIELD_NUMBER: builtins.int
2731
2773
  CREDENTIALS_SECRET_ID_FIELD_NUMBER: builtins.int
@@ -2735,6 +2777,9 @@ class CloudBucketMount(google.protobuf.message.Message):
2735
2777
  BUCKET_ENDPOINT_URL_FIELD_NUMBER: builtins.int
2736
2778
  KEY_PREFIX_FIELD_NUMBER: builtins.int
2737
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
2738
2783
  bucket_name: builtins.str
2739
2784
  mount_path: builtins.str
2740
2785
  credentials_secret_id: builtins.str
@@ -2744,6 +2789,9 @@ class CloudBucketMount(google.protobuf.message.Message):
2744
2789
  bucket_endpoint_url: builtins.str
2745
2790
  key_prefix: builtins.str
2746
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
2747
2795
  def __init__(
2748
2796
  self,
2749
2797
  *,
@@ -2756,15 +2804,20 @@ class CloudBucketMount(google.protobuf.message.Message):
2756
2804
  bucket_endpoint_url: builtins.str | None = ...,
2757
2805
  key_prefix: builtins.str | None = ...,
2758
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 = ...,
2759
2810
  ) -> None: ...
2760
- 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: ...
2761
- 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: ...
2762
2813
  @typing.overload
2763
2814
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_bucket_endpoint_url", b"_bucket_endpoint_url"]) -> typing_extensions.Literal["bucket_endpoint_url"] | None: ...
2764
2815
  @typing.overload
2765
2816
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_key_prefix", b"_key_prefix"]) -> typing_extensions.Literal["key_prefix"] | None: ...
2766
2817
  @typing.overload
2767
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: ...
2768
2821
 
2769
2822
  global___CloudBucketMount = CloudBucketMount
2770
2823
 
@@ -4222,12 +4275,20 @@ class EnvironmentListItem(google.protobuf.message.Message):
4222
4275
  DEFAULT_FIELD_NUMBER: builtins.int
4223
4276
  IS_MANAGED_FIELD_NUMBER: builtins.int
4224
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
4225
4282
  name: builtins.str
4226
4283
  webhook_suffix: builtins.str
4227
4284
  created_at: builtins.float
4228
4285
  default: builtins.bool
4229
4286
  is_managed: builtins.bool
4230
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
4231
4292
  def __init__(
4232
4293
  self,
4233
4294
  *,
@@ -4237,8 +4298,17 @@ class EnvironmentListItem(google.protobuf.message.Message):
4237
4298
  default: builtins.bool = ...,
4238
4299
  is_managed: builtins.bool = ...,
4239
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 = ...,
4240
4305
  ) -> None: ...
4241
- 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: ...
4242
4312
 
4243
4313
  global___EnvironmentListItem = EnvironmentListItem
4244
4314
 
@@ -4304,20 +4374,30 @@ class EnvironmentUpdateRequest(google.protobuf.message.Message):
4304
4374
  CURRENT_NAME_FIELD_NUMBER: builtins.int
4305
4375
  NAME_FIELD_NUMBER: builtins.int
4306
4376
  WEB_SUFFIX_FIELD_NUMBER: builtins.int
4377
+ MAX_CONCURRENT_TASKS_FIELD_NUMBER: builtins.int
4378
+ MAX_CONCURRENT_GPUS_FIELD_NUMBER: builtins.int
4307
4379
  current_name: builtins.str
4308
4380
  @property
4309
4381
  def name(self) -> google.protobuf.wrappers_pb2.StringValue: ...
4310
4382
  @property
4311
4383
  def web_suffix(self) -> google.protobuf.wrappers_pb2.StringValue: ...
4384
+ max_concurrent_tasks: builtins.int
4385
+ max_concurrent_gpus: builtins.int
4312
4386
  def __init__(
4313
4387
  self,
4314
4388
  *,
4315
4389
  current_name: builtins.str = ...,
4316
4390
  name: google.protobuf.wrappers_pb2.StringValue | None = ...,
4317
4391
  web_suffix: google.protobuf.wrappers_pb2.StringValue | None = ...,
4392
+ max_concurrent_tasks: builtins.int | None = ...,
4393
+ max_concurrent_gpus: builtins.int | None = ...,
4318
4394
  ) -> None: ...
4319
- def HasField(self, field_name: typing_extensions.Literal["name", b"name", "web_suffix", b"web_suffix"]) -> builtins.bool: ...
4320
- 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: ...
4321
4401
 
4322
4402
  global___EnvironmentUpdateRequest = EnvironmentUpdateRequest
4323
4403
 
@@ -4680,6 +4760,9 @@ class Function(google.protobuf.message.Message):
4680
4760
  STARTUP_TIMEOUT_SECS_FIELD_NUMBER: builtins.int
4681
4761
  SUPPORTED_INPUT_FORMATS_FIELD_NUMBER: builtins.int
4682
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
4683
4766
  module_name: builtins.str
4684
4767
  function_name: builtins.str
4685
4768
  @property
@@ -4742,6 +4825,9 @@ class Function(google.protobuf.message.Message):
4742
4825
  def object_dependencies(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ObjectDependency]: ...
4743
4826
  block_network: builtins.bool
4744
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
+ """
4745
4831
  @property
4746
4832
  def s3_mounts(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___S3Mount]: ...
4747
4833
  @property
@@ -4824,6 +4910,14 @@ class Function(google.protobuf.message.Message):
4824
4910
  """can be used as inputs"""
4825
4911
  @property
4826
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"""
4827
4921
  def __init__(
4828
4922
  self,
4829
4923
  *,
@@ -4902,14 +4996,19 @@ class Function(google.protobuf.message.Message):
4902
4996
  startup_timeout_secs: builtins.int = ...,
4903
4997
  supported_input_formats: collections.abc.Iterable[global___DataFormat.ValueType] | None = ...,
4904
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 = ...,
4905
5002
  ) -> None: ...
4906
- 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: ...
4907
- 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: ...
4908
5005
  @typing.overload
4909
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: ...
4910
5007
  @typing.overload
4911
5008
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_cloud_provider", b"_cloud_provider"]) -> typing_extensions.Literal["cloud_provider"] | None: ...
4912
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
4913
5012
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_proxy_id", b"_proxy_id"]) -> typing_extensions.Literal["proxy_id"] | None: ...
4914
5013
  @typing.overload
4915
5014
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_scheduler_placement", b"_scheduler_placement"]) -> typing_extensions.Literal["scheduler_placement"] | None: ...
@@ -5088,18 +5187,21 @@ class FunctionCallGetDataRequest(google.protobuf.message.Message):
5088
5187
  FUNCTION_CALL_ID_FIELD_NUMBER: builtins.int
5089
5188
  ATTEMPT_TOKEN_FIELD_NUMBER: builtins.int
5090
5189
  LAST_INDEX_FIELD_NUMBER: builtins.int
5190
+ USE_GAPLESS_READ_FIELD_NUMBER: builtins.int
5091
5191
  function_call_id: builtins.str
5092
5192
  attempt_token: builtins.str
5093
5193
  last_index: builtins.int
5194
+ use_gapless_read: builtins.bool
5094
5195
  def __init__(
5095
5196
  self,
5096
5197
  *,
5097
5198
  function_call_id: builtins.str = ...,
5098
5199
  attempt_token: builtins.str = ...,
5099
5200
  last_index: builtins.int = ...,
5201
+ use_gapless_read: builtins.bool = ...,
5100
5202
  ) -> None: ...
5101
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: ...
5102
- 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: ...
5103
5205
  def WhichOneof(self, oneof_group: typing_extensions.Literal["call_info", b"call_info"]) -> typing_extensions.Literal["function_call_id", "attempt_token"] | None: ...
5104
5206
 
5105
5207
  global___FunctionCallGetDataRequest = FunctionCallGetDataRequest
@@ -5367,6 +5469,8 @@ class FunctionData(google.protobuf.message.Message):
5367
5469
  STARTUP_TIMEOUT_SECS_FIELD_NUMBER: builtins.int
5368
5470
  SUPPORTED_INPUT_FORMATS_FIELD_NUMBER: builtins.int
5369
5471
  SUPPORTED_OUTPUT_FORMATS_FIELD_NUMBER: builtins.int
5472
+ HTTP_CONFIG_FIELD_NUMBER: builtins.int
5473
+ IMPLEMENTATION_NAME_FIELD_NUMBER: builtins.int
5370
5474
  module_name: builtins.str
5371
5475
  function_name: builtins.str
5372
5476
  function_type: global___Function.FunctionType.ValueType
@@ -5433,6 +5537,12 @@ class FunctionData(google.protobuf.message.Message):
5433
5537
  def supported_input_formats(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[global___DataFormat.ValueType]: ...
5434
5538
  @property
5435
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
+ """
5436
5546
  def __init__(
5437
5547
  self,
5438
5548
  *,
@@ -5473,10 +5583,15 @@ class FunctionData(google.protobuf.message.Message):
5473
5583
  startup_timeout_secs: builtins.int = ...,
5474
5584
  supported_input_formats: collections.abc.Iterable[global___DataFormat.ValueType] | None = ...,
5475
5585
  supported_output_formats: collections.abc.Iterable[global___DataFormat.ValueType] | None = ...,
5586
+ http_config: global___HTTPConfig | None = ...,
5587
+ implementation_name: builtins.str = ...,
5476
5588
  ) -> None: ...
5477
- 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: ...
5478
- 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
5479
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: ...
5480
5595
 
5481
5596
  global___FunctionData = FunctionData
5482
5597
 
@@ -6726,6 +6841,33 @@ class GenericResult(google.protobuf.message.Message):
6726
6841
 
6727
6842
  global___GenericResult = GenericResult
6728
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
+
6729
6871
  class Image(google.protobuf.message.Message):
6730
6872
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
6731
6873
 
@@ -7934,24 +8076,27 @@ class Proxy(google.protobuf.message.Message):
7934
8076
  NAME_FIELD_NUMBER: builtins.int
7935
8077
  CREATED_AT_FIELD_NUMBER: builtins.int
7936
8078
  ENVIRONMENT_NAME_FIELD_NUMBER: builtins.int
7937
- PROXY_ID_FIELD_NUMBER: builtins.int
7938
8079
  PROXY_IPS_FIELD_NUMBER: builtins.int
8080
+ PROXY_ID_FIELD_NUMBER: builtins.int
8081
+ REGION_FIELD_NUMBER: builtins.int
7939
8082
  name: builtins.str
7940
8083
  created_at: builtins.float
7941
8084
  environment_name: builtins.str
7942
- proxy_id: builtins.str
7943
8085
  @property
7944
8086
  def proxy_ips(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ProxyIp]: ...
8087
+ proxy_id: builtins.str
8088
+ region: builtins.str
7945
8089
  def __init__(
7946
8090
  self,
7947
8091
  *,
7948
8092
  name: builtins.str = ...,
7949
8093
  created_at: builtins.float = ...,
7950
8094
  environment_name: builtins.str = ...,
7951
- proxy_id: builtins.str = ...,
7952
8095
  proxy_ips: collections.abc.Iterable[global___ProxyIp] | None = ...,
8096
+ proxy_id: builtins.str = ...,
8097
+ region: builtins.str = ...,
7953
8098
  ) -> None: ...
7954
- 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: ...
7955
8100
 
7956
8101
  global___Proxy = Proxy
7957
8102
 
@@ -7990,15 +8135,18 @@ class ProxyCreateRequest(google.protobuf.message.Message):
7990
8135
 
7991
8136
  NAME_FIELD_NUMBER: builtins.int
7992
8137
  ENVIRONMENT_NAME_FIELD_NUMBER: builtins.int
8138
+ REGION_FIELD_NUMBER: builtins.int
7993
8139
  name: builtins.str
7994
8140
  environment_name: builtins.str
8141
+ region: builtins.str
7995
8142
  def __init__(
7996
8143
  self,
7997
8144
  *,
7998
8145
  name: builtins.str = ...,
7999
8146
  environment_name: builtins.str = ...,
8147
+ region: builtins.str = ...,
8000
8148
  ) -> None: ...
8001
- 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: ...
8002
8150
 
8003
8151
  global___ProxyCreateRequest = ProxyCreateRequest
8004
8152
 
@@ -8507,6 +8655,52 @@ class QueuePutRequest(google.protobuf.message.Message):
8507
8655
 
8508
8656
  global___QueuePutRequest = QueuePutRequest
8509
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
+
8510
8704
  class RateLimit(google.protobuf.message.Message):
8511
8705
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
8512
8706
 
@@ -8716,6 +8910,7 @@ class Sandbox(google.protobuf.message.Message):
8716
8910
  PRELOAD_PATH_PREFIXES_FIELD_NUMBER: builtins.int
8717
8911
  IDLE_TIMEOUT_SECS_FIELD_NUMBER: builtins.int
8718
8912
  DIRECT_SANDBOX_COMMANDS_ENABLED_FIELD_NUMBER: builtins.int
8913
+ _RESTORE_INSTANCE_TYPE_FIELD_NUMBER: builtins.int
8719
8914
  @property
8720
8915
  def entrypoint_args(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
8721
8916
  @property
@@ -8787,6 +8982,11 @@ class Sandbox(google.protobuf.message.Message):
8787
8982
  Exec commands for the sandbox will be issued directly to the sandbox
8788
8983
  command router running on the Modal worker.
8789
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
+ """
8790
8990
  def __init__(
8791
8991
  self,
8792
8992
  *,
@@ -8822,9 +9022,10 @@ class Sandbox(google.protobuf.message.Message):
8822
9022
  preload_path_prefixes: collections.abc.Iterable[builtins.str] | None = ...,
8823
9023
  idle_timeout_secs: builtins.int | None = ...,
8824
9024
  direct_sandbox_commands_enabled: builtins.bool = ...,
9025
+ _restore_instance_type: builtins.str = ...,
8825
9026
  ) -> None: ...
8826
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: ...
8827
- 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: ...
8828
9029
  @typing.overload
8829
9030
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_idle_timeout_secs", b"_idle_timeout_secs"]) -> typing_extensions.Literal["idle_timeout_secs"] | None: ...
8830
9031
  @typing.overload
@@ -8917,42 +9118,6 @@ class SandboxCreateResponse(google.protobuf.message.Message):
8917
9118
 
8918
9119
  global___SandboxCreateResponse = SandboxCreateResponse
8919
9120
 
8920
- class SandboxGetCommandRouterAccessRequest(google.protobuf.message.Message):
8921
- """Used to get a JWT and URL for direct access to a sandbox router server
8922
- running on the modal-worker, so the client can issue exec commands (and other
8923
- operations as they become available) directly to the worker.
8924
- """
8925
-
8926
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
8927
-
8928
- SANDBOX_ID_FIELD_NUMBER: builtins.int
8929
- sandbox_id: builtins.str
8930
- def __init__(
8931
- self,
8932
- *,
8933
- sandbox_id: builtins.str = ...,
8934
- ) -> None: ...
8935
- def ClearField(self, field_name: typing_extensions.Literal["sandbox_id", b"sandbox_id"]) -> None: ...
8936
-
8937
- global___SandboxGetCommandRouterAccessRequest = SandboxGetCommandRouterAccessRequest
8938
-
8939
- class SandboxGetCommandRouterAccessResponse(google.protobuf.message.Message):
8940
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
8941
-
8942
- JWT_FIELD_NUMBER: builtins.int
8943
- URL_FIELD_NUMBER: builtins.int
8944
- jwt: builtins.str
8945
- url: builtins.str
8946
- def __init__(
8947
- self,
8948
- *,
8949
- jwt: builtins.str = ...,
8950
- url: builtins.str = ...,
8951
- ) -> None: ...
8952
- def ClearField(self, field_name: typing_extensions.Literal["jwt", b"jwt", "url", b"url"]) -> None: ...
8953
-
8954
- global___SandboxGetCommandRouterAccessResponse = SandboxGetCommandRouterAccessResponse
8955
-
8956
9121
  class SandboxGetFromNameRequest(google.protobuf.message.Message):
8957
9122
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
8958
9123
 
@@ -9160,6 +9325,7 @@ class SandboxInfo(google.protobuf.message.Message):
9160
9325
  APP_ID_FIELD_NUMBER: builtins.int
9161
9326
  TAGS_FIELD_NUMBER: builtins.int
9162
9327
  NAME_FIELD_NUMBER: builtins.int
9328
+ IMAGE_ID_FIELD_NUMBER: builtins.int
9163
9329
  id: builtins.str
9164
9330
  created_at: builtins.float
9165
9331
  @property
@@ -9169,6 +9335,7 @@ class SandboxInfo(google.protobuf.message.Message):
9169
9335
  def tags(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___SandboxTag]:
9170
9336
  """TODO: Not yet exposed in client library."""
9171
9337
  name: builtins.str
9338
+ image_id: builtins.str
9172
9339
  def __init__(
9173
9340
  self,
9174
9341
  *,
@@ -9178,9 +9345,10 @@ class SandboxInfo(google.protobuf.message.Message):
9178
9345
  app_id: builtins.str = ...,
9179
9346
  tags: collections.abc.Iterable[global___SandboxTag] | None = ...,
9180
9347
  name: builtins.str = ...,
9348
+ image_id: builtins.str = ...,
9181
9349
  ) -> None: ...
9182
9350
  def HasField(self, field_name: typing_extensions.Literal["task_info", b"task_info"]) -> builtins.bool: ...
9183
- 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: ...
9184
9352
 
9185
9353
  global___SandboxInfo = SandboxInfo
9186
9354
 
@@ -9679,11 +9847,7 @@ class Schedule(google.protobuf.message.Message):
9679
9847
  global___Schedule = Schedule
9680
9848
 
9681
9849
  class SchedulerPlacement(google.protobuf.message.Message):
9682
- """TODO(irfansharif):
9683
- - Fold in cloud, resource needs here too.
9684
- - Allow specifying list of zones, cloud, fallback and alternative
9685
- GPU types.
9686
- """
9850
+ """Scheduling constraints for Functions and Sandboxes."""
9687
9851
 
9688
9852
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
9689
9853
 
@@ -9691,17 +9855,15 @@ class SchedulerPlacement(google.protobuf.message.Message):
9691
9855
  _ZONE_FIELD_NUMBER: builtins.int
9692
9856
  _LIFECYCLE_FIELD_NUMBER: builtins.int
9693
9857
  _INSTANCE_TYPES_FIELD_NUMBER: builtins.int
9858
+ NONPREEMPTIBLE_FIELD_NUMBER: builtins.int
9694
9859
  @property
9695
9860
  def regions(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
9696
9861
  _zone: builtins.str
9697
- """TODO(irfansharif): Make these two repeated.
9698
- admin-only
9699
- """
9700
9862
  _lifecycle: builtins.str
9701
- """admin-only, "on-demand" or "spot", else ignored"""
9702
9863
  @property
9703
- def _instance_types(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
9704
- """admin-only"""
9864
+ def _instance_types(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
9865
+ nonpreemptible: builtins.bool
9866
+ """Functions only"""
9705
9867
  def __init__(
9706
9868
  self,
9707
9869
  *,
@@ -9709,9 +9871,10 @@ class SchedulerPlacement(google.protobuf.message.Message):
9709
9871
  _zone: builtins.str | None = ...,
9710
9872
  _lifecycle: builtins.str | None = ...,
9711
9873
  _instance_types: collections.abc.Iterable[builtins.str] | None = ...,
9874
+ nonpreemptible: builtins.bool = ...,
9712
9875
  ) -> None: ...
9713
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: ...
9714
- 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: ...
9715
9878
  @typing.overload
9716
9879
  def WhichOneof(self, oneof_group: typing_extensions.Literal["X_lifecycle", b"X_lifecycle"]) -> typing_extensions.Literal["_lifecycle"] | None: ...
9717
9880
  @typing.overload
@@ -10300,7 +10463,12 @@ class TaskCurrentInputsResponse(google.protobuf.message.Message):
10300
10463
 
10301
10464
  global___TaskCurrentInputsResponse = TaskCurrentInputsResponse
10302
10465
 
10303
- 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
+
10304
10472
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
10305
10473
 
10306
10474
  TASK_ID_FIELD_NUMBER: builtins.int
@@ -10312,23 +10480,24 @@ class TaskGetAutoscalingMetricsRequest(google.protobuf.message.Message):
10312
10480
  ) -> None: ...
10313
10481
  def ClearField(self, field_name: typing_extensions.Literal["task_id", b"task_id"]) -> None: ...
10314
10482
 
10315
- global___TaskGetAutoscalingMetricsRequest = TaskGetAutoscalingMetricsRequest
10483
+ global___TaskGetCommandRouterAccessRequest = TaskGetCommandRouterAccessRequest
10316
10484
 
10317
- class TaskGetAutoscalingMetricsResponse(google.protobuf.message.Message):
10485
+ class TaskGetCommandRouterAccessResponse(google.protobuf.message.Message):
10318
10486
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
10319
10487
 
10320
- METRICS_FIELD_NUMBER: builtins.int
10321
- @property
10322
- 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
10323
10492
  def __init__(
10324
10493
  self,
10325
10494
  *,
10326
- metrics: global___AutoscalingMetrics | None = ...,
10495
+ jwt: builtins.str = ...,
10496
+ url: builtins.str = ...,
10327
10497
  ) -> None: ...
10328
- def HasField(self, field_name: typing_extensions.Literal["metrics", b"metrics"]) -> builtins.bool: ...
10329
- 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: ...
10330
10499
 
10331
- global___TaskGetAutoscalingMetricsResponse = TaskGetAutoscalingMetricsResponse
10500
+ global___TaskGetCommandRouterAccessResponse = TaskGetCommandRouterAccessResponse
10332
10501
 
10333
10502
  class TaskInfo(google.protobuf.message.Message):
10334
10503
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
@@ -11559,9 +11728,11 @@ class WebhookConfig(google.protobuf.message.Message):
11559
11728
  WEB_SERVER_STARTUP_TIMEOUT_FIELD_NUMBER: builtins.int
11560
11729
  WEB_ENDPOINT_DOCS_FIELD_NUMBER: builtins.int
11561
11730
  REQUIRES_PROXY_AUTH_FIELD_NUMBER: builtins.int
11731
+ EPHEMERAL_SUFFIX_FIELD_NUMBER: builtins.int
11562
11732
  type: global___WebhookType.ValueType
11563
11733
  method: builtins.str
11564
11734
  requested_suffix: builtins.str
11735
+ """User-supplied "label" component of URL"""
11565
11736
  async_mode: global___WebhookAsyncMode.ValueType
11566
11737
  @property
11567
11738
  def custom_domains(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___CustomDomainConfig]: ...
@@ -11569,6 +11740,8 @@ class WebhookConfig(google.protobuf.message.Message):
11569
11740
  web_server_startup_timeout: builtins.float
11570
11741
  web_endpoint_docs: builtins.bool
11571
11742
  requires_proxy_auth: builtins.bool
11743
+ ephemeral_suffix: builtins.str
11744
+ """Additional URL suffix added for ephemeral Apps"""
11572
11745
  def __init__(
11573
11746
  self,
11574
11747
  *,
@@ -11581,8 +11754,9 @@ class WebhookConfig(google.protobuf.message.Message):
11581
11754
  web_server_startup_timeout: builtins.float = ...,
11582
11755
  web_endpoint_docs: builtins.bool = ...,
11583
11756
  requires_proxy_auth: builtins.bool = ...,
11757
+ ephemeral_suffix: builtins.str = ...,
11584
11758
  ) -> None: ...
11585
- 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: ...
11586
11760
 
11587
11761
  global___WebhookConfig = WebhookConfig
11588
11762