modal 0.73.7__py3-none-any.whl → 0.73.8__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/_functions.py CHANGED
@@ -476,6 +476,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
476
476
  _experimental_buffer_containers: Optional[int] = None,
477
477
  _experimental_proxy_ip: Optional[str] = None,
478
478
  _experimental_custom_scaling_factor: Optional[float] = None,
479
+ _experimental_enable_gpu_snapshot: bool = False,
479
480
  ) -> "_Function":
480
481
  """mdmd:hidden"""
481
482
  # Needed to avoid circular imports
@@ -824,6 +825,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
824
825
  _experimental_buffer_containers=_experimental_buffer_containers or 0,
825
826
  _experimental_proxy_ip=_experimental_proxy_ip,
826
827
  _experimental_custom_scaling=_experimental_custom_scaling_factor is not None,
828
+ _experimental_enable_gpu_snapshot=_experimental_enable_gpu_snapshot,
827
829
  )
828
830
 
829
831
  if isinstance(gpu, list):
@@ -851,6 +853,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
851
853
  _experimental_group_size=function_definition._experimental_group_size,
852
854
  _experimental_buffer_containers=function_definition._experimental_buffer_containers,
853
855
  _experimental_custom_scaling=function_definition._experimental_custom_scaling,
856
+ _experimental_enable_gpu_snapshot=_experimental_enable_gpu_snapshot,
854
857
  _experimental_proxy_ip=function_definition._experimental_proxy_ip,
855
858
  snapshot_debug=function_definition.snapshot_debug,
856
859
  runtime_perf_record=function_definition.runtime_perf_record,
modal/app.py CHANGED
@@ -617,6 +617,7 @@ class _App:
617
617
  _experimental_buffer_containers: Optional[int] = None, # Number of additional, idle containers to keep around.
618
618
  _experimental_proxy_ip: Optional[str] = None, # IP address of proxy
619
619
  _experimental_custom_scaling_factor: Optional[float] = None, # Custom scaling factor
620
+ _experimental_enable_gpu_snapshot: bool = False, # Experimentally enable GPU memory snapshots.
620
621
  ) -> _FunctionDecoratorType:
621
622
  """Decorator to register a new Modal [Function](/docs/reference/modal.Function) with this App."""
622
623
  if isinstance(_warn_parentheses_missing, _Image):
@@ -759,6 +760,7 @@ class _App:
759
760
  i6pn_enabled=i6pn_enabled,
760
761
  cluster_size=cluster_size, # Experimental: Clustered functions
761
762
  include_source=include_source if include_source is not None else self._include_source_default,
763
+ _experimental_enable_gpu_snapshot=_experimental_enable_gpu_snapshot,
762
764
  )
763
765
 
764
766
  self._add_function(function, webhook_config is not None)
@@ -816,6 +818,7 @@ class _App:
816
818
  _experimental_buffer_containers: Optional[int] = None, # Number of additional, idle containers to keep around.
817
819
  _experimental_proxy_ip: Optional[str] = None, # IP address of proxy
818
820
  _experimental_custom_scaling_factor: Optional[float] = None, # Custom scaling factor
821
+ _experimental_enable_gpu_snapshot: bool = False, # Experimentally enable GPU memory snapshots.
819
822
  ) -> Callable[[CLS_T], CLS_T]:
820
823
  """
821
824
  Decorator to register a new Modal [Cls](/docs/reference/modal.Cls) with this App.
@@ -890,6 +893,7 @@ class _App:
890
893
  _experimental_buffer_containers=_experimental_buffer_containers,
891
894
  _experimental_proxy_ip=_experimental_proxy_ip,
892
895
  _experimental_custom_scaling_factor=_experimental_custom_scaling_factor,
896
+ _experimental_enable_gpu_snapshot=_experimental_enable_gpu_snapshot,
893
897
  )
894
898
 
895
899
  self._add_function(cls_func, is_web_endpoint=False)
modal/app.pyi CHANGED
@@ -197,6 +197,7 @@ class _App:
197
197
  _experimental_buffer_containers: typing.Optional[int] = None,
198
198
  _experimental_proxy_ip: typing.Optional[str] = None,
199
199
  _experimental_custom_scaling_factor: typing.Optional[float] = None,
200
+ _experimental_enable_gpu_snapshot: bool = False,
200
201
  ) -> _FunctionDecoratorType: ...
201
202
  @typing_extensions.dataclass_transform(
202
203
  field_specifiers=(modal.cls.parameter,),
@@ -241,6 +242,7 @@ class _App:
241
242
  _experimental_buffer_containers: typing.Optional[int] = None,
242
243
  _experimental_proxy_ip: typing.Optional[str] = None,
243
244
  _experimental_custom_scaling_factor: typing.Optional[float] = None,
245
+ _experimental_enable_gpu_snapshot: bool = False,
244
246
  ) -> collections.abc.Callable[[CLS_T], CLS_T]: ...
245
247
  async def spawn_sandbox(
246
248
  self,
@@ -431,6 +433,7 @@ class App:
431
433
  _experimental_buffer_containers: typing.Optional[int] = None,
432
434
  _experimental_proxy_ip: typing.Optional[str] = None,
433
435
  _experimental_custom_scaling_factor: typing.Optional[float] = None,
436
+ _experimental_enable_gpu_snapshot: bool = False,
434
437
  ) -> _FunctionDecoratorType: ...
435
438
  @typing_extensions.dataclass_transform(
436
439
  field_specifiers=(modal.cls.parameter,),
@@ -475,6 +478,7 @@ class App:
475
478
  _experimental_buffer_containers: typing.Optional[int] = None,
476
479
  _experimental_proxy_ip: typing.Optional[str] = None,
477
480
  _experimental_custom_scaling_factor: typing.Optional[float] = None,
481
+ _experimental_enable_gpu_snapshot: bool = False,
478
482
  ) -> collections.abc.Callable[[CLS_T], CLS_T]: ...
479
483
 
480
484
  class __spawn_sandbox_spec(typing_extensions.Protocol[SUPERSELF]):
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.73.7"
30
+ self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.73.8"
31
31
  ): ...
32
32
  def is_closed(self) -> bool: ...
33
33
  @property
@@ -85,7 +85,7 @@ class Client:
85
85
  _snapshotted: bool
86
86
 
87
87
  def __init__(
88
- self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.73.7"
88
+ self, server_url: str, client_type: int, credentials: typing.Optional[tuple[str, str]], version: str = "0.73.8"
89
89
  ): ...
90
90
  def is_closed(self) -> bool: ...
91
91
  @property
modal/functions.pyi CHANGED
@@ -102,6 +102,7 @@ class Function(
102
102
  _experimental_buffer_containers: typing.Optional[int] = None,
103
103
  _experimental_proxy_ip: typing.Optional[str] = None,
104
104
  _experimental_custom_scaling_factor: typing.Optional[float] = None,
105
+ _experimental_enable_gpu_snapshot: bool = False,
105
106
  ) -> Function: ...
106
107
  def _bind_parameters(
107
108
  self,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: modal
3
- Version: 0.73.7
3
+ Version: 0.73.8
4
4
  Summary: Python client library for Modal
5
5
  Author: Modal Labs
6
6
  Author-email: support@modal.com
@@ -3,7 +3,7 @@ modal/__main__.py,sha256=scYhGFqh8OJcVDo-VOxIT6CCwxOgzgflYWMnIZiMRqE,2871
3
3
  modal/_clustered_functions.py,sha256=kTf-9YBXY88NutC1akI-gCbvf01RhMPCw-zoOI_YIUE,2700
4
4
  modal/_clustered_functions.pyi,sha256=vllkegc99A0jrUOWa8mdlSbdp6uz36TsHhGxysAOpaQ,771
5
5
  modal/_container_entrypoint.py,sha256=qahIuJvaMmWG85N5vNS1yuAQ9XZoo1ftzfatkos_q7I,29553
6
- modal/_functions.py,sha256=4-CRh1Hgi508tEZRFaSRYdS1Oki0MPgAhnUYcEckMe4,70113
6
+ modal/_functions.py,sha256=XTcpMIlGqa3MPSTbnCwvbagTCeIHlnV4g8WlkGF5SOs,70352
7
7
  modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
8
8
  modal/_location.py,sha256=S3lSxIU3h9HkWpkJ3Pwo0pqjIOSB1fjeSgUsY3x7eec,1202
9
9
  modal/_object.py,sha256=ItQcsMNkz9Y3kdTsvfNarbW-paJ2qabDyQ7njaqY0XI,11359
@@ -17,11 +17,11 @@ modal/_traceback.py,sha256=IZQzB3fVlUfMHOSyKUgw0H6qv4yHnpyq-XVCNZKfUdA,5023
17
17
  modal/_tunnel.py,sha256=zTBxBiuH1O22tS1OliAJdIsSmaZS8PlnifS_6S5z-mk,6320
18
18
  modal/_tunnel.pyi,sha256=JmmDYAy9F1FpgJ_hWx0xkom2nTOFQjn4mTPYlU3PFo4,1245
19
19
  modal/_watcher.py,sha256=K6LYnlmSGQB4tWWI9JADv-tvSvQ1j522FwT71B51CX8,3584
20
- modal/app.py,sha256=4tHmc1hFAL9uGj9wp-u7AOPp2mWfu4wJ-633ghFePIY,44248
21
- modal/app.pyi,sha256=ppb3UmJU4oX-Ptd5v_SOQJBP1309qovKaJnH5844pFI,25885
20
+ modal/app.py,sha256=wRygVSrWH8iIqhDAAl2Ww_RAkz8MCJZ0Jt9qYZCF6SA,44626
21
+ modal/app.pyi,sha256=lxiuWzE_OLb3WHg-H7Pek9DGBuCUzZ55P594VhJL5LA,26113
22
22
  modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
23
23
  modal/client.py,sha256=8SQawr7P1PNUCq1UmJMUQXG2jIo4Nmdcs311XqrNLRE,15276
24
- modal/client.pyi,sha256=IdooVP7M-V4EO74JFSFG91VhsFwQVm7-5IQvvu4idL0,7591
24
+ modal/client.pyi,sha256=kOt17KK6b51zHs9T5vme0cCrLzJu-nw1DTE1kSuxXcQ,7591
25
25
  modal/cloud_bucket_mount.py,sha256=YOe9nnvSr4ZbeCn587d7_VhE9IioZYRvF9VYQTQux08,5914
26
26
  modal/cloud_bucket_mount.pyi,sha256=30T3K1a89l6wzmEJ_J9iWv9SknoGqaZDx59Xs-ZQcmk,1607
27
27
  modal/cls.py,sha256=kNnZrBYVXOhgEXU0rDWk2Hr-bQRrsZkMKDgC-TD_6Bs,31063
@@ -40,7 +40,7 @@ modal/file_io.py,sha256=lcMs_E9Xfm0YX1t9U2wNIBPnqHRxmImqjLW1GHqVmyg,20945
40
40
  modal/file_io.pyi,sha256=NTRft1tbPSWf9TlWVeZmTlgB5AZ_Zhu2srWIrWr7brk,9445
41
41
  modal/file_pattern_matcher.py,sha256=1cZ4V2wSLiaXqAqStETSwp3bzDD6QZOt6pmmjk3Okz4,6505
42
42
  modal/functions.py,sha256=kcNHvqeGBxPI7Cgd57NIBBghkfbeFJzXO44WW0jSmao,325
43
- modal/functions.pyi,sha256=pStDYd9PnJVvWs57qhKIVnmYYAhvKdYzVNoNU1A-s_Q,14231
43
+ modal/functions.pyi,sha256=mtngzj8VlzMOQATe6muBN5oH_Gw9zGKxMKZ56Z-41kU,14288
44
44
  modal/gpu.py,sha256=2qZMNnoMrjU-5Bu7fx68pANUAKTtZq0EWEEeBA9OUVQ,7426
45
45
  modal/image.py,sha256=Vjsi7wS9dEcoj-7m7_LmvbK5iqEuFz-SHKl2K-qWcew,90952
46
46
  modal/image.pyi,sha256=A5mW2dBguEhmRo815Ax1rBIMXTCriu7PqLMHoUPsez8,26372
@@ -153,10 +153,10 @@ modal_global_objects/mounts/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0
153
153
  modal_global_objects/mounts/modal_client_package.py,sha256=W0E_yShsRojPzWm6LtIQqNVolapdnrZkm2hVEQuZK_4,767
154
154
  modal_global_objects/mounts/python_standalone.py,sha256=EsC-hdPtiAPOwgW9emHN6muNUkrJwR8dYxroVArxHxM,1841
155
155
  modal_proto/__init__.py,sha256=MIEP8jhXUeGq_eCjYFcqN5b1bxBM4fdk0VESpjWR0fc,28
156
- modal_proto/api.proto,sha256=Ked8dBpkIRf90TAAF1MQkAsu44l3wjVNq7YVX9plzAs,85124
156
+ modal_proto/api.proto,sha256=_RV_hQIWR_CmanZcjieKll-P9P5qVsRDDS7TtGWL4AU,85264
157
157
  modal_proto/api_grpc.py,sha256=FYGqDegM_w_qxdtlxum8k31mDibKoMvmNxv_p9cKdKs,109056
158
- modal_proto/api_pb2.py,sha256=K2y9GzCtyUb7jg6JdX_wL3oAhK_DwWIQytBbm7lu13s,310989
159
- modal_proto/api_pb2.pyi,sha256=_A_5wXULI7OS24VVbKLGigc_Z6ityG1Xp4Z0weZPzK4,414818
158
+ modal_proto/api_pb2.py,sha256=7hj3Dqmv3Xb6nEzLVMt-zai1EGqUT5uAU5nbGjnk85A,311104
159
+ modal_proto/api_pb2.pyi,sha256=ScYf3xdzV3TQZZR-uPusjrEHoHIxKCRPseS7e8Ee_EI,415384
160
160
  modal_proto/api_pb2_grpc.py,sha256=DNp0Et5i_Ey4dKx_1o1LRtYhyWYyT0NzTcAY4EcHn-c,235765
161
161
  modal_proto/api_pb2_grpc.pyi,sha256=RI6tWC3L8EIN4-izFSEGPPJl5Ta0lXPNuHUJaWAr35s,54892
162
162
  modal_proto/modal_api_grpc.py,sha256=UG8WJU81afrWPwItWB4Ag64E9EpyREMpBbAVGVEYJiM,14550
@@ -170,10 +170,10 @@ modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0y
170
170
  modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
171
171
  modal_version/__init__.py,sha256=wiJQ53c-OMs0Xf1UeXOxQ7FwlV1VzIjnX6o-pRYZ_Pk,470
172
172
  modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
173
- modal_version/_version_generated.py,sha256=o0syRK3ZmTNxvzqCB10qZ2o4WuVW_Wn0HqidHCkVvJk,148
174
- modal-0.73.7.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
175
- modal-0.73.7.dist-info/METADATA,sha256=L5RUur3zp_azxXlfZQ-mqgOpuwt5LsYZOoFxhYHr6UY,2329
176
- modal-0.73.7.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
177
- modal-0.73.7.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
178
- modal-0.73.7.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
179
- modal-0.73.7.dist-info/RECORD,,
173
+ modal_version/_version_generated.py,sha256=a8LMamoFRZKpp6SoTp5bDH1HRWGljeWLZesEIHf3WIE,148
174
+ modal-0.73.8.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
175
+ modal-0.73.8.dist-info/METADATA,sha256=wsn98lBqsvSVbab7C3DqlgtiyUF8vmevqqGNf7Ir6WE,2329
176
+ modal-0.73.8.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
177
+ modal-0.73.8.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
178
+ modal-0.73.8.dist-info/top_level.txt,sha256=1nvYbOSIKcmU50fNrpnQnrrOpj269ei3LzgB6j9xGqg,64
179
+ modal-0.73.8.dist-info/RECORD,,
modal_proto/api.proto CHANGED
@@ -1263,6 +1263,8 @@ message Function {
1263
1263
  bool _experimental_custom_scaling = 76;
1264
1264
 
1265
1265
  string cloud_provider_str = 77; // Supersedes cloud_provider
1266
+
1267
+ bool _experimental_enable_gpu_snapshot = 78; // Experimental support for GPU snapshotting
1266
1268
  }
1267
1269
 
1268
1270
  message FunctionAsyncInvokeRequest {
@@ -1376,6 +1378,7 @@ message FunctionData {
1376
1378
  uint32 _experimental_group_size = 19;
1377
1379
  uint32 _experimental_buffer_containers = 22;
1378
1380
  bool _experimental_custom_scaling = 23;
1381
+ bool _experimental_enable_gpu_snapshot = 30;
1379
1382
  string worker_id = 7; // for internal debugging use only
1380
1383
 
1381
1384
  uint32 timeout_secs = 8;