modal 0.72.23__py3-none-any.whl → 0.72.25__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.
modal/app.py CHANGED
@@ -445,11 +445,13 @@ class _App:
445
445
  return [m for m in all_mounts if m.is_local()]
446
446
 
447
447
  def _add_function(self, function: _Function, is_web_endpoint: bool):
448
- if function.tag in self._functions:
448
+ if old_function := self._functions.get(function.tag, None):
449
+ if old_function is function:
450
+ return # already added the same exact instance, ignore
451
+
449
452
  if not is_notebook():
450
- old_function: _Function = self._functions[function.tag]
451
453
  logger.warning(
452
- f"Warning: Tag '{function.tag}' collision!"
454
+ f"Warning: function name '{function.tag}' collision!"
453
455
  " Overriding existing function "
454
456
  f"[{old_function._info.module_name}].{old_function._info.function_name}"
455
457
  f" with new function [{function._info.module_name}].{function._info.function_name}"
@@ -998,13 +1000,6 @@ class _App:
998
1000
  ```
999
1001
  """
1000
1002
  for tag, function in other_app._functions.items():
1001
- existing_function = self._functions.get(tag)
1002
- if existing_function and existing_function != function:
1003
- logger.warning(
1004
- f"Named app function {tag} with existing value {existing_function} is being "
1005
- f"overwritten by a different function {function}"
1006
- )
1007
-
1008
1003
  self._add_function(function, False) # TODO(erikbern): webhook config?
1009
1004
 
1010
1005
  for tag, cls in other_app._classes.items():
modal/client.pyi CHANGED
@@ -27,7 +27,7 @@ class _Client:
27
27
  _snapshotted: bool
28
28
 
29
29
  def __init__(
30
- self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.72.23"
30
+ self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.72.25"
31
31
  ): ...
32
32
  def is_closed(self) -> bool: ...
33
33
  @property
@@ -83,7 +83,7 @@ class Client:
83
83
  _snapshotted: bool
84
84
 
85
85
  def __init__(
86
- self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.72.23"
86
+ self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.72.25"
87
87
  ): ...
88
88
  def is_closed(self) -> bool: ...
89
89
  @property
modal/functions.pyi CHANGED
@@ -463,11 +463,11 @@ class Function(typing.Generic[P, ReturnType, OriginalReturnType], modal.object.O
463
463
 
464
464
  _call_generator_nowait: ___call_generator_nowait_spec
465
465
 
466
- class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
466
+ class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
467
467
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
468
468
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
469
469
 
470
- remote: __remote_spec[ReturnType, P]
470
+ remote: __remote_spec[P, ReturnType]
471
471
 
472
472
  class __remote_gen_spec(typing_extensions.Protocol):
473
473
  def __call__(self, *args, **kwargs) -> typing.Generator[typing.Any, None, None]: ...
@@ -480,17 +480,17 @@ class Function(typing.Generic[P, ReturnType, OriginalReturnType], modal.object.O
480
480
  def _get_obj(self) -> typing.Optional[modal.cls.Obj]: ...
481
481
  def local(self, *args: P.args, **kwargs: P.kwargs) -> OriginalReturnType: ...
482
482
 
483
- class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
483
+ class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
484
484
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
485
485
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
486
486
 
487
- _experimental_spawn: ___experimental_spawn_spec[ReturnType, P]
487
+ _experimental_spawn: ___experimental_spawn_spec[P, ReturnType]
488
488
 
489
- class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
489
+ class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
490
490
  def __call__(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
491
491
  async def aio(self, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
492
492
 
493
- spawn: __spawn_spec[ReturnType, P]
493
+ spawn: __spawn_spec[P, ReturnType]
494
494
 
495
495
  def get_raw_f(self) -> typing.Callable[..., typing.Any]: ...
496
496
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: modal
3
- Version: 0.72.23
3
+ Version: 0.72.25
4
4
  Summary: Python client library for Modal
5
5
  Author: Modal Labs
6
6
  Author-email: support@modal.com
@@ -16,11 +16,11 @@ modal/_traceback.py,sha256=IZQzB3fVlUfMHOSyKUgw0H6qv4yHnpyq-XVCNZKfUdA,5023
16
16
  modal/_tunnel.py,sha256=zTBxBiuH1O22tS1OliAJdIsSmaZS8PlnifS_6S5z-mk,6320
17
17
  modal/_tunnel.pyi,sha256=JmmDYAy9F1FpgJ_hWx0xkom2nTOFQjn4mTPYlU3PFo4,1245
18
18
  modal/_watcher.py,sha256=K6LYnlmSGQB4tWWI9JADv-tvSvQ1j522FwT71B51CX8,3584
19
- modal/app.py,sha256=kUw4y1PtXHdQPemnl30EhUuP91tZxCXJju0tCTFsqRo,45612
19
+ modal/app.py,sha256=UOuqlCKlFAjOXCacXmoEMM90FnqFwPRXUhLh0Gi6xzg,45344
20
20
  modal/app.pyi,sha256=5D3LkPP6qvTIl2_YgiyhNQ9X4VsOVuxd69a23UmohDg,25477
21
21
  modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
22
22
  modal/client.py,sha256=8SQawr7P1PNUCq1UmJMUQXG2jIo4Nmdcs311XqrNLRE,15276
23
- modal/client.pyi,sha256=RyHOBACbzE5dtGcHAnmBLILrI6DiFQ5VovSYE_49P8w,7326
23
+ modal/client.pyi,sha256=v7As-8Qo6u5RGHxKNF07cGCMEy79SL3YINRR5hqNVMk,7326
24
24
  modal/cloud_bucket_mount.py,sha256=G7T7jWLD0QkmrfKR75mSTwdUZ2xNfj7pkVqb4ipmxmI,5735
25
25
  modal/cloud_bucket_mount.pyi,sha256=CEi7vrH3kDUF4LAy4qP6tfImy2UJuFRcRbsgRNM1wo8,1403
26
26
  modal/cls.py,sha256=xHgZZAmymplw0I2YZGAA8raBboixdNKKTrnsxQZI7G8,32159
@@ -38,7 +38,7 @@ modal/file_io.py,sha256=lcMs_E9Xfm0YX1t9U2wNIBPnqHRxmImqjLW1GHqVmyg,20945
38
38
  modal/file_io.pyi,sha256=NrIoB0YjIqZ8MDMe826xAnybT0ww_kxQM3iPLo82REU,8898
39
39
  modal/file_pattern_matcher.py,sha256=dSo7BMQGZBAuoBFOX-e_72HxmF3FLzjQlEtnGtJiaD4,6506
40
40
  modal/functions.py,sha256=IP-6oHMmt-wUJPBWJ7Y7Vw2vqk2bYFRSQmV38T2STTI,68371
41
- modal/functions.pyi,sha256=EcGd1uGnJVbnMmdsnANYeDjLzjaL8BREG3XgxaDPcvM,25473
41
+ modal/functions.pyi,sha256=eoXG53WPMnHY7N8dblghdLEBQ47k8uiSSaCDP9LfNxA,25473
42
42
  modal/gpu.py,sha256=MTxj6ql8EpgfBg8YmZ5a1cLznyuZFssX1qXbEX4LKVM,7503
43
43
  modal/image.py,sha256=leeY7fLfFjS0IqTi3D4cRxIDOb80BPtb3jsQfqvVJ8c,90912
44
44
  modal/image.pyi,sha256=X9vj6cwBdYh8q_2cOd-2RSYNMF49ujcy0lrOXh_v1xc,26049
@@ -149,10 +149,10 @@ modal_global_objects/mounts/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0
149
149
  modal_global_objects/mounts/modal_client_package.py,sha256=W0E_yShsRojPzWm6LtIQqNVolapdnrZkm2hVEQuZK_4,767
150
150
  modal_global_objects/mounts/python_standalone.py,sha256=pEML5GaV2_0ahci_1vpfc_FnySpsfi2fhYmFF5I7IiQ,1837
151
151
  modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
152
- modal_proto/api.proto,sha256=hReQ7d8S82HSWZxPDoBEyUVx83AZm8z0vD7lJSYNI84,82883
152
+ modal_proto/api.proto,sha256=hoUhkUf5KwZB4QLzZsr6sBbzSRYyeViF14znxg4RyJM,82964
153
153
  modal_proto/api_grpc.py,sha256=U2-xzAtfSS017rCpNHmscNHLl6FSQ1mjJY8BhPXovpk,104423
154
- modal_proto/api_pb2.py,sha256=m841BuoFLlZ6M392yed-B-xBHNH_MkBlNdK3fJmt27I,302465
155
- modal_proto/api_pb2.pyi,sha256=6lTuMh0VgQLZ_Pe5gUyu5sf0h9dR6JtTkRriI3a_Wlc,404911
154
+ modal_proto/api_pb2.py,sha256=L9DeWJ0Za3gyVd6ebqtcQayV6i272mXDFzyfMEXYU1Q,302513
155
+ modal_proto/api_pb2.pyi,sha256=cu22QMoVIJerEmktrIBxNFMgy7J424-ZKi1WOW82PA8,405136
156
156
  modal_proto/api_pb2_grpc.py,sha256=upL_jT9kJXcvOq-fl6VU8OBPqvDj6bqh0UE2ipgrY4I,225767
157
157
  modal_proto/api_pb2_grpc.pyi,sha256=zEO6zm_ImjG7a8PtkdohHRsPSnrZQKzg5y1ZVi6dFF8,52620
158
158
  modal_proto/modal_api_grpc.py,sha256=f6SJgIPmHx4RJmi5vPIanOCtIFXFdxHoUqcU8wPdn8g,13952
@@ -166,10 +166,10 @@ modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0y
166
166
  modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
167
167
  modal_version/__init__.py,sha256=kGya2ZlItX2zB7oHORs-wvP4PG8lg_mtbi1QIK3G6SQ,470
168
168
  modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
169
- modal_version/_version_generated.py,sha256=7t3sZ0hizGmGicCBdVPNkmCDMo5RpTycigqk-Zz329s,149
170
- modal-0.72.23.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
171
- modal-0.72.23.dist-info/METADATA,sha256=rk93OQTYs6q87B8UtykTuwkILcj9nZez1ncHceRxPag,2329
172
- modal-0.72.23.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
173
- modal-0.72.23.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
174
- modal-0.72.23.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
175
- modal-0.72.23.dist-info/RECORD,,
169
+ modal_version/_version_generated.py,sha256=Y-higuGbX2qsU0SqgF5nVUI9Ocjz7yUSrC08BFb2OSk,149
170
+ modal-0.72.25.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
171
+ modal-0.72.25.dist-info/METADATA,sha256=_V6VJPqymeT81J-Fj13tqT8WC-p6peNXZAZWl4U_ZFY,2329
172
+ modal-0.72.25.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
173
+ modal-0.72.25.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
174
+ modal-0.72.25.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
175
+ modal-0.72.25.dist-info/RECORD,,
modal_proto/api.proto CHANGED
@@ -607,6 +607,8 @@ message CheckpointInfo {
607
607
  int64 size = 5;
608
608
  bool checksum_is_file_index = 6;
609
609
  string original_task_id = 7;
610
+ // snapshot version used to take the checkpoint
611
+ uint32 snapshot_version = 8;
610
612
  }
611
613
 
612
614
  message ClassCreateRequest {