modal 0.75.4__py3-none-any.whl → 0.75.6__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.

modal_proto/api_pb2.pyi CHANGED
@@ -1850,6 +1850,45 @@ class AttemptAwaitResponse(google.protobuf.message.Message):
1850
1850
 
1851
1851
  global___AttemptAwaitResponse = AttemptAwaitResponse
1852
1852
 
1853
+ class AttemptRetryRequest(google.protobuf.message.Message):
1854
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1855
+
1856
+ FUNCTION_ID_FIELD_NUMBER: builtins.int
1857
+ PARENT_INPUT_ID_FIELD_NUMBER: builtins.int
1858
+ INPUT_FIELD_NUMBER: builtins.int
1859
+ ATTEMPT_TOKEN_FIELD_NUMBER: builtins.int
1860
+ function_id: builtins.str
1861
+ parent_input_id: builtins.str
1862
+ @property
1863
+ def input(self) -> global___FunctionPutInputsItem: ...
1864
+ attempt_token: builtins.str
1865
+ def __init__(
1866
+ self,
1867
+ *,
1868
+ function_id: builtins.str = ...,
1869
+ parent_input_id: builtins.str = ...,
1870
+ input: global___FunctionPutInputsItem | None = ...,
1871
+ attempt_token: builtins.str = ...,
1872
+ ) -> None: ...
1873
+ def HasField(self, field_name: typing_extensions.Literal["input", b"input"]) -> builtins.bool: ...
1874
+ def ClearField(self, field_name: typing_extensions.Literal["attempt_token", b"attempt_token", "function_id", b"function_id", "input", b"input", "parent_input_id", b"parent_input_id"]) -> None: ...
1875
+
1876
+ global___AttemptRetryRequest = AttemptRetryRequest
1877
+
1878
+ class AttemptRetryResponse(google.protobuf.message.Message):
1879
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1880
+
1881
+ ATTEMPT_TOKEN_FIELD_NUMBER: builtins.int
1882
+ attempt_token: builtins.str
1883
+ def __init__(
1884
+ self,
1885
+ *,
1886
+ attempt_token: builtins.str = ...,
1887
+ ) -> None: ...
1888
+ def ClearField(self, field_name: typing_extensions.Literal["attempt_token", b"attempt_token"]) -> None: ...
1889
+
1890
+ global___AttemptRetryResponse = AttemptRetryResponse
1891
+
1853
1892
  class AttemptStartRequest(google.protobuf.message.Message):
1854
1893
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
1855
1894
 
@@ -5400,6 +5439,10 @@ class FunctionOptions(google.protobuf.message.Message):
5400
5439
  TARGET_CONCURRENT_INPUTS_FIELD_NUMBER: builtins.int
5401
5440
  REPLACE_VOLUME_MOUNTS_FIELD_NUMBER: builtins.int
5402
5441
  REPLACE_SECRET_IDS_FIELD_NUMBER: builtins.int
5442
+ BUFFER_CONTAINERS_FIELD_NUMBER: builtins.int
5443
+ MAX_CONCURRENT_INPUTS_FIELD_NUMBER: builtins.int
5444
+ BATCH_MAX_SIZE_FIELD_NUMBER: builtins.int
5445
+ BATCH_LINGER_MS_FIELD_NUMBER: builtins.int
5403
5446
  @property
5404
5447
  def secret_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
5405
5448
  @property
@@ -5418,6 +5461,10 @@ class FunctionOptions(google.protobuf.message.Message):
5418
5461
  target_concurrent_inputs: builtins.int
5419
5462
  replace_volume_mounts: builtins.bool
5420
5463
  replace_secret_ids: builtins.bool
5464
+ buffer_containers: builtins.int
5465
+ max_concurrent_inputs: builtins.int
5466
+ batch_max_size: builtins.int
5467
+ batch_linger_ms: builtins.int
5421
5468
  def __init__(
5422
5469
  self,
5423
5470
  *,
@@ -5433,12 +5480,24 @@ class FunctionOptions(google.protobuf.message.Message):
5433
5480
  target_concurrent_inputs: builtins.int | None = ...,
5434
5481
  replace_volume_mounts: builtins.bool = ...,
5435
5482
  replace_secret_ids: builtins.bool = ...,
5483
+ buffer_containers: builtins.int | None = ...,
5484
+ max_concurrent_inputs: builtins.int | None = ...,
5485
+ batch_max_size: builtins.int | None = ...,
5486
+ batch_linger_ms: builtins.int | None = ...,
5436
5487
  ) -> None: ...
5437
- def HasField(self, field_name: typing_extensions.Literal["_concurrency_limit", b"_concurrency_limit", "_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", "concurrency_limit", b"concurrency_limit", "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: ...
5438
- def ClearField(self, field_name: typing_extensions.Literal["_concurrency_limit", b"_concurrency_limit", "_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", "concurrency_limit", b"concurrency_limit", "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: ...
5488
+ 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: ...
5489
+ 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: ...
5490
+ @typing.overload
5491
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_batch_linger_ms", b"_batch_linger_ms"]) -> typing_extensions.Literal["batch_linger_ms"] | None: ...
5492
+ @typing.overload
5493
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_batch_max_size", b"_batch_max_size"]) -> typing_extensions.Literal["batch_max_size"] | None: ...
5494
+ @typing.overload
5495
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_buffer_containers", b"_buffer_containers"]) -> typing_extensions.Literal["buffer_containers"] | None: ...
5439
5496
  @typing.overload
5440
5497
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_concurrency_limit", b"_concurrency_limit"]) -> typing_extensions.Literal["concurrency_limit"] | None: ...
5441
5498
  @typing.overload
5499
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_max_concurrent_inputs", b"_max_concurrent_inputs"]) -> typing_extensions.Literal["max_concurrent_inputs"] | None: ...
5500
+ @typing.overload
5442
5501
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_resources", b"_resources"]) -> typing_extensions.Literal["resources"] | None: ...
5443
5502
  @typing.overload
5444
5503
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_retry_policy", b"_retry_policy"]) -> typing_extensions.Literal["retry_policy"] | None: ...
@@ -100,6 +100,11 @@ class ModalClientStub(object):
100
100
  request_serializer=modal__proto_dot_api__pb2.AttemptAwaitRequest.SerializeToString,
101
101
  response_deserializer=modal__proto_dot_api__pb2.AttemptAwaitResponse.FromString,
102
102
  )
103
+ self.AttemptRetry = channel.unary_unary(
104
+ '/modal.client.ModalClient/AttemptRetry',
105
+ request_serializer=modal__proto_dot_api__pb2.AttemptRetryRequest.SerializeToString,
106
+ response_deserializer=modal__proto_dot_api__pb2.AttemptRetryResponse.FromString,
107
+ )
103
108
  self.AttemptStart = channel.unary_unary(
104
109
  '/modal.client.ModalClient/AttemptStart',
105
110
  request_serializer=modal__proto_dot_api__pb2.AttemptStartRequest.SerializeToString,
@@ -871,6 +876,12 @@ class ModalClientServicer(object):
871
876
  context.set_details('Method not implemented!')
872
877
  raise NotImplementedError('Method not implemented!')
873
878
 
879
+ def AttemptRetry(self, request, context):
880
+ """Missing associated documentation comment in .proto file."""
881
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
882
+ context.set_details('Method not implemented!')
883
+ raise NotImplementedError('Method not implemented!')
884
+
874
885
  def AttemptStart(self, request, context):
875
886
  """Missing associated documentation comment in .proto file."""
876
887
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
@@ -1777,6 +1788,11 @@ def add_ModalClientServicer_to_server(servicer, server):
1777
1788
  request_deserializer=modal__proto_dot_api__pb2.AttemptAwaitRequest.FromString,
1778
1789
  response_serializer=modal__proto_dot_api__pb2.AttemptAwaitResponse.SerializeToString,
1779
1790
  ),
1791
+ 'AttemptRetry': grpc.unary_unary_rpc_method_handler(
1792
+ servicer.AttemptRetry,
1793
+ request_deserializer=modal__proto_dot_api__pb2.AttemptRetryRequest.FromString,
1794
+ response_serializer=modal__proto_dot_api__pb2.AttemptRetryResponse.SerializeToString,
1795
+ ),
1780
1796
  'AttemptStart': grpc.unary_unary_rpc_method_handler(
1781
1797
  servicer.AttemptStart,
1782
1798
  request_deserializer=modal__proto_dot_api__pb2.AttemptStartRequest.FromString,
@@ -2736,6 +2752,23 @@ class ModalClient(object):
2736
2752
  options, channel_credentials,
2737
2753
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
2738
2754
 
2755
+ @staticmethod
2756
+ def AttemptRetry(request,
2757
+ target,
2758
+ options=(),
2759
+ channel_credentials=None,
2760
+ call_credentials=None,
2761
+ insecure=False,
2762
+ compression=None,
2763
+ wait_for_ready=None,
2764
+ timeout=None,
2765
+ metadata=None):
2766
+ return grpc.experimental.unary_unary(request, target, '/modal.client.ModalClient/AttemptRetry',
2767
+ modal__proto_dot_api__pb2.AttemptRetryRequest.SerializeToString,
2768
+ modal__proto_dot_api__pb2.AttemptRetryResponse.FromString,
2769
+ options, channel_credentials,
2770
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
2771
+
2739
2772
  @staticmethod
2740
2773
  def AttemptStart(request,
2741
2774
  target,
@@ -83,6 +83,10 @@ class ModalClientStub:
83
83
  These RPCs are experimental, not deployed to production, and can be changed / removed
84
84
  without needing to worry about backwards compatibility.
85
85
  """
86
+ AttemptRetry: grpc.UnaryUnaryMultiCallable[
87
+ modal_proto.api_pb2.AttemptRetryRequest,
88
+ modal_proto.api_pb2.AttemptRetryResponse,
89
+ ]
86
90
  AttemptStart: grpc.UnaryUnaryMultiCallable[
87
91
  modal_proto.api_pb2.AttemptStartRequest,
88
92
  modal_proto.api_pb2.AttemptStartResponse,
@@ -747,6 +751,12 @@ class ModalClientServicer(metaclass=abc.ABCMeta):
747
751
  without needing to worry about backwards compatibility.
748
752
  """
749
753
  @abc.abstractmethod
754
+ def AttemptRetry(
755
+ self,
756
+ request: modal_proto.api_pb2.AttemptRetryRequest,
757
+ context: grpc.ServicerContext,
758
+ ) -> modal_proto.api_pb2.AttemptRetryResponse: ...
759
+ @abc.abstractmethod
750
760
  def AttemptStart(
751
761
  self,
752
762
  request: modal_proto.api_pb2.AttemptStartRequest,
@@ -35,6 +35,7 @@ class ModalClientModal:
35
35
  self.AppSetObjects = modal.client.UnaryUnaryWrapper(grpclib_stub.AppSetObjects, client, server_url)
36
36
  self.AppStop = modal.client.UnaryUnaryWrapper(grpclib_stub.AppStop, client, server_url)
37
37
  self.AttemptAwait = modal.client.UnaryUnaryWrapper(grpclib_stub.AttemptAwait, client, server_url)
38
+ self.AttemptRetry = modal.client.UnaryUnaryWrapper(grpclib_stub.AttemptRetry, client, server_url)
38
39
  self.AttemptStart = modal.client.UnaryUnaryWrapper(grpclib_stub.AttemptStart, client, server_url)
39
40
  self.BlobCreate = modal.client.UnaryUnaryWrapper(grpclib_stub.BlobCreate, client, server_url)
40
41
  self.BlobGet = modal.client.UnaryUnaryWrapper(grpclib_stub.BlobGet, client, server_url)
@@ -1,4 +1,4 @@
1
1
  # Copyright Modal Labs 2025
2
2
 
3
3
  # Note: Reset this value to -1 whenever you make a minor `0.X` release of the client.
4
- build_number = 4 # git: 344590c
4
+ build_number = 6 # git: 79586f7
File without changes