modal 1.0.4.dev10__py3-none-any.whl → 1.0.5__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.
Files changed (67) hide show
  1. modal/_clustered_functions.pyi +13 -3
  2. modal/_functions.py +84 -46
  3. modal/_partial_function.py +1 -1
  4. modal/_runtime/container_io_manager.pyi +222 -40
  5. modal/_runtime/execution_context.pyi +60 -6
  6. modal/_serialization.py +25 -2
  7. modal/_tunnel.pyi +380 -12
  8. modal/_utils/async_utils.py +1 -1
  9. modal/_utils/blob_utils.py +56 -19
  10. modal/_utils/function_utils.py +33 -7
  11. modal/_utils/grpc_utils.py +11 -4
  12. modal/app.py +5 -5
  13. modal/app.pyi +658 -48
  14. modal/cli/run.py +2 -1
  15. modal/client.pyi +224 -36
  16. modal/cloud_bucket_mount.pyi +192 -4
  17. modal/cls.py +57 -16
  18. modal/cls.pyi +442 -34
  19. modal/container_process.pyi +103 -14
  20. modal/dict.py +4 -4
  21. modal/dict.pyi +453 -51
  22. modal/environments.pyi +41 -9
  23. modal/exception.py +6 -2
  24. modal/experimental/__init__.py +90 -0
  25. modal/experimental/ipython.py +11 -7
  26. modal/file_io.pyi +236 -45
  27. modal/functions.pyi +573 -65
  28. modal/gpu.py +1 -1
  29. modal/image.py +1 -1
  30. modal/image.pyi +1256 -74
  31. modal/io_streams.py +8 -4
  32. modal/io_streams.pyi +348 -38
  33. modal/mount.pyi +261 -31
  34. modal/network_file_system.py +3 -3
  35. modal/network_file_system.pyi +307 -26
  36. modal/object.pyi +48 -9
  37. modal/parallel_map.py +93 -19
  38. modal/parallel_map.pyi +160 -15
  39. modal/partial_function.pyi +255 -14
  40. modal/proxy.py +1 -1
  41. modal/proxy.pyi +28 -3
  42. modal/queue.py +4 -4
  43. modal/queue.pyi +447 -30
  44. modal/runner.pyi +160 -22
  45. modal/sandbox.py +8 -7
  46. modal/sandbox.pyi +310 -50
  47. modal/schedule.py +1 -1
  48. modal/secret.py +2 -2
  49. modal/secret.pyi +164 -15
  50. modal/snapshot.pyi +25 -4
  51. modal/token_flow.pyi +28 -8
  52. modal/volume.py +41 -4
  53. modal/volume.pyi +693 -59
  54. {modal-1.0.4.dev10.dist-info → modal-1.0.5.dist-info}/METADATA +3 -3
  55. {modal-1.0.4.dev10.dist-info → modal-1.0.5.dist-info}/RECORD +67 -67
  56. modal_proto/api.proto +57 -0
  57. modal_proto/api_grpc.py +48 -0
  58. modal_proto/api_pb2.py +874 -780
  59. modal_proto/api_pb2.pyi +198 -9
  60. modal_proto/api_pb2_grpc.py +100 -0
  61. modal_proto/api_pb2_grpc.pyi +32 -0
  62. modal_proto/modal_api_grpc.py +3 -0
  63. modal_version/__init__.py +1 -1
  64. {modal-1.0.4.dev10.dist-info → modal-1.0.5.dist-info}/WHEEL +0 -0
  65. {modal-1.0.4.dev10.dist-info → modal-1.0.5.dist-info}/entry_points.txt +0 -0
  66. {modal-1.0.4.dev10.dist-info → modal-1.0.5.dist-info}/licenses/LICENSE +0 -0
  67. {modal-1.0.4.dev10.dist-info → modal-1.0.5.dist-info}/top_level.txt +0 -0
modal_proto/api_pb2.pyi CHANGED
@@ -2039,20 +2039,35 @@ class BlobCreateResponse(google.protobuf.message.Message):
2039
2039
  BLOB_ID_FIELD_NUMBER: builtins.int
2040
2040
  UPLOAD_URL_FIELD_NUMBER: builtins.int
2041
2041
  MULTIPART_FIELD_NUMBER: builtins.int
2042
+ BLOB_IDS_FIELD_NUMBER: builtins.int
2043
+ UPLOAD_URLS_FIELD_NUMBER: builtins.int
2044
+ MULTIPARTS_FIELD_NUMBER: builtins.int
2042
2045
  blob_id: builtins.str
2043
2046
  upload_url: builtins.str
2044
2047
  @property
2045
2048
  def multipart(self) -> global___MultiPartUpload: ...
2049
+ @property
2050
+ def blob_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
2051
+ @property
2052
+ def upload_urls(self) -> global___UploadUrlList: ...
2053
+ @property
2054
+ def multiparts(self) -> global___MultiPartUploadList: ...
2046
2055
  def __init__(
2047
2056
  self,
2048
2057
  *,
2049
2058
  blob_id: builtins.str = ...,
2050
2059
  upload_url: builtins.str = ...,
2051
2060
  multipart: global___MultiPartUpload | None = ...,
2061
+ blob_ids: collections.abc.Iterable[builtins.str] | None = ...,
2062
+ upload_urls: global___UploadUrlList | None = ...,
2063
+ multiparts: global___MultiPartUploadList | None = ...,
2052
2064
  ) -> None: ...
2053
- def HasField(self, field_name: typing_extensions.Literal["multipart", b"multipart", "upload_type_oneof", b"upload_type_oneof", "upload_url", b"upload_url"]) -> builtins.bool: ...
2054
- def ClearField(self, field_name: typing_extensions.Literal["blob_id", b"blob_id", "multipart", b"multipart", "upload_type_oneof", b"upload_type_oneof", "upload_url", b"upload_url"]) -> None: ...
2065
+ def HasField(self, field_name: typing_extensions.Literal["multipart", b"multipart", "multiparts", b"multiparts", "upload_type_oneof", b"upload_type_oneof", "upload_types_oneof", b"upload_types_oneof", "upload_url", b"upload_url", "upload_urls", b"upload_urls"]) -> builtins.bool: ...
2066
+ def ClearField(self, field_name: typing_extensions.Literal["blob_id", b"blob_id", "blob_ids", b"blob_ids", "multipart", b"multipart", "multiparts", b"multiparts", "upload_type_oneof", b"upload_type_oneof", "upload_types_oneof", b"upload_types_oneof", "upload_url", b"upload_url", "upload_urls", b"upload_urls"]) -> None: ...
2067
+ @typing.overload
2055
2068
  def WhichOneof(self, oneof_group: typing_extensions.Literal["upload_type_oneof", b"upload_type_oneof"]) -> typing_extensions.Literal["upload_url", "multipart"] | None: ...
2069
+ @typing.overload
2070
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["upload_types_oneof", b"upload_types_oneof"]) -> typing_extensions.Literal["upload_urls", "multiparts"] | None: ...
2056
2071
 
2057
2072
  global___BlobCreateResponse = BlobCreateResponse
2058
2073
 
@@ -4061,6 +4076,108 @@ class FilesystemRuntimeOutputBatch(google.protobuf.message.Message):
4061
4076
 
4062
4077
  global___FilesystemRuntimeOutputBatch = FilesystemRuntimeOutputBatch
4063
4078
 
4079
+ class FlashContainerDeregisterRequest(google.protobuf.message.Message):
4080
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
4081
+
4082
+ SERVICE_NAME_FIELD_NUMBER: builtins.int
4083
+ service_name: builtins.str
4084
+ def __init__(
4085
+ self,
4086
+ *,
4087
+ service_name: builtins.str = ...,
4088
+ ) -> None: ...
4089
+ def ClearField(self, field_name: typing_extensions.Literal["service_name", b"service_name"]) -> None: ...
4090
+
4091
+ global___FlashContainerDeregisterRequest = FlashContainerDeregisterRequest
4092
+
4093
+ class FlashContainerListRequest(google.protobuf.message.Message):
4094
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
4095
+
4096
+ FUNCTION_ID_FIELD_NUMBER: builtins.int
4097
+ function_id: builtins.str
4098
+ def __init__(
4099
+ self,
4100
+ *,
4101
+ function_id: builtins.str = ...,
4102
+ ) -> None: ...
4103
+ def ClearField(self, field_name: typing_extensions.Literal["function_id", b"function_id"]) -> None: ...
4104
+
4105
+ global___FlashContainerListRequest = FlashContainerListRequest
4106
+
4107
+ class FlashContainerListResponse(google.protobuf.message.Message):
4108
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
4109
+
4110
+ class Container(google.protobuf.message.Message):
4111
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
4112
+
4113
+ TASK_ID_FIELD_NUMBER: builtins.int
4114
+ HOST_FIELD_NUMBER: builtins.int
4115
+ PORT_FIELD_NUMBER: builtins.int
4116
+ task_id: builtins.str
4117
+ host: builtins.str
4118
+ port: builtins.int
4119
+ def __init__(
4120
+ self,
4121
+ *,
4122
+ task_id: builtins.str = ...,
4123
+ host: builtins.str = ...,
4124
+ port: builtins.int = ...,
4125
+ ) -> None: ...
4126
+ def ClearField(self, field_name: typing_extensions.Literal["host", b"host", "port", b"port", "task_id", b"task_id"]) -> None: ...
4127
+
4128
+ CONTAINERS_FIELD_NUMBER: builtins.int
4129
+ @property
4130
+ def containers(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___FlashContainerListResponse.Container]: ...
4131
+ def __init__(
4132
+ self,
4133
+ *,
4134
+ containers: collections.abc.Iterable[global___FlashContainerListResponse.Container] | None = ...,
4135
+ ) -> None: ...
4136
+ def ClearField(self, field_name: typing_extensions.Literal["containers", b"containers"]) -> None: ...
4137
+
4138
+ global___FlashContainerListResponse = FlashContainerListResponse
4139
+
4140
+ class FlashContainerRegisterRequest(google.protobuf.message.Message):
4141
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
4142
+
4143
+ SERVICE_NAME_FIELD_NUMBER: builtins.int
4144
+ PRIORITY_FIELD_NUMBER: builtins.int
4145
+ WEIGHT_FIELD_NUMBER: builtins.int
4146
+ HOST_FIELD_NUMBER: builtins.int
4147
+ PORT_FIELD_NUMBER: builtins.int
4148
+ service_name: builtins.str
4149
+ """not used?"""
4150
+ priority: builtins.int
4151
+ weight: builtins.int
4152
+ host: builtins.str
4153
+ port: builtins.int
4154
+ def __init__(
4155
+ self,
4156
+ *,
4157
+ service_name: builtins.str = ...,
4158
+ priority: builtins.int = ...,
4159
+ weight: builtins.int = ...,
4160
+ host: builtins.str = ...,
4161
+ port: builtins.int = ...,
4162
+ ) -> None: ...
4163
+ def ClearField(self, field_name: typing_extensions.Literal["host", b"host", "port", b"port", "priority", b"priority", "service_name", b"service_name", "weight", b"weight"]) -> None: ...
4164
+
4165
+ global___FlashContainerRegisterRequest = FlashContainerRegisterRequest
4166
+
4167
+ class FlashContainerRegisterResponse(google.protobuf.message.Message):
4168
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
4169
+
4170
+ URL_FIELD_NUMBER: builtins.int
4171
+ url: builtins.str
4172
+ def __init__(
4173
+ self,
4174
+ *,
4175
+ url: builtins.str = ...,
4176
+ ) -> None: ...
4177
+ def ClearField(self, field_name: typing_extensions.Literal["url", b"url"]) -> None: ...
4178
+
4179
+ global___FlashContainerRegisterResponse = FlashContainerRegisterResponse
4180
+
4064
4181
  class Function(google.protobuf.message.Message):
4065
4182
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
4066
4183
 
@@ -4195,6 +4312,7 @@ class Function(google.protobuf.message.Message):
4195
4312
  FUNCTION_SCHEMA_FIELD_NUMBER: builtins.int
4196
4313
  EXPERIMENTAL_OPTIONS_FIELD_NUMBER: builtins.int
4197
4314
  MOUNT_CLIENT_DEPENDENCIES_FIELD_NUMBER: builtins.int
4315
+ FLASH_SERVICE_URLS_FIELD_NUMBER: builtins.int
4198
4316
  module_name: builtins.str
4199
4317
  function_name: builtins.str
4200
4318
  @property
@@ -4327,6 +4445,8 @@ class Function(google.protobuf.message.Message):
4327
4445
  """If set, client deps will be mounted into the container, and are
4328
4446
  no longer expected to exist in the image itself.
4329
4447
  """
4448
+ @property
4449
+ def flash_service_urls(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
4330
4450
  def __init__(
4331
4451
  self,
4332
4452
  *,
@@ -4399,9 +4519,10 @@ class Function(google.protobuf.message.Message):
4399
4519
  function_schema: global___FunctionSchema | None = ...,
4400
4520
  experimental_options: collections.abc.Mapping[builtins.str, builtins.str] | None = ...,
4401
4521
  mount_client_dependencies: builtins.bool = ...,
4522
+ flash_service_urls: collections.abc.Iterable[builtins.str] | None = ...,
4402
4523
  ) -> None: ...
4403
4524
  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: ...
4404
- 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", "experimental_options", b"experimental_options", "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", "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: ...
4525
+ 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", "experimental_options", b"experimental_options", "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", "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: ...
4405
4526
  @typing.overload
4406
4527
  def WhichOneof(self, oneof_group: typing_extensions.Literal["X_experimental_proxy_ip", b"X_experimental_proxy_ip"]) -> typing_extensions.Literal["_experimental_proxy_ip"] | None: ...
4407
4528
  @typing.overload
@@ -4806,6 +4927,7 @@ class FunctionData(google.protobuf.message.Message):
4806
4927
  AUTOSCALER_SETTINGS_FIELD_NUMBER: builtins.int
4807
4928
  FUNCTION_SCHEMA_FIELD_NUMBER: builtins.int
4808
4929
  EXPERIMENTAL_OPTIONS_FIELD_NUMBER: builtins.int
4930
+ FLASH_SERVICE_URLS_FIELD_NUMBER: builtins.int
4809
4931
  module_name: builtins.str
4810
4932
  function_name: builtins.str
4811
4933
  function_type: global___Function.FunctionType.ValueType
@@ -4864,6 +4986,8 @@ class FunctionData(google.protobuf.message.Message):
4864
4986
  def function_schema(self) -> global___FunctionSchema: ...
4865
4987
  @property
4866
4988
  def experimental_options(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: ...
4989
+ @property
4990
+ def flash_service_urls(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
4867
4991
  def __init__(
4868
4992
  self,
4869
4993
  *,
@@ -4899,9 +5023,10 @@ class FunctionData(google.protobuf.message.Message):
4899
5023
  autoscaler_settings: global___AutoscalerSettings | None = ...,
4900
5024
  function_schema: global___FunctionSchema | None = ...,
4901
5025
  experimental_options: collections.abc.Mapping[builtins.str, builtins.str] | None = ...,
5026
+ flash_service_urls: collections.abc.Iterable[builtins.str] | None = ...,
4902
5027
  ) -> None: ...
4903
5028
  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: ...
4904
- 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", "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", "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: ...
5029
+ 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_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", "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: ...
4905
5030
  def WhichOneof(self, oneof_group: typing_extensions.Literal["X_experimental_proxy_ip", b"X_experimental_proxy_ip"]) -> typing_extensions.Literal["_experimental_proxy_ip"] | None: ...
4906
5031
 
4907
5032
  global___FunctionData = FunctionData
@@ -5310,6 +5435,7 @@ class FunctionHandleMetadata(google.protobuf.message.Message):
5310
5435
  METHOD_HANDLE_METADATA_FIELD_NUMBER: builtins.int
5311
5436
  FUNCTION_SCHEMA_FIELD_NUMBER: builtins.int
5312
5437
  INPUT_PLANE_URL_FIELD_NUMBER: builtins.int
5438
+ INPUT_PLANE_REGION_FIELD_NUMBER: builtins.int
5313
5439
  function_name: builtins.str
5314
5440
  """Should be a subset and use IDs/types from `Function` above"""
5315
5441
  function_type: global___Function.FunctionType.ValueType
@@ -5328,6 +5454,7 @@ class FunctionHandleMetadata(google.protobuf.message.Message):
5328
5454
  @property
5329
5455
  def function_schema(self) -> global___FunctionSchema: ...
5330
5456
  input_plane_url: builtins.str
5457
+ input_plane_region: builtins.str
5331
5458
  def __init__(
5332
5459
  self,
5333
5460
  *,
@@ -5342,9 +5469,13 @@ class FunctionHandleMetadata(google.protobuf.message.Message):
5342
5469
  method_handle_metadata: collections.abc.Mapping[builtins.str, global___FunctionHandleMetadata] | None = ...,
5343
5470
  function_schema: global___FunctionSchema | None = ...,
5344
5471
  input_plane_url: builtins.str | None = ...,
5472
+ input_plane_region: builtins.str | None = ...,
5345
5473
  ) -> None: ...
5346
- def HasField(self, field_name: typing_extensions.Literal["_input_plane_url", b"_input_plane_url", "class_parameter_info", b"class_parameter_info", "function_schema", b"function_schema", "input_plane_url", b"input_plane_url"]) -> builtins.bool: ...
5347
- def ClearField(self, field_name: typing_extensions.Literal["_input_plane_url", b"_input_plane_url", "class_parameter_info", b"class_parameter_info", "definition_id", b"definition_id", "function_name", b"function_name", "function_schema", b"function_schema", "function_type", b"function_type", "input_plane_url", b"input_plane_url", "is_method", b"is_method", "method_handle_metadata", b"method_handle_metadata", "use_function_id", b"use_function_id", "use_method_name", b"use_method_name", "web_url", b"web_url"]) -> None: ...
5474
+ def HasField(self, field_name: typing_extensions.Literal["_input_plane_region", b"_input_plane_region", "_input_plane_url", b"_input_plane_url", "class_parameter_info", b"class_parameter_info", "function_schema", b"function_schema", "input_plane_region", b"input_plane_region", "input_plane_url", b"input_plane_url"]) -> builtins.bool: ...
5475
+ def ClearField(self, field_name: typing_extensions.Literal["_input_plane_region", b"_input_plane_region", "_input_plane_url", b"_input_plane_url", "class_parameter_info", b"class_parameter_info", "definition_id", b"definition_id", "function_name", b"function_name", "function_schema", b"function_schema", "function_type", b"function_type", "input_plane_region", b"input_plane_region", "input_plane_url", b"input_plane_url", "is_method", b"is_method", "method_handle_metadata", b"method_handle_metadata", "use_function_id", b"use_function_id", "use_method_name", b"use_method_name", "web_url", b"web_url"]) -> None: ...
5476
+ @typing.overload
5477
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_input_plane_region", b"_input_plane_region"]) -> typing_extensions.Literal["input_plane_region"] | None: ...
5478
+ @typing.overload
5348
5479
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_input_plane_url", b"_input_plane_url"]) -> typing_extensions.Literal["input_plane_url"] | None: ...
5349
5480
 
5350
5481
  global___FunctionHandleMetadata = FunctionHandleMetadata
@@ -6047,6 +6178,21 @@ global___GenericResult = GenericResult
6047
6178
  class Image(google.protobuf.message.Message):
6048
6179
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
6049
6180
 
6181
+ class BuildArgsEntry(google.protobuf.message.Message):
6182
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
6183
+
6184
+ KEY_FIELD_NUMBER: builtins.int
6185
+ VALUE_FIELD_NUMBER: builtins.int
6186
+ key: builtins.str
6187
+ value: builtins.str
6188
+ def __init__(
6189
+ self,
6190
+ *,
6191
+ key: builtins.str = ...,
6192
+ value: builtins.str = ...,
6193
+ ) -> None: ...
6194
+ def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ...
6195
+
6050
6196
  BASE_IMAGES_FIELD_NUMBER: builtins.int
6051
6197
  DOCKERFILE_COMMANDS_FIELD_NUMBER: builtins.int
6052
6198
  CONTEXT_FILES_FIELD_NUMBER: builtins.int
@@ -6060,6 +6206,7 @@ class Image(google.protobuf.message.Message):
6060
6206
  RUNTIME_FIELD_NUMBER: builtins.int
6061
6207
  RUNTIME_DEBUG_FIELD_NUMBER: builtins.int
6062
6208
  BUILD_FUNCTION_FIELD_NUMBER: builtins.int
6209
+ BUILD_ARGS_FIELD_NUMBER: builtins.int
6063
6210
  @property
6064
6211
  def base_images(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___BaseImage]: ...
6065
6212
  @property
@@ -6087,6 +6234,9 @@ class Image(google.protobuf.message.Message):
6087
6234
  """Not included in image definition checksum as debug features do not affect built image."""
6088
6235
  @property
6089
6236
  def build_function(self) -> global___BuildFunction: ...
6237
+ @property
6238
+ def build_args(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]:
6239
+ """Build arguments for the image (--build-arg) for ARG substitution in Dockerfile."""
6090
6240
  def __init__(
6091
6241
  self,
6092
6242
  *,
@@ -6103,9 +6253,10 @@ class Image(google.protobuf.message.Message):
6103
6253
  runtime: builtins.str = ...,
6104
6254
  runtime_debug: builtins.bool = ...,
6105
6255
  build_function: global___BuildFunction | None = ...,
6256
+ build_args: collections.abc.Mapping[builtins.str, builtins.str] | None = ...,
6106
6257
  ) -> None: ...
6107
6258
  def HasField(self, field_name: typing_extensions.Literal["build_function", b"build_function", "gpu_config", b"gpu_config", "image_registry_config", b"image_registry_config"]) -> builtins.bool: ...
6108
- def ClearField(self, field_name: typing_extensions.Literal["base_images", b"base_images", "build_function", b"build_function", "build_function_def", b"build_function_def", "build_function_globals", b"build_function_globals", "context_files", b"context_files", "context_mount_id", b"context_mount_id", "dockerfile_commands", b"dockerfile_commands", "gpu_config", b"gpu_config", "image_registry_config", b"image_registry_config", "runtime", b"runtime", "runtime_debug", b"runtime_debug", "secret_ids", b"secret_ids", "version", b"version"]) -> None: ...
6259
+ def ClearField(self, field_name: typing_extensions.Literal["base_images", b"base_images", "build_args", b"build_args", "build_function", b"build_function", "build_function_def", b"build_function_def", "build_function_globals", b"build_function_globals", "context_files", b"context_files", "context_mount_id", b"context_mount_id", "dockerfile_commands", b"dockerfile_commands", "gpu_config", b"gpu_config", "image_registry_config", b"image_registry_config", "runtime", b"runtime", "runtime_debug", b"runtime_debug", "secret_ids", b"secret_ids", "version", b"version"]) -> None: ...
6109
6260
 
6110
6261
  global___Image = Image
6111
6262
 
@@ -6625,6 +6776,21 @@ class MultiPartUpload(google.protobuf.message.Message):
6625
6776
 
6626
6777
  global___MultiPartUpload = MultiPartUpload
6627
6778
 
6779
+ class MultiPartUploadList(google.protobuf.message.Message):
6780
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
6781
+
6782
+ ITEMS_FIELD_NUMBER: builtins.int
6783
+ @property
6784
+ def items(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___MultiPartUpload]: ...
6785
+ def __init__(
6786
+ self,
6787
+ *,
6788
+ items: collections.abc.Iterable[global___MultiPartUpload] | None = ...,
6789
+ ) -> None: ...
6790
+ def ClearField(self, field_name: typing_extensions.Literal["items", b"items"]) -> None: ...
6791
+
6792
+ global___MultiPartUploadList = MultiPartUploadList
6793
+
6628
6794
  class NetworkAccess(google.protobuf.message.Message):
6629
6795
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
6630
6796
 
@@ -8041,11 +8207,15 @@ class SandboxInfo(google.protobuf.message.Message):
8041
8207
  CREATED_AT_FIELD_NUMBER: builtins.int
8042
8208
  TASK_INFO_FIELD_NUMBER: builtins.int
8043
8209
  APP_ID_FIELD_NUMBER: builtins.int
8210
+ TAGS_FIELD_NUMBER: builtins.int
8044
8211
  id: builtins.str
8045
8212
  created_at: builtins.float
8046
8213
  @property
8047
8214
  def task_info(self) -> global___TaskInfo: ...
8048
8215
  app_id: builtins.str
8216
+ @property
8217
+ def tags(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___SandboxTag]:
8218
+ """TODO: Not yet exposed in client library."""
8049
8219
  def __init__(
8050
8220
  self,
8051
8221
  *,
@@ -8053,9 +8223,10 @@ class SandboxInfo(google.protobuf.message.Message):
8053
8223
  created_at: builtins.float = ...,
8054
8224
  task_info: global___TaskInfo | None = ...,
8055
8225
  app_id: builtins.str = ...,
8226
+ tags: collections.abc.Iterable[global___SandboxTag] | None = ...,
8056
8227
  ) -> None: ...
8057
8228
  def HasField(self, field_name: typing_extensions.Literal["task_info", b"task_info"]) -> builtins.bool: ...
8058
- def ClearField(self, field_name: typing_extensions.Literal["app_id", b"app_id", "created_at", b"created_at", "id", b"id", "task_info", b"task_info"]) -> None: ...
8229
+ def ClearField(self, field_name: typing_extensions.Literal["app_id", b"app_id", "created_at", b"created_at", "id", b"id", "tags", b"tags", "task_info", b"task_info"]) -> None: ...
8059
8230
 
8060
8231
  global___SandboxInfo = SandboxInfo
8061
8232
 
@@ -9058,6 +9229,7 @@ class TaskInfo(google.protobuf.message.Message):
9058
9229
  RESULT_FIELD_NUMBER: builtins.int
9059
9230
  ENQUEUED_AT_FIELD_NUMBER: builtins.int
9060
9231
  GPU_TYPE_FIELD_NUMBER: builtins.int
9232
+ SANDBOX_ID_FIELD_NUMBER: builtins.int
9061
9233
  id: builtins.str
9062
9234
  started_at: builtins.float
9063
9235
  finished_at: builtins.float
@@ -9065,6 +9237,7 @@ class TaskInfo(google.protobuf.message.Message):
9065
9237
  def result(self) -> global___GenericResult: ...
9066
9238
  enqueued_at: builtins.float
9067
9239
  gpu_type: builtins.str
9240
+ sandbox_id: builtins.str
9068
9241
  def __init__(
9069
9242
  self,
9070
9243
  *,
@@ -9074,9 +9247,10 @@ class TaskInfo(google.protobuf.message.Message):
9074
9247
  result: global___GenericResult | None = ...,
9075
9248
  enqueued_at: builtins.float = ...,
9076
9249
  gpu_type: builtins.str = ...,
9250
+ sandbox_id: builtins.str = ...,
9077
9251
  ) -> None: ...
9078
9252
  def HasField(self, field_name: typing_extensions.Literal["result", b"result"]) -> builtins.bool: ...
9079
- def ClearField(self, field_name: typing_extensions.Literal["enqueued_at", b"enqueued_at", "finished_at", b"finished_at", "gpu_type", b"gpu_type", "id", b"id", "result", b"result", "started_at", b"started_at"]) -> None: ...
9253
+ def ClearField(self, field_name: typing_extensions.Literal["enqueued_at", b"enqueued_at", "finished_at", b"finished_at", "gpu_type", b"gpu_type", "id", b"id", "result", b"result", "sandbox_id", b"sandbox_id", "started_at", b"started_at"]) -> None: ...
9080
9254
 
9081
9255
  global___TaskInfo = TaskInfo
9082
9256
 
@@ -9479,6 +9653,21 @@ class TunnelStopResponse(google.protobuf.message.Message):
9479
9653
 
9480
9654
  global___TunnelStopResponse = TunnelStopResponse
9481
9655
 
9656
+ class UploadUrlList(google.protobuf.message.Message):
9657
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
9658
+
9659
+ ITEMS_FIELD_NUMBER: builtins.int
9660
+ @property
9661
+ def items(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
9662
+ def __init__(
9663
+ self,
9664
+ *,
9665
+ items: collections.abc.Iterable[builtins.str] | None = ...,
9666
+ ) -> None: ...
9667
+ def ClearField(self, field_name: typing_extensions.Literal["items", b"items"]) -> None: ...
9668
+
9669
+ global___UploadUrlList = UploadUrlList
9670
+
9482
9671
  class VolumeCommitRequest(google.protobuf.message.Message):
9483
9672
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
9484
9673
 
@@ -295,6 +295,21 @@ class ModalClientStub(object):
295
295
  request_serializer=modal__proto_dot_api__pb2.EnvironmentUpdateRequest.SerializeToString,
296
296
  response_deserializer=modal__proto_dot_api__pb2.EnvironmentListItem.FromString,
297
297
  )
298
+ self.FlashContainerDeregister = channel.unary_unary(
299
+ '/modal.client.ModalClient/FlashContainerDeregister',
300
+ request_serializer=modal__proto_dot_api__pb2.FlashContainerDeregisterRequest.SerializeToString,
301
+ response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
302
+ )
303
+ self.FlashContainerList = channel.unary_unary(
304
+ '/modal.client.ModalClient/FlashContainerList',
305
+ request_serializer=modal__proto_dot_api__pb2.FlashContainerListRequest.SerializeToString,
306
+ response_deserializer=modal__proto_dot_api__pb2.FlashContainerListResponse.FromString,
307
+ )
308
+ self.FlashContainerRegister = channel.unary_unary(
309
+ '/modal.client.ModalClient/FlashContainerRegister',
310
+ request_serializer=modal__proto_dot_api__pb2.FlashContainerRegisterRequest.SerializeToString,
311
+ response_deserializer=modal__proto_dot_api__pb2.FlashContainerRegisterResponse.FromString,
312
+ )
298
313
  self.FunctionAsyncInvoke = channel.unary_unary(
299
314
  '/modal.client.ModalClient/FunctionAsyncInvoke',
300
315
  request_serializer=modal__proto_dot_api__pb2.FunctionAsyncInvokeRequest.SerializeToString,
@@ -1133,6 +1148,25 @@ class ModalClientServicer(object):
1133
1148
  context.set_details('Method not implemented!')
1134
1149
  raise NotImplementedError('Method not implemented!')
1135
1150
 
1151
+ def FlashContainerDeregister(self, request, context):
1152
+ """Modal Flash (experimental)
1153
+ """
1154
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
1155
+ context.set_details('Method not implemented!')
1156
+ raise NotImplementedError('Method not implemented!')
1157
+
1158
+ def FlashContainerList(self, request, context):
1159
+ """Missing associated documentation comment in .proto file."""
1160
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
1161
+ context.set_details('Method not implemented!')
1162
+ raise NotImplementedError('Method not implemented!')
1163
+
1164
+ def FlashContainerRegister(self, request, context):
1165
+ """Missing associated documentation comment in .proto file."""
1166
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
1167
+ context.set_details('Method not implemented!')
1168
+ raise NotImplementedError('Method not implemented!')
1169
+
1136
1170
  def FunctionAsyncInvoke(self, request, context):
1137
1171
  """Functions
1138
1172
  """
@@ -2016,6 +2050,21 @@ def add_ModalClientServicer_to_server(servicer, server):
2016
2050
  request_deserializer=modal__proto_dot_api__pb2.EnvironmentUpdateRequest.FromString,
2017
2051
  response_serializer=modal__proto_dot_api__pb2.EnvironmentListItem.SerializeToString,
2018
2052
  ),
2053
+ 'FlashContainerDeregister': grpc.unary_unary_rpc_method_handler(
2054
+ servicer.FlashContainerDeregister,
2055
+ request_deserializer=modal__proto_dot_api__pb2.FlashContainerDeregisterRequest.FromString,
2056
+ response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
2057
+ ),
2058
+ 'FlashContainerList': grpc.unary_unary_rpc_method_handler(
2059
+ servicer.FlashContainerList,
2060
+ request_deserializer=modal__proto_dot_api__pb2.FlashContainerListRequest.FromString,
2061
+ response_serializer=modal__proto_dot_api__pb2.FlashContainerListResponse.SerializeToString,
2062
+ ),
2063
+ 'FlashContainerRegister': grpc.unary_unary_rpc_method_handler(
2064
+ servicer.FlashContainerRegister,
2065
+ request_deserializer=modal__proto_dot_api__pb2.FlashContainerRegisterRequest.FromString,
2066
+ response_serializer=modal__proto_dot_api__pb2.FlashContainerRegisterResponse.SerializeToString,
2067
+ ),
2019
2068
  'FunctionAsyncInvoke': grpc.unary_unary_rpc_method_handler(
2020
2069
  servicer.FunctionAsyncInvoke,
2021
2070
  request_deserializer=modal__proto_dot_api__pb2.FunctionAsyncInvokeRequest.FromString,
@@ -3463,6 +3512,57 @@ class ModalClient(object):
3463
3512
  options, channel_credentials,
3464
3513
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
3465
3514
 
3515
+ @staticmethod
3516
+ def FlashContainerDeregister(request,
3517
+ target,
3518
+ options=(),
3519
+ channel_credentials=None,
3520
+ call_credentials=None,
3521
+ insecure=False,
3522
+ compression=None,
3523
+ wait_for_ready=None,
3524
+ timeout=None,
3525
+ metadata=None):
3526
+ return grpc.experimental.unary_unary(request, target, '/modal.client.ModalClient/FlashContainerDeregister',
3527
+ modal__proto_dot_api__pb2.FlashContainerDeregisterRequest.SerializeToString,
3528
+ google_dot_protobuf_dot_empty__pb2.Empty.FromString,
3529
+ options, channel_credentials,
3530
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
3531
+
3532
+ @staticmethod
3533
+ def FlashContainerList(request,
3534
+ target,
3535
+ options=(),
3536
+ channel_credentials=None,
3537
+ call_credentials=None,
3538
+ insecure=False,
3539
+ compression=None,
3540
+ wait_for_ready=None,
3541
+ timeout=None,
3542
+ metadata=None):
3543
+ return grpc.experimental.unary_unary(request, target, '/modal.client.ModalClient/FlashContainerList',
3544
+ modal__proto_dot_api__pb2.FlashContainerListRequest.SerializeToString,
3545
+ modal__proto_dot_api__pb2.FlashContainerListResponse.FromString,
3546
+ options, channel_credentials,
3547
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
3548
+
3549
+ @staticmethod
3550
+ def FlashContainerRegister(request,
3551
+ target,
3552
+ options=(),
3553
+ channel_credentials=None,
3554
+ call_credentials=None,
3555
+ insecure=False,
3556
+ compression=None,
3557
+ wait_for_ready=None,
3558
+ timeout=None,
3559
+ metadata=None):
3560
+ return grpc.experimental.unary_unary(request, target, '/modal.client.ModalClient/FlashContainerRegister',
3561
+ modal__proto_dot_api__pb2.FlashContainerRegisterRequest.SerializeToString,
3562
+ modal__proto_dot_api__pb2.FlashContainerRegisterResponse.FromString,
3563
+ options, channel_credentials,
3564
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
3565
+
3466
3566
  @staticmethod
3467
3567
  def FunctionAsyncInvoke(request,
3468
3568
  target,
@@ -247,6 +247,19 @@ class ModalClientStub:
247
247
  modal_proto.api_pb2.EnvironmentUpdateRequest,
248
248
  modal_proto.api_pb2.EnvironmentListItem,
249
249
  ]
250
+ FlashContainerDeregister: grpc.UnaryUnaryMultiCallable[
251
+ modal_proto.api_pb2.FlashContainerDeregisterRequest,
252
+ google.protobuf.empty_pb2.Empty,
253
+ ]
254
+ """Modal Flash (experimental)"""
255
+ FlashContainerList: grpc.UnaryUnaryMultiCallable[
256
+ modal_proto.api_pb2.FlashContainerListRequest,
257
+ modal_proto.api_pb2.FlashContainerListResponse,
258
+ ]
259
+ FlashContainerRegister: grpc.UnaryUnaryMultiCallable[
260
+ modal_proto.api_pb2.FlashContainerRegisterRequest,
261
+ modal_proto.api_pb2.FlashContainerRegisterResponse,
262
+ ]
250
263
  FunctionAsyncInvoke: grpc.UnaryUnaryMultiCallable[
251
264
  modal_proto.api_pb2.FunctionAsyncInvokeRequest,
252
265
  modal_proto.api_pb2.FunctionAsyncInvokeResponse,
@@ -1005,6 +1018,25 @@ class ModalClientServicer(metaclass=abc.ABCMeta):
1005
1018
  context: grpc.ServicerContext,
1006
1019
  ) -> modal_proto.api_pb2.EnvironmentListItem: ...
1007
1020
  @abc.abstractmethod
1021
+ def FlashContainerDeregister(
1022
+ self,
1023
+ request: modal_proto.api_pb2.FlashContainerDeregisterRequest,
1024
+ context: grpc.ServicerContext,
1025
+ ) -> google.protobuf.empty_pb2.Empty:
1026
+ """Modal Flash (experimental)"""
1027
+ @abc.abstractmethod
1028
+ def FlashContainerList(
1029
+ self,
1030
+ request: modal_proto.api_pb2.FlashContainerListRequest,
1031
+ context: grpc.ServicerContext,
1032
+ ) -> modal_proto.api_pb2.FlashContainerListResponse: ...
1033
+ @abc.abstractmethod
1034
+ def FlashContainerRegister(
1035
+ self,
1036
+ request: modal_proto.api_pb2.FlashContainerRegisterRequest,
1037
+ context: grpc.ServicerContext,
1038
+ ) -> modal_proto.api_pb2.FlashContainerRegisterResponse: ...
1039
+ @abc.abstractmethod
1008
1040
  def FunctionAsyncInvoke(
1009
1041
  self,
1010
1042
  request: modal_proto.api_pb2.FunctionAsyncInvokeRequest,
@@ -74,6 +74,9 @@ class ModalClientModal:
74
74
  self.EnvironmentGetOrCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.EnvironmentGetOrCreate, client, server_url)
75
75
  self.EnvironmentList = modal.client.UnaryUnaryWrapper(grpclib_stub.EnvironmentList, client, server_url)
76
76
  self.EnvironmentUpdate = modal.client.UnaryUnaryWrapper(grpclib_stub.EnvironmentUpdate, client, server_url)
77
+ self.FlashContainerDeregister = modal.client.UnaryUnaryWrapper(grpclib_stub.FlashContainerDeregister, client, server_url)
78
+ self.FlashContainerList = modal.client.UnaryUnaryWrapper(grpclib_stub.FlashContainerList, client, server_url)
79
+ self.FlashContainerRegister = modal.client.UnaryUnaryWrapper(grpclib_stub.FlashContainerRegister, client, server_url)
77
80
  self.FunctionAsyncInvoke = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionAsyncInvoke, client, server_url)
78
81
  self.FunctionBindParams = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionBindParams, client, server_url)
79
82
  self.FunctionCallCancel = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionCallCancel, client, server_url)
modal_version/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # Copyright Modal Labs 2025
2
2
  """Supplies the current version of the modal client library."""
3
3
 
4
- __version__ = "1.0.4.dev10"
4
+ __version__ = "1.0.5"