modal 1.1.1.dev41__py3-none-any.whl → 1.1.2__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 (68) hide show
  1. modal/__main__.py +1 -2
  2. modal/_container_entrypoint.py +18 -7
  3. modal/_functions.py +135 -13
  4. modal/_object.py +13 -2
  5. modal/_partial_function.py +8 -8
  6. modal/_runtime/asgi.py +3 -2
  7. modal/_runtime/container_io_manager.py +20 -14
  8. modal/_runtime/container_io_manager.pyi +38 -13
  9. modal/_runtime/execution_context.py +18 -2
  10. modal/_runtime/execution_context.pyi +4 -1
  11. modal/_runtime/gpu_memory_snapshot.py +158 -54
  12. modal/_utils/blob_utils.py +83 -24
  13. modal/_utils/function_utils.py +4 -3
  14. modal/_utils/time_utils.py +28 -4
  15. modal/app.py +8 -4
  16. modal/app.pyi +8 -8
  17. modal/cli/dict.py +14 -11
  18. modal/cli/entry_point.py +9 -3
  19. modal/cli/launch.py +102 -4
  20. modal/cli/profile.py +1 -0
  21. modal/cli/programs/launch_instance_ssh.py +94 -0
  22. modal/cli/programs/run_marimo.py +95 -0
  23. modal/cli/queues.py +49 -19
  24. modal/cli/secret.py +45 -18
  25. modal/cli/volume.py +14 -16
  26. modal/client.pyi +2 -10
  27. modal/cls.py +12 -2
  28. modal/cls.pyi +9 -1
  29. modal/config.py +7 -7
  30. modal/dict.py +206 -12
  31. modal/dict.pyi +358 -4
  32. modal/experimental/__init__.py +130 -0
  33. modal/file_io.py +1 -1
  34. modal/file_io.pyi +2 -2
  35. modal/file_pattern_matcher.py +25 -16
  36. modal/functions.pyi +111 -11
  37. modal/image.py +9 -3
  38. modal/image.pyi +7 -7
  39. modal/mount.py +20 -13
  40. modal/mount.pyi +16 -3
  41. modal/network_file_system.py +8 -2
  42. modal/object.pyi +3 -0
  43. modal/parallel_map.py +346 -101
  44. modal/parallel_map.pyi +108 -0
  45. modal/proxy.py +2 -1
  46. modal/queue.py +199 -9
  47. modal/queue.pyi +357 -3
  48. modal/sandbox.py +6 -5
  49. modal/sandbox.pyi +17 -14
  50. modal/secret.py +196 -3
  51. modal/secret.pyi +372 -0
  52. modal/volume.py +239 -23
  53. modal/volume.pyi +405 -10
  54. {modal-1.1.1.dev41.dist-info → modal-1.1.2.dist-info}/METADATA +2 -2
  55. {modal-1.1.1.dev41.dist-info → modal-1.1.2.dist-info}/RECORD +68 -66
  56. modal_docs/mdmd/mdmd.py +11 -1
  57. modal_proto/api.proto +37 -10
  58. modal_proto/api_grpc.py +32 -0
  59. modal_proto/api_pb2.py +627 -597
  60. modal_proto/api_pb2.pyi +107 -19
  61. modal_proto/api_pb2_grpc.py +67 -2
  62. modal_proto/api_pb2_grpc.pyi +24 -8
  63. modal_proto/modal_api_grpc.py +2 -0
  64. modal_version/__init__.py +1 -1
  65. {modal-1.1.1.dev41.dist-info → modal-1.1.2.dist-info}/WHEEL +0 -0
  66. {modal-1.1.1.dev41.dist-info → modal-1.1.2.dist-info}/entry_points.txt +0 -0
  67. {modal-1.1.1.dev41.dist-info → modal-1.1.2.dist-info}/licenses/LICENSE +0 -0
  68. {modal-1.1.1.dev41.dist-info → modal-1.1.2.dist-info}/top_level.txt +0 -0
modal_proto/api_pb2.pyi CHANGED
@@ -3734,7 +3734,7 @@ class DictListResponse(google.protobuf.message.Message):
3734
3734
  METADATA_FIELD_NUMBER: builtins.int
3735
3735
  name: builtins.str
3736
3736
  created_at: builtins.float
3737
- """Superseded by metadata, used by clients up to 1.1.1"""
3737
+ """Superseded by metadata, used by clients up to 1.1.2"""
3738
3738
  dict_id: builtins.str
3739
3739
  @property
3740
3740
  def metadata(self) -> global___DictMetadata: ...
@@ -4805,25 +4805,58 @@ class FunctionCallCancelRequest(google.protobuf.message.Message):
4805
4805
 
4806
4806
  global___FunctionCallCancelRequest = FunctionCallCancelRequest
4807
4807
 
4808
+ class FunctionCallFromIdRequest(google.protobuf.message.Message):
4809
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
4810
+
4811
+ FUNCTION_CALL_ID_FIELD_NUMBER: builtins.int
4812
+ function_call_id: builtins.str
4813
+ def __init__(
4814
+ self,
4815
+ *,
4816
+ function_call_id: builtins.str = ...,
4817
+ ) -> None: ...
4818
+ def ClearField(self, field_name: typing_extensions.Literal["function_call_id", b"function_call_id"]) -> None: ...
4819
+
4820
+ global___FunctionCallFromIdRequest = FunctionCallFromIdRequest
4821
+
4822
+ class FunctionCallFromIdResponse(google.protobuf.message.Message):
4823
+ """Everything you need to build a FunctionCallHandler."""
4824
+
4825
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
4826
+
4827
+ FUNCTION_CALL_ID_FIELD_NUMBER: builtins.int
4828
+ NUM_INPUTS_FIELD_NUMBER: builtins.int
4829
+ function_call_id: builtins.str
4830
+ num_inputs: builtins.int
4831
+ def __init__(
4832
+ self,
4833
+ *,
4834
+ function_call_id: builtins.str = ...,
4835
+ num_inputs: builtins.int = ...,
4836
+ ) -> None: ...
4837
+ def ClearField(self, field_name: typing_extensions.Literal["function_call_id", b"function_call_id", "num_inputs", b"num_inputs"]) -> None: ...
4838
+
4839
+ global___FunctionCallFromIdResponse = FunctionCallFromIdResponse
4840
+
4808
4841
  class FunctionCallGetDataRequest(google.protobuf.message.Message):
4809
4842
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
4810
4843
 
4811
4844
  FUNCTION_CALL_ID_FIELD_NUMBER: builtins.int
4812
- LAST_INDEX_FIELD_NUMBER: builtins.int
4813
4845
  ATTEMPT_TOKEN_FIELD_NUMBER: builtins.int
4846
+ LAST_INDEX_FIELD_NUMBER: builtins.int
4814
4847
  function_call_id: builtins.str
4815
- last_index: builtins.int
4816
4848
  attempt_token: builtins.str
4849
+ last_index: builtins.int
4817
4850
  def __init__(
4818
4851
  self,
4819
4852
  *,
4820
4853
  function_call_id: builtins.str = ...,
4854
+ attempt_token: builtins.str = ...,
4821
4855
  last_index: builtins.int = ...,
4822
- attempt_token: builtins.str | None = ...,
4823
4856
  ) -> None: ...
4824
- def HasField(self, field_name: typing_extensions.Literal["_attempt_token", b"_attempt_token", "attempt_token", b"attempt_token"]) -> builtins.bool: ...
4825
- def ClearField(self, field_name: typing_extensions.Literal["_attempt_token", b"_attempt_token", "attempt_token", b"attempt_token", "function_call_id", b"function_call_id", "last_index", b"last_index"]) -> None: ...
4826
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_attempt_token", b"_attempt_token"]) -> typing_extensions.Literal["attempt_token"] | None: ...
4857
+ 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: ...
4858
+ 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: ...
4859
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["call_info", b"call_info"]) -> typing_extensions.Literal["function_call_id", "attempt_token"] | None: ...
4827
4860
 
4828
4861
  global___FunctionCallGetDataRequest = FunctionCallGetDataRequest
4829
4862
 
@@ -4909,17 +4942,22 @@ class FunctionCallPutDataRequest(google.protobuf.message.Message):
4909
4942
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
4910
4943
 
4911
4944
  FUNCTION_CALL_ID_FIELD_NUMBER: builtins.int
4945
+ ATTEMPT_TOKEN_FIELD_NUMBER: builtins.int
4912
4946
  DATA_CHUNKS_FIELD_NUMBER: builtins.int
4913
4947
  function_call_id: builtins.str
4948
+ attempt_token: builtins.str
4914
4949
  @property
4915
4950
  def data_chunks(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___DataChunk]: ...
4916
4951
  def __init__(
4917
4952
  self,
4918
4953
  *,
4919
4954
  function_call_id: builtins.str = ...,
4955
+ attempt_token: builtins.str = ...,
4920
4956
  data_chunks: collections.abc.Iterable[global___DataChunk] | None = ...,
4921
4957
  ) -> None: ...
4922
- def ClearField(self, field_name: typing_extensions.Literal["data_chunks", b"data_chunks", "function_call_id", b"function_call_id"]) -> None: ...
4958
+ 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: ...
4959
+ def ClearField(self, field_name: typing_extensions.Literal["attempt_token", b"attempt_token", "call_info", b"call_info", "data_chunks", b"data_chunks", "function_call_id", b"function_call_id"]) -> None: ...
4960
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["call_info", b"call_info"]) -> typing_extensions.Literal["function_call_id", "attempt_token"] | None: ...
4923
4961
 
4924
4962
  global___FunctionCallPutDataRequest = FunctionCallPutDataRequest
4925
4963
 
@@ -5211,6 +5249,26 @@ class FunctionExtended(google.protobuf.message.Message):
5211
5249
 
5212
5250
  global___FunctionExtended = FunctionExtended
5213
5251
 
5252
+ class FunctionFinishInputsRequest(google.protobuf.message.Message):
5253
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
5254
+
5255
+ FUNCTION_ID_FIELD_NUMBER: builtins.int
5256
+ FUNCTION_CALL_ID_FIELD_NUMBER: builtins.int
5257
+ NUM_INPUTS_FIELD_NUMBER: builtins.int
5258
+ function_id: builtins.str
5259
+ function_call_id: builtins.str
5260
+ num_inputs: builtins.int
5261
+ def __init__(
5262
+ self,
5263
+ *,
5264
+ function_id: builtins.str = ...,
5265
+ function_call_id: builtins.str = ...,
5266
+ num_inputs: builtins.int = ...,
5267
+ ) -> None: ...
5268
+ def ClearField(self, field_name: typing_extensions.Literal["function_call_id", b"function_call_id", "function_id", b"function_id", "num_inputs", b"num_inputs"]) -> None: ...
5269
+
5270
+ global___FunctionFinishInputsRequest = FunctionFinishInputsRequest
5271
+
5214
5272
  class FunctionGetCallGraphRequest(google.protobuf.message.Message):
5215
5273
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
5216
5274
 
@@ -5303,6 +5361,7 @@ class FunctionGetInputsItem(google.protobuf.message.Message):
5303
5361
  FUNCTION_CALL_INVOCATION_TYPE_FIELD_NUMBER: builtins.int
5304
5362
  RETRY_COUNT_FIELD_NUMBER: builtins.int
5305
5363
  FUNCTION_MAP_IDX_FIELD_NUMBER: builtins.int
5364
+ ATTEMPT_TOKEN_FIELD_NUMBER: builtins.int
5306
5365
  input_id: builtins.str
5307
5366
  @property
5308
5367
  def input(self) -> global___FunctionInput: ...
@@ -5312,6 +5371,7 @@ class FunctionGetInputsItem(google.protobuf.message.Message):
5312
5371
  retry_count: builtins.int
5313
5372
  function_map_idx: builtins.int
5314
5373
  """intercepted and only used by the worker."""
5374
+ attempt_token: builtins.str
5315
5375
  def __init__(
5316
5376
  self,
5317
5377
  *,
@@ -5322,9 +5382,10 @@ class FunctionGetInputsItem(google.protobuf.message.Message):
5322
5382
  function_call_invocation_type: global___FunctionCallInvocationType.ValueType = ...,
5323
5383
  retry_count: builtins.int = ...,
5324
5384
  function_map_idx: builtins.int | None = ...,
5385
+ attempt_token: builtins.str = ...,
5325
5386
  ) -> None: ...
5326
5387
  def HasField(self, field_name: typing_extensions.Literal["_function_map_idx", b"_function_map_idx", "function_map_idx", b"function_map_idx", "input", b"input"]) -> builtins.bool: ...
5327
- def ClearField(self, field_name: typing_extensions.Literal["_function_map_idx", b"_function_map_idx", "function_call_id", b"function_call_id", "function_call_invocation_type", b"function_call_invocation_type", "function_map_idx", b"function_map_idx", "input", b"input", "input_id", b"input_id", "kill_switch", b"kill_switch", "retry_count", b"retry_count"]) -> None: ...
5388
+ def ClearField(self, field_name: typing_extensions.Literal["_function_map_idx", b"_function_map_idx", "attempt_token", b"attempt_token", "function_call_id", b"function_call_id", "function_call_invocation_type", b"function_call_invocation_type", "function_map_idx", b"function_map_idx", "input", b"input", "input_id", b"input_id", "kill_switch", b"kill_switch", "retry_count", b"retry_count"]) -> None: ...
5328
5389
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_function_map_idx", b"_function_map_idx"]) -> typing_extensions.Literal["function_map_idx"] | None: ...
5329
5390
 
5330
5391
  global___FunctionGetInputsItem = FunctionGetInputsItem
@@ -5433,6 +5494,7 @@ class FunctionGetOutputsRequest(google.protobuf.message.Message):
5433
5494
  REQUESTED_AT_FIELD_NUMBER: builtins.int
5434
5495
  INPUT_JWTS_FIELD_NUMBER: builtins.int
5435
5496
  START_IDX_FIELD_NUMBER: builtins.int
5497
+ END_IDX_FIELD_NUMBER: builtins.int
5436
5498
  function_call_id: builtins.str
5437
5499
  max_values: builtins.int
5438
5500
  timeout: builtins.float
@@ -5446,6 +5508,8 @@ class FunctionGetOutputsRequest(google.protobuf.message.Message):
5446
5508
  """The jwts the client expects the server to be processing. This is optional and used for sync inputs only."""
5447
5509
  start_idx: builtins.int
5448
5510
  """for async batch requests. this indicates which index to start from."""
5511
+ end_idx: builtins.int
5512
+ """for async batch requests. this indicates which index to end at."""
5449
5513
  def __init__(
5450
5514
  self,
5451
5515
  *,
@@ -5457,9 +5521,13 @@ class FunctionGetOutputsRequest(google.protobuf.message.Message):
5457
5521
  requested_at: builtins.float = ...,
5458
5522
  input_jwts: collections.abc.Iterable[builtins.str] | None = ...,
5459
5523
  start_idx: builtins.int | None = ...,
5524
+ end_idx: builtins.int | None = ...,
5460
5525
  ) -> None: ...
5461
- def HasField(self, field_name: typing_extensions.Literal["_start_idx", b"_start_idx", "start_idx", b"start_idx"]) -> builtins.bool: ...
5462
- def ClearField(self, field_name: typing_extensions.Literal["_start_idx", b"_start_idx", "clear_on_success", b"clear_on_success", "function_call_id", b"function_call_id", "input_jwts", b"input_jwts", "last_entry_id", b"last_entry_id", "max_values", b"max_values", "requested_at", b"requested_at", "start_idx", b"start_idx", "timeout", b"timeout"]) -> None: ...
5526
+ def HasField(self, field_name: typing_extensions.Literal["_end_idx", b"_end_idx", "_start_idx", b"_start_idx", "end_idx", b"end_idx", "start_idx", b"start_idx"]) -> builtins.bool: ...
5527
+ def ClearField(self, field_name: typing_extensions.Literal["_end_idx", b"_end_idx", "_start_idx", b"_start_idx", "clear_on_success", b"clear_on_success", "end_idx", b"end_idx", "function_call_id", b"function_call_id", "input_jwts", b"input_jwts", "last_entry_id", b"last_entry_id", "max_values", b"max_values", "requested_at", b"requested_at", "start_idx", b"start_idx", "timeout", b"timeout"]) -> None: ...
5528
+ @typing.overload
5529
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_end_idx", b"_end_idx"]) -> typing_extensions.Literal["end_idx"] | None: ...
5530
+ @typing.overload
5463
5531
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_start_idx", b"_start_idx"]) -> typing_extensions.Literal["start_idx"] | None: ...
5464
5532
 
5465
5533
  global___FunctionGetOutputsRequest = FunctionGetOutputsRequest
@@ -5767,6 +5835,8 @@ class FunctionOptions(google.protobuf.message.Message):
5767
5835
  MAX_CONCURRENT_INPUTS_FIELD_NUMBER: builtins.int
5768
5836
  BATCH_MAX_SIZE_FIELD_NUMBER: builtins.int
5769
5837
  BATCH_LINGER_MS_FIELD_NUMBER: builtins.int
5838
+ SCHEDULER_PLACEMENT_FIELD_NUMBER: builtins.int
5839
+ CLOUD_PROVIDER_STR_FIELD_NUMBER: builtins.int
5770
5840
  @property
5771
5841
  def secret_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
5772
5842
  @property
@@ -5789,6 +5859,9 @@ class FunctionOptions(google.protobuf.message.Message):
5789
5859
  max_concurrent_inputs: builtins.int
5790
5860
  batch_max_size: builtins.int
5791
5861
  batch_linger_ms: builtins.int
5862
+ @property
5863
+ def scheduler_placement(self) -> global___SchedulerPlacement: ...
5864
+ cloud_provider_str: builtins.str
5792
5865
  def __init__(
5793
5866
  self,
5794
5867
  *,
@@ -5808,9 +5881,11 @@ class FunctionOptions(google.protobuf.message.Message):
5808
5881
  max_concurrent_inputs: builtins.int | None = ...,
5809
5882
  batch_max_size: builtins.int | None = ...,
5810
5883
  batch_linger_ms: builtins.int | None = ...,
5884
+ scheduler_placement: global___SchedulerPlacement | None = ...,
5885
+ cloud_provider_str: builtins.str | None = ...,
5811
5886
  ) -> None: ...
5812
- def HasField(self, field_name: typing_extensions.Literal["_batch_linger_ms", b"_batch_linger_ms", "_batch_max_size", b"_batch_max_size", "_buffer_containers", b"_buffer_containers", "_concurrency_limit", b"_concurrency_limit", "_max_concurrent_inputs", b"_max_concurrent_inputs", "_resources", b"_resources", "_retry_policy", b"_retry_policy", "_target_concurrent_inputs", b"_target_concurrent_inputs", "_task_idle_timeout_secs", b"_task_idle_timeout_secs", "_timeout_secs", b"_timeout_secs", "_warm_pool_size", b"_warm_pool_size", "batch_linger_ms", b"batch_linger_ms", "batch_max_size", b"batch_max_size", "buffer_containers", b"buffer_containers", "concurrency_limit", b"concurrency_limit", "max_concurrent_inputs", b"max_concurrent_inputs", "resources", b"resources", "retry_policy", b"retry_policy", "target_concurrent_inputs", b"target_concurrent_inputs", "task_idle_timeout_secs", b"task_idle_timeout_secs", "timeout_secs", b"timeout_secs", "warm_pool_size", b"warm_pool_size"]) -> builtins.bool: ...
5813
- def ClearField(self, field_name: typing_extensions.Literal["_batch_linger_ms", b"_batch_linger_ms", "_batch_max_size", b"_batch_max_size", "_buffer_containers", b"_buffer_containers", "_concurrency_limit", b"_concurrency_limit", "_max_concurrent_inputs", b"_max_concurrent_inputs", "_resources", b"_resources", "_retry_policy", b"_retry_policy", "_target_concurrent_inputs", b"_target_concurrent_inputs", "_task_idle_timeout_secs", b"_task_idle_timeout_secs", "_timeout_secs", b"_timeout_secs", "_warm_pool_size", b"_warm_pool_size", "batch_linger_ms", b"batch_linger_ms", "batch_max_size", b"batch_max_size", "buffer_containers", b"buffer_containers", "concurrency_limit", b"concurrency_limit", "max_concurrent_inputs", b"max_concurrent_inputs", "mount_ids", b"mount_ids", "replace_secret_ids", b"replace_secret_ids", "replace_volume_mounts", b"replace_volume_mounts", "resources", b"resources", "retry_policy", b"retry_policy", "secret_ids", b"secret_ids", "target_concurrent_inputs", b"target_concurrent_inputs", "task_idle_timeout_secs", b"task_idle_timeout_secs", "timeout_secs", b"timeout_secs", "volume_mounts", b"volume_mounts", "warm_pool_size", b"warm_pool_size"]) -> None: ...
5887
+ def HasField(self, field_name: typing_extensions.Literal["_batch_linger_ms", b"_batch_linger_ms", "_batch_max_size", b"_batch_max_size", "_buffer_containers", b"_buffer_containers", "_cloud_provider_str", b"_cloud_provider_str", "_concurrency_limit", b"_concurrency_limit", "_max_concurrent_inputs", b"_max_concurrent_inputs", "_resources", b"_resources", "_retry_policy", b"_retry_policy", "_scheduler_placement", b"_scheduler_placement", "_target_concurrent_inputs", b"_target_concurrent_inputs", "_task_idle_timeout_secs", b"_task_idle_timeout_secs", "_timeout_secs", b"_timeout_secs", "_warm_pool_size", b"_warm_pool_size", "batch_linger_ms", b"batch_linger_ms", "batch_max_size", b"batch_max_size", "buffer_containers", b"buffer_containers", "cloud_provider_str", b"cloud_provider_str", "concurrency_limit", b"concurrency_limit", "max_concurrent_inputs", b"max_concurrent_inputs", "resources", b"resources", "retry_policy", b"retry_policy", "scheduler_placement", b"scheduler_placement", "target_concurrent_inputs", b"target_concurrent_inputs", "task_idle_timeout_secs", b"task_idle_timeout_secs", "timeout_secs", b"timeout_secs", "warm_pool_size", b"warm_pool_size"]) -> builtins.bool: ...
5888
+ def ClearField(self, field_name: typing_extensions.Literal["_batch_linger_ms", b"_batch_linger_ms", "_batch_max_size", b"_batch_max_size", "_buffer_containers", b"_buffer_containers", "_cloud_provider_str", b"_cloud_provider_str", "_concurrency_limit", b"_concurrency_limit", "_max_concurrent_inputs", b"_max_concurrent_inputs", "_resources", b"_resources", "_retry_policy", b"_retry_policy", "_scheduler_placement", b"_scheduler_placement", "_target_concurrent_inputs", b"_target_concurrent_inputs", "_task_idle_timeout_secs", b"_task_idle_timeout_secs", "_timeout_secs", b"_timeout_secs", "_warm_pool_size", b"_warm_pool_size", "batch_linger_ms", b"batch_linger_ms", "batch_max_size", b"batch_max_size", "buffer_containers", b"buffer_containers", "cloud_provider_str", b"cloud_provider_str", "concurrency_limit", b"concurrency_limit", "max_concurrent_inputs", b"max_concurrent_inputs", "mount_ids", b"mount_ids", "replace_secret_ids", b"replace_secret_ids", "replace_volume_mounts", b"replace_volume_mounts", "resources", b"resources", "retry_policy", b"retry_policy", "scheduler_placement", b"scheduler_placement", "secret_ids", b"secret_ids", "target_concurrent_inputs", b"target_concurrent_inputs", "task_idle_timeout_secs", b"task_idle_timeout_secs", "timeout_secs", b"timeout_secs", "volume_mounts", b"volume_mounts", "warm_pool_size", b"warm_pool_size"]) -> None: ...
5814
5889
  @typing.overload
5815
5890
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_batch_linger_ms", b"_batch_linger_ms"]) -> typing_extensions.Literal["batch_linger_ms"] | None: ...
5816
5891
  @typing.overload
@@ -5818,6 +5893,8 @@ class FunctionOptions(google.protobuf.message.Message):
5818
5893
  @typing.overload
5819
5894
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_buffer_containers", b"_buffer_containers"]) -> typing_extensions.Literal["buffer_containers"] | None: ...
5820
5895
  @typing.overload
5896
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_cloud_provider_str", b"_cloud_provider_str"]) -> typing_extensions.Literal["cloud_provider_str"] | None: ...
5897
+ @typing.overload
5821
5898
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_concurrency_limit", b"_concurrency_limit"]) -> typing_extensions.Literal["concurrency_limit"] | None: ...
5822
5899
  @typing.overload
5823
5900
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_max_concurrent_inputs", b"_max_concurrent_inputs"]) -> typing_extensions.Literal["max_concurrent_inputs"] | None: ...
@@ -5826,6 +5903,8 @@ class FunctionOptions(google.protobuf.message.Message):
5826
5903
  @typing.overload
5827
5904
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_retry_policy", b"_retry_policy"]) -> typing_extensions.Literal["retry_policy"] | None: ...
5828
5905
  @typing.overload
5906
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_scheduler_placement", b"_scheduler_placement"]) -> typing_extensions.Literal["scheduler_placement"] | None: ...
5907
+ @typing.overload
5829
5908
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_target_concurrent_inputs", b"_target_concurrent_inputs"]) -> typing_extensions.Literal["target_concurrent_inputs"] | None: ...
5830
5909
  @typing.overload
5831
5910
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_task_idle_timeout_secs", b"_task_idle_timeout_secs"]) -> typing_extensions.Literal["task_idle_timeout_secs"] | None: ...
@@ -7983,7 +8062,7 @@ class QueueListResponse(google.protobuf.message.Message):
7983
8062
  METADATA_FIELD_NUMBER: builtins.int
7984
8063
  name: builtins.str
7985
8064
  created_at: builtins.float
7986
- """Superseded by metadata, used by clients up to 1.1.1"""
8065
+ """Superseded by metadata, used by clients up to 1.1.2"""
7987
8066
  num_partitions: builtins.int
7988
8067
  total_size: builtins.int
7989
8068
  queue_id: builtins.str
@@ -8305,6 +8384,7 @@ class Sandbox(google.protobuf.message.Message):
8305
8384
  VERBOSE_FIELD_NUMBER: builtins.int
8306
8385
  NAME_FIELD_NUMBER: builtins.int
8307
8386
  EXPERIMENTAL_OPTIONS_FIELD_NUMBER: builtins.int
8387
+ PRELOAD_PATH_PREFIXES_FIELD_NUMBER: builtins.int
8308
8388
  @property
8309
8389
  def entrypoint_args(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
8310
8390
  @property
@@ -8365,6 +8445,9 @@ class Sandbox(google.protobuf.message.Message):
8365
8445
  @property
8366
8446
  def experimental_options(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.bool]:
8367
8447
  """Experimental options"""
8448
+ @property
8449
+ def preload_path_prefixes(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
8450
+ """Internal use only."""
8368
8451
  def __init__(
8369
8452
  self,
8370
8453
  *,
@@ -8397,9 +8480,10 @@ class Sandbox(google.protobuf.message.Message):
8397
8480
  verbose: builtins.bool = ...,
8398
8481
  name: builtins.str | None = ...,
8399
8482
  experimental_options: collections.abc.Mapping[builtins.str, builtins.bool] | None = ...,
8483
+ preload_path_prefixes: collections.abc.Iterable[builtins.str] | None = ...,
8400
8484
  ) -> None: ...
8401
8485
  def HasField(self, field_name: typing_extensions.Literal["_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", "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: ...
8402
- def ClearField(self, field_name: typing_extensions.Literal["_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", "enable_snapshot", b"enable_snapshot", "entrypoint_args", b"entrypoint_args", "experimental_options", b"experimental_options", "i6pn_enabled", b"i6pn_enabled", "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", "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: ...
8486
+ def ClearField(self, field_name: typing_extensions.Literal["_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", "enable_snapshot", b"enable_snapshot", "entrypoint_args", b"entrypoint_args", "experimental_options", b"experimental_options", "i6pn_enabled", b"i6pn_enabled", "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: ...
8403
8487
  @typing.overload
8404
8488
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_name", b"_name"]) -> typing_extensions.Literal["name"] | None: ...
8405
8489
  @typing.overload
@@ -9343,7 +9427,7 @@ class SecretListItem(google.protobuf.message.Message):
9343
9427
  METADATA_FIELD_NUMBER: builtins.int
9344
9428
  label: builtins.str
9345
9429
  created_at: builtins.float
9346
- """Superseded by metadata, used by clients up to 1.1.1"""
9430
+ """Superseded by metadata, used by clients up to 1.1.2"""
9347
9431
  last_used_at: builtins.float
9348
9432
  environment_name: builtins.str
9349
9433
  """Unused by client"""
@@ -9788,6 +9872,7 @@ class TaskInfo(google.protobuf.message.Message):
9788
9872
  GPU_TYPE_FIELD_NUMBER: builtins.int
9789
9873
  SANDBOX_ID_FIELD_NUMBER: builtins.int
9790
9874
  SNAPSHOT_BEHAVIOR_FIELD_NUMBER: builtins.int
9875
+ GPU_CONFIG_FIELD_NUMBER: builtins.int
9791
9876
  id: builtins.str
9792
9877
  started_at: builtins.float
9793
9878
  finished_at: builtins.float
@@ -9797,6 +9882,8 @@ class TaskInfo(google.protobuf.message.Message):
9797
9882
  gpu_type: builtins.str
9798
9883
  sandbox_id: builtins.str
9799
9884
  snapshot_behavior: global___TaskSnapshotBehavior.ValueType
9885
+ @property
9886
+ def gpu_config(self) -> global___GPUConfig: ...
9800
9887
  def __init__(
9801
9888
  self,
9802
9889
  *,
@@ -9808,9 +9895,10 @@ class TaskInfo(google.protobuf.message.Message):
9808
9895
  gpu_type: builtins.str = ...,
9809
9896
  sandbox_id: builtins.str = ...,
9810
9897
  snapshot_behavior: global___TaskSnapshotBehavior.ValueType = ...,
9898
+ gpu_config: global___GPUConfig | None = ...,
9811
9899
  ) -> None: ...
9812
- def HasField(self, field_name: typing_extensions.Literal["result", b"result"]) -> builtins.bool: ...
9813
- 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", "snapshot_behavior", b"snapshot_behavior", "started_at", b"started_at"]) -> None: ...
9900
+ def HasField(self, field_name: typing_extensions.Literal["gpu_config", b"gpu_config", "result", b"result"]) -> builtins.bool: ...
9901
+ def ClearField(self, field_name: typing_extensions.Literal["enqueued_at", b"enqueued_at", "finished_at", b"finished_at", "gpu_config", b"gpu_config", "gpu_type", b"gpu_type", "id", b"id", "result", b"result", "sandbox_id", b"sandbox_id", "snapshot_behavior", b"snapshot_behavior", "started_at", b"started_at"]) -> None: ...
9814
9902
 
9815
9903
  global___TaskInfo = TaskInfo
9816
9904
 
@@ -10585,7 +10673,7 @@ class VolumeListItem(google.protobuf.message.Message):
10585
10673
  """app name of object entity app"""
10586
10674
  volume_id: builtins.str
10587
10675
  created_at: builtins.float
10588
- """Superseded by metadata, used by clients up to 1.1.1"""
10676
+ """Superseded by metadata, used by clients up to 1.1.2"""
10589
10677
  @property
10590
10678
  def metadata(self) -> global___VolumeMetadata: ...
10591
10679
  def __init__(
@@ -335,6 +335,11 @@ class ModalClientStub(object):
335
335
  request_serializer=modal__proto_dot_api__pb2.FunctionCallCancelRequest.SerializeToString,
336
336
  response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
337
337
  )
338
+ self.FunctionCallFromId = channel.unary_unary(
339
+ '/modal.client.ModalClient/FunctionCallFromId',
340
+ request_serializer=modal__proto_dot_api__pb2.FunctionCallFromIdRequest.SerializeToString,
341
+ response_deserializer=modal__proto_dot_api__pb2.FunctionCallFromIdResponse.FromString,
342
+ )
338
343
  self.FunctionCallGetDataIn = channel.unary_stream(
339
344
  '/modal.client.ModalClient/FunctionCallGetDataIn',
340
345
  request_serializer=modal__proto_dot_api__pb2.FunctionCallGetDataRequest.SerializeToString,
@@ -360,6 +365,11 @@ class ModalClientStub(object):
360
365
  request_serializer=modal__proto_dot_api__pb2.FunctionCreateRequest.SerializeToString,
361
366
  response_deserializer=modal__proto_dot_api__pb2.FunctionCreateResponse.FromString,
362
367
  )
368
+ self.FunctionFinishInputs = channel.unary_unary(
369
+ '/modal.client.ModalClient/FunctionFinishInputs',
370
+ request_serializer=modal__proto_dot_api__pb2.FunctionFinishInputsRequest.SerializeToString,
371
+ response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
372
+ )
363
373
  self.FunctionGet = channel.unary_unary(
364
374
  '/modal.client.ModalClient/FunctionGet',
365
375
  request_serializer=modal__proto_dot_api__pb2.FunctionGetRequest.SerializeToString,
@@ -939,8 +949,6 @@ class ModalClientServicer(object):
939
949
 
940
950
  def AttemptAwait(self, request, context):
941
951
  """Input Plane
942
- These RPCs are experimental, not deployed to production, and can be changed / removed
943
- without needing to worry about backwards compatibility.
944
952
  """
945
953
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
946
954
  context.set_details('Method not implemented!')
@@ -1239,6 +1247,12 @@ class ModalClientServicer(object):
1239
1247
  context.set_details('Method not implemented!')
1240
1248
  raise NotImplementedError('Method not implemented!')
1241
1249
 
1250
+ def FunctionCallFromId(self, request, context):
1251
+ """Missing associated documentation comment in .proto file."""
1252
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
1253
+ context.set_details('Method not implemented!')
1254
+ raise NotImplementedError('Method not implemented!')
1255
+
1242
1256
  def FunctionCallGetDataIn(self, request, context):
1243
1257
  """Missing associated documentation comment in .proto file."""
1244
1258
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
@@ -1269,6 +1283,13 @@ class ModalClientServicer(object):
1269
1283
  context.set_details('Method not implemented!')
1270
1284
  raise NotImplementedError('Method not implemented!')
1271
1285
 
1286
+ def FunctionFinishInputs(self, request, context):
1287
+ """For map RPCs, to signal that all inputs have been sent
1288
+ """
1289
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
1290
+ context.set_details('Method not implemented!')
1291
+ raise NotImplementedError('Method not implemented!')
1292
+
1272
1293
  def FunctionGet(self, request, context):
1273
1294
  """Missing associated documentation comment in .proto file."""
1274
1295
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
@@ -2180,6 +2201,11 @@ def add_ModalClientServicer_to_server(servicer, server):
2180
2201
  request_deserializer=modal__proto_dot_api__pb2.FunctionCallCancelRequest.FromString,
2181
2202
  response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
2182
2203
  ),
2204
+ 'FunctionCallFromId': grpc.unary_unary_rpc_method_handler(
2205
+ servicer.FunctionCallFromId,
2206
+ request_deserializer=modal__proto_dot_api__pb2.FunctionCallFromIdRequest.FromString,
2207
+ response_serializer=modal__proto_dot_api__pb2.FunctionCallFromIdResponse.SerializeToString,
2208
+ ),
2183
2209
  'FunctionCallGetDataIn': grpc.unary_stream_rpc_method_handler(
2184
2210
  servicer.FunctionCallGetDataIn,
2185
2211
  request_deserializer=modal__proto_dot_api__pb2.FunctionCallGetDataRequest.FromString,
@@ -2205,6 +2231,11 @@ def add_ModalClientServicer_to_server(servicer, server):
2205
2231
  request_deserializer=modal__proto_dot_api__pb2.FunctionCreateRequest.FromString,
2206
2232
  response_serializer=modal__proto_dot_api__pb2.FunctionCreateResponse.SerializeToString,
2207
2233
  ),
2234
+ 'FunctionFinishInputs': grpc.unary_unary_rpc_method_handler(
2235
+ servicer.FunctionFinishInputs,
2236
+ request_deserializer=modal__proto_dot_api__pb2.FunctionFinishInputsRequest.FromString,
2237
+ response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
2238
+ ),
2208
2239
  'FunctionGet': grpc.unary_unary_rpc_method_handler(
2209
2240
  servicer.FunctionGet,
2210
2241
  request_deserializer=modal__proto_dot_api__pb2.FunctionGetRequest.FromString,
@@ -3778,6 +3809,23 @@ class ModalClient(object):
3778
3809
  options, channel_credentials,
3779
3810
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
3780
3811
 
3812
+ @staticmethod
3813
+ def FunctionCallFromId(request,
3814
+ target,
3815
+ options=(),
3816
+ channel_credentials=None,
3817
+ call_credentials=None,
3818
+ insecure=False,
3819
+ compression=None,
3820
+ wait_for_ready=None,
3821
+ timeout=None,
3822
+ metadata=None):
3823
+ return grpc.experimental.unary_unary(request, target, '/modal.client.ModalClient/FunctionCallFromId',
3824
+ modal__proto_dot_api__pb2.FunctionCallFromIdRequest.SerializeToString,
3825
+ modal__proto_dot_api__pb2.FunctionCallFromIdResponse.FromString,
3826
+ options, channel_credentials,
3827
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
3828
+
3781
3829
  @staticmethod
3782
3830
  def FunctionCallGetDataIn(request,
3783
3831
  target,
@@ -3863,6 +3911,23 @@ class ModalClient(object):
3863
3911
  options, channel_credentials,
3864
3912
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
3865
3913
 
3914
+ @staticmethod
3915
+ def FunctionFinishInputs(request,
3916
+ target,
3917
+ options=(),
3918
+ channel_credentials=None,
3919
+ call_credentials=None,
3920
+ insecure=False,
3921
+ compression=None,
3922
+ wait_for_ready=None,
3923
+ timeout=None,
3924
+ metadata=None):
3925
+ return grpc.experimental.unary_unary(request, target, '/modal.client.ModalClient/FunctionFinishInputs',
3926
+ modal__proto_dot_api__pb2.FunctionFinishInputsRequest.SerializeToString,
3927
+ google_dot_protobuf_dot_empty__pb2.Empty.FromString,
3928
+ options, channel_credentials,
3929
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
3930
+
3866
3931
  @staticmethod
3867
3932
  def FunctionGet(request,
3868
3933
  target,
@@ -79,10 +79,7 @@ class ModalClientStub:
79
79
  modal_proto.api_pb2.AttemptAwaitRequest,
80
80
  modal_proto.api_pb2.AttemptAwaitResponse,
81
81
  ]
82
- """Input Plane
83
- These RPCs are experimental, not deployed to production, and can be changed / removed
84
- without needing to worry about backwards compatibility.
85
- """
82
+ """Input Plane"""
86
83
  AttemptRetry: grpc.UnaryUnaryMultiCallable[
87
84
  modal_proto.api_pb2.AttemptRetryRequest,
88
85
  modal_proto.api_pb2.AttemptRetryResponse,
@@ -282,6 +279,10 @@ class ModalClientStub:
282
279
  modal_proto.api_pb2.FunctionCallCancelRequest,
283
280
  google.protobuf.empty_pb2.Empty,
284
281
  ]
282
+ FunctionCallFromId: grpc.UnaryUnaryMultiCallable[
283
+ modal_proto.api_pb2.FunctionCallFromIdRequest,
284
+ modal_proto.api_pb2.FunctionCallFromIdResponse,
285
+ ]
285
286
  FunctionCallGetDataIn: grpc.UnaryStreamMultiCallable[
286
287
  modal_proto.api_pb2.FunctionCallGetDataRequest,
287
288
  modal_proto.api_pb2.DataChunk,
@@ -302,6 +303,11 @@ class ModalClientStub:
302
303
  modal_proto.api_pb2.FunctionCreateRequest,
303
304
  modal_proto.api_pb2.FunctionCreateResponse,
304
305
  ]
306
+ FunctionFinishInputs: grpc.UnaryUnaryMultiCallable[
307
+ modal_proto.api_pb2.FunctionFinishInputsRequest,
308
+ google.protobuf.empty_pb2.Empty,
309
+ ]
310
+ """For map RPCs, to signal that all inputs have been sent"""
305
311
  FunctionGet: grpc.UnaryUnaryMultiCallable[
306
312
  modal_proto.api_pb2.FunctionGetRequest,
307
313
  modal_proto.api_pb2.FunctionGetResponse,
@@ -805,10 +811,7 @@ class ModalClientServicer(metaclass=abc.ABCMeta):
805
811
  request: modal_proto.api_pb2.AttemptAwaitRequest,
806
812
  context: grpc.ServicerContext,
807
813
  ) -> modal_proto.api_pb2.AttemptAwaitResponse:
808
- """Input Plane
809
- These RPCs are experimental, not deployed to production, and can be changed / removed
810
- without needing to worry about backwards compatibility.
811
- """
814
+ """Input Plane"""
812
815
  @abc.abstractmethod
813
816
  def AttemptRetry(
814
817
  self,
@@ -1103,6 +1106,12 @@ class ModalClientServicer(metaclass=abc.ABCMeta):
1103
1106
  context: grpc.ServicerContext,
1104
1107
  ) -> google.protobuf.empty_pb2.Empty: ...
1105
1108
  @abc.abstractmethod
1109
+ def FunctionCallFromId(
1110
+ self,
1111
+ request: modal_proto.api_pb2.FunctionCallFromIdRequest,
1112
+ context: grpc.ServicerContext,
1113
+ ) -> modal_proto.api_pb2.FunctionCallFromIdResponse: ...
1114
+ @abc.abstractmethod
1106
1115
  def FunctionCallGetDataIn(
1107
1116
  self,
1108
1117
  request: modal_proto.api_pb2.FunctionCallGetDataRequest,
@@ -1133,6 +1142,13 @@ class ModalClientServicer(metaclass=abc.ABCMeta):
1133
1142
  context: grpc.ServicerContext,
1134
1143
  ) -> modal_proto.api_pb2.FunctionCreateResponse: ...
1135
1144
  @abc.abstractmethod
1145
+ def FunctionFinishInputs(
1146
+ self,
1147
+ request: modal_proto.api_pb2.FunctionFinishInputsRequest,
1148
+ context: grpc.ServicerContext,
1149
+ ) -> google.protobuf.empty_pb2.Empty:
1150
+ """For map RPCs, to signal that all inputs have been sent"""
1151
+ @abc.abstractmethod
1136
1152
  def FunctionGet(
1137
1153
  self,
1138
1154
  request: modal_proto.api_pb2.FunctionGetRequest,
@@ -82,11 +82,13 @@ class ModalClientModal:
82
82
  self.FunctionAsyncInvoke = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionAsyncInvoke, client, server_url)
83
83
  self.FunctionBindParams = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionBindParams, client, server_url)
84
84
  self.FunctionCallCancel = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionCallCancel, client, server_url)
85
+ self.FunctionCallFromId = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionCallFromId, client, server_url)
85
86
  self.FunctionCallGetDataIn = modal.client.UnaryStreamWrapper(grpclib_stub.FunctionCallGetDataIn, client, server_url)
86
87
  self.FunctionCallGetDataOut = modal.client.UnaryStreamWrapper(grpclib_stub.FunctionCallGetDataOut, client, server_url)
87
88
  self.FunctionCallList = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionCallList, client, server_url)
88
89
  self.FunctionCallPutDataOut = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionCallPutDataOut, client, server_url)
89
90
  self.FunctionCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionCreate, client, server_url)
91
+ self.FunctionFinishInputs = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionFinishInputs, client, server_url)
90
92
  self.FunctionGet = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionGet, client, server_url)
91
93
  self.FunctionGetCallGraph = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionGetCallGraph, client, server_url)
92
94
  self.FunctionGetCurrentStats = modal.client.UnaryUnaryWrapper(grpclib_stub.FunctionGetCurrentStats, 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.1.1.dev41"
4
+ __version__ = "1.1.2"