modal 1.0.6.dev9__py3-none-any.whl → 1.0.6.dev11__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/_functions.py CHANGED
@@ -40,6 +40,7 @@ from ._utils.async_utils import (
40
40
  synchronizer,
41
41
  warn_if_generator_is_not_consumed,
42
42
  )
43
+ from ._utils.blob_utils import MAX_OBJECT_SIZE_BYTES
43
44
  from ._utils.deprecation import deprecation_warning, warn_if_passing_namespace
44
45
  from ._utils.function_utils import (
45
46
  ATTEMPT_TIMEOUT_GRACE_PERIOD,
@@ -145,6 +146,7 @@ class _Invocation:
145
146
  args,
146
147
  kwargs,
147
148
  stub,
149
+ max_object_size_bytes=function._max_object_size_bytes,
148
150
  method_name=function._use_method_name,
149
151
  function_call_invocation_type=function_call_invocation_type,
150
152
  )
@@ -386,7 +388,13 @@ class _InputPlaneInvocation:
386
388
  function_id = function.object_id
387
389
  control_plane_stub = client.stub
388
390
  # Note: Blob upload is done on the control plane stub, not the input plane stub!
389
- input_item = await _create_input(args, kwargs, control_plane_stub, method_name=function._use_method_name)
391
+ input_item = await _create_input(
392
+ args,
393
+ kwargs,
394
+ control_plane_stub,
395
+ max_object_size_bytes=function._max_object_size_bytes,
396
+ method_name=function._use_method_name,
397
+ )
390
398
 
391
399
  request = api_pb2.AttemptStartRequest(
392
400
  function_id=function_id,
@@ -1414,6 +1422,15 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
1414
1422
  self._definition_id = metadata.definition_id
1415
1423
  self._input_plane_url = metadata.input_plane_url
1416
1424
  self._input_plane_region = metadata.input_plane_region
1425
+ # The server may pass back a larger max object size for some input plane users. This applies to input plane
1426
+ # users only - anyone using the control plane will get the standard limit.
1427
+ # There are some cases like FunctionPrecreate where this value is not set at all. We expect that this field
1428
+ # will eventually be hydrated with the correct value, but just to be defensive, if the field is not set we use
1429
+ # MAX_OBJECT_SIZE_BYTES, otherwise it would get set to 0. Accidentally using 0 would cause us to blob upload
1430
+ # everything, so let's avoid that.
1431
+ self._max_object_size_bytes = (
1432
+ metadata.max_object_size_bytes if metadata.HasField("max_object_size_bytes") else MAX_OBJECT_SIZE_BYTES
1433
+ )
1417
1434
 
1418
1435
  def _get_metadata(self):
1419
1436
  # Overridden concrete implementation of base class method
@@ -1430,6 +1447,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
1430
1447
  function_schema=self._metadata.function_schema if self._metadata else None,
1431
1448
  input_plane_url=self._input_plane_url,
1432
1449
  input_plane_region=self._input_plane_region,
1450
+ max_object_size_bytes=self._max_object_size_bytes,
1433
1451
  )
1434
1452
 
1435
1453
  def _check_no_web_url(self, fn_name: str):
@@ -34,7 +34,6 @@ from ..exception import (
34
34
  from ..mount import ROOT_DIR, _is_modal_path, _Mount
35
35
  from .blob_utils import (
36
36
  MAX_ASYNC_OBJECT_SIZE_BYTES,
37
- MAX_OBJECT_SIZE_BYTES,
38
37
  blob_download,
39
38
  blob_upload_with_r2_failure_info,
40
39
  )
@@ -518,12 +517,13 @@ async def _process_result(result: api_pb2.GenericResult, data_format: int, stub,
518
517
 
519
518
  def should_upload(
520
519
  num_bytes: int,
520
+ max_object_size_bytes: int,
521
521
  function_call_invocation_type: Optional["api_pb2.FunctionCallInvocationType.ValueType"],
522
522
  ) -> bool:
523
523
  """
524
524
  Determine if the input should be uploaded to blob storage.
525
525
  """
526
- return num_bytes > MAX_OBJECT_SIZE_BYTES or (
526
+ return num_bytes > max_object_size_bytes or (
527
527
  function_call_invocation_type == api_pb2.FUNCTION_CALL_INVOCATION_TYPE_ASYNC
528
528
  and num_bytes > MAX_ASYNC_OBJECT_SIZE_BYTES
529
529
  )
@@ -534,6 +534,7 @@ async def _create_input(
534
534
  kwargs,
535
535
  stub: ModalClientModal,
536
536
  *,
537
+ max_object_size_bytes: int,
537
538
  idx: Optional[int] = None,
538
539
  method_name: Optional[str] = None,
539
540
  function_call_invocation_type: Optional["api_pb2.FunctionCallInvocationType.ValueType"] = None,
@@ -548,7 +549,7 @@ async def _create_input(
548
549
 
549
550
  args_serialized = serialize((args, kwargs))
550
551
 
551
- if should_upload(len(args_serialized), function_call_invocation_type):
552
+ if should_upload(len(args_serialized), max_object_size_bytes, function_call_invocation_type):
552
553
  args_blob_id, r2_failed, r2_latency_ms = await blob_upload_with_r2_failure_info(args_serialized, stub)
553
554
  return api_pb2.FunctionPutInputsItem(
554
555
  input=api_pb2.FunctionInput(
modal/client.pyi CHANGED
@@ -31,7 +31,7 @@ class _Client:
31
31
  server_url: str,
32
32
  client_type: int,
33
33
  credentials: typing.Optional[tuple[str, str]],
34
- version: str = "1.0.6.dev9",
34
+ version: str = "1.0.6.dev11",
35
35
  ):
36
36
  """mdmd:hidden
37
37
  The Modal client object is not intended to be instantiated directly by users.
@@ -160,7 +160,7 @@ class Client:
160
160
  server_url: str,
161
161
  client_type: int,
162
162
  credentials: typing.Optional[tuple[str, str]],
163
- version: str = "1.0.6.dev9",
163
+ version: str = "1.0.6.dev11",
164
164
  ):
165
165
  """mdmd:hidden
166
166
  The Modal client object is not intended to be instantiated directly by users.
modal/functions.pyi CHANGED
@@ -428,7 +428,7 @@ class Function(
428
428
 
429
429
  _call_generator: ___call_generator_spec[typing_extensions.Self]
430
430
 
431
- class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
431
+ class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
432
432
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
433
433
  """Calls the function remotely, executing it with the given arguments and returning the execution's result."""
434
434
  ...
@@ -437,7 +437,7 @@ class Function(
437
437
  """Calls the function remotely, executing it with the given arguments and returning the execution's result."""
438
438
  ...
439
439
 
440
- remote: __remote_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
440
+ remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
441
441
 
442
442
  class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
443
443
  def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
@@ -464,7 +464,7 @@ class Function(
464
464
  """
465
465
  ...
466
466
 
467
- class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
467
+ class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
468
468
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
469
469
  """[Experimental] Calls the function with the given arguments, without waiting for the results.
470
470
 
@@ -488,7 +488,7 @@ class Function(
488
488
  ...
489
489
 
490
490
  _experimental_spawn: ___experimental_spawn_spec[
491
- modal._functions.P, modal._functions.ReturnType, typing_extensions.Self
491
+ modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
492
492
  ]
493
493
 
494
494
  class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
@@ -497,7 +497,7 @@ class Function(
497
497
 
498
498
  _spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
499
499
 
500
- class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
500
+ class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
501
501
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
502
502
  """Calls the function with the given arguments, without waiting for the results.
503
503
 
@@ -518,7 +518,7 @@ class Function(
518
518
  """
519
519
  ...
520
520
 
521
- spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
521
+ spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
522
522
 
523
523
  def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
524
524
  """Return the inner Python object wrapped by this Modal Function."""
modal/parallel_map.py CHANGED
@@ -139,7 +139,14 @@ async def _map_invocation(
139
139
  idx = inputs_created
140
140
  update_state(set_inputs_created=inputs_created + 1)
141
141
  (args, kwargs) = argskwargs
142
- return await _create_input(args, kwargs, client.stub, idx=idx, method_name=function._use_method_name)
142
+ return await _create_input(
143
+ args,
144
+ kwargs,
145
+ client.stub,
146
+ max_object_size_bytes=function._max_object_size_bytes,
147
+ idx=idx,
148
+ method_name=function._use_method_name,
149
+ )
143
150
 
144
151
  async def input_iter():
145
152
  while 1:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.0.6.dev9
3
+ Version: 1.0.6.dev11
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -3,7 +3,7 @@ modal/__main__.py,sha256=sTJcc9EbDuCKSwg3tL6ZckFw9WWdlkXW8mId1IvJCNc,2846
3
3
  modal/_clustered_functions.py,sha256=kTf-9YBXY88NutC1akI-gCbvf01RhMPCw-zoOI_YIUE,2700
4
4
  modal/_clustered_functions.pyi,sha256=_QKM87tdYwcALSGth8a0-9qXl02fZK6zMfEGEoYz7eA,1007
5
5
  modal/_container_entrypoint.py,sha256=2Zx9O_EMJg0H77EdnC2vGKs6uFMWwbP1NLFf-qYmWmU,28962
6
- modal/_functions.py,sha256=Qt1QYZ84kqilJ4PYYOLfUy4b6jKv6YyWdJoFxU0xBHw,81072
6
+ modal/_functions.py,sha256=cF17ZyB_Dmy0LHr8sbBULoGv-wheKFqkNwBN2djO4wo,82141
7
7
  modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
8
8
  modal/_location.py,sha256=joiX-0ZeutEUDTrrqLF1GHXCdVLF-rHzstocbMcd_-k,366
9
9
  modal/_object.py,sha256=QWyUGjrGLupITkyvJru2cekizsaVdteAhwMQlw_tE4k,11172
@@ -22,7 +22,7 @@ modal/app.py,sha256=fCKq3TJ2Y5LB2WKNs6pp_5XECNH5avUL01jQljuoYRU,46603
22
22
  modal/app.pyi,sha256=Z6wi_dkXywiaM2rvAvguj2Wgu9ZgPjMSLl1nH1a7EYI,42243
23
23
  modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
24
24
  modal/client.py,sha256=OwISJvkgMb-rHm9Gc4i-7YcDgGiZgwJ7F_PzwZH7a6Q,16847
25
- modal/client.pyi,sha256=37fmB7AmR6Cz7dhvKHykM-W9pMI7X9GTFeDfrXW1F1M,15079
25
+ modal/client.pyi,sha256=zl_EPLUEV_gmqQ_5xh00m4HrFWtdKfwD55do9q4k9ms,15081
26
26
  modal/cloud_bucket_mount.py,sha256=YOe9nnvSr4ZbeCn587d7_VhE9IioZYRvF9VYQTQux08,5914
27
27
  modal/cloud_bucket_mount.pyi,sha256=-qSfYAQvIoO_l2wsCCGTG5ZUwQieNKXdAO00yP1-LYU,7394
28
28
  modal/cls.py,sha256=EFrM949jNXJpmwB2G_1d28b8IpHShfKIEIaiPkZqeOU,39881
@@ -39,7 +39,7 @@ modal/file_io.py,sha256=SCBfLk5gRieqdTVlA_f-2YHHtRp7Iy_sA6iR1zPsO3c,21100
39
39
  modal/file_io.pyi,sha256=_Hm-59MrppfuBYxtzdJkA2Jf9zI5LlbPh_0gURk0_7s,15222
40
40
  modal/file_pattern_matcher.py,sha256=urAue8es8jxqX94k9EYoZxxhtfgOlsEES8lbFHOorzc,7734
41
41
  modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
42
- modal/functions.pyi,sha256=ffW_kkU8AxMuV77ltmjK3nslXW_2iwEjKsT-Cgd4Trs,34840
42
+ modal/functions.pyi,sha256=FJe_91dSrMCRNVT-YV1UhtxFKzIvL_C5q8xdk08-wT8,34840
43
43
  modal/gpu.py,sha256=Fe5ORvVPDIstSq1xjmM6OoNgLYFWvogP9r5BgmD3hYg,6769
44
44
  modal/image.py,sha256=W0Xg-nhsuLDO6weC1lk07MWVZFgZAxRdFqaA-Lt6_AI,94068
45
45
  modal/image.pyi,sha256=ha8QhMPDRmfTSoRlQ8CgV4-AZ7kYKK_-R2UXLyGPgQU,68172
@@ -52,7 +52,7 @@ modal/network_file_system.pyi,sha256=Td_IobHr84iLo_9LZKQ4tNdUB60yjX8QWBaFiUvhfi8
52
52
  modal/object.py,sha256=bTeskuY8JFrESjU4_UL_nTwYlBQdOLmVaOX3X6EMxsg,164
53
53
  modal/object.pyi,sha256=751TV6BntarPsErf0HDQPsvePjWFf0JZK8ZAiRpM1yg,6627
54
54
  modal/output.py,sha256=q4T9uHduunj4NwY-YSwkHGgjZlCXMuJbfQ5UFaAGRAc,1968
55
- modal/parallel_map.py,sha256=uRCIId1C1lHHprG3A5WdWkOBcl2DmlPTAxZAkXUrrow,40765
55
+ modal/parallel_map.py,sha256=hoyGd6DPz87f3WiwsncB2jls3qA1aIYK7G8e1SyO-wQ,40903
56
56
  modal/parallel_map.pyi,sha256=-t3nZ-SvKEK8_xC4A_AmAq6UVpt4ZFtq7rPnWzHGhfg,10290
57
57
  modal/partial_function.py,sha256=SwuAAj2wj4SO6F6nkSnwNZrczEmm9w9YdlQTHh6hr04,1195
58
58
  modal/partial_function.pyi,sha256=-rhLIgXtLpP5weJw7U4aMcDxtFMwXJ1wf-nncPowUMg,14991
@@ -96,7 +96,7 @@ modal/_utils/blob_utils.py,sha256=4R-X3VNUJkc8EDSyGNfgcR5fAAkdpQ9W0O5Fy3PyOlU,20
96
96
  modal/_utils/bytes_io_segment_payload.py,sha256=vaXPq8b52-x6G2hwE7SrjS58pg_aRm7gV3bn3yjmTzQ,4261
97
97
  modal/_utils/deprecation.py,sha256=-Bgg7jZdcJU8lROy18YyVnQYbM8hue-hVmwJqlWAGH0,5504
98
98
  modal/_utils/docker_utils.py,sha256=h1uETghR40mp_y3fSWuZAfbIASH1HMzuphJHghAL6DU,3722
99
- modal/_utils/function_utils.py,sha256=bBfmypTmFnxuo0XyT-hH-6N1CD-NSZVoX7ip6L4mvKA,28070
99
+ modal/_utils/function_utils.py,sha256=wFJcfmGC8RuYeQUORGKg6soLj31Mzw9qfay6CyPSAZE,28130
100
100
  modal/_utils/git_utils.py,sha256=qtUU6JAttF55ZxYq51y55OR58B0tDPZsZWK5dJe6W5g,3182
101
101
  modal/_utils/grpc_testing.py,sha256=H1zHqthv19eGPJz2HKXDyWXWGSqO4BRsxah3L5Xaa8A,8619
102
102
  modal/_utils/grpc_utils.py,sha256=aFDJIK3Idn9r0iqLRmQqCKsPhRCueyeaA64mZUvDNKA,11118
@@ -147,7 +147,7 @@ modal/requirements/2024.10.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddR
147
147
  modal/requirements/PREVIEW.txt,sha256=KxDaVTOwatHvboDo4lorlgJ7-n-MfAwbPwxJ0zcJqrs,312
148
148
  modal/requirements/README.md,sha256=9tK76KP0Uph7O0M5oUgsSwEZDj5y-dcUPsnpR0Sc-Ik,854
149
149
  modal/requirements/base-images.json,sha256=3oKVHov9vE88hMQGnn1OqDQK-ohxNF_TEL2DNPKg09s,1051
150
- modal-1.0.6.dev9.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
150
+ modal-1.0.6.dev11.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
151
151
  modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
152
152
  modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
153
153
  modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
@@ -155,13 +155,13 @@ modal_docs/mdmd/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,2
155
155
  modal_docs/mdmd/mdmd.py,sha256=eW5MzrEl7mSclDo4Uv64sQ1-4IyLggldbgUJdBVLDdI,6449
156
156
  modal_docs/mdmd/signatures.py,sha256=XJaZrK7Mdepk5fdX51A8uENiLFNil85Ud0d4MH8H5f0,3218
157
157
  modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
158
- modal_proto/api.proto,sha256=9omXWIlKv263VKaw8itVaWzPMfy0LHUtv4xAVT5H6YQ,97927
159
- modal_proto/api_grpc.py,sha256=GYwNovPwj07sOoE8dC-cYZNYDPBOMT3dIkUb62aLrVY,119952
160
- modal_proto/api_pb2.py,sha256=Z2cALXXN8ujwjmMWwWW5AB-_fcv7PSusjHB84re6S9E,345062
161
- modal_proto/api_pb2.pyi,sha256=4nJzjsUBIWU-M_oCmELzai_DTnZP0KBENWH8e3VqvAw,470746
162
- modal_proto/api_pb2_grpc.py,sha256=YBLQpJSxBVK846jPPRSbbA4acUEqRMBeAUXsgwh_xI8,259277
163
- modal_proto/api_pb2_grpc.pyi,sha256=4W_ahZAhumFE-ugs8agFWSQoobs6BdjUkiO3BcBX7ew,60735
164
- modal_proto/modal_api_grpc.py,sha256=D8nUUUId-x98-IzPGWh76ERt5COhdeAd4NtoGL5dBpI,18137
158
+ modal_proto/api.proto,sha256=OUvsHwZhB-WMAhzAdHF4g0huOQtVDpSI93s1wngEX94,98254
159
+ modal_proto/api_grpc.py,sha256=Y2-UcWleygG_-WPkC1u4hYejehB6WEwQtaTfTNYxLPU,120808
160
+ modal_proto/api_pb2.py,sha256=gaZc4r_7wfH-sDbKoZNWUNqEkypGc1o8o2XKI4gyADo,346573
161
+ modal_proto/api_pb2.pyi,sha256=LXiJ27WnWQb9SpcDTPPnjpAF_Ua_-0cB0nsK4KDSt0U,472099
162
+ modal_proto/api_pb2_grpc.py,sha256=Owh9lQBI_fIf7imQhUY0htttwxMNwVUlArU0-mjItpc,261040
163
+ modal_proto/api_pb2_grpc.pyi,sha256=Oshss4U3PFWkZe9DckYiuw4jv_4_Ri3sRJ_YxIuXfic,61160
164
+ modal_proto/modal_api_grpc.py,sha256=VuqkS-sNufg1VHjN0um5pVeXDz-MlbKbufbbEqv_ElQ,18263
165
165
  modal_proto/modal_options_grpc.py,sha256=qJ1cuwA54oRqrdTyPTbvfhFZYd9HhJKK5UCwt523r3Y,120
166
166
  modal_proto/options.proto,sha256=zp9h5r61ivsp0XwEWwNBsVqNTbRA1VSY_UtN7sEcHtE,549
167
167
  modal_proto/options_grpc.py,sha256=M18X3d-8F_cNYSVM3I25dUTO5rZ0rd-vCCfynfh13Nc,125
@@ -170,10 +170,10 @@ modal_proto/options_pb2.pyi,sha256=l7DBrbLO7q3Ir-XDkWsajm0d0TQqqrfuX54i4BMpdQg,1
170
170
  modal_proto/options_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
171
171
  modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0yJSI,247
172
172
  modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
173
- modal_version/__init__.py,sha256=0igdmjj_TA_bu_64Kf8GYfCa9PCkUlOhBpHWCe5o69w,120
173
+ modal_version/__init__.py,sha256=UqUMJ7n1L5vP9wjlbC4joFDzFMNE_BFE1_iQEgOqMkE,121
174
174
  modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
175
- modal-1.0.6.dev9.dist-info/METADATA,sha256=dOUwnaRvK0CURlA8BhR66VV12WLjuBA3cr5gcUh_-E8,2461
176
- modal-1.0.6.dev9.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
177
- modal-1.0.6.dev9.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
178
- modal-1.0.6.dev9.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
179
- modal-1.0.6.dev9.dist-info/RECORD,,
175
+ modal-1.0.6.dev11.dist-info/METADATA,sha256=AC8JBvzouxVsKTCU2bFOpfyDI_ZRXbB3N7HuzKNt4pk,2462
176
+ modal-1.0.6.dev11.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
177
+ modal-1.0.6.dev11.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
178
+ modal-1.0.6.dev11.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
179
+ modal-1.0.6.dev11.dist-info/RECORD,,
modal_proto/api.proto CHANGED
@@ -1013,6 +1013,12 @@ message ContainerLogRequest {
1013
1013
  repeated TaskLogs logs = 3;
1014
1014
  }
1015
1015
 
1016
+ message ContainerReloadVolumesRequest {
1017
+ string task_id = 1;
1018
+ }
1019
+
1020
+ message ContainerReloadVolumesResponse { }
1021
+
1016
1022
  message ContainerStopRequest {
1017
1023
  string task_id = 1 [ (modal.options.audit_target_attr) = true ];
1018
1024
  }
@@ -1718,6 +1724,8 @@ message FunctionHandleMetadata {
1718
1724
  FunctionSchema function_schema = 45;
1719
1725
  optional string input_plane_url = 46;
1720
1726
  optional string input_plane_region = 47;
1727
+ // Use optional to ensure unset values default to None instead of 0
1728
+ optional uint64 max_object_size_bytes = 48;
1721
1729
  }
1722
1730
 
1723
1731
  message FunctionInput {
@@ -3281,6 +3289,7 @@ service ModalClient {
3281
3289
  rpc ContainerHeartbeat(ContainerHeartbeatRequest) returns (ContainerHeartbeatResponse);
3282
3290
  rpc ContainerHello(google.protobuf.Empty) returns (google.protobuf.Empty);
3283
3291
  rpc ContainerLog(ContainerLogRequest) returns (google.protobuf.Empty);
3292
+ rpc ContainerReloadVolumes(ContainerReloadVolumesRequest) returns (ContainerReloadVolumesResponse);
3284
3293
  rpc ContainerStop(ContainerStopRequest) returns (ContainerStopResponse);
3285
3294
 
3286
3295
  // Dicts
modal_proto/api_grpc.py CHANGED
@@ -162,6 +162,10 @@ class ModalClientBase(abc.ABC):
162
162
  async def ContainerLog(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.ContainerLogRequest, google.protobuf.empty_pb2.Empty]') -> None:
163
163
  pass
164
164
 
165
+ @abc.abstractmethod
166
+ async def ContainerReloadVolumes(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.ContainerReloadVolumesRequest, modal_proto.api_pb2.ContainerReloadVolumesResponse]') -> None:
167
+ pass
168
+
165
169
  @abc.abstractmethod
166
170
  async def ContainerStop(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.ContainerStopRequest, modal_proto.api_pb2.ContainerStopResponse]') -> None:
167
171
  pass
@@ -860,6 +864,12 @@ class ModalClientBase(abc.ABC):
860
864
  modal_proto.api_pb2.ContainerLogRequest,
861
865
  google.protobuf.empty_pb2.Empty,
862
866
  ),
867
+ '/modal.client.ModalClient/ContainerReloadVolumes': grpclib.const.Handler(
868
+ self.ContainerReloadVolumes,
869
+ grpclib.const.Cardinality.UNARY_UNARY,
870
+ modal_proto.api_pb2.ContainerReloadVolumesRequest,
871
+ modal_proto.api_pb2.ContainerReloadVolumesResponse,
872
+ ),
863
873
  '/modal.client.ModalClient/ContainerStop': grpclib.const.Handler(
864
874
  self.ContainerStop,
865
875
  grpclib.const.Cardinality.UNARY_UNARY,
@@ -1802,6 +1812,12 @@ class ModalClientStub:
1802
1812
  modal_proto.api_pb2.ContainerLogRequest,
1803
1813
  google.protobuf.empty_pb2.Empty,
1804
1814
  )
1815
+ self.ContainerReloadVolumes = grpclib.client.UnaryUnaryMethod(
1816
+ channel,
1817
+ '/modal.client.ModalClient/ContainerReloadVolumes',
1818
+ modal_proto.api_pb2.ContainerReloadVolumesRequest,
1819
+ modal_proto.api_pb2.ContainerReloadVolumesResponse,
1820
+ )
1805
1821
  self.ContainerStop = grpclib.client.UnaryUnaryMethod(
1806
1822
  channel,
1807
1823
  '/modal.client.ModalClient/ContainerStop',